8.6 管道符和做業控制 linux
8.7/8.8 shell變量shell
8.9 環境變量配置文件 vim
擴展 bashrc和bash_profile的區別 http://ask.apelbash
8.6 管道符和做業控制 session
管道符|ssh
管道符|用於將前一個指令的輸出做爲後一個指令的輸入。spa
統計1.txt的行數。.net
[root@localhost ~]# cat 1.txt | wc -l
2dns
統計/root目錄下的文件和目錄(不包括隱藏的)個數。
[root@localhost ~]# ls | wc -l
11
列出當前目錄下的文件(包括隱藏文件)個數進程
[root@localhost ~]# find ./ -type f | wc -l
19
[root@localhost ~]#
做業控制
當進行進程時,你可使它暫停(按Ctrl+Z組合鍵),而後使用fg(foreground的簡寫)命令恢復它,或是利用bg(background的簡寫)命令使它到後臺運行。此外,你也可使它終止(按Ctrl+C組合鍵)。
使用vi命令編輯test1.txt,隨便輸入一些內容,按Esc鍵後,使用Ctrl+Z組合鍵暫停任務。此時提示test1.txt已經中止了,而後使用fg命令恢復它,此時又進入剛纔的vi窗口了。再次使其暫停,而後輸入jobs,能夠看到被暫停或者在後臺運行的任務。若是想把暫停的任務放在後臺從新運行,就是用bg命令。多個被暫停的任務會有編號,使用jobs命令能夠看到兩個任務,使用bg命令或者fg命令時,則須要在後面加上編號。
如何關掉在後臺運行的任務呢?若是你沒有退出剛纔的shell,那麼應該先使用命令fg編號把任務調到前臺,而後Ctrl+C組合鍵結束任務。另外一種狀況,關閉當前的shell,再次打開另外一個shell時,使用jobs命令並不會顯示在後臺運行或者被暫停的任務。要想關閉這些任務,則須要先知道它們的pid。使用&把任務放到後臺運行時,會顯示pid信息。若是忘掉這個pid,還可使用ps aux命令找到那個進程。若是想結束該進程,須要使用kill命令。kill命令很簡單,直接在後面加pid便可。若是遇到結束不了的進程,能夠在kill後面加一個選項,即kill -9 [pid]。
ctrl z 臨時暫停一個任務,而後就能夠退回到命令窗口作其餘事情。
[root@localhost ~]# vim 1.txt
[1]+ Stopped vim 1.txt
[root@localhost ~]#
fg[id]把任務調到前臺,支持多個任務
[root@localhost ~]# vim 2.txt
[2]+ Stopped vim 2.txt
[root@localhost ~]# fg 1
vim 1.txt
[1]+ Stopped vim 1.txt
jobs查看後臺的任務,能夠把中止的或者已經丟到後臺的任務列出來
[root@localhost ~]# jobs
[1]+ Stopped vim 1.txt
[2]- Stopped vim 2.txt
bg [id]把任務調到後臺,就是在後臺運行起來。
[root@localhost ~]# bg 2
[2]- vim 2.txt &
[2]+ Stopped vim 2.txt
[root@localhost ~]# jobs
[1]- Stopped vim 1.txt
[2]+ Stopped vim 2.txt
[root@localhost ~]# fg 2
vim 2.txt
保存退出。
[root@localhost ~]# jobs
[1]+ Stopped vim 1.txt
vmstat命令查看系統的運行情況
[root@localhost ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1193296 2084 373572 0 0 85 7 79 84 0 0 98 1 0
0 0 0 1193296 2084 373604 0 0 0 0 73 76 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 6 126 134 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 149 147 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 113 112 0 1 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 121 125 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 120 121 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 123 127 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 108 105 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 118 126 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 120 119 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 121 124 0 0 100 0 0
0 0 0 1193296 2084 373604 0 0 0 0 110 109 0 1 100 0 0
0 0 0 1193172 2084 373604 0 0 0 0 180 165 0 0 100 0 0
0 0 0 1193172 2084 373604 0 0 0 0 124 125 0 0 100 0 0
0 0 0 1193172 2084 373604 0 0 0 0 120 124 0 0 100 0 0
0 0 0 1193172 2084 373604 0 0 0 0 113 115 0 0 100 0 0
0 0 0 1193172 2084 373604 0 0 0 0 108 113 0 0 100 0 0
^Z
[2]+ Stopped vmstat 1
bg將命令調回後臺,fg將命令調回前臺,ctrl c終止一個命令。
命令sleep +n表示中止n秒。
[root@localhost ~]# sleep 1000
^Z
[1]+ Stopped sleep 1000
[root@localhost ~]# jobs
[1]+ Stopped sleep 1000
[root@localhost ~]# sleep 200
^Z
[2]+ Stopped sleep 200
[root@localhost ~]# jobs
[1]- Stopped sleep 1000
[2]+ Stopped sleep 200
fg不加數字,表明調最近的一個暫停的程序到前臺。
[root@localhost ~]# fg
sleep 200
^Z
[2]+ Stopped sleep 200
bg 加數字,表明將這個程序丟到後臺並運行。
[root@localhost ~]# bg 1
[1]- sleep 1000 &
[root@localhost ~]# jobs
[1]- Running sleep 1000 &
[2]+ Stopped sleep 200
[root@localhost ~]# fg 1
sleep 1000
^C
[root@localhost ~]# jobs
[2]+ Stopped sleep 200
[root@localhost ~]# fg
sleep 200
[root@localhost ~]# jobs
[root@localhost ~]#
命令後面加&直接丟到後臺
[root@localhost ~]# sleep 100 &
[1] 3359
[root@localhost ~]# jobs
[1]+ Running sleep 100 &
[root@localhost ~]#
ps aux命令用於查看進程。
[root@localhost ~]# ps aux | grep sleep
root 3359 0.0 0.0 107904 612 pts/0 S 19:50 0:00 sleep 100
root 3367 0.0 0.0 107904 608 ? S 19:51 0:00 sleep 60
root 3369 0.0 0.0 112660 968 pts/0 S+ 19:52 0:00 grep --color=auto sleep
[root@localhost ~]#
8.7/8.8 shell變量
環境變量PATH,它是shell預設的一個變量。一般,shell預設的變量都是大寫的。變量就是使用一個較簡單的字符串來代替某些具備特殊意義的設定以及數據。就拿PATH來說,這個PATH就代替了全部經常使用命令的絕對路徑的設定。有了PATH這個變量,咱們運行某個命令時,就不須要再輸入全局路徑,直接輸入命令名便可。變量有PATH,HOME,PWD,LOGNAME,能夠經過env命令來獲取到這些變量。
使用env命令,可列出系統預設的所有系統變量。
登錄不一樣的用戶,這些環境變量的值也不一樣。
HOSTNAME:表示主機名稱
SHELL:當前用戶的shell類型
HISTSIZE:歷史記錄數
MAIL:當前用戶的郵件存放目錄
PATH:該變量決定了shell將到哪些目錄中尋找命令或者程序
PWD:當前目錄
LANG:這是與語言相關的環境變量,多語言環境能夠修改此環境變量
HOME:當前用戶的家目錄
LOGNAME:當前用戶的登陸名
env命令顯示的變量只是環境變量,系統預設的變量還有不少,可使用set命令把系統預設的所有變量都顯示出來。
set命令多了不少變量,而且包括用戶自定義的變量
set命令不只能夠顯示系統預設的變量,也能夠顯示用戶自定義的變量。
[root@localhost ~]# a=111
[root@localhost ~]# echo $a
111
[root@localhost ~]#
這個變量和系統變量不太同樣,是用戶自定義的,不是系統內置的。
雖然能夠自定義變量,可是該變量只能在當前shell中生效。使用bash命令能夠再打開一個shell,此時先前設置的變量已經不存在了,退出當前的shell回到原來的bash,設定的變量還在。
想讓設置的變量環境一直有效的兩種狀況以下:
狀況一:
容許系統內全部用戶登陸後都能使用該變量。具體方法:在/etc/profile文件的最後一行加入export myname=Aming,而後運行source /etc/profile就能夠生效了。此時再運行bash或者切換到其餘帳戶就能夠看到效果了。
狀況二:
僅容許當前用戶使用該變量。具體方法:再用戶主目錄下的.bashrc文件的最後一行加入
export myname=Aming,而後運行source .bashrc就能夠生效了。此時再運行bash就能夠看到效果了。
這裏source的做用是將目前設定的配置刷新,即不用註銷再登錄也能生效。
env和set命令不用過多糾結。
變量的定義規則
在linux下自定義設置變量的規則以下:
一、設定變量的格式爲a=b,其中a爲變量名,b爲變量的內容,等號兩邊不能有空格。
二、變量名只能由字母、數字以及下劃線組成,並且不能以數字開頭。
三、當變量內容帶有特殊符號(如空格)時,須要加上單引號。
四、當變量內容中自己帶有單引號時,此時就須要加雙引號了。
五、當變量內容須要用到其餘命令時,運行結果則可使用反引號。
[root@localhost ~]# a1=2
[root@localhost ~]# echo $a1
2
[root@localhost ~]# a_1=3
[root@localhost ~]# echo $a_1
3
[root@localhost ~]# _a1=4
[root@localhost ~]# echo $_a1
4
[root@localhost ~]# 1aa=2
bash: 1aa=2: command not found...
[root@localhost ~]# a='a b c'
[root@localhost ~]# echo $a
a b c
[root@localhost ~]# a="a b c"
[root@localhost ~]# echo $a
a b c
[root@localhost ~]#
建議用單引號,雙引號沒法保證正確性。
[root@localhost ~]# a="a$bc"
[root@localhost ~]# echo $a
a
[root@localhost ~]# a='a$bc'
[root@localhost ~]# echo $a
a$bc
[root@localhost ~]#
變量內容能夠累加其餘變量的內容,但須要加上雙引號。若是把雙引號錯加爲單引號,則不能獲得想要的內容。
[root@localhost ~]# a=1
[root@localhost ~]# b=2
[root@localhost ~]# echo $a$b
12
[root@localhost ~]# a='a$bc'
[root@localhost ~]# echo $a$b
a$bc2
[root@localhost ~]# c="a$b"c
[root@localhost ~]# echo $c
a2c
[root@localhost ~]# c='a$b'c
[root@localhost ~]# echo $c
a$bc
[root@localhost ~]#
雙引號和單引號的區別:使用雙引號時,不會取消雙引號中特殊符號自己的做用;而使用單引號時,裏面的特殊字符將所有失去其自己的做用。
如在當前shell中運行bash命令,則會進入一個新的shell,這個shell就是原來shell的子shell。用pstree命令能夠查看,若是pstree命令沒有安裝,能夠經過yum install –y psmisc命令安裝。pstree會把linux系統中的全部進程以樹形結構顯示出來。在父shell中設定變量後,進入子shell時,該變量是不會生效的。若是想讓這個變量在子shell中生效,則要用到export指令。
其實export的做用就是聲明一下這個變量,讓該shell的子shell也知道該變量的值。設置變量以後,若是想取消這個變量,只要輸入unset 變量名便可。
怎麼查看本身在哪一個終端下呢?
[root@localhost ~]# w
21:25:16 up 3:13, 1 user, load average: 0.14, 0.05, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 18:13 4.00s 0.19s 0.04s w
[root@localhost ~]# echo $SSH_TTY
/dev/pts/0
打開另外一個終端,查看具體在哪一個終端下。
[root@localhost ~]# w
21:28:46 up 3:16, 2 users, load average: 0.46, 0.20, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 18:13 2:46 0.15s 0.15s -bash
root pts/2 192.168.231.1 21:28 6.00s 0.05s 0.01s w
[root@localhost ~]# echo $SSH_TTY
/dev/pts/2
[root@localhost ~]#
在終端1定義aming=linux,在終端2上是查看不到的。
[root@localhost ~]# aming=linux
[root@localhost ~]# echo $aming
linux
[root@localhost ~]#
[root@localhost ~]# echo $aming #終端2下沒法查看
[root@localhost ~]#
在終端1中,再進入一個shell,也就是子shell。
[root@localhost ~]# bash
[root@localhost ~]# w
21:33:22 up 3:21, 2 users, load average: 0.08, 0.09, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 18:13 2.00s 0.19s 0.00s w
root pts/2 192.168.231.1 21:28 2:10 0.04s 0.04s -bash
[root@localhost ~]#
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-dbus───2*[{abrt-dbus}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─agetty
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─X───3*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───5*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─10*[{gnome-shell}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mcelog
├─packagekitd───2*[{packagekitd}]
├─pcscd───2*[{pcscd}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd───sshd─┬─bash───bash───pstree #咱們在這裏
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
[root@localhost ~]#
在子shell中查看變量aming,也是沒有生效的。
[root@localhost ~]# echo $aming
[root@localhost ~]#
這個變量aming只在上面那個shell中生效,如今退出子shell。
[root@localhost ~]# exit
exit
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─agetty
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─X───3*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───5*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─10*[{gnome-shell}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mcelog
├─packagekitd───2*[{packagekitd}]
├─pcscd───2*[{pcscd}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd───sshd─┬─bash───pstree #如今在這裏
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
[root@localhost ~]#
這種變量叫本地變量,也叫local,只在當前終端下生效,那如何變成全局變量呢?
[root@localhost ~]# export aming=linux
[root@localhost ~]# echo $aming
linux
[root@localhost ~]# bash
[root@localhost ~]# echo $aming
linux
[root@localhost ~]# bash
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-dbus───2*[{abrt-dbus}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─X───3*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───5*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─10*[{gnome-shell}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─login───bash
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mcelog
├─packagekitd───2*[{packagekitd}]
├─pcscd───2*[{pcscd}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd───sshd───bash───bash───bash───pstree #如今有兩個子shell
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
[root@localhost ~]#
從新打開一個終端,發現以下狀況:
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─abrt-dbus───2*[{abrt-dbus}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─firewalld───{firewalld}
├─gdm─┬─X───3*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───5*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─10*[{gnome-shell}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─login───bash
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─mcelog
├─packagekitd───2*[{packagekitd}]
├─pcscd───2*[{pcscd}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd─┬─sshd───bash───bash───bash
│ └─sshd───bash───pstree #如今在這裏
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
[root@localhost ~]#
在這個終端下,變量aming也不生效。
[root@localhost ~]# echo $aming
[root@localhost ~]#
緣由在於這兩個終端在兩個sshd下面,沒有衝突,沒有交互。
在第一個終端下的子shell中設置全局變量b,看看在父shell中是否生效。
[root@localhost ~]# export b=123
[root@localhost ~]# echo $b
[root@localhost ~]# 123
[root@localhost ~]# exit
[root@localhost ~]# echo $b
[root@localhost ~]#
子shell設置的全局變量在父shell中是不生效的,所謂的全局變量是向下的。在當前shell中設置全局變量,它的子shelll,子子shell,……等等都是生效的。
變量能夠定義,也能夠取消,使用unset命令。
[root@localhost ~]# echo $aming
linux
[root@localhost ~]# unset aming
[root@localhost ~]# echo $aming
[root@localhost ~]#
上面講的那麼多,都是export設置全局變量的用法,在子shell中才能發揮做用。
8.9 環境變量配置文件
這部份內容有難度,可是在實際工做中用的不是不少。
•/etc/profile 用戶環境變量,交互,登陸才執行
• /etc/bashrc 用戶不用登陸,執行shell就生效
• ~/.bashrc
• ~/.bash_profile
• ~/.bash_history
• ~/.bash_logout
• PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
上面的文件分兩個維度,一個是系統層面,一個是用戶層面的。
系統層面的就是?/etc下的文件,例如/etc/profile和/etc/bashrc。
用戶層次的是用戶家目錄下的文件 ,例如.bash_profile、.bashrc、.bash_history、.bash_logout等等。
文件的名字很相似,能夠把profile和bashrc各當作一種類型。這兩種類型的區別是:profile是用戶登陸的時候會加載到,而bashrc是用戶或者系統執行一些shell腳本的時候。好比打開一個shell,就會去執行/etc/bashrc的變量或者配置等等。
系統的文件/etc/profile和/etc/bashrc通常不要去編輯,當遇到需求須要編輯的時候,能夠去編輯用戶家目錄下的,也就是用戶本身的,這是能夠的。
[root@localhost ~]# vim .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
這裏能夠定義一下PATH,這裏只是針對用戶生效,若是想要全局生效,就放到/etc/profile下面去。
/etc/profile:這個文件預設了幾個重要的變量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask
/etc/bashrc:這個文件主要預設umask以及PS1,這個PS1就是咱們在輸入命令時前面的那串字符。
\u指用戶,\h指主機名,\W指當前目錄,\$指字符#(若是是普通目錄,則顯示$),上面兩個是系統文件,各個用戶的主目錄下還有如下幾個隱藏文件。
.bash_profile:該文件定義了用戶的我的化路徑與環境變量的文件名稱。每一個用戶均可以使用該文件輸入專屬於本身的shell信息,當用戶登陸時,該文件僅僅執行一次。
.bashrc:該文件包含專屬於本身的shell的bash信息,當登陸或每次打開新的shell時,該文件會被讀取。
.bash_history:該文件用於記錄命令歷史。
.bash_logout:當退出shell時,會執行該文件。你能夠將一些清理的工做放到這個文件中。
它定義用戶退出的時候須要作的一些操做,好比說你想每次退出時都刪除命令歷史,你就能夠把刪除命令歷史的命令放到.bash_logout裏面去。
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
PS1是在/etc/bashrc裏面定義的,在登錄系統之後,會出現[root@localhost ~]# 。
最左側是root,也就是用戶登陸的名字。localhost是主機名,而後是你所在的目錄最後一層級。
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]#
[root@localhost network-scripts]# echo $PS1
[\u@\h \W]\$
[root@localhost network-scripts]#
u是用戶,h是主機名,W是目錄的最後一個層級,這裏的W是能夠改爲w的。
[root@localhost network-scripts]# PS1='[\u@\h \w]\$'
[root@localhost /etc/sysconfig/network-scripts]#
此時換成了絕對路徑。
[root@localhost ~]#ls
123 1.txt 2.txt 3.txt 456 789 anaconda-ks.cfg.1 a.txt bb.txt initial-setup-ks.cfg perl5
[root@localhost ~]#cd 123
[root@localhost ~/123]#
方括號不加也是能夠的。
[root@localhost /tmp]#PS1='\u@\h \w\$'
root@localhost /tmp#
方括號換成尖括號也是能夠的。
root@localhost /tmp#PS1='<\u@\h \w>\$'
<root@localhost /tmp>#
也可讓前面的總體帶顏色顯示。
<root@localhost /tmp>#PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
root@localhost:/tmp#
那PS2是多少呢?
root@localhost:~# echo $PS2
>
root@localhost:~# for i in `seq 1 100`
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
root@localhost:~#
root@localhost:~# PS2="#"
root@localhost:~# echo $PS2
#
root@localhost:~# for i in `seq 1 10`
#do
#echo $i
#done
1
2
3
4
5
6
7
8
9
10
root@localhost:~#
PS2通常不會動它,改回來便可。
友情連接:阿銘Linux