(1)新形式:以“系列文章”的形式组织全书,读一个系列,就可以深度掌握一个命令。
(2)新表达:文章以“场景化 + 对话”的表达方式,将一个一个知识点娓娓道来。
(3)新角度:内容“不是翻译man手册”,而是更多地来自于七年的运维实战。
本书打破了市面上主流Linux命令书籍的写作风格,创新性地以专题文章或系列文章的形式来组织全书,文风轻松通顺、循序渐进,既适合作为系统学习的案头书,也适合在床头边、地铁上、院落中阅读。本书是这套系列丛书的第二本,内容侧重在网络和系统方面。为了体现知识的结构化、系统化,本书共分为三个篇章。第一篇 网络篇这一部分是本书的重中之重,囊括了Linux工程师*常用的网络相关命令,通过本篇的学习,读者将全面掌握Linux系统网络层面的各类知识和技能,包括用于网络测速的ping命令、用于域名解析的nslookup命令和dig命令、用于网络配置的iproute2套装、用于流量分析的tcpdump工具、用于建立系统信任关系的ssh-copy-id命令、用于数据网络同步的rsync工具,以及用于网络数据下载的wget命令,等等。第二篇 进程和性能篇 这一部分专注于系统进程、服务器资源和性能方面。作为一名Linux初级工程师,总是希望能够全面了解服务器资源使用情况,快速定位系统性能瓶颈,那么,阅读和学习这一篇章将是*好的选择。本篇将告诉大家free命令的很多不为人知的学问、SWAP的进阶知识、多核CPU的查看方法、top命令的使用技巧、vmstat输出内容中的指标含义、kill命令如何精准的杀死进程,等等。第三篇 系统管理篇这一部分专注在系统管理方面,主要介绍了和Linux操作系统原理相关的知识,包括了查看系统基本信息的uname命令、查看用户账户的who命令、控制服务等级的chkconfig命令、查看机器硬件配置的dmidecode命令,等等。学习完本书后,相信读者朋友们可以轻松而愉快地掌握Linux的网络、系统性能、系统管理等知识和技能,并达到一线互联网公司Linux工程师的水平。
网络篇
在网络篇中,我们将为大家带来29 篇文章,所有内容都是围绕着网络技术和工具展
1 ping 遍大江南北
ping 不止是ping
接触过计算机网络的同学一定都知道ping 命令吧,当计算机联网出现问题时,
首先进入脑海的解决方法就是“ping 一下网络呗”。ping 是如此的常用,它绝对是
你使用频率zui高的一条网络命令了。
在Windows 系统中,我们更多的是简单地ping 一下网站,来测试网络连通性,就
像这样:
ping roclinux.cn
但作为更专业的Linuxer,知道这些还远远不够,今天我们就为大家更全面地介绍
一下这位熟悉的陌生人——ping 命令。
指定ping 的次数
受Windows 使用习惯的影响,在Linux 系统中需要ping 的时候,你也许会这样:
[roc@roclinux ~]$ ping roclinux.cn
PING roclinux.cn (116.255.245.206) 56(84) bytes of data.
64 bytes from 116.255.245.206: icmp_seq=1 ttl=49 time=16.3 ms
64 bytes from 116.255.245.206: icmp_seq=2 ttl=49 time=16.7 ms
64 bytes from 116.255.245.206: icmp_seq=3 ttl=49 time=15.9 ms
64 bytes from 116.255.245.206: icmp_seq=4 ttl=49 time=19.1 ms
64 bytes from 116.255.245.206: icmp_seq=5 ttl=49 time=18.1 ms
当你满怀期待的等着命令自己结束,可等到花儿都谢了,命令还是在执行。这是
怎么回事呢?原来,Windows 下的ping 命令和Linux 下的是有所不同的,Linux
下的ping 必须指定次数,不然它会无限次地执行下去。
如何指定执行次数呢?很简单,只需使用-c 选项来设定次数即可。比如,ping 三
次roclinux.cn 网站的正确执行方法是:
[roc@roclinux ~]$ ping -c 3 roclinux.cn
PING roclinux.cn (116.255.245.206) 56(84) bytes of data.
64 bytes from 116.255.245.206: icmp_seq=1 ttl=49 time=15.9 ms
64 bytes from 116.255.245.206: icmp_seq=2 ttl=49 time=16.4 ms
64 bytes from 116.255.245.206: icmp_seq=3 ttl=49 time=15.7 ms
--- roclinux.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 15673ms
rtt min/avg/max/mdev = 15.785/16.084/16.496/0.301 ms
只重结果不重过程
不想看到ping 命令那啰唆的过程,只想看到结果统计,因为只有结果才是关键
的。那有没有办法满足大家这个小小的愿望呢?好消息!强大的ping 命令说so easy!
只需简单地增加-q 选项就行了。不信的话,试试下面的命令:
[roc@roclinux ~]$ ping -q -c 3 roclinux.cn
PING roclinux.cn (116.255.245.206) 56(84) bytes of data.
--- roclinux.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 16794ms
rtt min/avg/max/mdev = 15.869/15.994/16.161/0.160 ms
这样的ping 绝对是模范员工,工作时埋头苦干,出报告时清晰准确。
这时,我突然发现了一个陌生的指标mdev,就在ping 命令输出内容zui后一行,
这个指标是用来干什么的呢?
原来mdev 是Mean Deviation 的缩写,表示 ICMP 包的 RTT 偏离平均值的程度,
主要用来衡量网速的稳定性。mdev 的值越大说明网速越不稳定。
另外,不同的操作系统的mdev 的名字也有所不同,在mac 下它叫作stddev,而在
Windows 下则根本没有这个统计指标。
指定ping 的数据包的大小
默认情况下,ping 命令是以64 字节大小的数据包来测试网络联通性的,如需要改
变默认数据包的大小,则可以使用参数-s 选项。比如你想使用65500 字节的数据
包来测试网络,命令可以这样来写:
[roc@roclinux ~]$ ping -s 65500 -c 3 roclinux.cn
PING roclinux.cn (116.255.245.206) 65500(65528) bytes of data.
--- roclinux.cn ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 11999m
在实际工作中,我们通常使用-s 选项来发现网络环境中有关MTU 的问题。
指定ping 的TTL
TTL,即生存时间,是指数据包被路由器丢弃之前允许通过的路由器跳数。
TTL 是由发送主机来设置的,为了防止数据包在网络中无限循环,每个路由器在
转发网络数据包时,都要求将TTL 的值减少1,直到TTL 减为0 的那一刻,也就
是这个数据包生命终结的时刻。
对于ping 命令发出的数据包,我们可以通过选项,来设定它在网络上的生命时长:
ping -t 255 roclinux.cn
如果我们不使用-t 选项来设置TTL,那么ping 命令会采用TTL 默认值。而不同的
操作系统TTL 默认值也是不相同的。
下面给大家列举一些常用操作系统的默认值。
? Linux 系统的TTL 值为64 或255
? Windows NT/2000/XP 系统的TTL 值为128
? UNIX 系统的TTL 值为255
指定ping 的时间间隔
ping 命令的核心功能就是查看网络的联通性和网络的延迟。默认情况下,发送两
个数据包之间的间隔是1 秒,如果我们嫌默认1 秒发送一个ping 包太慢,则可以
使用-i 选项来指定发送两个ping 包之间的时间间隔。不过需要注意的是,只有root
用户才能设置低于0.2 秒的时间间隔。下面我们就以root 用户实现0.1 秒时间间隔
的ping 命令:
[root@roclinux ~]# ping -i 0.1 -c 3 roclinux.cn
PING roclinux.cn (116.255.245.206) 56(84) bytes of data.
64 bytes from 116.255.245.206: icmp_seq=1 ttl=49 time=16.1 ms
64 bytes from 116.255.245.206: icmp_seq=2 ttl=49 time=16.6 ms
64 bytes from 116.255.245.206: icmp_seq=3 ttl=49 time=16.1 ms
--- roclinux.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2119ms
rtt min/avg/max/mdev = 16.134/16.331/16.699/0.260 ms
爱如潮水般的ping
上文我们看到,ping 命令在默认情况下使用1 秒作为发送间隔,而使用-i 选项可以
显式地指定发送间隔。如果我们希望ping 命令以尽可能快的速度来发送数据包,
则可以使用-f 选项来实现爱如潮水般的ping:
[root@roclinux ~]# ping -f -c 100 roclinux.cn
PING roclinux.cn (116.255.245.206) 56(84) bytes of data.
--- roclinux.cn ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 1473ms
rtt min/avg/max/mdev = 15.444/16.269/21.434/1.082 ms, pipe 2, ipg/ewma
14.888/15.739 ms
-f 选项,即flood ping,潮水模式的ping,听起来就无比威武,大有天降雄师的阵
势。
这里有一个知识点要注意,flood ping 会采用无间隔的方式尽全力发送探测数据包,
确保每秒钟至少发送100 个。我们把这种模式形象地称为“疯狂模式”,注意,这
种方式只有root 用户才可以使用。
下面我们就使用flood ping 来测试一下网卡的丢包率:
[root@roclinux ~]# ping -f -c 10000 192.168.0.29
PING 192.168.0.29 (192.168.0.29) 56(84) bytes of data.
--- 192.168.0.29 ping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 144ms
rtt min/avg/max/mdev = 0.003/0.004/0.043/0.003 ms, ipg/ewma 0.014/0.005
ms
“0% packet loss”表示丢包率为0,说明网卡工作非常正常,也没有任何网络拥塞
发生。如果你想查看一下你们公司内部的网络状况的话,只需将上述IP 改成你们
公司机器的IP 地址就可以了。
篇尾小福利
zui后,我们给出在网络实际使用过程中的一些RTT 参考值,希望对你排查网络问
题有一定的帮助,如表1 所示。
提醒大家:网络很复杂,情况很多变,上述数据仅供参考。
好了,相信大家又重新认识了一下老朋友——ping,也学习了一些新玩法,希望能
对大家的网络问题排查有所帮助。
DNS 和nslookup 的关系
DNS,即Domain Name System,中文称之为“域名系统”,是计算机网络世界中非
常重要的一个角色,负责着整个互联网中“域名—IP 地址”的管理和解析工作。
自从有了DNS,互联网就变得友好了许多,人们访问网站时不必再去记忆那些晦
涩的IP 地址,通过一些非常易懂的字串就可以方便地指定目的网站。
我们平时都是通过www.baidu.com 来访问百度的,很少有人会记住它的IP 地址吧!
如果你对大型网站的域名管理有所了解的话,你会知道IP 地址解析还存在着就近
解析和经常更换的问题,所以,记忆IP 地址并不切实际。
简单介绍了DNS 之后,我们抓紧时间来为大家介绍一下今天的主角——nslookup。
通过man nslookup,我们可以看到nslookup 的官方解释是“query Internet name
servers interactively”。
而nslookup 是name server lookup 的缩写,顾名思义,nslookup 就是“用来查询DNS
的”。假如你想知道www.baidu.com 对应的IP 地址的话,那么用nslookup 应该是
zui正确的方法了。
系统没有nslookup 命令怎么办
如果你的Linux 系统中没有nslookup 命令,那么八成是你的系统中没有安装
bind-utils 软件包。
bind-utils 软件包中包括了我们操作和管理DNS 的一系列工具,比如host 命令、dig
命令、nslookup 命令等等。
安装bind-utils 软件包,并非难事,在RHCE、CentOS 或Fedora 上,通过一条命
令就可以搞定了:
yum install bind-utils
nslookup 的两种模式
前面我们提到nslookup 的官方解释是“query Internet name servers interactively”,这
里的interactively 说明nslookup 是具有交互功能的。
的确,nslookup 共有两种工作模式,一种是“交互模式”,另一种则是“非交互模
式”。
? 在“交互模式”下,用户只需执行一次nslookup,就可以向域名服务器连
续发起查询请求。
? 在“非交互模式”下,用户发起的查询请求是一次性的,下次再想查询,
就需要再执行一次nslookup。
如何进入交互模式
nslookup 的交互模式使我们可以连续发起DNS 查询请求,而不必每次都运行
nslookup 命令。
进入交互模式的方法也很简单,只需输入nslookup 命令,无须加任何参数,就可
以直接进入交互模式啦!
#进入到了nslookup的交互模式
[roc@roclinux ~]$ nslookup
>
看到zui后的右尖括号“>”了吧,这就是nslookup 进入交互模式的重要标志。
需要注意的是,此时nslookup 会连接到默认的域名服务器,也就是/etc/resolv.conf
中所配置的di一个DNS 服务器地址。
如果我们想自己来指定一个DNS 服务器地址,也是完全可以的,只需设置nslookup
的di一个参数为“-”,而第二个参数是要连接的DNS 服务器IP 地址即可。
假如我们想连接到谷歌的开放DNS,则可以这样来做:
#我们要连接到Google的开放DNS服务器
[roc@roclinux ~]$ nslookup - 8.8.8.8
>
下面就在交互模式下实战一次,来查询www.baidu.com 域名的IP 信息:
[roc@roclinux ~]$ nslookup - www.baidu.com
> www.baidu.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.125
Name: www.a.shifen.com
Address: 61.135.169.121
>
可以看到,Google 的开放DNS 服务器给我们返回了两个可用的IP 地址,即
61.135.169.125 和61.135.169.121。而且在这次查询请求之后,提示符仍然停留在
“>”处,我们可以继续输入网站名称进行下一次查询,这就是交互模式的特点。
网络篇 1
1 ping 遍大江南北 3
2 DNS 探秘之一――nslookup 初体验 8
3 DNS 探秘之二――DNS 知识温故知新 11
4 DNS 探秘之三――nslookup 输出解析 18
5 DNS 探秘之四――DNS 协议中的五元组 20
6 DNS 探秘之五――nslookup 交互模式 24
7 DNS 探秘之六――dig 初体验 29
8 DNS 探秘之七――dig 选项走马观花 32
9 iproute2 系列之一――和netstat 说再见 38
10 iproute2 系列之二――篡权的ss 40
11 iproute2 系列之三――iproute2 后浪推前浪 45
12 iproute2 系列之四――ip 不只是地址 49
13 iproute2 系列之五――除了四还有六 55
14 神探tcpdump 第一招――神探出场 59
15 神探tcpdump 第二招――两个选项 61
16 神探tcpdump 第三招――选项进阶 64
17 神探tcpdump 第四招――保存与回放 67
18 神探tcpdump 第五招――过滤流量 69
19 神探tcpdump 第六招――过滤实战 72
20 神探tcpdump 第七招――过滤高手 74
21 神探tcpdump 第八招――输出解读 78
22 神探tcpdump 终结招――七个秘籍 83
Linux 大棚命令百篇(下)――网络和系统篇
XII
23 nc,一只可爱的网猫 85
24 ssh-copy-id,帮你建立信任 89
25 rsync 同步的艺术 92
26 其实你不懂wget 的心之一――下载文件 99
27 其实你不懂wget 的心之二――躲避封禁 103
28 其实你不懂wget 的心之三――下载目录 105
29 其实你不懂wget 的心之四――体贴的选项 108
进程和性能篇 111
1 uptime 给机器记考勤 113
2 内存不决问free 116
3 用好SWAP 的空间 122
4 vmstat 性能查看利器 130
5 mpstat,让你了解CPU 的心 137
6 top 命令庖丁解牛之一――入门 141
7 top 命令庖丁解牛之二――列管理 147
8 top 命令庖丁解牛之三――进程数据 152
9 top 命令庖丁解牛之四――排序大法 154
10 top 命令庖丁解牛之五――CPU 和内存 156
11 iostat 让I/O 尽在掌握之中 159
12 让pidof 告诉我们进程ID 165
13 sar 访谈 168
14 帮你找到幕后黑手――lsof 应用篇 177
15 帮你找到幕后黑手――lsof 悬疑篇 183
16 帮你找到幕后黑手――lsof 进阶篇 187
17 帮你找到幕后黑手――fuser 学习篇 190
18 ps 命令看着简单,其实很难 195
19 kill,这个杀手不太冷 205
20 作业控制命令一览 210
21 用trap 捕捉那神秘的信号 216
22 nohup,强大的防弹护甲 221
Linux 大棚命令百篇(下)――网络和系统篇
XIII
系统管理篇 227
1 uname 展示系统信息 228
2 用户ID 和用户组ID 的一些故事 230
3 whoami 不只是一部电影 233
4 service 服务最周到 239
5 chkconfig 掌控等级制度 243
6 dmidecode 看穿机器的底细 249
7 lsmod 列出内核模块 257
8 最古老的容器技术chroot 261
9 玩转关机和重启 266
致谢 273
滴滴联合创始人兼CTO 张博
Linux知识晦涩且复杂,很多Linux学习者都有痛苦的看man的经历,作者以生动轻快而不失条理的方式娓娓道来,极大地降低了学习门槛。
如果大家希望了解和精通Linux命令,我认为本书是非常适合的。
宝剑锋从磨砺出,梅花香自苦寒来,很高兴看到鹏冲多年的Linux系统实战经验能够得以沉淀和分享。
小米运维架构师 伏晔
本书作者鹏冲是我多年的同事。在百度期间负责过多个业务的运维和重大项目建设。对Linux应用、网络等方面了解得非常深入,在服务高可用设计方面有着丰富的经验。在刚得知他要写一本Linux基础教程方面的书籍时就非常期待。阅读完初稿后,可以肯定这本书凝结了他多年的实际工作经验,深入浅出地介绍了日常工作中所需要的各种专业技能。希望本书能够帮助更多的初学者进入Linux世界,进入运维行业。
京东资深技术专家 臧志
Shell是工程师们的瑞士军刀,能够极大地提高日常的工作效率,是互联网技术从业者的必备工作技能。作者从一个资深互联网工程师角度出发,以轻松但又不乏严谨与深度的文笔介绍了常使用的命令,并辅以丰富的实际工作案例,不仅适合快速入门上手,也适合床头案边随时查阅。
“运维帮”创始人 窦喆
Shell和系统工具对于运维工程师来说是必备的技能,日常工作天天需要,初学者如果打好基础,日后工作必会终身受益,本书作者大棚有多年实战经验,教你玩转Linux,强烈推荐本书放在桌面,随时查阅。
百度架构师 王达心
本书出自具有多年百度一线工作经验的工程师之手,与大部头的教科书相比,更侧重当下实用的Shell应用技能,可以快速上手,简单实用。
百度运维专家、监控专家 曲显平
本书的作者拥有7年大型互联网公司Linux系统运维经验,他将多年来在Linux系统运维领域的知识、经验凝结成文,内容循序渐进,笔法诙谐有趣。本书能够让你在不知不觉中掌握Linux系统运维的关键技术和方法,是能够指导Linux系统初学者和Linux运维工程师进阶的佳作。
蓝汛技术总监 陈江伟
鹏冲有着丰富的研发、运维经验,非常了解大家实际的需求和痛点。而他的总结、表达能力出类拔萃。拿到书稿,果不其然,图文并茂,绘声绘色,这部书完全满足了我对Linux命令书籍的所有想象,是一本不可多得的好书。