1. 程式人生 > 其它 >40個常用Linux命令

40個常用Linux命令

  今天總結幾個非常常用的Linux命令,其中有幾個在面試中很可能問相關命令的原理,比如後臺執行命令。希望對大家有所幫助,最好自己去嘗試在Linux作業系統中實踐一下。

  1 檢視目錄以及許可權

  在windows中,使用dir檢視當前目錄中檔案。在Linux中使用ls(list)檢視當前目錄檔案。

  windows中的dir,如下圖所示

  在Linux中,通常使用ls -l列出,其中可以檢視檔案屬性,所屬使用者組等較為詳細的資訊。下面詳細解釋從左到右每一列是什麼意思

  ls -l

  第一列第一個欄位:檔案型別,後面9個字元是模式,其中分為三組,每一組三個欄位。第一組為所屬使用者許可權。第二組為所屬組的許可權。第三組為其他使用者所屬許可權。其中r(read)代表可讀,w(write)代表可寫,e(execute)代表可執行。在後面的9個字元中,如果是字母說明有相應的許可權,如果為"-"代表沒有許可權。舉一個例子

  -rw-r-r--:此為普通檔案,對於所屬使用者為可讀可寫不能執行,對於所屬組僅僅可讀,對於其他使用者僅為讀。

  第二列 硬連結數目

  硬連結允許作用之一是允許一個檔案擁有多個有效路徑名,從而防止誤刪。但是隻能在同一檔案系統中的檔案之間進行連線,不能對目錄進行建立。

  第三列是所屬使用者,第四列為所屬組,第五列為檔案大小,第六列為檔案被修改的時間,最後為檔名。其中使用chown改變所屬使用者,chgrp改變所屬組。

  2 nohup(no hang up不要掛起的意思)

  這也是常用後臺啟動程式的常用方法,如果在互動命令列中執行程式,我們很容易就終止它。在互動環境下,我們的輸出一般都會直接輸出到當前介面,在後臺啟動的時候通常會定向到檔案,那通常情況是下面這個命令。

  nohup command >X.file 2 >&1 &

  其中1表示標準輸出。2表示檔案標準錯誤輸出。2>1&即將兩者合併,但是合併到哪裡,就是X.file.

  3 檢視程序

  有的時候我們需要檢視程序是否已經啟動或者嘗試終止程序。經常使用的命令為ps -ef---列出當前正在執行的程式,那如何定位我們想要檢視的程序A,這個時候使用grep,即ps -ef| grep A.

  4 awk

  如果檔案是csv(a.csv),按照","分割,需求為列印第一列和第二列

  awk -F "," '{print 2}' a.csv

  獲取第三列最大值

  awk 'BEGIN{max=0}{if(3}END{print max}'

  5 tar解壓縮

  解壓縮命令

  常用引數

  -c:建立的tar檔案

  -x:解開tar檔案

  -t:列出tar檔案中包含的檔案資訊

  -r:附加新的檔案到tar檔案中

  常用命令組合

  tar -xvf /home/a.tar //開啟tar打包檔案

  tar -zxvf /home/a.tar.gz //解壓以gzip壓縮的檔案

  tar -jxvf /home/a.tar.bz2 //解壓以bzip壓縮的檔案

  tar -cvf /home/a.tar /home 打包/home下所有檔案

  6 scp

  通過scp命令在多臺伺服器中的相互複製 傳輸檔案。為了省下輸入密碼,可以設定免密登入。

  常用組合:

  例子1:將A伺服器中/home/a.txt 複製到B伺服器的/home中

  scp -r /home/a.txt root@B_ip:/home

  7 林哥的死亡命令 rm -rf

  翻車現場請看次條。

  8 watch

  這個命令是動態檢視命令執行的結果。比如如果需要每隔一秒高亮顯示網路連線數的變化情況。則 watch -n 1 -d netstat -ant

  例子:每隔一秒高亮顯示http連線數的變化情況

  watch -n 1 -d 'pstree | grep http'

  例子:十秒一次輸出系統的平均負載

  watch -n 10 'cat /proc/loadavg'

  9 df

  檢視磁碟大小

  df -h

  10 tcpdump

  和它類似的工具在windows中是wireshark,其採用底層庫winpcap/libpcap實現。採用了bpf過濾機制。下面我們看看提供的不同引數的含義。

  引數名 含義

  -n 使用IP地址表示主機。使用數字表示埠

  -i 指定要監聽的埠。如果為"-i any"表示住區所有網絡卡資料包

  -v 輸出諸如ip資料包中的TTL更加詳細的資訊

  -t 不列印時間戳

  -e 顯示乙太網幀頭部資訊

  -c 僅僅抓取指定數量的資料包

  -x 按照十六進位制顯示資料包內容

  -X 不僅僅輸出-x結果還輸出十六進位制對應的ASCII字元

  -s 設定抓包時的抓包長度

  -w 將輸出結果定向到某個檔案,一般為pcap字尾

  -r 從檔案讀取資料包並顯示數字表示埠

  -i 指定要監聽的埠。如果為"-i any"表示住區所有網絡卡資料包

  -v 輸出諸如ip資料包中的TTL更加詳細的資訊

  -t 不列印時間戳

  -e 顯示乙太網幀頭部資訊

  -c 僅僅抓取指定數量的資料包

  -x 按照十六進位制顯示資料包內容

  -X 不僅僅輸出-x結果還輸出十六進位制對應的ASCII字元

  -s 設定抓包時的抓包長度

  -w 將輸出結果定向到某個檔案,一般為pcap字尾

  -r 從檔案讀取資料包並顯示

  知道了相關引數,下面看幾個案例

  執行任務 執行命令

  捕獲特定網口資料包 tcpdump -i eth0

  捕獲特定個數(1000)的包 tcpdump -c 1000 -i eth0

  將捕獲的包儲存到檔案 tcpdump -w a.pcap -i eth0

  讀取pcap格式的包 tcpdump -r a.pcap

  增加捕獲包的時間戳 tcpdump -n -ttt -i eth0

  指定捕獲包的協議型別 tcpdump -i eth0 arp

  捕獲指定埠 tcpdump -i eth0 post 22

  捕獲特定目標ip+port的包 tcpdump -i eth0 dst address and port 22

  捕獲DNS請求和響應 tcpdump -i eth0 -s0 port 53

  匹配Http請求頭 tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

  將捕獲的包儲存到檔案 tcpdump -w a.pcap -i eth0

  讀取pcap格式的包 tcpdump -r a.pcap

  增加捕獲包的時間戳 tcpdump -n -ttt -i eth0

  指定捕獲包的協議型別 tcpdump -i eth0 arp

  捕獲指定埠 tcpdump -i eth0 post 22

  捕獲特定目標ip+port的包 tcpdump -i eth0 dst address and port 22

  捕獲DNS請求和響應 tcpdump -i eth0 -s0 port 53

  匹配Http請求頭 tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

  11 lsof

  列出當前系統開啟的檔案描述符工具。可以得知感興趣的手機號賣號平臺地圖描述符是被哪些程序使用

  同樣,我們看看相關引數

  引數 描述

  -i 顯示sokcet檔案描述符

  -c 顯示指定的命令開啟的所有檔案描述符

  -t 僅顯示打開了目標檔案描述符的程序pid

  老規矩,上幾個例子

  執行任務 命令

  列出所有的網路連結 lsof -i

  列出所有udp的網路連結 lsof -i udp

  列出誰在使用某個埠 lsof -i :3306

  列出誰在使用特定的tcp埠 lsof -i tcp:80

  根據檔案描述範圍列出檔案資訊 lsof -d 2-3

  12 nc

  nc-->“瑞士軍刀”。不知大家在滲透過程中,拿了shell有沒有使用nc搞點事兒。它用來快速構建網路連結。常用來除錯客戶端程式。

  引數 描述

  -i 設定資料包傳送的時間間隔

  -l 以伺服器方式執行。預設為客戶端執行

  -k 重複接受並處理某個埠上的所有連結

  -p 以客戶端執行時強制其使用指定埠

  -C 將CR和LF兩個字元作為結束符

  -u 使用udp協議。預設tcp協議

  -X nc客戶端餘代理伺服器通訊時預設為socks5協議。

  -z 掃描目標機器某個範圍服務是否開啟

  小賤上案例

  執行任務 執行命令

  掃描機器A埠號在30-40的服務 nc -z A 30-40

  連線伺服器A 埠號為5000 nc -C A 5000

  傳送檔案 MachineA:nc -v -n ip portE:\a.exe

  13 netstat

  netstat是一個網路資訊統計工具。它可以得到網絡卡介面上全部瞭解,路由表資訊,網絡卡介面資訊等。通常在網路程式設計中我們用它來顯示TCP連線以及狀態資訊。

  引數 描述

  -n 使用IP地址表示主機

  -a 顯示結果中包含監聽的socket

  -t 僅顯示TCP連線

  -r 顯示路由資訊

  -i 顯示網絡卡介面資料流量

  -c 每隔1s輸出一次

  -o 顯示socket定時器的資訊

  -p 顯示socket所屬的程序的PID和名字

  下面列舉幾個常用例子

  執行任務 執行命令

  列出所有連線 netstat -a

  只列出TCP或者UDP netstat -at/netstat -au

  列出監聽中的連線 netstat -tnl

  獲取程序名、程序號以及使用者 ID nestat -nlpt

  列印統計資訊 netstat -s

  netstat持續輸出 netstat -ct

  列印active狀態的連線 netstat -atnp | grep ESTA

  檢視服務是否執行(npt) netstat -aple| grep ntp

  14 vmstat

  vmstat能夠實時輸出系統的程序資訊,記憶體使用,cpu使用等資源的使用情況

  引數 描述

  -f 顯示系統自啟動以來執行的fork次數

  -s 顯示記憶體相關統計資訊

  -d 顯示磁碟相關統計資訊

  -p 顯示指定磁碟分割槽統計資訊

  count 取樣次數。

  看一下vmstat都有哪些輸出欄位。

  在這裡插入圖片描述

  欄位名 描述

  procs r表示等待執行的而程序數目。b表示處於不可中斷睡眠狀態的程序數目

  memory swpd:使用的虛擬記憶體量。free:空閒記憶體量。buff:用作緩衝區的記憶體量。cache:用作快取的記憶體量。

  swap si:從磁碟換入的記憶體量(/s)。so:交換到磁碟的記憶體量(/s)。

  io bi:從塊裝置接收的塊(blocks/s)。bo:傳送到塊裝置的塊(blocks/s)。

  system in:每秒中斷的次數,包括時鐘。cs:每秒上下文切換的次數。

  這裡注意哈,如果檢視磁碟的更加詳細資訊,有另外iostat所得到的信心就更加詳細喲

  15 mpstat

  能夠實時監測多處理器系統中各個cpu的使用情況。這個命令的執行需要安裝sysstat,在centos中執行yum install systat就好了。

  在這裡插入圖片描述

  然後我們看看各個欄位什麼意思。

  欄位 描述

  cpu 表示當前條資訊屬於哪個cpu的資料

  %usr 程序執行在使用者空間所佔cpu執行時間的比例

  %nice nice值為負的程序執行在使用者空間的時間佔cpu總執行時間的比例

  %iowait cpu等待磁碟操作的時間佔cpu總執行時間的比例

  %irq cpu用於處理硬體中斷時間佔cpu總執行時間的比例

  %soft cpu用於處理軟體中斷的時間佔cpu用執行時間的比例

  %steal 一對虛擬cpu。當超級管理員在處理某個虛擬cpu時,另一個等待它處理完才能執行。這段等待時間表示為steal時間佔總執行時間的比例

  %guest 執行虛擬cpu時間佔cpu總執行時間的比例

  %idle 系統空閒時間佔cpu總執行時間的比例

  16 split

  將檔案分割為數個。

  split -5 a.txt//將a.txt每5行分割為一個檔案

  17 wc -c +filename

  統計檔案中單詞的個數。

  18 more/less

  一頁一頁顯示,通過空白鍵顯示下一頁/上一頁

  19 head/tail

  檢視某檔案前幾行或者後幾行

  20 diff

  diff -c file1 file2 //顯示兩個檔案的差異