06葵花寶典之linux網絡、進程管理和shell循環語句
作為服務器,其輸入輸出功能在大多數時候都是通過網絡提供的,網絡功能對于服務器而言是至關重要的。
一、OSI七層模型和TCP/IP四層模型
1、OSI七層模型
OSI七層模型是參考ISO(International Standard Organization國際標準化組織)所指定的一個用于通信系統間互聯的標準體系。 OSI(Open System Interconnetcion,開放系統互聯)是一個參考模型。其從底層到高層分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層
1-1、物理層
物理層用于定義物理連接的手段,以及數據的bit流信號如何通過設備的電氣特性進行傳輸;比如,可以通過雙絞線傳輸,也可以通過WIFI傳輸,還可以通過同軸電纜傳輸,這些不同的物理鏈路方法中,也有不同的定義來規定信號的電氣特性;也就是如何將數據的0、1轉換為光、電或者其他信息進行傳輸,并在接收端還原出來。在這一層上,數據一般稱之為數據流。
1-2、數據鏈路層
其主要作用是對物理層收的的0、1信號進行分組和解釋,或者說,將上層的數據進行分組包裝后變成0、1信號,交給物理層進行傳輸,在這層上,數據一般稱之為數據幀。數據幀一般有標頭和數據兩部分,標頭包括數據的一些說明向,數據則是上層協議需要傳輸的內容。
1-3、網絡層
在網絡層,可以將一個大的網絡,劃分為小的網絡,這個是通過我們常說的IP地址來實現的。網絡層主要的主要目的,是隔離數據鏈路層的一些廣播數據,以及實現網絡到網絡的尋址,也就是我們常說的路由功能。
1-4、傳輸層
通過前三層,基本可以實現主機到主機的通信了,但主機上運行的軟件或者進程很多,收到的數據或者發出的數據具體是到那個軟件或者那個進程呢?這就需要進程的端口號來標示。傳輸層可以建立起A主機的某個進程到B主機的某個進程間的通信。
1-5、會話層
主機之間建立、管理、終止會話。
1-6、表示層
各類型文件或者數據采用何種方式進行表示。比如,一張圖片是采用那種格式進行編碼,如何加密等等
1-7、應用層
使用應用層來處理網絡應用。
2、TCP/IP四層模型
TP/IP四層模型可以看作是OSI七層模型的一個具體實現,也是現在網絡上設備之間通信的一個事實標準,它將七層模型中的物理層和數據鏈路層合起來稱為數據鏈路層,將會話層、表示層和應用層合起來稱為應用層。
不論是七層模型還是四層模型,對于網絡連接而言,需要使用到的常用協議或者標準有:ARP(地址解析協議,工作在數據鏈路層)、IP(網際協議,工作在網絡層)、TCP/UDP(傳輸控制協議/用戶數據報協議,工作在傳輸層)、Http/Ftp(超文本傳輸協議/簡單文件傳輸協議)等等。
二、iproute命令
在linux上配置查看或更改設備的屬性,通常使用ip、ifconfig命令。
1、ifconfig
ifconfig:configure a network interface,配置網絡接口。
常見使用方法如下:
1-1、ifconfig 不跟任何選項或參數,用于顯示當前主機上沒有被禁止的網絡接口的配置信息。如:
[root@koala ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:0D:FF:B8
inet addr:192.168.1.169 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe0d:ffb8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:214 errors:0 dropped:0 overruns:0 frame:0
TX packets:188 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23778 (23.2 KiB) TX bytes:31448 (30.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:240 (240.0 b) TX bytes:240 (240.0 b)
也可以跟一個指定接口,只顯示該接口的網絡配置信息,如: ifconfig eth0
1-2、ifconfig INTERFACE up|down 啟用或禁用名稱為INTERFACE的接口
如:ifconfig eth0 down 禁用eth0這個網絡接口。
1-3、ifconfig INTERFACE ip/mask_len 配置接口地址為指定地址
如:配置接口地址為:192.168.0.1,掩碼為255.255.0.0(掩碼長度16位)
[root@koala ~]# ifconfig eth0 192.168.0.1/16
刪除接口地址:
ifconfig eth0 del ip
2、ip
ip命令用于顯示或者設置路由、設備網絡配置、策略路由等信息
2-1、ip link show/ip addr show 顯示網絡接口相關信息,后面可跟具體接口名稱,顯示該接口信息
ip addr show 顯示更詳細的信息,包括接口的ip地址以及輔助地址(secondary)
[root@koala ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0d:ff:b8 brd ff:ff:ff:ff:ff:ff
[root@koala ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:55:aa:55:bb:55 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.250/24 brd 192.168.1.255 scope global eth0
inet 192.168.2.169/24 scope global eth0
inet 192.168.1.169/24 scope global secondary eth0
inet6 fe80::255:aaff:fe55:bb55/64 scope link
valid_lft forever preferred_lft forever
2-2、ip link set DEVICE 設置
可以設置的參數有 up|down 接口的開啟或關閉 arp {up|down} 接口arp協議的開啟或關閉 mtu 設置接口的mtu值,最大傳輸單元 address 接口的物理地址,格式 AA:BB:CC:DD:EE:FF alias 接口的別名 name 接口名稱(重命名接口名稱)
2-3、ip addr {add|del} ipaddress dev STRING
[root@koala ~]# ip addr add 192.168.2.169/24 dev eth0
為eth0接口增加ip地址:192.168.2.169/24
[root@koala ~]# ip addr del 192.168.2.169/24 dev eth0
刪除接口的192.168.2.169/24這個地址
注意:無論是ifconfig還是ip命令,其都是立即有效,但是服務或系統重啟后,該配置無效。要使設置的ip相關參數重啟后仍然有效,需要修改配置文件(/etc/sysconfig/network-scripts/,以ifcfg-接口名為名稱的文件)
如:配置eth0接口(在Cetnos6,網絡接口一般以eth#命名,如ifcfg-eth0;在Centos7,網絡接口一般以eno167777##命名,如eno16777736)的ip為靜態ip,192.168.1.185/24,網關192.168.1.1,DNS114.114.114.114等,配置文件如下:
DEVICE=eth0
HWADDR=00:0C:29:0D:FF:B8
TYPE=Ethernet
UUID=02f6e8e0-dc1e-4f97-a958-ea7bd4b65f76
ONBOOT=yes
IPADDR=192.168.1.185
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
NM_CONTROLLED=yes
BOOTPROTO=static
三、進程相關命令 htop vmstat
1、ps
ps顯示當前系統上的進程信息。常用選項為
a 顯示用戶的進程
u 以用戶格式顯示,主要顯示user(用戶)、PID(進程號)、%cpu(CPU占用率)、%mem(內存占用率)、vsz(虛擬內存大?。?、RSS(駐留實際內存大?。?、tty(終端號)、stat(進程狀態)、start(起始時間)、time(累計運行時間)、command(哪個命令發起的進程)
x 與終端無關的進程
-e 顯示所有進程
-f 全格式顯示(PPID,該進程的父進程號)
-H 以層級結構顯示(hierarchy)
o 以指定格式顯示進程
ps aux 以用戶格式顯示所有進程。
ps -efH
ps o pid,ni,tty,ppid,rtprio,comm,stat
ps -e o pid,ni,tty,stat
stat:進程狀態有: R,running運行態;S,Interrupt sleeping可中斷睡眠態;D,Uninterrupt sleeping不可終端睡眠態;T,stopped停止態;Z,zomble僵死態;+,前臺進程,N 低優先級;<,高優先級
2、htop
htop是一個交互式的進程信息查看工具,可以認為是top的升級版。htop并不在CentOS的光盤所帶和鏡像倉庫中,他在epel倉庫中,安裝前,首先要配置好epel倉庫。
使用htop命令進入交互式界面,如圖
使用F1-F10進入相應的模式
F1幫助 常用的命令有: H用戶進程或線程開關 K系統進程或線程開關 F選中鼠標點擊的進程 P M T 使用cpu% mem% Time來進行排序q
F2設置 主要用于設置htop命令的默認選項 meters 設置上方左右的顯示信息,默認為cpu mem swp tasks loadaverage uptime等 display options 設置顯示信息 color columns設置需要顯示的進程屬性信息。
F3匹配第一個含查找字符串的進程,使用F3切換至下一個匹配到的,此時,仍然顯示所有進程
F4匹配查找到字符串的進程,其他未被字符串匹配的進程不顯示
F5以樹狀格式顯示(或關閉樹狀結構顯示)
F6展開或關閉選定的樹狀結構
F7將選中的進程的nice值變小(即優先級變高),root用戶有效
F8將選中的進程的nice值變大(即優先級變低),root用戶有效
F9kill選中的進程,ENter確定
F10退出htop
常用選項
-u username 顯示指定用戶的進程
-s COLUMN 以指定列排序(使用htop --sort-key help查看可以用于排序的列,也可以在F2中查看可以用于排序的列)
3、vmstat
顯示虛擬內存統計信息
常用選項-s 顯示內存統計數據
當只是有vmstat命令時,顯示內容信息解釋如下:
[root@localhost tmp]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 646008 1240 245436 0 0 9 3 22 32 0 0 100 0 0
procs 進程
r 等待運行的,指cpu隊列長度
b 被阻塞的進程,也就是不可終端睡眠狀態的進程數量
memory 內存
swpd 交換內存使用總是,0表示未啟用swap分區
free 空閑內存
buff 緩沖區
cache 緩存
swap 交換分區
si swapin 換進速率 kb/s
so swapout 換出速率
io 塊設備
bi blockin 從塊設備讀入
bo 寫入塊設備
system
in interrupt 終端產生速率
cs context switch 上下文轉換速率
cpu
us 用戶空間進程
sy 系統
id 空閑
wa 等待
st 被虛擬機占用的(stolen)
四、使用until和while分別實現192.168.0.0/24
網段內,地址是否能夠ping通,弱ping通則輸出”success!”,若ping不通則輸出”fail!”
while循環:條件為真,則執行循環體,條件一旦為假,則退出循環。
#!/bin/bash
#
declare -i i=1
while [ $i -lt 255 ];do
if ping -c 2 "192.168.1.$i"> /dev/null;then
echo ping "192.168.1.$i" success!
else
echo ping "192.168.1.$i" fail!
fi
i=$i+1
done
ping -c 說明發的ping包次數,將其送給/dev/null。如果ping成功,則其命令執行狀態結果為真,輸出success,否則輸出fail
until循環:條件為假,則執行循環體,條件一旦為真,則退出循環。
#!/bin/bash
#
declare -i i=1
until [ $i -ge 15 ];do
if ping -c 2 "192.168.1.$i"> /dev/null;then
echo ping "192.168.1.$i" success!
else
echo ping "192.168.1.$i" fail!
fi
i=$i+1
done
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96211