一網絡配置
1.將Linux主機接入到網絡,需要配置網絡相關設置
主機名
IP/netmask
路由:默認網關
DNS服務器
2.網絡配置命令
配置網絡接口 ifconfig命令
ifconfig [interface]
ifconfig -a
ifconfig IFACE [up|down]
路由管理命令 route 命令
查看:route -n
添加:route add
刪除:route del
顯示網絡連接 netstat命令
-t: tcp協議相關
-u: udp協議相關
-w: raw socket相關
-l: 處於監聽狀態
-a: 所有狀態
-n: 以數字顯示IP和端口
-e:擴展格式
-p: 顯示相關進程及PID
配置Linux網絡屬性:ip 命令
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址時指明網卡別名
[scope {global|link|host}]:指明作用域
global: 全局可用
link: 僅鏈接可用
host: 本機可用
添加路由:ip route add
主機路由:IP 網絡路由:NETWORK/MASK
添加網關:ip route add default via GW dev IFACE
刪除路由:ip route del TARGET
顯示路由:ip route show|list
清空路由表:ip route flush [dev IFACE]
ss命令
-t: tcp協議相關
-u: udp協議相關
-w: 裸套接字相關
-x:unix sock相關
-l: listen狀態的連接
-a: 所有
-n: 數字格式
-p: 相關的程序及PID
-e: 擴展的信息
-m:內存用量
-o:計時器信息
ss -l 顯示本地打開的所有端口
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established 顯示所有已建立的 ssh連接
ss -o state established 顯示所有已建立 的HTTP連接
ss -s 列出當前socket詳細信息
3.網絡配置文件
IP、MASK、GW、DNS相關配置文件
/etc/sysconfig/networkscripts/ifcfg-IFACE
路由相關的配置文件
/etc/sysconfig/network-scripts/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE
注意:需service network restart生效
ONBOOT:在系統引導時是否激活此設備
TYPE:接口類型;常見有的Ethernet, Bridge
UUID:設備的惟一標識
IPADDR:指明IP地址
NETMASK:子網掩碼
GATEWAY: 默認網關
DNS1:第一個DNS服務器指向
DNS2:第二個DNS服務器指向
USERCTL:普通用戶是否可控制此設備
PEERDNS:如果BOOTPROTO的值爲“dhcp”,YES將允許dhcp server分配 的dns服務器信息直接覆蓋至/etc/resolv.conf文件,NO不允許修改resolv.conf
配置當前主機的主機名:
hostname [HOSTNAME] /etc/sysconfig/network
bonding配置
創建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
查看bond0狀態:/proc/net/bonding/bond0
刪除bond0
ifconfig bond0 down
rmmod bonding
創建軟件網橋
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
查看配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
工具包 yum install bridge-utils
查看網橋 brctl show
查看CAM表 brctl showmacs br0
添加和刪除網橋 brctl addbr | delbr br0
添加和刪除網橋中網卡 brctl addif | delif br0 eth0
注意:NetworkManager只支持以太網接口接口連接到網橋,不支持聚合接口
二進程和計劃任務
內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID(Process ID,PID)號碼被用來標記各個進程
UID、GID、和SELinux語境決定對文件系統的存取和訪問權限
通常從執行進程的用戶來繼承
進程創建:
init:第一個進程
進程:都由其父進程創建,fork(),父子關係,CoW
進程類型:
守護進程: daemon,在系統引導過程中啓動的進程,和終端無關進程
前臺進程:跟終端相關,通過終端啓動的進程
注意:兩者可相互轉化
進程狀態:
運行態:running
就緒態:ready
睡眠態:可中斷:interruptable 不可中斷uninterruptable
停止態:stopped,暫停於內存,但不會被調度,除非手動啓動
僵死態:zombie,結束進程,父進程結束前,子進程不關閉
進程優先級:
系統優先級:數字越小,優先級越高
0-139:各有140個運行隊列和過期隊列
實時優先級: 99-0 值最大優先級最高
nice值:-20到19,對應系統優先級100-139
查看進程命令ps
選項:默認顯示當前終端中的進程
a 選項包括所有終端中的進程
x 選項包括不鏈接終端的進程
u 選項顯示進程所有者的信息
f 選項顯示進程樹,相當於 --forest
k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem
L 顯示支持的屬性列表
搜索進程
最靈活:ps 選項 | 其它命令
按預定義的模式:
pgrep pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
按確切的程序名稱:/sbin/pidof pidof bash
kill命令:向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開 頭(可省略),不區分大小寫
顯示當前系統可用信號: kill –l 或者 trap -l
常用信號:man 7 signal
1) SIGHUP 無須關閉進程而讓其重讀配置文件
2) SIGINT 中止正在運行的進程;相當於Ctrl+c
3) SIGQUIT 相當於ctrl+\
9) SIGKILL 強制殺死正在運行的進程
15) SIGTERM 終止正在運行的進程
18) SIGCONT 繼續運行
19) SIGSTOP 後臺休眠
並行運行
同時運行多個進程,提高效率
方法1
vi all.sh f1.sh& f2.sh& f3.sh&
方法2 (f1.sh&);(f2.sh&);(f3.sh&)
方法3 { f1.sh& f2.sh& f3.sh& }
計劃任務
at 命令:at [option] TIME
常用選項:
-V 顯示版本信息
-t time 時間格式 [[CC]YY]MMDDhhmm[.ss]
-l 列出指定隊列中等待運行的作業;相當於atq
-d 刪除指定的作業;相當於atrm
-c 查看具體作業任務
-f /path/file 指定的文件中讀取任務
-m 當任務被完成之後,將給用戶發送郵件,即使沒有標準輸出
週期性任務計劃:cron
相關的程序包:
cronie:主程序包,提供crond守護進程及相關輔助工具
crontabs:包含CentOS提供系統維護任務
系統cron任務:/etc/crontab
時間格式
yearly 0 0 1 1 *
annually 0 0 1 1 *
monthly 0 0 1 * *
weekly 0 0 * * 0
daily 0 0 * * *
hourly 0 * * * *
reboot Run once after reboot
系統的計劃任務:
/etc/crontab 配置文件
/etc/cron.d/ 配置文件
/etc/cron.hourly/ 腳本
/etc/cron.daily/ 腳本
/etc/cron.weekly/ 腳本
/etc/cron.monthly/ 腳本
三sehll腳本進階
for循環
for 變量名 in 列表;do 循環體 done
執行機制: 依次將列表中的元素賦值給“變量名”; 每次賦值後即執行一次循環體; 直 到列表中的元素耗盡,循環結束
列表生成方式:
(1) 直接給出列表
(2) 整數列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令 $(COMMAND)
(4) 使用glob,如:*.sh
(5) 變量引用 $@, $*
while循環
while CONDITION; do 循環體 done
CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之後 會再次做判斷;條件爲“true”,則執行一次循環;直到條件測試狀態爲“false” 終止循環
因此CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被 修正
進入條件:CONDITION爲true
退出條件:CONDITION爲false
循環控制語句
continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層爲 第1層
while CONDTIITON1; do CMD1 ...
if CONDITION2; then continue
fi CMDn ... done
break [N]:提前結束第N層循環,最內層爲第1層
while CONDTIITON1; do CMD1 ...
if CONDITION2; then break
fi CMDn ... done
shift [n]
用於將參量列表 list 左移指定次數,缺省爲左移一次。
參量列表 list 一旦被移動,最左端的那個參數就從列表中刪除。while 循環遍 歷位置參量列表時,常用到 shift
./doit.sh a b c d e f g h ./shfit.sh a b c d e f g h
select循環與菜單
select variable in list do 循環體命令 done
select 循環主要用於創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上, 並顯示 PS3 提示符,等待用戶輸入
用戶輸入菜單列表中的某個數字,執行相應的命令
用戶輸入被保存在內置變量 REPLY 中
select 是個無限循環,因此要記住用 break 命令退出循環,或用 exit 命令終止 腳本。也可以按 ctrl+c 退出循環
select 經常和 case 聯合使用
與 for 循環類似,可以省略 in list,此時使用位置參量
函數
函數function是由若干條shell命令組成的語句塊,實現代碼重用和模塊化編程
它與shell程序形式上是相似的,不同的是它不是一個單獨的進程,不能獨立運 行,而是shell程序的一部分
函數和shell程序比較相似,區別在於
Shell程序在子Shell中運行
Shell函數在當前Shell中運行。因此在當前Shell中,函數可以對shell中變 量進行修改
定義函數
函數由兩部分組成:函數名和函數體
語法一:
f_name (){
...函數體...
}
語法二:
function f_name {
...函數體...
}
語法三:
function f_name () {
...函數體...
}
函數的定義和使用:
可在交互式環境下定義函數
可將函數放在腳本文件中作爲它的一部分
可放在只包含函數的單獨文件中
調用:函數只有被調用纔會執行
調用:給定函數名
函數名出現的地方,會被自動替換爲函數代碼
函數的生命週期:被調用時創建,返回時終止
函數返回值:
函數的執行結果返回值:
(1) 使用echo等命令進行輸出
(2) 函數體中調用命令的輸出結果
函數的退出狀態碼:
(1) 默認取決於函數中執行的最後一條命令的退出狀態碼
(2) 自定義退出狀態碼,其格式爲:
return 從函數中返回,用最後狀態命令決定返回值
return 0 無錯誤返回
return 1-255 有錯誤返回
交互式環境定義使用函數
示例:
dir() {
> ls -l
> > }
定義該函數後,若在$後面鍵入dir,其顯示結果同ls -l的作用相同 dir
該dir函數將一直保留到用戶從系統退出,或執行了如下所示的unset命令 unset dir
腳本中定義使用函數
函數在使用前必須定義,因此應將函數定義放在腳本開始部分,直至shell首次發現它 後才能使用
調用函數僅使用其函數名即可
使用函數文件
可以將經常使用的函數存入函數文件,然後將函數文件載入shell
文件名可任意選取,但最好與相關任務有某種聯繫。例如:functions.main
一旦函數文件載入shell,就可以在命令行或腳本中調用函數。可以使用set命 令查看所有定義的函數,其輸出列表包括已經載入shell的所有函數
若要改動函數,首先用unset命令從shell中刪除函數。改動完畢後,再重新載 入此文件
函數可以接受參數:
傳遞參數給函數:調用函數時,在函數名後面以空白分隔給定參數列表即可; 例如“testfunc arg1 arg2 ...”
在函數體中當中,可使用$1, $2, ...調用這些參數;還可以使用$@, $*, $# 等特殊變量
函數變量
變量作用域:
環境變量:當前shell和子shell有效
本地變量:只在當前shell進程有效,爲執行腳本會啓動專用子shell進程; 因此,本地變量的作用範圍是當前shell腳本程序文件,包括腳本中的函數
局部變量:函數的生命週期;函數結束時變量被自動銷燬
注意:如果函數中有局部變量,如果其名稱同本地變量,使用局部變量
在函數中定義局部變量的方法 local NAME=VALUE
數組
變量:存儲單個元素的內存空間
數組:存儲多個元素的連續的內存空間,相當於多個變量的集合
數組名和索引
索引:編號從0開始,屬於數值索引
注意:索引可支持使用自定義的格式,而不僅是數值格式,即爲關聯索引, bash4.0版本之後開始支持
bash的數組支持稀疏格式(索引不連續)
聲明數組:
declare -a ARRAY_NAME
declare -A ARRAY_NAME 關聯數組
注意:兩者不可相互轉換
expect命令
選項
-c:從命令行執行expect腳本,默認expect是交互地執行的
-d:可以輸出輸出調試信息
expect中相關命令
spawn 啓動新的進程
send 用於向進程發送字符串
expect 從進程接收字符串
interact 允許用戶交互
exp_continue 匹配多個字符串在執行動作後加此命令
學習筆記5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.