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.178linux.com/96211