Linux進程管理(鳥哥)
一,什麽是進程
1,進程與程序
(1)程序 (program):通常為 binary program ,放置在儲存媒體中 (如硬盤、光盤、軟盤、磁帶等), 為實體文
件的型態存在;
(2)進程 (process):程序被觸發後,執行者的權限與屬性、程序的程序代碼與所需數據等都會被加載內存中, 操
作系統並給予這個內存內的單元一個標識符 (PID),可以說,進程就是一個正在運作中的程序。
(3)父進程和子進程:ps -l
父進程:pid
子進程:ppid
註:日常運維中,kill殺死一個進程,過一會還會自動生成,一般是有crontab計劃任務或者父進程自動生成;所
以要刪除父進程
(4)fork and exec:進程呼叫的流程
在 Linux 的進程呼叫通常稱為 fork-and-exec 的流程!進程都會由父進程以復制 (fork) 的方式產生一個
一模一樣的子進程, 然後被復制出來的子進程再以 exec 的方式來執行實際要進行的程序,最終就
成為一個子進程的存在;
(5)系統或網絡服務:常駐在內存的進程
2,Linux 的多人多任務環境
(1)多人環境:每個人登入後取得的 shell 的 PID 不同
(2)多任務行為:每個工作都僅占去 CPU 的幾個指令次數,所以 CPU 每秒能夠在各個進程之間進行切換
(3)多重登入環境的七個基本終端窗口:在 Linux 當中,默認提供了六個文字界面登入窗口,以及一個圖形界面,可以使用 [Alt]+[F1].....[F7]來切換不同的終端機界面
(4)特殊的進程管理行為:linux每個進程之間可能是獨立的,也可能有相依性, 只要到獨立的進程當中,可以切換到其他的終端機界面刪除有問題的那個進程
(5)bash 環境下的工作管理 (job control):cp file1 file2 & 放後臺執行,可以繼續執行其它指令
(6)多人多任務的系統資源分配問題考慮:
二,工作管理 (job control)
1,什麽是工作管理?
(1)工作管理就是當登入系統取得 bash shell 後,在單一終端機接口下同時進行多個工作行為管理
(2)要進行 bash 的 job control 必須要註意到的限制是:
1,這些工作所觸發的進程必須來自於你 shell 的子進程(只管理自己的 bash);
2, 前景:你可以控制與下達指令的這個環境稱為前景的工作 (foreground);
3, 背景:可以自行運作的工作,你無法使用 [ctrl]+c 終止他,可使用 bg/fg 呼叫該工作;
4, 背景中『執行』的進程不能等待 terminal/shell 的輸入(input)
2,job control 的管理
(1)直接將指令丟到背景中『執行』的 &
# tar zcf /tmp/etc.tar.gz /etc &
[1] 8932
# tar: Removing leading `/' from member names
註解:
在中括號內的號碼為工作號碼 (job number),該號碼與 bash 的控制有關。
8932 是這個工作在系統中的 PID。至於後續出現的數據是 tar 執行的數據流, 由於我們沒有加上數據流重導向,所以會影響畫面!
[1]+ Done tar zcf /tmp/etc.tar.gz /etc
代表 [1] 這個工作已經完成 (Done) ,該工作的指令則是接在後面那一串指令列
正確的完美寫法為:tar - zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
(2)將『目前』的工作丟到背景中『暫停』:[ctrl]-z
# vim a
[3]+ Stopped vim a
註解:
[3] ,表示這是第三個工作
+ 代表最近一個被丟進背景的工作
Stopped 則代表目前這個工作的狀態
(3)觀察目前的背景工作狀態: jobs
# jobs [-lrs]
選項與參數:
-l :除了列出 job number 與指令串之外,同時列出 PID 的號碼;
-r :僅列出正在背景 run 的工作;
-s :僅列出正在背景當中暫停 (stop) 的工作。
常用選項:
jobs -l
jobs -r
jobs -s
(4)將背景工作拿到前景來處理:fg foreground
# fg %jobnumber
選項與參數:
%jobnumber :jobnumber 為工作號碼(數字)
(5)讓工作在背景下的狀態變成運作中: bg (工作未結束脫機後,工作不會繼續進行)
# bg %jobnumber
選項與參數:
%jobnumber :jobnumber 為工作號碼(數字)
(6)管理背景當中的工作: kill
# kill -signal %jobnumber
# kill -l
選項與參數:
-l :這個是 L 的小寫,列出目前 kill 能夠使用的信號 (signal) 有哪些?
signal :信號用 man 7 signal 可知:
-1 :重新讀取一次參數的配置文件 (類似 reload);
-2 :代表與由鍵盤輸入 [ctrl]-c 同樣的動作;
-9 :立刻強制刪除一個工作;
-15:以正常的進程方式終止一項工作。與 -9 是不一樣的。
3,脫機管理
nohup [ 指令與 參數 ] 在終端機前景中工作
nohup [ 指令與 參數 ] & 在終端機背景中工作
nohup 並不支持 bash 內建的指令,必須要是外部指令才行
例如:
# vim sleep500.sh
#!/bin/bash
/bin/sleep 500s
/bin/echo "I have slept 500 seconds."
# chmod a+x sleep500.sh
# nohup ./sleep500.sh &
[2] 14812
# nohup: ignoring input and appending output to `nohup.out' <==會告知這個訊息!
# exit
如果你再次登入的話,再使用 pstree 去查閱你的進程,會發現 sleep500.sh 還在執行中
三,進程管理
1,進程的觀察
(1)查看進程 ps
常用組合:
ps auxf
ps -lA
ps axjf
ps aux | egrep '(cron|rsyslog)'
(2)top :動態查看進程的變化
echo $$
14836 <==這個數字是我們 bash 的 PID
(3)pstree
常用組合:
pstree -A
pstree -Aup
2,進程的管理
(1)查看進程信號
# kill -l
(2)常用信號詳解:
1 HUP 啟動被終止的進程,可讓該 PID 重新讀取自己的配置文件,類似重新啟動
2 INT 相當於用鍵盤輸入 [ctrl]-c 來中斷一個進程的進行
9 KILL 代表強制中斷一個進程的進行,如果該進程進行到一半, 那麽尚未完成的部分可能會有『半產品』產
生,類 似 vim 會有 .filename.swp 保留下來。
15 TERM 以正常的結束進程來終止該進程。由於是正常的終止, 所以後續的動作會將他完成。不過,如果該進
程已經發生問題,就是無法使用正常的方法終止時, 輸入這個 signal 也是沒有用的。
19 STOP 相當於用鍵盤輸入 [ctrl]-z 來暫停一個進程的進行
(3)kill -signal PID
kill -HUP $(ps aux | grep 'rsyslogd' | grep -v 'grep'| awk '{print $2}')
(4)killall -signal 指令名稱
killall [-iIe] [command name]
選項與參數:
-i :interactive 的意思,交互式的,若需要刪除時,會出現提示字符給用戶;
-e :exact 的意思,表示『後面接的 command name 要一致』,但整個完整的指令不能超過 15 個字符。
-I :指令名稱(可能含參數)忽略大小寫。
3,關於進程的執行順序
(1)Priority 與 Nice 值
PRI(new) = PRI(old) + nice
PRI 值越低越優先。PRI 值是由核心動態調整的, 用戶無法直接調整 PRI值的;
當 nice 值為負值時,那麽該進程就會降低 PRI 值,即會變的較優先被處理。
nice 值可調整的範圍為 -20 ~ 19 ;
root 可隨意調整自己或他人進程的 Nice 值,且範圍為 -20 ~ 19 ;
一般使用者僅可調整自己進程的 Nice 值,且範圍僅為 0 ~ 19 (避免一般用戶搶占系統資源);
一般使用者僅可將 nice 值越調越高,例如本來 nice 為 5 ,則未來僅能調整到大於 5;
調整nice的方法:
一開始執行程序就立即給予一個特定的 nice 值:用 nice 指令;
調整某個已經存在的 PID 的 nice 值:用 renice 指令
(2)nice :新執行的指令即給予新的 nice 值
nice [-n 數字] command
選項與參數:
-n :後面接一個數值,數值的範圍 -20 ~ 19。
例如: nice -n -5 vim &
(3)renice :已存在進程的 nice
renice [number] PID
選項與參數:
PID :某個進程的 ID
例如:renice -5 14836
4,系統資源的觀察
(1)free :觀察內存使用情況
free [ [-b|-k|-m|-g|-h] [-t] [-s N -c N]
選項與參數:
-b 以Byte為單位顯示內存使用情況。
-k 以KB為單位顯示內存使用情況。
-m 以MB為單位顯示內存使用情況。
-g 以GB為單位顯示內存使用情況。
-o 不顯示緩沖區調節列。
-s<間隔秒數> 持續觀察內存使用狀況。
-c 統計次數
-t 顯示內存總和列。
-V 顯示版本信息。
常用選項:
free -m -s 5 -c 5
free -g -s 5 -c 5
(2)uname :查閱系統與核心相關信息
uname [- - asrmpi]
選項與參數:
-a :所有系統相關的信息,包括底下的數據都會被列出來;
-s :系統核心名稱
-r :核心的版本
-m :本系統的硬件名稱,例如 i686 或 x86_64 等;
-p :CPU 的類型,與 -m 類似,只是顯示的是 CPU 的類型!
-i :硬件的平臺 (ix86)
(3)uptime :觀察系統啟動時間與工作負載 /proc/loadavg
(4)netstat :查看網絡連接,路由表,接口統計,化裝連接,和組播會員
netstat -[atunlp]
選項與參數:
-a :將目前系統上所有的連接、監聽、Socket 數據都列出來
-t :列出 tcp 網絡封包的數據
-u :列出 udp 網絡封包的數據
-n :不以進程的服務名稱,以端口號 (port number) 來顯示;
-l :列出目前正在網絡監聽 (listen) 的服務;
-p :列出該網絡服務的進程 PID
常用選項:
netstat -lanptu
netstat -r
(5)dmesg :分析核心產生的訊息
常用命令:
dmesg | more
dmesg | grep -i sda
(6)vmstat :偵測系統資源變化
四,特殊文件與進程
(1)具有 SUID/SGID 權限的指令執行狀態
SUID 的程序被一般用戶執行過程:
SUID 權限僅對二進制程序(binary program)有效;
執行者對於該程序需要具有 x 的可執行權限;
本權限僅在執行該程序的過程中有效 (run-time);
執行者將具有該程序擁有者 (owner) 的權限。
例子:
[wpf@47-95-251-172 ~]$ passwd
Changing password for user wpf.
Changing password for wpf.
(current) UNIX password:
[1]+ Stopped passwd
[wpf@47-95-251-172 ~]$ pstree -uA
init-+-aliyun-service
|-crond
|-2*[dhclient]
|-irqbalance
|-6*[mingetty]
|-mysqld_safe---mysqld(mysql)---9*[{mysqld}]
|-nginx---8*[nginx(www)]
|-php-fpm---28*[php-fpm(www)]
|-rsyslogd---3*[{rsyslogd}]
|-sshd-+-sshd---bash
| `-sshd---sshd(wpf)---bash-+-passwd(root)
| `-pstree
passwd執行時具有SUID權限給PID的程序權限
查詢系統中具有SUID/SGID的權限:
find / -perm /6000
(2)/proc/*代表的意義
進程都是在內存當中,內存中的數據是寫入/proc目錄
各個進程的PID都是以目錄的型態存在/proc中
proc目錄下文件與對應的內容:
/proc/cmdline 加載 kernel 時所下達的相關指令與參數!查閱此文件,可了解指令是如何啟動的!
/proc/cpuinfo 本機的 CPU 的相關信息,包含頻率、類型與運算功能等
/proc/devices 這個文件記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關!
/proc/filesystems 目前系統已經加載的文件系統!
/proc/interrupts 目前系統上面的 IRQ 分配狀態。
/proc/ioports 目前系統上面各個裝置所配置的 I/O 地址。
/proc/kcore 這個就是內存的大小,不要讀他!
/proc/loadavg 還記得 top 以及 uptime 吧?沒錯!上頭的三個平均數值就是記錄在此!
/proc/meminfo 使用 free 列出的內存信息,在這裏也能夠查閱到!
/proc/modules 目前我們的 Linux 已經加載的模塊列表,也可以想成是驅動程序!
/proc/mounts 系統已經掛載的數據,就是用 mount 這個指令呼叫出來的數據!
/proc/swaps 到底系統掛加載的內存在哪裏?使用掉的 partition 就記錄在此!
/proc/partitions 使用 fdisk -l 會出現目前所有的 partition 吧?在這個文件當中也有紀錄!
/proc/uptime 就是用 uptime 的時候,會出現的信息!
/proc/version 核心的版本,就是用 uname -a 顯示的內容!
/proc/bus/* 一些總線的裝置,還有 USB 的裝置也記錄在此!
(3)查詢已開啟 文件 或已執行進程開啟之 文件
fuser :從文件( 或文件系統) 找出正在使用該文件的進程
fuser [-umv] [-k [i] [-signal]] file/dir
選項與參數:
-u :除了進程的 PID 之外,同時列出該進程的擁有者;
-m :後面接的那個檔名會主動的上提到該文件系統的最頂層,對 umount 不成功很有效!
-v :可以列出每個文件與進程還有指令的完整相關性!
-k :找出使用該文件/目錄的 PID ,並試圖以 SIGKILL 這個訊號給予該 PID;
-i :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意願!
-signal:例如 -1 -15 等等,若不加的話,預設是 SIGKILL (-9) !
# fuser -uv 888.tbzkzx.cc.access.log
USER PID ACCESS COMMAND
888.tbzkzx.cc.access.log:
root 11259 F.... (root)nginx
www 11260 F.... (www)nginx
ACCESS詳解:
c :此進程在當前的目錄下(非次目錄);
e :可被觸發為執行狀態;
f :是一個被開啟的文件;
r :代表頂層目錄 (root directory);
F :該文件被開啟了,不過在等待回應中;
m :可能為分享的動態函式庫;
常用選項:
fuser -uv /proc
fuser -umv log
fuser -mki /home
(4)lsof :列出被進程所開啟的文件名
# lsof [-aUu] [+d]
選項與參數:
-a :多項數據需要『同時成立』才顯示出結果時!
-U :僅列出 Unix like 系統的 socket 文件類型;
-u :後面接 username,列出該使用者相關進程所開啟的文件;
+d :後面接目錄,亦即找出某個目錄底下已經被開啟的文件!
常用選項:
lsof filename
lsof -i :80
lsof -u root -a -U
(5)pidof :找出某支正在執行的程序的 PID
pidof [-sx] program_name
選項與參數:
-s :僅列出一個 PID 而不列出所有的 PID
-x :同時列出該 program name 可能的 PPID 那個進程的 PID
五,SELinux初探
1,什麽是SELinux Security Enhanced Linux 安全強化linux
(1)當初設計的目標:避免資源的誤用
SELinux 是在進行進程、文件等細部權限設定依據的一個核心模塊
SELinux能夠控制網絡服務能否存取系統資源(因為啟動網絡服務的也是進程)
(2)傳統的文件權限與賬號關系:自主式訪問控制, DAC
自主式訪問控制 (Discretionary Access Control, DAC)就是依據進程的擁有者與文件資源的 rwx 權限來決定有無存取的能力;存在root 具有最高的權限和root 具有最高的權限問題:
(3)以策略規則訂定特定進程讀取特定 文件 :委任式訪問控制, MAC Mandatory Access Control
MAC對特定的進程與特定的文件資源來進行權限的控管
上圖例子:
WWW 服務器軟件的達成進程為 httpd 這支程序, 而默認情況下, httpd 僅能在 /var/www/ 這個目錄底下存取文件,如果 httpd 這個進程想要到其他目錄去存取數據時, 除了規則設定要開放外,目標目錄也得要設定成 httpd 可讀取的模式 (type) 才行;
2,SELinux 的運作模式
主體(Subject):SELinux主要想要管理的就是進程;
目標(Objext):主體進程能否存取的目標資源,一般就是文件系統;
策略(Policy):詳細的規則來指定不同的服務開放某些資源的存取
targeted:針對網絡服務限制較多,針對本機限制較少,是預設的政策;
minimum:由 target 修訂而來,僅針對選擇的進程來保護!
mls:完整的 SELinux 限制,限制方面較為嚴格
安全性本文 (security context) :
上圖的重點在『主體』如何取得『目標』的資源訪問權限
(1)主體進程必須要通過 SELinux 政策內的規則放行後,就可以與目標資源進行安全性本文的比對,
(2)若比對失敗則無法存取目標,若比對成功則可以開始存取目標
(1)安全性文本 (security context)
安全性本文是放置到文件的 inode 內的,因此主體進程想要讀取目標文件資源時,同樣需要讀取 inode , 這 inode 內就可以比對安全性本文以及 rwx等權限值是否正確,而給予適當的讀取權限依據;
查看安全性本文:
# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
安全性本文主要用冒號分為三個字段:
Identify:role:type
身份識別:角色:類型
詳細說明:
身份識別 (Identify) :
a)unconfined_u:不受限的用戶(在不受 SELinux 所限制的 bash 進程所產生的文件, 其身份識別大多就是 unconfined_u 『不受限』用戶)
b)system_u:系統用戶,大部分就是系統自己產生的文件
角色 (Role) :
a)object_r:代表的是文件或目錄等文件資源;
b)system_r:代表的是進程啦!不過,一般使用者也會被指定成為 system_r !
類型 (Type) ( 最重要!) :
一個主體進程能不能讀取到這個文件資源,與類型字段有關;
類型字段在文件與進程的定義不太相同:
a)type:在文件資源 (Object) 上面稱為類型 (Type);
b)domain:在主體進程 (Subject) 則稱為領域 (domain) !
(2)進程與 文件 SELinux type字段的相關性
系統中的進程在SELinux底下的安全本文:
# ps -eZ
LABEL PID TTY TIME CMD
system_u:system_r:init_t:s0 1 ? 00:00:03 systemd
身份識別 角色 該對應在 targeted 的意義
unconfined_u unconfined_r 一般可登入使用者的進程
system_u system_r 系統賬號的非交談式的系統運作進程
在預設的 target策略下,最重要的字段是類型字段 (type), 主體與目標之間是否具有可以讀寫的權限,與進程的 domain 及文件的 type 有關
crond例子:
# ps -eZ | grep cron
system_u:system_r:crond_t:s0-s0:c0.c1023 1338 ? 00:00:01 crond
system_u:system_r:crond_t:s0-s0:c0.c1023 1340 ? 00:00:00 atd
# ll -Zd /usr/sbin/crond /etc/crontab /etc/cron.d
drwxr-xr-x. root root system_u:object_r:system_cron_spool_t:s0 /etc/cron.d
-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab
-rwxr-xr-x. root root system_u:object_r:crond_exec_t:s0 /usr/sbin/crond
1. 首先,我們觸發一個可執行的目標文件,那就是具有 crond_exec_t 這個類型的 /usr/sbin/crond 文件;
2. 該文件的類型會讓這個文件所造成的主體進程 (Subject) 具有 crond 這個領域 (domain), 我們的策略針對
這個領域已經制定了許多規則,其中包括這個領域可以讀取的目標資源類型;
3. 由於 crond domain 被設定為可以讀取 system_cron_spool_t 這個類型的目標文件 (Object), 因此你的配置
文件放到 /etc/cron.d/ 目錄下,就能夠被 crond 那支進程所讀取了;
4. 但最終能不能讀到正確的資料,還得要看 rwx 是否符合 Linux 權限的規範!
3,SELinux 三種模式的啟動、關閉與觀察
(1)SELinux的三種模式:
enforcing:強制模式,代表 SELinux 運作中,且已經正確的開始限制 domain/type 了;
permissive:寬容模式:代表 SELinux 運作中,不過僅會有警告訊息並不會實際限制 domain/type 的存取。這種模式可以運來作為 SELinux 的 debug 之用;
disabled:關閉,SELinux 並沒有實際運作。
SELinux的三種模式與上面談到的政策規則、安全本文的關系:
查看SELinux模式:getenforce
# getenforce
Enforcing
查看SELiunx的策略:
# sestatus [-vb]
選項與參數:
-v :檢查列於 /etc/sestatus.conf 內的文件與進程的安全性本文內容;
-b :將目前政策的規則布爾值列出,亦即某些規則 (rule) 是否要啟動 (0/1) 之意;
配置文件: /etc/selinux/config
(2)SELinux 的啟動與關閉
SELinux 模式在 enforcing 與permissive 之間切換的方法為
# setenforce [0|1]
選項與參數:
0 :轉成 permissive 寬容模式;
1 :轉成 Enforcing 強制模式
註意:
在某些特殊的情況下,從 Disabled 切換成 Enforcing 後,竟然有一堆服務無法啟動,提示在 /lib/xxx 裏面的數據沒有權限讀取,所以啟動失敗。這大多是由於在重新寫入 SELinux type(Relabel) 出錯之故,使用 Permissive 就沒有這個錯誤。那如何處理呢?最簡單的方法就是在 Permissive 的狀態下,使用『 restorecon -Rv / 』重新還原所有 SELinux 的類型,就能夠處理這個錯誤!
4,SELinux 策略規則管理
(1)SELinux 各個規則的布爾值查詢 getsebool
# getsebool [-a] [ 規則 的名 稱] ]
選項與參數:
-a :列出目前系統上面的所有 SELinux 規則的布爾值為開啟或關閉值
(2)SELinux 各個規則規範的主體進程能夠讀取的 文件 SELinux type 查詢 seinfo, sesearch
yum install -y setools-console-*
# seinfo [-Atrub]
選項與參數:
-A :列出 SELinux 的狀態、規則布爾值、身份識別、角色、類別等所有信息
-u :列出 SELinux 的所有身份識別 (user) 種類
-r :列出 SELinux 的所有角色 (role) 種類
-t :列出 SELinux 的所有類別 (type) 種類
-b :列出所有規則的種類 (布爾值)
# sesearch [-A] [-s 主體類別 ] [-t 目標類別 ] [-b 布 爾 值] ]
選項與參數:
-A :列出後面數據中,允許『讀取或放行』的相關數據
-t :後面還要接類別,例如 -t httpd_t
-b :後面還要接 SELinux 的規則,例如 -b httpd_enable_ftp_server
範例一:找出 crond_t 這個主體進程能夠讀取的文件 SELinux type
sesearch -A -s crond_t | grep spool
範例二:找出 crond_t 是否能夠讀取 /etc/cron.d/checktime 這個我們自定義的配置文件?
ll -Z /etc/cron.d/checktime
sesearch -A -s crond_t | grep admin_home_t
(3)修改 SELinux 規則的布爾值 setsebool
# setsebool [-P] 『 規則 名 稱 』 [0|1]
選項與參數:
-P :直接將設定值寫入配置文件,該設定數據未來會生效的!
5,SELinux安全本文的修改
(1)使用 chcon 手動修改 文件的 的 SELinux type
chcon [-R] [-t type] [-u user] [-r role] 文件
chcon [-R] -- reference= 範例文件 文件
選項與參數:
-R :連同該目錄下的次目錄也同時修改;
-t :後面接安全性本文的類型字段!例如 httpd_sys_content_t ;
-u :後面接身份識別,例如 system_u; (不重要)
-r :後面街角色,例如 system_r; (不重要)
-v :若有變化成功,請將變動的結果列出來
--reference=範例文件:拿某個文件當範例來修改後續接的文件的類型!
例子:
chcon -v -t net_conf_t /etc/cron.d/checktime
chcon -v -reference=/etc/shadow /etc/cron.d/checktime
(2)使用 restorecon 讓 讓 文件 恢復正確的 SELinux type
# restorecon [-Rv] 文件或目錄
選項與參數:
-R :連同次目錄一起修改;
-v :將過程顯示到屏幕上
例子:
restorecon -Rv /etc/cron.d
(3)semanage 默認目錄的安全性本文查詢與修改
semanage {login|user|port|interface|fconte xt|translation} -l
semanage fcontext - - {a|d|m} [-frst] file_spec
選項與參數:
fcontext :主要用在安全性本文方面的用途, -l 為查詢的意思;
-a :增加
-m :修改;
-d :刪除。
重點回顧:
1,程序 (program):通常為 binary program ,放置在儲存媒體中 (如硬盤等),為實體文件的型態存在;
2,進程 (process):程序被觸發後,執行者的權限與屬性、程序的程序代碼與所需數據等都會被加載內存中, 操
作系統並給予這個內存內的單元一個標識符 (PID),可以說,進程就是一個正在運作中的程序。
3,程序彼此之間是有相關性的,故有父進程與子進程之分。而 Linux 系統所有進程的父進程就是 init 這個
PID 為 1 號的進程。
4,在 Linux 的進程呼叫通常稱為 fork-and-exec 的流程!進程都會藉由父進程以復制 (fork) 的方式產生一個
一模一樣的子進程, 然後被復制出來的子進程再以 exec 的方式來執行實際要進行的程序,最終就成為一
個子進程的存在。
5,常駐在內存當中的進程通常都是負責一些系統所提供的功能以服務用戶各項任務,因此這些常駐程序就會
被我們稱為:服務 (daemon)。
6,在工作管理 (job control) 中,可以出現提示字符讓你操作的環境就稱為前景 (foreground),至於其他工作就
可以讓你放入背景 (background) 去暫停或運作。
7,與 job control 有關的按鍵與關鍵詞有: &, [ctrl]-z, jobs, fg, bg, kill %n 等;
8,進程管理的觀察指令有: ps, top, pstree 等等;
9,進程之間是可以互相控制的,傳遞的訊息 (signal) 主要透過 kill 這個指令在處理;
10,進程是有優先級的,該項目為 Priority,但 PRI 是核心動態調整的,用戶只能使用 nice 值去微調 PRI
11,nice 的給予可以有: nice, renice, top 等指令;
12,vmstat 為相當好用的系統資源使用情況觀察指令;
13,SELinux 當初的設計是為了避免使用者資源的誤用,而 SELinux 使用的是 MAC 委任式存取設定;
14, SELinux 的運作中,重點在於主體進程 (Subject) 能否存取目標文件資源 (Object) ,這中間牽涉到政策
(Policy) 內的規則, 以及實際的安全性本文類別 (type);
15,安全性本文的一般設定為:『Identify:role:type』其中又以 type 最重要;
16,SELinux 的模式有: enforcing, permissive, disabled 三種,而啟動的政策 (Policy) 主要是 targeted
17,SELinux 啟動與關閉的配置文件在: /etc/selinux/config
18,SELinux 的啟動與觀察: getenforce, sestatus 等指令
19,重設 SELinux 的安全性本文可使用 restorecon 與 chcon
20,在 SELinux 有啟動時,必備的服務至少要啟動 auditd 這個!
21,若要管理預設的 SELinux 布爾值,可使用 getsebool, setsebool 來管理
Linux進程管理(鳥哥)