本篇主要介紹了在Linux / Mac 系統下,一些基本的bash shell命令。
cd destination
cd命令可以帶單個參數destination,用以制定你想切換到的目錄名。如果用戶沒有指定目標路徑,將會切換到當前用戶主目錄。
目錄路徑參數可以使用兩種方式表達:
絕對文件路徑
用戶可在虛擬目錄中采用==絕對文件路徑==來引用目錄名。絕對文件路徑定義了在虛擬目錄結構中該目錄的確切位置,以虛擬目錄的根目錄開始,相當於目錄的全名。
即以“/”開頭的目錄的絕對路徑,當當前所在的目錄已經在工作目錄中時,可以使用 cd /
回到根目錄。
相對文件路徑
==相對文件路徑==允許用戶指定一個基於當前位置的目錄文件路徑,而無需再從根目錄開始。相對文件路徑不以代表根目錄的正斜線(/)開頭,而以目錄名(如果用戶准備切換到當前工作目錄下的一個目錄)或是一個表示基於用戶當前目錄的相對位置的特殊字符開始。有兩個特殊字符:
例如:
cd ../Desktop
cd ./Doc
cd ../../etc
命令區分大小寫。
ls命令的基本格式會顯示當前目錄下的文件和目錄。
ls命令輸出的列表是按字母排序的(按列排序而不是按行排序)。如果用戶用的是支持彩色的終端模擬器(==Mac 電腦終端默認是沒有色彩的,可以百度添加配置文件==),ls命令還可以用不同的顏色來區分不同類型的文件。LS_COLORS
環境變量控制著這個功能。
ls -F
:該命令會在結果中的目錄名後面加正斜線(/),以方便用戶在輸出中分辨它們。類似的,他會在可執行文件後面加個星號,以便找出可在系統上運行的文件。ls -a
:該命令可以將隱藏文件和目錄一起顯示出來。ls -R
:該命令可以列出當前目錄下的包含的目錄中的文件。如果有很多個目錄,這個輸出會很長。ls命令並沒有輸出每個文件額太多相關信息。需要顯示更多的信息,需要使用改命令:
ls -l
:該參數會產生長列表格式的輸出,包含了目錄中每個文件的更多的相關信息: 在進行文件管理時,ls命令的很多參數可能會派上用場。針對ls運行一下man命令,你就能看到可用來修改ls命令輸出的參數就有好幾頁。man ls
ls命令采用兩種格式的命令行參數:
單字母參數通常是由英文破折號開始,全字參數則更易於看懂,通常以雙英文破折號開始。許多參數都有單字母和全字母兩種版本,而有些則只有一種。
==Mac 終端下,測試了幾個命令並不用輸入“–”,直接輸入“-”加後面的命令即可,還有就是下表的一些命令,在Mac 並沒有響應。目前不知道是測試輸入錯誤還是本身並不支持。==
如果需要,也可以一次使用多個參數。多個雙破折線參數必須分開輸入,而多個單波折線可以組合成一個字符串跟在一個單破折線後面。例如:ls -alis
。單命令無關順序。
由前面的例子可以知道,默認情況下,ls命令會輸出目錄下的所有文件。
ls命令還支持在命令行下定義過濾器。它會用過濾器決定應該在輸出中顯示哪些文件和目錄。
這個過濾器就是個進行簡單文本匹配的的字符串,可以在要用的命令行參數後添加這個過濾器:
ls -l 匹配字符串
當用戶指定特定的文件名稱作為過濾器時,ls命令只會顯示那個文件的信息。
有時候當不知道要找的文件的確切名稱。ls命令可以識別標准通配符,並在過濾器中用它們來進行模式匹配:
問號可用在過濾器字符串中替代任意位置的單個字符。
例如:
ls -l mypro?
ls -l mypro*
bash shell 提供了很多在Linux文件系統上操作文件的命令。
可以使用touch命令來輕松創建空文件: touch test
touch命令創建了指定的新文件,並將當前用戶名作為文件的屬主。
創建的文件大小是零,touch命令只會創建一個空文件。
如果再次使用:touch test
命令,當前已經存在test文件,該命令行會使已有文件的訪問時間和修改時間進行改變,而不改變文件的內容。
touch -a
:只修改訪問時間;touch -m
:只改變修改時間;默認情況下,touch使用當前時間,可以使用:
touch -t 參數加上特定的時間戳來制定時間
例如:
touch -t 201612251200 test
在文件系統中將文件和目錄從一個位置復制到另一個位置就需要使用cp命令。
最基本用法裡,cp需要兩個參數,源對象和目標對象:
cp source destination
當source的destination參數都是文件名時,cp命令將源代碼復制到一個新文件,並且以destination命名。新文件就像全新的文件一樣,有新的創建時間和修改時間。如果目標文��已經存在了,那麼cp命令將會提示你是否要覆蓋已有文件。
同大多數命令一樣,cp命令也有一些可以提供幫助的命令行參數(當前其中部分命令行在Mac下面並沒有效果):
鏈接文件下面的兩個參數只針對Linux有用,Mac上進過測試沒有這幾個命令參數。
你可能已經注意到,cp命令的許多參數都是針對鏈接文件的。這是Linux文件系統的一個優點。
如需要在系統上維護同一文件的的兩份或者多份副本,除了保存多份單獨的物理文件副本之外。還可以采用保存一份物理文件副本和多個虛擬副本的方法。這種虛擬的副本就被稱為鏈接。鏈接是目錄中指向文件真實位置的占位符。在Linux中有兩種不同類型的文件鏈接:
cp -l test1 test4
-l參數創建了一個指向test1的硬鏈接test4。在文件列表可看出,文件test1和test4的索引節點號是相同的,這表明,實際上它們是同一個文件。還要注意,鏈接計數表示當前這兩個文件都有兩個鏈接了。
只能在同種存儲媒體上的文件之間創建硬鏈接,不能在不同掛載點下的文件間創建硬鏈接。在後一種情況下,可以使用軟鏈接。
-s參數可以創建一個符號鏈接,即軟鏈接:
cp -s test1 test5
首先,新建的test5文件有了一個不同於test文件的索引節點號,這說明Linux系統把它當做一個單獨的文件。
其次,文件變小了。鏈接文件只需要存儲源文件的信息,並不需要存儲源文件中的數據。
在復制文件鏈接時需要注意,如果用cp命令來復制一個鏈接到到另一個源文件的文件,那麼你復制的其實是源文件的另一個副本,而不是鏈接文件的。這點很容易混淆。可以創建一個指向源文件的新鏈接,而不用復制鏈接文件。可以創建指向同一文件的多個鏈接,但不要創建指向其他符號鏈接文件的多個符號鏈接。這樣會生成一個鏈接文件鏈,不但容易混淆,還容易斷掉,造成各種各樣的問題。
在Linux中,重命名文件稱為移動(moving)。mv命令就是用來將文件和目錄移動到另一個位置的:
mv test1 test2
mv test1 ../Desktop/
移動文件會改變文件名,但保持同樣的索引節點號和時間戳。移動一個有軟鏈接指向文件會帶來麻煩,會造成一個軟鏈接文件指向一個無效文件。
在Linux中,刪除(deleting)叫做移除(removing)。base shell 中刪除文件的命令是rm。
rm test1
注意命令會提示是否真的要刪除文件(Mac下不會提示)。
base shell中沒有回收站或者垃圾桶,所以一旦刪除就無法找回了。
關於rm命令的命令行參數,可以參考cp的命令行參數,大多數是一致的,以下列舉幾個常用的:
-d:直接把欲刪除的目錄的硬連接數據刪除成0,刪除該目錄;
-f:強制刪除文件或目錄;
-i:刪除已有文件或目錄之前先詢問用戶;
-r或-R:遞歸處理,將指定目錄下的所有文件與子目錄一並處理;
–preserve-root:不對根目錄進行遞歸操作;
-v:顯示指令的詳細執行過程。
當輸出一個帶鏈接的文件時,源文件被刪除後,硬鏈接文件內容依舊存在,而軟鏈接文件時,bash會表示它已經不復存在了。
硬鏈接文件采用和源文件相同的索引節點號。硬鏈接會一直維護這個索引節點號來保留數據,知道刪除了最後一個鏈接它的文件。
所有的軟鏈接文件都知道它所指向的文件不存在了,所以指向的也就是一個無效文件。
在Linux中創建目錄使用mkdir命令。
mkdir finder
系統會創建一個新目錄,並給它分配一個新的索引節點號。
base shell會盡可能的防止用戶誤刪目錄。刪除目錄的基本命令是:rmdir:
rmdir finder
默認情況下,rmdir命令只刪除空目錄。可以使用--ignore-fail-on-non-empty
參數來刪除非空目錄。
當然rm命令也可以使用,由於刪除的是目錄,所以一般情況下需要加-r參數,來遞歸刪除目錄。
一般用的最多的就是rm -rf
,遞歸強制刪除。
stat 命令可以提供文件系統上某個文件的所有狀態信息:
stat test
stat 會顯示文件的基本信息,但是不會顯示當前文件的類型。
file命令就是用來查看文件類型的命令。
file test
file命令將文件分成3類:
當文件是文本文件時,file命令可以判斷出該文件包含文本,還判斷出文本的字符編碼;
當文件是文本腳本文件時,會判斷出可以在系統上運行;
當文件是二進制可執行程序時,file命令可以判斷出文件編譯時面向的平台,以及它需要哪種類型的庫。如果你有從未知來源獲得的二進制文件,這會是個非常有用的特性。
cat命令是顯示文本文件中所有數據的得力助手。
cat test
cat -n test
:給所有行加上行號;cat -b test
:只給有文本的行加上行號;cat -s test
:將多個空白行壓縮到單個空白行;cat -K test
:將制表符使用^I字符組合替換文中所有制表符。對大型文件來說,cat命令會有點繁瑣,文件的文本會在顯示器上一晃而過。
more命令會顯示文本文件的內容,但會在顯示每頁數據之後停下來,並且在屏幕底部顯示一個more標簽,並顯示現在在文本文件中的位置。
more命令的選項:
more命令只支持文本文件中基本的移動。
less 命令是more命令的升級版本,提供了一些極為實用的在文本文件中前後翻動的功能,還有一些極先進的搜索功能。
less命令會提供一些額外的信息:顯示了文件的總行數以及現在顯示的行號區間。less命令支持了more命令支持的所有參數,同事還多了一些選項。
tail命令會顯示文件末尾部分的內容。默認情況下會顯示文件的末尾10行。
-f參數是tail命令的一個突出特性,它允許你在其他進程使用該文件時查看文件的內容。tail命令會保持活動狀態並不斷的顯示添加到文件中的內容。這是實時監測系統日志的絕妙方式。
head命令會顯示文件開頭那些行的內容。默認情況下,它會顯示文件前10行的文本。類似於tail命令,支持-c -n參數,但是不支持-f參數。