发布于
4452 字 · 23 分钟

Linux 命令实战手册:全栈开发者的终端生存指南

AI 摘要

作者
  • avatar
    姓名
    Corner430
    社交账号
题图

1 前言

这不是一本 Linux 教科书,而是一张命令地图。全文按开发者日常遇到的场景分区,每个命令只给最常用的 2-3 种写法。遇到问题时:看图定位区域 → 查表找命令 → 复制执行。

2 命令全景地图

Linux 命令全景地图

上图是全文的导航索引。六大区域对应后续章节,每个区域标注了最核心的命令。找到你的场景,直接跳到对应章节。

3 文件与目录

3.1 浏览与导航

命令用途常用写法
ls列出文件ls -la(详细+隐藏)、ls -lhS(按大小排序)、ls -lt(按时间排序)
cd切换目录cd -(上一个目录)、cd ~(主目录)、cd ../..(上两级)
pwd当前路径pwd
tree树形结构tree -L 2(只显示两层)、tree -d(只显示目录)

3.2 复制、移动、删除

命令用途常用写法
cp复制cp -r dir/ dst/(递归复制目录)、cp -i(覆盖前确认)
mv移动/重命名mv old new(重命名)、mv file dir/(移动)
rm删除rm -rf dir/(递归强制删除)、rm -i(逐个确认)
mkdir创建目录mkdir -p a/b/c(递归创建)
touch创建空文件touch file.txt

3.3 链接

命令用途常用写法
ln -s符号链接(快捷方式)ln -s /path/to/target link_name
ln硬链接ln target link_name
readlink查看链接指向readlink -f link_name(解析到最终路径)

3.4 查找文件

命令用途常用写法
find按条件查找find . -name "*.log"(按名称)
find . -type f -size +100M(大于 100M 的文件)
find . -mtime -7(7 天内修改过的)
find . -name "*.tmp" -delete(查找并删除)
locate快速查找(基于索引)locate filename(需先 updatedb
which查找命令位置which python
whereis查找二进制/源码/手册whereis gcc

3.5 通配符

符号含义示例
*匹配任意多个字符ls *.log
?匹配单个字符ls file?.txt
[abc]匹配括号内任一字符ls file[123].txt
{a,b}展开为多个选项cp file.{txt,bak}(复制为两个文件)

4 文本处理

4.1 查看文件

命令用途常用写法
cat查看全文cat filecat -n file(显示行号)
head查看开头head -n 20 file(前 20 行)
tail查看结尾tail -n 20 file(后 20 行)、tail -f file(实时跟踪)
less分页浏览less file/ 搜索,q 退出)

tail -f 是看实时日志的利器。加 grep 过滤更强:tail -f app.log | grep ERROR

4.2 搜索文本

| 命令 | 用途 | 常用写法 | | ------ | --------------- | ------------------------------------------------- | --------------------------- | | grep | 文本搜索 | grep "pattern" file | | | | grep -r "TODO" .(递归搜索目录) | | | | grep -i "error" file(忽略大小写) | | | | grep -n "func" file(显示行号) | | | | grep -v "debug" file(排除匹配行) | | | | grep -E "err | warn" file(正则,多模式) | | | | grep -c "error" file(统计匹配行数) | | rg | ripgrep(更快) | rg "pattern" .(递归搜索,自动忽略 .gitignore) |

4.3 文本处理

awk — 按列处理文本,三板斧够用:

# 打印第 1 和第 3 列
awk '{print $1, $3}' file

# 按条件过滤(第 3 列大于 100)
awk '$3 > 100' file

# 指定分隔符(如 CSV)
awk -F',' '{print $2}' data.csv

sed — 流编辑器,主要用替换和删除:

# 替换(每行第一个匹配)
sed 's/old/new/' file

# 全局替换(每行所有匹配)
sed 's/old/new/g' file

# 原地替换(直接修改文件)
sed -i 's/old/new/g' file

# 删除包含 pattern 的行
sed '/pattern/d' file

# 打印第 10-20 行
sed -n '10,20p' file

4.4 排序与统计

命令用途常用写法
sort排序sort filesort -n(数字排序)、sort -r(逆序)、sort -k2(按第 2 列)
uniq去重sort file | uniq(须先排序)、sort file | uniq -c(计数)
wc计数wc -l file(行数)、wc -w(词数)、wc -c(字节数)

4.5 管道辅助

命令用途常用写法
xargs将 stdin 转为参数find . -name "*.log" | xargs rm
cat urls.txt | xargs -I {} curl -O {}
cut按列截取cut -d':' -f1 /etc/passwd(以 : 分隔取第 1 列)
tr字符替换/删除echo "HELLO" | tr 'A-Z' 'a-z'(转小写)
tee同时输出到屏幕和文件cmd | tee output.log

5 权限与用户

权限位图解

5.1 查看权限

ls -la 输出的第一列就是权限位,格式为 drwxrwxrwx

位置含义说明
第 1 位类型d 目录、- 普通文件、l 链接
第 2-4 位Owner 权限文件所有者
第 5-7 位Group 权限所属组
第 8-10 位Other 权限其他用户

每组中:r=读(4)、w=写(2)、x=执行(1)。

5.2 修改权限

命令用途常用写法
chmod数字法chmod 755 file(rwxr-xr-x)、chmod 644 file(rw-r--r--)
chmod符号法chmod u+x file(给 owner 加执行权限)、chmod go-w file(去掉 group/other 的写权限)
chmod递归chmod -R 755 dir/
chown改所有者chown user:group filechown -R user:group dir/

常用权限速查

数字权限典型用途
755rwxr-xr-x可执行文件、目录
644rw-r--r--普通文件
700rwx------私有目录
600rw-------SSH 密钥

5.3 用户切换

命令用途常用写法
sudo以 root 执行单条命令sudo apt update
sudo -i切换到 root shell登录式 shell,加载 root 环境变量
su - user切换到指定用户su - deploy(加 - 加载该用户环境)
whoami当前用户whoami
id用户信息id(显示 uid、gid、groups)

6 进程管理

进程生命周期

6.1 查看进程

命令用途常用写法
ps进程快照ps aux(所有进程,BSD 风格)
ps -ef(所有进程,System V 风格)
ps aux | grep nginx(过滤特定进程)
top实时监控topq 退出,M 按内存排序,P 按 CPU 排序)
htop增强版 tophtop(支持鼠标、搜索、树形视图)
pgrep按名查 PIDpgrep nginx

6.2 终止进程

命令用途常用写法
kill发送信号kill PID(默认 SIGTERM)、kill -9 PID(强制终止)
killall按名终止killall nginx
pkill按模式终止pkill -f "python app.py"

常用信号

信号编号含义
SIGTERM15优雅终止(默认)
SIGKILL9强制终止(不可捕获)
SIGHUP1挂起/重载配置
SIGINT2中断(Ctrl+C)
SIGSTOP19暂停(Ctrl+Z)
SIGCONT18继续运行

6.3 后台运行

命令用途常用写法
&后台运行./server &
nohup防止挂断(退出终端后继续运行)nohup ./server > server.log 2>&1 &
disown将已运行的进程脱离终端Ctrl+Zbgdisown

nohup 典型用法nohup command > output.log 2>&1 &。含义:nohup 忽略挂断信号,> 重定向 stdout,2>&1 合并 stderr,& 放后台。

6.4 作业控制

操作命令说明
暂停前台进程Ctrl+Z进程变为 Stopped 状态
查看后台作业jobs列出当前 shell 的后台作业
恢复到前台fg %NN 为作业编号
恢复到后台bg %N以后台方式继续运行

6.5 定时任务

# 编辑当前用户的 crontab
crontab -e

# 查看当前用户的定时任务
crontab -l

crontab 格式

分 时 日 月 周  命令
*  *  *  *  *  command

# 示例
0 2 * * *   /path/to/backup.sh    # 每天凌晨 2*/5 * * * * /path/to/check.sh     # 每 5 分钟
0 0 * * 0   /path/to/weekly.sh    # 每周日零点
字段范围
0-59
0-23
1-31
1-12
0-7(0 和 7 都是周日)

7 I/O 重定向与管道

I/O 重定向

7.1 三个标准流

文件描述符默认指向
stdin(标准输入)0键盘
stdout(标准输出)1终端
stderr(标准错误)2终端

7.2 重定向操作

操作语法说明
覆盖写入cmd > filestdout 写入文件(覆盖)
追加写入cmd >> filestdout 追加到文件
输入重定向cmd < file从文件读取 stdin
错误重定向cmd 2> filestderr 写入文件
合并输出cmd > file 2>&1stdout 和 stderr 都写入文件
合并输出(简写)cmd &> file同上(Bash 4+)
丢弃输出cmd > /dev/null 2>&1静默执行,丢弃所有输出
丢弃错误cmd 2>/dev/null只丢弃错误信息

7.3 管道与 tee

# 管道:前一个命令的 stdout 作为后一个命令的 stdin
ps aux | grep nginx | grep -v grep

# tee:分流,同时输出到屏幕和文件
make 2>&1 | tee build.log

7.4 Here Document

# 多行输入
cat <<EOF > config.txt
server=192.168.1.1
port=8080
EOF

# 常用于需要多行文本的场景(配置文件、SQL 等)
mysql -u root <<EOF
CREATE DATABASE mydb;
USE mydb;
EOF

7.5 常用组合

# 后台运行 + 日志记录 + 忽略挂断
nohup ./deploy.sh > deploy.log 2>&1 &

# 命令输出同时看和存
./build.sh 2>&1 | tee build.log

# 只看错误信息
./script.sh 2>&1 1>/dev/null

8 磁盘与存储

磁盘信息层级

8.1 磁盘使用

命令用途常用写法
df文件系统磁盘使用df -h(人类可读)、df -hT(显示文件系统类型)
du目录占用空间du -sh *(当前目录下各项大小)、du -sh /path(指定目录总大小)
du -h --max-depth=1(只看一层)

df vs dudf 看的是文件系统整体使用情况(分区级别),du 看的是目录/文件占了多少空间。磁盘满了先用 df -h 定位哪个分区满,再用 du -sh * 找大目录。

8.2 设备信息

命令用途常用写法
lsblk列出块设备lsblk(树形显示磁盘和分区)
fdisk分区管理fdisk -l(查看分区表,需 root)
blkid查看设备 UUIDblkid

8.3 挂载

命令用途常用写法
mount挂载mount /dev/sdb1 /mnt/data
umount卸载umount /mnt/data
findmnt查看挂载点findmnt(树形显示所有挂载)

开机自动挂载编辑 /etc/fstab,格式:

设备/UUID    挂载点    文件系统    选项    dump    fsck
UUID=xxx    /mnt/data    ext4    defaults    0    2

8.4 清理空间

# 查找大于 100M 的文件
find / -type f -size +100M 2>/dev/null | head -20

# 查看当前目录下各子目录大小并排序
du -sh */ | sort -rh | head -10

# 清理 apt 缓存(Debian/Ubuntu)
sudo apt autoremove && sudo apt clean

# 清理 journal 日志(保留最近 3 天)
sudo journalctl --vacuum-time=3d

9 内存与性能

9.1 内存

命令用途常用写法
free内存使用free -h(人类可读)

free -h 输出解读:

含义
total物理内存总量
used已使用(含缓存)
free完全空闲
buff/cache缓冲/缓存(可回收)
available实际可用(free + 可回收的 cache)

看内存够不够用,看 available 而不是 free。Linux 会主动用空闲内存做缓存,所以 free 很小是正常的。

9.2 CPU 与负载

命令用途常用写法
uptime负载均值三个数字分别是 1/5/15 分钟平均负载
nprocCPU 核数nproc(负载 > 核数说明过载)
lscpuCPU 详细信息lscpu

9.3 系统监控

命令用途常用写法
vmstat虚拟内存/CPU/IOvmstat 1 5(每秒采样,共 5 次)
iostat磁盘 I/Oiostat -x 1(扩展统计,每秒刷新)
sar系统综合统计sar -u 1 5(CPU)、sar -r 1 5(内存)
dmesg内核日志dmesg -T | tail(带时间戳查看最近日志)

9.4 /proc 文件系统

路径内容
/proc/cpuinfoCPU 信息
/proc/meminfo内存信息
/proc/loadavg系统负载
/proc/PID/status指定进程的状态
/proc/PID/fd/指定进程打开的文件描述符

10 网络

网络排查路径

10.1 接口与路由

命令用途常用写法
ip addr查看网络接口ip a(简写)
ip route查看路由表ip r
ip link查看/管理接口状态ip link set eth0 up/down
hostname主机名hostname -I(显示所有 IP)

10.2 连通测试

命令用途常用写法
ping测试连通性ping -c 4 google.com(发 4 个包)
traceroute路由追踪traceroute google.com
mtr持续路由追踪(增强版)mtr google.com

10.3 DNS

命令用途常用写法
digDNS 查询dig example.comdig +short example.com(只显示 IP)
nslookupDNS 查询(交互式)nslookup example.com
hostDNS 查询(简洁)host example.com

10.4 HTTP 请求

curl 常用参数:

参数用途示例
-s静默模式curl -s url
-o输出到文件curl -o file url
-O保存为远程文件名curl -O url
-L跟随重定向curl -L url
-H自定义请求头curl -H "Authorization: Bearer token" url
-X指定 HTTP 方法curl -X POST url
-dPOST 数据curl -X POST -d '{"key":"val"}' -H "Content-Type: application/json" url
-I只显示响应头curl -I url
-w自定义输出格式curl -w "%{http_code}" -s -o /dev/null url(只看状态码)
# 下载文件
wget https://example.com/file.tar.gz
wget -c url   # 断点续传

10.5 端口与连接

命令用途常用写法
ss查看端口/连接ss -tlnp(TCP 监听端口 + 进程信息)
ss -tunp(所有 TCP/UDP 连接)
netstat同 ss(旧版)netstat -tlnp
lsof查看端口占用lsof -i :8080(谁在用 8080 端口)

ssnetstat 的现代替代品,速度更快。参数含义:-t TCP、-u UDP、-l 监听、-n 数字显示、-p 显示进程。

10.6 防火墙

ufw(Debian/Ubuntu,简单易用):

命令用途
ufw status查看状态
ufw allow 80允许 80 端口
ufw deny 3306拒绝 3306 端口
ufw allow from 192.168.1.0/24允许网段
ufw enable / ufw disable启用/禁用

iptables(底层,更灵活):

# 查看规则
iptables -L -n

# 允许 80 端口入站
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 拒绝所有入站(危险,确保 SSH 已放行)
iptables -P INPUT DROP

10.7 远程操作

命令用途常用写法
ssh远程登录ssh user@hostssh -p 2222 user@host(指定端口)
scp远程复制scp file user@host:/path/scp -r dir/ user@host:/path/
rsync增量同步rsync -avz src/ user@host:/dst/(压缩传输,只传差异)

11 系统服务

11.1 systemctl

命令用途
systemctl status nginx查看服务状态
systemctl start nginx启动服务
systemctl stop nginx停止服务
systemctl restart nginx重启服务
systemctl reload nginx重载配置(不中断服务)
systemctl enable nginx开机自启
systemctl disable nginx取消开机自启
systemctl list-units --type=service列出所有服务

11.2 journalctl

命令用途
journalctl -u nginx查看指定服务日志
journalctl -u nginx -f实时跟踪日志
journalctl --since "2024-01-01" --until "2024-01-02"时间范围过滤
journalctl -p err只看错误级别日志
journalctl --disk-usage查看日志占用空间

12 包管理速查

操作apt (Debian/Ubuntu)yum/dnf (RHEL/CentOS)pacman (Arch)
更新索引apt updateyum makecachepacman -Sy
升级所有包apt upgradeyum updatepacman -Syu
安装apt install pkgyum install pkgpacman -S pkg
卸载apt remove pkgyum remove pkgpacman -R pkg
搜索apt search keywordyum search keywordpacman -Ss keyword
查看已安装apt list --installedyum list installedpacman -Q
清理缓存apt cleanyum clean allpacman -Sc
查看包信息apt show pkgyum info pkgpacman -Qi pkg

13 实用组合技

# 1. 查找当前目录下最大的 10 个文件/目录
du -sh * | sort -rh | head -10

# 2. 查看哪个进程占用了 8080 端口
ss -tlnp | grep 8080
# 或
lsof -i :8080

# 3. 批量替换目录下所有文件中的文本
find . -type f -name "*.py" -exec sed -i 's/old_api/new_api/g' {} +

# 4. 实时过滤日志中的错误
tail -f /var/log/app.log | grep --line-buffered "ERROR"

# 5. 统计当前目录下各类型文件数量
find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn

# 6. 查看 TCP 连接状态分布
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn

# 7. 压缩与解压
tar czf archive.tar.gz dir/       # 压缩
tar xzf archive.tar.gz            # 解压
tar xjf archive.tar.bz2           # 解压 bz2
unzip archive.zip -d target_dir/  # 解压 zip

# 8. 监控命令输出变化(每 2 秒刷新)
watch -n 2 'ss -tlnp'

14 快速参考

14.1 文件操作

场景命令
列出文件(含隐藏)ls -la
递归复制目录cp -r src/ dst/
递归删除rm -rf dir/
查找文件find . -name "*.log"
创建多级目录mkdir -p a/b/c

14.2 文本处理

场景命令
递归搜索文本grep -rn "pattern" .
实时看日志tail -f file
替换文件内容sed -i 's/old/new/g' file
按列提取awk '{print $1}' file
统计行数wc -l file

14.3 进程与后台

场景命令
查所有进程ps aux
后台运行不挂断nohup cmd > log 2>&1 &
杀进程kill PID / kill -9 PID
查看后台作业jobs

14.4 磁盘与内存

场景命令
磁盘使用总览df -h
目录大小du -sh *
内存使用free -h
系统负载uptime

14.5 网络

场景命令
查看本机 IPip a / hostname -I
测试连通性ping -c 4 host
查看监听端口ss -tlnp
GET 请求curl -s url
远程同步rsync -avz src/ host:/dst/

14.6 系统管理

场景命令
服务状态systemctl status name
重启服务systemctl restart name
查看服务日志journalctl -u name -f
安装软件(Debian)apt install pkg
定时任务crontab -e

15 参考链接

版权声明

除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。