進程顯示工具 ps -ef(有些人喜歡用)
ps 帶-不帶-不一樣
a 包括所有終端的進程
x 包括不連接的進程
u 顯示進程所有者的信息
f 選項顯示樹進程 –forest
o 屬性 選項顯示定制的信息 pid,cmd,%cpu,%mem ps xo pid,cmd,%cpu,tty
L 顯示支持的屬性列表
k|–sort 屬性 對屬性排序,屬性前加-表示倒敘ps xo pid,cmd,%cpu,tty k %cpu 按著cpu排序
ps xo pid,cmd,%cpu,%mem k -%mem按著內存倒敘
[root@localhost ~]#ps xo pid,cmd,euser,ruser
PID CMD EUSER RUSER 該用戶運行的程序是S權限 用戶繼承root
2242 su root fanjiaxi
-C cmdlist 指定命令,多個命令用,分隔
-L 顯示線程
-e: 顯示所有進程,相當于-A
-f: 顯示完整格式程序信息
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
-u userlist 指定有效的用戶ID或名稱
-U userlist 指定真正的用戶ID或名稱
-g gid或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid或組名稱
-p pid 顯示指pid的進程
–ppid pid 顯示屬于pid的子進程
-M 顯示SELinux信息,相當于Z
ps示例
查詢你擁有的所有進程:
ps -x
顯示指定用戶名(RUID)或用戶ID的進程:
ps -fU apache
ps -fu 48
顯示指定用戶名(EUID)或用戶ID的進程:
ps -fu wang
ps -fu 1000
查看以root用戶權限(實際和有效ID)運行的每個進程:
ps -U root -u root
列出某個組擁有的所有進程(實際組ID:RGID或名稱):
ps -fG nginx
列出有效組名稱(或會話)所擁有的所有進程:
ps -fg mysql
ps -fG 27
通過進程ID來顯示所屬的進程:
ps -fp 1234
以父進程ID來顯示其下所有的進程,如顯示父進程為1154的所有進程:
ps -f –ppid 1234
顯示指定PID的多個進程:
ps -fp 1204,1239,1263
要按tty顯示所屬進程:
ps -ft pst/0
以進程樹顯示系統中的進程如何相互鏈接:
ps -e –forest
以進程樹顯示指定的進程
ps -f –forest -C sshd
ps -ef –forest | grep -v grep | grep sshd
要顯示一個進程的所有線程,將顯示LWP(輕量級進程)以及NLWP(輕量級進程數)列:
ps -fL -C nginx
要列出所有格式說明符:
ps L
查看進程的PID,PPID,用戶名和命令:
ps -eo pid,ppid,user,cmd
自定義格式顯示文件系統組,ni值開始時間和進程的時間:
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
使用其PID查找進程名稱:
ps -p 1244 -o comm=
要以其名稱選擇特定進程,顯示其所有子進程
ps -C sshd,bash
查找指定進程名所有的所屬PID,在編寫需要從std輸出或文件讀取PID的腳本時這個參數很有用:
ps -C httpd,sshd -o pid=
檢查一個進程的執行時間
ps -eo comm,etime,user | grep nginx
查找占用最多內存和CPU的進程:
ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head 按內存排序 !?。。。。。。。。。。。。。。?!
ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head ?。。。。。。。。。。。。。。。。?!
顯示安全信息:
ps -eM
ps –context
使用以下命令以用戶定義的格式顯示安全信息。
ps -eo euser,ruser,suser,fuser,f,comm,label
使用watch實用程序執行重復的輸出以實現對就程進行實時的監視,如下面的命令顯示每秒鐘的監視:
watch -n 1 ‘ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head’
當腳本不加#!/bin/bash/是進程里顯示的bash而不是f1.sh bash f1.sh運行腳本也看不到 一般給腳本加上執行權限才能在進程中看到
ps -C f1.sh -Cf2.sh o pid,cmd,%cpu,%mem 運行腳本時可以查看腳本信息 看腳本CPU內存的使用情況
優先級
ni : nice值
pri :priority 優先級
psr :process CPU編號
rtprio 實時優先級
ps xo pid,cmd,pri,ni,rtprio 看pid,cmd的pri優先級和nice優先級rtprio實時優先級
對應Centos優先級表
調優先級的命令 renice renice -n -10 2612 (-n nice的值 -10對應優先級表 2612進程編號)
pri的優先級是系統優先級反過來畫
nice -n -5 sleep 100 執行命令時指定優先級
值越大優先級越往后
搜索進程
pgerp 支持正則表達式!?。。。。。。?!
-u uid 生效者
-U 真正發起運行命令者
-t 與制定終端相關的進程
[root@localhost ~]#pgrep -t pts/1
2145
2186
2187
2242
-l 顯示進程名
[root@localhost ~]#pgrep -lt pts/1
2145 bash
2186 su
2187 bash
2242 su
-a 顯示完整格式的進程名
-P 顯示制定進程的子進程(大P)
pidof 可以顯示某個運行程序的id
例 pidof bash
[root@localhost ~]#pidof bash
2187 2145 1360 669
uptime 查看系統的啟用時間
[root@localhost ~]#uptime
17:01:47 up 3 min, 1 user, load average: 0.21, 0.54, 0.27
總時長 當前幾個用戶 一分鐘之內的負載 負載值越小越好 一般不大于cup個數的兩倍
通常每個CPU內核的當前活動進程數不大于3,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么此主機的性能有嚴重問題
如果linux主機是1個雙核CPU,當Load Average 為6的時候說明機器已經被充分使用
top命令可以實時觀察進程的使用情況 q退出
[root@localhost ~]#top
top – 17:11:41 up 13 min, 1 user, load average: 0.00, 0.08, 0.15
Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.9 us, 20.8 sy, 0.0 ni, 77.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999720 total, 388120 free, 281160 used, 330440 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 523524 avail Mem
us 用戶空間的程序 sy 系統空間 ni 調整優先級的 id表示空閑 wa等待 hi si 硬中斷軟中斷 st虛擬機占用的偷盜盜取的時間
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分別顯示:1 (數字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k PID to signal/kill [default pid = 638] 3518 刪除3518進程
保存文件:W 保存到家目錄 .toprc文件
top
-d #: 指定刷新時間間隔,默認為3秒
-b: 全部顯示所有進程
-n #: 刷新多少次后退出
htop 首先裝htop包 界面比較好 可以用鼠標點
htop命令:EPEL源
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程
-s COLUME: 以指定字段進行排序
子命令:
s: 跟蹤選定進程的系統調用
l: 顯示選定進程打開的文件列表
a:將選定的進程綁定至某指定CPU核心
t: 顯示進程樹
free 查看內存使用情況
-b 以字節為單位
-m 以MB為單位
-g 以GB為單位
-h 易讀格式
-o 不顯示-/+buffers/cache行
-t 顯示RAM + swap的總和
-s n 刷新間隔為n秒
-c n 刷新n次后即退出
vmstat命令 虛擬內存信息 加數字幾秒更新一次 可以動態觀察結果
iostat:統計CPU和設備IO信息 查看磁盤的信息
示例:iostat 1 10
pmap 進程對應的內存映射
pmap -x 顯示詳細格式的信息 pmap 1 可以詳細的了解占用內存的使用空間 pmap -x 1 cat /proc/1/maps專業
glances 可以遠程監控
glances -s -B 192.168.30.7 監控192.168.30.7 要監控的主機
glances -c 192.168.30.7 監控192.168.30.7主機的內存 從哪個主機看 ss -atl 查看是否被監控
-b: 以Byte為單位顯示網卡數據速率
-d: 關閉磁盤I/O模塊
-f /path/to/somefile: 設定輸入文件位置
-o {HTML|CSV}:輸出格式
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1:每個CPU的相關數據單獨顯示
dstat命令:系統資源統計,代替vmstat,iostat
dstat [-afv] [options..] [delay [count]]
-c: 顯示cpu相關信息
-C #,#,…,total
-d: 顯示disk相關信息
-D total,sda,sdb,…
-g:顯示page相關統計數據
-m: 顯示memory相關統計數據
-n: 顯示network相關統計數據
-p: 顯示process相關統計數據
-r: 顯示io請求相關的統計數據
-s: 顯示swapped相關的統計數據
–tcp
–udp
–unix
–raw
–socket
–ipc
–top-cpu:顯示最占用CPU的進程
–top-io: 顯示最占用io的進程
–top-mem: 顯示最占用內存的進程
–top-latency: 顯示延遲最大的進程
iotop
iotop是用來監管磁盤的
-P 查看指定的文件
kill
信號的數字標識 1,2,9
1無需關閉進程程序 從讀配置文件 kill -1 加進程編號
2終止正在運行的進程 相當于Ctrl+c
3 相當于Ctrl+\ 退出
9 強制殺死正在運行的進程 (容易丟數據)
15 終止正在運行的進程 =killall
18 繼續運行
19 后臺休眠
18 繼續運行
19 后臺休眠 作業管理
pkill 支持正則表達式
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名(pgrep可用)
-a: 顯示完整格式的進程名(pgrep可用)
-P pid: 顯示指定進程的子進程
pkill -at pst/0 把所有pts/0的進程給殺掉 pkill -9 -t pts/2 踢人
作業管理
linux的作業控制
前臺作業 :通過終端啟動,且啟動后一直占用終端
后臺作業 :可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
讓作業運行于后臺
(1) 運行中的作業: Ctrl+z 發19信號加程序 放到后臺休眠 killall -19 ping
(2) 尚未啟動的作業: COMMAND & 發18信號加程序 把休眠的運行 killall -18 ping
[root@localhost ~]#ping www.baidu.com &
作業控制:
fg [[%]JOB_NUM]:把指定的后臺作業調回前臺
bg [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行
kill [%JOB_NUM]: 終止指定的作業
后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望
送往后臺后,剝離與終端的關系
nohup COMMAND &>/dev/null & nohup也會有輸出只不過不放在前臺 放在nohup.out文件里了 cat 能查看
screen;COMMAND
jobs 查看后臺運行的進程
并行執行寫腳本 192.1 & = [root@localhost ~]# (192.1 &);(192.2 &);(192.3 &)
192.2 & [root@localhost ~]# { 192.1 & 192.2 & 192.3 & }
192.3 &
任務管理
讓系統在未來的某時間點執行一次任務
at
batch :系統自行選擇空閑時間去執行此處指定的任務
周期性執行某任務
cron
開啟這個服務/usr/lib/systemd/system/atd.service 命令systemctl status atd 7
service atd status 6 確保是running
一次作業
at
at命令:at [option] TIME
常用選項:
-V 顯示版本信息:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d: 刪除指定的作業;相當于atrm
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
-m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
配置時間文件 cat /etc/chrony.conf 7 里寫 server 172.20.0.1 iburst
ntp.conf 6
[root@localhost ~]#systemctl enable chronyd 設置開機啟動
[root@localhost ~]#systemctl status chronyd
● chronyd.service – NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:chronyd(8)
man:chrony.conf(5)
[root@localhost ~]#systemctl stastart status
[root@localhost ~]#systemctl start chronyd
[root@localhost ~]#systemctl status chronyd
● chronyd.service – NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running)
ntpdate 172.20.0.1
vim /etc/chrony.conf
systemctl enable chronyd(開機的時候自動啟用)chkconfig ntp on
systemctl status chronyd 7 chkconfig ntpd on 6 啟動at服務
systemctl start chronyd service ntpd stsrt
systemctl status chronyd service ntpd status
at 17:00
[root@localhost ~]#at 17:00
at> reboot
at> <EOT> (ctrl+d)
job 1 at Sat May 5 17:00:00 2018
放at任務的文件在 ls /var/spool/at/a00000 自動放入這個文件
at now +15 minutes 未來的15分鐘執行的任務
02pm + 3 days 三天之后的兩點
TIME:定義出什么時候進行 at 這項任務的時間
HH:MM [YYYY-mm-dd]
noon, midnight(午夜0點), teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}
-V 顯示版本信息:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d: 刪除指定的作業;相當于atrm at -d 2 刪除第二2任務 也可以刪文件
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務 把任務放在文件里 通過f調用 at -f ata.txt + 1minutes
-m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出 (強制發郵件)
支持文本重定向 at now + 2 minutes < at2.txt
任務里的標準輸出終端上不顯示 以郵件的方式發給你 在腳本里寫任務 要把標準輸出放到垃圾箱里
echo wall atjob | at now + 1 min
白名單黑名單 白名單需要自己建立 白名單里的全能用at剩下沒寫入的不能用 白名單的優先級高于黑名單
文件在 /etc/at.{allow,deny} 如多創建白名單之前這個計劃有 則這個計劃能繼續執行
如果這兩個文件全沒了 只能root用
at寫入腳本
#!/bin/bash
at 18:00 <<EOF
rm /data/* -rf 執行腳本
halt
EOF
周期性的計劃任務 cron
cronie 主程序包
[root@localhost ~]#systemctl status crond 使用cron 確保服務是啟用的
cat /etc/crontab 計劃任務的配置文件 定義了計劃文件的相關信息
# Example of job definition:
# .—————- minute (0 – 59) 第幾分鐘
# | .————- hour (0 – 23) 小時
# | | .———- day of month (1 – 31) 每個月的低級天
# | | | .——- month (1 – 12) OR jan,feb,mar,apr … 月份
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 星期幾
# | | | | |
# * * * * * user-name command to be executed
54 15 * * * wang wall cron job 每天的15點54分 以wang的身份發廣播
0 2 * * 1-5 root tar zcvf /data/etc.tar.gz /etc/ &> /dev/null工作日的每天夜里兩點把etc下的所有文件大包到data下
*/10 每十分鐘執行一次
@reboot root touch /data/cron.log (重啟時才會執行)包括按電源
日志路徑 cat /var/log/cron cron的日志文件 如過刪除了carn計劃任務 可在日志文件中恢復
普通用戶想創建計劃任務的命令
crontab
每個用戶都有專用的cron任務文件: /var/spool/cron/USERNAME 寫完之后 直接編輯不行 用crontab -e編輯
crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任務
-e: 編輯任務 生成一個文件 在里面編輯*****
-r: 移除所有任務 普通用戶編輯任務文件借助suid的命令
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
控制用戶執行計劃任務:
/etc/cron.{allow,deny}
crontab -e -u wang 編輯指定的計劃任務 如果不指定就是編輯自己的
-r 刪除這個人的所有進程文件
7里的故障排錯 6里面的
vim /sysroot/etc/crontab a 輸入空格1
@reboot root reboot
linux16 加 rd.break
ctrl+x
mount -o remount,rw /sysroot
vim /sysroot/etc/crontab
run-parts /data 運行data下的所有程序
[root@localhost ~]#ll /etc/cron.*
-rw——-. 1 root root 0 Aug 3 2017 /etc/cron.deny
/etc/cron.d:
total 12
-rw-r–r–. 1 root root 128 Aug 3 2017 0hourly
-rw-r–r–. 1 root root 108 Jun 13 2017 raid-check
-rw——-. 1 root root 235 Aug 3 2017 sysstat
/etc/cron.daily: 每天
total 12
-rwx——. 1 root root 219 Aug 2 2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 18 2014 man-db.cron
-rwx——. 1 root root 208 Nov 5 2016 mlocate
/etc/cron.hourly: 每小時
total 8
-rwxr-xr-x. 1 root root 392 Aug 3 2017 0anacron
-rwxr-xr-x. 1 root root 191 Aug 4 2017 mcelog.cron
/etc/cron.monthly: 每個月
total 0
/etc/cron.weekly: 每個星期的
total 0
anacrontab
cat /etc/anacrontab 開機后檢查關機前沒有執行的任務 如果沒執行開機執行
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily 每天
7 25 cron.weekly nice run-parts /etc/cron.weekly 每周
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly 每月
CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時文件
CentOS7使用systemd-tmpfiles-setup服務實現
對于cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義,將%
放置于單引號中,則可不用轉義 用單引號把%的命令引起來相當于轉義 太長的命令用腳本,調用.sh
腳本編程
過程式編程式語言
順序執行
選擇執行
循環執行
條件選擇if語句
選擇執行:
注意:if語句可嵌套 if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]… [ else COMMANDS; ] fi
單分支
if 判斷條件;then
條件為真的分支代碼
fi
雙分支
if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi
多分支
if 判斷條件 1 ;then
條件為真的分支代碼
elif 判斷條件 2 ;then
條件為真的分支代碼
elif 判斷條件 3 ;then
條件為真的分支代碼
else
以上條件都為假的分支代碼
fi
case 變量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默認分支
;;
esac
case支持glob風格的通配符:
*: 任意長度任意字符
?: 任意單個字符
[]:指定范圍內的任意單個字符
a|b: a或b
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97609