Linux 命令指南 — 开发者必备命令行参考手册
全面的 Linux 命令行工具参考手册,涵盖文件系统导航、文本处理、进程管理、网络命令、权限管理、SSH 远程连接和 Shell 效率技巧,附带真实示例。
TL;DR 速览
本指南涵盖开发者每天都会用到的核心 Linux 命令——从文件系统导航、文件管理,到文本处理、进程管理、权限配置和 SSH 远程访问。每个命令都附有实用标志和真实示例,聚焦开发者工作流场景。
核心要点
find和grep是最通用的搜索工具,尽早掌握它们的标志参数- 管道(
|)可以串联命令,构建强大的单行命令 chmod、chown控制访问权限,理解八进制和符号模式的区别ps aux、top和kill是进程管理三件套- SSH 密钥认证 +
~/.ssh/config让远程工作更流畅 alias和 Shell 函数能节省大量重复输入- 大文件或增量传输时,
rsync优于scp - 执行破坏性命令前,始终用
--dry-run或echo预演
简介
Linux 命令行是开发者工具箱中最强大的工具之一。无论是将应用部署到生产服务器、自动化构建流水线、调试问题,还是高效管理文件,掌握终端命令是区分高效开发者与普通开发者的关键。
本指南作为全面参考手册,涵盖日常使用的核心命令。每个命令都展示了实用标志和真实示例,不仅展示语法,更解释何时和为何使用该命令,重点关注开发者工作流。
1. 文件系统导航
高效在 Linux 文件系统中移动是所有操作的基础。这些命令帮助你定位自己的位置并找到文件。
ls — 列出目录内容
ls 是使用最频繁的命令,列出当前或指定路径下的文件和目录。
# 基本列表
ls
# 长格式(含权限、所有者、大小、日期)
ls -l
# 包含隐藏文件(点文件)
ls -la
# 人性化文件大小
ls -lh
# 按修改时间排序(最新在前)
ls -lt
# 逆序(最旧在前)
ls -ltr
# 列出指定目录
ls -la /var/logcd, pwd, find, locate
# 切换到主目录
cd ~
# 返回上一个目录
cd -
# 打印当前目录
pwd
# 按名称查找文件
find /home -name "config.json"
# 按扩展名查找
find . -name "*.log"
# 查找最近7天修改的文件
find . -mtime -7
# 快速全局查找(使用索引)
locate nginx.conf
sudo updatedb # 更新索引2. 文件操作
cp, mv, rm, mkdir, touch, ln
# 复制文件
cp source.txt dest.txt
cp -r mydir/ /backup/ # 递归复制目录
cp -p file.txt /backup/ # 保留时间戳和权限
# 移动/重命名
mv oldname.txt newname.txt
mv file.txt /tmp/
# 删除(谨慎使用!)
rm file.txt
rm -rf mydir/ # 强制递归删除
rm -i file.txt # 交互确认
# 创建目录
mkdir myproject
mkdir -p /var/log/myapp/2024 # 含父目录
# 创建空文件
touch newfile.txt
# 创建符号链接
ln -s /path/to/original symlink
ln original.txt hardlink.txt # 硬链接3. 文本处理
Linux 文本处理工具极其强大,通过管道组合使用可构成完整的数据转换流水线。
cat, grep, sed, awk
# cat: 显示文件内容
cat file.txt
cat -n file.txt # 显示行号
# grep: 搜索文本模式
grep "error" logfile.txt
grep -i "Error" logfile.txt # 不区分大小写
grep -r "TODO" ./src/ # 递归搜索
grep -n "function" app.js # 显示行号
grep -v "debug" logfile.txt # 反向匹配
grep -E "error|warning" app.log # 扩展正则
# sed: 流编辑器
sed 's/old/new/g' file.txt # 替换所有
sed -i 's/localhost/prod.db/g' .env # 原地修改
sed '/^#/d' config.txt # 删除注释行
sed -n '10,20p' file.txt # 打印指定行
# awk: 模式处理
awk -F',' '{print $2}' data.csv # 打印第2列
awk '$3 > 100' data.txt # 过滤行
awk '{sum += $3} END {print sum}' data.txt # 求和
awk -F: '{print $1, $7}' /etc/passwd # 处理passwdcut, sort, uniq, wc
# cut: 提取字段
cut -d',' -f1,3 data.csv # 提取第1和第3字段
cut -c1-10 file.txt # 前10个字符
# sort: 排序
sort file.txt # 字母序
sort -n numbers.txt # 数字序
sort -rh sizes.txt # 逆序人性化大小
sort -u file.txt # 去重排序
# uniq: 过滤重复行(需先排序)
sort file.txt | uniq # 去重
sort file.txt | uniq -c # 统计出现次数
sort file.txt | uniq -d # 仅显示重复行
# wc: 计数
wc -l file.txt # 行数
wc -w file.txt # 单词数
wc -c file.txt # 字节数4. 进程管理
ps, top, kill, nohup
# 查看所有进程
ps aux
# 按CPU使用率排序
ps aux --sort=-%cpu | head -10
# 实时监控(交互式)
top
htop # 增强版,更友好
# 按名称杀进程
pkill nginx
killall node
pkill -9 python # 强制杀
# 按PID杀进程
kill PID
kill -9 PID # 强制杀(SIGKILL)
# 后台运行并免疫挂断信号
nohup ./server.sh &
nohup python app.py > app.log 2>&1 &
# 作业控制
Ctrl+Z # 暂停当前进程
bg %1 # 恢复到后台
fg %1 # 恢复到前台
jobs # 列出后台作业5. 权限与所有权
chmod, chown, chgrp
# chmod: 修改权限(八进制)
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.txt # rw-r--r--
chmod 600 ~/.ssh/id_rsa # rw------- (私钥)
chmod -R 755 /var/www/html # 递归设置
# chmod: 符号模式
chmod +x script.sh # 添加执行权限
chmod u+x,g-w file.txt # 用户+x,组-w
chmod a+r file.txt # 所有人+读
# chown: 修改所有者
chown newuser file.txt
chown newuser:newgroup file.txt
chown -R www-data:www-data /var/www/html
# chgrp: 修改所属组
chgrp www-data /var/www/html| 八进制 | 符号表示 | 含义 | 常用场景 |
|---|---|---|---|
| 755 | rwxr-xr-x | 所有者全权,其他人读+执行 | 目录、可执行脚本 |
| 644 | rw-r--r-- | 所有者读写,其他只读 | 配置文件、Web资源 |
| 600 | rw------- | 仅所有者读写 | SSH私钥、密钥文件 |
| 400 | r-------- | 仅所有者只读 | 证书文件 |
6. 网络命令
curl, wget, ping, ss, ip
# curl: 数据传输
curl https://api.example.com/users # GET请求
curl -X POST https://api.example.com -H "Content-Type: application/json" -d '{"name":"Alice"}' # POST JSON
curl -H "Authorization: Bearer TOKEN" url # 带认证
curl -O https://example.com/file.tar.gz # 下载文件
curl -L https://example.com # 跟随重定向
curl -v https://example.com # 详细调试
# wget: 文件下载
wget https://example.com/file.tar.gz
wget -c https://example.com/file.iso # 断点续传
wget -b https://example.com/file.iso # 后台下载
# ping: 测试连通性
ping google.com
ping -c 4 8.8.8.8
# ss: 查看网络连接(netstat现代替代品)
ss -tuln # 监听中的TCP/UDP端口
ss -tp # 显示进程名
ss -tnp state established # 已建立的连接
# ip: 网络接口管理
ip addr show # 显示所有接口
ip route show # 路由表
ip link set eth0 up # 启用接口7. 磁盘与内存
# df: 文件系统使用情况
df -h # 人性化格式
df -Th # 含文件系统类型
# du: 目录/文件磁盘用量
du -sh . # 当前目录总大小
du -sh /var/log # 指定目录大小
du -sh * | sort -h # 当前目录各项大小并排序
du -h --max-depth=1 /home # 深度1
# free: 内存使用
free -h # 人性化格式
watch -n 1 free -h # 实时监控
# lsblk: 块设备列表
lsblk
lsblk -f # 含文件系统类型和挂载点8. 包管理
# apt (Debian/Ubuntu)
sudo apt update # 更新包列表
sudo apt upgrade # 升级所有包
sudo apt install nginx # 安装
sudo apt remove nginx # 卸载
sudo apt purge nginx # 卸载含配置文件
apt search keyword # 搜索
# yum/dnf (RHEL/CentOS/Fedora)
sudo yum update
sudo yum install httpd
sudo dnf install nginx # dnf为yum现代替代
# brew (macOS)
brew update
brew install node
brew upgrade node
brew uninstall node
brew list9. SSH 与远程访问
# 基本连接
ssh user@hostname
ssh -p 2222 user@host # 指定端口
ssh -i ~/.ssh/id_rsa user@host # 使用密钥
# 远程执行命令
ssh user@host "ls -la /var/www"
# SSH隧道(本地端口转发)
ssh -L 8080:localhost:80 user@host
# ~/.ssh/config 示例
Host myserver
HostName 192.168.1.100
User deploy
Port 2222
IdentityFile ~/.ssh/deploy_key
# 配置后直接使用:ssh myserver
# scp: 安全复制
scp file.txt user@host:/remote/path/
scp user@host:/remote/file.txt ./
scp -r ./mydir user@host:/home/user/
# rsync: 增量同步(推荐用于大文件)
rsync -avz ./src/ user@host:/var/www/app/
rsync -avz --delete ./src/ user@host:/var/www/ # 删除目标多余文件
rsync -avzn ./src/ user@host:/var/www/ # 演练模式
rsync -avz --exclude='node_modules' ./src/ user@host:/app/10. Shell 效率技巧
# alias: 命令快捷方式
alias ll='ls -la'
alias gs='git status'
alias ..='cd ..'
# 永久添加到 ~/.bashrc 或 ~/.zshrc
echo "alias ll='ls -la'" >> ~/.bashrc
source ~/.bashrc
# history: 命令历史
history
history 20 # 最近20条
Ctrl+R # 交互搜索历史
!! # 重新执行上条命令
!42 # 执行历史编号42的命令
# 管道与重定向
ls -la | grep ".txt" # 管道
command > output.txt # 重定向(覆盖)
command >> output.txt # 追加
command 2> errors.log # 重定向stderr
command > out.log 2>&1 # stdout+stderr都重定向
command | tee output.txt # 输出到文件同时继续传递
# xargs: 批量执行
find . -name "*.log" | xargs rm -f
cat urls.txt | xargs curl -O
find . -name "*.txt" -print0 | xargs -0 wc -l # 处理含空格的文件名
# 实用单行命令
grep -rn "TODO" ./src --include="*.ts" # 查找所有TODO
tail -f /var/log/nginx/access.log # 实时查看日志
lsof -i :3000 # 查看3000端口使用
pkill -f node # 杀死所有node进程
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10 # 最常用命令常见问题解答
如何在 Linux 中按文件名查找文件?
使用 find 命令:find /path -name "filename.txt"。不区分大小写搜索用 -iname。搜索当前目录:find . -name "*.log"。locate 命令使用预建索引,全局搜索更快,使用前需运行 sudo updatedb。
cp 和 mv 有什么区别?
cp 复制文件,原文件保留不变。mv 移动或重命名文件,原位置的文件被移走。复制目录用 cp -r;只需重命名而不需要保留副本时用 mv。
如何查看 Linux 磁盘使用情况?
用 df -h 查看文件系统级别的磁盘占用。用 du -sh /path 查看特定目录大小,du -sh * | sort -h 列出当前目录各项大小并排序。
如何按名称杀死进程?
使用 pkill 进程名 或 killall 进程名。先找 PID:pgrep 进程名 或 ps aux | grep 进程名,再 kill PID。强制杀:kill -9 PID 或 pkill -9 进程名。
chmod 755 是什么意思?
设置权限:所有者可读/写/执行(7=4+2+1),组可读/执行(5=4+0+1),其他人可读/执行。这是目录和可执行脚本的标准权限。使用 chmod +x 文件名 可快速添加执行权限。
如何在文件中搜索文本?
使用 grep "模式" 文件名。递归搜索目录:grep -r "模式" /路径。加 -n 显示行号,-i 不区分大小写,-l 只列出匹配文件名,-E 使用扩展正则表达式。
如何使用 SSH 连接远程服务器?
使用 ssh 用户名@主机名。指定端口加 -p。密钥认证:ssh -i ~/.ssh/id_rsa user@host。创建 ~/.ssh/config 配置主机别名,避免每次重复输入参数。
如何使用管道和重定向?
管道(|)将前一命令的输出传给下一命令。用 > 重定向到文件(覆盖),>> 追加。用 2> 重定向错误输出,> file 2>&1 同时重定向 stdout 和 stderr。用 tee 同时写入文件并继续传递管道。