使用bash shell提供的基本命令操作Linux文件和目錄

哪怕我們配不上自己的野心,也不要辜負了現在所受的苦難。

Linux shell 是個交互式工具,使用戶可以啟動程序、管理文件以及管理Linux系統上的進程。shell的核心是命令行提示符,是shell的交互部分,它允許你輸入文本命令,之后解釋命令并在內核中執行。

shell包含了一組內置命令,可以用來完成一系列的操作,比如復制文件、移動文件、重命名文件以及顯示和終止系統上正在運行的程序。

shell命令也可以寫入文件中作為程序來執行,這些文件被稱作shell腳本。

1.啟動shell
大多數Linux發行版的默認shell都是GNU bash shell,它是作為常規程序運行的,通常是在用戶登錄終端時啟動,登錄時系統啟動的shell取決于用戶賬戶的配置。

/etc/passwd 文件中包含了所有用戶列表以及每個用戶的基本配置信息。

2.shell提示符
默認的shell提示符是美元符號$,這個符號表明shell在等待用戶輸入。

3.Linux文件系統
首先我們先了解一下Linux的文件系統的構建方式,這和Windows有很大區別。
Windows為每個物理磁盤驅動器分配一個盤符,每個驅動器都會有自己的目錄結構,以便訪問存儲在其上的文件。區別于Windows,Linux在路徑名中不使用驅動器盤符,Linux將文件存儲在單個目錄結構中,這個目錄我們稱之為 虛擬目錄

虛擬目錄結構包含一個稱為根(root)目錄的基礎目錄,根目錄下的目錄和文件會按照訪問它們的目錄路徑一一列出,這點和Windows類似。

舉個例子,Linux文件路徑/home/valie/Document/read.txt,表明read.txt位于Document目錄,Document又位于valie目錄,valie則在home目錄中,但并沒有說明home目錄存在于哪個物理磁盤中。

Linux的根驅動器一般用來存儲系統文件,而用戶文件通常存儲在另一個驅動器里,上面所舉例的home目錄就是位于這個驅動啟器中,那么在沒有給出驅動器盤符的情況下,系統又是如何訪問到home目錄的呢?

這里就要提到 ‘掛載點 ’的概念,那么什么是掛載點?
Linux會在根驅動器中創建一些特別的目錄,這些目錄稱之為‘掛載點’,但事實上這些目錄并不是存儲在根驅動器上,而是存儲在另一個驅動器上。

Linux的虛擬目錄
  • / : 虛擬目錄的根目錄,通常不會在這里存儲文件
  • /usr :用戶安裝軟件的目錄
  • /var :可變目錄,用以存放經常變化的文件,比如日志文件
  • /bin :二進制目錄,存放許多GNU用戶級的工具
  • /dev :設備目錄,Linux在這里創建設備節點
  • /home :主目錄,Linux在這里創建用戶目錄
  • /etc :系統配置文件目錄
  • /boot :啟動目錄,存放啟動文件
  • /opt :可選目錄,通常用于存放可選的軟件包
  • /lib :庫目錄,存放系統和應用程序的庫文件
  • /tmp :臨時目錄,可以在該目錄創建和刪除臨時工作文件

在啟動一個新的shell提示符后,會話通常是從用戶的主目錄開始。

4.切換目錄

cd + 絕對路徑

cd ..  //切換到當前目錄的父目錄

5.文件和目錄列表

  • ls 顯示當前目錄下的文件和目錄
  • ls -F 添加-F參數用于區分目錄和文件,它會在目錄名后添加正斜線/,另外會在可執行文件后加星號*
  • ls -a 顯示當前目錄下的全部文件,包括隱藏文件(以點.開頭,通常用來保存配置信息)
  • ls -R 列出當前目錄下的所有文件和目錄,包括子目錄下的文件和目錄
  • ls -l 參數-l會以長列表的格式輸出,每一行都列出了單個文件或目錄的更多信息。

6.ls命令的兩種命令行參數

  • 單字母參數:以英文破折號開始
  • 全字母參數:以雙英文破折號開始
    大部分參數都有單字母和雙字母兩種版本,而有的則只有一種,部分列舉如下:
單字母 全字母 含義
-a --all 輸出包括以.開頭的隱藏文件
-F --classify 給條目追加文件類型標識符
-R --recursive 遞歸地列出子目錄內容
-i --inode 顯示每個文件的索引節點
-h --human-readable 輸出文件或目錄的大小,以字節為單位
-s --size 輸出每個文件的塊大小
-l 按長列表格式輸出
--author 輸出每個文件的作者

另外,也可以一次使用多個參數。多個雙破折線參數必須分開輸入,而多個單破折線可以組合成一個字符串,如用-s參數列出文件的塊大小,用-a參數列出所有文件,用-i參數列出每個文件的索引點,用-l參數產生一個長列表,組合起來就是:
ls -sail

終端輸出結果

7.過濾輸出列表
ls + 文件名:當使用文件名作為過濾器時,ls命令只顯示這個文件的信息;

有時候我們并不確定文件的確切名稱,或者文件的類型,這時候可以使用標準通配符來輸出滿足要求的文件:

  • 問號?代表一個字符
  • 星號*代表零個或多個字符

比如我想查找Applet文件,但是并不確定它的文件類型,這時候可以這樣使用過濾方法:
ls Applet*

終端輸出結果
并不確定文件名時的查找方法

8.創建文件
有時,在寫入數據之前我們希望這個文件就已經存在,這時可以用touch命令來創建空文件。
touch + 文件名,例如:

創建并打印 time.txt文件

9.復制文件

  • cp命令用于將文件或目錄復制到另一個位置,最基本的用法就是cp+源文件名+目標文件名,例如:
復制 time.txt文件到當前目錄下,新文件名為 time1.txt

從上圖可以看出,time.txt是一個全新的文件,有自己的索引節點。

另外,也可以采用絕對路徑來復制文件:

使用絕對路徑將源文件time.txt復制到當前目錄中,新文件與源文件同名
  • 在cp命令中使用命令行參數,以下是部分參數
參數 含義
-a 歸檔文件,并保留原有的屬性
-b 創建已存在的目標文件的備份,而非覆蓋它
-f 強制覆蓋已存在的目標文件,不提示
-p 保留文件屬性,如訪問時間、修改時間等
-r 遞歸地復制文件
-R 遞歸地復制目錄
使用 -p 參數復制源文件

從上圖可以看出對于已經存在的time1.txt文件,強行復制之后擁有和源文件time.txt一樣的修改時間。

使用 -R 參數遞歸地復制整個目錄的內容
使用通配符將所有以time開頭的文件復制到simple目錄中
使用 -a 參數將以time開頭的文件歸檔到 simple目錄中,文件屬性保留

10.使用ln命令創建鏈接文件
有時,我們需要在系統上維護同一份文件的一到多個副本,用上面個的cp命令復制多個副本并同時維護的方式雖然可行,但很費時費力。這時我們可以用創建虛擬副本的方法來完使維護工作變得輕松起來,這個虛擬副本就稱為鏈接。鏈接是目錄中指向文件真實位置的占位符。

Linux下的兩種不同類型的文件鏈接:

  • 硬鏈接,創建方式:ln + 源文件名 + 目標文件名
  • 軟連接,即符號鏈接,創建方式:ln -s + 源文件名 + 目標文件名

硬鏈接與軟鏈接的區別在于,硬鏈接只能在同種存儲媒體上的文件之間創建,不能在不同掛載點下的文件間創建,也就是說不在同一個磁盤分區中文件之間不能創建硬鏈接,而是使用軟鏈接。

創建一個指向 time.txt文件的硬鏈接 time1.txt

從上圖可以看出,time1.txt和time.txt文件的索引節點號是相同的,表明實際上它們是同一個文件,并且在我修改了time.txt文件后(time.txt中添加了一行‘This is the first modification.’),time1.txt文件中的內容也同步改變了。

創建一個指向time.txt文件的軟連接time2.txt

從上圖看到,文件time2.txt的索引節點號與time.txt不同,說明time2.txt是一個單獨的文件,并且文件變小了,是因為它只需要存儲源文件的信息,并不需要存儲文件中的數據。

10.重命名/移動文件或目錄
在Linux中,文件和目錄的重命名和移動使用的是mv命令(moving),例如:

將time.txt文件重命名為time1.txt

需要注意的是,移動一個有軟鏈接指向的文件會使得它的軟鏈接失效,如下圖time1.txt是一個指向time.txt的硬鏈接,time2.txt是一個指向time.txt的軟鏈接,當time.txt重命名為time3.txt后,time2.txt軟鏈接已不再是一個有效鏈接,已經無法訪問到它所指向的源文件中的內容:

time.txt重命名后,它的軟鏈接 time2.txt失效,硬鏈接保持有效

另外mv命令也用于將文件移動到別的目錄中,如下:

將 time.txt文件移動到當前目錄中的 dir目錄中

11.刪除文件
刪除文件的操作命令是rm,常用參數如下:

參數 含義
-i interactive,即刪除前詢問是否確認刪除
-f force ,即無視提示符,強制刪除
-r recursive,刪除目錄,在刪除這一目錄前會事先刪除目錄中的內容

同樣需要注意的是,當刪除一個帶有軟鏈接的文件時,它的軟鏈接會失效,硬鏈接保持有效。這是因為硬鏈接文件具有和源文件相同的索引節點號,硬鏈接會維持這個索引節點號來保留數據,直到你刪除了最后一個指向這個索引節點的硬鏈接。這一點類似于OC中的引用計數。軟鏈接存放的是源文件的路徑,當源文件已經不存在時,軟鏈接中所指向的源文件路徑也就不可用了,所以軟鏈接失效。

刪除 time.txt源文件后,軟鏈接 time2.txt無法訪問到源文件的內容

12.創建目錄
創建目錄不能使用touch命令,而是使用mkdir命令,如:
mkdir dir

13.刪除目錄
· 刪除目錄的基本命令是rmdir, 但是rmdir只能刪除空目錄,當目錄下有文件時,這個目錄就不能被刪除:

dir目錄下有 time.txt文件

要想刪除一個非空目錄,我們得用到rm命令,rm -r + 目錄名稱 會遞歸地刪除目錄中的文件,最后再刪除目錄本身:

使用 rm -r 命令刪除非空目錄 dir

14.查看文件信息
stat + 文件名 可以查看文件的所有狀態信息
file + 文件名 查看文件類型
file命令將文件分為3類:

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

15.查看文件內容

  • 使用cat命令查看文件所有數據內容,cat命令常用的參數如下:
參數 含義
-n 給所有行添加行號
-b 只給有文本的行添加行號
-s 將多個空白行壓縮成單個空白行
-e 在每行結束處添加美元符$
-t 用^+豎線去替代文中的制表符(ps:簡書寫作格式bug)
使用 cat命令打印文件內容
使用 -n 參數給所有行添加行號
使用 -b參數給只有文本的行添加行號
使用 -s參數將多個空白行壓縮到單個空白行
使用 -e 參數在每行結束處顯示 $
使用 -t參數將制表符用 ^| 代替

使用cat命令會打印出文件的全部內容,但是如果文件內容非常多,那么查看文件內容非常不便,這時可以使用more命令。

  • 使用more命令查看文件內容 -- 實現分頁查看
    more命令常用的參數列舉:
參數 含義
+n 從第n行開始顯示
-n 設置每屏大小為n行
-s 將多個空白行壓縮成單個空白行

使用的常用操作符有:

操作命令 含義
Enter 向下n行,默認為1行,需要設置
cmd + F 向下滾動一屏
空格鍵 向下滾動一屏
cmd + B 返回上一屏
= 輸出當前行的行號
V 調出vi編輯器
Q 退出more命令
  • 使用head命令查看文件的開頭內容,默認顯示10行
  • 使用tail命令查看文件的尾部內容,默認顯示10行
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容