常用Linux命令(六)

1、ssh 命令
‌SSH (Secure Shell)‌ 是最常用的‌远程登录‌和‌文件传输‌协议。它通过加密通道在不安全的网络中安全地执行命令。

基本语法

ssh [用户]@[主机IP或域名]

参数说明

参数 说明 示例
‌-p‌ 指定端口(默认 22) ssh -p 2222 user@host
‌-i‌ 指定私钥文件 ssh -i ~/.ssh/id_rsa user@host
‌-o‌ 指定配置选项 ssh -o StrictHostKeyChecking=no user@host
‌-v‌ verbose模式(调试用) ssh -v user@host (显示连接细节)
‌-C‌ 启用压缩(慢网加速) ssh -C user@host
‌-N‌ 不执行远程命令(仅转发端口) ssh -N -L 8080:localhost:80 user@host
‌-f‌ 后台运行 ssh -f -N -L ...

实际使用举例

#生成本地密钥对
ssh-keygen -t rsa -b 4096

# 查看远程主机的磁盘空间
ssh user@192.168.1.100 "df -h"

# 在远程主机重启服务
ssh root@192.168.1.100 "systemctl restart nginx"

2、scp 命令
scp (Secure Copy)‌ 是基于 SSH 协议在 Linux/Unix 系统之间进行‌加密文件传输‌的命令。它的使用语法与 cp 非常相似,但支持远程主机。

基本语法

scp [选项] [源文件] [目标路径]

参数说明

参数 说明 示例
‌-r‌ 递归复制目录 scp -r dir/ host:/path
‌-P‌ 指定端口 (‌大写‌) scp -P 2222 ...
‌-p‌ 保留原文件属性 scp -p ...
‌-C‌ 启用压缩传输 scp -C ... (适合慢网)
‌-l‌ 限制带宽 (Kbit/s) scp -l 800 ...
‌-i‌ 指定私钥文件 scp -i ~/.ssh/key ...
‌-v‌ 显示调试信息 scp -v ... (排查连接问题)

实际使用举例

#将本地的 project.zip 上传到远程服务器的 /home/user/ 目录。
scp project.zip user@192.168.1.100:/home/user/

# 将远程服务器的 /var/log/nginx/access.log 下载到当前目录。
scp user@192.168.1.100:/var/log/nginx/access.log ./

# 递归复制整个目录
# 上传目录
scp -r ./my_project user@192.168.1.100:/opt/

# 下载目录
scp -r user@192.168.1.100:/opt/my_project ./

3、netstat 命令
netstat (Network Statistics)‌ 是一个用于显示网络连接、路由表、接口统计等信息的命令行工具。
重要提示‌:在现代 Linux 发行版(如 CentOS 7+, Ubuntu 18.04+)中,netstat 已被标记为‌过时(deprecated)‌,官方推荐使用 ‌ss‌ 命令替代。但 netstat 依然广泛存在于旧系统和脚本中,且参数更直观,因此掌握它仍然很有必要。

netstat -tlnp

输出示例

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5678/nginx
tcp6       0      0 :::3306                 :::*                    LISTEN      910/mysqld

参数说明

参数 说明 常用组合
‌-t‌ TCP 协议 -tlnp
‌-u‌ UDP 协议 -ulnp
‌-l‌ 仅显示监听 (Listening) -tlnp
‌-n‌ 数字显示 (不解析 DNS) -tlnp
‌-p‌ 显示进程 PID/Name -tlnp (需 root 权限)
‌-r‌ 显示路由表 (等价于 route) -rn
‌-i‌ 显示网络接口信息 (等价于 ifconfig) -i
‌-s‌ 显示网络统计摘要 -s
‌-c‌ 持续刷新 (类似 top) -cnt

实际使用举例

#查找特定端口被谁占用
netstat -tlnp | grep 8080

# 统计各状态的连接数
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn

4、ss 命令
‌ss (Socket Statistics)‌ 是 Linux 系统中用于显示 Socket 统计信息的命令行工具。它是 netstat 的‌现代替代品

ss -tlnp

输出示例

State      Recv-Q Send-Q Local Address:Port   Peer Address:Port  Process
LISTEN     0      128    0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
LISTEN     0      128    0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=5678,fd=6))

参数说明

参数 说明 示例
‌-t‌ TCP 协议 ss -t
‌-u‌ UDP 协议 ss -u
‌-l‌ 仅显示监听 (Listening) ss -tl
‌-a‌ 显示所有 (All) ss -ta
‌-n‌ 数字显示 (不解析) ss -tn
‌-p‌ 显示进程信息 ss -tp (需 root)
‌-s‌ 显示概要统计 ss -s
‌-m‌ 显示内存使用详情 ss -tm
‌-o‌ 显示计时器信息 ss -to
‌-4 / -6‌ 仅 IPv4 / IPv6 ss -4tlnp

实际使用举例

#查找特定端口被谁占用
ss -tlnp | grep 8080

ss -tlnp sport = :8080

# 统计各状态的连接数
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

5、lsof 命令
lsof (List Open Files)‌ 是 Linux/Unix 系统中一个非常强大的工具,用于列出‌当前系统打开的文件‌。

在 Linux 中,“一切皆文件”,因此 lsof 不仅可以查看普通文件,还可以查看:

  • ‌网络连接‌(Socket)
  • ‌目录‌
  • ‌设备文件‌(如 /dev/sda)
  • ‌管道‌、‌符号链接‌等

参数说明

参数 说明 示例
‌-i‌ 列出网络连接 (TCP/UDP) lsof -i :80
‌-i:port‌ 指定端口 lsof -i :22
‌-i@host‌ 指定主机 IP lsof -i@192.168.1.1
‌-i tcp/udp‌ 指定协议 lsof -i tcp
‌-u user‌ 指定用户 lsof -u www-data
‌-p pid‌ 指定进程 ID lsof -p 1234
‌-c cmd‌ 指定命令名 lsof -c nginx
‌+D dir‌ 递归查找目录下打开的文件 lsof +D /var/log
‌+d dir‌ 仅查找目录本身(不递归) lsof +d /mnt
‌-t‌ 仅输出 PID(方便脚本处理) lsof -t -i :80
‌-n‌ 不解析主机名(加速显示) lsof -n -i :80
‌-P‌ 不解析端口名(加速显示) lsof -P -i :80

实际使用举例

#杀死占用端口的进程
lsof -t -i :8080 | xargs kill -9

# 查看某个程序打开了哪些文件
lsof -c python

#查看某个用户打开的文件
lsof -u username

lsof VS ss/netstat

功能 lsof ss / netstat
‌主要用途‌ ‌通用文件查看‌(含网络、文件、目录) ‌专用网络统计‌
‌查看端口占用‌ ✅ lsof -i :port (直观,带进程名) ✅ ss -tlnp (更快,适合高并发)
‌查看普通文件占用‌ ✅ lsof /path/to/file ❌ 不支持
‌性能‌ 较慢(遍历内核结构) ‌极快‌(直接读取内核 socket 表)
‌适用场景‌ 排查文件占用、端口占用、调试进程 监控网络连接、高并发分析
posted @ 2026-06-04 13:44  alex_lau  阅读(28)  评论(0)    收藏  举报