1、究竟什麼是指令
一條指令不外乎以下四種情況:
- 可執行程式。可執行程式就像在/usr/bin目錄裡看到的所有檔案一樣。在該程式類别中,程式可以編譯為二進制檔案,比如C、C++語言編寫的程式,也可以是shell、Perl、Python、Ruby等腳本語言編寫的程式。
- shell内置指令。bash支援許多在内部稱之為shell builtin的内置指令。例如,cd指令就是shell内置指令。
- shell函數。shell函數是合并到環境變量中的小型shell腳本。
- alias指令。我們可以在其他指令的基礎上定義自己的指令。
2、識别指令
2.1、type–顯示指令的類型
type指令是一個shell内置指令,可以根據指定的指令名顯示shell将要執行的指令類型,格式如下:
type command
2.2、which–顯示可執行程式的位置
有時候,系統中可能會安裝一個可執行程式的多個版本。這種現象雖然在桌面系統中不常見,但是在大型伺服器中卻是很常見的。使用which指令可以确定一個給定可執行檔案的準确位置。
which指令隻适用于内置指令和指令别名(真正可執行程式的替代物)。試圖在shell内置指令(例如,cd)中使用which指令時,要麼沒響應,要麼得到一條錯誤資訊:
3、獲得指令文檔
3.1、help–獲得shell内置指令的幫助文檔
bash為每一個shell内置指令提供了一個内置的幫助工具。輸入help,然後輸入shell内置指令的名稱即可使用該幫助工具,例如:
注意表示法:出現在指令文法描述中的方括号表示一個可選項。豎線符号代表的是兩個互斥的選項。比如:
cd [-L|-P][dir]
這種表示法說明,cd指令可能又一個-L參數,也可能是-P參數,甚至跟參數dir。
3.2、help–顯示指令的使用資訊
很多可執行程式都支援- -help選項,- -help選項描述了指令支援的文法和選項。例如:
一些程式不支援- -help選項,但是我們還是要試試。這通常會産生一條錯誤消息,該錯誤消息也能揭示相同的指令使用資訊。
3.3、man–顯示程式的手冊頁
大多數供指令行使用的可執行檔案,提供一個稱之為manual或者是man page的正式文檔。該文檔可以用一種稱為man的特殊分頁程式來檢視,用法格式:
man program
手冊文檔在格式上會有所不同,但是通常都包括标題、指令句法的摘要、指令用途的描述、指令選項清單以及每個指令選項的描述。但是,手冊文檔通常不包括執行個體,更多的是作為一個參考使用,而不是教程。例如,嘗試檢視
ls
指令的手冊文檔:
在大多數Linux系統中,man指令調用less指令來顯示手冊文檔。所有,當顯示手冊文檔是,你熟悉的所有less指令都能奏效。
man指令顯示的“手冊文檔”被分為多個部分(section),它不僅包括使用者指令,也包括系統管理指令、程式接口、檔案格式等。
手冊文檔的組織結構
部分 | 内容 |
1 | 使用者指令 |
2 | 核心系統調用的程式接口 |
3 | C庫函數程式接口 |
4 | 特殊檔案,如裝置結點和驅動程式 |
5 | 檔案格式 |
6 | 遊戲和娛樂,例如螢幕保護程式 |
7 | 其它雜項 |
8 | 系統管理指令 |
有時候我們需要檢視手冊文檔的具體部分,以查找我們需要的資訊。當我們所查找的一個檔案格式同時也是一個指令名的時候,這一點就尤為重要了。如果沒有指明部分編号(section number),通常我們會獲得第一次比對的執行個體(它可能會出現在第一部分)。為了指明具體在哪個部分,我們可以這樣使用man指令:
man section search-term
例如:
man 5 passwd
。該指令将會顯示檔案/etc/passwd的檔案格式描述手冊。
3.4、apropos–顯示合适的指令
我們有可能會搜尋參考手冊清單,才進行基于某個搜尋條目的比對。盡管有些粗糙,但是這種方法有時還是有用的。下面是一個使用floppy為搜尋條目,來搜尋參考手冊的例子。
在輸出中,每一行的第一個字段四手冊頁的名稱,第二個字段顯示部分。主要,帶有-k選項的man指令與apropos指令在功能上基本是一緻的。
3.5、whatis–顯示指令的簡要描述
whatis程式顯示比對具體關鍵字的手冊頁的名字和一行描述。
3.6、info–顯示程式的info條目
GNU項目提供了info頁面來代替手冊文檔。info頁面可通過info閱讀器來顯示。info頁面使用超連結,這與網頁結構很相似。
info程式讀取info檔案,該檔案是樹形結構,分為各個單獨的節點,可一個節點包含一個主題。info檔案包含的超連結可以實作節點間的跳轉。通過前置星号可以識别超連結,将光标放在超連結上并按Enter鍵,可以激活它。
可以通過輸入info以及程式名(可選的)來調用info。
例如:
info coreutils
用于控制閱讀器的指令
指令 | 功能 |
? | 顯示指令幫助 |
PAGE UP or BACKSPACE | 傳回上一頁 |
PAGE DOWN or Spacebar | 傳回下一頁 |
n | Next–顯示下一個節點 |
p | Previous–顯示上一個節點 |
u | Up–顯示目前顯示節點的父節點(通常是一個菜單) |
ENTER | 進入光标所指的超連結 |
q | 退出 |
3.7、README和其他程式文檔檔案
系統中安裝的很多軟體包都有自己的文檔檔案,它們存放在
/usr/share/doc
目錄中。其中大部分文檔檔案是以純文字格式存儲的,是以可以用
less
指令來檢視。有些檔案是HTML格式,并且可以用Web浏覽器來檢視。我們可以會遇到一些以
.gz
擴充名結尾的檔案。這表明它們是使用gzip壓縮程式壓縮過的。gzip包包含一個特殊的less版本,稱之為zless。zless可以顯示由gzip壓縮過的文本檔案的内容。
4、使用别名建立自己的指令
我們可以使用
alias
指令建立自己的指令,但是在開始前,我們需要展示一個指令行的小技巧,通過使用分号來分隔多條指令,就可以将多條指令輸入在一行中,其工作方式為:
command1;command2;command3...
我們可以看到,我們将3條指令放置在同一行中。首先我們将目前目錄改變為/usr,然後列出這個目錄内容,最後傳回到原始目錄(使用cd -)。那麼程式結束的位置恰恰是開始的位置。現在,我們通過
alias
指令将以上指令整合成一條新的指令,首先要為新指令虛構出一個名稱,試試名稱test。不過輸入前,我們最好檢查一下名稱test是否已經被使用過了。為此,我們可以再次使用
type
指令.。
這個名字已經用過了,試試foo
foo沒有被使用。下面建立新指令的别名:
注意這個指令的結構:
alias name='string'
在
alias
指令之後輸入name,緊接着是一個等号(沒有空格),等号之後是一個用單引号括起來的字元串,該字元串的内容将指派給name。定義好的别名可以用在shell期待的任何地方:
也可以再次使用type指令來檢視别名: