這裏列出一些我的在工做中常使用的各類linux命令,每個不詳細講參數,只寫常常用的參數。但願快速得到在linux命令行工做的能力的朋友能夠看看。本人一直覺的,不使用linux 圖形界面,以xshell等ssh客戶端使用基礎版linux纔是學習linux命令的正確姿式。若是想深刻每個命令學習,可使用man手冊,或者推薦一個博客:天天一個linux指令系列https://www.cnblogs.com/peida/category/309012.html。php
文件
scp
遠程文件複製命令,通常用法
scp -P port -r src_file remote_user2@remotehost1:dest1 remote_user2@remotehost2:dest2
其中
-P 指定端口
-r 表示遞歸cp整個目錄
後面的多個遠程主機地址表示
能夠向多臺機器複製
例如
scp -P 360 -r /data/release/movesun.com root@10.135.25.177:/data/release/movesun.com
rsync
文件差別化同步,只複製修改過的文件,效率高。通常用法
rsync -avz src dest
其中
-a 表示打包壓縮傳輸
-v 詳細輸出過程
-z 對備份的文件傳輸時進行壓縮
src 源文件 ,能夠是遠程主機文件
dest 目標文件,能夠是遠程主機文件
例如
rsync -az /data/init_dirs/cd_root root@10.135.25.177:/data/cd_root
tar
文件壓縮打包,準確說
tar包只是打包工具,並不壓縮,結合gzip等程序對tar包進一步壓縮。通常用法
tar zcvf dest.tar.gz srcfiles
其中
z 表示 使用gip壓縮或解壓,還有別的格式如biz 則用字母b
c 表示壓縮
x 表示解壓
v 輸出過程
f 指定壓縮文件名
-C 指定解壓目錄
例如
tar zcvf movesun.tar.gz movesun.com
tar zxvf movesun.tar.gz -C /data/release/movesun.com
ln
創建文件連接,分軟連接和硬連接,軟連接相似windows快捷方式,
軟連接自己佔inode和空間,而硬連接並不新增inode。通常用法
ln -s -b src_file dest_link
其中
-s 表示軟連接
-b 表示覆蓋
例如
ln -s -b /data/docker /var/lib/docker
du
查看文件佔用空間,經常使用來定位大文件,大目錄,清理磁盤空間。在windows上若是安裝過cygwin或者git bash的能夠用du程序查看C盤空間。通常格式
du -sh *
其中
-s 表示只顯示統計
-h 表示存儲單位K,M,G自適應顯示
* 表示當前目錄下全部文件或者目錄
例如在windows 查看C盤空間佔用
chmodhtml
修改文件權限。linux中文件權限以9位字符表示,例如java
-rw-r--r--node
其中第一個-不是權限,表示文件類型,後面9個字符表示權限
前三位表示文件所屬用戶具備的權限
中三位表示文件所屬用戶組具備的權限
後三位表示其餘用戶具備的權限
其中每三位分別是rwx ,r表示讀,權值4,w表示寫,權值爲2,x表示執行權,權值爲1。chmod能夠以權值的形式修改文件權限,例如
chmod -R 777 /data/release/movesun.com/app/storage
其中
-R表示遞歸處理目錄
777 表示rwxrwxrwx,也就是任意用戶都具備讀、寫、執行權限
chown/chgrp
修改文件所屬用戶和用戶組,在master worker類型的多進程程序,如
nginx,php-fpm等,worker通常不是以root用戶運行,這時去訪問一些沒有權限的目錄,經常會有異常,好比http 403錯誤。這時就能夠考慮提升目錄權限,或者將目錄全部者修改成進程所屬用戶。
好比
修改文件所屬用戶
chown -R nginx /data/release/movesun.com
修改文件所屬用戶組
chgrp -R nginx /data/release/movesun.com
其中 -R表示遞歸處理
進程
killall/kill
用來中止進程
killall按進程名稱查殺進程,
進程名並不是咱們經常使用ps命令看到的最後那列COMMAND那一列,而應該經過/proc/pid/status 中的Name字段查看。killall按照這裏的進程名取得進程id查殺。若是父進程名與子進程名是同樣的,則會一併中止掉進程。不難發現,nginx,php-fpm的master進程和worker進程都是一樣的名字,因此能夠經過killall nginx查殺全部nginx master和worker進程。
在c或c++中進程名能夠經過修改argv[0]進行修改。
而kill一般用來中止指定進程,或者向其發送各類信號,參數爲進程ID,通常用9(KILL)信號殺掉進程,如kill -9 5162。能夠結合ps grep awk等獲取到要查殺的進程id。
lsof
用來查看系統打開的文件。經常使用來定位進程的文件位置、查看進程打開的文件句柄。由於
網絡鏈接實際也是佔用文件句柄,因此也能夠經過lsof看進程打開的網絡鏈接。通常使用以下
lsof -p 4304
其中4304是進程id。此命令查看該進程打開的文件。
lsof -i:80
其中80爲網絡端口。此命令用來查看哪些進程佔用80端口
lsof /usr/lib64/libstdc++.so.6.0.19
查看哪些進程打開了/usr/lib64/libstdc++.so.6.0.19文件
ps
用來顯示瞬時的進程狀態,或者是進程快照。經常使用來定位進程是否存在、獲取進程id、獲取父進程id或者進程樹、查看進程建立的線程等。由於
ps支持多種形式的參數風格,因此帶-與不帶-會有很大區別,甚至不能執行。通常使用以下:
ps axu
顯示全部進程,幷包含進程所屬用戶,CPU,MEM,耗費的CPU時間等列
ps -ef
顯示全部進程,顯示的列要比axu少
ps -axjf
顯示進程樹,相似於pstree
top
用來查看進程資源佔用。linux top有點相似於windows任務管理器。經常使用來查看哪些進程佔CPU、內存較高,負載,多核狀態等。通常用法以下
按內存佔比排序
運行top以後,按shift+m之內存佔用排序,再按字母e,切換存儲單位顯示
查看多核心狀態
運行top以後按1
查看全部java進程
top $(jps | awk '{print $1}' | sed 's/^/-p/')
strace
用來跟蹤一個進程發出的系統調用。常常用來定位程序bug,定位系統卡慢緣由,好比當系統磁盤IO太高時,由strace能夠很容易發現進程會卡在io操做的系統調用上。通常使用方法以下。
starce command
如
strace ./get_example,會打印出運行此程序產生的每個系統調用
pstack
用來查看一個運行中進程的堆棧。此工具
實際是一個shell腳本,能夠看到其使用gdb查看進程堆棧。通常使用方法以下
pstack 23560 其中23560是進程id
網絡
netstat
用來顯示網絡信息。經常使用來查看機器監聽的端口,創建的網絡鏈接,顯示路由信息等等。通常用法以下
netstat -ntlp
查看全部監聽的tcp端口及其進程,其中
n表示儘可能顯示數字
t表示只顯示tcp
l表示只顯示處於監聽狀態的
p表示顯示哪一個程序在監聽
netstat -lt
顯示監聽狀態的tcp鏈接
nestat -n
顯示全部打開的網絡鏈接
ss
用來查看socket統計信息。能夠實現跟netstat同樣的功能,並且更強大。通常用法
ss -t -a
顯示全部tcp鏈接
ss -l
顯示打開的全部端口,包括本地與外部通訊的源端口。
telnet
telnet客戶端是基於應用層telnet協議的遠程登陸程序。本人通常用來檢測端口是否暢通。其實也就是
判斷可否創建tcp鏈接,至於鏈接後的應用層通訊協議不一致,是不用考慮的問題,所以也能夠用別的網絡命令來檢測端口是否暢通,不過已經用慣了telnet。使用如
telnet 10.135.25.177 3306
而用別的網絡客戶端程序也能夠測試
端口暢通
ssh 127.0.0.1 -p 3306
ssh_exchange_identification: Connection closed by remote host
端口不通
ssh 127.0.0.1 -p 12
ssh: connect to host 127.0.0.1 port 12: Connection refused
未完待續......