文章目錄
一、查看進程
1、靜態查看ps
- ps用於顯示當前進程的狀態,有三種風格
- UNIX風格,選項前加 - ;BSD風格,選項前不加東西;GNU風格,選項前加 –
- ps aux
- a:顯示所有與終端相關進程
- x:顯示所有與終端無關進程
- u:以用戶爲中心顯示進程狀態信息
dream:~ dream$ ps axu
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
...
# PID:進程號
# VSZ(virtual size):該進程佔用虛擬內存大小,單位爲KB
# RSS(Resident size):該進程佔用實際物理內存大小,單位爲KB
# TTY/TT:進程所屬的終端,其中tty1~tty7代表本地控制檯終端(tty7爲圖形終端),pst/0~255爲遠程連接終端
# STAT:進程狀態
# D:不可中斷睡眠(不可喚醒)
# R:正在運行
# S:可中斷睡眠(可喚醒)
# T:停止狀態
# X:死掉的進程
# Z:殭屍進程,進程已中止,但是部分程序還在內存中
# <:高優先級進程
# N:低優先級進程
# +:位於後臺
# s:包含子進程(即爲進程領導者)
# L:被鎖入內存
# l:多線程進程
# TIME:該進程佔用CPU的運算時間
- ps -le
- -l:顯示詳細信息
- e:顯示所有進程
- h:顯示更加人性化
dream:~ dream$ ps -le
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
...
# UID:該進程的用戶的ID
# PPID:父進程的ID
# F:進程標誌,用於說明進程的權限
# 1:進程可被複制,但不能執行
# 4:進程使用超級權限
# PRI:進程優先級,數值越小,優先級越高
# NI:進程優先級,數值越小,優先級越高
# SZ:進程佔用內存大小
# WCHAN:查看該進程是否正在運行,“-”表示進程正在運行
# S:同STAT
# ADDR:進程在內存的位置
- ps -o filed,filed,…
- 自定義ps顯示的內容
dream:~ dream$ ps a -o pid,ppid,pri,ni,tty
PID PPID PRI NI TTY
1105 1104 31 0 ttys000
1106 1105 31 0 ttys000
4082 1104 31 0 ttys001
4083 4082 31 0 ttys001
4282 4083 31 0 ttys001
# 可選字段有爲上面有的字段
2、動態監聽進程top
- top是一種動態的、交互式的進程監聽命令
- top的常用選項如下
- -p <pid>:查看指定進程的狀態
- -u <username>:查看指定用戶的進程狀態
- -b:使用批處理模式輸出,和-n一起使用,重定向到文件中
- -n <次數>:指定top命令執行的次數
- top交互模式的選項
- s:改變刷新時間的間隔
- k:按照PID給予某個進程一個信號,信號9是強制中止
- r:按照PID給某個進程重設NI值(優先級)
- P:按照CPU的使用率排序
- M:按照內存的使用率排序
- N:按照PID排序
- T:按照CPU的累積運算時間排序
- 1:顯示多核信息
- e:改變內存單位
- q:退出
top - 15:16:17 up 9:34, 3 users, load average: 0.01, 0.17, 0.52
# up表示已運行時間,load average表示平均負載(等待運行的隊列長度的負載)
Tasks: 188 total, 6 running, 181 sleeping, 0 stopped, 1 zombie
%Cpu(s): 3.6 us, 1.2 sy, 0.0 ni, 95.1 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
# us表示用戶模式佔用的CPU
# sy表示系統模式佔用的CPU
# ni表示調整過優先級的進程佔用的CPU
# id表示空閒CPU
# wa表示等待輸入輸出的進程佔用CPU
# hi表示硬中斷請求佔用CPU
# si表示軟中斷請求佔用CPU
# st表示虛擬時間百分比,當有虛擬機時,虛擬CPU等待實際CPU的時間百分比
KiB Mem : 999696 total, 200288 free, 467776 used, 331632 buff/cache
# 內存空間的佔用情況
KiB Swap: 2097148 total, 1214560 free, 882588 used. 312492 avail Mem
# 交換分區的信息
- buff(緩衝)和cache(緩存)的區別
- buff:向硬盤寫入數據時,先把數據放入緩衝區,再一起寫入硬盤,即集中寫操作
- cache:內存的緩存區,裏面存放了最常用的數據,即用於加快讀操作
將top命令的結果重定向到日誌文件中
[dream@localhost ~]$ top -b -n 2 > /tmp/111.log
3、查看進程樹命令pstree
- 選項:
- -p:顯示PID
- -u:顯示進程所屬用戶
二、進程管理
- 可以通過進程的信號(數字)來管理進程,即給進程一個信號,讓進程按照該信號運行
- 常用的信號:使用
kill -l
可以查看- SIGHUP(1):立即關閉進程,然後讀取配置文件,重新啓動該進程
- SIGKILL(9):強制中止進程
- SIGTERM(15):正常中止進程,當該信號實效時才使用SIGKILL強制中止進程
1、kill命令
- kill命令只能識別PID
kill [信號] <PID>
# 默認信號爲15,即-15
通常先使用ps aux | grep <進程名> | grep -v grep
查找到進程的PID,再使用kill管理進程
dream:~ dream$ ps a | grep vim | grep -v grep
6727 s001 S+ 0:00.29 vim /tmp/31214
6719 s002 S+ 0:00.29 vim /tmp/1231
dream:~ dream$ kill -15 6727
dream:~ dream$ kill -15 6719
2、killall命令
- killall命令通過進程名來殺死一類進程
killall [選項] [信號] <進程名>
# -i:交互式,詢問是否要殺死進程
# -I:忽略大小寫
[dream@localhost ~]$ ps a
PID TTY STAT TIME COMMAND
1301 tty1 Ssl+ 0:04 /usr/bin/X :0 -background none -noreset -audit 4 -ve
2997 pts/0 Ss 0:00 bash
3051 pts/1 Ss 0:00 bash
3241 pts/2 Ss 0:00 bash
3286 pts/1 S+ 0:00 top
3287 pts/2 S+ 0:00 top
3288 pts/0 R+ 0:00 ps a
[dream@localhost ~]$ killall -i top
Kill top(3286) ? (y/N) y
Kill top(3287) ? (y/N) y
3、pkill命令
- pkill命令同樣通過進程名管理進程,但是pkill命令可以指定終端管理進程
pkill [選項] [信號] <進程名>
# -t 終端號:選擇終端
[dream@localhost ~]$ ps a
PID TTY STAT TIME COMMAND
1301 tty1 Ssl+ 0:05 /usr/bin/X :0 -background none -noreset -audit 4 -ve
2997 pts/0 Ss 0:00 bash
3051 pts/1 Ss 0:00 bash
3241 pts/2 Ss 0:00 bash
3330 pts/2 S+ 0:00 top
3331 pts/1 S+ 0:00 top
3332 pts/0 R+ 0:00 ps a
[dream@localhost ~]$ pkill -t pts/1 top
三、進程優先級管理
- 進程的優先級有PRI(priority)和NI(nice)決定,其中PRI有內核決定,用戶只能修改NI
- 進程優先級的計算公式爲
PRI+NI
,該值越小,該進程優先級越高- NI的範圍是-20~19
- 普通用戶調整NI的值的範圍是0~19,而且只能調整自己的進程
- root用戶可以調整NI爲負值,且可以調整任意用戶的NI
1、nice命令
- 給新執行的命令賦予NI值
- nice命令不能修改已經存在的命令的NI值
nice [選項] <命令>
# -n NI值:設定該命令的NI值
dream:~ dream$ nice -n 5 top
dream:~ dream$ ps a -o pid,comm,ni | grep top | grep -v grep
6988 top 5
2、renice命令
- 修改已經存在的進程的NI值
renice [NI值] <PID>
dream:~ dream$ ps a -o pid,comm,ni | grep top | grep -v grep
6988 top 5
dream:~ dream$ sudo renice 10 6988
Password:
dream:~ dream$ ps a -o pid,comm,ni | grep top | grep -v grep
6988 top 10
三、工作管理
- 工作管理就是指在一個終端中同時執行不同的操作
- 包括把命令放入後臺,把命令恢復到前臺,以及讓命令恢復到後臺執行
1、把命令放入後臺
-
與前臺有交互的命令放入後臺不能執行,只能暫停
-
把命令放入後臺執行有兩個方法
<命令> &
- 在命令執行過程中按下
Ctrl+z
,命令放入後臺暫停
dream:~ dream$ find ~/Desktop/StudyData -name Linux &
[1] 7318
dream:~ dream$ /Users/dream/Desktop/StudyData/Linux
[1]+ Done find ~/Desktop/StudyData -name Linux
# [1]是後臺命令的工作號,[1]+ Done表示命令完成,+表示這個命令是最後一個放入後臺的
2、後臺命令管理
(1)查看後臺的命令jobs
jobs -l
:用於查看當前終端後臺的命令
dream:~ dream$ find / -name ii.log &
[1] 7346
dream:~ dream$ top &
[2] 7348
dream:~ dream$ jobs -l
[1]- 7346 Running find / -name ii.log &
[2]+ 7348 Stopped (tty output): 22top
# +表示最後一個放入後臺的,-表示倒數第二個放入後臺的
(2)將後臺暫停的工作恢復到前臺執行命令fg
fg [%]<工作號>
:用於將後臺的命令恢復到前臺
dream:~ dream$ jobs -l
[2]+ 7348 Stopped (tty output): 22top
dream:~ dream$ fg %2
top
(3)將後臺暫停的工作恢復到後臺執行命令bg
bg [%]<工作號>
:用於在後臺恢復後臺命令
dream:~ dream$ find / -name install.log
^Z # Ctrl+z用於將命令放入後臺暫停
[2]+ Stopped find / -name install.log
dream:~ dream$ jobs -l
[1]- 7411 Stopped (tty output): 22top
[2]+ 7416 Suspended: 18 find / -name install.log
dream:~ dream$ bg %2
[2]+ find / -name install.log & # 執行bg命令後,命令在後臺恢復執行
(4)後臺命令脫離登入終端運行
- 有三種方法可以讓命令脫離登入終端執行
- 將命令加入
/etc/rc.local
文件,讓命令在系統啓動時執行 - 使用系統定時任務,在指定時間執行命令
- 使用
nohup
命令
- 將命令加入
[dream@localhost ~]$ vim /tmp/nohup_test.sh
# 腳本內容如下
# for ((i=0; i<=1000; i=i+1))
# do
# echo ll >> /tmp/testForNohup.log
# sleep 5
# done
[dream@localhost ~]$ chmod 755 /tmp/nohup_test.sh
[dream@localhost ~]$ nohup /tmp/nohup_test.sh & # 將命令放入後臺執行
# 退出當前終端,重新登入終端查看進程
[dream@localhost ~]$ ps a
PID TTY STAT TIME COMMAND
1301 tty1 Rsl+ 0:09 /usr/bin/X :0 -background none -noreset -audit 4 -ve
3051 pts/1 Ss+ 0:00 bash
3241 pts/2 Ss 0:00 bash
4195 pts/2 R+ 0:00 ps a
四、系統資源查看
1、監控系統資源命令vmstat
- vmstat是Linux的一個綜合性能分析工具
vmstat [刷新時間間隔 刷新次數]
[dream@localhost ~]$ vmstat 3 2 # 每隔三秒刷新一次,共刷新2次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 321280 72032 0 343300 6 32 667 191 99 163 1 1 97 0 0
0 0 321280 73620 0 343072 0 0 0 0 104 225 4 2 95 0 0
# r:等待運行的進程數
# b:不可被喚醒的進程數
# swpd:虛擬內存的使用情況
# si:磁盤交換到內存的數據量(KB)
# so:內存交換到磁盤的數據量(KB)
# bi:從塊設備讀入的數據量(單位爲塊)
# bo:寫到塊設備的數據量(單位爲塊)
# in:每秒被中斷的進程數
# cs:每秒切換事件的次數
# us:非內核進程消耗的CPU運算資源
# sy:內核進程消耗的CPU運算進程
# id:空閒CPU的百分比
# wa:等待I/O所消耗的CPU百分比
# st:被虛擬機盜用的CPU百分比
2、查看開機時的內核檢測信息命令dmesg
- 使用dmesg命令可以查看硬件信息
[dream@localhost ~]$ sudo dmesg | grep CPU # 查看CPU信息
[sudo] password for dream:
[ 0.000000] smpboot: Allowing 128 CPUs, 127 hotplug CPUs
[ 0.000000] setup_percpu: NR_CPUS:5120 nr_cpumask_bits:128 nr_cpu_ids:128 nr_node_ids:1
[ 0.000000] PERCPU: Embedded 38 pages/cpu @ffff9b2abc600000 s118784 r8192 d28672 u262144
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=128, Nodes=1
[ 0.000000] RCU restricting CPUs from NR_CPUS=5120 to nr_cpu_ids=128.
[ 0.298297] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
[ 0.387052] smpboot: CPU0: Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz (fam: 06, model: 3d, stepping: 04)
[ 0.387116] core: CPUID marked event: 'cpu cycles' unavailable
[ 0.387117] core: CPUID marked event: 'instructions' unavailable
[ 0.387118] core: CPUID marked event: 'bus cycles' unavailable
[ 0.387119] core: CPUID marked event: 'cache references' unavailable
[ 0.387120] core: CPUID marked event: 'cache misses' unavailable
[ 0.387121] core: CPUID marked event: 'branch instructions' unavailable
[ 0.387121] core: CPUID marked event: 'branch misses' unavailable
[ 0.417692] Brought up 1 CPUs
[dream@localhost ~]$ sudo dmesg | grep ens33 # 查看網卡信息
[ 15.029983] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready
[ 15.056867] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready
[ 7478.111878] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[ 7478.118036] IPv6: ADDRCONF(NETDEV_CHANGE): ens33: link becomes ready
[ 8863.588022] e1000: ens33 NIC Link is Down
[ 9963.019581] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
3、查看內存使用狀況命令free
- free用於查看系統內存和swap交換分區的信息
free [-b|k|m|g]
# b/k/m/g用於選擇單位(B/KB/MB/GB)
[dream@localhost ~]$ free -m
total used free shared buff/cache available
Mem: 972 572 71 5 328 178
Swap: 2047 314 1733
# shared爲多個進程共享的內存大小
4、查看CPU的信息/proc/cpuinfo
dream@localhost ~]$ cat /proc/cpuinfo
processor : 0
# 邏輯CPU編號
vendor_id : GenuineIntel
# CPU製造廠商
cpu family : 6
# 產品系列代號
model : 61
# CPU系列代號
model name : Intel(R) Core(TM) i5-5350U CPU @ 1.80GHz
stepping : 4
# 更新版本
microcode : 0x2d
cpu MHz : 1799.886
cache size : 3072 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt arat spec_ctrl intel_stibp flush_l1d arch_capabilities
bogomips : 3599.77
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical, 48 bits virtual
power management:
5、查看本機登入用戶信息的命令w和who
[dream@localhost ~]$ w
00:37:38 up 4:04, 2 users, load average: 0.00, 0.06, 0.08
# up顯示的是開機到現在的時長
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
dream :0 :0 14:59 ?xdm? 2:24 0.32s /usr/libexec/gnome-session-binary --sess
dream pts/0 :0 14:59 2.00s 0.18s 0.04s w
# FROM:當前用戶登入的IP地址
# LOGIN@:登入時間
# IDLE:用戶閒置時間
# JCPU:和當前終端連接的所有進程佔用的CPU運算時間
# PCPU:當前進程所佔用的CPU運算時間
# WHAT:當前正在運行的命令
[dream@localhost ~]$ who
dream :0 2020-01-22 14:59 (:0)
dream pts/0 2020-01-22 14:59 (:0)
6、查看退出用戶信息的命令last和lastlog
dream:etc dream$ last | grep "Jan 20"
dream ttys000 Mon Jan 20 20:45 - 20:45 (00:00)
dream console Mon Jan 20 20:30 - 00:23 (5+03:52)
reboot ~ Mon Jan 20 20:30
shutdown ~ Mon Jan 20 02:03
shutdown ~ Sun Jan 20 19:12
dream console Sun Jan 20 08:28 - 19:12 (10:43)
reboot ~ Sun Jan 20 08:28
7、顯示系統啓動時間及平均負載的命令uptime
dream:etc dream$ uptime
22:35 up 3 days, 10:27, 2 users, load averages: 1.24 1.30 1.33
8、查看與內核和系統相關信息命令uname
dream:etc dream$ uname -a # 查看所有信息
Darwin dream 17.7.0 Darwin Kernel Version 17.7.0: Sun Jun 2 20:31:42 PDT 2019; root:xnu-4570.71.46~1/RELEASE_X86_64 x86_64
- -r:查看內核版本
- -s:查看內核名稱
9、列出進程調用或者打開的文件的信息的命令lsof
- 通過lsof命令可查看進程調用的文件
- lsof [選項]
- -c <字符串>:只列出以字符串開頭的進程打開的文件
- +d <目錄>:列出該目錄下被進程調用的文件
- -u <用戶>:列出該用戶的進程打開的文件
- -p <PID>:列出該進程打開的文件
dream:etc dream$ which ls
/bin/ls
dream:etc dream$ file /bin/ls
/bin/ls: Mach-O 64-bit executable x86_64
dream:etc dream$ lsof +d /bin
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sh 419 dream txt REG 1,4 618512 4296699130 /bin/sh
bash 7058 dream txt REG 1,4 618448 4296699052 /bin/bash
dream:etc dream$ lsof /bin/sh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sh 419 dream txt REG 1,4 618512 4296699130 /bin/sh
dream:etc dream$ ps a
PID TT STAT TIME COMMAND
7057 s001 Ss 0:00.06 login -pf dream
7058 s001 S 0:00.45 -bash
10810 s001 R+ 0:00.01 ps a
dream:etc dream$ lsof -p 419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sh 419 dream cwd DIR 1,4 1632 4308040487 /usr/local/var/mysql
sh 419 dream txt REG 1,4 618512 4296699130 /bin/sh
sh 419 dream txt REG 1,4 841456 4306746640 /usr/lib/dyld
sh 419 dream txt REG 1,4 1172037632 4307001721 /private/var/db/dyld/dyld_shared_cache_x86_64h
sh 419 dream 0r CHR 3,2 0t0 311 /dev/null
sh 419 dream 1u CHR 3,2 0t187 311 /dev/null
sh 419 dream 2u CHR 3,2 0t0 311 /dev/null
sh 419 dream 255r REG 1,4 28590 4308040463 /usr/local/Cellar/[email protected]/5.7.28/bin/mysqld_safe
五、系統定時任務
1、一次性執行定時任務命令at
- at命令的訪問控制(即使用權限)由at.allow和at.deny文件控制
- 當at.allow和at.deny文件都不存在時,只有root用戶有權使用at命令
- 當只有at.allow文件時,只有寫入該文件的用戶(root除外)有權使用at命令
- 當只有at.deny文件時,除了寫入該文件的用戶,其他用戶都有權使用at命令
- 當兩個文件都存在時,at.allow的優先級更高
- at命令需要啓動atd服務
at [選項] <時間>
選項:
-m:at工作完成後,用e-買了通知用戶
-c <工作號>:查詢該工作號的內容
時間:
HH:MM[am|pm] [YYYY-MM-DD] # 在指定時間執行
HH:MM[am|pm] [YYYY-MM-DD] +<數字> [minutes|hours|days|weeks] # 在指定時間之後多久執行
[dream@localhost ~]$ service atd start
Redirecting to /bin/systemctl start atd.service
[dream@localhost ~]$ cat /etc/at.deny
[dream@localhost ~]$ cat /etc/at.allow
cat: /etc/at.allow: No such file or directory
[dream@localhost ~]$ su -
Password:
Last login: Wed Aug 28 21:26:58 CST 2019 on pts/0
[root@localhost ~]# echo dream >> /etc/at.allow
[root@localhost ~]# exit
logout
[dream@localhost ~]$ cat /etc/at.allow
dream
[dream@localhost ~]$ vim /tmp/test.sh
[dream@localhost ~]$ chmod 755 /tmp/test.
test.log test.sh
[dream@localhost ~]$ chmod 755 /tmp/test.sh
[dream@localhost ~]$ at now +1 minute
at> /tmp/test.sh
at> <EOT> # 按下Ctrl+D保存
job 1 at Thu Jan 30 20:39:00 2020
[dream@localhost mail]$ cat /var/spool/mail/dream
From [email protected] Thu Jan 30 20:39:00 2020
Return-Path: <[email protected]>
X-Original-To: dream
Delivered-To: [email protected]
Received: by localhost.localdomain (Postfix, from userid 1000)
id B6A2C156C58; Thu, 30 Jan 2020 20:39:00 +0800 (CST)
Subject: Output from your job 1
To: [email protected]
Message-Id: <[email protected]>
Date: Thu, 30 Jan 2020 20:39:00 +0800 (CST)
From: [email protected] (dream)
hello, world!!
- 相關文件:使用Ctrl+D保存at命令後,任務就被存放在/var/spool/at下
- 其他at管理命令
- atq:詢問當前服務器上的at任務
- atrm <工作號>:刪除指定的工作
- at的任務中最好使用絕對路徑
2、循環執行定時任務命令crontab
-
crontab需要crond服務(默認自啓動)支持
-
crontab命令的訪問控制和at命令類似,通過cron.allow和cron.deny文件控制,規則同at命令