0.日常命令 cd 目錄路徑: 跳轉到指定目錄 mkdir 目錄名稱:新增目錄 pwd: 獲取當前路徑 su: 切換用戶 ll: 查看當前目錄俠的文件和目錄 rm rf 目錄: 遞歸刪除指定目錄下的所有文件 vi 文件:修改文件 mv 源文件夾名 新文件夾名:移動文件夾到指定目錄 grep:查找想要 ...
0.日常命令
- cd 目錄路徑: 跳轉到指定目錄
- mkdir 目錄名稱:新增目錄
- pwd: 獲取當前路徑
- su: 切換用戶
- ll: 查看當前目錄俠的文件和目錄
- rm -rf 目錄: 遞歸刪除指定目錄下的所有文件
- vi 文件:修改文件
- mv 源文件夾名 新文件夾名:移動文件夾到指定目錄
- grep:查找想要的信息
- cp -r 源目錄名 新目錄名:拷貝指定目錄中的文件到新目錄中
- touch 文件名:創建文件
- find -name 文件名:查找文件
- ls -ahl:查看文件的所有者
- chkconfig --add xxx: 將xxx腳本加入到開機啟動項裡面
- chkconfig --list:查看添加是否成功
- shutdown -h now:指定現在立即關機;
- shutdown +5 "System will shutdown after 5 minutes":指定5分鐘後關機,同時送出警告信息給登入用戶
- reboot: 重開機
- reboot -w:做個重開機的模擬(只有紀錄並不會真的重開機)
1. 幫助命令:man,help, info
- help xxx #顯示內置命令幫助信息;
xxx --help #顯示外置命令幫助信息; - man xxx #無內外置之分,顯示的內容比help更詳細;
- info xxx #得到的內容比man更詳細;
2.查看活動進程的命令:ps,top, pidstat
- ps 用於顯示系統內的所有進程
~ ps-elf 查看所有進程;
~ ps -ef | grep java 查看和java有關的所有進程; - top 用於查看活動進程的CPU和記憶體信息,能夠實時顯示系統中各個進程的資源占用情況,
可以按照CPU、記憶體的使用情況和執行時間對進程進行排序。 - pidstat 用於監控全部或指定的進程占用系統資源的情況,包括CPU、記憶體、磁碟I/O、線程切換、線程數等數據。
pidstat -u/-r/-d -p 進程號 --解釋:(-u CPU, -r 記憶體,-d 磁碟I/O
3.查看日誌常用命令:tail,head,cat,more,less,sed
- tail:對文件進行動態監控
tail -fn 200 test.log 實時監控200行日誌
tail -n 10 test.log 查詢最後10行日誌
tail -n +10 test.log 查詢10行之後的所有日誌 - head -n 10 test.log 查看頭10行日誌
head -n -10 test.log 查看除最後10行的其他日誌 - cat -n test.log | grep "run" 在test.log中查詢包含run的行
cat test.log 顯示test.log中的所有內容 - sed -n '/2019-11-17 16:17:20/,/2019-12-17 16:17:36/p' test.log 查找指定日期範圍內的日誌
sed -n '1,3p' test.log 顯示第1到3行日誌 - more可以顯示百分比,回車可以向下一行, 空格可以向下一頁,q可以退出查看
more -4 test.log 每屏顯示4行日誌
more +/run test.log 從日誌中查找第一個出現"run"字元串的行,並從該處前兩行開始顯示輸出
cat test.log | more -5 得到test.log中的全部內容並且每次顯示5行
more 僅能向前移動,卻不能向後移動
- less test.log test1.log 瀏覽多個文件
ps -ef | less -N ps查看進程信息並通過less分頁顯示同時顯示行號
ps aux|grep redis:查看包括redis字元串的進程
pgrep redis -a:查看包括redis字元串的進程 - history 查看所有的歷史記錄
history | grep xxx 查看歷史記錄中包含某些指令的記錄
history | more 分頁查看記錄
history -c 清空所有的歷史記錄
打開超大文件:
1. head -10000 slowquery.log > temp.log 將slowquery.log的前10000行日誌寫入到temp.log中
2. tail -10000 slowquery.log > temp.log 將slowquery.log的後10000行日誌寫入到temp.log中
3. sed -n '10,10000p' slowquery.log > temp.log 把slowquery.log第10到10000行的數據寫入到temp.log中
4. cat catalina.log | grep '2017-09-06 15:15:42' > test.log 根據查詢條件導出
4.壓縮文件命令
- tar -zxvf xxxx.gz: 解壓文件到當前目錄下
tar -zxvf xxxx.gz -C /usr/local 解壓文件到指定位置 - tar -zcvf abc.gz a.txt b.txt c.txt 將這三個文件壓縮成abc.gz壓縮包
tar -zcvf abc.gz /abc/ 將指定目錄壓縮成壓縮包
5.殺死一個進程的操作
方法一:把ps的查詢結果通過管道給grep查找包含特定字元串的進程, 管道符“|”用來隔開兩個命令,管道符左邊命令的輸出會作為管道符右邊命令的輸入。
例如: ps -ef | grep firefox 找到firefox進程的進程號
然後:kill -s 9 6496 殺死進程
方法二: 使用pgrep查詢某個進程的進程號
例如:pgrep firefox
然後:kill -s 9 6496
方法三: 使用pkill, pkill無須 “s”,終止信號等級直接跟在 “-“ 後面
例如:pkill -9 firefox
6.許可權命令
操作系統中每個文件都擁有特定的許可權、所屬用戶和所屬組,Linux中許可權一般分為讀(readable)、寫(writable)和執行(excutable),分為三組。分別對應文件的屬主(owner),屬組(group)和其他用戶(other),通過 ls -l 命令我們可以 查看某個目錄下的文件或目錄的許可權
文件的類型:
- d: 代表目錄
- -: 代表文件
- l: 代表軟鏈接(可以認為是window中的快捷方式)
Linux中許可權分為以下幾種:
- r:代表許可權是可讀,可以用數字4表示
- w:代表許可權是可寫,可以用數字2表示
- x:代表許可權是可執行,可以用數字1表示
對文件和目錄而言,讀寫執行表示不同的意義。對於文件:
許可權名稱 | 可執行操作 |
---|---|
r | 可以使用cat查看文件的內容 |
w | 可以修改文件的內容 |
x | 可以將其運行為二進位文件 |
對於目錄:
許可權名稱 | 可執行操作 |
---|---|
r | 可以查看目錄下列表 |
w | 可以創建和刪除目錄下文件 |
x | 可以使用cd進入目錄 |
超級用戶可以無視普通用戶的許可權,即使文件目錄許可權是000,依舊可以訪問。 在linux中的每個用戶必須屬於一個組,不能獨立於組外
修改文件/目錄的許可權的命令:chmod
示例:
修改/test下的aaa.txt的許可權為屬主有全部許可權,屬主所在的組有讀寫許可權, 其他用戶只有讀的許可權:
chmod u=rwx,g=rw,o=r aaa.txt
上述示例還可以使用數字表示:chmod 764 aaa.txt
更多請看這裡
7.查看磁碟情況的命令:free,vmstat,du,df
顯示系統使用和空閑的記憶體情況,包括物理記憶體、交互區記憶體(swap)和內核緩衝區記憶體
- free:
- [ ] -b 以Byte為單位顯示記憶體使用情況。
- [ ] -k 以KB為單位顯示記憶體使用情況。
- [ ] -m 以MB為單位顯示記憶體使用情況。
- [ ] -g 以GB為單位顯示記憶體使用情況。
- [ ] -o 不顯示緩衝區調節列。
- [ ] -s<間隔秒數> 持續觀察記憶體使用狀況。
- [ ] -t 顯示記憶體總和列。
- [ ] -V 顯示版本信息。
例:free -s 10 每隔10秒查看記憶體的使用情況
- cat /proc/meminfo等價於free命令
- vmstat: 動態的瞭解系統資源運行情況
- du: 顯示每個文件和目錄的磁碟使用空間以及文件的大小。
例: du -h tomcat8.5/ 表示顯示tomcat8.5文件夾下每個文件、目錄的占用空間 - df: 顯示磁碟分區上可以使用的磁碟空間
例:
df -a 表示查看全部文件系統,單位預設KB
df -h 表示以KB、MB、GB的單位來顯示,可讀性高
更多內容參考這裡
8.文件傳輸命令:ftp,scp,rsync,rz,sz
- ftp:先忽略
scp:
scp -p ./files/yum.log 192.168.214.187:/tmp/demo/ :表示將當前系統的files目錄下的yum日誌文件複製到IP為192.168.214.18的機器的/tmp/demo目錄下- sz:
sz test.log: 下載test.log日誌文件到windows下 - rz:
文件上傳,出現彈出框,選中要上傳的文件,確定之後即可上傳文件 rsync:
rsync是可以實現增量備份的工具。配合任務計劃,rsync能實現定時或間隔同步,配合inotify或sersync,可以實現觸髮式的實時同步。rsync可以實現scp的遠程拷貝,cp的本地拷貝、rm刪除和"ls -l"顯示文件列表等功能
9.網路配置相關命令:netstat、ifconfig、ss、tcpdump、traceroute、ping、nslookup、dig、nmap
- ifconfig:查看當前系統的網卡信息. 和ip addr命令類似
- ping:查看與某台機器的連接情況
netstat:用於顯示各種網路相關信息,如網路連接,路由表,介面狀態,masquerade 連接,多播成員等。
查看當前系統的埠使用:netstat -an
列出所有埠: netstat -a
列出所有tcp埠: netstat -at
列出所有udp埠: netstat -au
只顯示監聽埠: netstat -l
只列出所有監聽tcp埠: netstat -lt
只列出所有監聽udp埠: netstat -lu
只列出所有監聽UNIX埠: netstat -lx
顯示所有埠的統計信息: netstat -s
netstat 將每隔2秒輸出網路信息:netstat -t -c 2
顯示核心路由信息:netstat -rn
找出程式運行的埠:netstat -apn | grep ssh
找出運行在指定埠的進程:netstat -an | grep ':22'
查看6379埠占用情況: netstat -ntlp | grep 6379- ss:可以用來獲取socket統計信息,可以顯示和netstat類似的內容,優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。
例:ss -l 顯示本地打開的所有埠
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 顯示所有已建立的SMTP連接
ss -o state established '( dport = :http or sport = :http )' 顯示所有已建立的HTTP連接
ss -x src /tmp/.X11-unix/* 找出所有連接X伺服器的進程
ss -s 列出當前socket詳細信息
ss 與 netstat對比:
ss命令是iproute工具集(CentOS 最小化安裝帶有);netstat命令是net-tools工具集;
當伺服器的socket連接數量變得非常大時,無論是使用netstat命令還是直接cat /proc/net/tcp,執行速度都會很慢;
ss快的秘訣在於,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,可以獲得Linux 內核中第一手的信息,這就確保了ss的快捷高效。
- tcpdump:用於傾倒網路傳輸數據,執行tcpdump指令可列出經過指定網路界面的數據包文件頭
例: tcpdump 顯示TCP包信息
tcpdump -c 20:顯示指定數量包
tcpdump -c 10 -q:精簡模式顯示 10個包
tcpdump -ddd:轉換成十進位格式 - traceroute:可以知道信息從你的電腦到互聯網另一端的主機是走的什麼路徑
例如:
- traceroute -n -m 5 -q 4 -w 3 www.baidu.com
說明: -n 顯示IP地址,不查主機名, -m 設置跳數 -q 4每個網關發送4個數據包 -w 把對外發探測包的等待響應時間設置為3秒 - traceroute -p 6888 www.baidu.com 探測包使用的基本UDP埠設置6888
- traceroute -r www.baidu.com 繞過正常的路由表,直接發送到網路相連的主機
- nslookup:用於查詢DNS的記錄,查詢功能變數名稱解析是否正常,在網路故障時用來診斷網路問題。
例:nslookup www.baidu.com 表示使用本機預設DNS來解析百度地址
nslookup www.baidu.com 8.8.8.8 表示指定DNS伺服器來解析百度地址
nslookup -d www.baidu.com 表示只要在查詢的時候,加上-d參數,即可查詢功能變數名稱的緩存 - nmap
tcp埠掃描:-sT、-sP
TCP SYN埠掃描:-sS
nmap -sS 192.168.137.10 -255 -p 20,21,53-110,30000 --v
UDP埠掃描:-sU
TCP ACK掃描:-sA - dig 命令主要用來從 DNS 功能變數名稱伺服器查詢主機地址信息
dig baidu.com 查詢單個主機的信息
註意點:
linux連接超時,處理方案:
1. 測試網路是否通:ping 遠程IP
2. 如果能ping通則表示與伺服器網路連接是正常,接下來測試埠:telnet 遠程ip 埠
3.如果telnet不上,要考慮伺服器是否有防火牆攔截:
(1)CentOS7查看防火牆是否運行: firewall-cmd --state
(2) CentOS6查看防火牆是否運行:/sbin/service iptables status
4. 如果防火牆被攔截,需要放行埠。如果防火牆沒有攔截,則要考慮服務內部是否配置限定IP訪問。MySQL、MongoDB、Redis都有bind選項,用來限定客戶端IP
5. 再檢查服務內部是否有其它許可權設置,例如MySQL有遠程訪問配置,Redis有protected-mode改為no
面試題:Linux查看cpu占用率高的進程(阿裡面試題)
面試題:查看占用某埠的進程(阿裡面試題)
面試題:查看某進程監聽的埠(阿裡面試題)
面試題:查看系統負載(今日頭條面試題)
面試題:查看進程中線程的狀態(蘑菇街面試題)
第一題:
可以使用以下命令查使用記憶體最多的K個進程:ps -aux | sort -k4nr | head -K
ps -aux中(a指代all——所有的進程,u指代userid——執行該進程的用戶id,x指代顯示所有程式,不以終端機來區分)
或者直接用命令:top
第一題:
可以使用以下命令查使用CPU最多的K個進程:ps -aux | sort -k3nr | head -K
第二題:
查看占用某埠的進程:
lsof -i:埠號
netstat -tunlp | grep 埠號
第三題:
查看某進程監聽的埠:ps -aux | grep tomcat
第四題:
查看系統負載:
top命令查看linux負載:top
輸入top,會輸出top - 01:18:39 up 2 days, 18:54, 1 user, load average: 0.04, 0.03, 0.05
//01:18:39:系統當前時間
//up 2 days, 18:54 :系統開機到現在經過了2天
//1 users:當前1用戶線上
//load average:0.04, 0.03, 0.05:系統1分鐘、5分鐘、15分鐘的CPU負載信息.
第五題:
查看進程中線程的狀態:top -H
查指定進程的狀態:top -H -p <pid>