最新公告
  • 欢迎您光临开源论坛,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • HP工程师必知必会 – Linux系统常用命令

    网络连接

    主要涉及到对网络连接状态的统计,比如连接打开了哪些端口、TCP/UDP、socket 的状态是什么等等。常用的工具有 netstat、 ss、lsof、 netcat等。

    netstat ★★★

    netstat 用于查看当前网络的连接情况,能够查看所有的网络连接,包括 unix socket 等,也是集多种工具于一身的组合工具。最常用的就是用来查看本地端口占用情况

    语法

    netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

    参数

    • -a或–all 显示所有连线中的Socket。
    • -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
    • -c或–continuous 持续列出网络状态。
    • -C或–cache 显示路由器配置的快取信息。
    • -e或–extend 显示网络其他相关信息。
    • -F或–fib 显示FIB。
    • -g或–groups 显示多重广播功能群组组员名单。
    • -h或–help 在线帮助。
    • -i或–interfaces 显示网络接口信息
    • -l或–listening 列出监听中的服务器的Socket。
    • -M或–masquerade 显示伪装的网络连线。
    • -n或–numeric 直接使用IP地址,而不通过域名服务器。
    • -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
    • -o或–timers 显示计时器。
    • -p或–programs 显示正在使用Socket的程序识别码和程序名称。
    • -r或–route 显示路由表信息
    • -s或–statistics 显示所有网络协议栈信息
    • -t或–tcp 列出监听 TCP 端口的 socket
    • -u或–udp 列出监听 UDP 端口的 socket
    • -v或–verbose 显示指令执行过程。
    • -V或–version 显示版本信息。
    • -w或–raw 显示RAW传输协议的连线状况。
    • -x或–unix 列出监听 UNIX 端口的 socket
    • –ip或–inet 此参数的效果和指定”-A inet”参数相同。

    实际使用时往往多参数配合使用,比如:

    netstat -ap | grep ssh 找出程序运行的端口
    netstat -an | grep ':80' 找出运行在指定端口的进程

    实例

    # 显示UDP端口号的使用情况
    $ netstat -apu
    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
    udp        0      0 tttti.testt.com:ntp         *:*                                     -
    udp        0      0 localhost:ntp               *:*                                     -
    udp        0      0 *:ntp                       *:*                                     -
    udp        0      0 tttti.testt.com:33020       192.168.0.2:domain          ESTABLISHED 9325/nginx
    udp        0      0 tttti.testt.com:48541       192.168.0.2:domain          ESTABLISHED 9323/nginx
    udp        0      0 tttti.testt.com:57262       192.168.0.2:domain          ESTABLISHED 9326/nginx
    udp        0      0 *:bootpc                    *:*                                     -
    udp        0      0 *:59096                     *:*                                     -
    udp        0      0 tttti.testt.com:41434       192.168.0.2:domain          ESTABLISHED 9324/nginx
    udp        0      0 fe80::f816:3eff:fe5b:9a1:ntp *:*                                     -
    udp        0      0 localhost:ntp               *:*                                     -
    udp        0      0 *:ntp                       *:*                                     -
    udp        0      0 *:36861                     *:*                                     -

    ss ★★

    ss 是 Socket Statistics 的缩写。ss 和 netstat 类似,可以用来获取 socket 统计信息,甚至显示更多连接状态信息。

    ss 最大的优势在于比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中的一个用于分析统计的模块——tcp_diag,使其可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

    语法

    ss [参数] [过滤]

    常用参数:

    • -t, –tcp 显示 TCP 协议的 sockets
    • -u, –udp 显示 UDP 协议的 sockets
    • -x, –unix 显示 unix domain sockets,与 -f 选项相同
    • -n, –numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”
    • -l, –listening 查看处于LISTEN状态的连接端口
    • -p, –processes 显示监听端口的进程(Ubuntu 上需要 sudo)
    • -a, –all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
    • -r, –resolve 把 IP 解释为域名,把端口号解释为协议名称

    实例

    $ ss -ntlp|grep php
    State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
    LISTEN     0      128               127.0.0.1:9000                     *:*      users:(("php-fpm",2487,7),("php-fpm",13519,0),("php-fpm",27405,0))
    LISTEN     0      128               127.0.0.1:9007                     *:*      users:(("php-fpm",28800,0),("php-fpm",28801,0),("php-fpm",28802,0),("php-fpm",28803,0))
    LISTEN     0      128               127.0.0.1:9009                     *:*      users:(("php-fpm",568,7),("php-fpm",6849,0),("php-fpm",9821,0),("php-fpm",16103,0))

    lsof ★★

    lsof 可以列出当前系统打开文件、打开文件的进程、进程打开的端口。由于在 Linux 中一切皆文件,所以, lsof 也常用来统计网络相关的文件信息(使用 -i 选项),如 TCP/UDP/Unix socket 的统计信息。

    语法

    lsof [参数] [文件]

    常用参数:

    • -a 列出打开文件存在的进程
    • -c <进程名> 列出指定进程所打开的文件
    • -g 列出GID号进程详情
    • -d <文件号> 列出占用该文件号的进程
    • +d <目录> 列出目录下被打开的文件
    • +D <目录> 递归列出目录下被打开的文件
    • -n <目录> 列出使用NFS的文件
    • -i <条件> 列出符合条件的进程
    • -p <进程号> 列出指定进程号所打开的文件
    • -u 列出UID号进程详情
    • -h 显示帮助信息
    • -v 显示版本信息

    实例

    使用 lsof 来查看当前系统中 80 端口是否被占用

    sudo lsof -i tcp:80
    COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    docker-pr 14863 root    4u  IPv6 38693061      0t0  TCP *:http (LISTEN)

    然后获取到 PID 之后可以用 lsof 来查看进程

    sudo lsof -p 14863
    COMMAND     PID USER   FD      TYPE   DEVICE SIZE/OFF       NODE NAME
    docker-pr 14863 root  cwd       DIR      8,0     4096          2 /
    docker-pr 14863 root  rtd       DIR      8,0     4096          2 /
    docker-pr 14863 root  txt       REG      8,0  3329080      17531 /usr/bin/docker-proxy
    docker-pr 14863 root  mem       REG      8,0  1868984      20743 /lib/x86_64-linux-gnu/libc-2.23.so
    docker-pr 14863 root  mem       REG      8,0   138696      11625 /lib/x86_64-linux-gnu/libpthread-2.23.so
    docker-pr 14863 root  mem       REG      8,0   162632      10738 /lib/x86_64-linux-gnu/ld-2.23.so
    docker-pr 14863 root    0r      CHR      1,3      0t0       8085 /dev/null
    docker-pr 14863 root    1w      CHR      1,3      0t0       8085 /dev/null
    docker-pr 14863 root    2w      CHR      1,3      0t0       8085 /dev/null
    docker-pr 14863 root    4u     IPv6 38693061      0t0        TCP *:http (LISTEN)
    docker-pr 14863 root    5u  a_inode     0,12        0       8082 [eventpoll]
    docker-pr 14863 root   12r      REG      0,3        0 4026531993 net

    由以上的信息就能看出来我的机器中的 80 端口是 docker 占用的,docker 的位置在系统中的 /usr/bin/docker-proxy

    lsof 输出各列信息的意义如下:

    • COMMAND:进程的名称
    • PID:进程标识符
    • PPID:父进程标识符(需要指定 -R 参数)
    • USER:进程所有者
    • PGID:进程所属组
    • FD:文件描述符,应用程序通过文件描述符识别该文件。如 cwd、txt 等

    FD 的取值

    • cwd:表示 current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
    • txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
    • lnn:library references (AIX);
    • er:FD information error (see NAME column);
    • jld:jail directory (FreeBSD);
    • ltx:shared library text (code and data);
    • mxx :hex memory-mapped type number xx.
    • m86:DOS Merge mapped file;
    • mem:memory-mapped file;
    • mmap:memory-mapped device;
    • pd:parent directory;
    • rtd:root directory;
    • tr:kernel trace file (OpenBSD);
    • v86 VP/ix mapped file;
    • 0:表示标准输出
    • 1:表示标准输入
    • 2:表示标准错误

    一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u 等

    • u:表示该文件被打开并处于读取 / 写入模式
    • r:表示该文件被打开并处于只读模式
    • w:表示该文件被打开并处于
    • 空格:表示该文件的状态模式为 unknow,且没有锁定
    • -:表示该文件的状态模式为 unknow,且被锁定

    netcat(nc) ★★★

    nc 被称为瑞士军刀,非常轻巧但功能强大,能够创建各种不同类型的网络连接、能够实现简单的聊天工具、远程传输文件、debug 分析、扫描端口等。

    语法

    nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

    参数说明:

    • -g<网关> 设置路由器跃程通信网关,最多可设置8个。
    • -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
    • -h 在线帮助。
    • -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
    • -l 使用监听模式,管控传入的资料。
    • -n 直接使用IP地址,而不通过域名服务器。
    • -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
    • -p<通信端口> 设置本地主机使用的通信端口。
    • -r 乱数指定本地与远端主机的通信端口。
    • -s<来源位址> 设置本地主机送出数据包的IP地址。
    • -u 使用UDP传输协议。
    • -v 显示指令执行过程。
    • -w<超时秒数> 设置等待连线的时间。
    • -z 使用0输入/输出模式,只在扫描通信端口时使用。

    实例

    # TCP端口扫描
    # nc -v -z -w2 192.168.0.3 1-100 
    192.168.0.3: inverse host lookup failed: Unknown host
    (UNKNOWN) [192.168.0.3] 80 (http) open
    (UNKNOWN) [192.168.0.3] 23 (telnet) open
    (UNKNOWN) [192.168.0.3] 22 (ssh) open
    
    # 扫描UDP端口
    # nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000
    
    # 扫描80端口
    # nc -nvv 192.168.3.1 80

    流量统计

    ifstat ★★★

    ifstat 主要用来监测主机网口的网络流量,常用的选项包括:

    • -a:监测主机所有网口
    • -i:指定要监测的网口
    • -t:在每行输出信息前加上时间戳
    • -b:以 Kbit/s 显示流量数据,而不是默认的 KB/s
    • delay:采样间隔(单位是 s),即每隔 delay 的时间输出一次统计信息
    • count:采样次数,即共输出 count 次统计信息
    • -p:优化打印
    • -e:显示错误信息
    • -r:重置历史记录

    sar ★★

    sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。

    sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括 CPU、内存、磁盘 I/O、网络、进程、系统调用等等信息。

    常用参数:

    • -R 显示内存状态
    • -b 显示I/O速率
    • -B 显示换页状态
    • -d 显示每个块设备的状态
    • -i 状态信息刷新的间隔时间
    • -u 显示CPU利用率

    网络信息通常使用 -n参数来统计,常用几个选项如下:

    • -n DEV:网络接口统计信息。
    • -n EDEV:网络接口错误。
    • -n IP:IP 数据报统计信息。
    • -n EIP:IP 错误统计信息。
    • -n TCP:TCP 统计信息。
    • -n ETCP:TCP 错误统计信息。
    • -n SOCK:套接字使用。

    iftop ★★★

    iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。

    参数

    • -i 指定要监控的网卡
    • -n 直接显示IP, 不进行DNS反解析

    实例

    # 默认监控第一块网卡的流量:
    [root@linuxcool ~]# iftop 
    
    # 监控eth1网卡的流量:
    [root@linuxcool ~]# iftop eth1
    
    # 直接显示IP, 不进行DNS反解析:
    [root@linuxcool ~]# iftop -n

    交换与路由

    arp ★★

    用来管理主机的 ARP 缓存,增删查改等。

    常见用法:

    • arp:显示 ARP 缓存所有记录
    • arp -i :显示指定接口的 ARP 缓存记录
    • arp -d :删除指定主机的 ARP 缓存记录
    • arp -s <硬件地址>:添加 ARP 缓存静态项

    arping ★★

    查看本 LAN 内 IP 对应的主机 MAC 地址,以及 MAC 的占用问题。

    arping命令作用是使用arp数据包,通过ping命令检查来测试网络。arping命令能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。

    由于arping命令基于ARP广播机制,所以arping命令只能测试同一网段或子网的网络主机的连通性,ping命令则是基于ICMP协议,是可以路由的,所以使用ping命令可以测试任意网段的主机网络连通性。

    vconfig ★★

    vconfig命令是 vlan 的配置命令。

    比如给某个接口增加两个 vlan :

    vconfig add eth0 100
    vconfig add eth0 200

    删除 vlan :

    vconfig rem eth0.100
    vconfig rem eth0.200

    route ★★

    route 用来查看和修改路由表,同样工具还有 netstat-r 和 ip route。

    • route-n 查看路由表
    • route add/del 增加/删除路由表

    比如添加一条默认路由:

    route add default gw 192.168.1.1 dev eth0

    防火墙

    iptables ★★★

    iptables 是强大的包过滤工具。 iptables 通过一系列规则来过滤、处理数据包,能够实现防火墙、NAT等功能。

    ipatbles 命令仅仅是用户空间的linux内核防火墙管理工具,真正的功能实现是由linux内核模块实现的。在配置服务器策略前必须加载相应的内核模块。

    ipatbles命令仅支持ipv4,如果使用的IP协议是ipv6则需要使用专门的管理工具ip6tables。

    参数

    • -t<表> 指定要操纵的表
    • -A 向规则链中追加条目
    • -D 从规则链中删除条目
    • -I 向规则链中插入条目
    • -R 替换规则链中的相应条目
    • -L 显示规则链中的已有条目
    • -F 清除规则链中的现有条目。不改变规则链的默认目标策略
    • -Z 清空规则链中的数据包计数器和字节计数器
    • -N 创建新的用户自定义规则链
    • -P 定义规则链中的默认目标(策略)
    • -h 显示帮助信息
    • -p<协议> 指定要匹配的数据包的协议类型
    • -s<源地址> 指定要匹配的数据包的源IP地址
    • -j<目标> 指定要跳转的目标
    • -i<网络接口> 指定数据包进入本机的网络接口
    • -o<网络接口> 指定数据包离开本机做使用的网络接口
    • -c<包计数> 在执行插入、追加和替换操作时初始化包计数器和字节计数器

    实例

    # 显示内核当前的filter表
    [root@linuxcool ~]# iptables -L
    
    # 显示内核当前的nat表
    [root@linuxcool ~]# iptables -L -t nat
    
    # 禁止本机对192.168.20.20地址的访问
    [root@linuxcool ~]# iptables -t filter -A OUTPUT -d 192.168.20.20 -j DROP
    
    # 显示filter表的OUTPUT链
    [root@linuxcool ~]# iptables -L OUTPUT -t filter

    ipset

    ipset 是一个辅助 iptables 的工具,通常用在限制多个 IP 的场景下,使用 ipset,可以将多个 IP 放入一个集合,然后 iptables 针对这个集合做限制,这样可以大大提高效率。 ipset除了可以集合 IP 外,还可以集合 网段、MAC、端口、网卡等。

    常用操作比如:

    创建一个 ipset:

    ipset create blacklist hash:ip
    • blackliset 是集合名称
    • hash 是存储类型,还支持 bitmap、list 等
    • ip 是存储类型,可以是 MAC、端口等

    往集合中增加项:

    ipset add blacklist 192.168.10.2

    从集合中移除项:

    ipset del blacklist 192.168.10.2

    还可以指定超时时间限制:

    ipset create blacklist hash:net timeout 60

    域名相关

    host

    host 命令是域名分析查询工具,用来测试域名系统工作是否正常。

    比如查看百度域名信息:

    [root@by ~] host www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.
    www.a.shifen.com has address 14.215.177.38
    www.a.shifen.com has address 14.215.177.39

    nslookup

    nslookup 用于交互式域名解析,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。

    查看 google.com 的 DNS 地址:

    # nslookup google.com
    Server:        8.8.8.8
    Address:    8.8.8.8#53
    
    Name:    google.com
    Address: 172.217.160.110

    查看使用的 DNS 服务器地址:

    [root@by ~]# nslookup
    > server
    Default server: 8.8.8.8
    Address: 8.8.8.8#53
    Default server: 8.8.4.4
    Address: 8.8.4.4#53

    dig

    dig命令的全称是“domain information groper”,它是一个用来灵活查询DNS的工具,它会打印出DNS域名服务器的回应,dig命令主要用来从DNS域名服务器查询主机地址信息。

    dig命令与nslookup命令功能基本相同,但是dig命令灵活性好、易用、输出清晰。

    参数:

    • @ 指定进行域名解析的域名服务器
    • -b 使用指定的本机ip地址向域名服务器发送域名查询请求
    • -f 指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息
    • -p 指定域名服务器所使用端口号
    • -t 指定要查询的DNS数据类型(默认为A)
    • -x 执行逆向域名查询
    • -4 使用ipv4(默认)
    • -6 使用ipv6
    • -h 显示命令帮助信息

    实例

    # 查询对应域名的ip
    [root@linuxcool ~]# dig www.linuxcool.com
    
    # 对目标ip进行反向解析查询
    [root@linuxcool ~]# dig -x 166.111.4.100
    
    # 查询目标域名的MX记录
    [root@linuxcool ~]# dig -t MX chinacion.cn

    whois

    whois 用于查看域名所有者的信息,比如注册邮箱、手机号码、域名服务商等。

    Domain Name: chinacion.cn
    ROID: 20160314s10001s82632400-cn
    Domain Status: clientTransferProhibited
    Registrant: 张三
    Registrant Contact Email: zhangsan@qq.com
    Sponsoring Registrar: 北京新网数码信息技术有限公司
    Name Server: f1g1ns1.dnspod.net
    Name Server: f1g1ns2.dnspod.net
    Registration Time: 2016-03-14 10:32:39
    Expiration Time: 2021-03-14 10:32:39
    DNSSEC: unsigned
    开源论坛,我们只做源码的搬运工 www.limao666.com
    开源论坛 » HP工程师必知必会 – Linux系统常用命令

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    开源论坛
    一个高级程序员模板开发平台

    发表评论

    • 311会员总数(位)
    • 595资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 403稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情