歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Linux / Mac 下 基本的 bash shell 命令詳解

Linux / Mac 下 基本的 bash shell 命令詳解

前言

本篇主要介紹了在Linux / Mac 系統下,一些基本的bash shell命令。

遍歷目錄 cd

cd destination

cd命令可以帶單個參數destination,用以制定你想切換到的目錄名。如果用戶沒有指定目標路徑,將會切換到當前用戶主目錄。
目錄路徑參數可以使用兩種方式表達:

  • 絕對文件路徑
    用戶可在虛擬目錄中采用==絕對文件路徑==來引用目錄名。絕對文件路徑定義了在虛擬目錄結構中該目錄的確切位置,以虛擬目錄的根目錄開始,相當於目錄的全名。
    即以“/”開頭的目錄的絕對路徑,當當前所在的目錄已經在工作目錄中時,可以使用 cd / 回到根目錄。

  • 相對文件路徑
    ==相對文件路徑==允許用戶指定一個基於當前位置的目錄文件路徑,而無需再從根目錄開始。相對文件路徑不以代表根目錄的正斜線(/)開頭,而以目錄名(如果用戶准備切換到當前工作目錄下的一個目錄)或是一個表示基於用戶當前目錄的相對位置的特殊字符開始。有兩個特殊字符:

    • 單點符(.),表示當前目錄;
    • 雙點符(..),表示當前目錄的父級目錄。

    例如:

    cd ../Desktop
    cd ./Doc
    cd ../../etc

列表命令 ls

基本列表功能

命令區分大小寫。
ls命令的基本格式會顯示當前目錄下的文件和目錄。
ls命令輸出的列表是按字母排序的(按列排序而不是按行排序)。如果用戶用的是支持彩色的終端模擬器(==Mac 電腦終端默認是沒有色彩的,可以百度添加配置文件==),ls命令還可以用不同的顏色來區分不同類型的文件。LS_COLORS環境變量控制著這個功能。

  • ls -F:該命令會在結果中的目錄名後面加正斜線(/),以方便用戶在輸出中分辨它們。類似的,他會在可執行文件後面加個星號,以便找出可在系統上運行的文件。
  • ls -a:該命令可以將隱藏文件和目錄一起顯示出來。
  • ls -R:該命令可以列出當前目錄下的包含的目錄中的文件。如果有很多個目錄,這個輸出會很長。

修改輸出信息

ls命令並沒有輸出每個文件額太多相關信息。需要顯示更多的信息,需要使用改命令:

  • ls -l:該參數會產生長列表格式的輸出,包含了目錄中每個文件的更多的相關信息:
    這種超列表格式的輸出在每一行中列出了單個文件或目錄。除了文件名,輸出中還有其他有用信息。輸出的第一行顯示了目錄中包含的塊的總數。之後每一行都包含了關於文件(或目錄)的下述信息:
    • 文件類型,比如目錄(d)、文件(-)、字符型文件(c)或者塊文件(b);
    • 文件的權限;
    • 文件的硬鏈接總數;
    • 文件屬主的用戶名;
    • 文件屬主的組名;
    • 文件的大小(已字節為單位);
    • 文件的上次修改時間;
    • 文件名或目錄名。

完整的參數列表

在進行文件管理時,ls命令的很多參數可能會派上用場。針對ls運行一下man命令,你就能看到可用來修改ls命令輸出的參數就有好幾頁。man ls
ls命令采用兩種格式的命令行參數:

  • 單字母參數;
  • 全字母參數;

單字母參數通常是由英文破折號開始,全字參數則更易於看懂,通常以雙英文破折號開始。許多參數都有單字母和全字母兩種版本,而有些則只有一種。

==Mac 終端下,測試了幾個命令並不用輸入“–”,直接輸入“-”加後面的命令即可,還有就是下表的一些命令,在Mac 並沒有響應。目前不知道是測試輸入錯誤還是本身並不支持。==

單字母全字描述 -a –all 輸出包括以“.”打頭的隱藏文件 -A –almost-all 不要輸出“.”和“..”文件   –author 輸出每個文件的作者 -b –escape 輸出不可打印的字符的八進制值   –block-size=size 按照size字節的大小來計算大小塊(快數) -B –ignore-backups 不要列出名稱中包含波浪線(~)的條目(波浪線用來表示備份的副本) -c   按最後一次修改時間排序 -C   按列輸出條目   –color=when 何時使用彩色(always,never或者auto) -d –directory 列出目錄條目而非內容,並且不用跟蹤符號鏈接 -F –classify 給條目追加文件類型標識符   –file-type 只在部分文件類型(非可執行文件)後追加文件類型標識符   –format=word 將輸出格式化成across(交叉)、commas(逗號)。horizontal(水平)、long(長)、single-column(單列)、verbose(詳細)或vertical(垂直) -g   輸出除文件屬主之外所有信息   –group-directories-first 在文件之前列出所有目錄 -G –no-group 在長列表輸出格式下,不顯示組名 -h –human-readable 打印大小,K表示千字節   –si 和-h相同,但進率為1000,而非1024 -i –inode 顯示每個文件的所有值(inode) -l   按長列表輸出格式顯示 -L –dereference 對於鏈接文件,顯示原文件信息 -n –numeric-uid-gid 顯示數字類型的userid和groupid以替代名字 -o   在長列表格式下不顯示組名 -r –reverse 在輸出文件和目錄時,反轉排序的順序 -R –recursive 遞歸的列出子目錄的內容 -s –size 輸出每個文件的塊大小 -S –sort=size 按文件大小排序輸出 -t –sort=time 按文件修改時間排序輸出 -u   輸出文件的最後訪問時間而非最後修改時間 -U –sort=none 不要將輸出排序 -v –sort=version 將文件版本排序輸出 -x   按行而非按列輸出條目 -X –sort=extension 按文件擴展名排序輸出

如果需要,也可以一次使用多個參數。多個雙破折線參數必須分開輸入,而多個單波折線可以組合成一個字符串跟在一個單破折線後面。例如:ls -alis單命令無關順序。

過濾輸出列表

由前面的例子可以知道,默認情況下,ls命令會輸出目錄下的所有文件。
ls命令還支持在命令行下定義過濾器。它會用過濾器決定應該在輸出中顯示哪些文件和目錄。
這個過濾器就是個進行簡單文本匹配的的字符串,可以在要用的命令行參數後添加這個過濾器:

ls -l 匹配字符串

當用戶指定特定的文件名稱作為過濾器時,ls命令只會顯示那個文件的信息。
有時候當不知道要找的文件的確切名稱。ls命令可以識別標准通配符,並在過濾器中用它們來進行模式匹配:

  • 問好代表一個字符。
  • 星號代表零個或多個字符。

問號可用在過濾器字符串中替代任意位置的單個字符。
例如:

ls -l mypro?
ls -l mypro*

處理文件

bash shell 提供了很多在Linux文件系統上操作文件的命令。

創建文件 touch

可以使用touch命令來輕松創建空文件:
touch test
touch命令創建了指定的新文件,並將當前用戶名作為文件的屬主。
創建的文件大小是零,touch命令只會創建一個空文件。
如果再次使用:touch test命令,當前已經存在test文件,該命令行會使已有文件的訪問時間和修改時間進行改變,而不改變文件的內容。

  • touch -a :只修改訪問時間;
  • touch -m :只改變修改時間;

默認情況下,touch使用當前時間,可以使用:

  • touch -t 參數加上特定的時間戳來制定時間
    例如:

    touch -t 201612251200 test

復制文件 cp

在文件系統中將文件和目錄從一個位置復制到另一個位置就需要使用cp命令。
最基本用法裡,cp需要兩個參數,源對象和目標對象:

cp source destination

當source的destination參數都是文件名時,cp命令將源代碼復制到一個新文件,並且以destination命名。新文件就像全新的文件一樣,有新的創建時間和修改時間。如果目標文��已經存在了,那麼cp命令將會提示你是否要覆蓋已有文件。

同大多數命令一樣,cp命令也有一些可以提供幫助的命令行參數(當前其中部分命令行在Mac下面並沒有效果):

參數描述 -a 歸檔文件,並保留它們現在的屬性(linux文件歸檔的意思是為文件或目錄備份,建立歸檔文件) -b 創建已存在目錄文件的備份,而非覆蓋它 -d 保留 -f 強制覆蓋已存在的目標文件,不提示 -i 在覆蓋目標文件之前提示 -l 創建文件鏈接而非復制文件 -p 如果可能保留文件屬性 -r 遞歸的復制文件 -R 遞歸的復制目錄 -s 創建一個符號鏈接而非復制文件 -S 覆蓋默認的備份文件的後綴(默認是~) -u 僅在源文件比目標文件新的情況下復制(相當於更新) -v 詳細模式,解釋到底發生了什麼 -x 僅限於當前文件系統的復制(這句話的背景是:Linux可同時掛在多個不同的文件系統類型的存儲設備)

鏈接文件 cp -l cp -s

鏈接文件下面的兩個參數只針對Linux有用,Mac上進過測試沒有這幾個命令參數。
你可能已經注意到,cp命令的許多參數都是針對鏈接文件的。這是Linux文件系統的一個優點。
如需要在系統上維護同一文件的的兩份或者多份副本,除了保存多份單獨的物理文件副本之外。還可以采用保存一份物理文件副本和多個虛擬副本的方法。這種虛擬的副本就被稱為鏈接。鏈接是目錄中指向文件真實位置的占位符。在Linux中有兩種不同類型的文件鏈接:

  • 符號鏈接,即軟鏈接;
  • 硬鏈接
    硬鏈接會創建一個獨立文件,其中包含了源文件的信息以及位置。引用硬鏈接文件文件等同於鏈接了源文件:
cp -l test1 test4

-l參數創建了一個指向test1的硬鏈接test4。在文件列表可看出,文件test1和test4的索引節點號是相同的,這表明,實際上它們是同一個文件。還要注意,鏈接計數表示當前這兩個文件都有兩個鏈接了。
只能在同種存儲媒體上的文件之間創建硬鏈接,不能在不同掛載點下的文件間創建硬鏈接。在後一種情況下,可以使用軟鏈接。

-s參數可以創建一個符號鏈接,即軟鏈接:

cp -s test1 test5

首先,新建的test5文件有了一個不同於test文件的索引節點號,這說明Linux系統把它當做一個單獨的文件。
其次,文件變小了。鏈接文件只需要存儲源文件的信息,並不需要存儲源文件中的數據。

在復制文件鏈接時需要注意,如果用cp命令來復制一個鏈接到到另一個源文件的文件,那麼你復制的其實是源文件的另一個副本,而不是鏈接文件的。這點很容易混淆。可以創建一個指向源文件的新鏈接,而不用復制鏈接文件。可以創建指向同一文件的多個鏈接,但不要創建指向其他符號鏈接文件的多個符號鏈接。這樣會生成一個鏈接文件鏈,不但容易混淆,還容易斷掉,造成各種各樣的問題。

重命名文件 mv

在Linux中,重命名文件稱為移動(moving)。mv命令就是用來將文件和目錄移動到另一個位置的:

mv test1 test2
mv test1 ../Desktop/

移動文件會改變文件名,但保持同樣的索引節點號和時間戳。移動一個有軟鏈接指向文件會帶來麻煩,會造成一個軟鏈接文件指向一個無效文件。

刪除文件 rm

在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 命令可以提供文件系統上某個文件的所有狀態信息:

stat test

stat 會顯示文件的基本信息,但是不會顯示當前文件的類型。

查看文件類型 file

file命令就是用來查看文件類型的命令。

file test

file命令將文件分成3類:

  • 文本文件:可打印字符的文件。
  • 可執行文件:可在系統上運行的文件。
  • 數據文件:包含不可打印的二進制字符、又不能在系統上運行的文件。

當文件是文本文件時,file命令可以判斷出該文件包含文本,還判斷出文本的字符編碼;
當文件是文本腳本文件時,會判斷出可以在系統上運行;
當文件是二進制可執行程序時,file命令可以判斷出文件編譯時面向的平台,以及它需要哪種類型的庫。如果你有從未知來源獲得的二進制文件,這會是個非常有用的特性。

查看整個文件 cat more less

cat命令

cat命令是顯示文本文件中所有數據的得力助手。

cat test
  • cat -n test :給所有行加上行號;
  • cat -b test :只給有文本的行加上行號;
  • cat -s test :將多個空白行壓縮到單個空白行;
  • cat -K test :將制表符使用^I字符組合替換文中所有制表符。

對大型文件來說,cat命令會有點繁瑣,文件的文本會在顯示器上一晃而過。

more 命令

more命令會顯示文本文件的內容,但會在顯示每頁數據之後停下來,並且在屏幕底部顯示一個more標簽,並顯示現在在文本文件中的位置。
more命令的選項:

選項描述 H 顯示幫助菜單 spacebar 顯示文本文件的下一屏 z 顯示文件文本的下一屏 ENTER 顯示文本文件的下一行 d 顯示文件文本的後面半屏(會更新11行) q 退出程序 s 顯示文件文本的下一行 f 顯示下一屏文件文本 b 顯示上一屏文件文本 /expression 在文件中查找匹配文本表達式的內容 n 在文件中查找下一處匹配已制定表達式的內容 ‘ 跳到指定表達式匹配到的第一處內容 !cmd 執行shell命令 v 在當前行啟動vi編輯器 CTRL-L 重繪當前行 = 顯示當前行在文件中的行號 . 重復執行前一個命令

more命令只支持文本文件中基本的移動。

less命令

less 命令是more命令的升級版本,提供了一些極為實用的在文本文件中前後翻動的功能,還有一些極先進的搜索功能。

less命令會提供一些額外的信息:顯示了文件的總行數以及現在顯示的行號區間。less命令支持了more命令支持的所有參數,同事還多了一些選項。

查看部分文件 tail head

tail命令

tail命令會顯示文件末尾部分的內容。默認情況下會顯示文件的末尾10行。

參數描述 -c bytes 顯示文件最後的bytes個字節的字符 -n lines 顯示文件最後的lines行 -f 讓tail程序一直保持在活動狀態,如果有新的內容加到文件的末尾就顯示出來 –pid=PID 和參數-f一起,跟蹤一個文件知道進程ID為PID的進程結束 -s sec 和-f參數一起,在每次循環輸出之間休眠sec秒 -v 總是顯示帶文件名的頭 -q 從不顯示帶文件名的頭

-f參數是tail命令的一個突出特性,它允許你在其他進程使用該文件時查看文件的內容。tail命令會保持活動狀態並不斷的顯示添加到文件中的內容。這是實時監測系統日志的絕妙方式。

head 命令

head命令會顯示文件開頭那些行的內容。默認情況下,它會顯示文件前10行的文本。類似於tail命令,支持-c -n參數,但是不支持-f參數。

Copyright © Linux教程網 All Rights Reserved