1. 程式人生 > 實用技巧 >Linux 面試常考命令

Linux 面試常考命令

參考文章:

linux檢視端口占用情況linux 用strace檢視系統呼叫Linux面試題(2020最新版)

Linux 檢視系統呼叫

strace常用來跟蹤程序執行時的系統呼叫和所接收的訊號。 在Linux世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置(比如讀取磁碟檔案,接收網路資料等等)時,必須由使用者態模式切換至核心態模式,通 過系統呼叫訪問硬體裝置。strace可以跟蹤到一個程序產生的系統呼叫,包括引數,返回值,執行消耗的時間。

檔案管理命令

cat 命令

cat 命令用於連線檔案並列印到標準輸出裝置上。cat 主要有三大功能:
1.一次顯示整個檔案:
cat filename
2.從鍵盤建立一個檔案:
cat > filename只能建立新檔案,不能編輯已有檔案。
3.將幾個檔案合併為一個檔案:
cat file1 file2 > file -b 對非空輸出行號 -n 輸出所有行號

把 log2012.log 的檔案內容加上行號後輸入 log2013.log 這個檔案裡

cat -n log2012.log > log2013.log

chmod 命令

Linux/Unix 的檔案呼叫許可權分為三級 : 檔案擁有者、群組、其他。利用 chmod 可以改變檔案的呼叫許可權。

u :目錄或者檔案的當前的使用者
g :目錄或者檔案的當前的群組
o :除了目錄或者檔案的當前使用者或群組之外的使用者或者群組
a :所有的使用者及群組

r :讀許可權,用數字4表示
w :寫許可權,用數字2表示
x :執行許可權,用數字1表示
增加 file 檔案的所有使用者的 寫和執行許可權
chmod -awx file

find

查詢大於 1K 的檔案

find -size +1000c

在當前目錄查詢 以 .log 結尾的檔案。 . 代表當前目錄

find ./ -name '*.log'

head

顯示檔案的開頭至標準輸出中,預設 head 命令列印其相應檔案的開頭 10 行。

顯示 1.log 檔案中前 20 行

head 1.log -n 20

less 和 more類似,都可以對檔案進行分頁瀏覽

(1)ps 檢視程序資訊並通過 less 分頁顯示

ps -aux | less -N

(2)檢視多個檔案

less 1.log 2.log

ln 命令(Link files 連結檔案)

功能是為檔案在另外一個位置建立一個同步的連結,當在不同目錄需要該問題時,就不需要為每一個目錄建立同樣的檔案,通過 ln 建立的連結(link)減少磁碟佔用量。

連結分類:軟體連結及硬連結軟連結:有 -s 引數 1.軟連結,以路徑的形式存在。類似於Windows作業系統中的快捷方式 2.軟連結可以 跨檔案系統 ,硬連結不可以 3.軟連結可以對一個不存在的檔名進行連結 4.軟連結可以對目錄進行連結硬連結: 無 -s 引數 1.硬連結,以檔案副本的形式存在。但不佔用實際空間。 2.不允許給目錄建立硬連結 3.硬連結只有在同一個檔案系統中才能建立
-s 軟連結(符號連結)
-v 顯示詳細處理過程

例項

(1)給檔案建立軟連結,並顯示操作資訊

ln -sv source.log link.log

(2)給檔案建立硬連結,並顯示操作資訊

ln -v source.log link1.log

locate 命令

locate 通過搜尋系統內建文件資料庫達到快速找到檔案,資料庫由 updatedb 程式來更新,updatedb 是由 cron daemon 週期性呼叫的。預設情況下 locate 命令在搜尋資料庫時比由整個由硬碟資料來搜尋資料來得快,但較差勁的是 locate 所找到的檔案若是最近才建立或 剛更名的,可能會找不到,在內定值中,updatedb 每天會跑一次,可以由修改 crontab 來更新設定值 (etc/crontab)。locate 與 find 命令相似,可以使用如 *、? 等進行正則匹配查詢常用引數:
-l num(要顯示的行數)
-f 將特定的檔案系統排除在外,如將proc排除在外
-r 使用正則運算式做為尋找條件
例項:(1)查詢和 pwd 相關的所有檔案(檔名中包含 pwd)
locate pwd
(2)搜尋 etc 目錄下所有以 sh 開頭的檔案
locate /etc/sh
(3)查詢 /var 目錄下,以 reason 結尾的檔案
locate -r '^/var.*reason$'(其中.表示一個字元,*表示任務多個;.*表示任意多個字元)

more 命令

功能類似於 cat, more 會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示。

每次顯示 5 行
more -5 file

顯示檔案中從第3行起的內容

more +3 text.txt

(2)在所列出檔案目錄詳細資訊,藉助管道使每次顯示 5 行

ls -l | more -5

mv 命令((Move file 移動檔案)

移動檔案或修改檔名,根據第二引數型別(如目錄,則移動檔案;如為檔案則重命令該檔案)。

當第二個引數為目錄時,第一個引數可以是多個以空格分隔的檔案或目錄,然後移動第一個引數指定的多個檔案到第二個引數指定的目錄中。

例項:(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 * ../

rm 命令

刪除一個目錄中的一個或多個檔案或目錄,如果沒有使用 -r 選項,則 rm 不會刪除目錄。如果使用 rm 來刪除檔案,通常仍可以將該檔案恢復原狀。例項:(1)刪除任何 .log 檔案,刪除前逐一詢問確認:
rm -i *.log
(2)刪除 test 子目錄及子目錄中所有檔案刪除,並且不用一一確認:
rm -rf test
(3)刪除以 -f 開頭的檔案
rm -- -f*

tail 命令

用於顯示指定檔案末尾內容,不指定檔案時,作為輸入資訊進行處理。常用檢視日誌檔案。常用引數:
-f 迴圈讀取(常用於檢視遞增的日誌檔案)
-n<行數> 顯示行數(從後向前)
(1)迴圈讀取逐漸增加的檔案內容
ping 127.0.0.1 > ping.log &        ##後臺執行:可使用 jobs -l 檢視,也可使用 fg 將其移到前臺執行。
tail -f ping.log

touch 命令

Linux touch命令用於修改檔案或者目錄的時間屬性,包括存取時間和更改時間。若檔案不存在,系統會建立一個新的檔案。

ls -l 可以顯示檔案的時間記錄

首先,使用ls命令檢視testfile檔案的屬性,如下所示:

$ ls -l testfile #檢視檔案的時間屬性  
#原來檔案的修改時間為16:09  
-rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile  

執行指令"touch"修改檔案屬性以後,並再次檢視該檔案的時間屬性,如下所示:

$ touch testfile #修改檔案時間屬性為當前系統時間  
$ ls -l testfile #檢視檔案的時間屬性  
#修改後檔案的時間屬性為當前系統時間  
-rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile  

使用指令"touch"時,如果指定的檔案不存在,則將建立一個新的空白檔案。例如,在當前目錄下,使用該指令建立一個空白檔案"file",輸入如下命令:

$ touch file #建立一個名為“file”的新的空白檔案 

vim 命令

Vim是從 vi 發展出來的一個文字編輯器。程式碼補完、編譯及錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。

開啟檔案並跳到第 10 行:vim +10 filename.txt 。

開啟檔案跳到第一個匹配的行:vim +/search-term filename.txt 。 // search-item可以替換成我們想查詢的字串

以只讀模式開啟檔案:vim -R /etc/passwd 。

基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)。

簡單的說,我們可以將這三個模式想成底下的圖示來表示:


whereis 命令

whereis 命令只能用於程式名的搜尋,而且只搜尋二進位制檔案(引數-b)、man說明檔案(引數-m)和原始碼檔案(引數-s)。如果省略引數,則返回所有資訊。whereis 及 locate 都是基於系統內建的資料庫進行搜尋,因此效率很高,而find則是遍歷硬碟查詢檔案。

例項

(1)查詢 locate 程式相關檔案

whereis locate

(2)查詢 locate 的原始碼檔案

whereis -s locate

(3)查詢 lcoate 的幫助檔案

whereis -m locate

which 命令

在 linux 要查詢某個檔案,但不知道放在哪裡了,可以使用下面的一些命令來搜尋:

which     檢視可執行檔案的位置。
whereis   檢視程式檔案的位置。
locate    配合資料庫檢視檔案位置。
find        實際搜尋硬碟查詢檔名稱。

文件編輯命令

grep 命令

強大的文字搜尋命令,grep(Global Regular Expression Print) 全域性正則表示式搜尋。

命令格式:

grep [option] pattern file|dir

常用引數:

-A n --after-context顯示匹配字元後n行
-B n --before-context顯示匹配字元前n行
-C n --context 顯示匹配字元前後n行
-c --count 計算符合樣式的列數
-i 忽略大小寫
-l 只列出檔案內容符合指定的樣式的檔名稱
-f 從檔案中讀取關鍵詞
-n 顯示匹配內容的所在檔案中行數
-R 遞迴查詢資料夾

grep 的規則表示式:

^ #錨定行的開始 如:'^grep'匹配所有以grep開頭的行。 
$ #錨定行的結束 如:'grep$'匹配所有以grep結尾的行。 
. #匹配一個非換行符的字元 如:'gr.p'匹配gr後接一個任意字元,然後是p。  
* #匹配零個或多個先前字元 如:'*grep'匹配所有一個或多個空格後緊跟grep的行。
.* #一起用代表任意字元。  
[] #匹配一個指定範圍內的字元,如'[Gg]rep'匹配Grep和grep。 
[^] #匹配一個不在指定範圍內的字元,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。  
\(..\) #標記匹配字元,如'\(love\)',love被標記為1。   
\< #錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。
\> #錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。
x\{m\} #重複字元x,m次,如:'0\{5\}'匹配包含5個o的行。 
x\{m,\} #重複字元x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。  
x\{m,n\} #重複字元x,至少m次,不多於n次,如:'o\{5,10\}'匹配5--10個o的行。  
\w #匹配文字和數字字元,也就是[A-Za-z0-9],如:'G\w*p'匹配以G後跟零個或多個文字或數字字元,然後是p。  
\W #\w的反置形式,匹配一個或多個非單詞字元,如點號句號等。  
\b #單詞鎖定符,如: '\bgrep\b'只匹配grep。

例項

(1)查詢指定程序

ps -ef | grep svn

(2)查詢指定程序個數

ps -ef | grep svn -c
顯示包含 ed 或者 at 字元的內容行
grep -E 'ed|at' test.txt

wc 命令

wc(word count)功能為統計指定的檔案中位元組數、字數、行數,並將統計結果輸出命令格式:
wc [option] file..
命令引數:
-c 統計位元組數
-l 統計行數
-m 統計字元數
-w 統計單詞數,一個字被定義為由空白、跳格或換行字元分隔的字串
例項:(1)查詢檔案的 行數 單詞數 位元組數 檔名
wc text.txt
結果:
7 8 70 test txt
(2)統計輸出結果的行數
cat test.txt | wc -l

磁碟管理命令

cd 命令

切換當前目錄至 dirName。

cd(changeDirectory) 命令語法:

cd [目錄名]

df 命令 (Disk free 空餘硬碟)

顯示磁碟空間使用情況。獲取硬碟被佔用了多少空間,目前還剩下多少空間等資訊,如果沒有檔名被指定,則所有當前被掛載的檔案系統的可用空間將被顯示。預設情況下,磁碟空間將以 1KB 為單位進行顯示,除非環境變數 POSIXLY_CORRECT 被指定,那樣將以512位元組為單位進行顯示:

-a 全部檔案系統列表
-h 以方便閱讀的方式顯示資訊
-i 顯示inode資訊
-k 區塊為1024位元組
-l 只顯示本地磁碟
-T 列出檔案系統型別

例項:

(1)顯示磁碟使用情況

df -l

(2)以易讀方式列出所有檔案系統及其型別

df -haT

du 命令 (disk usage)

du 命令也是檢視使用空間的,但是與 df 命令不同的是 Linux du 命令是對檔案和目錄磁碟使用的空間的檢視:

命令格式:

du [選項] [檔案]

常用引數:

-a 顯示目錄中所有檔案大小
-b, 以位元組為單位顯示檔案大小
-k 以KB為單位顯示檔案大小
-m 以MB為單位顯示檔案大小
-g 以GB為單位顯示檔案大小
-h 以易讀方式顯示檔案大小
-s 僅顯示總計
-c或--total 除了顯示個別目錄或檔案的大小外,同時也顯示所有目錄或檔案的總和例項:

(1)以易讀方式顯示資料夾內及子資料夾大小

du -h scf/

(2)以易讀方式顯示資料夾內所有檔案大小

du -ah scf/

(3)顯示幾個檔案或目錄各自佔用磁碟空間的大小,還統計它們的總和

du -hc test/ scf/

(4)輸出當前目錄下各個子目錄所使用的空間

du -hc --max-depth=1 scf/

ls命令

就是 list 的縮寫,通過 ls 命令不僅可以檢視 linux 資料夾包含的檔案,而且可以檢視檔案許可權(包括目錄、資料夾、檔案許可權)檢視目錄資訊等等。

列出當前目錄中所有以"t"開頭的

常見引數

ls -a 列出目錄所有檔案,包含以.開始的隱藏檔案
ls -l 除了檔名之外,還將檔案的許可權、所有者、檔案大小等資訊詳細列出來

列出當前目錄中所有以"t"開頭的目錄的詳細內容

ls -l t*

mkdir 命令

mkdir 命令用於建立資料夾。

可用選項:

  • -m: 對新建目錄設定存取許可權,也可以用 chmod 命令設定;
  • -p: 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,系統將自動建立好那些尚不在的目錄,即一次可以建立多個目錄。

pwd 命令(Print working directory 顯示當前工作路徑)

pwd 命令用於檢視當前工作目錄路徑。

例項

(1)檢視當前路徑

pwd

(2)檢視軟連結的實際路徑

pwd -P

rmdir 命令

從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須具有對其父目錄的寫許可權。

注意:不能刪除非空目錄

網路通訊命令

ifconfig 命令

ifconfig 用於檢視和配置 Linux 系統的網路介面。

檢視所有網路介面及其狀態:ifconfig -a

netstat 命令

Linux netstat命令用於顯示網路狀態。

利用netstat指令可讓你得知整個Linux系統的網路情況

端口占用命令

檢視佔用埠的程序

1. 使用netstat,

示例:檢視特定埠3306的程序

# netstat -anp | grep 3306 會列出所有3306埠號有關的資訊
# netstat -tunlp | grep 3306 僅列出3306被LISTEN 佔用的那條資訊
引數解釋:
-a 顯示所有
-t (tcp) 僅顯示tcp相關選項
 -u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字的全部轉化為數字
-l 僅列出在Listen(監聽)的服務狀態
-p 顯示建立相關連結的程式名  --(需要root許可權)

2. 使用lsof,lsof -i:埠號檢視某個埠是否被佔用

# lsof -i:3306

程序:

  • ps-ef|grep java找所有有關“java”的程序
  • ps-efL|grep[PID]|wc-l檢視某個程序建立的執行緒數
  • ping 命令

    Linux ping命令用於檢測主機。

    執行ping指令會使用ICMP傳輸協議,發出要求迴應的資訊,若遠端主機的網路功能沒有問題,就會迴應該資訊,因而得知該主機運作正常。

    指定接收包的次數

    ping -c 2 www.baidu.com

    telnet 命令(telecom munication net work protocol,電信網路協議。)

    用於遠端登入。

    執行telnet指令開啟終端機階段作業,並登入遠端主機。

    登入遠端主機

    # 登入IP為 192.168.0.5 的遠端主機
    telnet 192.168.0.5 

    系統管理命令

    date 命令

    顯示或設定系統的日期與時間。

    free 命令

    顯示系統記憶體使用情況,包括實體記憶體、互動區記憶體(swap)和核心緩衝區記憶體。

    命令引數:

    -b 以Byte顯示記憶體使用情況
    -k 以kb為單位顯示記憶體使用情況
    -m 以mb為單位顯示記憶體使用情況
    -g 以gb為單位顯示記憶體使用情況
    -s<間隔秒數> 持續顯示記憶體
    -t 顯示記憶體使用總合

    例項

    (1)顯示記憶體使用情況

    free
    free -k
    free -m

    (2)以總和的形式顯示記憶體的使用資訊

    free -t

    (3)週期性查詢記憶體使用情況

    free -s 10

    Swap 區是用來幹什麼的

    linux swap分割槽是linux交換分割槽:
    如果linux系統實體記憶體不夠用了,系統會用swap分割槽;系統會把實體記憶體裡的訪問頻率低的記憶體物件移動到swap裡,再在實體記憶體裡產生新的連線指向swap裡的那個物件

    kill 命令

    傳送指定的訊號到相應程序。不指定型號將傳送SIGTERM(15)終止指定程序。如果任無法終止該程式可用"-KILL" 引數,其傳送的訊號為SIGKILL(9) ,將強制結束程序,使用ps命令或者jobs 命令可以檢視程序號。root使用者將影響使用者的程序,非root使用者只能影響自己的程序。

    常用引數:

    -l 訊號,若果不加訊號的編號引數,則使用“-l”引數會列出全部的訊號名稱
    -a 當處理當前程序時,不限制命令名和程序號的對應關係
    -p 指定kill 命令只打印相關程序的程序號,而不傳送任何訊號
    -s 指定傳送訊號
    -u 指定使用者

    例項:

    (1)先使用ps查詢程序pro1,然後用kill殺掉

    kill -9 $(ps -ef | grep pro1)

    ps 命令

    ps(process status),用來檢視當前執行的程序狀態,一次性檢視,如果需要動態連續結果使用 top

    linux上程序有5種狀態:

    1. 執行(正在執行或在執行佇列中等待)
    2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到訊號)
    3. 不可中斷(收到訊號不喚醒和不可執行, 程序必須等待直到有中斷髮生)

    1. 僵死(程序已終止, 但程序描述符存在, 直到父程序呼叫wait4()系統呼叫後釋放)
    2. 停止(程序收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU訊號後停止執行執行)

    ps 工具標識程序的5種狀態碼:

    D 不可中斷 uninterruptible sleep (usually IO)
    R 執行 runnable (on run queue)
    S 中斷 sleeping
    T 停止 traced or stopped
    Z 僵死 a defunct (”zombie”) process

    命令引數:

    -A 顯示所有程序
    a 顯示所有程序
    -a 顯示同一終端下所有程序
    c 顯示程序真實名稱
    e 顯示環境變數
    f 顯示程序間的關係
    r 顯示當前終端執行的程序
    -aux 顯示所有包含其它使用的程序

    例項:

    (1)顯示當前所有程序環境變數及程序間關係

    ps -ef

    (2)顯示當前所有程序

    ps -A

    (3)與grep聯用查詢某程序

    ps -aux | grep apache

    (4)找出與 cron 與 syslog 這兩個服務有關的 PID 號碼

    ps aux | grep '(cron|syslog)'

    top 命令

    顯示當前系統正在執行的程序的相關資訊,包括程序 ID、記憶體佔用率、CPU 佔用率等

    top命令來檢視CPU使用狀況
    退出top的命令為qtop-u roottop的全屏對話模式可分為3部分:系統資訊欄、命令輸入欄、程序列表欄

    vmstat命令

    檢視CPU和記憶體佔用情況,每行會輸出一些系統核心指標,這些指標可以讓我們更詳細的瞭解系統狀態。
    vmstat3(間隔時間)100(監控次數)

    yum 命令

    yum( Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。yum提供了查詢、安裝、刪除某一個、一組甚至全部軟體包的命令,而且命令簡潔而又好記。

    unzip 命令

    • 解壓 *.zip 檔案:unzip test.zip
    • 檢視 *.zip 檔案的內容:unzip -l jasper.zip