內核參數、top命令、腳本練習、initrd簡介
- 列舉常見的內核參數以及參數的意義
(1)net.ipv4.ip_forward:數據包的路由轉發開關,設置爲1表示開啓,0表示關閉 (2)net.ipv4.conf.default.rp_filter對從默認網卡進來的數據包進行反向路徑校驗,設置爲1表示開啓,0表示關閉 (3)net.ipv4.conf.default.accept_source_route是否接受含有源路由信息的ip包,設置爲1表示開啓,0表示關閉 (4)net.ipv4.icmp_echo_ignore_all:忽略所有外部來的ping請求,但不影響自己對外外的ping操作。設置爲1表示關閉ICMP迴應功能,設置0表示開啓ICMP迴應功能。 (5)kernel.hostname:主機名的內核參數 (6)net.ipv4.tcp_max_tw_buckets:設置TCP最大的timewait數量。默認是180000 (7)net.ipv4.ip_local_port_range :允許系統打開的端口範圍,值爲兩個數字,中間以空格隔開,分別表示最小端口號和最大端口號。 (8)net.ipv4.tcp_tw_recycle:啓用timewait快速回收。設置爲1表示啓用功能。
補充:
(1)以上所有的參數分別在 /proc/sys/#/* 每個對應的目錄下:例如: net.ipv4.ip_forward = /proc/sys/net/ipv4/ip_forward
(2)修改參數的值,專用命令sysctl ,或者可以使用echo重定向的方式例如:~]# echo "test.localhost " > /proc/sys/kernel/hostname ~]#sysctl -w net.ipv4.ip_forward=1
注意:以上修改方式都只對當前有效,如果想永久有效需要修改配置文件:
/etc/sysctl.conf 或者/etc/sysctl.d/*.conf 立即生效的方式:sysctl -p /PATH/TO/CONFIG.FILE
- 通過/proc查看top中展示的進程狀態
top命令參數及意義:
參數名 | 對應/proc路徑 | 說明 |
---|---|---|
PID列 | 爲/proc目錄下的數字目錄 | 進程ID,每個進程的PID數字做爲目錄名稱 |
USER | 爲/proc/PID/status文件中的以Uid開頭行的第一列數字 | 進程的所屬用戶 |
PR | 在/proc/PID/stat文件中第18列數值 | 任務的調度優先級 |
NI | 在/proc/PID/stat文件中第19列數值 | 表示任務的NICE值 |
VIRT | 在/proc/PID/statm文件中第1列數值(單位爲頁) | 虛擬內存大小(KiB),任務使用的虛擬內存總量。 它包括所有代碼,數據和共享庫以及已換出的頁面和已映射但未使用的頁面 |
RES | 在/proc/PID/statm文件中第2列數值(單位爲頁) | 表示駐留內存大小(KiB) ,任務正在使用的非交換物理內存 |
SHR | 在/proc/PID/statm文件中第3列數值(單位爲頁) | 表示共享內存大小(KiB),可能與其他進程共享的內存 |
S | 這行顯示的進程狀態 | 爲/proc/PID/status文件中State |
%CPU | CPU使用率,自上一次屏幕刷新以來佔用的CPU時間與總CPU時間的百分比。(通過計算得到) | |
%MEM | 內存使用(RES)任務當前使用的可用物理內存份額。(通過計算RES與總內存比率得到) | |
TIME+ | 在/proc/PID/stat文件中體現爲兩個時間之和 :第14列該任務在用戶態運行的時間 和第15列該任務在覈心態運行的時間 | 任務自啓動以來使用的總CPU時間,顯示百分之一秒的精度 |
COMMAND | /proc/#/status文件中以Name開頭的行 | 進程名 |
3.分別用while、for循環檢測10.0.0.1/24網段存活的IP地址:
(1)for:
#!/bin/bash
#
declare -i uphosts=0
declare -i downhosts=0
for i in {1..254};do
if ping -W 1 -c 1 10.0.0.${i} %> /dev/null; then
echo " 10.0.0.$i is ip."
let uphosts+=1
else
echo "10.0.0.$i is down."
let downhosts+=1
fi
done
echo "Up hosts: $uphosts, Down hosts: $downhosts."
(2)while
#!/bin/bash
declare -i uphosts=0
declare -i downhosts=0
declare -i i=1
hostping(){
if ping -W 1 -c 1 $1 &> /dev/null;then
echo "$1 is up."
return 0
else
echo "$1 is down."
return 1
fi
}
while [ $i -le 254 ];do
hostping 10.0.0.$i
[ $? -eq 0 ] && let uphosts++ || let downhosts++
let i++
done
echo "Up hosts: $uphosts ,Down hosts:$downhosts"
4.說明initrd的作用:
initrd 是 boot loader initialized RAM disk的縮寫,表示由 boot loader 初始化的內存盤.在 linux內核啓動前, boot loader 會將磁盤等存儲介質中的 initrd 文件先加載到內存.內核啓動時會先訪問該內存中的 initrd 文件系統然後才訪問真正的根文件系統。啓動過程被分爲兩個過程,第一過程是執行內存中的 initrd 文件系統中的初始化文件(在Linux2.4 內核是/linuxrc 文件,是由文件系統鏡像生成的;在Linux2.6內核是/init文件,是使用 cpio 工具生成),負責加載內核訪問根文件系統存儲介質的驅動模塊, 以及加載根文件系統。第二過程是執行真正的根文件系統中的 /sbin/init 進程
initrd主要作用:
1.內核啓動時加載 initrd img, 掛載根 /
2.以/linuxrc 的指令執行, 一般有掃描系統硬件,從 當前文件系統中找到驅動安裝之.
3.掛載系統中真正的根 /