跳至内容

Linux 常用命令

面向日常开发与排障的 Linux 命令速查,涵盖文件、日志、进程、端口、网络、权限与服务管理。

  • Linux
  • Shell
  • 命令行

【…】 为待替换参数,每行独立使用。普通参数省略引号;实际路径或 URL 含空格、& 等 Shell 特殊字符时,需加引号。搜索模式保留单引号,避免被 Shell 提前解释。见 Bash 引号规则。

以下以 Linux、Bash 和 GNU 工具为准,部分工具需另行安装。

1. 目录与文件

目录与文件速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
pwd                                           # 当前目录
ls                                            # 目录内容
ls -l                                         # 详细列表
ls -lah                                       # 含隐藏项,大小按 K/M/G 显示
ls -lt                                        # 按修改时间倒序
cd 【目录】                                   # 切换目录
cd ..                                         # 上级目录
cd ~                                          # 家目录
cd -                                          # 上一次所在目录

mkdir -p 【目录路径】                         # 递归创建目录
touch 【文件】                                # 创建空文件或更新时间戳
cp 【源文件】 【目标路径】                    # 复制文件
cp -r 【源目录】 【目标路径】                 # 递归复制目录
mv 【源路径】 【目标路径】                    # 移动或重命名
ln -s 【目标绝对路径】 【链接路径】           # 创建软链接
rm 【文件】                                   # 删除文件
rm -r 【目录】                                # 递归删除目录
rm -rf 【目录】                               # 强制递归删除,不询问
rmdir 【空目录】                              # 删除空目录

cp、mv 的目标为已有目录时,源会放入其中;为已有文件时可能覆盖,加 -i 可在覆盖前询问。rm 不经过回收站。

2. 查看与编辑文件

文件查看与日志速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cat 【文件】                                  # 查看全文
cat -n 【文件】                               # 显示行号
less 【文件】                                 # 分页查看
head -n 【行数】 【文件】                     # 查看前 N 行
tail -n 【行数】 【文件】                     # 查看后 N 行
tail -f 【日志文件】                          # 跟踪新增日志
tail -F 【日志文件】                          # 按文件名跟踪,支持日志轮转
wc -l 【文件】                                # 统计换行符数量
sed -n '【起始行】,【结束行】p' 【文件】      # 只输出指定行范围
vim 【文件】                                  # 编辑文件

3. 查找文件与过滤日志

查找与过滤速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
find 【目录】 -name '【文件名模式】'          # 按名称递归查找,支持 * 通配符
find 【目录】 -type f -name '【文件名模式】'    # 仅查普通文件
grep '【匹配模式】' 【文件】                  # 正则匹配
grep -n '【匹配模式】' 【文件】               # 显示行号
grep -i '【匹配模式】' 【文件】               # 忽略大小写
grep -C 【行数】 '【匹配模式】' 【文件】     # 包含前后 N 行
grep -rn '【匹配模式】' 【目录】              # 递归搜索,带文件名和行号
grep -v '【匹配模式】' 【文件】               # 排除匹配行
grep -F '【关键词】' 【文件】                 # 按字面文本匹配,不解析正则
tail -f 【日志文件】 | grep --line-buffered '【匹配模式】'    # 实时过滤,逐行输出

--line-buffered 避免 grep 的输出缓冲造成显示延迟;需要跟踪轮转日志时,将 tail -f 改为 tail -F。

4. 进程、端口与后台运行

进程与端口速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
ps -ef                                        # 全部进程
ps -ef | grep '【进程关键词】'                # 筛选进程,结果可能含 grep 自身
ps aux                                        # 进程及 CPU、内存占用
ps -fp 【PID】                                # 指定进程详情
top                                           # 实时资源占用,按 1 展开各逻辑 CPU
top -p 【PID】                                # 跟踪指定进程
kill 【PID】                                  # 发送 TERM,请求退出
kill -9 【PID】                               # 发送 KILL,强制终止,不执行退出清理

lsof -i:【端口号】                            # 匹配本地或远端端口,含 TCP/UDP
sudo lsof -nP -iTCP:【端口号】 -sTCP:LISTEN   # 指定 TCP 端口的监听进程
lsof -p 【PID】                               # 进程打开的文件

【命令】 &                                    # 后台运行
nohup 【命令】 >> 【日志文件】 2>&1 &        # 忽略挂断信号,后台运行,追加日志
jobs -l                                       # 当前 Shell 的作业及 PID
fg %【作业号】                                # 恢复到前台,编号取自 jobs

lsof 的 -nP 禁用主机名与端口服务名解析;-iTCP 限定协议,-sTCP:LISTEN 限定监听状态。见 lsof 手册。

5. 网卡与网络排查

网卡与网络速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
ifconfig                                      # 已启用网卡
ifconfig -a                                   # 全部网卡,含未启用的网卡
ip addr                                       # 网卡与 IP 地址
ip route                                      # 路由表
hostname                                      # 主机名
ping -c 4 【主机或IP】                        # 发送 4 次 ICMP 探测
sudo netstat -tulnp                           # TCP 监听、UDP 接收端口及进程
sudo netstat -tulnp | grep -E ':【端口号】[[:space:]]'  # 按端口筛选
sudo netstat -tulnp | grep -F '【进程名关键词】'        # 按进程名文本筛选
sudo ss -tulnp                                # TCP 监听、UDP 接收端口及进程
nc -vz 【主机或IP】 【端口号】                # 探测 TCP 端口
nslookup 【域名】                             # DNS 查询

curl -I 【网址】                              # HEAD 请求,只看响应头
curl -v 【网址】                              # 显示连接与请求详情
curl -fL -o 【保存路径】 【下载地址】         # 跟随重定向下载,覆盖同名文件
wget -O 【保存路径】 【下载地址】             # 下载到指定文件,覆盖同名文件

ifconfig、netstat 属于 net-tools;未安装时可用 ip addr、ss。-tulnp:TCP / UDP / 监听类条目 / 数字地址与端口 / 进程。

端口后的 [[:space:]] 匹配空白,避免 80 误匹配 8080。grep 筛选的是整行文本,进程名对应 PID/Program name 列,不是完整启动命令。见 netstat 手册。

curl -f 使大多数 HTTP 400 及以上响应以失败退出,-L 跟随重定向,-o 指定输出文件。见 curl 选项说明。

6. CPU、内存与磁盘

系统资源速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
nproc                                         # 当前进程可用的 CPU 数量
nproc --all                                   # 系统报告的全部逻辑 CPU 数量
lscpu                                         # CPU 型号、核心与线程拓扑
free -h                                       # 内存与交换空间
vmstat 1                                      # 每秒查看 CPU、内存与 I/O 统计

lsblk -f                                      # 块设备、文件系统与挂载点
df -h                                         # 文件系统空间
df -i                                         # inode 使用情况
du -sh 【目录】                               # 目录总占用
du -h --max-depth=1 【目录】 | sort -hr       # 目录总量及一级子目录,按大小倒序

uptime                                        # 运行时长及 1/5/15 分钟负载
uname -a                                      # 内核信息
cat /etc/os-release                           # 发行版信息

nproc 统计可用处理单元,不是物理核心数,结果可能受 CPU 亲和性、配额等限制;--all 不按当前进程的这些限制计数。核心与线程关系看 lscpu,虚拟化环境中不要据此推断宿主机物理核数。见 nproc 与 lscpu 手册。

free 的 available 是估计无需交换即可使用的内存,不等于完全空闲的 free;负载均值也不是 CPU 使用率。

vmstat 1 首行的 CPU、I/O 速率是开机以来的平均值,后续行才是采样区间值。

7. 用户与权限

用户与权限速查 Shell
1
2
3
4
5
6
7
whoami                                        # 当前有效用户
id                                            # UID、GID 和所属组
sudo 【命令】                                 # 以 root 身份执行
chmod u+x 【脚本文件】                        # 所有者增加执行权限
chmod 644 【文件】                            # rw-r--r--
chmod 755 【目录】                            # rwxr-xr-x
sudo chown 【用户名】:【组名】 【路径】       # 修改所有者和所属组

8. 远程登录与文件传输

SSH 与文件传输速查 Shell
1
2
3
4
5
6
ssh 【用户名】@【主机或IP】                   # 远程登录
ssh -p 【端口号】 【用户名】@【主机或IP】     # 指定 SSH 端口
scp 【本地文件】 【用户名】@【主机或IP】:【远程目录】      # 上传文件
scp 【用户名】@【主机或IP】:【远程文件】 【本地目录】      # 下载文件
scp -r 【本地目录】 【用户名】@【主机或IP】:【远程目录】      # 上传目录
exit                                          # 退出当前 Shell / SSH 会话

指定端口:ssh -p,scp -P。

9. 打包与解压

打包与解压速查 Shell
1
2
3
4
5
6
7
8
tar -cvf 【归档文件.tar】 【目录】            # 打包 tar
tar -xvf 【归档文件.tar】                     # 解开 tar
tar -czvf 【压缩包.tar.gz】 【目录】          # 打包并 gzip 压缩
tar -xzvf 【压缩包.tar.gz】                   # 解压 tar.gz
tar -tzf 【压缩包.tar.gz】                    # 查看包内文件
tar -xzf 【压缩包.tar.gz】 -C 【目标目录】      # 解压到指定目录,目录须已存在
zip -r 【压缩包.zip】 【目录】                # 压缩为 zip
unzip 【压缩包.zip】 -d 【目标目录】          # 解压 zip

tar:c 创建、x 解开、t 列出,三者互斥;z 使用 gzip,v 显示过程,f 后接归档文件名。打包、解压均可能覆盖同名文件。

10. 输出重定向与常用组合

重定向与管道速查 Shell
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ps -ef > 【输出文件】                         # 保存进程列表,覆盖原文件
date >> 【日志文件】                          # 将当前时间追加到日志
bash 【脚本文件】 > 【日志文件】 2>&1        # 执行脚本,全部输出覆盖写入日志
bash 【脚本文件】 2>&1 | tee 【日志文件】    # 执行脚本,全部输出同时显示并保存,覆盖日志
sort 【文件】 | uniq -c | sort -nr            # 统计相同行的出现次数,按次数倒序

history                                       # 查看命令历史
history | grep '【关键词】'                   # 搜索命令历史
which 【命令名】                              # 外部命令路径
man 【命令名】                                # 命令手册

2>&1 将标准错误并入当时的标准输出,顺序会影响结果。> 会先清空目标文件,不能与输入文件相同。见 Bash 重定向说明。

11. 服务管理

适用于 systemd。【服务名】 指 systemd 管理的服务单元名,例如 nginx.service,不是进程号。下面第一条命令输出的 UNIT FILE 列会列出本机的服务单元名称。

服务操作速查 Shell
1
2
3
4
5
6
7
systemctl list-unit-files --type=service       # 列出已安装的服务单元,含未启动的服务
systemctl status 【服务名】                   # 服务状态与近期日志
sudo systemctl start 【服务名】               # 启动
sudo systemctl stop 【服务名】                # 停止
sudo systemctl restart 【服务名】             # 重启
sudo journalctl -u 【服务名】 -n 【条数】     # 最近 N 条服务日志
sudo journalctl -u 【服务名】 -f              # 跟踪服务日志

如果列表中有 nginx.service,就把 【服务名】 替换为它:

Nginx 服务示例 Shell
1
2
systemctl status nginx.service                # 查看 Nginx 服务状态
sudo journalctl -u nginx.service -n 50         # 查看该服务最近 50 条日志

systemctl status nginx.service 也可简写为 systemctl status nginx,省略 .service 后缀。见 systemctl 手册。

评论

使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。

阅读到这里时加载评论。