1. 程式人生 > 實用技巧 >84、Linux命令——2020年07月27日12:51:44

84、Linux命令——2020年07月27日12:51:44

84、Linux命令

3. 常用命令

3.1 概述

  • 很多人可能在電視或電影中看到過類似的場景,黑客面對一個黑色的螢幕,上面飄著密密麻麻的字元,梆梆一頓敲,就完成了竊取資料的任務。
  • Linux 剛出世時沒有什麼圖形介面,所有的操作全靠命令完成,就如同電視裡的黑客那樣,充滿了神祕與晦澀。
  • 近幾年來,儘管 Linux 發展得非常迅速,圖形介面越來越友好,但是在真正的開發過程中,Linux 命令列的應用還是佔有非常重要的席位,而且許多Linux功能在命令列介面要比圖形化介面下執行的快。可以說不會命令列,就不算會 Linux。
  • Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁碟操作、檔案存取、目錄操作、程序管理、檔案許可權設定等。Linux 發行版本最少的命令也有 200 多個,這裡只介紹比較重要和使用頻率最多的命令。

3.2 命令使用方法

3.2.1 Linux 命令格式
command [-options] [parameter1] … 

說明:

l command:命令名,相應功能的英文單詞或單詞的縮寫

l [-options]:選項,可用來對命令進行控制,也可以省略,[]代表可選

l parameter1 …:傳給命令的引數,可以是零個一個或多個

3.2.2 檢視幫助文件

1) --help

一般是 Linux 命令自帶的幫助資訊,並不是所有命令都自帶這個選項。

如我們想檢視命令 ls 的用法:ls --help

2) man(有問題找男人)

man 是 Linux 提供的一個手冊,包含了絕大部分的命令、函式使用說明。

該手冊分成很多章節(section),使用 man 時可以指定不同的章節來瀏覽不同的內容。

man 中各個 section 意義如下:

1.Standard commands(標準命令)

2.System calls(系統呼叫,如open,write)

3.Library functions(庫函式,如printf,fopen)

4.Special devices(裝置檔案的說明,/dev下各種裝置)

5.File formats(檔案格式,如passwd)

6.Games and toys(遊戲和娛樂)

7.Miscellaneous(雜項、慣例與協定等,例如Linux檔案系統、網路協定、ASCII 碼;environ全域性變數)

8.Administrative Commands(管理員命令,如ifconfig)

man使用格式如下:

man [選項] 命令名

man設定瞭如下的功能鍵:

功能鍵 功能
空格鍵 顯示手冊頁的下一屏
Enter鍵 一次滾動手冊頁的一行
b 回滾一屏
f 前滾一屏
q 退出man命令
h 列出所有功能鍵
/word 搜尋word字串

如,我們想檢視 ls 的用法:man 1 ls ( 1:為數字“1”,代表第 1 個 section,標準命令 )

實際上,我們不用指定第幾個章節也用檢視,如,man ls。但是,有這個一種情況,假如,命令的名字和函式的名字剛好重名(如:printf),它既是命令,也可以是庫函式,如果,我們不指定章節號,man printf,它只檢視命令的用法,不會查詢函式的用法,因為 man 是按照手冊的章節號的順序進行搜尋的。

所以,使用 man 手冊時,最好指定章節號:

3.2.3 使用技巧

1) 自動補全

在敲出命令的前幾個字母的同時,按下tab鍵,系統會自動幫我們補全命令。

2) 歷史命令

當系統執行過一些命令後,可按上下鍵翻看以前的命令,history將執行過的命令列舉出來。

3.3 常用命令

3.3.1 檔案管理

1) 檢視檔案資訊:ls

ls是英文單詞list的簡寫,其功能為列出目錄的內容,是使用者最常用的命令之一,它類似於DOS下的dir命令。

Linux檔案或者目錄名稱最長可以有256個字元,“.”代表當前目錄,“..”代表上一級目錄,以“.”開頭的檔案為隱藏檔案,需要用 -a 引數才能顯示。

ls常用引數:

引數 含義
-a 顯示指定目錄下所有子目錄與檔案,包括隱藏檔案
-l 以列表方式顯示檔案的詳細資訊
-h 配合 -l 以人性化的方式顯示檔案大小

圖中列出的資訊含義如下圖所示:

與DOS下的檔案操作類似,在Unix/Linux系統中,也同樣允許使用特殊字元來同時引用多個檔名,這些特殊字元被稱為萬用字元。

萬用字元 含義
* 檔案代表檔名中所有字元
ls te* 查詢以te開頭的檔案
ls *html 查詢結尾為html的檔案
代表檔名中任意一個字元
ls ?.c 只找第一個字元任意,字尾為.c的檔案
ls a.? 只找只有3個字元,前2字元為a.,最後一個字元任意的檔案
ls [a-f]* 找到從a到f範圍內的的任意一個字元開頭的檔案
\ 如果要使萬用字元作為普通字元使用,可以在其前面加上轉義字元。“?”和“*”處於方括號內時不用使用轉義字元就失去萬用字元的作用。
ls *a 查詢檔名為*a的檔案

2) 輸出重定向命令:>

Linux允許將命令執行結果重定向到一個檔案,本應顯示在終端上的內容儲存到指定檔案中。

如:ls > test.txt ( test.txt 如果不存在,則建立,存在則覆蓋其內容 )

>輸出重定向會覆蓋原來的內容,>>輸出重定向則會追加到檔案的尾部。

3) 分屏顯示:more

檢視內容時,在資訊過長無法在一屏上顯示時,會出現快速滾屏,使得使用者無法看清檔案的內容,此時可以使用more命令,每次只顯示一頁,按下空格鍵可以顯示下一頁,按下q鍵退出顯示,按下h鍵可以獲取幫助。

4) 管道:|

管道:一個命令的輸出可以通過管道做為另一個命令的輸入。

管道我們可以理解現實生活中的管子,管子的一頭塞東西進去,另一頭取出來,這裡“ | ”的左右分為兩端,左端塞東西(寫),右端取東西(讀)。

5) 清屏:clear

clear作用為清除終端上的顯示(類似於DOS的 3清屏功能),也可使用快捷鍵:Ctrl + l ( “l” 為字母 )。

6) 切換工作目錄: cd

在使用Unix/Linux的時候,經常需要更換工作目錄。cd命令可以幫助使用者切換工作目錄。Linux所有的目錄和檔名大小寫敏感。

cd後面可跟絕對路徑,也可以跟相對路徑。如果省略目錄,則預設切換到當前使用者的主目錄。

命令 含義
cd 切換到當前使用者的主目錄(/home/使用者目錄),使用者登陸的時候,預設的目錄就是使用者的主目錄。
cd ~ 切換到當前使用者的主目錄(/home/使用者目錄)
cd . 切換到當前目錄
cd .. 切換到上級目錄
cd - 可進入上一個進入的目錄

注意:如果路徑是從根路徑開始的,則路徑的前面需要加上 “ / ”,如 “ /mnt ”,通常進入某個目錄裡的資料夾,前面不用加 “ / ”。

7) 顯示當前路徑:pwd

使用pwd命令可以顯示當前的工作目錄,該命令很簡單,直接輸入pwd即可,後面不帶引數。

8) 建立目錄:mkdir

通過mkdir命令可以建立一個新的目錄。引數-p可遞迴建立目錄。

需要注意的是新建目錄的名稱不能與當前目錄中已有的目錄或檔案同名,並且目錄建立者必須對當前目錄具有寫許可權。

9) 刪除目錄:rmdir

可使用rmdir命令刪除一個目錄。必須離開目錄,並且目錄必須為空目錄,不然提示刪除失敗。

10) 刪除檔案和目錄:rm -r

可通過rm刪除檔案或目錄。使用rm命令要小心,因為檔案刪除後不能恢復。為了防止檔案誤刪,可以在rm後使用-i引數以逐個確認要刪除的檔案。

常用引數及含義如下表所示:

引數 含義
-i 以進行互動式方式執行
-f 強制刪除,忽略不存在的檔案,無需提示
-r 遞迴地刪除目錄下的內容,刪除資料夾時必須加此引數

11) 建立連結檔案:ln

l Linux連結檔案類似於Windows下的快捷方式。

l 連結檔案分為軟連結和硬連結。

l 軟連結:軟連結不佔用磁碟空間,原始檔刪除則軟連結失效。

l 硬連結:硬連結只能連結普通檔案,不能連結目錄。

使用格式:

ln 原始檔 連結檔案

ln -s 原始檔 連結檔案

如果沒有-s選項代表建立一個硬連結檔案,兩個檔案佔用相同大小的硬碟空間,即使刪除了原始檔,連結檔案還是存在,所以-s選項是更常見的形式。

注意:如果軟連結檔案和原始檔不在同一個目錄,原始檔要使用絕對路徑,不能使用相對路徑。

12) 檢視或者合併檔案內容:cat

13) 拷貝檔案:cp

cp命令的功能是將給出的檔案或目錄複製到另一個檔案或目錄中,相當於DOS下的copy命令。

常用選項說明:

選項 含義
-a 該選項通常在複製目錄時使用,它保留連結、檔案屬性,並遞迴地複製目錄,簡單而言,保持檔案原有屬性。
-f 覆蓋已經存在的目標檔案而不提示
-i 互動式複製,在覆蓋目標檔案之前將給出提示要求使用者確認
-r 若給出的原始檔是目錄檔案,則cp將遞迴複製該目錄下的所有子目錄和檔案,目標檔案必須為一個目錄名。
-v 顯示拷貝進度

cp vim_configure/ code/ -ivr 把資料夾 vim_configure 拷貝到 code 目錄裡:

14) 移動檔案:mv

使用者可以使用mv命令來移動檔案或目錄,也可以給檔案或目錄重新命名。

常用選項說明:

選項 含義
-f 禁止互動式操作,如有覆蓋也不會給出提示
-i 確認互動方式操作,如果mv操作將導致對已存在的目標檔案的覆蓋,系統會詢問是否重寫,要求使用者回答以避免誤覆蓋檔案
-v 顯示移動進度

15) 獲取檔案型別:file

Linux系統檔案型別不是根據副檔名分類的,通過file命令可以確認檔案具體型別。

16) 歸檔管理:tar

計算機中的資料經常需要備份,tar是Unix/Linux中最常用的備份工具,此命令可以把一系列檔案歸檔到一個大檔案中,也可以把檔案檔案解開以恢復資料。

tar使用格式

tar [引數] 打包檔名 檔案

tar命令很特殊,其引數前面可以使用“-”,也可以不使用。

常用引數:

引數 含義
-c 生成檔案檔案,建立打包檔案
-v 列出歸檔解檔的詳細過程,顯示進度
-f 指定檔案檔名稱,f後面一定是.tar檔案,所以必須放選項最後
-t 列出檔案中包含的檔案
-x 解開檔案檔案

注意:除了f需要放在引數的最後,其它引數的順序任意。

17) 檔案壓縮解壓:gzip

l tar與gzip命令結合使用實現檔案打包、壓縮。

l tar只負責打包檔案,但不壓縮,用gzip壓縮tar打包後的檔案,其副檔名一般用xxxx.tar.gz。

gzip使用格式如下:

gzip [選項] 被壓縮檔案

常用選項:

選項 含義
-d 解壓
-r 壓縮所有子目錄

tar這個命令並沒有壓縮的功能,它只是一個打包的命令,但是在tar命令中增加一個選項(-z)可以呼叫gzip實現了一個壓縮的功能,實行一個先打包後壓縮的過程。

壓縮用法:tar czvf 壓縮包包名 檔案1 檔案2 ...

-z 指定壓縮包的格式為:file.tar.gz

例如:tar zcvf test.tar.gz 1.c 2.c 3.c 4.c把 1.c 2.c 3.c 4.c 壓縮成 test.tar.gz

解壓用法: tar zxvf 壓縮包包名

引數 含義
-z 指定壓縮包的格式為:file.tar.gz

解壓到指定目錄:-C (大寫字母“C”)

例子:tar -xvf new.tar.gz -C ./test/ 將 new.tar.gz 解壓到當前目錄下的 test 目錄下:

18) 檔案壓縮解壓:bzip2

l tar與bzip2命令結合使用實現檔案打包、壓縮(用法和gzip一樣)。

l tar只負責打包檔案,但不壓縮,用bzip2壓縮tar打包後的檔案,其副檔名一般用xxxx.tar.bz2。

l 在tar命令中增加一個選項(-j)可以呼叫bzip2實現了一個壓縮的功能,實行一個先打包後壓縮的過程。

l 壓縮用法:tar cjvf 壓縮包包名 檔案...(tar jcvf bk.tar.bz2 *.c)

l 解壓用法:tar xjvf 壓縮包包名 (tar jxvf bk.tar.bz2)

19) 檔案壓縮解壓:zip、

l 通過zip壓縮檔案的目標檔案不需要指定副檔名,預設副檔名為zip。

l 壓縮檔案:zip [-r] 目標檔案(沒有副檔名) 原始檔

l 解壓檔案:unzip -d 解壓後目錄檔案 壓縮檔案

類似的,Linux同樣支援rar格式檔案的壓縮。不過需要事先安裝rar工具。

壓縮: rar a -r xxx.rar 待壓縮檔案群

解壓縮:rar x xxx.rar

20) 檢視命令位置:which

3.3.2 使用者、許可權管理

  • l 使用者是Unix/Linux系統工作中重要的一環,使用者管理包括使用者與組賬號的管理。
  • l 在Unix/Linux系統中,不論是由本機或是遠端登入系統,每個系統都必須擁有一個賬號,並且對於不同的系統資源擁有不同的使用許可權。
  • l Unix/Linux系統中的root賬號通常用於系統的維護和管理,它對Unix/Linux作業系統的所有部分具有不受限制的訪問許可權。
  • l 在Unix/Linux安裝的過程中,系統會自動建立許多使用者賬號,而這些預設的使用者就稱為“標準使用者”。
  • l 在大多數版本的Unix/Linux中,都不推薦直接使用root賬號登入系統。

1) 檢視當前登入使用者:whoami

whoami該命令使用者檢視當前系統當前賬號的使用者名稱。可通過cat /etc/passwd檢視系統使用者資訊。

由於系統管理員通常需要使用多種身份登入系統,例如通常使用普通使用者登入系統,然後再以su命令切換到root身份對傳統進行管理。這時候就可以使用whoami來檢視當前使用者的身份。

2) 退出登入賬戶: exit

l 如果是圖形介面,退出當前終端;

l 如果是使用ssh遠端登入,退出登陸賬戶;

l 如果是切換後的登陸使用者,退出則返回上一個登陸賬號。

3) 切換使用者:su

可以通過su命令切換使用者,su後面可以加“-”。su和su –命令不同之處在於,su -切換到對應的使用者時會將當前的工作目錄自動轉換到切換後的使用者主目錄:

注意:如果是ubuntu平臺,需要在命令前加“sudo”,如果在某些操作需要管理員才能操作,ubuntu無需切換到root使用者即可操作,只需加“sudo”即可。sudo是ubuntu平臺下允許系統管理員讓普通使用者執行一些或者全部的root命令的一個工具,減少了root 使用者的登陸和管理時間,提高了安全性。

1) 新增、刪除使用者:adduser、deluser

  • l adduser 新建使用者
  • l deluser 刪除使用者
  • l cat /etc/passwd 檢視使用者組

4) 新增、刪除使用者組:addgroup、delgroup

  • l addgroup 新建使用者組
  • l delgroup 刪除使用者組
  • l cat /etc/group 檢視使用者組

5) 設定使用者密碼:passwd

在Unix/Linux中,超級使用者可以使用passwd命令為普通使用者設定或修改使用者口令。使用者也可以直接使用該命令來修改自己的口令,而無需在命令後面使用使用者名稱。

6) 修改檔案所有者:chown

使用方法:chown 使用者名稱 檔案或目錄名

7) 修改檔案所屬組:chgrp

使用方法:chgrp 使用者組名 檔案或目錄名

1) 修改檔案到新的使用者、使用者組

使用命令chown 使用者名稱:使用者組名 檔案或目錄名

可直接同時修改檔案的所有者和所屬組。如:

sudo chown nobody:nogroup a.c

可將a.c檔案設定到 nobody使用者、nogroup 使用者組下。

9) 修改檔案許可權:chmod

chmod 修改檔案許可權有兩種使用格式:字母法與數字法。

字母法:chmod u/g/o/a +/-/= rwx 檔案

[ u/g/o/a ] 含義
u user 表示該檔案的所有者
g group 表示與該檔案的所有者屬於同一組( group )者,即使用者組
o other 表示其他以外的人
a all 表示這三者皆是
[ +-= ] 含義
+ 增加許可權
- 撤銷許可權
= 設定許可權
rwx 含義
r read 表示可讀取,對於一個目錄,如果沒有r許可權,那麼就意味著不能通過ls檢視這個目錄的內容。
w write 表示可寫入,對於一個目錄,如果沒有w許可權,那麼就意味著不能在目錄下建立新的檔案。
x excute 表示可執行,對於一個目錄,如果沒有x許可權,那麼就意味著不能通過cd進入這個目錄。

chmod o+w file 給檔案file的其它使用者增加寫許可權:

chmod u-r file 給檔案file的擁有者減去讀的許可權:

chmod g=x file設定檔案file的同組使用者的許可權為可執行,同時去除讀、寫許可權:

數字法:“rwx” 這些許可權也可以用數字來代替

r 讀取許可權,數字代號為 "4"
w 寫入許可權,數字代號為 "2"
x 執行許可權,數字代號為 "1"
- 不具任何許可權,數字代號為 "0"

如執行:chmod u=rwx,g=rx,o=r filename

就等同於:chmod u=7,g=5,o=4 filename

chmod 751 file****:

l 檔案所有者:讀、寫、執行許可權

l 同組使用者:讀、執行的許可權

l 其它使用者:執行的許可權

chmod 777 file:所有使用者擁有讀、寫、執行許可權

注意:如果想遞迴所有目錄加上相同許可權,需要加上引數“ -R ”。

如:chmod 777 test/ -R 遞迴 test 目錄下所有檔案加 777 許可權。

3.3.3 系統管理

1) 檢視程序資訊:ps

程序是一個具有一定獨立功能的程式,它是作業系統動態執行的基本單元。

ps命令可以檢視程序的詳細狀況,常用選項(選項可以不加“-”)如下:

選項 含義
-a 顯示終端上的所有程序,包括其他使用者的程序
-u 顯示程序的詳細狀態
-x 顯示沒有控制終端的程序
-w 顯示加寬,以便顯示更多的資訊
-r 只顯示正在執行的程序

2) 終止程序:kill

kill命令指定程序號的程序,需要配合 ps 使用。

使用格式:

kill [-signal] pid

訊號值從0到15,其中9為絕對終止,可以處理一般訊號無法終止的程序。

kill 9133 :9133 為應用程式所對應的程序號

有些程序不能直接殺死,這時候我們需要加一個引數“ -9 ”,“ -9 ” 代表強制結束:

3) 後臺程式:&、jobs、fg

l 使用者可以將一個前臺執行的程式調入後臺執行,方法為:命令 &

l 如果程式已經在執行,ctrl+z可以將程式調入後臺

l jobs檢視後臺執行程式

l fg編號(編號為通過jobs檢視的編號),將後臺執行程式調出到前臺

4) 關機重啟:reboot、shutdown、init

命令 含義
reboot 重新啟動作業系統
shutdown –r now 重新啟動作業系統,shutdown會給別的使用者提示
shutdown -h now 立刻關機,其中now相當於時間為0的狀態
shutdown -h 20:25 系統在今天的20:25 會關機
shutdown -h +10 系統再過十分鐘後自動關機
init 0 關機
init 6 重啟

5) 字元介面和圖形介面切換

在redhat平臺下,可通過命令進行切換:

init 3 切換到字元介面
init 5 切換到圖形介面

通過快捷鍵切換(適用大部分平臺):

Ctrl + Alt + F3 切換到字元介面
Ctrl + Alt + F1 切換到圖形介面

適用於 18.04系統。

6) 檢視或配置網絡卡資訊:ifconfig

如果,我們只是敲:ifconfig,它會顯示所有網絡卡的資訊:

顯示欄位 說明
eth0 網路介面名稱
Link encap 鏈路封裝協議
Hwaddr 網路介面的MAC地址
Inet addr IP地址
Bcast 廣播地址
Mask 子網掩碼
UP 網路介面狀態標識,UP已經啟用,DOWN已經停用
BROADCAST 廣播標識,標識網路介面是否支援廣播
RUNNING 傳輸標識,標識網路介面是否已經開始傳輸分組資料
MULTICAST 多播標識,標識網路介面是否支援多播
MTU,Metric MTU:最大傳輸單位,單位:位元組。Metric:度量值,用於RIP建立網路路由用
RX bytes 接收資料位元組統計
TX bytes 傳送資料位元組統計

我們可以通過ifconfig配置網路引數:

  1. l 只有root才能用ifconfig配置引數,其他使用者只能檢視網路配置
  2. l ifconfig 網路介面名稱 [地址協議型別] [address] [引數]
  3. l 地址協議型別如:inet(IPv4),inet6(IPv6)等
  4. l 如:ifconfig eth0 inet 192.168.10.254 netmask 255.255.255.0 up

常用引數:

引數 功能
-a 顯示所有網路介面狀態
inet [IP地址] 設定IP地址
netmask [子網掩碼] 設定子網掩碼
up 啟用網路介面
down 關閉網路介面

ifconfig配置的網路引數在記憶體中,計算機重新啟動之後就失效了,如果需要持久有效就需要修改網路介面的配置檔案:

l redhat修改/etc/sysconfig/network-scripts/ifcfg-eth0檔案

IPADDR=IP地址

GATEWAY=預設閘道器

l ubuntu修改/etc/NetworkManager/system-connections/Wired connection 1檔案

[ipv4]

method=manual

addresses1=IP地址;24;預設閘道器;

7) 測試遠端主機連通性:ping

l ping通過ICMP協議向遠端主機發送ECHO_REQUEST請求,期望主機回覆ECHO_REPLY訊息

l 通過ping命令可以檢查是否與遠端主機建立了TCP/IP連線

使用方法:ping [引數] 遠端主機IP地址

引數 功能
-a 每次相應時都發出聲音警示
-A 表示以實際往返相應時間為間隔,連續傳送訊息
-f 連續不斷髮送訊息,不管是否收到相應
-n 只顯示主機IP,不需要把IP解釋成主機名
-c 傳送指定次數資料報資訊後停止,ping -c 5 192.168.10.254
-i 每次傳送訊息時間間隔,預設一秒,ping -i 2 192.168.10.254
-s 分組資料大小,預設64位元組
-w 以秒為單位的超時值,一旦超時,就立即停止

3.3.4 查詢與檢索

1) find

​ 語法:find 搜尋目錄位置 引數 搜尋條件

    -name:按名稱搜尋

​       find ./ -name "for*.sh"

​    -type:按型別搜尋

​       find ./ -type f/d/l/b/c/s/p

​    -size:按大小搜尋

​       find ~/ -size +3M -size -8M         M大寫

​       find ~/ -size +3k -size -8k        k小寫

​       find ./ -size +3 -size -8   無單位,按扇區個數計算(一個扇區大小為 512B)

​    -maxdepth:按層級搜尋:

​       find ./ -maxdepth 1 -name "*.sh"

​    -exec:對搜尋結果,執行某些命令

​       find ./ -maxdepth 1 -name "*.sh" -exec ls -l {} \;

​    xargs:需要結合管道,將搜尋結果指定給某個命令使用。

​        find ./ -type d | xargs ls -l

2) grep

​ 按檔案內容搜尋檔案。

​ grep -R/-r "待搜尋的內容" 目錄位置

3) find和grep命令結合

先使用find命令查詢檔案, 然後使用grep命令查詢哪些檔案包含某個字串

find . -name "*.c" | xargs grep -n "main"

END

2020年07月27日12:52:32