
- Linux管理員教程
- 首頁
- CentOS概述
- 基本的CentOS Linux命令
- 檔案/資料夾管理
- 使用者管理
- 配額管理
- Systemd服務的啟動和停止
- 使用systemctl進行資源管理
- 使用cgroups進行資源管理
- 程序管理
- 防火牆設定
- 在CentOS Linux中配置PHP
- 在CentOS Linux中設定Python
- 在CentOS Linux中配置Ruby
- 為CentOS Linux設定Perl
- 安裝和配置Open LDAP
- 建立SSL證書
- 安裝Apache Web伺服器CentOS 7
- 在CentOS 7上設定MySQL
- 設定Postfix MTA和IMAP/POP3
- 安裝匿名FTP
- 遠端管理
- CentOS中的流量監控
- 日誌管理
- 備份和恢復
- 系統更新
- Shell指令碼
- 軟體包管理
- 卷管理
- Linux管理員有用資源
- Linux管理員 - 快速指南
- Linux管理員 - 有用資源
- Linux管理員 - 討論
Linux管理員 - 程序管理
以下是程序管理中常用的命令:bg、fg、nohup、ps、pstree、top、kill、killall、free、uptime、nice。
處理程序
快速提示 - Linux中的程序PID
在Linux中,每個執行的程序都會獲得一個PID(程序ID號)。CentOS就是透過這個PID來識別特定程序的。正如我們所討論的,systemd是第一個啟動的程序,在CentOS中其PID為1。
pgrep用於獲取給定程序名稱的Linux PID。
[root@CentOS]# pgrep systemd 1 [root@CentOS]#
如上所示,pgrep命令返回systemd的當前PID。
CentOS中基本的CentOS程序和作業管理
在Linux中處理程序時,瞭解如何在命令列執行基本的後臺和前臺程序非常重要。
fg - 將程序置於前臺
bg - 將程序置於後臺
jobs - 附加到shell的當前程序列表
ctrl+z - 使用Control + z鍵組合來掛起當前程序
& - 在後臺啟動程序
讓我們開始使用shell命令sleep。sleep顧名思義,它會休眠一段時間 - sleep。
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 & [1] 12454 [root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs [1]- Running sleep 10 & [2]+ Running sleep 20 & [cnetos@CentOS ~]$
現在,讓我們將第一個作業調到前臺 -
[root@CentOS ~]$ fg 1 sleep 10
如果你正在跟著操作,你會注意到前臺作業卡在你的shell中。現在,讓我們將程序掛起,然後在後臺重新啟用它。
- 按control+z
- 鍵入:bg 1,將第一個作業傳送到後臺並啟動它。
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1 [1]+ sleep 20 & [root@CentOS ~]$
nohup
從shell或終端工作時,值得注意的是,預設情況下,所有附加到shell的程序和作業在shell關閉或使用者登出時都會終止。使用nohup,如果使用者登出或關閉附加了程序的shell,程序將繼續執行。
[root@CentOS]# nohup ping www.google.com & [1] 27299 nohup: ignoring input and appending output to ‘nohup.out’ [root@CentOS]# pgrep ping 27299 [root@CentOS]# kill -KILL `pgrep ping` [1]+ Killed nohup ping www.google.com [root@CentOS rdc]# cat nohup.out PING www.google.com (216.58.193.68) 56(84) bytes of data. 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128 time = 51.6 ms 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128 time = 54.2 ms 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128 time = 52.7 ms
ps命令
管理員通常使用ps命令來調查特定程序的快照。ps通常與grep一起使用來過濾要分析的特定程序。
[root@CentOS ~]$ ps axw | grep python 762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid 1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P 15550 pts/0 S+ 0:00 grep --color=auto python
在上面的命令中,我們看到所有使用python直譯器的程序。結果還包括我們的grep命令,它查詢字串python。
以下是與ps一起使用的最常用命令列開關。
開關 | 操作 |
---|---|
a | 排除僅當前使用者的報告程序的約束 |
x | 顯示未附加到tty或shell的程序 |
w | 格式化輸出的寬輸出顯示 |
e | 顯示命令後的環境 |
-e | 選擇所有程序 |
-o | 使用者定義的格式化輸出 |
-u | 顯示特定使用者的所有程序 |
-C | 按名稱或程序ID顯示所有程序 |
--sort | 按定義對程序進行排序 |
檢視nobody使用者正在使用的所有程序 -
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
檢視firewalld程序的所有資訊 -
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
讓我們看看哪些程序正在消耗最多的記憶體 -
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
檢視centos使用者的所有程序並格式化,顯示自定義輸出 -
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm PID USER COMMAND 5802 centos gnome-keyring-d 5812 cnetos gnome-session 5819 cnetos dbus-launch 5820 cnetos dbus-daemon 5888 cnetos gvfsd 5893 cnetos gvfsd-fuse 5980 cnetos ssh-agent 5996 cnetos at-spi-bus-laun
pstree命令
pstree類似於ps,但並不經常使用。它以更整潔的樹狀方式顯示程序。
[centos@CentOS ~]$ pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─caribou───2*[{caribou}] ├─cgrulesengd ├─chronyd ├─colord───2*[{colord}] ├─crond ├─cupsd
pstree的總輸出可能超過100行。通常,ps會提供更有用的資訊。
top命令
top是在Linux中排查效能問題時最常用的命令之一。它對於Linux中的即時統計和程序監控非常有用。以下是從命令列啟動top時的預設輸出。
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg 8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal- 6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc 6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
執行top時常用的熱鍵(熱鍵是在shell中執行top時按下的鍵)。
命令 | 操作 |
---|---|
b | 啟用/停用頂部選單上的粗體高亮顯示 |
z | 迴圈顏色方案 |
l | 迴圈負載平均標題 |
m | 迴圈記憶體平均標題 |
t | 任務資訊標題 |
h | 幫助選單 |
Shift+F | 自定義排序和顯示欄位 |
以下是top的常用命令列開關。
命令 | 操作 |
---|---|
-o | 按列排序(可以在前面加上-或+以進行升序或降序排序) |
-u | 僅顯示指定使用者的程序 |
-d | 更新top的延遲時間 |
-O | 返回top可以應用排序的列列表 |
Shift+F呈現的top中的排序選項螢幕。此螢幕允許自定義top顯示和排序選項。
Fields Management for window 1:Def, whose current sort field is %MEM Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, 'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end! * PID = Process Id TGID = Thread Group Id * USER = Effective User Name ENVIRON = Environment vars * PR = Priority vMj = Major Faults delta * NI = Nice Value vMn = Minor Faults delta * VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB) * RES = Resident Size (KiB) nsIPC = IPC namespace Inode * SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode * S = Process Status nsNET = NET namespace Inode * %CPU = CPU Usage nsPID = PID namespace Inode * %MEM = Memory Usage (RES) nsUSER = USER namespace Inode * TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode * COMMAND = Command Name/Line PPID = Parent Process pid UID = Effective User Id
top,顯示使用者rdc的程序並按記憶體使用情況排序 -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND 6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell 6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen 6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm 6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga 6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus 6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
顯示有效的top欄位(精簡版) -
[centos@CentOS ~]$ top -O PID PPID UID USER RUID RUSER SUID SUSER GID GROUP PGRP TTY TPGID
kill命令
kill命令用於透過其PID從命令shell終止程序。終止程序時,我們需要指定要傳送的訊號。訊號讓核心知道我們希望如何結束程序。最常用的訊號是 -
SIGTERM被隱含地認為是核心讓程序知道它應該儘快停止,因為它安全這樣做。SIGTERM使程序有機會優雅地退出並執行安全的退出操作。
SIGHUP大多數守護程序在收到SIGHUP時會重新啟動。當對配置檔案進行了更改時,這通常用於程序。
SIGKILL由於SIGTERM相當於請求程序關閉。核心需要一個選項來結束不遵守請求的程序。當程序掛起時,使用SIGKILL選項顯式地關閉程序。
要檢視可以使用kill傳送的所有訊號列表,可以使用-l選項 -
[root@CentOS]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@CentOS rdc]#
使用SIGHUP重新啟動系統。
[root@CentOS]# pgrep systemd 1 464 500 643 15071 [root@CentOS]# kill -HUP 1 [root@CentOS]# pgrep systemd 1 464 500 643 15196 15197 15198 [root@CentOS]#
pkill允許管理員按程序名稱傳送kill訊號。
[root@CentOS]# pgrep ping 19450 [root@CentOS]# pkill -9 ping [root@CentOS]# pgrep ping [root@CentOS]#
killall將終止所有程序。小心使用root許可權的killall,因為它將終止所有使用者的全部程序。
[root@CentOS]# killall chrome
free命令
free是一個非常簡單的命令,通常用於快速檢查系統的記憶體。它顯示已使用的物理記憶體和交換記憶體的總量。
[root@CentOS]# free total used free shared buff/cache available Mem: 1879668 526284 699796 10304 653588 1141412 Swap: 3145724 0 3145724 [root@CentOS]#
nice命令
nice允許管理員根據CPU使用情況設定程序的排程優先順序。優先順序基本上是核心如何為程序或作業排程CPU時間片。預設情況下,假定程序對CPU資源具有同等訪問許可權。
首先,讓我們使用top檢查當前正在執行的程序的優先順序。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged 690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl] 9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract 9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a 9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f 9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u 27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon 1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0 7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
我們要關注由NI表示的NICE列。優先順序範圍可以在-20到正19之間。-20表示給予的最高優先順序。
nohup nice --20 ping www.google.com &
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30727 root 0 -20 132108 1640 1264 S 0.0 0.1 0:00.06 ping
renice
renice允許我們更改當前正在執行的程序的當前優先順序。
renice 17 -p 30727
上面的命令將降低我們的ping程序命令的優先順序。