网络相关命令
网络相关
一、IP配置与网络
**常用命令:**ifconfig/ip addr、ping 、netstat、ss、curl、wget、
1、ifconfig
(1)、命令简介
ifconfig(全称 Interface Configuration)是 Linux/Unix 系统中用于 配置和显示网络接口信息 的经典命令,但现代 Linux 系统更推荐使用 ip 命令(如 ip addr)。
(2)、常用命令示例
查看所有网络接口
root@master:~# ifconfig
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.0.117 netmask 255.255.255.0 broadcast 192.168.0.255inet6 fe80::20c:29ff:feb6:e83e prefixlen 64 scopeid 0x20<link>ether 00:0c:29:b6:e8:3e txqueuelen 1000 (Ethernet)RX packets 87772 bytes 61933326 (61.9 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 19083 bytes 2573975 (2.5 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 358 bytes 35759 (35.7 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 358 bytes 35759 (35.7 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0关键字段:
ens34:物理网卡(名称可能为 ens33、enp0s3 等,取决于系统)。
lo:本地回环接口(用于本地通信)。
inet:IPv4 地址。
ether:MAC 地址。
RX/TX:接收/发送的数据统计。
查看指定网卡
root@master:~# ifconfig ens34
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.0.117 netmask 255.255.255.0 broadcast 192.168.0.255inet6 fe80::20c:29ff:feb6:e83e prefixlen 64 scopeid 0x20<link>ether 00:0c:29:b6:e8:3e txqueuelen 1000 (Ethernet)RX packets 87818 bytes 61936908 (61.9 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 19097 bytes 2577155 (2.5 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
启用/禁用网卡
ifconfig eth0 up # 启用网卡
ifconfig eth0 down # 禁用网卡
设置 IP 地址和子网掩码
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 #仅临时生效,重启后失效
#永久修改需要跳转网络配置文件:
Debian/Ubuntu:/etc/network/interfaces
CentOS/RHEL:/etc/sysconfig/network-scripts/ifcfg-eth0 #修改对应的文件,ens34对应ifcfg-ens34
修改 MAC 地址(需 root)
ifconfig eth0 hw ether 00:11:22:33:44:55
添加多个 IP 地址(别名)
ifconfig eth0:0 192.168.1.200 # 添加别名 IP
ifconfig eth0:0 down # 删除别名 IP
2、ip addr
(1)、命令简介
ip addr(或 ip address)是 Linux 系统中 查看和管理网络接口 IP 地址 的现代命令,属于 iproute2 工具集,比传统的 ifconfig 更强大且推荐使用。
(2)、命令语法
#命令语法:ip addr [动作] [选项]
#常用动作(Action)
动作 作用 示例
show 显示接口信息(默认动作) ip addr show eth0
add 添加 IP 地址 ip addr add 192.168.1.100/24 dev eth0
del 删除 IP 地址 ip addr del 192.168.1.100/24 dev eth0
flush 清空所有 IP 地址 ip addr flush eth0
replace 替换已有 IP 地址 ip addr replace 192.168.1.200/24 dev eth0
#常用选项(Options)
选项 作用 示例
-4 仅显示 IPv4 地址 ip -4 addr
-6 仅显示 IPv6 地址 ip -6 addr
-s 显示统计信息(如数据包计数) ip -s addr show eth0
-d 显示详细信息 ip -d addr show eth0
-t 显示缓存时间(IPv6 地址有效期) ip -t addr show eth0
-br 简洁输出(仅显示基本字段) ip -br addr
(3)、常用命令示例
查看所有网络接口
root@master:~# ip addr show #或者简写ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84839sec preferred_lft 84839secinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 1e:46:87:f1:53:db brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever
root@master:~# ip -br addr #简洁输出
lo UNKNOWN 127.0.0.1/8 ::1/128
ens34 UP 192.168.0.117/24 metric 100 fe80::20c:29ff:feb6:e83e/64
docker0 DOWN 172.17.0.1/16
查看指定接口的详细信息
root@master:~# ip addr show ens34 #查看指定ens34网口
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84702sec preferred_lft 84702secinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
root@master:~# ip a show dev ens34 #查看指定ens34网口
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84696sec preferred_lft 84696secinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
添加/删除 IP 地址
root@master:~# ip addr add 192.168.0.200/24 dev ens34 #添加IPv4地址
root@master:~# ip a show dev ens34
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84505sec preferred_lft 84505secinet 192.168.0.200/24 scope global secondary ens34 #添加完成valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
root@master:~# ip addr add 2001:db8::1/64 dev ens34 # 添加 IPv6 地址
root@master:~# ip a show dev ens34
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84457sec preferred_lft 84457secinet 192.168.0.200/24 scope global secondary ens34valid_lft forever preferred_lft foreverinet6 2001:db8::1/64 scope global valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
root@master:~# sudo ip addr del 192.168.0.200/24 dev ens34 #删除IPv4地址
root@master:~# sudo ip addr del 2001:db8::1/64 dev ens34 #删除IPv6地址
root@master:~# ip a show dev ens34
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84429sec preferred_lft 84429secinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
清空接口的所有 IP 地址
sudo ip addr flush eth0
检查 IP 冲突
root@master:~# ip addr show to 192.168.0.117 #IP 已被其他设备占用,会显示多个 MAC 地址。
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000altname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84274sec preferred_lft 84274sec
绑定多个 IP 地址(别名)
root@master:~# sudo ip addr add 192.168.0.201/24 dev ens34 label ens34:1 #添加第二个IP
root@master:~# ip addr show ens34
2: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b6:e8:3e brd ff:ff:ff:ff:ff:ffaltname enp2s2inet 192.168.0.117/24 metric 100 brd 192.168.0.255 scope global dynamic ens34valid_lft 84204sec preferred_lft 84204secinet 192.168.0.201/24 scope global secondary ens34:1valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feb6:e83e/64 scope link valid_lft forever preferred_lft forever
临时禁用/启用 IP 地址
# 禁用某个 IP(保留配置但停止使用)
sudo ip addr del 192.168.1.100/24 dev ens34# 重新启用
sudo ip addr add 192.168.1.100/24 dev ens34
3、ping
(1)、命令简介
ping 是网络诊断中最常用的工具之一,用于 测试主机之间的网络连通性。它通过发送 ICMP Echo Request 数据包并等待目标主机的 ICMP Echo Reply 来判断网络是否通畅、延迟是否正常。
(2)、命令选项清单
#命令语法:ping [选项] <目标主机或IP>
#选项 说明 示例
-c <次数> 指定发送的 ping 次数 ping -c 4 google.com
-i <秒> 设置 ping 间隔时间(默认 1 秒) ping -i 2 google.com
-s <字节> 设置数据包大小(默认 56 字节) ping -s 100 google.com
-t <TTL> 设置 TTL(生存时间) ping -t 64 google.com
-W <秒> 设置超时时间 ping -W 3 google.com
-q 只显示统计结果(安静模式) ping -q -c 5 google.com
-D 显示时间戳 ping -D google.com
-f 洪水ping(高速发送,需 root) sudo ping -f google.com
-4 强制使用 IPv4 ping -4 google.com
-6 强制使用 IPv6 ping -6 google.com
(3)、常用命令示例
基础网络检测
root@master:~# ping 192.168.0.118
PING 192.168.0.118 (192.168.0.118) 56(84) bytes of data.
64 bytes from 192.168.0.118: icmp_seq=1 ttl=64 time=0.180 ms
64 bytes from 192.168.0.118: icmp_seq=2 ttl=64 time=0.127 ms
64 bytes from 192.168.0.118: icmp_seq=3 ttl=64 time=0.125 ms
64 bytes from 192.168.0.118: icmp_seq=4 ttl=64 time=0.120 ms
^C
--- 192.168.0.118 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3075ms
rtt min/avg/max/mdev = 0.120/0.138/0.180/0.024 ms
#icmp_seq:数据包序列号(检查是否丢包)。
#ttl(Time To Live):数据包生存时间(每经过一个路由器减 1)。
#time:往返时间(RTT,单位 ms,衡量延迟)。
#统计部分:
#packet loss:丢包率(0% 表示网络良好)。
#min/avg/max/mdev:最小/平均/最大/标准差延迟。
限制次数、单次测试包大小、显示时间戳
root@master:~# ping -c 4 192.168.0.118 #限制ping次数为4
PING 192.168.0.118 (192.168.0.118) 56(84) bytes of data.
64 bytes from 192.168.0.118: icmp_seq=1 ttl=64 time=0.216 ms
64 bytes from 192.168.0.118: icmp_seq=2 ttl=64 time=0.124 ms
64 bytes from 192.168.0.118: icmp_seq=3 ttl=64 time=0.105 ms
64 bytes from 192.168.0.118: icmp_seq=4 ttl=64 time=0.132 ms--- 192.168.0.118 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3079ms
rtt min/avg/max/mdev = 0.105/0.144/0.216/0.042 ms
root@master:~# ping -s 1000 -c 4 192.168.0.118 #每次发送包大小为1000,共4次
PING 192.168.0.118 (192.168.0.118) 1000(1028) bytes of data.
1008 bytes from 192.168.0.118: icmp_seq=1 ttl=64 time=0.144 ms
1008 bytes from 192.168.0.118: icmp_seq=2 ttl=64 time=0.194 ms
1008 bytes from 192.168.0.118: icmp_seq=3 ttl=64 time=0.140 ms
1008 bytes from 192.168.0.118: icmp_seq=4 ttl=64 time=0.124 ms--- 192.168.0.118 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3056ms
rtt min/avg/max/mdev = 0.124/0.150/0.194/0.026 ms
root@master:~# ping -D 192.168.0.118 #添加时间戳显示
PING 192.168.0.118 (192.168.0.118) 56(84) bytes of data.
[1753278959.331787] 64 bytes from 192.168.0.118: icmp_seq=1 ttl=64 time=0.191 ms
[1753278960.354361] 64 bytes from 192.168.0.118: icmp_seq=2 ttl=64 time=0.096 ms
[1753278961.378480] 64 bytes from 192.168.0.118: icmp_seq=3 ttl=64 time=0.112 ms
[1753278962.402555] 64 bytes from 192.168.0.118: icmp_seq=4 ttl=64 time=0.214 ms
[1753278963.426494] 64 bytes from 192.168.0.118: icmp_seq=5 ttl=64 time=0.158 ms
^C
--- 192.168.0.118 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4095ms
rtt min/avg/max/mdev = 0.096/0.154/0.214/0.044 ms
常见问题
ping 不通的可能原因?
-
目标主机禁用了 ICMP(如企业防火墙)。
-
本地网络配置错误(IP、网关、DNS)。
-
中间路由器拦截 ICMP 包。
-
物理链路问题(网线、Wi-Fi 断开)。
如何停止 ping?
- 按 Ctrl + C 终止。
ping 返回 Destination Host Unreachable?
- 表示本地主机无法到达目标网络(检查路由表 ip route)。
ping 返回 Request timeout?
- 表示目标主机未响应(可能是防火墙丢弃 ICMP 包)。
4、netstat
(1)、命令简介
netstat(Network Statistics)是 Linux/Unix 系统中用于 监控网络连接、路由表、接口统计 的经典工具,可查看 TCP/UDP 端口、监听状态、网络流量等。虽然现代系统推荐使用 ss(Socket Statistics),但 netstat 仍广泛用于兼容性场景。
(2)、命令选项清单
#命令语法:netstat [选项]
#选项 说明
-a 显示所有连接(包括监听和非监听)
-t 仅显示 TCP 连接
-u 仅显示 UDP 连接
-n 禁用域名解析(直接显示 IP)
-l 仅显示监听(LISTEN)状态的端口
-p 显示进程名/PID(需 root)
-r 显示路由表(等同 route -n)
-s 显示网络协议统计(如 TCP/UDP 丢包)
-i 显示网络接口统计(类似 ifconfig)
-c 持续输出(实时刷新)
(3)、常用命令示例
查看所有活动连接
root@master:~# netstat -a #仅截取部分内容
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
tcp 0 224 master:ssh 192.168.0.107:64444 ESTABLISHED
#Proto:协议(TCP/UDP)。
#Local Address:本地 IP:端口。
#Foreign Address:远程 IP:端口。
#State:连接状态(如 ESTABLISHED、LISTEN)。
查看所有 TCP/UDP 连接
root@master:~# netstat -at #查看TCP连接
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
tcp 0 320 master:ssh 192.168.0.107:64444 ESTABLISHED
tcp 0 0 master:ssh 192.168.0.107:64750 ESTABLISHED
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
#状态 含义
#LISTEN 端口正在监听
#ESTABLISHED 已建立的连接
#TIME_WAIT 连接正在关闭
#CLOSE_WAIT 远程已关闭,本地未关闭root@master:~# netstat -au #查看UDP连接
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 localhost:domain 0.0.0.0:*
udp 0 0 master:bootpc 0.0.0.0:*
查看监听端口
root@master:~# netstat -tulnp #后可以添加 | grep 端口/进程名快速查找端口/进程占用情况
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 18963/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 885/sshd: /usr/sbin
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 809/systemd-resolve
tcp6 0 0 :::80 :::* LISTEN 18963/nginx: master
tcp6 0 0 :::22 :::* LISTEN 885/sshd: /usr/sbin
udp 0 0 127.0.0.53:53 0.0.0.0:* 809/systemd-resolve
udp 0 0 192.168.0.117:68 0.0.0.0:* 807/systemd-network
#-tuln说明:
#-t:TCP
#-u:UDP
#-l:仅监听
#-n:禁用域名解析
#-p:显示进程名/PID
查看路由表
root@master:~# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 ens34
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens34
192.168.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ens34
查看网络接口统计
root@master:~# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0 1500 0 0 0 0 0 0 0 0 BMU
ens34 1500 89951 0 0 0 19689 0 0 0 BMRU
ens34:1 1500 - no statistics available - BMRU
lo 65536 372 0 0 0 372 0 0 0 LRU
5、ss
(1)、命令简介
ss(Socket Statistics)是 Linux 系统中 查看和分析网络套接字(Socket)信息 的现代工具,用于替代传统的 netstat。它直接从内核获取数据,速度更快,功能更强大,适合监控 TCP/UDP 连接、端口占用、网络状态等。
(2)、命令选项清单
#命令语法:ss [选项] [过滤条件]
#选项 说明
-t 显示 TCP 连接
-u 显示 UDP 连接
-l 仅显示监听(LISTEN)状态的端口
-n 禁用域名解析(直接显示 IP 和端口号)
-p 显示进程信息(需 root)
-a 显示所有连接(包括监听和非监听)
-s 显示套接字统计信息(如 TCP 状态分布)
-o 显示计时器信息(如连接保持时间)
-i 显示 TCP 内部信息(如拥塞窗口)
-4 仅显示 IPv4 连接
-6 仅显示 IPv6 连接
-r 尝试解析端口对应的服务名称
-H 不显示表头(适合脚本处理)
(3)、常用命令示例
查看所有 TCP/UDP 连接
root@master:~# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 192.168.0.117:ssh 192.168.0.107:64444
ESTAB 0 0 192.168.0.117:ssh 192.168.0.107:64750
root@master:~# ss -u
Recv-Q Send-Q Local Address:Port Peer Address:Port Process
#部分说明
#State:连接状态(ESTAB=已建立,LISTEN=监听)。
#Recv-Q/Send-Q:接收/发送队列中的数据量(非零可能表示阻塞)。
查看所有监听端口
root@master:~# ss -tulnp #配合grep可以快速查询进程占用端口
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=809,fd=13))
udp UNCONN 0 0 192.168.0.117%ens34:68 0.0.0.0:* users:(("systemd-network",pid=807,fd=15))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=19116,fd=6),("nginx",pid=19115,fd=6),("nginx",pid=18963,fd=6))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=885,fd=3))
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=809,fd=14))
tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=19116,fd=7),("nginx",pid=19115,fd=7),("nginx",pid=18963,fd=7))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=885,fd=4))
查看网络统计信息
root@master:~# ss -s
Total: 219
TCP: 7 (estab 2, closed 0, orphaned 0, timewait 0)Transport Total IP IPv6
RAW 1 0 1
UDP 2 2 0
TCP 7 5 2
INET 10 7 3
FRAG 0 0 0
#说明:
#Total:套接字(Socket)数量,(包括 TCP/UDP/RAW 等所有类型)
#协议 总数 IPv4 IPv6 说明
#RAW 1 0 1 原始套接字(如 ping 使用的 ICMP)。
#UDP 2 2 0 UDP 连接(如 DNS 查询)。
#TCP 7 5 2 TCP 连接(如 HTTP/SSH)。
#INET 10 7 3 所有 IPv4+IPv6 的传输层连接总和。
#FRAG 0 0 0 IP 分片包(通常为 0)。
按条件过滤连接
ss -t src 192.168.1.100 # 查看来自本机 IP 的 TCP 连接
ss -t dst 8.8.8.8 # 查看目标为 8.8.8.8 的 TCP 连接
ss -t sport = :80 # 查看源端口为 80 的 TCP 连接
ss -t dport = :443 # 查看目标端口为 443 的 TCP 连接
6、curl
(1)、命令简介
curl 是一个强大的 命令行工具,用于传输数据(支持 HTTP、HTTPS、FTP、SFTP 等协议)。它常用于测试 API、下载文件、调试网络请求等场景。
(2)、命令选项清单
#命令语法:curl [选项] [URL]
#基础请求
选项 作用 示例
-X <METHOD> 指定 HTTP 方法(GET/POST/PUT/DELETE) curl -X POST http://example.com
-I 仅显示响应头(HEAD 请求) curl -I http://example.com
-i 显示响应头 + 响应体 curl -i http://example.com
-v 显示详细请求过程(调试用) curl -v http://example.com
-L 自动跟随重定向 curl -L http://example.com
#数据交互
选项 作用 示例
-d <DATA> 发送 POST 数据(表单/JSON) curl -d "name=John" http://example.com
-H <HEADER> 添加请求头 curl -H "Content-Type: application/json" http://example.com
-F <FIELD>=<FILE> 上传文件(表单) curl -F "file=@test.jpg" http://example.com/upload
-G 将 -d 数据转为 URL 查询参数(GET) curl -G -d "q=keyword" http://example.com/search
#下载与输出
选项 作用 示例
-o <FILE> 下载文件并重命名 curl -o output.txt http://example.com/file
-O 下载文件并使用远程文件名 curl -O http://example.com/file.txt
-C - 断点续传 curl -C - -O http://example.com/bigfile.zip
--limit-rate <SPEED> 限制下载速度 curl --limit-rate 100K -O http://example.com/file
(4) 认证与代理
选项 作用 示例
-u <USER:PASS> 基本认证 curl -u admin:123456 http://example.com
--proxy <PROXY> 使用代理 curl --proxy http://proxy.example.com:8080 http://example.com
(3)、常用命令示例
常用场景
#发送请求
curl http://example.com #发送 GET 请求
curl -X POST -d "username=admin&password=123456" http://example.com/login #发送 POST 请求(表单数据)
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":30}' http://example.com/api#发送 POST 请求(JSON 数据)
#下载文件
curl -O http://example.com/image.jpg # 保存为 image.jpg
curl -o myfile.jpg http://example.com/image.jpg # 自定义文件名
#调试 API(显示详细日志)
curl -v -X POST -H "Authorization: Bearer token123" -d '{"key":"value"}' http://example.com/api
#测试 HTTPS 证书
curl --cacert /path/to/ca.pem https://example.com
#保存 Cookie 并复用
curl -c cookies.txt http://example.com/login # 保存 Cookie
curl -b cookies.txt http://example.com/dashboard # 携带 Cookie
特殊用法
#批量下载文件
curl -O http://example.com/files/[1-10].jpg # 下载 file1.jpg 到 file10.jpg
#上传文件( multipart/form-data)
curl -F "file=@/path/to/file.jpg" http://example.com/upload
#模拟浏览器请求
curl -A "Mozilla/5.0" http://example.com
#忽略 SSL 证书验证(测试用)
curl -k https://example.com
#测量请求时间
curl -w "Time: %{time_total}s\n" http://example.com
7、wget
(1)、命令简介
wget 是 Linux/Unix 系统中 非交互式下载文件 的经典命令行工具,支持 HTTP、HTTPS、FTP 协议,具有递归下载、断点续传、批量下载等强大功能,适合自动化脚本和后台任务。
(2)、命令选项清单
#命令语法:wget [选项] [URL]
#基础下载
选项 作用 示例
-O <文件名> 指定下载后的文件名 wget -O file.zip http://example.com/data.zip
-P <目录> 指定下载目录 wget -P /tmp http://example.com/file
-q 静默模式(不显示输出) wget -q http://example.com
-v 显示详细日志 wget -v http://example.com
--limit-rate=<速度> 限速下载(如 500K 或 1M) wget --limit-rate=1M http://example.com/bigfile.iso
#断点续传 & 后台下载
选项 作用 示例
-c 断点续传 wget -c http://example.com/bigfile.zip
-b 后台下载(日志写入 wget-log) wget -b http://example.com/file
#递归下载(整站/目录)
选项 作用 示例
-r 递归下载 wget -r http://example.com
-l <深度> 限制递归深度 wget -r -l 2 http://example.com
-np 不追溯父目录 wget -r -np http://example.com/path/
-A <扩展名> 仅下载指定类型文件 wget -r -A ".jpg,.png" http://example.com
-R <扩展名> 排除指定类型文件 wget -r -R ".mp4" http://example.com
#认证 & 代理
选项 作用 示例
--user=<用户名> FTP/HTTP 认证用户名 wget --user=admin http://example.com
--password=<密码> FTP/HTTP 认证密码 wget --user=admin --password=123456 http://example.com
--proxy=<地址> 使用代理服务器 wget --proxy=http://10.0.0.1:8080 http://example.com
#其他实用选项
选项 作用 示例
-U <UA> 设置 User-Agent wget -U "Mozilla/5.0" http://example.com
--tries=<次数> 设置重试次数 wget --tries=5 http://example.com
--no-check-certificate 忽略 SSL 证书验证 wget --no-check-certificate https://example.com
-S 显示服务器响应头 wget -S http://example.com
(3)、常用命令示例
wget http://example.com/file.zip #下载单个文件
wget -O backup.tar.gz http://example.com/data.tar.gz #下载并重命名文件
wget -c http://example.com/bigfile.iso #断点续传
wget -b http://example.com/large_file.mp4 #后台下载,查看后台下载日志tail -f wget-logwget -r -l 5 -np -k http://example.com #递归下载整个网站,-k:将链接转换为本地文件链接。wget -i files.txt #批量下载文件,files.txt内容为文件下载连接,一行放一个wget --limit-rate=500K http://example.com/ubuntu.iso #限速下载(避免占用带宽)wget --user=ftpuser --password=ftppass -r ftp://ftp.example.com/pub/ #下载 FTP 目录wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" http://example.com #伪装浏览器 User-Agentwget -O /dev/null http://example.com/bigfile.zip #测试下载速度
wget -qO- http://example.com/archive.tar.gz | tar xz #下载并自动解压
wget -mk -np -w 2 http://example.com #镜像网站(适合离线浏览)
#-m:镜像模式(等效于 -r -N -l inf)
#-k:转换链接为本地链接
#-w 2:每次请求间隔 2 秒
二、远程连接
**常用命令:**ssh、ftp、sftp、scp、rsync、telnet
1、ssh
(1)、命令简介
ssh(Secure Shell)是 Linux/Unix 系统中 安全远程登录 和 加密文件传输 的标准工具,通过加密通道保护数据安全,替代不安全的 telnet 和 rsh。
(2)、命令选项清单
#命令语法:ssh [选项] [用户名@]主机名或IP [命令]
#选项 作用 示例
-p <端口> 指定 SSH 端口(默认 22) ssh -p 2222 user@example.com
-i <私钥文件> 指定身份认证私钥 ssh -i ~/.ssh/id_rsa user@example.com
-X 启用 X11 转发(图形界面) ssh -X user@example.com
-L <本地端口:目标主机:目标端口> 本地端口转发 ssh -L 8080:localhost:80 user@example.com
-R <远程端口:目标主机:目标端口> 远程端口转发 ssh -R 9000:localhost:3000 user@example.com
-D <本地端口> 动态端口转发(SOCKS 代理) ssh -D 1080 user@example.com
-v 显示详细连接过程(调试用) ssh -v user@example.com
-N 不执行远程命令(仅用于端口转发) ssh -N -L 8080:localhost:80 user@example.com
-T 禁用伪终端分配 ssh -T user@example.com
-C 启用压缩(慢速网络适用) ssh -C user@example.com
(3)、常用命令示例
基本远程登录
ssh root@192.168.0.117 #使用用户名@IP登录
ssh -p22 root@192.168.0.117 #指定ssh端口,使用用户名@IP登录
ssh root@example.com #使用用户名@域名登录
使用密钥登录(配置免密)
root@master:~# ssh-keygen -t rsa -b 4096 #生成密钥对,默认保存到 ~/.ssh/id_rsa,后续输入回车默认即可
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:wwMj4hVrUCieQx2CFePnenWBSq9cnKDzpVquVl8zk8g root@master
The key's randomart image is:
+---[RSA 4096]----+
|.o*=+ |
|ooo+ o . |
|o.+ O + . |
| = O * = . |
| = o.B.S. |
| =.*E.*o |
| ..B. . + |
| .= . |
| .o.. |
+----[SHA256]-----+
root@master:~# ssh-copy-id kali@192.168.0.118 #拷贝密钥到远程主机
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.0.118 (192.168.0.118)' can't be established.
ED25519 key fingerprint is SHA256:l7lV8+H/YGmF4EIIpYQz1Z71bE+hR/SuaOQF+9WOyn0.
This host key is known by the following other names/addresses:~/.ssh/known_hosts:1: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #第一次访问输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
kali@192.168.0.118's password:
1
Number of key(s) added: 1Now try logging into the machine, with: "ssh 'kali@192.168.0.118'"
and check to make sure that only the key(s) you wanted were added.
root@master:~# ssh kali@192.168.0.118
kali@master:~$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
ens34 UP 192.168.0.118/24 metric 100 fe80::20c:29ff:fe1d:52c/64
docker0 DOWN 172.17.0.1/16
执行远程命令
root@master:~# ssh kali@192.168.0.118 "ip -br addr" # 远程执行命令后返回结果
lo UNKNOWN 127.0.0.1/8 ::1/128
ens34 UP 192.168.0.118/24 metric 100 fe80::20c:29ff:fe1d:52c/64
docker0 DOWN 172.17.0.1/16
root@master:~# ssh kali@192.168.0.118 'bash -s' < get_ip.sh # 执行本地脚本
lo UNKNOWN 127.0.0.1/8 ::1/128
ens34 UP 192.168.0.118/24 metric 100 fe80::20c:29ff:fe1d:52c/64
docker0 DOWN 172.17.0.1/16
端口转发
ssh -L 8080:localhost:80 user@example.com #本地端口转发(访问远程服务)本地 8080 → 远程 80,访问 http://localhost:8080 即访问远程的 80 端口。
ssh -R 9000:localhost:3000 user@example.com #远程端口转发(暴露本地服务到远程)远程 9000 → 本地 3000,远程服务器可通过 localhost:9000 访问你本地的 3000 端口。
ssh -D 1080 user@example.com #动态端口转发(SOCKS 代理)本地 1080 端口为 SOCKS 代理,配置浏览器或 curl 使用 socks5://localhost:1080 代理。
配置文件优化
#编辑 ~/.ssh/config 可简化常用连接:
Host myserver #常用连接配置别名HostName example.com #常用连接地址User username #常用连接用户名Port 2222 #常用连接端口IdentityFile ~/.ssh/id_rsa #连接公钥
ssh myserver #使用别名登录
安全优化
禁用密码登录(仅允许密钥):
# 在服务器上编辑 /etc/ssh/sshd_config
PasswordAuthentication no
然后重启服务:sudo systemctl restart sshd更改默认端口:Port 2222 # 在 /etc/ssh/sshd_config 中修改
限制登录用户:
AllowUsers username # 在 /etc/ssh/sshd_config 中指定
2、ftp
(1)、命令简介
ftp 是用于在 客户端与服务器之间传输文件 的命令行工具,基于 FTP(File Transfer Protocol)协议。它支持上传、下载、目录管理等功能,适合在终端环境下操作。
(2)、命令选项清单
#命令语法:ftp [选项] [主机名或IP]
选项 说明
-4 强制使用 IPv4
-6 强制使用 IPv6
-A 使用主动模式(PORT)
-p 使用被动模式(PASV,默认)
-i 关闭交互式提示(适合脚本)
-n 禁止自动登录(需手动输入 user 和 pass)
-v 显示详细输出
-d 启用调试模式
-P PORT 指定 FTP 端口(默认 21)
-o OUTPUT 将服务器响应保存到文件
-T DIR,MAX[,INC] 设置传输超时(秒)
-x XFERSIZE 设置传输缓冲区大小
(3)、常用命令示例
连接 FTP 服务器
ftp ftp.example.com # 连接服务器
ftp 192.168.1.100 # 使用 IP 连接
ftp -P port 192.168.1.100 # 指定端口使用 IP 连接
登录与退出
ftp> user username password # 手动输入用户名密码
ftp> bye # 退出 FTP
ftp> quit # 同上
ftp> close # 断开连接但不退出 FTP
目录操作
ftp> ls # 列出远程目录
ftp> dir # 详细列出远程目录
ftp> cd /path # 切换远程目录
ftp> lcd /local/path # 切换本地目录
ftp> pwd # 显示远程当前目录
ftp> mkdir new_dir # 创建远程目录
ftp> rmdir old_dir # 删除远程目录
ftp> mget *.zip # 下载所有 .zip 文件
ftp> prompt off # 关闭交互确认(避免每次询问)
文件传输
ftp> get remote.txt # 下载单个文件
ftp> get remote.txt local.txt # 下载并重命名
ftp> mget *.txt # 批量下载(如 *.txt)
ftp> put local.txt # 上传单个文件
ftp> mput *.txt # 批量上传
ftp> delete remote.txt # 删除远程文件
传输模式设置
ftp> ascii # 文本模式(默认,适合 .txt/.html)
ftp> binary # 二进制模式(适合 .zip/.exe/.jpg)
其他实用命令
ftp> status # 查看当前 FTP 连接状态
ftp> hash # 显示传输进度(每 1024 字节打印 `#`)
ftp> prompt # 关闭/开启交互提示(批量操作时有用)
ftp> !command # 在本地执行 Shell 命令(如 `!ls`)
3、sftp
(1)、命令简介
sftp(SSH File Transfer Protocol)是基于 SSH 加密通道 的文件传输工具,比传统 ftp 更安全,适合在远程服务器和本地之间上传、下载和管理文件。
(2)、命令选项清单
#命令语法:sftp [选项] [用户名@]主机名或IP
选项 作用 示例
-P <端口> 指定 SSH 端口(默认 22) sftp -P 2222 user@example.com
-i <私钥文件> 指定身份认证私钥 s ftp -i ~/.ssh/id_rsa user@example.com
-r 递归传输目录 sftp -r user@example.com:/remote/dir
-v 显示详细连接过程(调试用) sftp -v user@example.com
(3)、常用命令示例
连接 SFTP 服务器
sftp user@example.com # 使用用户名登录
sftp -P 2222 user@192.168.1.100 # 指定非标准端口
sftp> bye #退出sftp 或 exit、quit
文件传输
#下载文件
sftp> get remote.txt # 下载单个文件
sftp> get remote.txt local.txt # 下载并重命名
sftp> mget *.txt # 批量下载(如 *.txt)
sftp> get -r /remote/dir # 递归下载目录(需 SFTP 服务器支持)
#上传文件
sftp> put local.txt # 上传单个文件
sftp> put local.txt remote.txt # 上传并重命名
sftp> mput *.txt # 批量上传
sftp> put -r /local/dir # 递归上传目录
#使用命令行直接传输文件
sftp user@example.com:/remote/file.txt /local/path/ # 下载文件
sftp user@example.com <<< $'put /local/file.txt /remote/path/' # 上传文件
目录管理
sftp> ls # 列出远程目录
sftp> lls # 列出本地目录
sftp> cd /remote/path # 切换远程目录
sftp> lcd /local/path # 切换本地目录
sftp> mkdir new_dir # 创建远程目录
sftp> rmdir old_dir # 删除远程空目录
sftp> pwd # 显示远程当前目录
sftp> lpwd # 显示本地当前目录
文件操作
sftp> rm file.txt # 删除远程文件
sftp> rename old.txt new.txt # 重命名远程文件
sftp> chmod 755 script.sh # 修改远程文件权限
sftp> chown user:group file # 修改远程文件所有者(需 root)
4、scp
(1)、命令简介
scp(Secure Copy)是基于 SSH 加密通道 的文件传输工具,用于在本地和远程主机之间 安全复制文件或目录。它比传统 ftp 更安全,比 sftp 更高效,适合快速传输单个文件或批量同步。
(2)、命令选项清单
#命令语法:scp [选项] 源文件 目标路径
#选项 作用 示例
-P <端口> 指定 SSH 端口(默认 22) scp -P 2222 file.txt user@example.com:/path
-i <私钥文件> 指定身份认证私钥 scp -i ~/.ssh/id_rsa file.txt user@example.com:/path
-r 递归复制目录 scp -r /local/dir user@example.com:/remote/path
-C 启用压缩(慢速网络适用) scp -C largefile.tar.gz user@example.com:/backup
-v 显示详细传输过程(调试用) scp -v file.txt user@example.com:/tmp
-l <带宽限制> 限速(单位 Kbit/s) scp -l 1000 file.txt user@example.com:/path
-p 保留文件属性(修改时间、权限) scp -p file.txt user@example.com:/path
(3)、常用命令示例
文件复制
#从本地复制到远程
scp file.txt user@example.com:/remote/path/ # 复制文件
scp file.txt user@example.com:/remote/path/new_name.txt # 复制并重命名
scp -r /local/dir user@example.com:/remote/path/ # 复制目录(递归)
#从远程复制到本地
scp user@example.com:/remote/file.txt /local/path/ # 复制文件
scp -r user@example.com:/remote/dir /local/path/ # 复制目录(递归)
#在两台远程主机之间复制
scp user1@host1:/path/to/file user2@host2:/path/to/dest #数据会在本地主机中转
5、rsync
(1)、命令简介
rsync 是 Linux/Unix 系统中 高效文件同步工具,支持增量备份、断点续传、压缩传输,比 scp 和 sftp 更强大,适合大规模数据同步和备份。
(2)、命令选项清单
#命令语法:rsync [选项] 源路径 目标路径
#选项 作用 示例
-a 归档模式(保留权限、时间戳等) rsync -a /src/ /dest/
-v 显示详细传输过程 rsync -av /src/ /dest/
-z 启用压缩传输(节省带宽) rsync -az /src/ user@host:/dest/
-r 递归同步目录 rsync -r /src/ /dest/
-P 显示进度 + 断点续传 rsync -aP /src/ /dest/
-n 模拟运行(不实际传输) rsync -anv /src/ /dest/
-e 指定远程 Shell(如 ssh) rsync -e "ssh -p 2222" /src/ user@host:/dest/
--delete 删除目标端多余文件(完全同步) rsync -a --delete /src/ /dest/
--exclude 排除指定文件/目录 rsync -a --exclude="*.tmp" /src/ /dest/
--bwlimit 限速(单位 KB/s) rsync -a --bwlimit=1000 /src/ /dest/
(3)、常用命令示例
数据同步
#本地同步
rsync -av /path/to/src/ /path/to/dest/ # 同步目录(保留文件属性)
rsync -a --delete /src/ /dest/ # 删除目标端多余文件(强制完全同步)
#远程同步(通过 SSH)
rsync -avz /local/path/ user@example.com:/remote/path/ # 本地 → 远程
rsync -avz user@example.com:/remote/path/ /local/path/ # 远程 → 本地
rsync -avz -e "ssh -p 2222" /src/ user@host:/dest/ # 指定 SSH 端口
#增量备份
rsync -a --backup --backup-dir=/backup/old /src/ /dest/ # 同步到备份目录(保留历史版本)
#排除文件
rsync -a --exclude="*.tmp" --exclude="*.log" /src/ /dest/ # 排除临时文件和日志
rsync -a --exclude-from=exclude.txt /src/ /dest/ #从文件读取排除规则,exclude.txt内容示例:*.tmp\n*.log
#限速传输
rsync -a --bwlimit=1000 /src/ user@host:/dest/ # 限速 1000 KB/s
#断点续传
rsync -aP /src/ user@host:/dest/ #-P = --partial --progress(保留部分文件 + 显示进度)。
#同步权限和所有者(需 root)
sudo rsync -a --no-o --no-g /src/ /dest/ # 不同步所有者和组
sudo rsync -a /src/ /dest/ # 同步所有者和组(需权限)
#对比源和目标差异
rsync -avn --delete /src/ /dest/ # 模拟运行,显示差异
#定时自动同步(结合 crontab)
0 3 * * * rsync -a /src/ user@host:/dest/ # 每天凌晨 3 点同步
6、telnet
(1)、命令简介
telnet 是一个早期的 网络协议和命令行工具,用于通过 明文 远程登录到其他主机或测试网络服务的连通性。由于安全性问题(数据传输未加密),现代系统已逐渐用 SSH 替代 telnet,但它仍可用于调试基础网络服务(如 HTTP、SMTP 等)。
#安装操作:
Linux(Debian/Ubuntu)
:sudo apt install telnet
Linux(CentOS/RHEL)
:sudo yum install telnet
Windows
:默认已安装,可通过命令提示符直接使用:telnet example.com 80
(2)、命令选项清单
#命令语法:telnet [选项] [主机名或IP] [端口]
#选项 作用 示例
-l <用户名> 指定登录用户名 telnet -l user example.com
-p <端口> 指定端口(默认 23) telnet example.com 80
-4 强制使用 IPv4 telnet -4 example.com
-6 强制使用 IPv6 telnet -6 example.com
(3)、常用命令示例
#远程登录(不推荐,明文传输)
telnet example.com # 默认使用端口 23
telnet 192.168.1.100 # 通过 IP 连接#测试网络服务连通性
telnet example.com 80 # 测试 HTTP 服务
telnet example.com 25 # 测试 SMTP 服务
telnet example.com 22 # 测试 SSH 服务(通常返回协议信息)
#测试成功返回如下信息
root@master:~# telnet 192.168.0.105 22
Trying 192.168.0.105...
Connected to 192.168.0.105.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.4
#按 Ctrl + ] 后输入 quit 退出。#手动发送协议命令
telnet example.com 80
GET / HTTP/1.1
Host: example.com#退出 telnet
交互模式下:输入 Ctrl + ],然后输入 quit。
直接退出:若连接失败,按 Ctrl + C 终止。