學習筆記5

一網絡配置 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 匹配多個字符串在執行動作後加此命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章