在此接上一篇
4、网络命令相关的操作命令
linux基础(六)----linux命令系统学习----网络操作命令
网络配置: ifconfig、 ip
连通性探测: ping、 traceroute、 telnet、 mtr
网络连接: netstat、 ss、 nc、 lsof
流量统计: ifstat、 sar、 iftop
交换与路由: arp、 arping、 vconfig、 route
防火墙: iptables、 ipset
域名: host、 nslookup、 dig、 whois
抓包: tcpdump
虚拟设备: tunctl、 brctl、 ovs
4.1、网络配置
最重要的两个工具就是 ifconfig 和 ip,这两个工具分别来自两个工具包 net-tools 和 iproute2其中,
net-tools 包还包含如 route、 netstat、 tc、 ifstat 等等常用的工具,
不过, net-tools 包已经逐步在被 iproute2 包替换。对于我们学习来说,不妨都学习下,这样也有助于理解和记忆。
4.1.1 ifconfig
ifconfig 通常是用来查看网卡的信息(比如 IP 地址、收发包及丢包情况等),以及配置网卡(如启停网卡,修改网卡 MTU,修改 IP、MAC 地址等)
ifconfig
ifconfig eno2
# 给网卡配置IP地址
ifconfig eno2 192.168.2.10
ifconfig eno2 192.168.2.10 netmask 255.255.255.0
ifconfig eno2 192.168.2.10 netmask 255.255.255.0 broadcast 192.16.2.25
开关网卡
ifconfig eno2 down
ifconfig eno2 up
4.1.2 IP
ip 是非常强大的工具,可以替换 net-tools 包的所有工具,如常见的 ifconfig、 netstat、 route、 arp 等,比如查看网卡信息:
ip addr ls dev eno2
# 查看路由
ip route
# 查看arp信息
ip neigh
更多的信息可以采用 man ip操作得到
4.2 连通性探测
连通性探测意在使用工具探测两个网络节点之间的连通性,常用的有 ping、 telnet、 traceroute、 tracepath、 mtr 等工具。
4.2.1 ping
这个命令通常用来判断网络的连通性和网速情况,偶尔用来查看域名的 IP,比如:
ping www.baidu.com
使用 -c 参数可以指定发送数据包的个数, -w 指定最长等待时间, -I指定发送数据包的网卡。
ping 只能使用 ipv4,要使用 ipv6,可以用 ping6 命令。
4.2.2 telnet
telnet 通常用作远程登录,用来确定远程服务的状态,探测远程服务器的某个端口是否能访问,也可以探测本地的,如:
telnet localhost 22
4.2.3 traceroute & tracepath
traceroute 主要用来探测从源主机到目标主机之间的每一跳路由节点,通常和 ping 结合起来排查网络故障, ping 测连通性和网速,如果网络不通,可以借由 traceroute 进一步排查是哪个路由节点出问题了。如果网络卡顿,也可以判断出哪里是瓶颈。
traceroute -I -n www.baidu.com
可以看到,从主机到 baidu.com 共经历了 30 跳,每一跳都统计了响应时间。
4.2.4 mtr
mtr 全称是 mytraceroute,是一个集大成的工具,它集成了 ping、 traceroute、 nslookup 的功能,诊断网络问题非常方便。
mtr 有个好处就是能够 实时刷新 数据,比如 mtr-n www.baidu.com 可以看到,从本地到百度经过的所有路由,并显示每个路由间的丢包率、响应时间等。
常用参数:
mtr -r 不会刷新,一次性打印 10个包的统计结果
mtr -s 用来指定ping数据包的大小
mtr -n no-dns不对IP地址做域名反解析
mtr -a 来设置发送数据包的IP地址,这个用于主机有多个IP时。
mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -c 指定发送多少个数据包
mtr -4 IPv4
mtr -6 IPv6
4.3 网络连接操作
主要涉及到对网络连接状态的统计,比如连接打开了哪些端口、TCP/UDP、socket 的状态是什么等等。常用的工具有 netstat、 ss、lsof、 netcat等。
4.3.1 netstat
netstat 用于查看当前网络的连接情况,能够查看所有的网络连接,包括 unix socket 等,也是集多种工具于一身的组合工具。最常用的就是用来检查本地系统都打开了哪些端口:
netstat -lnpt
netstat -a
netstat -i 显示网络接口信息
netstat -s 显示所有网络协议栈信息
netstat -r 显示路由表信息
netstat -at 列出所有 TCP 端口
netstat -au 列出所有 UDP 端口
netstat -lt 列出所有监听 TCP 端口的 socket
netstat -lu 列出所有监听 UDP 端口的 socket
netstat -lx 列出所有监听 UNIX 端口的 socket
netstat -ap | grep ssh 找出程序运行的端口
netstat -an | grep ':80' 找出运行在指定端口的进程
4.3.2 ss
ss 和 netstat 类似,也是用来查看网络连接统计的工具,它的输出也和 netstat 类似,甚至显示更多连接状态信息,它最大的优势在于比 netstat 快,在服务器维持上万个连接的情况下,这种优势就体现得比较明显。
常用参数:
-l 查看处于LISTEN状态的连接
-t 查看tcp连接
-4 查看ipv4连接
-n 不进行域名解析
通常使用 ss-tln4 查看本地监听的所有端口。
5、Linux文本操作相关的命令
包含: wc 、cut、sort 、uniq、grep、sed、awk
分别的作用是:统计命令、切分命令、排序命令、去重命令、查找命令、替换/查找/删除命令 sed 以及强大的文本分析命令 awk
5.1 统计命令wc
统计文件里面有多少单词,多少行,多少字符。
# wc [-lwm]
选项与参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
# 统计一个文件中 "wang" 出现的行数
grep "wang" filename | wc -l
#wc /etc/passwd
40 45 1719 /etc/passwd
#wc -l /etc/passwd #统计行数,在对记录数时,很常用
/etc/passwd #表示系统有40个账户
#wc -w /etc/passwd #统计单词出现次数
/etc/passwd
#wc -m /etc/passwd #统计文件的字节数
5.2.切分命令——cut
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]
5.3 排序命令——sort 函数
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:
sort [-bcfMnrtk][源文件][-o 输出文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-f 排序时,忽略大小写字母。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-k 选择以哪个区间进行排序。
-u 去重操作
5.4 uniq的使用
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
# uniq [-icu]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
-u :只显示唯一的行
直接删除未经排序的文件,将会发现没有任何行被删除:
#uniq testfile
排序文件,默认是去重:
#cat words | sort |uniq
排序之后删除了重复行,同时在行首位置输出该行重复的次数:
#sort testfile | uniq -c
仅显示存在重复的行,并在行首显示该行重复的次数:
#sort testfile | uniq -dc
仅显示不重复的行:
#sort testfile | uniq -u
5.5 grep 操作
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户
-c:只输出匹配行的计数。
-i:忽略大小写进行匹配。
-v:反向查找,只打印不匹配的行。
-n:显示匹配行的行号。
-r:递归查找子目录中的文件。
-l:只打印匹配的文件名。
-c:只打印匹配的行数。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
<:从匹配正则表达 式的行开始。
>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0
# 写出查询file.txt以abc结尾的行
grep "abc$" file.txt
# 在/var/sync/log/cef_watchd-20080424.1og文件中查找大小写不敏感“mysql"字符串中的命令是
grep -i "mysql" /var/sync/log/cef_watchd-20080424.1og
# 显示file文件里匹配foo字串那行及前5行、匹配foo及后5行
grep -c "foo" file # 计算满足 “foo”的行数有多少
grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
#或者 采用grep -C5 "foo" file
#当然这里不带""也是可以的,但是不知道是不是存在其他的问题?
grep -B5 foo file 显示foo及前5行 Befor 数字之间距离可以省略也可以不省略,看看自己的意愿既可。
grep -A5 foo file 显示foo及后5行 After
#删除文件中的空行
grep -v '^$' filename
5.6 替换查找和删除sed
5.7 awk入门操作
5.7.0 awk操作的简单介绍
awk处理过程如下:
1. 首先读入文件流的一行到模式空间;
2. 在模式空间内,对内容进行模式匹配处理;
3. 然后输出处理后的数据内容;
4. 清空当前模式空间;
5. 读取第二行输入流到模式空间;
6. 又开始对模式空间内的第二行输入数据进行处理。
总体可以分为以下三步:
- 读(Read):AWK 从输入流(文件、管道或者标准输入)中读入一行然后将其存入内存中。
- 执行(Execute):对于每一行输入,所有的 AWK 命令按顺序执行。 默认情况下,AWK 命令是针对于每一行输入,但是我们可以将其限制在指定的模式中。
- 重复(Repeate):一直重复上述两个过程直到文件结
5.7.1 基本用法
awk 是一个强大的文本分析工具,awk就是把文件逐行读入,并且以空格为默认分隔符将每行切片,切开的部分在进行各种分析处理操作。
awk '{pattern + action}' {filenames}
awk 动作 文件名
# 示例
awk '{print $0}' demo.txt
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的;awk每接收文件的一行,然后执行相应的命令,来处理文本。
$ echo 'this is a test' | awk '{print $0}'
this is a test
awk
会根据空格和制表符,将每一行分成若干字段,依次用$1
、$2
、$3
代表第一个字段、第二个字段、第三个字段等等。
这个文件的字段分隔符是冒号(:
),所以要用-F
参数指定分隔符为冒号。然后,才能提取到它的第一个字段。
$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync
5.7.2变量
除了$ + 数字
表示某个字段,awk
还提供其他一些变量。
变量NF
表示当前行有多少个字段,因此$NF
就代表最后一个字段。
$ echo 'this is a test' | awk '{print $NF}' test
$(NF-1)
代表倒数第二个字段。
$ awk -F ':' '{print $1, $(NF-1)}' demo.txt root /root daemon /usr/sbin bin /bin sys /dev sync /bin
上面代码中,print
命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。
变量NR
表示当前处理的是第几行。
awk
的其他内置变量如下。
- `FILENAME`:当前文件名 - `FS`:字段分隔符,默认是空格和制表符。 - `RS`:行分隔符,用于分割每一行,默认是换行符。 - `OFS`:输出字段的分隔符,用于打印时分隔字段,默认为空格。 - `ORS`:输出记录的分隔符,用于打印时分隔记录,默认为换行符。 - `OFMT`:数字输出的格式,默认为`%.6g`。
5.7.3、函数
awk
还提供了一些内置函数,方便对原始数据的处理。
函数toupper()
用于将字符转为大写。
$ awk -F ':' '{ print toupper($1) }' demo.txt ROOT DAEMON BIN SYS SYNC
上面代码中,第一个字段输出时都变成了大写。
其他常用函数如下。
tolower()
:字符转为小写。length()
:返回字符串长度。substr()
:返回子字符串。sin()
:正弦。cos()
:余弦。sqrt()
:平方根。rand()
:随机数。
awk
内置函数的完整列表,可以查看手册。
5.7.4 、条件
awk
允许指定输出条件,只输出符合条件的行。
输出条件要写在动作的前面。
$ awk '条件 动作' 文件名
请看下面的例子。
$ awk -F ':' '/usr/ {print $1}' demo.txt root daemon bin sys
上面代码中,print
命令前面是一个正则表达式,只输出包含usr
的行。
下面的例子只输出奇数行,以及输出第三行以后的行。
# 输出奇数行 $ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt root bin sync # 输出第三行以后的行 $ awk -F ':' 'NR >3 {print $1}' demo.txt sys sync
下面的例子输出第一个字段等于指定值的行。
$ awk -F ':' '$1 == "root" {print $1}' demo.txt root $ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt root bin
5.7.5、if 语句
awk
提供了if
结构,用于编写复杂的条件。
$ awk -F ':' '{if ($1 > "m") print $1}' demo.txt root sys sync
上面代码输出第一个字段的第一个字符大于m
的行。
if
结构还可以指定else
部分。
$ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt root --- --- sys sync