Linux-命令-系統管理

一、查看進程

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命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章