Shell 常用命令整理

Shell 常用命令整理

金培晟 Jarfield

Shell 的真正价值不在于“记住很多命令”,而在于把常见操作压缩成一套可重复、可组合、可自动化的工作流。
这篇文章不追求面面俱到,而是整理我最常用、也最值得长期记住的一批命令。

1. 文件与目录操作

1.1 查看当前位置与目录内容

1
2
3
4
pwd
ls
ls -l
ls -la
  • pwd:显示当前工作目录。
  • ls:列出当前目录文件。
  • ls -l:显示详细信息。
  • ls -la:包含隐藏文件。

通常我会直接用:

1
ls -lah

这样更适合快速看权限、大小和时间。

1.2 切换目录

1
2
3
4
cd /path/to/dir
cd ..
cd ~
cd -
  • cd ..:回到上一级。
  • cd ~:回到用户主目录。
  • cd -:回到上一个目录,来回跳很方便。

1.3 创建、复制、移动、删除

1
2
3
4
5
6
7
8
9
10
11
12
mkdir notes
mkdir -p data/raw/2026

cp file.txt backup.txt
cp -r src_dir dst_dir

mv old.txt new.txt
mv logs /tmp/

rm file.txt
rm -r old_dir
rm -rf build/
  • mkdir -p:递归创建多级目录。
  • cp -r:复制目录。
  • mv:既能改名,也能移动。
  • rm -rf:危险命令,删除前必须确认路径。

真正工作时,我会尽量先用:

1
rm -ri target_dir

先交互确认,避免误删。

1.4 创建空文件与快速写入

1
2
3
touch run.log
echo "hello" > demo.txt
echo "append line" >> demo.txt
  • touch:新建空文件,或更新时间戳。
  • >:覆盖写入。
  • >>:追加写入。

2. 查看文件内容

2.1 快速看头部、尾部与分页

1
2
3
4
5
cat README.md
head -n 20 train.log
tail -n 50 train.log
tail -f train.log
less train.log
  • head:看前几行。
  • tail:看后几行。
  • tail -f:持续追踪日志输出。
  • less:适合长文件翻页查看,按 q 退出。

如果只是看日志,最常用的是:

1
tail -f nohup.out

3. 查找文件与文本

3.1 按文件名查找

1
2
find . -name "*.py"
find . -type d -name "checkpoints"
  • find . -name "*.py":当前目录递归找所有 Python 文件。
  • -type d:只找目录。

3.2 按内容搜索

1
2
grep -R "TODO" .
grep -R "learning rate" logs/

但在代码仓库里,我更推荐:

1
2
3
rg "TODO"
rg "main\(" src/
rg --files
  • rg 是 ripgrep,速度通常比 grep 更快。
  • rg --files:快速列出仓库文件。

4. 压缩、解压与传输

4.1 tar

1
2
tar -czvf archive.tar.gz data/
tar -xzvf archive.tar.gz
  • c:创建归档。
  • x:解压。
  • z:gzip。
  • v:显示过程。
  • f:指定文件名。

4.2 zip / unzip

1
2
zip -r result.zip result/
unzip result.zip

4.3 scp 远程拷贝

1
2
3
scp local.txt user@server:/path/
scp -r project/ user@server:/path/
scp user@server:/path/train.log .

这个在服务器和本地之间搬日志、模型、实验脚本时非常常见。

5. 权限与环境

5.1 修改权限

1
2
3
chmod +x run.sh
chmod 644 config.yaml
chmod -R 755 scripts/
  • chmod +x run.sh:让脚本可执行。
  • 644:文件常见权限。
  • 755:目录和可执行脚本常见权限。

5.2 查看当前机器与环境

1
2
3
4
whoami
hostname
uname -a
env

5.3 查看磁盘与内存

1
2
3
df -h
du -sh checkpoints/
free -h
  • df -h:看磁盘整体使用。
  • du -sh dir/:看某个目录占多大。
  • free -h:看内存。

6. 进程与后台运行

这一部分是最实用的。
很多训练、部署、下载、爬取都不会在前台傻等。

6.1 最基础:在后台运行

1
python train.py &
  • &:把命令放到后台。
  • 但如果你直接关闭终端,程序通常也会被挂掉。

所以单独使用 & 通常不够稳。

6.2 nohup

1
nohup python train.py > train.log 2>&1 &

这是最常见的长任务启动方式之一。

含义拆开看:

  • nohup:终端关闭后仍继续运行。
  • > train.log:标准输出写到日志。
  • 2>&1:标准错误并到标准输出。
  • &:放后台。

启动后常用检查方式:

1
2
ps -ef | grep train.py
tail -f train.log

如果你没手动指定日志,默认输出通常会进 nohup.out

6.3 jobs / fg / bg

1
2
3
jobs
bg %1
fg %1
  • jobs:查看当前 shell 的后台任务。
  • bg:继续后台运行。
  • fg:切回前台。

这更适合临时挂起和恢复,而不是长期跑任务。

6.4 screen

如果任务要跑很久,而且你希望之后重新接回会话,screen 很有用。

创建会话

1
screen -S train

在会话里执行命令

1
python train.py

暂时离开会话

按:

1
Ctrl + A, D

这叫 detach,会话和程序都会继续运行。

查看已有会话

1
screen -ls

重新进入会话

1
screen -r train

或者:

1
screen -r 会话ID

结束会话

在会话内直接退出程序,再执行:

1
exit

6.5 tmux

很多人会用 tmux 代替 screen,因为窗口管理更舒服。

常见最小操作是:

1
2
3
tmux new -s train
tmux ls
tmux attach -t train

如果你的服务器没装 screen,可以看一下是否有 tmux

7. 查看和结束进程

7.1 查进程

1
2
3
4
ps -ef | grep python
pgrep -af train.py
top
htop
  • ps -ef | grep xxx:老办法,通用。
  • pgrep -af xxx:更干净。
  • top / htop:实时看资源。

7.2 杀进程

1
2
3
kill PID
kill -9 PID
pkill -f train.py
  • kill PID:先优雅结束。
  • kill -9 PID:强制结束,不到必要别先上。
  • pkill -f train.py:按命令行匹配杀进程。

8. 一个比较稳的训练任务流程

我自己更常用下面这套:

1
2
3
mkdir -p logs
nohup python train.py --config configs/train.yaml > logs/train_20260413.log 2>&1 &
tail -f logs/train_20260413.log

如果是需要长期维护、反复回到同一环境的任务,我会改用:

1
2
screen -S experiment
python train.py --config configs/train.yaml

这样中途断开 SSH 也不影响。

网站更新与发布流程我已经单独拆成了一篇置顶文章:
网站更新与发布流程

这篇文章的重点不是“命令越多越好”,而是把真正高频、容易忘、容易出错的那一批先固定下来。
等后面用得更多,再补 Docker、SSH、rsync、conda 和系统监控也不迟。

作者

Jarfield

发布于

2026-04-13

更新于

2026-04-14

许可协议

CC BY-NC-SA 4.0