1.列舉常見的內核參數以及參數的意義
kernel.參數
#禁用SysRq(組合鍵)功能
kernel.sysrq = 0
#控制core文件的文件名中是否添加pid作爲擴展。文件內容爲1,表示添加pid作爲擴展名,生成的core文件格式爲core.xxxx;爲0則表示生成的core文件同一命名爲core
kernel.core_uses_pid = 1
#每個消息隊列的最大字節限制。該文件指定一個消息隊列的最大長度
kernel.msgmnb = 65536
#整個系統的最大數量的消息隊列。該文件指定消息隊列標識的最大數目,即系統範圍內最大多少個消息隊列
kernel.msgmax = 65536
#定義單個共享內存段的最大值
kernel.shmmax = 68719476736
#控制共享內存頁數,Linux 共享內存頁大小爲4KB, 共享內存段的大小都是共享內存頁大小的整數倍。一個共享內存段的最大大小是16G,那麼需要共享內存頁數是 16GB/4KB=16777216KB/4KB=4194304
kernel.shmall = 4294967296
#整個系統共享內存段的最大數目
kernel.shmmni = 4096
# 每個信號對象集的最大信號對象數;系統範圍內最大信號對象數;每個信號對象支持的最大操作數;系統範圍內最大信號對象集數
kernel.sem = 250 32000 100 128
2.如何通過/proc查看top中展示的進程狀態
先用top命令查看進程信息
top - 03:28:40 up 8:01, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1906492k total, 343232k used, 1563260k free, 103668k buffers
Swap: 2097148k total, 0k used, 2097148k free, 80088k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8687 root 20 0 15036 1208 928 R 0.3 0.1 0:00.20 top
1 root 20 0 19356 1532 1224 S 0.0 0.1 0:04.18 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.37 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0
PID :進程ID
USER :進程所有者
PR :進程的優先級別,越小越優先被執行
NI :nice值.負值表示高優先級,正值表示低優先級
VIRT :進程佔用的虛擬內存
RES :進程佔用的物理內存
SHR :進程使用的共享內存
S :進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,D表示不可中斷的睡眠狀態,T表示跟蹤/停止
%CPU :進程佔用CPU的使用率
%MEM :進程使用的物理內存和總內存的百分比
TIME+ :該進程啓動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。
COMMAND :進程啓動命令行
使用:cat /proc/[pid]/status查看進程狀態
[root@test script]# cat /proc/1/status
Name: init
State: S (sleeping)
Tgid: 1
Pid: 1
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
Utrace: 0
FDSize: 64
Groups:
VmPeak: 19364 kB
VmSize: 19356 kB
VmLck: 0 kB
VmHWM: 1532 kB
VmRSS: 1532 kB
VmData: 324 kB
VmStk: 88 kB
VmExe: 140 kB
VmLib: 2348 kB
VmPTE: 56 kB
VmSwap: 0 kB
Threads: 1
SigQ: 1/14719
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 00000001a0016623
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: fffffffffffffeff
CapBnd: ffffffffffffffff
Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list: 0-127
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 1005
nonvoluntary_ctxt_switches: 142
Name: 進程名稱
State: 進程狀態,R (running), S (sleeping), D (disk sleep), T (stopped), T(tracing stop), Z (zombie), or X (dead)
Tgid: 線程組號
Pid: 進程ID
Ppid: 父進程ID
TracerPid: 接收跟蹤該進程信息的進程的ID號,如果是0,表示沒有跟蹤
Uid: Uid euid suid fsuid
Gid: Gid egid sgid fsgid
第一列數字(RUID):實際用戶ID,指的是進程執行者是誰.
第二列數字(EUID):有效用戶ID,指進程執行時對文件的訪問權限.
第三列數字(SUID):保存設置用戶ID,作爲effective user ID的副本,在執行exec調用時後能重新恢復原來的effectiv user ID.
第四列數字(FSUID):目前進程的文件系統的用戶識別碼.一般情況下,文件系統的用戶識別碼(fsuid)與有效的用戶識別碼(euid)是相同的.
FDSize: 當前分配文件描述符
Groups: 啓動這個進程用戶所在的組
VmPeak: 當前進程運行過程中佔用內存的峯值
VmSize(KB): 進程佔用的內存
VmLck(KB): 任務已經鎖住的物理內存的大小。鎖住的物理內存不能交換到硬盤
VmHWM(KB): 程序得到分配到物理內存的峯值
VmRSS(KB): 應用程序正在使用的物理內存的大小,就是用ps命令的參數rss的值 (rss)
VmData(KB): 程序數據段的大小(所佔虛擬內存的大小),存放初始化了的數據;
VmStk(KB): 任務在用戶態的棧的大小
VmExe(KB): 進程代碼的大小
VmLib(KB): 進程所使用lib庫的大小
VmPTE: 該進程的所有頁表的大小,單位:kb
Threads: 當前進程組有多少個線程
SigQ: 待處理信號的個數
SigPnd: 屏蔽位,存儲了該線程的待處理信號
ShdPnd: 屏蔽位,存儲了該線程組的待處理信號
SigBlk: 存放被阻塞的信號
SigIgn: 存放被忽略的信號
SigCgt: 存放被俘獲到的信號
CapInh Inheritable,能被當前進程執行的程序的繼承的能力
CapPrm Permitted,進程能夠使用的能力,可以包含CapEff中沒有的能力,這些能力是被進程自己臨時放棄的,CapEff是CapPrm的一個子集,進程放棄沒有必要的能力有利於提高安全性
CapEff Effective,進程的有效能力
voluntary_ctxt_switches表示進程主動切換的次數.
nonvoluntary_ctxt_switches表示進程被動切換的次數.
3.分別用while、for循環檢測10.0.0.1/24網段存活的IP地址
#!/bin/bash
###while方式
i=1
while [ $i -le 254 ];do
if ping -w 1 -c 1 10.0.0.$i >/dev/null ;then
echo "10.0.0.$i 存活"
else
echo "10.0.0.$i 離線"
fi
let i++
done
###for方式
for i in $(seq 1 254);do
if ping -w 1 10.0.0.$i > /dev/null;then
echo "10.0.0.$i 存活"
else
echo "10.0.0.$i 離線"
fi
done
4.說明initrd的作用
Initrd 的英文含義是initialized RAM disk,即初始化RAM磁盤,是在系統引導過程中掛載的一個臨時根文件系統,用來支持兩階段的引導過程。initrd文件中包含了各種可執行程序和驅動程序,它們可以用來掛載實際的根文件系統,然後再將這個 initrd RAM磁盤卸載,並釋放內存。