Linux的shellphp
與windows只有一種批處理腳本不一樣,因爲早年的Unix年代,發展者衆,出現了各類不一樣的distribution,所以也隨着不一樣的distribution出現了各自的shell版本,常聽到的就有Bourne SHell (sh) 、在 Sun 裏頭默認的 C SHell、 商業上經常使用的 K SHell、, 還有 TCSH 等等,每一種shell都有其各自的特色,至於Linux使用的這一種版本就稱爲Bourne Again SHell (簡稱 bash),這個shell是Bourne SHell的加強版本,也是基於GNU的架構下發展出來的。
linux
有哪些shellshell
經過查看etc/shells,能夠發現至少有如下幾種shell可用(筆者以centOS6.5爲例)vim
[root@localhost ~]# ll *sh /bin/bash /bin/csh -> tcsh <== csh已經被 tcsh 所替代 /bin/dash /bin/sh -> bash <== sh已經被 bash 所替代 /bin/tcsh
接着咱們再看一下Linux系統默認使用哪一種shell,查看/etc/passwd 文件:windows
[root@localhost etc]# vim passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ……
咱們會發現系統默認使用使用/bin/bash 這個shell。緩存
bash shell的功能:bash
命令編修能力(history):架構
簡單來講,就是能夠記憶使用過的命令,你能夠簡單的使用 ↑、↓ 鍵來查看使用過的命令,在不少distribution版本里,可記憶的命令能達到1000個!也就是說,你曾經下達過 的命令幾乎全都被記錄下來了。工具
這麼多的命令記錄在哪裏呢?在你的家目錄內的 .bash_history 啦! 不過,須要留意的是,~/.bash_history 記錄的是前一次登錄之前所運行過的命令, 而至於這一次登錄 所運行的命令都被緩存在內存中,當你成功的註銷系統後,該命令記憶纔會記錄到 .bash_history 當中!ui
這有什麼功能呢?最大的好處就是能夠『查詢曾經作過的舉動!』 如此能夠知道你的運行步驟,那麼就能夠追蹤你曾下達過的命令,以做爲除錯的工具! 但如此一來也有個煩 惱,就是若是被黑客入侵了,那麼他只要翻你曾經運行過的命令, 恰好你的命令又跟系統有關 (例如直接輸入 MySQL 的密碼在命令列上面),那你的主機可就傷腦筋了! 到底 記錄命令的數目越多仍是越少越好?這部份是見仁見智啦,沒有必定的答案的。
命令與文件補全(【tab】鍵的好處):
經常在 bash 環境中使用 [tab] 是個很棒的習慣!由於至少可讓你
1)少打不少字;
2)肯定輸入的數據是正確的!
使用 [tab] 按鍵的時機依據 [tab] 接在命令後或參數後而有所不一樣:
因此說,若是我想要知道個人環境中,全部能夠運行的命令有幾個? 就直接在 bash 的提示字符後面連續按兩次 [tab] 按鍵就可以顯示全部的可運行命令了。 那若是想要知道 系統當中全部以 c 爲開頭的命令呢?就按下『 c[tab][tab] 』就好啦!
命令別名配置功能(alias):
假如我須要知道這個目錄底下的全部文件 (包含隱藏檔) 及全部的文件屬性,那麼我就必需要下達『 ls -al 』這樣的命令串,唉!真麻煩,有沒有更快的取代方式?呵呵!就使 用命令別名呀!例如鳥哥最喜歡直接以 lm 這個自定義的命令來取代上面的命令,也就是說, lm 會等於 ls -al 這樣的一個功能,嘿!那麼要如何做呢?就使用 alias 便可!你 能夠在命令列輸入 alias 就能夠知道目前的命令別名有哪些了!也能夠直接下達命令來配置別名呦:
alias lm='ls -al'
工做控制、前景背景控制(job control, foreground, background):
使用前、背景的控制可讓工做進行的更順利,至於工做控制的用途則更廣,可讓咱們隨時隨地讓工做在後臺運行而不中斷,能夠在單一的環境中達到多任務的的目的。
程序化腳本(shell script):
(略)
通配符(Wildcard):
除了完整的字符串以外, bash 還支持許多的通配符來幫助用戶查詢與命令下達。 舉例來講,想要知道 /usr/bin 底下有多少以 X 爲開頭的文件嗎?使用:『 ls -l
/usr/bin/X* 』就可以知道囉~此外,還有其餘可供利用的通配符, 這些都可以加快使用者的操做呢!
Bash shell 的內建命令:type
bash 有沒有什麼說明文件啊?開玩笑~ 這麼棒的東西怎麼可能沒有說明文件!請你在 shell 的環境下,直接輸入 man bash 瞧一瞧, 嘿嘿!不是蓋的吧!讓你看個幾天幾夜也沒法看完的 bash 說明文件,但是很詳盡的數據啊! ^_^
不過,在這個 bash 的 man page 當中,不知道你是否有察覺到,咦! 怎麼這個說明文件裏面有其餘的文件說明啊?舉例來講,那個 cd 命令的說明就在這個 man page 內? 而後我直接輸入 man cd 時,怎麼出現的畫面中,最上方居然出現一堆命令的介紹?這是怎麼回事? 爲了方便 shell 的操做,其實 bash 已經『內建』了不少命令了,例如上面提到的 cd , 還有例如 umask 等等的命令,都是內建在 bash 當中的呢!
那我怎麼知道這個命令是來自於外部命令(指的是其餘非 bash 所提供的命令) 或是內建在 bash 當中的呢? 嘿嘿!利用 type 這個命令來觀察便可!舉例來講:
[root@www ~]# type [-tpa] name 選項與參數: :不加任何選項與參數時,type 會顯示出 name 是外部命令仍是 bash 內建命令 -t :當加入 -t 參數時,type 會將 name 以底下這些字眼顯示出他的意義: file :表示爲外部命令; alias :表示該命令爲命令別名所配置的名稱; builtin :表示該命令爲 bash 內建的命令功能; -p :若是後面接的 name 爲外部命令時,纔會顯示完整文件名; -a :會由 PATH 變量定義的路徑中,將全部含 name 的命令都列出來,包含 alias 範例一:查詢一下 ls 這個命令是否爲 bash 內建? [root@www ~]# type ls ls is aliased to `ls --color=tty' <==未加任何參數,列出 ls 的最主要使用狀況 [root@www ~]# type -t ls alias <==僅列出 ls 運行時的依據 [root@www ~]# type -a ls ls is aliased to `ls --color=tty' <==最早使用 aliase ls is /bin/ls <==還有找到外部命令在 /bin/ls 範例二:那麼 cd 呢? [root@www ~]# type cd cd is a shell builtin <==看到了嗎? cd 是 shell 內建命令
透過 type 這個命令咱們能夠知道每一個命令是否爲 bash 的內建命令。 此外,因爲利用 type 搜尋後面的名稱時,若是後面接的名稱並不能以運行檔的狀態被找到, 那麼該名稱是不會被顯示出來的。也就是說, type 主要在找出『運行檔』而不是通常文件檔名喔! 呵呵!因此,這個 type 也能夠用來做爲相似 which 命令的用途啦!找命令用的!
命令的下達
命令的下達經過回車進行就再也不贅述,這裏僅就反斜槓 (\) 來講明一下命令下達的方式!
範例:若是命令串太長的話,如何使用兩行來輸出? [vbird@www ~]# cp /var/spool/mail/root /etc/crontab \ > /etc/fstab /root
上面這個命令用途是將三個文件複製到 /root 這個目錄下而已。不過,由於命令太長, 因而就利用『 \[Enter] 』來將 [Enter] 這個按鍵『跳脫!』開來,讓 [Enter] 按鍵再也不具備『開始運行』的功能!好讓命令能夠繼續在下一行輸入。 須要特別留意, [Enter] 按鍵是緊接着反斜槓 (\) 的,二者中間沒有其餘字符。 由於 \ 僅跳脫『緊接着的下一個字符』而已!因此,萬一我寫成: 『 \ [Enter] 』,亦即 [Enter] 與反斜槓中間有一個空格時,則 \ 跳脫的是『空格鍵』而不是 [Enter] 按鍵!這個地方請再仔細的看一遍!很重要!
若是順利跳脫 [Enter] 後,下一行最前面就會主動出現 > 的符號, 你能夠繼續輸入命令囉!也就是說,那個 > 是系統自動出現的,你不須要輸入。
總之,當咱們順利的在終端機上面登錄後, Linux 就會依據 /etc/passwd 文件的配置給咱們一個 shell (默認是 bash),而後咱們就能夠依據上面的命令下達方式來操做 shell, 以後,咱們就能夠透過 man 這個在線查詢來查詢命令的使用方式與參數說明, 很不錯吧!那麼咱們就趕忙更進一步來操做 bash 這個好玩的東西囉!