8.6 管道符和做業控制linux
8.7/8.8 shell變量shell
8.9 環境變量配置文件bash
8.6 管道符和做業控制:ssh
~cat 1.txt |wc -l ; cat 1.txt |grep 'aaa'.net
管道符前面的命令輸出的結果給後面的命令進程
~ctrl z 暫停一個任務字符串
好比在編輯一個文件,想要查看磁盤空間,能夠ctrl z暫停。fg能夠把暫停的這個任務在調回來get
可暫停多個任務it
~jobs查看後臺的任務ast
jobs能夠把ctrl z的任務調出來,調出全部後臺的任務
~bg[id]把任務調到後臺
能夠把一個正在執行的任務,搞到後臺。
多個任務可後面加序號
不加序號就是執行最後一個
~fg[id]把任務調到前臺
jobs可查看多個已中止的任務,fg 後面加序號,可回到這個序號的任務
不加序號,執行最後一個
~命令後面加&直接丟到後臺
~兩個終端是沒法使用jobs查看的,但能夠查看進程
---------------------------------------------------------------------------------------------------------------------------------------
8.7/8.8 shell變量:
~1.PATH,HOME,PWD,LOGNAME
~2.env命令
~3.set命令多了不少變量,而且包括用戶自定義的變量
~4.自定義變量a=111
~5.變量名規則:字母、數字下劃線,首位不能爲數字
能夠寫a=1 或者a_1=1 又或者_a=1,可是不能寫1=1
~6.變量值有特殊符號是須要用單引號括起來
例如空格,a=‘1 2 3’
~7.變量的累加,(重點,實例有介紹單引號、雙引號的用法)
可累計查看 echo $a$b
雙引號、單引號
~8.全局變量export b=2 (詳細看實例)
bash生成一個子shell
exit返回上一個shell
在一個終端下設置的變量設置的,在另外一個下看不到的叫非全局變量或本地變量
全局變量只往下生效,子文件-子子文件這樣生效。往上不生效,子文件不會影響父文件
也就是說,創建了1文件和2文件,1能使用2的變量,但2不能使用1的變量
運行子shell,直接運行bash
~9.unset變量
unset後面跟變量的名字,可取消名字
變量的名字一般是大寫的英文字母
變量的值不必定是大寫的
env可查看變量
set也可查看變量,也包括用戶的變量,set通常是shell腳本
4.
咱們能夠自定義用戶的變量,就是PATH
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# a=111
[root@localhost ~]# echo $a
111
[root@localhost ~]# set |grep '111'
_=111
a=111
固然不是系統內核的。他只在set裏找到,也就是用戶自定義的變量
5.
[root@localhost ~]# a=1
[root@localhost ~]# echo $a
1
[root@localhost ~]# a_1=1
[root@localhost ~]# echo $a_1
1
[root@localhost ~]# _a=1
[root@localhost ~]# echo $_a
1
[root@localhost ~]# 1=1
-bash: 1=1: 未找到命令
[root@localhost ~]# 2=a
-bash: 2=a: 未找到命令
6.
[root@localhost ~]# a=1 2 3
-bash: 2: 未找到命令
[root@localhost ~]# a='1 2 3'
[root@localhost ~]# echo $a
1 2 3
7.
[root@localhost ~]# a=1
[root@localhost ~]# b=2
[root@localhost ~]# echo $a$b 簡單的能夠直接寫
12
[root@localhost ~]# a='a$bc' a=複雜的 用單引號括起來
[root@localhost ~]# echo $a$b 再次$a$b
a$bc2 a就表明了上邊用單引號括起來的字符
[root@localhost ~]# c=a"$b"c 若是想要讓c=$b的值,就要用雙引號括起來
[root@localhost ~]# echo $c 因此他所表達出來的值,就是$b結果的值,而不是表明$b這個字符
a2c
8.
按 w 能夠看到有幾個登陸的
[root@localhost ~]# w
15:26:00 up 8 min, 2 users, load average: 0.01, 0.12, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.159.1 15:19 0.00s 0.13s 0.04s w
root pts/1 192.168.159.1 15:25 23.00s 0.05s 0.05s -bash
登陸的 各分配了 分別從這個IP
都是root TTY 登過來
兩個終端咱們分別看一下,各自的TTY
[root@localhost ~]# echo $SSH_TTY
/dev/pts/0 分別對應以上的TTY
[root@localhost ~]# echo $SSH_TTY
/dev/pts/1 分別對應以上的TTY
咱們在終端1上設置axin=linux這個變量,在終端2上是沒有的
[root@localhost ~]# axin=linux
[root@localhost ~]# echo $axin
linux 終端1上定義,有這個變量
[root@localhost ~]# echo $axin
終端2上就沒有
[root@localhost ~]#
shell自己是一個進程。咱們輸入 bash,至關於進入另外一個終端。再w一下
[root@localhost ~]# bash
[root@localhost ~]# w 發現仍然在pts/0
15:38:11 up 20 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.159.1 15:19 3.00s 0.17s 0.02s w
root pts/1 192.168.159.1 15:25 3:47 0.05s 0.05s -bash
pstree一下,咱們linux上沒有pstree這個命令,安裝了psmisc
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───bash───pstree 咱們如今這這個位置,前面的bash是咱們剛打開的新 的bash,在他的基礎上運行這個命令叫pstree
│ └─sshd───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
咱們再運行echo $axin,發現也沒有生效咱們以前設置的axin=linux
[root@localhost ~]# echo $axin
[root@localhost ~]#
咱們exit,退出剛纔那個bash
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $axin 發現有有了剛纔設置的axin=linux
linux
像這樣的叫爲非全局變量,或者本地變量(load),僅僅在這個終端下生效
那怎麼變成全局的呢:
[root@localhost ~]# export axin=linux 使用export
[root@localhost ~]# echo $axin
linux
[root@localhost ~]# bash 咱們再bash一個
[root@localhost ~]# echo $axin 就有了
linux
這個就叫作全局變量,也就是說在一開始的那個bash咱們設置了axin=linux,那麼他的子bash或者子子bash都生效。
可是在另外一個終端下不會生效,例如,咱們再打開另外一個終端,pstree
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─irqbalance
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───bash───bash
│ └─sshd───bash───pstree 咱們在這,他跟上面的是並列關係,因此不會生效
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
演練了這麼多,咱們得出一個結論。
因此,所謂的全局變量,是向下的。在這個shell的基礎上生成子shell,子子shell等等,這樣的話是生效的。不會向上的全局的!!
---------------------------------------------------------------------------------------------------------------------------------------
8.9 環境變量配置文件:
系統層次(這兩個文件不要動):
~ /etc/profile 用戶環境變量,交互,登陸才執行
咱們登陸纔會執行。他會調用bashrc
~ /etc/bashrc 用戶不用登陸,執行shell就生效
咱們執行shell就能夠生效。bashrc是執行shell腳本的時候,用戶不用登陸,就能夠執行shell腳本,只要執行shell,他就會調用bashrc裏面的一些配置
用戶層次:
~ ~/.bashrc
~ ~/.bash_profile
~ ~/.bash_history
~ ~/bash_logout
用戶退出的時候,須要作的一些操做
例如,讓一個用戶每次退出的時候都要刪除他的命令歷史。就能夠把這個配置文件放到logout裏面
~ ps1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'
ps1表示 [root@axinlinux-01 ~]# 。echo $ps1能夠查看這些配置文件,都是能夠改的。但日常不會 去動
後面的這些字符串是設置 [root@axinlinux-01 ~]# 的顏色
ps2表示 進入另外一個終端,例如MYSQL的時候所顯示的。但僅僅是一個>