本文是一份面向开发工作的 Linux 速查手册,不追求收录所有命令,只保留高频、实用、值得记住的部分。示例默认使用 Bash;不同发行版、macOS 和 BusyBox 的个别参数可能不同,拿不准时先看帮助:
1 2 3 4
| man command command --help type command command -v node
|
一、目录与文件
目录操作
| 命令 |
作用 |
pwd |
显示当前目录 |
ls -lah |
查看文件、权限、大小和隐藏文件 |
cd /path |
进入指定目录 |
cd ~ |
返回当前用户家目录 |
cd - |
返回上一次所在目录 |
mkdir -p logs/app |
创建多级目录 |
路径中,~ 表示家目录,. 表示当前目录,.. 表示上一级目录,/ 表示文件系统根目录。
文件操作
1 2 3 4 5 6 7
| touch app.log cp config.example.yml config.yml cp -r public public-backup mv old.txt new.txt rm app.log rm -r old-directory ln -s /opt/myapp/current myapp
|
rm 默认没有回收站。使用 rm -rf 前先用 pwd 和 ls 确认当前位置和目标。
查看文件
1 2 3 4 5 6 7
| cat package.json less app.log head -n 20 app.log tail -n 50 app.log tail -f app.log wc -l app.log stat app.log
|
搜索文件和内容
1 2 3 4 5 6
| find . -name "*.ts" find . -type f -size +100M find logs -type f -mtime -7 grep -Rni "TODO" src grep -v "DEBUG" app.log rg "TODO|FIXME" src
|
rg(ripgrep)速度快且默认遵守 .gitignore,开发中通常比 grep -R 更顺手。
二、管道与重定向
1 2 3 4 5 6 7 8
| command > output.log command >> output.log command 2> error.log command > all.log 2>&1 command1 | command2 command1 && command2 command1 || command2 echo $?
|
常见组合:
1 2 3
| ps aux | grep '[n]ginx' sort access.log | uniq -c | sort -nr du -ah . | sort -h | tail -n 20
|
三、权限与用户
ls -l 中的 r、w、x 分别代表读取、写入、执行,权限依次属于文件所有者、所属组和其他用户。
1 2 3 4 5 6 7 8
| chmod u+x deploy.sh chmod 644 config.yml chmod 755 deploy.sh chmod 600 secret.env chown alice:dev app.log whoami id sudo command
|
不要用 chmod -R 777 粗暴解决权限问题。通常应该检查运行用户、文件所有者和真正需要的权限。
四、进程、端口与系统资源
进程
1 2 3 4 5 6 7 8
| ps aux top pgrep -af node kill 12345 kill -KILL 12345 jobs command & nohup command > app.log 2>&1 &
|
正式服务更适合交给 systemd、Docker 或专门的进程管理工具,不建议长期依赖 nohup。
网络与端口
1 2 3 4 5 6 7 8
| ip addr ip route ss -lntp lsof -i :3000 ping -c 4 example.com curl -I https://example.com curl -v https://example.com dig example.com
|
磁盘与内存
1 2 3 4 5
| df -h du -sh . du -h --max-depth=1 /var free -h uptime
|
systemd 服务与日志
1 2 3 4 5 6 7
| systemctl status nginx sudo systemctl restart nginx sudo systemctl reload nginx sudo systemctl enable nginx journalctl -u nginx -n 100 journalctl -u nginx -f journalctl --since "30 min ago"
|
不是所有 Linux 系统都使用 systemd,遇到命令不存在时需查看发行版使用的服务管理工具。
五、压缩与解压
1 2 3 4 5 6
| tar -czf project.tar.gz project/ tar -tzf project.tar.gz tar -xzf project.tar.gz tar -xzf project.tar.gz -C /tmp zip -r project.zip project/ unzip project.zip
|
六、开发中常见目录
Linux 的所有文件都位于 / 这棵目录树中。
| 目录 |
开发中常见用途 |
/home/<user> |
普通用户家目录,常用于存放代码和个人配置 |
/root |
root 用户的家目录,不等同于 / |
/etc |
系统和服务配置,如 Nginx、SSH、hosts |
/usr/bin |
系统安装的大多数命令 |
/usr/local/bin |
手动安装的工具和自建脚本 |
/opt |
独立部署的第三方程序 |
/var/log |
系统和服务日志 |
/var/lib |
数据库、包管理器等应用状态数据 |
/tmp |
临时文件,可能被系统自动清理 |
/run |
PID、Socket 等本次启动期间的运行数据 |
/proc |
内核和进程信息,如 /proc/<PID> |
/dev |
磁盘、终端等设备文件 |
/mnt、/media |
磁盘和可移动介质挂载点 |
家目录中常见的开发配置:
1 2 3 4 5 6 7
| ~/.ssh/ SSH 密钥和配置 ~/.config/ 用户级应用配置 ~/.cache/ 用户级缓存 ~/.local/bin/ 用户安装的命令 ~/.gitconfig Git 用户配置 ~/.bashrc Bash 交互式配置 ~/.zshrc Zsh 交互式配置
|
项目通常放在 ~/projects/my-app,不要把代码长期放在 /root、/tmp 或系统目录中。
七、环境变量
1 2 3 4 5 6 7
| APP_ENV=development export APP_ENV=development echo "$APP_ENV" printenv APP_ENV env unset APP_ENV APP_ENV=test npm test
|
推荐使用 ${变量名} 明确边界:
1 2
| echo "${PROJECT_DIR}/dist" echo "${APP_PORT:-3000}"
|
PATH
输入命令时,Shell 会按 PATH 从左到右查找可执行文件:
1 2 3
| echo "$PATH" command -v node export PATH="$HOME/.local/bin:$PATH"
|
直接执行 export 只对当前终端有效。需要持久化时,写入当前 Shell 的配置文件,然后新开终端或重新加载:
systemd、CI、IDE 和 SSH 非交互会话不一定读取这些文件,因此“终端里存在的变量”不代表服务也能读取。
.env
1 2
| APP_ENV=development DATABASE_URL=postgres://user:password@localhost:5432/app
|
.env 是普通文本,不会自动加密。应将它加入 .gitignore,仓库只提交 .env.example;生产密钥应通过部署平台或 Secret 管理系统注入。
八、SSH 与私钥
SSH 密钥成对出现:私钥保存在自己的设备上,公钥放到需要验证身份的服务器或 Git 平台。没有 .pub 后缀的通常是私钥,不能分享、上传或提交到 Git。
生成密钥
1 2 3 4
| ssh-keygen -t ed25519 -C "alice@example.com"
ssh-keygen -t ed25519 -C "work-laptop" -f ~/.ssh/id_ed25519_work
|
建议为私钥设置口令。常见文件及权限:
1 2 3 4 5
| chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub chmod 600 ~/.ssh/config chmod 600 ~/.ssh/authorized_keys
|
添加公钥并连接
1 2 3 4 5
| ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.example.com ssh user@server.example.com ssh -p 2222 user@server.example.com ssh -i ~/.ssh/id_ed25519_work user@server.example.com ssh -v user@server.example.com
|
首次连接时应通过可信渠道核对服务器指纹。主机密钥发生变化时,也要先确认服务器是否重装或更换密钥。
管理多台服务器
编辑 ~/.ssh/config:
1 2 3 4 5 6
| Host dev-api HostName 192.0.2.10 User deploy Port 2222 IdentityFile ~/.ssh/id_ed25519_work IdentitiesOnly yes
|
以后直接执行:
IdentitiesOnly yes 可以避免客户端尝试 agent 中的其他密钥。
ssh-agent
1 2 3 4
| eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519_work ssh-add -l ssh-add -D
|
传输文件
1 2 3
| scp app.tar.gz user@server:/tmp/ scp user@server:/var/log/app.log ./ rsync -avz --progress dist/ user@server:/srv/app/
|
九、常见排障思路
服务无法访问
1 2 3 4
| pgrep -af app-name ss -lntp curl -v http://127.0.0.1:3000 journalctl -u app-name -n 100
|
以上均正常时,再检查防火墙、云安全组、容器端口映射、DNS 和反向代理。
命令不存在
1 2
| command -v node echo "$PATH"
|
确认程序是否安装、安装目录是否位于 PATH,以及当前会话是否重新加载了 Shell 配置。
端口被占用
1 2 3
| lsof -i :3000 ps -fp <PID> kill <PID>
|
SSH 提示 Permission denied (publickey)
1 2 3 4
| ssh -v dev-api ssh-add -l ls -ld ~/.ssh ls -l ~/.ssh
|
检查远端用户名、实际使用的私钥、公钥是否已加入对应用户的 authorized_keys,以及 .ssh 和私钥权限。
参考资料