點擊上方 大目 ,選擇 置頂或者星標技術乾貨每日送達!
TIPS
本文基於CentOS 7編寫,理論支持所有所有版本Linux發行版,部分命令的個別參數在不同版本中可能存在細微的差異。
入門級
# 切換目錄
cd
# 示例
# 切換到上一層目錄
cd ..
# 切換到/opt/software
cd /opt/software
# 顯示工作目錄
pwd
# 顯示指定工作目錄下之內容
ls
# 示例
# 列出當前目錄中文件及目錄的詳情
ls -l
# 列出當前目錄及其子目錄中文件及目錄的詳情
ls -lR
# 創建目錄
mkdir
# 示例
# 創建目錄aaa
mkdir aaa
# 在bbb目錄下創建目錄aaa,如果bbb目錄不存在,就創建一個
mkdir -p bbb/aaa
# 刪除目錄
rmdir
# 示例
# 刪除目錄aaa
rmdir aaa
# 刪除bbb目錄下的aaa目錄,如果aaa刪除後,bbb目錄爲成爲空目錄,則將bbb也刪除
rmdir -p bbb/aaa
# 將指定文件的訪問時間及修改時間設爲當前時間,若文件不存在,則會自動創建該文件
touch
# 示例
# 將aaa文件的訪問時間及修改時間設爲當前時間,如果aaa不存在,則會自動創建該文件
touch aaa
# 刪除文件或目錄(一旦通過rm命令刪除,將無法恢復,務必小心使用)
rm
# 示例
# 刪除test.txt(此格式只能rm 文件;如果使用了rm 目錄,則會提示是目錄,無法刪除)
rm test.txt
# 遞歸刪除test_dir目錄及其內容
rm -r test_dir
# 爲文件或目錄改名、或將文件或目錄移入其它位置
mv
# 示例
# 將test.txt改名爲damu.txt
mv test.txt damu.txt
# 將aaa目錄放入bbb目錄中;如果bbb目錄不存在,則將aaa改名爲bbb
mv aaa bbb
# 以樹狀圖列出目錄的內容
tree
# 殺死進程
kill
# 示例
# 殺死9999這個進程
kill 9999
# 查看信號
kill -l
# 發送SIGHUP信號殺死9999這個進程
kill -HUP 9999
# 使用SIGKILL信號殺死9999這個進程
kill -9 9999
# 將所有行程以樹狀圖顯
pstree
# 示例
# 展示該進程的完整指令及參數
pstree -a
# 關機
# 示例:
shutdown
# 立即關機
shutdown -h now
# 10分鐘後關機
shutdown -h 10
# 立即重啓
shutdown -r now
# 重啓
reboot
# 設置或顯示環境變量
export
# 示例
# 列出當前的環境變量
export -p
# 設置環境變量JAVA_HOME=xxx
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home
# 設定權限
# u 表示該文件的擁有者,g 表示與該文件的擁有者屬於同一個羣體(group)者,o 表示其他以外的人,a 表示這三者皆是。
# + 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
# r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過爲可執行。
chmod
# 示例
# 將test.txt設爲所有人皆可讀取
chmod a+r test.txt
# 將文件test1.txt與test2.txt設爲該文件擁有者,與其所屬同一個羣體者可寫入,但其他以外的人則不可寫入
chmod ug+w,o-w test1.txt test2.txt
# 使用數字形式設置權限,語法是chmod abc file。其中a,b,c各爲一個數字,分別表示User、Group、及Other的權限。
# r=4,w=2,x=1
# 若要rwx屬性則4+2+1=7;
# 若要rw-屬性則4+2=6;
# 若要r-x屬性則4+1=5
chmod 777 file
# 將指定文件或目錄的擁有者改爲指定的用戶或組
chown
# 示例
# 將的擁有者設爲nginx,羣體的使用者nginx
chown nginx:nginx nginx.conf
# 遞歸將當前目錄下的所有文件與子目錄的擁有者皆設爲nginx,羣體的使用者爲nginx
chown -R nginx:nginx *
# 查找文件裏符合條件的字符串
grep
# 示例
# 在當前目錄中,查找後綴爲txt的文件中,包含test字符串的文件,並打印字符串所屬的行
grep test *txt
# 遞歸查找/opt目錄中,包含test字符串的文件,並打印字符串所屬的行
grep -r test /opt
# 查找1.txt中不包含test的行
grep -v test 1.txt
# 打開文件並輸出
# 示例
# 打開1.txt
cat 1.txt
# 爲1.txt添加行號,並輸出到2.txt中
cat -n 1.txt > 2.txt
# 查找指定目錄下的文件
find
# 查找當前目錄下的所有txt文件
find . -name *.txt
# 查找機器中所有大於50M的文件
find / -type f -size +50M
# 查找機器中所有小於50M的文件,並用du -h展示出來
find / -type f -size +50M -exec du -h {} \;
系統
查看操作系統發行版本
不同的Linux發行版(例如CentOS與Debain)、以及不同版本(例如CentOS 6.x與CentOS 7.x)查看版本的方式不同,下面羅列了筆者知道的所有方式,總有一款能適用於你的環境。
•方法1:通過 /etc
目錄下的文件查看
•/etc/os-release•/etc/system-release•/etc/redhat-release•/etc/centos-release•/etc/issue
•方法2:執行 lsb_release -a
uname
作用:
顯示系統信息
語法:
Usage: uname [OPTION]...
Print certain system information. With no OPTION, same as -s.
-a, --all 打印所有信息
-s, --kernel-name 打印內核名稱
-n, --nodename 打印網絡節點主機名
-r, --kernel-release 打印內核版本
-v, --kernel-version 打印內核版本
-m, --machine 打印硬件名稱
-p, --processor 打印處理器類型
-i, --hardware-platform 打印硬件平臺
-o, --operating-system 打印操作系統
--help 幫助
--version 顯示版本
使用:
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
結果解讀:
•Linux:內核名稱•localhost.localdomain:主機名•3.10.0-327.el7.x86_64:內核版本•#1 SMP Thu Nov 19 22:10:57 UTC 2015:內核版本•x86_64:硬件名稱•x86_64:處理器類型•x86_64:硬件平臺•GNU/Linux:操作系統
常見用法:
uname -a
uptime
作用:
展示系統啓動運行了多久
語法:
Usage:
uptime [options]
Options:
-p, --pretty 對輸出結果格式化
-h, --help 展示幫助
-s, --since 展示操作系統的啓動時間
-V, --version 展示版本
使用:
[root@localhost ~]# uptime
18:52:01 up 48 days, 18:24, 4 users, load average: 0.00, 0.01, 0.05
結果解讀:
•18:52:01:當前時間•48 days, 18:24:啓動了48 days, 18:24這麼久•4 users:當前登錄了2個用戶•load average: 0.00, 0.01, 0.05:平局負載,後面的數字分別是最近1分鐘、5分鐘、15分鐘的平均負載
用戶相關
id
作用:展示用戶的ID、以及所屬羣組的ID
語法:
Usage: id [OPTION]... [USER]
Print user and group information for the specified USER,
or (when USER omitted) for the current user.
-a 忽略,只是爲了和其他版本兼容
-Z, --context 只打印當前用戶的安全上下文
-g, --group 只打印有效的group ID
-G, --groups 打印所有group ID
-n, --name 打印名稱而不是號碼,和-u/-g/-G配合使用
-r, --real 打印真實ID而非有效ID,和-u/-g/-G配合使用
-u, --user 只打印有效的用戶ID
-z, --zero 以NULL而非空格分隔結果
--help 幫助
--version 展示版本
Without any OPTION, print some useful set of identified information.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'id invocation'
使用:
# 查看當前用戶相關信息
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
結果解讀:
•uid:用戶id及名稱•gid:用戶當前所使用的組的id及名稱•groups:用戶擁有的所有組的id及名稱
常見用法:
# 查看當前用戶相關信息
id
# 查看MySQL這個用戶的相關信息
id mysql
TIPS
如果大家不知道什麼是有效ID、什麼是真實ID,可以閱讀下這個文章:https://www.annhe.net/article-4458.html[1]
w
作用:
展示當前登錄系統的用戶信息
語法:
Usage:
w [options]
Options:
-h, --no-header do not print header
-u, --no-current ignore current process username
-s, --short short format
-f, --from show remote hostname field
-o, --old-style old style output
-i, --ip-addr display IP address instead of hostname (if possible)
--help display this help and exit
-V, --version output version information and exit
使用:
[root@localhost ~]# w
18:55:14 up 48 days, 18:28, 4 users, load average: 0.05, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 222.94.228.56 18:07 42:34 0.04s 0.04s -bash
root pts/1 222.94.228.56 18:18 24:50 0.25s 0.06s -bash
root pts/2 222.94.228.56 18:41 13:48 0.02s 0.02s -bash
root pts/3 222.94.228.56 18:49 2.00s 0.05s 0.02s w
結果解讀:
•
第一行:類似uptime
•
USER:當前登錄的用戶有哪些
•
TTY:虛擬終端的別名,可以認爲是一個會話的名稱
•
FROM:你從那臺機器登錄進來的
•
LOGIN:什麼時候登錄的
•
IDLE:空閒時間
•
JCPU:是指連接上這個TTY的所有進程所佔用的時間,不包括過去的後臺作業時間;
•
PCPU:當前進程所佔用的時間
•WHAT:這個用戶當前運行的進程是什麼
who
作用:展示當前登錄用戶的信息
語法:
Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]
Print information about users who are currently logged in.
-a, --all 等價於-b -d --login -p -r -t -T -u
-b, --boot 系統啓動時間
-d, --dead 打印死亡的進程
-H, --heading 打印標題
-l, --login 打印系統登錄過程
--lookup 嘗試通過DNS規範化主機名
-m 相當於who am i
-p, --process 打印由init產生的活動進程
-q, --count 顯示登入系統的用戶名和總人數
-r, --runlevel 打印當前運行級別
-s, --short 僅打印name, line, time(默認)
-t, --time 打印最近的系統時鐘修改
-T, -w, --mesg 將用戶的消息狀態添加爲+,-或?
-u, --users 列出登錄的用戶
--message 和-T相同
--writable 和-T相同
--help 幫助
--version 版本
If FILE is not specified, use /var/run/utmp. /var/log/wtmp as FILE is common.
If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'who invocation'
使用:
[root@localhost ~]# who
root pts/0 2020-06-27 23:51 (222.94.228.56)
root pts/1 2020-06-27 21:54 (222.94.228.56)
結果解讀:
•root:登錄的用戶是誰•pts/0:虛擬終端別名•2020-06-27 23:51 (222.94.228.56):登錄時間與遠程IP
常見用法:
# 顯示當前登錄系統的用戶
who
# 展示詳情,相當於who -b -d --login -p -r -t -T -u
who -a
# 顯示自己的信息
who am i
# 打印標題
who -H
# 顯示登入系統的用戶名和總人數
who -q
whoami
作用:
顯示自身用戶名稱
語法:
Usage: whoami [OPTION]...
Print the user name associated with the current effective user ID.
Same as id -un.
--help 幫助
--version 版本
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'whoami invocation'
使用:
whoami
last
作用:
顯示用戶最近登錄信息
語法:
Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]
常用參數:
•-R:結果省略從哪裏登錄的一欄•-num/-n/num:展示前num條•username:展示指定用戶的登錄信息•tty:只顯示指定虛擬終端的登錄信息
更多參數詳見
man last
使用:
[root@localhost ~]# last
root pts/1 222.94.228.56 Mon Jun 29 22:53 still logged in
root pts/0 222.94.228.56 Mon Jun 29 22:47 still logged in
root pts/5 222.94.228.56 Sat Jun 27 23:58 - 03:07 (03:08)
root pts/0 222.94.228.56 Sat Jun 27 23:51 - 00:56 (01:04)
root pts/4 222.94.228.56 Sat Jun 27 23:39 - 00:56 (01:17)
結果解讀:
•root:誰登陸的•pts/1:虛擬終端的別名,可以認爲是一個會話的名稱•222.94.228.56:展示登錄機器的主機名,表示從哪裏登陸的•Mon Jun 29 22:53 still:登錄的起止時間•logged in:持續了多久
常見用法:
# 只顯示2條
last -2
# 展示root用戶的登錄信息
last username root
# 顯示虛擬終端別名爲pts/1的登錄信息
last tty pts/1
CPU相關
cpuinfo
作用:查看CPU信息
使用:
cat /proc/cpuinfo
結果解讀:
# 概念:
1. 物理CPU數:主板上實際插入的cpu數量
2. CPU核心數:單塊CPU上面能處理數據的芯片組的數量,如雙核、四核等
3. 邏輯CPU數:一般來說:
邏輯CPU=物理CPU個數×每顆核數 # 不支持超線程技術或未開啓此技術
邏輯CPU=物理CPU個數×每顆核數 *2 # 表示服務器的CPU支持超線程技術(簡單來說,它可使處理器中的1 顆內核如2 顆內核那樣在操作系統中發揮作用。這樣一來,操作系統可使用的執行資源擴大了一倍,提高了系統的整體性能)
# 邏輯處理核心數的編號,從0開始排序
processor : 0
# CPU廠商
vendor_id : GenuineIntel
# CPU產品系列代號
cpu family : 6
# CPU屬於其系列中的哪一代的代號
model : 45
# CPU的型號、主頻
model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
# CPU所屬製作更新版本
stepping : 7
# 微代碼
microcode : 0xffffffff
# CPU當前所使用的主頻
cpu MHz : 1999.994
# 二級緩存大小
cache size : 15360 KB
# 物理id
physical id : 0
# 單個物理CPU的邏輯CPU數
siblings : 8
# 當前物理核在其所處CPU中的編號,這個編號不一定連續
core id : 0
# CPU核心數
cpu cores : 8
# 用來區分不同邏輯核的編號,系統中每個邏輯核的此編號必然不同,此編號不一定連續
apicid : 0
# 初始的apicid
initial apicid : 0
# 是否具有浮點運算單元(Floating Point Unit)
fpu : yes
# 是否支持浮點計算異常
fpu_exception : yes
# 執行cpuid指令前,eax寄存器中的值,根據不同的值cpuid指令會返回不同的內容
cpuid level : 13
# 表明當前CPU是否在內核態支持對用戶空間的寫保護(Write Protection)
wp : yes
# 當前CPU支持的功能
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt
# 在系統內核啓動時粗略測算的CPU速度(Million Instructions Per Second)
bogomips : 3999.98
# 每次刷新緩存的大小單位
clflush size : 64
# 緩存地址對齊單位
cache_alignment : 64
# 可訪問地址空間位數
address sizes : 42 bits physical, 48 bits virtual
# 對能源管理的支持
power management:
常見用法:
# 查詢系統有幾顆物理CPU(結果有幾行說明有幾個物理CPU)
cat /proc/cpuinfo | grep "physical id" |sort |uniq
# 查詢系統每顆物理CPU的核心數
cat /proc/cpuinfo | grep "cpu cores" | uniq
# 每顆物理CPU核心是否啓用超線程技術。如果啓用此技術那麼,每個物理核心又可分爲兩個邏輯處理器
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
# 查詢系統具有多少個邏輯CPU
cat /proc/cpuinfo | grep "processor" | wc -l
TIPS
參考:https://www.cnblogs.com/wxxjianchi/p/10522049.html[2]
top
作用:
顯示、管理執行中的程序
語法:
Usage:
top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
常用參數:
•d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s•q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限,則 top 將會以最高的優先序執行•c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來•s : 安全模式,將交談式指令取消, 避免潛在的危機•i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程•n : 更新的次數,完成後將會退出 top•b : 批次檔模式,搭配 "n" 參數一起使用,可以用來將 top 的結果輸出到檔案內
使用:
[root@localhost ~]# top
top - 18:57:49 up 48 days, 18:30, 4 users, load average: 0.02, 0.03, 0.05
Tasks: 288 total, 1 running, 279 sleeping, 8 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1009368 total, 74540 free, 519392 used, 415436 buff/cache
KiB Swap: 1048572 total, 570600 free, 477972 used. 249136 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2737 mongod 20 0 1571560 64216 5156 S 1.0 6.4 534:08.38 mongod
1783 root 20 0 148336 2260 1428 R 0.7 0.2 0:00.10 top
14047 root 20 0 0 0 0 S 0.3 0.0 0:21.71 kworker/6:2
1 root 20 0 49860 2212 1300 S 0.0 0.2 28:02.47 systemd
結果解讀:
•第一行:展示了系統運行的時間、有幾個用戶,平均負載等信息。這個結果和uptime一樣•第二行:展示了任務的相關信息,包括總共有多少任務、多少任務在任務在運行;多少在睡眠、多少停止了,多少個殭屍狀態的任務等•第三行:CPU狀態
•us(user):運行用戶進程的CPU時間•sy(system):運行內核進程的CPU時間•ni(niced):運行已調整優先級的用戶進程的CPU時間•id(idle):空閒時間•wa(IO wait):用於等待IO完成的CPU時間•hi:處理硬件中斷的CPU時間•si:處理軟件中斷的CPU時間•st:被hypervisor偷去的CPU時間
•第四行:內存狀態,包括全部可用內存、已使用內存、空閒內存、緩衝內存•第七行開始:各個進程任務的的狀態監控
•PID:進程號
•USER:運行這個進程的用戶是誰•PR:展示進程的實時優先級,取值0-99,越大則會持有更多的CPU時間片。•NI:展示進程的nice值,值越小,優先級越高。意味着越高的優先級•VIRT:virtual memory usage,進程使用的虛擬內存。VIRT = SWAP + RES•RES:resident memory usage,常駐內存,駐留內存是進程使用的非交換物理內存。RES = CODE + DATA•SHR:shared memory,共享內存•S:進程狀態,取值如下:
•D:不可中斷的睡眠態。•R:運行態•S:睡眠態•T:被跟蹤或已停止•Z:殭屍態
•CPU:自從上一次更新時到現在任務所使用的CPU時間百分比•MEM:進程使用的可用物理內存百分比•TIME:進程使用的總CPU時間,精確到0.01秒•COMMAND:進程所使用的命令
常見用法:
# 展示完整命令(COMMAND)
top -c
# 設置更新次數(更新2次後就退出)
top -n 2
# 指定更新週期(每隔3秒刷新一次)
top -d 3
# 查看指定進程的信息
top -p 139
# 顯示指定進程中線程的運行信息
top -Hp 139
參考文章:https://www.cnblogs.com/fuqu/p/10230385.html[3]
進程相關
ps
作用:
展示程序運行情況
語法:
Usage:
ps [options]
Basic options:
-A, -e all processes
-a all with tty, except session leaders
a all with tty, including other users
-d all except session leaders
-N, --deselect negate selection
r only running processes
T all processes on this terminal
x processes without controlling ttys
Selection by list:
-C <command> command name
-G, --Group <GID> real group id or name
-g, --group <group> session or effective group name
-p, p, --pid <PID> process id
--ppid <PID> parent process id
-q, q, --quick-pid <PID>
process id (quick mode)
-s, --sid <session> session id
-t, t, --tty <tty> terminal
-u, U, --user <UID> effective user id or name
-U, --User <UID> real user id or name
The selection options take as their argument either:
a comma-separated list e.g. '-u root,nobody' or
a blank-separated list e.g. '-p 123 4567'
Output formats:
-F extra full
-f full-format, including command lines
f, --forest ascii art process tree
-H show process hierarchy
-j jobs format
j BSD job control format
-l long format
l BSD long format
-M, Z add security data (for SELinux)
-O <format> preloaded with default columns
O <format> as -O, with BSD personality
-o, o, --format <format>
user-defined format
s signal format
u user-oriented format
v virtual memory format
X register format
-y do not show flags, show rss vs. addr (used with -l)
--context display security context (for SELinux)
--headers repeat header lines, one per page
--no-headers do not print header at all
--cols, --columns, --width <num>
set screen width
--rows, --lines <num>
set screen height
Show threads:
H as if they were processes
-L possibly with LWP and NLWP columns
-m, m after processes
-T possibly with SPID column
Miscellaneous options:
-c show scheduling class with -l option
c show true command name
e show the environment after command
k, --sort specify sort order as: [+|-]key[,[+|-]key[,...]]
L show format specifiers
n display numeric uid and wchan
S, --cumulative include some dead child process data
-y do not show flags, show rss (only with -l)
-V, V, --version display version information and exit
-w, w unlimited output width
--help <simple|list|output|threads|misc|all>
display help and exit
常用參數:
•-A或e:列出所有的行程•-w:顯示加寬可以顯示較多的資訊•-f:“全格式”展示,返回的字段較多•a:展示當前運行的所有程序,包括其他用戶的程序•...其他的大家自己看下help吧,沒動力翻譯了……
示例:
# 全格式展示所有進程
ps -ef
# 顯示較詳細的信息,比如進程佔用的CPU、內存等
ps -au
# 顯示所有包含其他使用者的行程
ps -aux
jobs
個人經驗,使用較少
作用:
顯示Linux中的任務列表及任務狀態
•按Ctrl+Z組合鍵將當前進程掛起(調入後臺並停止運行),這種操作在需要暫停當前進程並進行其他操作時特別有用。例如,我們使用windows系統是有時候在本地計算機搜索東西時,發現他搜索的老慢了甚至電腦都有點卡,我們突然不想讓它搜了,就想馬上讓它停止搜索,就是這種感覺。使用jobs命令,可以查看當前終端在後臺的進程任務•任務號是以普通用戶的角度進行的,而進程號則是從系統管理員的角度來看的。一個任務可以對應於一個或者多個進程號
語法:
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
第一種格式列出活動的任務,選項含義如下:
-l 除常規信息外,還列出進程號
-n 僅顯示有關自從上次通知用戶狀態以來,更改狀態的任務信息
-p 只顯示任務的進程組leader的進程id
-r 只顯示正在運行的任務
-s 只顯示已停止的任務
如果指定了jobspec,則只展示jobspec的相關信息
如果指定了-x選項,則job會替換在command或args中找到的所有jobspec與相應的進程組id,並將其傳遞給command
常見用法:
jobs -l
pgrep
作用:根據特定條件查詢進程PID信息
語法:
Usage:
pgrep [options] <pattern>
Options:
-d, --delimiter <string> 指定分隔符
-l, --list-name 列出PID和進程名稱
-a, --list-full 列出PID和完整命令行
-v, --inverse 反向匹配,展示不匹配條件的結果
-w, --lightweight 列出所有TID
-c, --count 展示匹配的進程個數
-f, --full 使用完整進程名進行匹配
-g, --pgroup <PGID,...> 展示匹配的進程組id
-G, --group <GID,...> 展示匹配的GID
-n, --newest 展示最近啓動的進程
-o, --oldest 展示啓動的進程
-P, --parent <PPID,...> 只匹配指定PPID的子進程
-s, --session <SID,...> 匹配SID
-t, --terminal <tty,...> 匹配tty
-u, --euid <ID,...> 匹配有效用戶id
-U, --uid <ID,...> 匹配真實id
-x, --exact 與命令名稱完全匹配
-F, --pidfile <file> 從文件中讀取PID
-L, --logpidfile 如果未鎖定PID文件則失敗
--ns <PID> 匹配和PID屬於指定namespace的進程
--nslist <ns,...> 列出指定的namespace的信息。可選那麼space:ipc, mnt, net, pid, user, uts
-h, --help 幫助
-V, --version 版本
使用:
# 展示命令行爲java的進程的進程號
pgrep java
# 查找命令行爲java的進程,並列出完整命令行
pgrep -a java
# 查看root用戶運行的所有進程
pgrep -U root
# 組合使用
pgrep -a -U root
內存相關
meminfo
作用:查看內存信息
使用:
cat /proc/meminfo
結果解讀:
# 總內存
MemTotal: 1009368 kB
# 空閒內存
MemFree: 77320 kB
# 可用內存
MemAvailable: 268716 kB
# Buffer使用的大小
Buffers: 0 kB
# Cache使用的大小
Cached: 329420 kB
# 被高速緩衝存儲用的交換空間大小
SwapCached: 18440 kB
# 活躍中的高速緩衝存儲器頁面文件大小
Active: 493144 kB
# 不活躍的高速緩衝存儲器頁面文件大小
Inactive: 268208 kB
Active(anon): 245240 kB
Inactive(anon): 237316 kB
Active(file): 247904 kB
Inactive(file): 30892 kB
Unevictable: 0 kB
Mlocked: 0 kB
# 交換區總大小
SwapTotal: 1048572 kB
# 空閒交換區大小
SwapFree: 570568 kB
# 等待被寫回到磁盤的大小
Dirty: 52 kB
# 正在被寫回的大小
Writeback: 0 kB
# 未映射的頁的大小
AnonPages: 421380 kB
# 設備和文件映射的大小
Mapped: 27068 kB
Shmem: 50624 kB
# 內核數據結構緩存的大小,可減少申請和釋放內存帶來的消耗
Slab: 99168 kB
# 可收回slab的大小
SReclaimable: 50444 kB
# 不可收回的slab的大小
SUnreclaim: 48724 kB
KernelStack: 6992 kB
# 管理內存分頁的索引表的大小
PageTables: 7496 kB
# 已經發給NFS服務器,但尚未被確認(committed)寫入到穩定存儲的頁表
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1553256 kB
Committed_AS: 1597364 kB
# 虛擬內存大小
VmallocTotal: 34359738367 kB
# 已使用的虛擬內存大小
VmallocUsed: 53608 kB
# 在vmalloc區域中可用的最大的連續內存塊的大小
VmallocChunk: 34359681024 kB
HardwareCorrupted: 0 kB
AnonHugePages: 229376 kB
# 大頁面的分配
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 63424 kB
DirectMap2M: 985088 kB
TIPS
•在Linux文檔中有更加詳細的描述,詳見:https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst[4]•Buffer與Cache:
•Linux Page cache和Block I/O layer[5]•Linux內存Cache和Buffer理解[6]
free
作用:查看內存運行情況
語法:
Usage:
free [options]
Options:
-b, --bytes 以Byte爲單位顯示內存使用情況
-k, --kilo 以KB爲單位顯示內存使用情況
-m, --mega 以MB爲單位顯示內存使用情況
-g, --giga 以GB爲單位顯示內存使用情況
--tera 以TB爲單位顯示內存使用情況
-h, --human 自動以合適的單位顯示內存使用情況
--si 以1000爲底而非1024
-l, --lohi 展示最低/最高內存的統計信息
-t, --total 顯示內存總和(RAM + swap)
-s N, --seconds N 每隔N秒刷新
-c N, --count N 打印N次後退出
-w, --wide 寬屏模式打印,將buff和cache分開顯示
--help 幫助
-V, --version 展示版本
For more details see free(1).
示例:
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 1009368 519640 77092 50732 412636 250392
Swap: 1048572 477968 570604
結果解讀:
•total:物理內存總量•used:已使用的內存,used = total - free - buffers - cache•free:空閒的內存數•shared:多個進程共享的內存•buff/cache:代表的是 buff(對應/proc/meminfo裏的Buffers)和cache的內存(對應/proc/meminfo 裏的Cached and Slab)。•available:在CentOS 7中,available是真正可用內存。available包括了buff/cache中一些可以被釋放的內存,當物理內存不夠用的時候,內核會把非活躍的數據清空。•Mem:
TIPS
不同版本的CentOS,free結果不同。可參考:https://www.cnblogs.com/operationhome/p/10362776.html[7]
vmstat
作用:全稱Virtual Meomory Statistics(虛擬內存統計),可對操作系統的虛擬內存、進程、IO讀寫、CPU活動等進行監視
語法:
Usage:
vmstat [options] [delay [count]]
Options:
-a, --active 展示active/inactive的內存
-f, --forks 顯示此係統啓動以來的forks的總數,包括fork、vfork和clone system calls
-m, --slabs 展示slabinfo信息
-n, --one-header 只展示1次header,而非週期展示
-s, --stats 顯示各種事件計數器和內存統計(只顯示1次)
-d, --disk 展示磁盤信息
-D, --disk-sum 顯示磁盤統計數據
-p, --partition <dev> 展示分區詳情
-S, --unit <char> 控制輸出的單位,k(1000字節) K(1024字節) 或 M(1048576字節),默認爲K
-w, --wide 寬屏輸出模式
-t, --timestamp 打印時間戳
-h, --help 幫助
-V, --version 版本
For more details see vmstat(8).
使用:
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 478632 93272 0 390596 0 0 0 1 0 0 0 0 100 0 0
結果解讀:
•procs
•r:可運行的進程數(runnable processes),包括了running的進程和等待運行的進程(running or waiting for run time)。如果此值過大,則意味着CPU非常繁忙。如果此參數長期 >= 邏輯CPU個數,則表示CPU可能存在瓶頸,考慮增加CPU•處在非終端睡眠(uninterruptible sleep)狀態的進程數。此值表示被阻塞的進程數。主要是指被資源阻塞的進程對列數(比如IO資源、頁面調度等)
•memory
•swpd:已使用的虛擬內存大小•free:空閒內存大小•buff:用做buffer的內存大小•cache:用來做cache的內存大小•inact:inactive的內存總量(-a)•active:active的內存總量(-a)
•swap
•si:每秒從磁盤交換到內存的大小,單位:KB/秒•so:每秒從內存交換到磁盤的大小,單位:KB/秒•當內存夠用時,這兩個值都是0。如果這兩個值長期大於0,則會影響系統性能,磁盤IO和CPU資源都會被消耗。當看到空閒內存(free)很少的或接近於0時,就認爲內存不夠用了,是不正確的。不能光看這一點,還要結合si和so。如果free很少,但是si和so也很少(大多時候是0),可以不用擔心。此時,系統性能不會受到影響的。
•io
•bi:每秒從塊存儲設備接收到的塊數•bo:每秒發送到塊存儲設備的塊數•隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大
•system
•in:每秒中斷數,包括時鐘中斷•cs:每秒上下文切換數•這兩個值越小越好
•cpu
•us:用戶CPU時間(非內核進程佔用時間)百分比•sy:系統使用的CPU時間百分比•id:空閒CPU時間百分比•wa:等待IO的CPU時間百分比•st:被虛擬機偷去的CPU時間百分比
常見用法:
# 每隔一秒展示一次
vmstat 1
vmstat -a
磁盤相關
df
作用:
展示磁盤使用情況
語法:
Usage: df [OPTION]... [FILE]...
Mandatory arguments to long options are mandatory for short options too.
-a, --all 包含具有0Blocks的文件系統
-B, --block-size=SIZE 指定打印單位,可用單位:K, M, G, T, P, E, Z, Y (以1024爲底) ;也可用KB, MB, ... (以1000爲底)。例如-BM表示以MB爲單位打印
--direct 顯示文件的統計信息而不是掛載點
--total 在末尾產生一個彙總行
-h, --human-readable 自動以合適的單位顯示磁盤使用情況
-H, --si 以1000爲底而非1024
-i, --inodes 列出inode的信息,而非block的使用信息
-k 相當於--block-size=1K
-l, --local 將列表限制爲本地文件系統
--no-sync 在獲取使用情況信息之前不調用同步(默認)
--output[=FIELD_LIST] 使用FIELD_LIST定義的打印格式,如果省略FIELD_LIST則打印所有字段。FIELD_LIST是一個以逗號分隔的字段列表,可選的字段有:'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file','target'
-P, --portability 使用POSIX輸出格式
--sync 在獲取使用情況信息之前調用同步
-t, --type=TYPE 將列表限制爲TYPE類型的文件系統。
-T, --print-type 在結果中,多出來一個Type列,其中打印文件系統類型
-x, --exclude-type=TYPE 將列表限制爲非TYPE類型的文件系統
-v (忽略)
--help 幫助
--version 顯示版本
使用:
df
結果解讀:
•Filesystem:文件系統的名稱•1K-blocks:佔用多少個1K-block,相當於展示佔用了多少Kb的磁盤•Used:使用了多少磁盤•Avail:可用磁盤•Use:使用的百分比•Mounted on:掛載點
常見用法:
# 自動以合適的單位顯示磁盤使用情況
df -h
# 查看gc.log這個文件所屬的文件系統信息
df gc.log
# 指定輸出格式
df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target
拓展閱讀:
Linux 深入理解inode/block/superblock[8]
du
作用:
顯示目錄或文件的大小
語法:
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
Mandatory arguments to long options are mandatory for short options too.
-0, --null 以0字節而不是換行符結束每條輸出(即:直接輸出下一行,不換行)
-a, --all 顯示所有文件大小,不限於目錄
--apparent-size 打印“apparent size”,而非磁盤佔用情況
-B, --block-size=SIZE 指定打印單位,可用單位:K, M, G, T, P, E, Z, Y (以1024爲底) ;也可用KB, MB, ... (以1000爲底)。例如-BM表示以MB爲單位打印
-b, --bytes 相當於'--apparent-size --block-size = 1'
-c, --total 在末尾產生一個彙總行
-D, --dereference-args 取消引用命令行上列出的符號鏈接
-d, --max-depth=N 指定要展示的最大深度,--max-depth=0相當於--summarize
--files0-from=F 總結文件F中指定的NUL終止文件名的磁盤使用情況;如果F爲-,則從標準輸入中讀取名稱
-H 等價於--dereference-args (-D)
-h, --human-readable 自動以合適的單位顯示磁盤使用情況
--inodes 列出inode的信息,而非block的使用信息
-k 相當於--block-size=1K
-L, --dereference 取消引用所有符號鏈接
-l, --count-links 如果是硬鏈接,則計數很多次
-m 相當於--block-size=1M
-P, --no-dereference 不遵循任何符號鏈接(這是默認設置)
-S, --separate-dirs 不統計子目錄的大小
--si 類似於-h,但以1000爲底而非1024
-s, --summarize 只展示每個參數的統計信息
-t, --threshold=SIZE 如果SIZE爲正,則排除小於SIZE的條目;如果爲負,則排除大於SIZE的條目
--time 展示文件的修改時間
--time=WORD 在time字段展示WORD字段而非修改時間,WORD取值:atime, access, use, ctime or status
--time-style=STYLE 指定時間的顯示格式,取值:full-iso, long-iso, iso, 或+FORMAT,FORMAT的解釋類似於“date”
-X, --exclude-from=FILE 排除匹配FILE中的正則的文件
--exclude=PATTERN 排除匹配正則的文件
-x, --one-file-system 跳過不同文件系統上的目錄
--help 幫助
--version 版本
常見用法:
# 當前目錄及子目錄的大小,以及大小彙總
du
# 展示1.txt文件的大小
du 1.txt
# 自動以合適的單位顯示目錄的大小
du -h some_dir
# 排除 < 1000m的文件,展示當前目錄及子目錄的大小,以及大小彙總
du -t 1000m
# 以合適的單位展示指定目錄的大小
du -sh some_dir
網絡相關
netstat
作用:展示網絡狀態
語法:
usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route 展示路由表
-I, --interfaces=<Iface> 展示網卡Iface的信息
-i, --interfaces 展示網卡信息列表
-g, --groups 顯示多播組的成員信息
-s, --statistics 展示網卡網絡統計信息
-M, --masquerade 顯示僞裝的網絡連接(masqueraded connections)
-v, --verbose 展示更多詳情信息
-W, --wide 不截斷IP地址
-n, --numeric 不解析名稱
--numeric-hosts 不解析主機名
--numeric-ports 不解析端口
--numeric-users 不解析
-N, --symbolic 解析硬件名稱
-e, --extend 展示更多信息
-p, --programs 爲socket展示PID或程序名稱
-o, --timers 在結果中顯示Timer列
-c, --continuous 持續列出結果
-l, --listening 展示監聽的服務器socket
-a, --all 展示所有的socket(默認connected,指定-a則會展示監聽/爲監聽的socket)
-F, --fib 展示轉發信息庫(Forwarding Information Base)(default)
-C, --cache 展示路由緩存而非FIB
-Z, --context 爲socket展示SELinux安全上下文
<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
使用:
netstat
結果解讀:
使用不同參數,展示的結果不用,詳情大家看下 man netstat裏面的結果吧
常見用法:
# 查看全部的socket
netstat -a
# 查看使用tcp協議的網絡信息
netstat -t
# 查看使用udp協議的網絡信息
netstat -u
# 展示所有所有狀態的tcp監聽,並打印程序名稱
netstat -antp
route
作用:顯示和操作路由表
語法:
Usage: route [-nNvee] [-FC] [<AF>] 列出內核路由表
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.
route {-h|--help} [<AF>] 修改AF的路由表
route {-V|--version} 展示版本
-v, --verbose 展示更多詳情信息
-n, --numeric 不解析名稱
-e, --extend 展示更多信息
-F, --fib 展示轉發信息庫(Forwarding Information Base)(default)
-C, --cache 展示路由緩存而非FIB
<AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
使用:詳見 https://blog.csdn.net/u011857683/article/details/83795435[9] 裏面有非常詳細的描述
lsof
作用:列出當前系統當前打開的文件
語法:
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
-?|-h list help -a AND selections (OR) -b avoid kernel blocks
-c c cmd c ^c /c/[bix] +c w COMMAND width (9) +d s dir s files
-d s select by FD set +D D dir D tree *SLOW?* +|-e s exempt s *RISKY*
-i select IPv[46] files -K list tasKs (threads) -l list UID numbers
-n no host names -N select NFS files -o list file offset
-O no overhead *RISKY* -P no port names -R list paRent PID
-s list file size -t terse listing -T disable TCP/TPI info
-U select Unix socket -v list version info -V verbose search
+|-w Warnings (+) -X skip TCP&UDP* files -Z Z context [Z]
-- end option scan
+f|-f +filesystem or -file names +|-f[gG] flaGs
-F [f] select fields; -F? for help
+|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
+m [m] use|create mount supplement
+|-M portMap registration (-) -o o o 0t offset digits (8)
-p s exclude(^)|select PIDs -S [t] t second stat timeout (15)
-T qs TCP/TPI Q,St (s) info
-g [s] exclude(^)|select and print process group IDs
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
+|-r [t[m<fmt>]] repeat every t seconds (15); + until no files, - forever.
An optional suffix to t is m<fmt>; m must separate t from <fmt> and
<fmt> is an strftime(3) format for the marker line.
-s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).
-u s exclude(^)|select login|UID set s
-x [fl] cross over +d|+D File systems or symbolic Links
names select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
常見用法:
# 列出所有打開的文件
lsof
# 查看哪些進程正在使用1.txt
lsof 1.txt
# 遞歸查看test_dir目錄及其文件的信息
lsof +D test_dir
# 查看java進程打開的文件
lsof -c mysql
# 查看java或mysql打開的文件
lsof -c java -c mysql
# 列出所有的網絡連接
lsof -i
# 列出所有tcp連接
lsof -i tcp
# 列出所有udp連接
lsof -i udp
# 列出誰在使用8080端口
lsof -i:8080
# 列出誰在用tcp協議使用8080端口
lsof -i tcp:8080
References
[1]
: https://www.annhe.net/article-4458.html[2]
: https://www.cnblogs.com/wxxjianchi/p/10522049.html[3]
: https://www.cnblogs.com/fuqu/p/10230385.html[4]
: https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst[5]
Linux Page cache和Block I/O layer: https://blog.csdn.net/gx19862005/article/details/57077143[6]
Linux內存Cache和Buffer理解: https://blog.csdn.net/lqglqglqg/article/details/82313966[7]
: https://www.cnblogs.com/operationhome/p/10362776.html[8]
Linux 深入理解inode/block/superblock: https://blog.csdn.net/Ohmyberry/article/details/80427492[9]
: https://blog.csdn.net/u011857683/article/details/83795435
乾貨分享
最近將個人學習筆記整理成冊,使用PDF分享。關注我,回覆如下代碼,即可獲得百度盤地址,無套路領取!
•001:《Java併發與高併發解決方案》學習筆記;•002:《深入JVM內核——原理、診斷與優化》學習筆記;•003:《Java面試寶典》•004:《Docker開源書》•005:《Kubernetes開源書》•006:《DDD速成(領域驅動設計速成)》•007:全部•008:加技術羣討論
近期熱文
•LinkedBlockingQueue vs ConcurrentLinkedQueue•解讀Java 8 中爲併發而生的 ConcurrentHashMap•Redis性能監控指標彙總•最全的DevOps工具集合,再也不怕選型了!•微服務架構下,解決數據庫跨庫查詢的一些思路•聊聊大廠面試官必問的 MySQL 鎖機制
關注我
喜歡就點個"在看"唄^_^
本文分享自微信公衆號 - IT牧場(itmuch_com)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。