1. 程式人生 > 實用技巧 >linux常用命令大全(非常詳細)

linux常用命令大全(非常詳細)

之前做過兩年的運維,用過很多命令,深切體會到某些linux命令熟練掌握後對效率提升有多大。舉個簡單的例子,在做了研發後經常會有跑一些資料,對於結果資料的處理,我們的產品同學一般都習慣於用excel做統計,把資料複製到excel裡,然後資料分列,排序………… 最後得出某些簡單的結論,我只需要cat, sort, uniq, awk, grep 這幾個命令揮手間完成相同的操作。  這裡我總結下我工作這幾年用過的一些命令,當然,這裡就不提那些vim cd ls mv cp 這種簡單的命令了,如果你都不會這些命令的話,建議你先學習下。這裡命令很多,我只簡單列出幾個我常用的引數。其實很多命令我也用的不是特別多,這篇文章我也只是希望能讓大家知道有這樣一個工具,但具體用如果想繼續深入瞭解的話建議檢視下手冊。

純手打,後期會補充,文章如果對你有幫助,請點贊,謝謝!

補充一點:平時用的較多的是vi編輯器快捷鍵,熟練掌握之後可以事半功倍

命令模式-->插入模式
       i   --- 表示從游標所在位置進入編輯狀態    
       I   --- 表示將游標移動到一行的行首,再進入編輯狀態
       o   --- 在游標所在行的下面,新起一行進行編輯
       O   --- 在光變所在行的上面,新起一行進行編輯
       a   --- 將游標移動到右邊的下一個字元,進行編輯
       A   --- 將游標移動到一行的行尾,進入到編輯狀態
       C   
--- 將游標到行尾內容進行刪除,並進入編輯狀態 cc --- 將整行內容進行刪除並進入編輯狀態 總結:移動游標位置,並進入編輯狀態方法 只移動游標,不進入編輯狀態 大寫字母G 將游標快速切換尾部 小寫字母gg 將游標快速切換首部 ngg n表示移動到第幾行 $ 將游標移動到一行的結尾 0/^ 將游標移動到一行的行首 命令模式--底行模式 : 輸入一些命令
/ 進入搜尋狀態(向下搜尋 n依次向下) ? 進入搜尋狀態(向上搜尋 n依次向上) 特殊使用技巧: 將一行內容進行刪除(剪下) deletedelete=dd 將多行內容進行刪除(剪下) 3dd 將內容進行貼上 p 貼上多次內容 3p 複製一行內容 yy 複製多行內容 3yy 操作錯誤如何還原 小寫字母u undo
vi編輯字母常用命令 vi
1 ctrl+a     將游標快速移動到行首
2 ctrl+e     將游標快速移動到行尾
3 ctrl+?? ?? 將游標按單詞快速左右移動
4 ctrl+w     將空格分隔的一個字串整體進行刪除(剪下)
5 ctrl+u     將游標所在位置到行首內容進行刪除(剪下)
6 ctrl+k     將游標所在位置到行尾內容進行刪除(剪下)
7 ctrl+y     貼上剪下的內容
8 ctrl+s     xshell進入到了鎖定狀態 suo鎖
9 ctrl+q     解除鎖定狀態           quit推出鎖定狀態
鍵盤加字母快捷鍵
 1 最常用的
 2 
 3 u    復原前一個動作。(常用)
 4 [Ctrl]+r    重做上一個動作。(常用)
 5 這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦!
 6 .不要懷疑!這就是小數點!意思是重複前一個動作的意思。 如果你想要重複刪除、重複貼上等等動作,按下小數點『.』就好了! (常用)
 7 
 8 G  移動到這個檔案的最後一行   o 移動到下一行並進入編輯模式   (常用)
 9 gg 移動到這個檔案的第一行,相當於 1G 啊! (常用)
10 nG    n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu)
11 r 替換游標所在的字元
12 e 移動到下一行字元末尾         
13 w移動到下一行字元開頭    
14 b移動到上一行字元開頭位置
15 y 複製單個字元    yy複製整行   p貼上
16 ctrl+g列出當前行的行數
17 
18 $ 或功能鍵[End]    移動到這一行的最後面字元處(常用)
19 H    游標移動到這個螢幕的最上方那一行的第一個字元
20 M    游標移動到這個螢幕的中央那一行的第一個字元
21 L    游標移動到這個螢幕的最下方那一行的第一個字元
22 
23 
24 
25 n<Enter>    n 為數字。游標向下移動 n 行(常用)
26 0 或功能鍵[Home]    這是數字『 0 』:移動到這一行的最前面字元處 (常用)
27 
28 $ 命令將游標移動到當前行行尾
29 v    從游標當前位置開始,游標所經過的地方會被選中,再按一下v結束。 
30 ggVG 選中全部的文字, 其中gg為跳到行首,V選中整行,G末尾
31 
32 
33 移動游標的方法
34 h 或 向左箭頭鍵(←)    游標向左移動一個字元
35 j 或 向下箭頭鍵(↓)    游標向下移動一個字元
36 k 或 向上箭頭鍵(↑)    游標向上移動一個字元
37 l 或 向右箭頭鍵(→)    游標向右移動一個字元
38 如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j""30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)後,按下動作即可!
39 
40 
41 +    游標移動到非空格符的下一行
42 -    游標移動到非空格符的上一行
43 
44 :1,$s/word1/word2/g 或 :%s/word1/word2/g    從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !(常用)
45 :%s/word1/word2/gc   後面加一個c提示給使用者是否需要取代。
46   
47 刪除、複製與貼上
48 x, X   在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是退格鍵) (常用)
49 
50 dd    刪除遊標所在的那一整行(常用)
51 ndd    n 為數字。刪除游標所在的向下 n 行,例如 20dd 則是刪除 20 行 (常用)
52 d1G    刪除游標所在到第一行的所有資料
53 dG    刪除游標所在到最後一行的所有資料
54 d$    刪除遊標所在處,到該行的最後一個字元
55 d0    那個是數字的 0 ,刪除遊標所在處,到該行的最前面一個字元
56 yy    複製遊標所在的那一行(常用)
57 nyy    n 為數字。複製游標所在的向下 n 行,例如 20yy 則是複製 20 行(常用)
58 y1G    複製遊標所在行到第一行的所有資料
59 yG    複製遊標所在行到最後一行的所有資料
60 y0    複製游標所在的那個字元到該行行首的所有資料
61 y$    複製游標所在的那個字元到該行行尾的所有資料
62 p, P    p 為將已複製的資料在游標下一行貼上,P 則為貼在遊標上一行! 舉例來說,我目前游標在第 20 行,且已經複製了 10 行資料。則按下 p 後, 那 10 行資料會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢? 那麼原本的第 20 行會被推到變成 30 行。 (常用)
63 J    將游標所在行與下一行的資料結合成同一行
64 c    重複刪除多個數據,例如向下刪除 10 行,[ 10cj ]
vi編輯大雜燴

目錄

目錄和檔案.......................................................................1

打包壓縮/解壓 ......................................................2

檢視檔案內容........................................................3

網路\光碟\備份 ....................................................4

許可權管理命令..........................................................5

使用者和群組............................................................6

檔案搜尋...............................................................7

網路、幫助命令.......................................................8

檔案系統常用檢視命令..............................................9

系統資訊檢視、歷史命令..........................................10

伺服器執行狀態相關...............................................11

三劍客相關命令.....................................................12

下載命令.............................................................13

日誌檔案目錄.......................................................14

掛載一個檔案系統.................................................15

目錄/檔案命令

cd /home 進入 '/ home' 目錄'
cd .. 返回上一級目錄
cd ../.. 返回上兩級目錄
cd 進入個人的主目錄
cd ~user1 進入個人的主目錄
cd - 返回上次所在的目錄
pwd 顯示工作路徑

ls     檢視目錄中的檔案
ls -F     檢視目錄中的檔案
ls -l      顯示檔案和目錄的詳細資料
ls -a     顯示隱藏檔案

ls -ld /tmp/a 檢視a目錄的資訊
ls *[0-9]*    顯示包含數字的檔名和目錄名
tree     顯示檔案和目錄由根目錄開始的樹形結構
lstree     顯示檔案和目錄由根目錄開始的樹形結構

mkdir dirname      建立一個dirname資料夾

mkdir -p /tmp/a/b    遞迴建立目錄

rm -rf dirname      刪除目錄及內部檔案 -r:表示遞迴刪除檔案及資料夾;-f:表示強制刪除,不提示,平時請使用rm刪除

rm dir/123.txt         刪除dir 目錄目錄下的123.txt檔案

touch filename     建立一個filename檔案

touch -t 0712250000 file1 修改一個檔案或目錄的時間戳 - (YYMMDDhhmm)

mv123.txt321.txt    重新命名,把123.txt改成321.txt

mv123.txt webapps/ 移動123.txt檔案到指定目錄webapps/下

cp 123.txt 1234.txt     複製並重命名 mv和cp都可以用來移動檔案

cp dir/* .           複製一個目錄下的所有檔案到當前工作目錄

cp -r ./123 /opt/webapps/ 將當前目錄下的123目錄複製到/opt/webapps/目錄下 -r:遞迴持續複製,用於目錄的複製行為

cp -r ./12.txt /opt/webapps/ 複製檔案(將當前目錄下的12.txt檔案複製到/opt/webapps/)

ln -s [原檔案] [連結檔案]   建立連結,-s軟連結

ln -s /etc/issue /tmp/issue.soft    建立檔案/etc/issue的軟連結/tmp/issue.soft

ln /etc/issue /tmp/issue.hard    建立檔案/etc/issue的硬連結/tmp/issue.hard

軟連結相當於Windows系統中的快捷方式,硬連結相當於cp -p,檔案複製且同步更新

ln -s file1 lnk1        建立一個指向檔案或目錄的軟連結
ln file1 lnk1 建立一個指向檔案或目錄的物理連結

scp 遠端檔案拷貝  條件:兩臺Linux區域網為區域網,能通訊,無防火牆。注意:輸入命令後有一次提示,輸入【yes】即可,然後輸入目標伺服器賬號的密碼。

scp /gxxj/apache-tomcat-7.0.78-ins/ins.war [email protected]:/data/    將107伺服器上的ins.war傳到38伺服器指定目錄

scp /gxxj/apache-tomcat-7.0.78-ins/ins.war [email protected]:/var/tomcat-7/  將107伺服器上的ins.war傳到45伺服器指定目錄

scp -r /data/apache-tomcat-7.0.78-ins [email protected]:/var/tomcat-7/  將38上的Tomcat資料夾移到45機器上

scp /root/abc.zip [email protected]:/abc/  要把 192.168.1.240上的 /root/abc.zip 傳到 192.168.1.102機並放到/abc目錄,可以在192.168.1.240機上用命令

scp -P 1234 /root/abc.zip [email protected]:/abc/  若 SSH埠不是預設的22,比如,是埠1234 則加-P引數

壓縮/解壓命令

 1 bunzip2 file1.bz2 解壓一個叫做 'file1.bz2'的檔案 
 2 bzip2 file1 壓縮一個叫做 'file1' 的檔案 
 3 gunzip file1.gz 解壓一個叫做 'file1.gz'的檔案 
 4 gzip file1 壓縮一個叫做 'file1'的檔案 
 5 gzip -9 file1 最大程度壓縮 
 6 rar a file1.rar test_file 建立一個叫做 'file1.rar' 的包 
 7 rar a file1.rar file1 file2 dir1 同時壓縮 'file1', 'file2' 以及目錄 'dir1' 
 8 unrar x file1.rar 解壓rar包 
 9 tar -cvf archive.tar file1 建立一個非壓縮的 tarball 
10 tar -cvf archive.tar file1 file2 dir1 建立一個包含了 'file1', 'file2' 以及 'dir1'的檔案檔案 
11 tar -tf archive.tar 顯示一個包中的內容 
12 tar -xvf archive.tar 釋放一個包 
13 tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp目錄下 
14 tar -cvfj archive.tar.bz2 dir1 建立一個bzip2格式的壓縮包 
15 tar -jxvf archive.tar.bz2 解壓一個bzip2格式的壓縮包 
16 tar -cvfz archive.tar.gz dir1 建立一個gzip格式的壓縮包 
17 tar -zxvf archive.tar.gz 解壓一個gzip格式的壓縮包 
18 zip file1.zip file1 建立一個zip格式的壓縮包 
19 zip -r file1.zip file1 file2 dir1 將幾個檔案和目錄同時壓縮成一個zip格式的壓縮包 
20 unzip file1.zip 解壓一個zip格式壓縮包 
打包和壓縮檔案

檢視檔案內容

vim cas.properties    檢視檔案,可編輯 wq儲存並退出 ZZ儲存並退出 q!強制退出並忽略所有更改 e!放棄所有修改,並開啟原來檔案

cat filename        檢視檔案內容(不適合檢視長檔案)

tail           檢視某個檔案的尾部,或者檢視標準出入的最末尾,預設值顯示10行,可以用-n引數來指定輸出多少行。

基本用法        tail -n 100       file.txt 輸出最末尾的100行

tail -f file.txt       隨著檔案新增,持續輸出新增的內容,一般用來看實時日誌

head          和tail命令很相似,不過head是輸出頭部內容,個人感覺head遠沒有tail命令用的多。

基本用法       head -n 100 file.txt 輸出最開始的100行

more         也是用來檢視檔案,但more命令只加載一屏的內容,可以向下翻動,因為載入的內容少,所以比cat快多了。

基本用法       more file.txt

less         和more很像,但是可以上下翻動,感覺less和more只需要less就可以了,完全可以去掉more啊

基本用法       less file.txt

tac filename        同上,內容是倒過來顯示的

more /etc/services   分頁顯示檔案內容,適合長檔案檢視 空格或f:翻屏 回車:下一行 q:退出

less /etc/services     同上,但支援向上翻頁,pageup:向上翻頁 上下箭頭:上下一行 輸入/,加關鍵字可搜尋,使用n查詢下一個關鍵字位置

head -n 7 /etc/services 顯示檔案前7行內容

tail -n 3 /etc/services 顯示檔案最後3行內容

tail -f /var/log/messages 動態顯示檔案末尾內容

./startup.sh;tail -300f ../logs/catalina.out   邊啟動tomcat邊檢視日誌(動態檢視最新300行日誌)

網路\光碟\備份

 1 ifconfig eth0 顯示一個乙太網卡的配置 
 2 ifup eth0 啟用一個 'eth0' 網路裝置 
 3 ifdown eth0 禁用一個 'eth0' 網路裝置 
 4 systemctl start network  # 啟動網路服務
 5 systemctl restart network  # 重啟網路服務
 6 systemctl stop network  # 停止網路服務
 7 vim /etc/sysconfig/network-scripts/ifcfg-ens33  網絡卡配置檔案
 8 ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址 
 9 ifconfig eth0 promisc 設定 'eth0' 成混雜模式以嗅探資料包 (sniffing) 
10 dhclient eth0 以dhcp模式啟用 'eth0' 
11 route -n show routing table 
12 route add -net 0/0 gw IP_Gateway configura default gateway 
13 route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16' 
14 route del 0/0 gw IP_gateway remove static route 
15 echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing 
16 hostname show hostname of system 
17 host www.example.com lookup hostname to resolve name to ip address and viceversa
18 nslookup www.example.com lookup hostname to resolve name to ip address and viceversa
19 ip link show show link status of all interfaces 
20 mii-tool eth0 show link status of 'eth0' 
21 ethtool eth0 show statistics of network card 'eth0' 
22 netstat -tup show all active network connections and their PID 
23 netstat -tupl show all network services listening on the system and their PID 
24 tcpdump tcp port 80 show all HTTP traffic 
25 iwlist scan show wireless networks 
26 iwconfig eth1 show configuration of a wireless network card 
27 hostname show hostname 
28 host www.example.com lookup hostname to resolve name to ip address and viceversa 
29 nslookup www.example.com lookup hostname to resolve name to ip address and viceversa 
30 whois www.example.com lookup on Whois database 
網路 - (乙太網和WIFI無線)
 1 cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一個可複寫的光碟內容 
 2 mkisofs /dev/cdrom > cd.iso 在磁碟上建立一個光碟的iso映象檔案 
 3 mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁碟上建立一個壓縮了的光碟iso映象檔案 
 4 mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 建立一個目錄的iso映象檔案 
 5 cdrecord -v dev=/dev/cdrom cd.iso 燒錄一個ISO映象檔案 
 6 gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 燒錄一個壓縮了的ISO映象檔案 
 7 mount -o loop cd.iso /mnt/iso 掛載一個ISO映象檔案 
 8 cd-paranoia -B 從一個CD光碟轉錄音軌到 wav 檔案中 
 9 cd-paranoia -- "-3" 從一個CD光碟轉錄音軌到 wav 檔案中(引數-310 cdrecord --scanbus 掃描匯流排以識別scsi通道 
11 dd if=/dev/hdc | md5sum 校驗一個裝置的md5sum編碼,例如一張 CD
光碟
 1 dump命令的基本命令格式:
 2 
 3 選項說明:
 4 -level:備份級別。(一共十個備份級別,具體格式為“-0”~“-9”:“-”和具體的級別數字之間沒有空格。其中0就是完全備份;1就是第一次增量備份;2就是第二次增量備份。。。最多支援9次增量備份。)
 5 -f 檔名:手工指定備份之後的檔名。
 6 -u:備份成功之後,把備份時間記錄在/etc/dumpdates檔案中。
 7 -v:顯示備份過程中更多的輸出資訊。
 8 -j:呼叫bzlib庫壓縮備份檔案,其實就是把備份檔案壓縮為.bz2格式。
 9 -W:顯示允許被dump的分割槽的備份等級及備份時間。
10 
11 
12 dump -0aj -f /tmp/home0.bak /home 製作一個 '/home' 目錄的完整備份 
13 dump -1aj -f /tmp/home0.bak /home 製作一個 '/home' 目錄的互動式備份 
14 restore -if /tmp/home0.bak 還原一個互動式備份 
15 rsync -rogpav --delete /home /tmp 同步兩邊的目錄 
16 rsync -rogpav -e ssh --delete /home ip_address:/tmp 通過SSH通道rsync 
17 rsync -az -e ssh --delete ip_addr:/home/public /home/local 通過ssh和壓縮將一個遠端目錄同步到本地目錄 
18 rsync -az -e ssh --delete /home/local ip_addr:/home/public 通過ssh和壓縮將本地目錄同步到遠端目錄 
19 dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通過ssh在遠端主機上執行一次備份本地磁碟的操作 
20 dd if=/dev/sda of=/tmp/file1 備份磁碟內容到一個檔案 
21 tar -Puf backup.tar /home/user 執行一次對 '/home/user' 目錄的互動式備份操作 
22 ( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通過ssh在遠端目錄中複製一個目錄內容 
23 ( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通過ssh在遠端目錄中複製一個本地目錄 
24 tar cf - . | (cd /tmp/backup ; tar xf - ) 本地將一個目錄複製到另一個地方,保留原有許可權及連結 
25 find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 從一個目錄查詢並複製所有以 '.txt' 結尾的檔案到另一個目錄 
26 find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查詢所有以 '.log' 結尾的檔案並做成一個bzip包 
27 dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一個將 MBR (Master Boot Record)內容複製到軟盤的動作 
28 dd if=/dev/fd0 of=/dev/hda bs=512 count=1 從已經儲存到軟盤的備份中恢復MBR內容 
29 
30 
31 linux - 備份某個資料夾
32 
33 注意:備份只能是某個檔案系統(filesystem),如果一個目錄下面有多個檔案系統,那麼需要把這幾個檔案系統都備份
34 
35 在備份前需要先df -h檔案系統對應的路徑,然後檢視您的檔案在那個檔案系統下,然後備份這個檔案系統。
36 
37 也就是說映象,就是一個全拿下來。下面是步驟:
38 
39 1
40 進入資料夾,使用命令df -h .
41 檢視
42 Filesystem            Size  Used Avail Use% Mounted on
43 
44 則說明這個目錄所在的的檔案系統是,對應的路徑是/boot如果這個目錄下面是多個檔案系統,就需要單獨備份了,dump每次只能備份一個檔案系統
45 譬如在目錄 / 下,df -h 就可以檢視到多個檔案系統。
46 
47 然後我們開始備份這個檔案系統
48 dump -0u -f /root/boot.dump /boot
49 注意順序,先寫備份生成的檔案,然後寫備份的檔案系統(filesystem)
50 然後等待備份,這是第一次備份,可以繼續備份
51 
52 dump -0u -f /root/boot.dump /boot  週末完整備份
53 在這個基礎上做增量備份
54 dump -1u -f /root/boot.dump.1 /boot   週一
55 dump -1u -f /root/boot.dump.11 /boot 週二
56 dump -1u -f /root/boot.dump.111 /boot 週三
57 
58 上面三個檔案都是在0的基礎上進行了3次增量備份
59 還原的時候0+上面的一個就行
60 還原到週一
61 restore -rf /root/boot.dump
62 restore -rf /root/boot.dump.1
63 還原到週二
64 restore -rf /root/boot.dump
65 restore -rf /root/boot.dump.2
66 
67 注意,在restore的時候一定要到還原的路徑下,執行完整備份後,在這個路徑下會多出來grub 和lost +found ,刪除掉
68 如果出現報錯:restore: Incremental tape too high
69 那麼先執行原來的完整備份。
70 
71 
72 ~~~
73 dump -W 檢視有沒有檔案被dump過資料。
74 備份的時間寫入 /etc/dumpdates檔案中。檢視命令 cat /etc/dumpdates
備份

許可權管理命令

chmod 777 filename 給檔案分配讀寫執行許可權(4讀,2寫,1可執行) 第一個數字代表檔案所有者,第二個數字代表所在使用者組,第三個數字代表其他使用者

chmod 754 * 給當前目錄的所有檔案賦權,檔案所有者可讀可寫可執行,使用者組可讀可執行,其他使用者可讀

chmod -R 777 /tmp/a 將/tmp/a目錄及以下目錄許可權賦予777 -R:遞迴修改,不加該引數只是修改了a目錄的許可權,a目錄下的子目錄許可權不變

chown username filename 改變檔案所有者(change file ownership)

chgrp groupname filename 改變檔案所屬組

umask -S 以rwx形式顯示新建檔案預設許可權,即新建的檔案有什麼許可權(注意:檔案型別會自動去掉可執行許可權)

umask 023 將新建檔案的許可權設定為754(rwxr-xr--) 023=777-754

使用者與群組

usaradd user1          建立使用者

passwd username        設定密碼

userdel -r user1          刪除使用者 -r 刪除使用者的同時刪除使用者家目錄

groupadd groupname       建立使用者組

passwd user1           修改一個使用者的口令 (只允許root執行)
chage -E 2005-12-31 user1     設定使用者口令的失效期限

su - user1      切換使用者 -:代表連帶使用者的環境一起切換 -c:僅執行一次命令,而不切換使用者身份

sudo su -       切換使用者

w            檢視當前登入使用者(詳細)

who              檢視當前所有登入使用者

last            檢視使用者的登入記錄,包括多次登入的記錄

lastlog           檢視所有使用者的最後登入時間

touch /etc/nologin       禁止除了root以外的所有使用者登入 該命令是在/etc目錄下建立了一個nologin檔案

passwd -l username      禁止指定使用者登入

passwd -u username        解除被禁止登陸的使用者

passwd -d username      清除指定使用者的密碼,可以無密碼登入該使用者

檔案搜尋

find [搜尋範圍] [搜尋條件]    消耗資源,速度慢,最好不用

find / -name init     全盤搜尋名為init的檔案

find /etc -name init    在目錄/etc中查詢檔案init(只有檔名為init的檔案才會被搜尋出來)

find /etc -name *init*      在目錄/etc中查詢檔名包含init的檔案,*代表多個字元

find /usr/bin -type f -atime +100    搜尋在過去100天內未被使用過的執行檔案
find /usr/bin -type f -mtime -10 搜尋在10天內被建立或者修改過的檔案

find /etc -name init???    ?匹配單個字元

find -name *.text    查詢以.text結尾的檔案

find path -size +25k      查詢指定目錄下檔案大小大於25k的所有檔案 +表示大於,-表示小於,不寫表示等於,單位k為小寫,M為大小

find path -size +25M -a -size -30M 查詢指定目錄下檔案大小大於25M並且小於30M的所有檔案 -a表示and,-o表示or

locate filename          該命令建立資料庫,系統會定期更新檔案到資料庫中,在資料庫中查詢,速度非常快。因為資料庫不是實時更新,所以可能新建的檔案查詢不到。

updatedb         立即更新資料庫,資料庫不收錄/tmp目錄下的檔案,即使updatedb,/tmp下的檔案locate命令也查詢不到

which cp         搜尋cp命令所在的目錄及別名資訊

which useradd         搜尋useradd命令所在的目錄

whereis useradd        搜尋useradd命令所在目錄,以及幫助文件路徑

grep -iv [指定字串][檔案]    在檔案中搜索字串匹配的行並輸出 -i 不區分大小寫 -v 排除指定字串 -n:輸出行號

grep mysql /root/install.log    在install.log檔案中查詢mysql的行,並列出該行內容 --color=auto 搜尋出的關鍵字用顏色顯示

grep -v ^# /etc/inittab 去掉以#開始的行(註釋行,^表示行首)

幫助命令

man ls 檢視ls命令的幫助資訊

man services 檢視配置檔案services的幫助資訊

網路命令

write <使用者名稱> 給使用者發信息,以Ctrl+D儲存結束(需要使用者登入狀態)

write linzhiling 給linzhiling使用者傳送資訊,回車後書寫要發的資訊,前提是使用者是已登入狀態

wall [message] 傳送廣播資訊,即給所有線上使用者傳送資訊

mail <使用者名稱> 給使用者傳送郵件,即使網路不通也可以使用

ping 192.168.1.2 給指定IP地址傳送資料包,測試網路連通性,Ctrl+C 停止

ping -c 3 192.168.1.2 給指定IP地址發3次資料包

ifconfig 網絡卡名稱 IP地址 檢視和設定網絡卡資訊

traceroute 顯示資料包到主機間的路徑

traceroute www.sina.com.cn 檢視本機到新浪網的路由節點,一般用來檢視哪個節點的網路出現問題

netstat 顯示網路相關資訊 -t TCP協議 -u UDP協議 -l 監聽 -r 路由 -n 顯示IP地址和埠號

netstat -tlun 檢視本機監聽的埠(udp沒有監聽狀態,只有tcp有)

netstat -an 檢視本機所有的網路連線 ESTABLISHED:正在連線的網路

netstat -rn 檢視本機路由表

netstat -ano 檢視埠號

netstat -nat|grep -i "8080"|wc -l  檢視某埠連線數

setup 配置網路

檔案系統檢視常用命令

df hl 檢視磁碟佔用情況

du -sh 某目錄佔用磁碟空間大小,不包括子目錄和目錄下的檔案 -s:顯示目錄佔用的磁碟空間大小,不要顯示其下子目錄和檔案佔用的磁碟空間大小

du -h filename 指定檔案佔用的磁碟空間大小

du -ah --max-depth=1 檢視某目錄下全部檔案及資料夾的磁碟佔用大小和目錄總佔用空間大小 -a:顯示目錄佔用的磁碟空間大小,

還要顯示其下目錄和檔案佔用磁碟空間的大小;-h:以人類可讀的方式顯示;不加--max-depth=1會把所有下下級等目錄佔用空間都列出來

系統命令

 1 系統資訊 
 2 arch 顯示機器的處理器架構
 3 uname -m 顯示機器的處理器架構
 4 uname -r 顯示正在使用的核心版本 
 5 dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI) 
 6 hdparm -i /dev/hda 羅列一個磁碟的架構特性 
 7 hdparm -tT /dev/sda 在磁碟上執行測試性讀取操作 
 8 cat /proc/cpuinfo 顯示CPU info的資訊 
 9 cat /proc/interrupts 顯示中斷 
10 cat /proc/meminfo 校驗記憶體使用 
11 cat /proc/swaps 顯示哪些swap被使用 
12 cat /proc/version 顯示核心的版本 
13 cat /proc/net/dev 顯示網路介面卡及統計 
14 cat /proc/mounts 顯示已載入的檔案系統 
15 lspci -tv 羅列 PCI 裝置 
16 lsusb -tv 顯示 USB 裝置 
17 date 顯示系統日期 
18 cal 2007 顯示2007年的日曆表 
19 date 041217002007.00 設定日期和時間 - 月日時分年.秒 
20 clock -w 將時間修改儲存到 BIOS 
檢視系統資訊

top 效能分析,動態顯示記憶體(Mem),Cpu佔用情況

sync 強制將快取區資料寫入硬碟,釋放快取區,sync 命令執行 sync 子例程。如果必須停止系統,則執行sync 命令以確保檔案系統的完整性。sync 命令將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫對映檔案;echo 1 0 預設 ,1 清空頁快取, 2 清空inode和目錄樹快取, 3 清空所有快取。可以通過cat /proc/sys/vm/drop_caches命令檢視。

free -m 相對於top 提供了更簡潔的檢視系統記憶體使用情況

free -9 突然終止執行的程序會導致系統資源無法釋放,此時需使用free命令回收記憶體

kill -pid kill -signal pid 殺掉程序 pid是程序號,signal:1重跑(重啟程序(以使配置生效等)),9強行終止程序,15結束

ps -ef|grep tomcat 標準格式顯示含有tomcat的程序 -e:顯示所有程序 -f:全格式

ps -eO lstart | grep tomcat 檢視程序詳細的啟動時間

echo $PATH 檢視系統環境變數

alias 檢視別名

alias vi='vim' 設定別名,等號前後不要有空格

vi /root/.bashrc 讓別名永久生效,修改配置檔案即可

unalias 別名 刪除別名

echo 1 > /proc/sys/vm/drop_caches  清除記憶體

歷史命令

history 檢視歷史命令記錄-c:刪除歷史命令記錄 -w:把快取中的歷史命令寫入歷史命令儲存檔案~/.bash_history(正常情況下要等使用者退出後才會把歷史命令寫入檔案中)

cat ~/.bash_history 檢視歷史命令儲存檔案 預設儲存1000條歷史記錄

注意

使用上下箭頭呼叫以前的歷史命令

使用“!n”重複執行第n條歷史命令(history命令會列出歷史命令,n可在列表中檢視得到)

使用“!!”重複執行上一條歷史命令

使用“!字串”重複執行最後一條以該字串開頭的命令

伺服器執行狀態相關命令

ps      檢視系統程序執行緒,我一般都是用這個命令檢視程序pid的,然後用pid做更深入的排查。

基本用法
ps -aux 檢視所有程序
ps -T -p ${pid} 檢視某個程序的執行緒

pstree    檢視系統程序樹,他可以把各個程序之間的關係用樹形結構標識出來。

top     檢視系統程序執行緒執行情況,包裹資源的使用情況,系統負載等。我的用法是看下伺服器上負載是否很高,然後看具體是哪個程序,哪個執行緒佔用cpu比較多。

基本用法
top 列出所有執行緒負載資訊
top -H 列出所有執行緒的負載資訊
top -H -p ${pid} 列出某個pid下所有執行緒的負載資訊

free    檢視記憶體及使用情況

三劍客命令

 1 cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT 
 2 cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合併一個檔案的詳細說明文字,並將簡介寫入一個新檔案中 
 3 cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合併一個檔案的詳細說明文字,並將簡介寫入一個已有的檔案中 
 4 grep Aug /var/log/messages 在檔案 '/var/log/messages'中查詢關鍵詞"Aug" 
 5 grep ^Aug /var/log/messages 在檔案 '/var/log/messages'中查詢以"Aug"開始的詞彙 
 6 grep [0-9] /var/log/messages 選擇 '/var/log/messages' 檔案中所有包含數字的行 
 7 grep Aug -R /var/log/* 在目錄 '/var/log' 及隨後的目錄中搜索字串"Aug" 
 8 sed 's/stringa1/stringa2/g' example.txt 將example.txt檔案中的 "string1" 替換成 "string2" 
 9 sed '/^$/d' example.txt 從example.txt檔案中刪除所有空白行 
10 sed '/ *#/d; /^$/d' example.txt 從example.txt檔案中刪除所有註釋和空白行 
11 echo 'esempio' | tr '[:lower:]' '[:upper:]' 合併上下單元格內容 
12 sed -e '1d' result.txt 從檔案example.txt 中排除第一行 
13 sed -n '/stringa1/p' 檢視只包含詞彙 "string1"的行 
14 sed -e 's/ *$//' example.txt 刪除每一行最後的空白字元 
15 sed -e 's/stringa1//g' example.txt 從文件中只刪除詞彙 "string1" 並保留剩餘全部 
16 sed -n '1,5p;5q' example.txt 檢視從第一行到第5行內容 
17 sed -n '5p;5q' example.txt 檢視第5行 
18 sed -e 's/00*/0/g' example.txt 用單個零替換多個零 
19 cat -n file1 標示檔案的行數 
20 cat example.txt | awk 'NR%2==1' 刪除example.txt檔案中的所有偶數行 
21 echo a b c | awk '{print $1}' 檢視一行第一欄 
22 echo a b c | awk '{print $1,$3}' 檢視一行的第一和第三欄 
23 paste file1 file2 合併兩個檔案或兩欄的內容 
24 paste -d '+' file1 file2 合併兩個檔案或兩欄的內容,中間用"+"區分 
25 sort file1 file2 排序兩個檔案的內容 
26 sort file1 file2 | uniq 取出兩個檔案的並集(重複的行只保留一份) 
27 sort file1 file2 | uniq -u 刪除交集,留下其他的行 
28 sort file1 file2 | uniq -d 取出兩個檔案的交集(只留下同時存在於兩個檔案中的檔案) 
29 comm -1 file1 file2 比較兩個檔案的內容只刪除 'file1' 所包含的內容 
30 comm -2 file1 file2 比較兩個檔案的內容只刪除 'file2' 所包含的內容 
31 comm -3 file1 file2 比較兩個檔案的內容只刪除兩個檔案共有的部分 
文字處理

grep
這個是我非常常用的一個命令了,尤其是在問題排查的時候,需要用grep從大量的資料中篩選出一些我想要的。 grep也支援正則表示式匹配。

基本用法
grep "abc" file 從file中篩選出包含 abc的行。

awk
開頭我也說過,這個命令是我最常用的命令之一,比如在檔案有多列的時候,我可以用awk輸出具體某幾列,或者做一些簡單的統計 求和,求平均值啊,再或者做一下簡單的資料格式化。

基本用法
cat data | awk '{print $1,$3,$5}' 輸出第1 3 5列,注意下標是從1開始
cat data | awk '{ sum += $1 } END { print sum }' 對第一列求和
cat data | awk -F'\t' '{print $1,$3}' 把每行資料按tab分列,並輸出1 3列

sort        對標準內容做排序,

基本用法
cat file|sort 把file裡的資料排序,注意是按字典序排的,如果想按數值排,需要能夠加-n引數
cat file|sort -k2 -n -r 按第二列 數值 倒序 排序,-k指定第幾列,-r是翻轉reverse的意思

uniq        對排序好的內容去重,注意它只是把相鄰且相同的去重,所以如果想要全域性去重,需要先用sort排序。

基本用法
cat file|sort|uniq 把file裡的檔案排序並去重
cat file|sort|uniq -c 把file裡的檔案排序並去重,且輸出每行出現的次數

wc        我都是用wc來數有多上行,其實wc不僅僅能數多少行,還可以數多少單詞,多少字元。

基本用法
wc -l file 數下file裡有多少行
wc -w file 多少個單詞
wc -c file 多少個位元組
wc -m file 多少個字元

sed
parallel
linux大部分命令都是單程序的,這個命令可以讓其他命令多程序執行。

scp之前運維大量機器的時候,通常需要批量修改某個配置檔案,都是在一臺機器上改好,然後用scp指令碼分發到其他機器上去的,大大提高效率。

基本用法
scp aaa.txt [email protected]:/tmp/ 把當前目錄下的aaa.txt檔案通過192.168.1.3上的test賬號放到/tmp目錄下
scp [email protected]:/tmp/aaa.txt . 和上一條相反

磁碟及IO

du          檢視目錄大小

基本用法        du -h --max-depth=1 輸出最深1層的目錄,然後檔案大小用人類可讀的方式,比如1K 234M 2G

df          檢視磁碟大小和佔用情況

基本用法       df -h 檢視各個分割槽的大小和使用情況

iostat        檢視磁碟的io狀態

iotop        可以類似於top目錄一樣,實時顯示各個程序的io狀態。

find         查詢檔案,查詢條件可以是檔名,檔案日期,檔案大小,很強大。 我們之前伺服器上有個磁碟滿就強制刪除伺服器某個目錄下大於1g,且時間大於2天,且檔名是*.log的檔案,就是用find加xargs命令做的

基本用法
find /home/test -iname "test.txt 在/home/test/下找檔名為test.txt的檔案,也支援萬用字元
find /home/test -isize +100M 查詢/home/test下大於100M的檔案

locate
定位某個具體檔案的位置,locate命令要比find -name快得多,原因是它不搜尋具體目錄,而是搜尋一個數據庫/var/lib/mlocate/mlocate.db,這個資料庫會通過一個cron定時更新,所以有可能新建的檔案會檢索不到。

基本用法       locate a.txt 定位a.txt的位置,如果系統中有多個a.txt,會全部顯示出來。

tree         可以看到樹狀目錄結構,

基本用法       tree -L 2 只顯示兩層樹狀結構

nc         netcat,可以用來看遠端某個埠是否開啟,功能很強大,但是我用到的不多。

基本用法      nc -z xindoo.me 443 檢測我伺服器上的443埠是否開放(當然是開的)

route        檢視和操作本機路由表

基本用法      route 列出本地路由表

netstat        檢視本機的網路狀態,可以看到端口占用情況和網路連結情況。

基本用法       netstat -antp

traceroute      檢視一個請求到目標伺服器所經過的所有路由節點,一般用來排查網路問題。

基本用法       traceroute www.baidu.com

iftop         檢視實時網路io情況

lsof         檢視端口占用

dig        檢視域名的資訊,之前做運維的時候,經常需要驗證某個域名解析改動是否生效,因為一般一個域名會-A到多個ip上,用ping命令只能看到一個ip,這個時候我就會用dig來看域名解析資訊了。

基本用法     dig www.baidu.com

curl       發起一個http請求,我一般都是用這個命令來驗證服務是否能正常訪問的,它有獲取html原始碼的功能。

基本用法     curl www.baidu.com      curl -I www.baidu.com 獲取請求baidu.com的請求頭

下載命令

wget
下載網路上一個檔案,基本上就是有個命令列版的下載工具了。

基本用法
wget xindoo.me/test.txt 把我伺服器上test.txt檔案下載到本地

其他
yum|apt install
很多時候伺服器上沒有我們想要的工具,可以用這個命令安裝下,yum是Fedora和RedHat以及CentOS中的Shell前端軟體包管理器, apt是ubuntu平臺上的。

基本用法
yum install curl
apt install curl

還有個編譯下載,用的不多,相對繁瑣,優點可以自由指定安裝

 1 yum install package_name 下載並安裝一個rpm包 
 2 yum localinstall package_name.rpm 將安裝一個rpm包,使用你自己的軟體倉庫為你解決所有依賴關係 
 3 yum update package_name.rpm 更新當前系統中所有安裝的rpm包 
 4 yum update package_name 更新一個rpm包 
 5 yum remove package_name 刪除一個rpm包 
 6 yum list 列出當前系統中安裝的所有包 
 7 yum search package_name 在rpm倉庫中搜尋軟體包 
 8 yum clean packages 清理rpm快取刪除下載的包 
 9 yum clean headers 刪除所有標頭檔案 
10 yum clean all 刪除所有快取的包和標頭檔案 
YUM 軟體包升級器 - (Fedora, RedHat及類似系統)
1 dpkg -i package.deb 安裝/更新一個 deb 包 
2 dpkg -r package_name 從系統刪除一個 deb 包 
3 dpkg -l 顯示系統中所有已經安裝的 deb 包 
4 dpkg -l | grep httpd 顯示所有名稱中包含 "httpd" 字樣的deb包 
5 dpkg -s package_name 獲得已經安裝在系統中一個特殊包的資訊 
6 dpkg -L package_name 顯示系統中已經安裝的一個deb包所提供的檔案列表 
7 dpkg --contents package.deb 顯示尚未安裝的一個包所提供的檔案列表 
8 dpkg -S /bin/ping 確認所給的檔案由哪個deb包提供 
DEB 包 (Debian, Ubuntu 以及類似系統)
1 apt-get install package_name 安裝/更新一個 deb 包 
2 apt-cdrom install package_name 從光碟安裝/更新一個 deb 包 
3 apt-get update 升級列表中的軟體包 
4 apt-get upgrade 升級所有已安裝的軟體 
5 apt-get remove package_name 從系統刪除一個deb包 
6 apt-get check 確認依賴的軟體倉庫正確 
7 apt-get clean 從下載的軟體包中清理快取 
8 apt-cache search searched-package 返回包含所要搜尋字串的軟體包名稱 
APT 軟體工具 (Debian, Ubuntu 以及類似系統)

man
這個命令是用來檢視其它命令手冊的,可以看到具體某個命令的詳細作用,和具體引數。這個是個很重要的命令了,一般他會比各命令自帶的–help詳細很多。

基本用法
man curl 檢視curl命令的手冊

日誌檔案儲存目錄

ll /var/log/
兩個重要的系統日誌檔案
messages -- 記錄系統或服務程式執行的狀態資訊 和 錯誤資訊
secure(安全) -- 使用者登入資訊。 作用:可以進行監控檔案的資訊,檢查是否有過多失敗記錄

[root@oldboyedu ~]# cat /var/log/secure
Apr 4 11:35:29 oldboyedu sshd[3568]: Accepted password for root from 10.0.0.1 port 54913 ssh2
Apr 4 11:35:29 oldboyedu sshd[3568]: pam_unix(sshd:session): session opened for user root by (uid=0)
   01        02    03         04

01. 使用者是什麼時間登入的      02. 登入的主機名稱

03. 使用什麼方式進行遠端登入    04. 登入情況說明

a 正確登入情況說明      b 錯誤登入情況說明

如何檢視日誌資訊
head -5 /etc/profile --- 檢視前面幾行資訊 (預設檢視前面10行內容)
tail -6 /etc/profile --- 檢視倒數幾行資訊(預設檢視倒數10行內容)
tail -f /var/log/secure --- 檢視日誌檔案方法 一直追蹤檢視檔案內容的變化

掛載一個檔案系統

mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經存在 
umount /dev/hda2 解除安裝一個叫做hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出 
fuser -km /mnt/hda2 當裝置繁忙時強制解除安裝 
umount -n /mnt/hda2 執行解除安裝操作而不寫入 /etc/mtab 檔案- 當檔案為只讀或當磁碟寫滿時非常有用 
mount /dev/fd0 /mnt/floppy 掛載一個軟盤 
mount /dev/cdrom /mnt/cdrom 掛載一個cdrom或dvdrom 
mount /dev/hdc /mnt/cdrecorder 掛載一個cdrw或dvdrom 
mount /dev/hdb /mnt/cdrecorder 掛載一個cdrw或dvdrom 
mount -o loop file.iso /mnt/cdrom 掛載一個檔案或ISO映象檔案 
mount -t vfat /dev/hda5 /mnt/hda5 掛載一個Windows FAT32檔案系統 
mount /dev/sda1 /mnt/usbdisk 掛載一個usb 捷盤或快閃記憶體裝置 
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 掛載一個windows網路共享 
掛載一個檔案系統