hell 簡(jiǎn)單點(diǎn)理解伤柄,就是系統(tǒng)跟計(jì)算機(jī)硬件交互時(shí)使用的中間介質(zhì)馍管,它只是系統(tǒng)的一個(gè)工具。用戶(hù)直接面對(duì)的不是計(jì)算機(jī)硬件而是 shell更振,用戶(hù)把指令告訴 shell,然后 shell 再傳輸給系統(tǒng)內(nèi)核饭尝,接著內(nèi)核再去支配計(jì)算機(jī)硬件去執(zhí)行各種操作肯腕。Redhat/CentOS 系統(tǒng)默認(rèn)安裝的 shell 叫做 bash,即 Bourne Again Shell钥平,它是 sh(Bourne Shell)的增強(qiáng)版本
我們敲過(guò)的命令实撒,linux 是會(huì)有記錄的,默認(rèn)可以記錄 1000 條歷史命令涉瘾。這些命令保存在用
戶(hù)的家目錄中的.bash_history 文件中知态。有一點(diǎn)需要您知道的是,只有當(dāng)用戶(hù)正常退出當(dāng)前shell 時(shí)立叛,在當(dāng)前 shell 中運(yùn)行的命令才會(huì)保存至.bash_history 文件中负敏。
與命令歷史有關(guān)的有一個(gè)有意思的字符那就是 ‘!’ 了。常用的有這么幾個(gè)應(yīng)用:
1) !! 連續(xù)兩個(gè) ‘!’, 表示執(zhí)行上一條指令;
2) !n 這里的 n 是數(shù)字囚巴,表示執(zhí)行命令歷史中第 n 條指令原在,例如 !12 表示執(zhí)行命令歷史中
第 12 個(gè)命令;
指令和文件名補(bǔ)全
它就是按 tab 鍵友扰,它可以幫您補(bǔ)全一個(gè)指令彤叉,也可以幫您補(bǔ)全一個(gè)路徑或者一個(gè)文件名庶柿。連
續(xù)按兩次 tab 鍵,系統(tǒng)則會(huì)把所有的指令或者文件名都列出來(lái)秽浇。
別名
我們可以通過(guò)
alias 把一個(gè)常用的并且很長(zhǎng)的指令別名一個(gè)簡(jiǎn)潔易記的指令浮庐。如果不想用了,
還可以用 unalias 解除別名功能柬焕。直接敲 alias 會(huì)看到目前系統(tǒng)默認(rèn)的 alias.
系統(tǒng)默認(rèn)的 alias 指令也就這幾個(gè)而已审残,您也可以自定義您想要的指令別名。alias 語(yǔ)法很簡(jiǎn)
單斑举, alias [命令別名]=['具體的命令']
通配符
在bash 下搅轿,可以使用 * 來(lái)匹配零個(gè)或多個(gè)字符,而用 ? 匹配一個(gè)字符富玷。
輸入輸出重定向
輸入重定向用于改變命令的輸入璧坟,輸出重定向用于改變命令的輸出。輸出重定向更為常用赎懦,
它經(jīng)常用于將命令的結(jié)果輸入到文件中雀鹃,而不是屏幕上。輸入重定向的命令是<励两,輸出重定
向的命令是>黎茎,另外還有錯(cuò)誤重定向 2>,以及追加重定向>>
管道符
前面已經(jīng)提過(guò)過(guò)管道符 “|”, 就是把前面的命令運(yùn)行的結(jié)果丟給后面的命令当悔。
作業(yè)控制
當(dāng)運(yùn)行一個(gè)進(jìn)程時(shí)傅瞻,您可以使它暫停(按Ctrl+z),然后使用 fg 命令恢復(fù)它盲憎,利用 bg 命令使
他到后臺(tái)運(yùn)行嗅骄,您也可以使它終止(按 Ctrl+c)。
環(huán)境變量
環(huán)境變量分為系統(tǒng)環(huán)境變量和用戶(hù)環(huán)境變量焙畔。系統(tǒng)環(huán)境變量掸读,對(duì)所有用戶(hù)起作用,而用戶(hù)環(huán)
境變量只對(duì)當(dāng)前用戶(hù)起作用宏多。
系統(tǒng)環(huán)境變量:
/etc/profile:此文件為系統(tǒng)的每個(gè)用戶(hù)設(shè)置環(huán)境信息,當(dāng)用戶(hù)第一次登錄時(shí),該文件被執(zhí)行.并
從/etc/profile.d 目錄的配置文件中搜集 shell 的設(shè)置.
/etc/bashrc:
為每一個(gè)運(yùn)行 bash shell 的用戶(hù)執(zhí)行此文件.當(dāng) bash shell 被打開(kāi)時(shí),該文件被讀取.當(dāng)前用戶(hù)變量:
~/.bash_profile:
每個(gè)用戶(hù)都可使用該文件輸入專(zhuān)用于自己使用的 shell 信息,當(dāng)用戶(hù)登錄時(shí),該
文件僅僅執(zhí)行一次!默認(rèn)情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶(hù)的.bashrc 文件.
~/.bashrc:該文件包含專(zhuān)用于你的 bash shell 的 bash 信息,當(dāng)?shù)卿洉r(shí)以及每次打開(kāi)新的 shell 時(shí),該該文件被讀取.
~/.bash_logout:
當(dāng)每次退出系統(tǒng)(退出 bash shell)時(shí),執(zhí)行該文件儿惫。
注:這些文件很多都是隱藏文件,想要查看可以在ls 命令之后加上參數(shù) -a來(lái)顯示隱藏文件伸但。
1.顯示環(huán)境變量 HOME
[azureuser@mono tmp]$ echo $PATH
2.
設(shè)置一個(gè)新的環(huán)境變量 NAME
[azureuser@mono tmp]$ export NAME="lichao"
[azureuser@mono tmp]$ echo $NAME
lichao
3.使用 env 命令顯示所有的環(huán)境變量[azureuser@mono tmp]$ env
Shell 特殊符號(hào)
* 代表零個(gè)或多個(gè)字符或數(shù)字肾请。
? 只代表一個(gè)任意的字符
# 這個(gè)符號(hào)在 linux 中表示注釋說(shuō)明的意思,即 # 后面的內(nèi)容 linux 忽略掉更胖。
\ 脫意字符铛铁,將后面的特殊符號(hào)(例如”*” )還原為普通字符隔显。
| 管道符,前面多次出現(xiàn)過(guò)饵逐,它的作用在于將符號(hào)前面命令的結(jié)果丟給符號(hào)后面的命令括眠。
這里提到的后面的命令,并不是所有的命令都可以的倍权,一般針對(duì)文檔操作的命令比較常
用掷豺,例如 cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk 等等,其中 grep,sed, awk 為正則表達(dá)式必須掌握的工具
$ 除了用于變量前面的標(biāo)識(shí)符外薄声,還有一個(gè)妙用当船,就是和 ‘!’ 結(jié)合起來(lái)使用。
?; 分號(hào)默辨。平時(shí)我們都是在一行中敲一個(gè)命令德频,然后回車(chē)就運(yùn)行了,那么想在一行中運(yùn)
行兩個(gè)或兩個(gè)以上的命令如何呢?則需要在命令之間加一個(gè) ”;” 了缩幸。
?~ 用戶(hù)的家目錄壹置,如果是 root 則是 /root ,普通用戶(hù)則是 /home/username
& 如果想把一條命令放到后臺(tái)執(zhí)行的話(huà)桌粉,則需要加上這個(gè)符號(hào)蒸绩。通常用于命令運(yùn)行時(shí)
間非常長(zhǎng)的情況。
?>, >>, 2>, 2>> 前面講過(guò)重定向符號(hào)> 以及>> 分別表示取代和追加的意思铃肯,然后還有兩
個(gè)符號(hào)就是這里的 2> 和 2>> 分別表示錯(cuò)誤重定向和錯(cuò)誤追加重定向患亿,當(dāng)我們運(yùn)行一
個(gè)命令報(bào)錯(cuò)時(shí),報(bào)錯(cuò)信息會(huì)輸出到當(dāng)前的屏幕押逼,如果想重定向到一個(gè)文本里步藕,則要用2>或者 2>>
[ ] 中括號(hào),中間為字符組合挑格,代表中間字符中的任意一個(gè)咙冗。
&& 與 ||,用于多條命令中間的特殊符號(hào)
Shell 腳本的基本結(jié)構(gòu)
#! /bin/bash
## This is first bash shell on centos
## Written by Geffzhang 2013.8.18
date '+%Y-%m-%d %H:%M:%S'
echo "Hello world!"
Shell 腳本通常都是以.sh 為后綴名的, 大家一看到.sh 文件就知道這是個(gè) Shell 腳本漂彤。helloworld.sh 中第一行要以 “#! /bin/bash” 開(kāi)頭雾消,它代表的意思是,該文件使用的是 bash語(yǔ)法挫望。如果不設(shè)置該行立润,雖然您的shell腳本也可以執(zhí)行,但是這不符合規(guī)范媳板。# 表示注釋?zhuān)谇懊嬷v過(guò)的桑腮。后面跟一些該腳本的相關(guān)注釋內(nèi)容。腳本的注釋雖然不是必須的蛉幸,建議不要省略了破讨。因?yàn)殡S著您寫(xiě)的 shell 腳本越來(lái)越多丛晦,如果有一天您回頭查看自己寫(xiě)過(guò)的某個(gè)腳本時(shí),很有可能忘記該腳本是用來(lái)干什么的以及什么時(shí)候?qū)懙奶崽铡K詫?xiě)上注釋是有必要的烫沙。而且系統(tǒng)管理員并非只有您一個(gè),如果是其他管理員查看您的腳本搁骑,他看不懂豈不是很郁悶.
另外使用 sh 命令去執(zhí)行一個(gè) shell 腳本的時(shí)候是可以加-x 選項(xiàng)來(lái)查看這個(gè)腳本執(zhí)行過(guò)程的斧吐,這樣有利于我們調(diào)試這個(gè)腳本哪里出了問(wèn)題:
[azureuser@mono sbin]$ sh -x helloworld.sh
+ date '+%Y-%m-%d %H:%M:%S'
2013-08-18 07:33:08
+ echo 'Hello world!'
Hello world!