網絡協議和管理
route、netstat、ip、ss、nmcli命令
網絡接口配置-bonding
配置文件/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS= “miimon=100 mode=0”
配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
網橋
用虛擬機創建網橋
nmcli con add con-name mybr0 type bridge con-name br0 ifname br0
nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0
進程和計劃任務
進程(process)
task struct 內核存儲進程信息的數據結構格式
task list 多個任務task struct組成的鏈表
fork();clone()寫時複製
進程包含多個線程至少一個
儘可能減少進程切換來提升性能
內存是以頁來存儲數據:page 4K
MMU 負責轉換線性的物理地址
TLB 保存虛擬地址和物理地址映射關係緩存
LRU 近期最少使用算法,釋放內存
進程的基本狀態:創建、就緒、執行、阻塞、終止狀態
運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲就緒狀態
就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
運行——>阻塞:正在執行的進程因發生某等待事件而無法執行,則進程由執行狀態變爲阻塞狀態,如發生了I/O請求
阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
以下兩種狀態是不可能發生的:
阻塞——>運行:即使給阻塞進程分配CPU,也無法執行,操作系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態
系統管理工具:
ps、top、free、vmstat、iostat、pmap、htop(需要epel源安裝)、glances(需要epel源安裝)、dstat、iotop、nload(需要epel源安裝)、lsof命令
計劃任務:
at和batch一次性計劃任務
1.at隊列存放在/var/spool/at目錄中
2.依賴與atd服務,需要啓動才能實現at任務
3./etc/at.{allow,deny}控制用戶是否能執行at任務
白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能執行at命令
黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny 文件中的使用者則可執行
如果兩個文件都不存在,只有 root 可以執行 at 命令
週期性任務計劃cron
系統級計劃任務(普通用戶不能創建)
/etc/crontab系統級計劃任務配置文件(不推薦使用)
用戶級計劃任務
/usr/bin/crontab 用戶級計劃任務配置文件
crontab
-u 以誰的身份來創建任務(默認爲自己)
-e 創建計劃任務(會自動生成一個計劃任務文件/tmp/crontab.DkTbc7,再創建完成後會自動刪除該文件)也能刪除計劃任務
-r 刪除全部計劃任務
***再任務中不能使用%,一定要用要需要轉義
日誌文件/var/log/cron
run-parts file 該命令能使該目錄中腳本都運行一遍
推薦寫計劃任務寫入腳本,讓計劃任務來啓動腳本
SHELL腳本編程進階
for循環(兩種格式)
sum=0
for i in {1..100};do
let sum+=i
done
echo sum=$sum
c語言風格
for((i=1;i<=9;i++));do
for((j=1;j<=i;j++));do
echo -e "${j}×${i}=$[j*i]\t\c"
done
echo
done
while循環
sum=0
i=1
while [ $i -le 100 ];do
let sum+=i
let i++
done
echo sum=$sum
while無限循環
N=$[RANDOM%10+1]
while true;do
read -p "guess number [1-10]:" GUESS
if [ "$N" -eq "$GUESS" ];then
echo OK
break
elif [ "$N" -lt "$GUESS" ];then
echo guess bigger
else
echo guess smaller
fi
done
while 特殊用法
while read name;do
useradd $name
echo $name is created
done < student_name.txt