网络篇
ping
-
ping -c 3 -q -s 65500 -t 255 -i 0.1 -f www.baidu.com
-
-c
:指定ping的次数 -
-q
:只重结果不重过程 -
-s
: 默认情况下,ping命令是以64字节大小的数据包来测试网络联通性的,如需要改变默认数据包的大小,则可以使用参数-s选项。 -
-t
: 指定ping的TTL -
-i
: 指定ping的时间间隔 -
-f
: 以尽可能快的速度来发送数据包
-
DNS
DNS即Domain Name System,负责着整个互联网中“域名—IP地址”的管理和解析工作。
DNS缓存,每个DNS服务器都有一个高速缓存区,里面存放“域名-IP”映射关系,缓存会设置期限,所以如果DNS服务器是从缓存中提取解析数据返回给用户的,会在返回内容中给出“Non-authoritative answer”的字样。
安装 bind-utils软件包,里面包括 host dig nslookup等命令
/etc/resolv.conf
存放dns服务器地址-
DNS协议五元组:DNS是用来做域名和资源转换的,而IP地址只是资源中的一种而已。资源是一个五元组{ DomainName、TimeToLive、Class、Type、Value }
- DomainName(域名):指我们要查询的那个域名。
- TimeToLive(生存期限):表示此域名在各DNS服务器缓存中应保存的时长。
- Class(类别):通常为IN,即Internet。另外还有CH(Chaos)和HS(Hesiod)两类,但目前几乎已经被淘汰了。
- Type(类型):指出这条记录的类型,包括8种,即SOA、A、MX、NS、CNAME、PTR、HINFO和TXT。
- Value(值):针对不同类型,会有不同的值。
-
DNS的八种类型
- SOA: Start Of Authority,表示授权开始,可以获得针对一个域名的最基本信息,包括Mail:管理员邮箱地址、Minimum:外部DNS服务器如果要缓存本DNS服务器的授权数据保存时限等。
- A: IP地址
- MX: Mail eXchanger,当前域名对应的邮箱服务器
- NS: Name Server,给定域名下包含的DNS服务器信息
- CNAME: 别名
- PTR: 从IP地址查询其对应的域名的映射关系
- HINFO: 包含CPU和OS等信息
- TXT: 文本信息,标识有关此域名的一些信息
nslookup
<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 18px; white-space: pre-wrap; display: block; padding: 18px; margin: 0px 0px 10px; line-height: 30px; color: rgb(51, 51, 51); word-break: normal; word-wrap: break-word; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); border-radius: 3px; overflow: scroll;">
$ nslookup www.baidu.com
//本次解析使用的DNS服务器的具体IP地址和端口
Server: 223.5.5.5
Address: 223.5.5.5#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.121
Name: www.a.shifen.com
Address: 61.135.169.125
</pre>
- nslookup - 8.8.8.8 更改dns服务器地址,默认取
/etc/resolv.conf
中第一条记录 - nslookup -type=soa 更改查询的类型。
dig
dig: Domain Information Groper,它是一个DNS查询工具,比nslookup更加强大。
- dig @dnsserver name querytype
- -f: 用-f选项实现从一个文件里读取内容批量查询。
- -t: 设置查询类型
- -q: 显示设置要查询的域名,提高命令的可读性
- -x: 逆向查询
-
dig +tcp @8.8.8.8 www.baidu.com
: 采用TCP协议来进行DNS通信 -
dig +trace roclinux.cn
: 跟踪dig全过程 -
dig +short www.baidu.com
: 精简dig输出
iproute
net-tools软件包是Linux平台中非常老牌的工具包,包括arp、ifconfig、netstat、route等命令,普遍集成于各类Linux发行版中,但是Linux内核2.2版本对网络子系统进行了全面的重构后,net-tools工具集有些力不从心,iproute2做为后浪有将前浪拍在沙滩上的趋势。
ss
ss是 Socket Statistics的缩写,可以获取socket统计信息。ss能够显示更多更详细的有关网络连接状态的信息,而且比netstat更快速、更高效。
-
ss一些常用的选项
-
ss -s
: 查看当前服务器的网络连接统计 -
ss -l
: 查看所有打开的网络端口 -
ss -a
: 查看所有的socket连接-ta
:表示只查看TCP sockets
-
ip
ip是用来管理网络设备和路由的强大命令。
-
ip addr show
展示网络接口信息 -
ip addr add 192.168.1.111/24 dev p1p2
为网络接口添加一个IP地址 -
ip addr del 192.168.1.111/24 dev p1p2
针对一个网络接口删除其IP地址 -
ip route show
查看路由表 -
ip route add 192.168.2.0/24 via 192.168.1.254
增加一条路由规则 -
ip neigh show
查看本服务器的ARP列表 -
ip命令汇总表
tcpdump
tcpdump -i eth0 -nn -X ‘port 53’ -c 1
-i选项:即interface,用来指定网络接口
-nn选项:意思是当tcpdump遇到协议号或端口号时,不要将这些数字转换成对应的协议名称或端口名称。
-X选项:告诉tcpdump命令,需要把协议头和包内容都原原本本地显示出来。tcpdump会同时以16进制和ASCII的形式显示
-c选项:是Count的含义,这个选项用来设置我们希望tcpdump帮我们抓几个包。
-e选项: 增加以太网帧头部信息输出
-l选项:让输出变为行缓冲,如果不加-l选项的话,那么只有当缓冲区全部占满时,tcpdump才会将缓冲区中的内容输出出来
-t选项:输出时不打印时间戳
-v选项:输出更详细的信息,在原有输出内容的基础之上,你还会看到tos值、ttl值、ID值、总长度、校验值等。
-F选项: 指定过滤表达式所在的文件,
tcpdump -i eth0 -c 1 -t -F filter.txt
-w选项:将流量保存到文件中
-r选项:读取raw packets文件
-A选项:tcpdump只会显示ASCII形式的数据包内容
-
过滤流量
host 指定主机名或IP地址
net 指定网络段
port 指定端口
portwange 指定端口范围
src(source) dst(destination) 过滤表达式中没有明确指出某个IP是src还是dst的话,那么默认策略是src或dst都会匹配到。
-
proto[expr:size]语法
- proto就是protocol的缩写,表示这里要指定的是某种协议的名称,比如ip、tcp、icmp、udp等。
- proto[expr:size]中,expr用来指定数据报偏移量,表示从某个协议的数据报的第多少位开始提取内容,默认的起始位置是0。而size表示从偏移量的位置开始提取多少个字节
- 提取了特定内容之后,我们就需要设置我们的过滤条件了。我们可用的“比较操作符”包括:>、<、>=、<=、=和!=,共6个。
- 要想提取TCP协议的SYN、ACK和FIN字段 语法如下
tcp[tcpflags] & tcp-syn; tcp[tcpflags] & tcp-ack; tcp[tcpflags] & tcp-fin;
-
tcpdump 'ip[2:2] > 576'
打印IP包长度超过576字节的网络包。
nc
命令nc,全名netcat, 能胜任跟TCP/UDP相关的一切操作,可以打开TCP连接、发送UDP包、监听端口,端口扫描等等。
-
聊天
- 在A机器上执行
nc -l 12345
- 在B机器上
nc 116.255.245.207(A的IP地址) 12345
- 在A机器上执行
-
端口扫描
nc -z -v -n -w 2 127.0.0.1 20-23- -z选项:一旦建立连接后马上断开,而不发送和接收任何数据。
- -v选项:打印详细输出信息。
- -n选项:直接使用IP地址,而不使用域名服务器来查询其域名。
- -w选项:设置连接的超时时间,单位为秒。
- -u选项:使用UDP建立连接。上面命令无此设置,则表示使用TCP建立连接。
-
传输文件
- 文件发送端启动监听端口,准备好文件
nc -v -l 12345 < book_out.txt
- 文件的接收端接收服务端的数据,并重定向到文件中
nc -v -n 116.255.245.207 12345 > book_in.txt
- 文件发送端启动监听端口,准备好文件
ssh-copy-id
一个脚本方便从A机器建立到B机器的ssh信任关系。
rsync
用于源端和目的端文件、文件夹的实时同步
wget
命令行下的网络下载工具,支持HTTP、HTTPS、FTP协议的下载。
进程和性能篇
uptime
uptime命令,有两大功能:一个是查看机器的开机时长,另一个是查看CPU负载情况。
<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 18px; white-space: pre-wrap; display: block; padding: 18px; margin: 0px 0px 10px; line-height: 30px; color: rgb(51, 51, 51); word-break: normal; word-wrap: break-word; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); border-radius: 3px; overflow: scroll;">
$ uptime
22:36:58 up 11:12, 1 user, load average: 0.00, 0.00, 0.00
系统当前时间 主机已运行时间 用户**连接**数 最近1、5、15分钟的系统平均负载
+ **系统平均负载:** 运行队列中的平均进程数,一般的经验来看,单核负载在0.7以下是安全的,超过0.7就需要进行优化了。
+ **/proc/loadavg**文件中也记载了系统平均负载信息。
</pre>
free
- buffers是块设备I/O相关的缓存页,数据先写到buffer中,再再后台慢慢写入设备。
- cached是普通文件相关的缓存页,从硬盘读取数据内容先暂存到cache里,减少从底盘读数据的次数。
SWAP空间
SWAP(交换分区)和Windows中的虚拟内存都是将一部分硬盘空间虚拟成内存,来缓解内存使用紧张的问题。
- 当Linux系统发现物理内存使用量不足时就会选择内存中较长时间没有被访问和更新的内存数据,将这些内存数据临时写到SWAP中,并释放内存中相应的空间
- 等到某个程序要使用SWAP中的数据时,系统会再次从SWAP中读取之前保存的数据,并写回到物理内存中。
- 对于服务器来说,SWAP建议设置为内存的1~2.5倍之间的数值,可以防止内存耗尽的窘境。
- 如何定义内存不足?
cat /proc/sys/vm/swappiness
中的参数会来辅助控制“内存不足”的界限。
vmstat
- vmstat输出的第一行数字,是自服务器启动至今的各项指标的平均值,而非最新状态值,从第二行开始的,才能反映服务器当前最新状态。
- 如果cache的数值较大,则说明系统缓存了较多的磁盘数据,利于磁盘I/O性能的提升。
- si和so则是读写SWAP的量,这两个值如果长期大于0,则表示系统需要经常读写交换分区,这会很消耗CPU资源和磁盘I/O性能。
- 如果free的数值很低,甚至接近0了,也不一定就是系统内存快耗尽了。要同时看buff和cache的量,大部分情况是buff和cache占用了很多内存资源,而当系统真正需要内存时,buff和cache是可以随时被系统征调回来的。
- 如果发现bi和bo的值很大,则说明系统正在进行大量的磁盘读写操作。
- 如果us的数值经常大于50%,则说明用户进程所占用的CPU时间较多
- 而sy是内核所消耗的CPU时间,这个数值不应该很高。如果很高,则一定是系统哪里出了问题。
- 如果wa较高,则说明CPU总是在等待I/O操作。这表明磁盘已经成为主要瓶颈
- r表示的是正在运行队列中的任务数,如果这个数值总是超过服务器的CPU核数,则说明CPU已经成为性能瓶颈
mpstat
- mpstat,全称是multiprocessor statistics,擅长多处理器的统计工作。
top
通过top,我们可以了解到服务器的CPU负载情况、内存状态、SWAP使用状况,以及详尽的进程级运行状态,可谓应有尽有。
进程数据
- VIRT(Virtal Memory)中文为虚拟内存。一个进程,无论是通过malloc/calloc系列函数申请的内存,还是堆/栈所占用的内存,抑或是全局变量等所占用的内存,都属于VIRT范畴。所以VIRT是进程所占用内存的最大集。 + RES(Resident Memory),中文叫作常驻内存。在malloc申请了物理内存空间之后,并非会立即使用到这块物理内存,所以,系统会在进程真正要使用到这块物理内存时,才正式将物理内存分配给这个进程。所以,RES表示的是一个进程真正在使用的物理内存的大小,而非申请的物理内存的大小。
iostat
iostat -d -k 1 3
- -d选项:只显示磁盘的使用状态
- -k选项:使用KB作为单位
- 1: 采样时间,1s
- 3: 采样次数,3次
- iostat输出的第一组数据表示从系统启动到本命令执行期间的统计结果
- -x选项展示了更多的磁盘统计数据
pidof
- 查询一个运行程序的PID
pidof sshd
- -x选项:找出Shell脚本的PID
- -s选项: 只输出一个PID
sar
将系统性能指标信息按时间间隔数据到文件中。
lsof
lsof,即list open files 用来查看进程打开的文件、目录和套接字等一系列信息。
-
lsof filename
: 通过文件名来定位打开该文件的进程 -
lsof -d N
:根据文件描述符定位进程 -
lsof -p PID
:查询进程打开了哪些文件 -
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
:查看哪些程序占用端口
fuser
fuser和lsof功能对比
ps
查看服务器上有哪些进程,属于哪些用户,消耗了多少CPU资源,占了多少内存
- a:显示各终端上的所有进程
- u:展示进程所属的用户名
- x: 对于没有关联到终端上的进程也展示出来
kill
-
kill [选项] [进程号]
向进程发送特定信号 - kill -l 查看kill可以发出哪些信号
nohup
要想让运行的命令不因用户注销、网络断开等因素而中断,有两个基本思路:
- 让进程对SIGHUP信号免疫。免疫宗的成员有nohup和disown。
- 让进程在新的会话中运行。会话宗的成员有setid和screen。
系统管理篇
uname
uname -a 展示系统信息
用户ID和用户组
- 实际用户,英文术语叫作real user id,就是登录Shell的那个时刻所使用的用户ID。用who am i所展示出来的就是“实际用户”。
- 登录进Shell之后,使用su或su-切换到的用户ID,叫作有效用户。用whoami所展示出来的就是“有效用户”。
service
service [服务名] [start/stop/restart/status]
-
/etc/init.d
目录下的这些文件就是可以通过service命令掌控的服务。 - service只是一个脚本,它所做的只是把用户的操控动作(start/stop/restart/status)传递给/etc/init.d中相应的命令而已。
chkconfig
/etc/init.d/中包含所有可用的服务;
/etc/rc.d/中设置有7个文件夹,以rcN.d形式命名,分别对应7个运行等级;
每一个rcN.d文件夹中的文件全部是软链形式,分别链接到/etc/init.d/中的服务上,也就表明了当前的运行等级对应着哪些服务;
-
rcN.d中的软链文件命名规则;
- K+整数+服务名;
- S+整数+服务名。
- 以K开头的软链文件,表示要关闭对应的服务。以S开头的软链文件,表示要启动对应的服务。
lsmod
可以实现把某些功能代码封装成模块动态地装载到内核中,当内核需要用到这个功能时再读取使用。