1. 程式人生 > >《Linux系統》之"皮毛系列"(三) Linux系統的常用命令

《Linux系統》之"皮毛系列"(三) Linux系統的常用命令

通過前兩篇文章的介紹,我們知道Linux系統的理念是:一切皆檔案。而檔案,就要涉及到命名規範,如下所示:

1)除了/之外,所有字元都合法
2)有些字元最好不要用,如空格符、製表符、字元@#$&()-等
3)避免使用.作為普通檔名的第一個字元。
4)大小寫敏感

今天我們來學習一下常用的命令(命令一般為可執行檔案):

命令格式:命令  -選項   引數
    ex:   ls  -la  /etc
說明:
1)當有多個選項時,可以寫在一起
2)兩個特殊的目錄 .和 .. ,分別代表當前目錄和當前目錄的父目錄

一、檔案處理命令


1、ls命令

命令原意:list                                                   命令路徑:/bin/ls                                              執行許可權:所有使用者
功能描述:顯示目錄裡包含的檔案,或檢視檔案許可權(包括目錄、資料夾、檔案許可權)、檢視目錄資訊等等
語法:  ls    選項    [目錄或檔案]


常用引數搭配:
a :列出目錄所有檔案,包含以.開始的隱藏檔案
A :列出除.及..的其它檔案 
r :反序排列
t :以檔案修改時間排序
S :以檔案大小排序
l :除了檔名之外,還將檔案的許可權、所有者、檔案大小等資訊詳細列出來
d:檢視目錄的屬性


2、cd命令

命令原意:change directory                                 命令路徑:shell內建命令                               執行許可權:所有使用者
功能描述:用於切換、改變當前的目錄
語法:cd   [目錄]


Ex:  cd  /  切換到根目錄
cd  ..     回到上一級目錄


3、pwd命令

命令原意:print  working directory                            命令路徑:/bin/pwd                                      執行許可權:所有使用者
功能描述:顯示當前所在的工作目錄
語法:pwd


4、touch命令

命令原意:                                                              命令路徑:/bin/touch                                    執行許可權:所有使用者
功能描述:用於在檔案系統上建立空檔案
語法:touch  [檔名]
Ex:  touch  HelloWorld.java


5、mkdir命令

命令原意:make directories                                         命令路徑:/bin/mkdir                                    執行許可權:所有使用者
功能描述:建立新目錄
語法:mkdir  -選項  [目錄名]
選項介紹:
-m: 對新建目錄設定存取許可權,也可以用chmod命令設定;
-p: 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,系統將自動建立好那些尚不存在的目錄,即一次可以建立多級目錄;
Ex:
1) mkdir t 
2) mkdir -p /tmp/test/t1/t


6、cp命令

命令原意:copy                                                      命令路徑:/bin/cp                                           執行許可權:所有使用者
功能描述:複製檔案或目錄
語法:cp -r  [原始檔或目錄] [目的檔案或目錄]
-r  複製目錄
Ex: 
1)cp  file1 file2   dir1                         將檔案file1、file2複製到目錄dir1
2)cp –r dir1 dir2                               將dir1下的所有檔案及子目錄複製到dir2


7、mv命令

命令原意:move                                                      命令路徑:/bin/mv                                           執行許可權:所有使用者
功能描述:用於移動檔案、或對檔案進行更名
語法:mv  [檔案或目錄名] [目的目錄]
Ex: 
(1)將檔案test.log重新命名為test1.txt
           mv test.log test1.txt
(2)將檔案log1.txt,log2.txt,log3.txt移動到根的test3目錄中
           mv llog1.txt log2.txt log3.txt /test3
(3)將檔案file1改名為file2,如果file2已經存在,則詢問是否覆蓋
           mv -i log1.txt log2.txt
(4)移動當前資料夾下的所有檔案到上一級目錄
           mv * ../


8、rm命令

命令原意:remove                                                    命令路徑:/bin/rm                                        執行許可權:所有使用者
功能描述:用於刪除檔案
語法:rm   -r  [檔案或目錄]
選項介紹: -r  刪除目錄
                   -f 不再詢問
                   -i 詢問
Ex:         
(1)刪除任何.log檔案;刪除前逐一詢問確認
         rm -i *.log
(2)刪除test子目錄及子目錄中所有檔案刪除,並且不用一一確認        
         rm -rf test
(3)刪除以-f開頭的檔案
         rm -- -f*

 


9、cat命令

命令原意:concatenate and display files                        命令路徑:/bin/cat                                      執行許可權:所有使用者
功能描述:顯示檔案內容, 從鍵盤建立一個檔案,或將幾個檔案合併成一個檔案。
語法:cat  [檔名]
           cat > filename
           cat file1 file2 > file
選項介紹:-b 對非空輸出行號
                  -n 輸出所有行號
例項:
  (1)把 log2012.log 的檔案內容加上行號後輸入 log2013.log 這個檔案裡
            cat -n log2012.log log2013.log
(2)把 log2012.log 和 log2013.log 的檔案內容加上行號(空白行不加)之後將內容附加到 log.log 裡
            cat -b log2012.log log2013.log log.log 
(3)使用here doc生成新檔案   
            cat >log.txt <<EOF
           >Hello
           >World
           >PWD=$(pwd)
          >EOF
          ls -l log.txt
          cat log.txt
          Hello
          World
          PWD=/home/michael
(4)反向列示
          tac log.txt
          PWD=/home/michael
          World
          Hello


10、more命令

命令路徑:/bin/more                   執行許可權:所有使用者
功能描述:分頁顯示檔案內容
語法:more  [檔名]
>>常用相關操作命令:
Enter    向下n行,需要定義。預設為1行
Ctrl+F   向下滾動一屏
空格鍵  向下滾動一屏
Ctrl+B  返回上一屏
=          輸出當前行的行號
:f        輸出檔名和當前行的行號
V          呼叫vi編輯器
!命令    呼叫Shell,並執行命令
q       退出more
  例項:
        (1)顯示檔案中從第3行起的內容
                    more +3 text.txt
        (2)在所列出檔案目錄詳細資訊,藉助管道使每次顯示5行
                  ls -l | more -5
                  按空格顯示下5行


11、less命令

 less 與 more 類似,但使用 less 可以隨意瀏覽檔案,功能更強大。執行許可權:所有使用者
 常用命令引數
-N  顯示每行的行號
-o  <檔名> 將less 輸出的內容在指定檔案中儲存起來
-s  顯示連續空行為一行
b  向後翻一頁
d  向後翻半頁
Q  退出less 命令
u  向前滾動半頁
y  向前滾動一行
空格鍵 滾動一行
回車鍵 滾動一頁
[pagedown]: 向下翻動一頁
[pageup]:   向上翻動一頁
例項:
(1)ps檢視程序資訊並通過less分頁顯示
            ps -aux | less -N
(2)檢視多個檔案
            less 1.log 2.log
         可以使用n檢視下一個,使用p檢視前一個


12、head命令

命令路徑:/bin/head                              執行許可權:所有使用者
功能描述:檢視檔案的前幾行
語法:head  -num  [檔名]
           -num  顯示檔案的前num行
Ex:  head -20  /etc/services
   (1)顯示1.log檔案中前20行
         head 1.log -n 20
(2)顯示1.log檔案前20位元組
         head -c 20 log2014.log
(3)顯示t.log最後10行
         head -n -10 t.log


13、tail命令

命令路徑:/bin/tail                                       執行許可權:所有使用者
功能描述:檢視檔案的後幾行
語法:tail  -num  [檔名]
           -num  顯示檔案的後num行
           -f  動態顯示檔案內容
Ex:  head -20  /etc/services
(1)迴圈讀取逐漸增加的檔案內容
          ping 127.0.0.1 > ping.log &(後臺執行:可使用jobs -l檢視,也可使用fg將其移到前臺執行)
          tail -f ping.log(檢視日誌)


14、ln命令

命令原意:link                                              命令路徑:/bin/ln                                        執行許可權:所有使用者
功能描述:建立連結檔案,相當於windows的快捷方式
語法:ln -s  [原始檔]  [目標檔案]
-s  建立軟連線
Ex: 
(1) ln –s /etc/issue  /issue.soft
       建立檔案/etc/issue的軟連線/issue.soft
(2) ln  /etc/issue   /issue.hard
       建立檔案/etc/issue的硬連結/issue.hard

二、軟連線與硬連結

在學習檔案處理命令時,我們學習瞭如何建立軟連結和硬連結。這兩種檔案是linux系統中的“特殊檔案”,相當於windows檔案系統中的快捷方式。那麼下面再具體講講軟連線和硬連結的區別。如果想弄明白軟硬連結,首先我們得先知道inode的概念。

1、inode

在前面的文章我們提過,一個檔案是由目錄塊、inode、資料塊三部分組成。

1)目錄塊:記錄著檔名和inode節點號碼;
2)inode: 儲存的資訊有唯一標識號碼, 建立時間、修改時間 、檔案大小、屬主、歸屬組、讀寫許可權、資料所在block號等資訊
3)資料塊:是儲存檔案真實資料的地方。

在 Linux 中, inode儲存的引數中唯獨不包含檔名,而inode號碼(索引節點號)才是檔案的唯一標識而非檔名。檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。下圖展示了程式通過檔名獲取檔案內容的過程。

在Linux 系統中檢視 inode 號可使用命令 stat 或  ls  -i(若是 AIX 系統,則使用命令 istat)。

當我們使用命令 mv 移動並重命名檔案時,檔案的使用者資料及 inode號碼不會改變,檔案移動前後 inode 號還是:916538。

為解決檔案的共享使用,Linux 系統引入了兩種連結:硬連結 (hard link) 與軟連結(soft link)。連結不僅解決了檔案的共享使用,還帶來了隱藏檔案路徑、增加許可權安全及節省儲存等優勢。

2、硬連結

若一個 inode 號對應多個檔名,則稱這些檔案為硬連結。換言之,硬連結就是同一個檔案使用了多個別名(如下圖,硬連結就是file的一個別名,他們有共同的 inode)。

下面我們來做個測試:我們先準備兩個檔案,詳情如下:

然後,給a.txt做一個硬連結aaaHard,詳情如下:

建立硬連結前,a.txt顯示的連結數目為1,建立連結後

  • 1)a.txt和aaaHard的連結數目都變為2。
  • 2)a.txt和aaaHard的inode號是一樣的,都是916538
  • 3)a.txt和aaaHard顯示的檔案大小也是一樣,都是11B。

再使用stat命令查詢一下:

由此可見:a.txt和aaaHard只是同一個檔案的兩個名字而已, 它們具有同樣的索引節點號和檔案屬性,建立檔案a.txt的硬連結,就是為 a.txt的檔案索引節點在當前目錄上建立一個新指標。你可以刪除其中任何一個,如rm a.txt,每次只會刪除一個指標,連結數同時減一,只有將所有指向檔案內容的指標,也即連結數減為0時,核心才會把檔案內容從磁碟上刪除。

3、軟連線

軟連結與硬連結不同,軟連結就是一個普通檔案,有著自己的 inode 號以及使用者資料塊,只不過對應的資料塊裡的內容比較特殊,儲存的是另一檔案的路徑名的指向。(見解)

現在,我們繼續上一個測試,給b.java新增軟連線,詳情如下:

從上圖,我們不難發現,軟連結的inode號碼與b.java的不是同一個,檔案大小也不一樣等等。

4、硬連結與軟連線的區別

硬連結和軟連結不僅僅是在概念上的不同,在實現方式上也不同。我們總結一下硬連結與軟連結的區別:

  1. 硬連結檔案和原始檔公用一個inode號,說明他們是同一個檔案,而軟連結檔案和原始檔擁有不同的inode號,表明他們是兩個不同的檔案;
  2. 在檔案屬性上軟連結明確寫出了是連結檔案,而硬連結沒有寫出來,因為在本質上硬連結檔案和原始檔是同一個檔案;
  3. 連結數目是不一樣的,軟連結的連結數目不會增加;
  4. 檔案大小是不一樣的,硬連結檔案顯示的大小是跟原檔案是一樣的。而軟連結大小與原始檔就不同了。
  5. 使用者不能給目錄建立硬連結,軟連線卻可以指向目錄
  6. 硬連結不可以跨檔案系統。因為 inode 是這個檔案在當前分割槽中的索引值,是相對於這個分割槽的。而軟連結沒有任何檔案系統的限制

軟連線也是有缺點的:因為軟連線的資料塊記憶體儲的是原始檔的路徑資訊,因此當原始檔被移動到其他目錄後,再訪問連結檔案,系統就找不到了原始檔了,軟連結就成了死連結。而硬連結是沒有這個缺陷的,怎麼移動原始檔都沒有關係;還有它要系統分配額外的空間用於建立新的索引節點和儲存原始檔的路徑的資料塊。

5、與軟硬連結相關的操作

除了“ls -il”命令檢視檔案的屬性及其inode號碼,和stat命令 檢視檔案的inode資訊外,我們還可以使用find命令進行一些查詢操作:

案例1: 查詢在路徑 /home/michael/test 下的檔案 b.java 的軟連結
           # find /home/michael/test -lname b.java
案例2: 檢視路徑 /home/michael/test有相同 inode 的所有硬連結
           # find /home/michael/test  -samefile /home/michael/test/a.txt
案例3:查詢inode號碼是660650的檔案
           # find /home -inum 660650
案例4:列出路徑 /home/michael/test下的所有軟連結檔案
           # find /home/michael/test -type l -ls

----------------------------------------------------------------------------未完待續,敬請留言-------------------------------------------------------------