Linux命令列與shell指令碼程式設計大全(二)
第三章、基本的bash shell命令
3.1 啟動shell
GNU bash shell能提供對Linux系統的互動式訪問。它是作為普通程式執行的,通常是在使用者登陸終端時啟動。登入時系統啟動的shell依賴於使用者賬戶的配置。
/etc/passwd檔案包含了所有系統使用者賬戶列表以及每個使用者的基本配置資訊。
3.2 shell提示符
預設bash shell提示符是美元符號($)。
3.3 bash 手冊
大多數Linux發行版自帶用以查詢shell命令及其他GNU工具資訊的線上手冊。
man命令用來訪問儲存在Linux系統上的手冊頁面。在想要查詢的工具名稱前面輸入man命令,就可以找到那個工具相應的手冊條目。
3.4 瀏覽檔案系統
3.4.1 Linux檔案系統
Linux在路徑名中不使用驅動器碟符。在Windows中,PC上安裝的物理驅動器決定了檔案的路徑名。Windows會為每個物理磁碟驅動器分配一個碟符,每個驅動器都會有自己的目錄結構,以便訪問儲存中的檔案。
Linux採用了一種不同的方式。Linux將檔案儲存在單個目錄結構中,這個目錄被稱為虛擬目錄。虛擬目錄將安裝在PC上的所有儲存裝置的檔案路徑納入單個目錄結構中。
Linux虛擬目錄結構只包含一個稱為根(root)目錄的基礎目錄。
3.5 檔案和目錄列表
要想知道系統中有哪些檔案,可以使用列命令(ls)。本節將描述ls命令和可用來格式化其他輸出資訊的選項。
3.5.1 基本列表功能
ls命令最基本的形式會顯示當前目錄下的檔案和目錄:
注意:ls命令輸出的列表是按字母排序的。如果使用者用的是支援彩色的終端模擬器,ls命令還可以用不同的顏色區分不同型別的檔案。LS_COLORS環境變數控制著這個功能。
-F引數在目錄後面加了正斜槓(/),以方便使用者在輸出中分辨它們。類似地它會在可執行檔案的後面加個星號,以便使用者找出可在系統上執行的檔案。
要把隱藏的檔案和普通檔案及目錄顯示出來,就得用到-a引數。
-R引數是ls命令可用的另一個引數,叫做遞迴選項。它列出了當前目錄下包含的子目錄中的檔案。
竅門:選項不一僅可以像例子中那樣分開輸入,它們可以進行如下合併:ls -FR。
3.5.2 顯示行列表
在基本的輸出例表中,要附加資訊,常用的引數 -l。-l引數會產生長列表格式的輸出,包含了目錄中每個檔案的更多相關資訊。
每一行包含檔案或目錄的下述資訊:
- 檔案型別,比如目錄(d)、檔案(-)、字元型檔案(c)、或塊裝置(b);
- 檔案的許可權;
- 檔案的硬連結總數;
- 檔案屬主的使用者名稱;
- 檔案屬組的組名;
- 檔案的大小(以位元組為單位);
- 檔案的上次修改時間;
- 檔名或目錄名。
3.5.3 過濾輸出列表
ls命令支援在命令列中定義過濾器。過濾器就是通過一個簡單文字匹配的字串。可以在要用到的命令列引數之後新增這個過濾器:
當用戶指定特定檔案的名稱作為過濾器時,ls命令只會顯示檔案資訊。ls命令能夠識別的標準萬用字元,並在過濾器中用到它們進行模式匹配:
- 問號(?)代表一個字元;
- 星號(*)代表零個或多個字元
在過濾器中使用星號和問號被稱為檔案擴充套件匹配(file globbing),指的是使用萬用字元進行模式匹配的過程。萬用字元正式的名稱叫做元字元萬用字元(metacharacter wildcards)。除了星號和問號之外,還有更多的元字元萬用字元可用於檔案擴充套件匹配。可以使用中括號。
3.6 處理檔案
3.6.1 建立檔案
使用touch命令,可建立空檔案
ls -l命令,並不會顯示訪問時間。因為預設顯示的是修改時間。要想檢視檔案的訪問時間,需要加入另一個引數:--time=atime.
3.6.2 複製檔案
cp命令。最基本的用法裡,cp命令需要兩個引數——源物件和目標物件:
cp source destination
當source和destination引數都是檔名時,cp命令將原始檔複製成一個新檔案,並且以destination命名。新檔案就像全新的檔案一樣,有新的修改時間。
如果目標檔案已存在,cp命令不會提醒。最好是加上-i選項,強制shell詢問是否需要覆蓋檔案。
新檔案出現在目錄documents中,和原始檔相同。
單點符(.)表示當前目錄。單點符能夠簡化任務。
cp命令的-R引數威力強大。可以用它在一條命令中遞迴地複製整個目錄的內容。
也可以在cp命令中使用萬用字元。
3.6.3 製表鍵自動補全
在使用命令列時,很容易輸錯命令、目錄名稱或檔名。實際上,對長目錄名或檔名來說,出錯率很高,製表鍵自動補全允許你在輸入檔名或目錄名時按一下製表鍵,讓shell幫忙將內容補充完整。
3.6.4 連結檔案
連結檔案時Linux檔案系統的一個優勢。在系統上維護同一檔案的備份,除了儲存多份單獨的物理檔案副本之外,還可以採用儲存一份物理檔案和多個虛擬副本的方法。這種虛擬的副本就叫做連結。連結是目錄中指向檔案真實位置的佔位符。在Linux中有兩種不同型別的檔案連結:
- 符號連結
- 硬連結
符號連結就是實實在在的檔案,它指向放在虛擬目錄結構中某個地方的另一個檔案。兩個通過符號連結在一起的檔案,彼此的內容並不相同。
要為一個檔案建立符號連結,原始檔案就必須事先存在。然後可以使用ln命令以及-s選項來建立符號連結。
注意符號連結的名字sl_data_file位於ln命令中的第二個引數位置上。顯示在長列表中符號檔名後的->符號表明該檔案是連結到檔案data_file上的一個符號連結。
另外還要注意的是,符號連結的檔案大小與資料檔案的檔案大小不同。它們的內容並不相同,是兩個完全不同的檔案。
另一種方法,檢視檔案的inode編號。檔案或目錄中的inode編號是一個用於標識的唯一數字,這個數字由核心分配給檔案系統中的每一個物件。
硬連結會建立獨立的虛擬檔案,其中包含了原始檔案的資訊資訊和位置。但是它們從根本上是同一個檔案。
3.6.5 重新命名檔案
在Linux中,重新命名檔案稱為移動(moving)。mv命令可以將檔案和目錄移動到另一個位置或重新命名。
注意:移動檔案將會將檔案fall重新命名,但inode編號和時間戳保持不變。這是因為mv隻影響檔名。也可使mv來移動檔案的位置。
3.6.6 刪除檔案
在Linux中,刪除(deleting)叫作移除(removing)。bash shell中刪除檔案的命令是rm。rm命令的基本格式非常簡單。
注意:-i命令引數提示你是不是要真的刪除該檔案。bash shell中沒有回收站或垃圾箱,檔案一旦刪除,就無法找回。因此,在使用rm命令時,要養成加入-i引數的好習慣。
也可使用萬用字元刪除成組的檔案。
rm命令的另一個特性:如果刪除檔案時不受提示符的打擾,可以用-f引數強制刪除。
3.7 處理目錄
3.7.1 建立目錄
在Linux中建立目錄很簡單,用mkdir命令即可:
可以根據需求批量地建立目錄和子目錄。想要同時建立多個目錄和子目錄,需要加入-p引數:
3.7.2 刪除目錄
刪除目錄的基本命令是rmdir
預設情況下,rmdir命令只刪除空目錄。因為我們在New_Dir目錄下建立一個名為my_file,所以rmdir命令拒絕刪除目錄。
一般需要刪除目錄中的內容,在空目錄上使用rmdir命令。
使用-r選項使得命令可以向下進入目錄,刪除其中的檔案,然後刪除目錄本身。
rm -rf命令既沒有警告資訊,也沒有聲音提示。這肯定是一個危險的工具,尤其是在擁有超級使用者許可權的時候。務必謹慎使用,請檢查你所要進行的操作是否符合預期。
3.8 檢視檔案內容
3.8.1 檢視檔案型別
在顯示檔案內容之前,應該先了解一下檔案型別。file命令可以檢視檔案型別。
file命令可以作為區分目錄、連結檔案、指令碼檔案、二進位制程式
3.8.2 檢視整個檔案
1.cat命令
引數:
-A, --show-all
equivalent to -vET
-b, --number-nonblank
number nonempty output lines
-e, equivalent to -vE
-E, --show-ends
display $ at end of each line
-n, --number
number all output lines
-s, --squeeze-blank
suppress repeated empty output lines
-t equivalent to -vT
-T , --show-tabs
display TAB characters as ^I
-u (ignore)
-v, --show-nonprinting
use ^ and M- notation,except for LFD and TAB
--help display this help an exit
--version
output version information and exit
2.more命令
more命令會顯示文字檔案內容,但會在顯示每頁資料之後停下來。
3.less命令
less 是 more 命令的升級版。
3.83 檢視部分檔案
1.tail命令
tail命令會顯示檔案最後幾行的內容。預設情況下,它會顯示檔案的末尾10行。
-n 引數, 允許tail命令加入-n引數來修改所顯示的行數
-f 引數, tail命令會保持活動狀態,並不斷顯示新增到檔案中的內容
2.head命令
會顯示檔案開頭那些行的內容。預設情況下,它會顯示檔案前10行的文字
-n 引數, 允許head命令加入-n引數來修改所顯示的行數
每天都再努力一點。