刚开始用 Linux 的人,最大的坎往往不是命令多,而是面对一个黑乎乎的终端不知道敲什么。这份手册就是想把最常用的命令过一遍:每个命令给一条最实在的示例,先能上手,回头再慢慢深入。

我这里按「你一般想干什么」来分,没按命令名硬排。它跟 Windows CMD 版 是一套对照,很多概念两边其实是相通的——那边学会了,这边上手更快。

目录

  1. 基础概念
  2. 获取帮助
  3. 文件与目录
  4. 查看文件内容
  5. 搜索与查找
  6. 符号链接与通配符
  7. 权限管理
  8. 用户与提权
  9. 环境变量与别名
  10. 进程管理
  11. 磁盘与内存
  12. 网络
  13. 压缩与打包
  14. 管道与重定向
  15. 文本处理
  16. 包管理(apt)
  17. 系统信息
  18. 编辑器入门
  19. Shell 脚本入门
  20. 定时任务
  21. 服务管理
  22. 其他实用命令
  23. 快捷键与技巧
  24. 推荐学习路线

1. 基础概念

  • Shell:你敲命令、和系统交互的程序(常见 bash、zsh)。
  • 提示符:user@host:~$ —— user 用户名、host 主机名、~ 当前目录(家目录)、$ 普通用户(# 是 root)。
  • 命令结构:命令 [选项] [参数],例如 ls -l /home(-l 是选项,/home 是参数)。
1
2
3
pwd            # 打印当前所在目录(print working directory)
whoami # 当前登录的用户名
echo hello # 输出字符串

2. 获取帮助

1
2
3
4
ls --help          # 查看命令的简要用法(大多数命令支持)
man ls # 查看详细手册页,按 q 退出
which python # 查看命令的实际路径
type ls # 判断是内建命令还是外部程序

3. 文件与目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ls                 # 列出当前目录
ls -l # 详细信息(权限、大小、时间)
ls -a # 含隐藏文件(. 开头)
ls -lh # 人类可读的大小(K/M/G)

cd /tmp # 切换目录
cd ~ # 回家目录
cd .. # 上一级
cd - # 回上一个目录

mkdir mydir # 新建目录
mkdir -p a/b/c # 递归创建多级目录

touch file.txt # 新建空文件(或更新时间戳)

cp a.txt b.txt # 复制文件
cp -r dir1 dir2 # 递归复制目录

mv a.txt b.txt # 移动 / 重命名

rm file.txt # 删除文件
rm -r dir # 递归删除目录
rm -rf dir # 强制递归删除(危险!删前想清楚)

⚠️ rm -rf 没有回收站,误删不可恢复。


4. 查看文件内容

1
2
3
4
5
6
7
cat file.txt       # 一次性打印整个文件
less file.txt # 分页查看(j/k 或方向键翻页,q 退出,/ 搜索)
head file.txt # 前 10 行
head -n 20 file # 前 20 行
tail file.txt # 后 10 行
tail -f log.txt # 实时跟踪日志(Ctrl+C 退出,看日志神器)
wc -l file.txt # 统计行数(-w 单词数、-c 字节数)

5. 搜索与查找

1
2
3
4
5
6
7
8
grep "关键词" file.txt         # 在文件里搜关键词
grep -r "关键词" ./dir # 递归搜目录
grep -i "hello" file # 忽略大小写
grep -n "hello" file # 显示行号

find . -name "*.txt" # 按名字查找文件
find /home -type d -name "my*" # 查目录
find . -mtime -7 # 近 7 天修改过的文件

grep 常配合管道用(见第 14 节),是日常最高频的命令之一。


6. 符号链接与通配符

1
2
3
4
5
6
7
8
9
10
# 符号链接(类似 Windows 快捷方式)
ln -s /原始/路径 linkname # 创建软链接
ln -s /opt/app/bin/app ~/bin/app # 常见用法:把程序链接到 PATH 目录
readlink linkname # 查看链接指向哪里

# 通配符
ls *.txt # * 匹配任意多个字符
ls file?.txt # ? 匹配单个字符
ls file[1-3].txt # [] 匹配字符集合
cp -r {a,b,c} dest # {} 展开成多个参数

7. 权限管理

ls -l 第一列形如 -rwxr-xr--,含义:

部分 含义
第 1 位 类型(- 文件、d 目录、l 链接)
第 2-4 位 属主(user)权限
第 5-7 位 属组(group)权限
第 8-10 位 其他人(other)权限

r=读(4) w=写(2) x=执行(1)。

1
2
3
4
5
chmod +x script.sh        # 给所有人加执行权限
chmod 755 script.sh # 数字法:rwx r-x r-x
chmod u+x script.sh # 只给属主加执行权

chown user:group file # 改属主和属组(通常要 sudo)

8. 用户与提权

1
2
3
4
5
sudo apt update           # 用管理员权限执行命令(输自己的密码)
sudo -i # 切换成 root 用户
id # 查看自己的 uid/gid 和所属组
adduser 新用户名 # 新建用户(Debian/Ubuntu)
passwd # 改当前用户密码

9. 环境变量与别名

1
2
3
4
5
6
7
8
9
10
11
echo $PATH           # 查看 PATH(命令搜索路径,按 : 分隔)
echo $HOME # 家目录
env # 查看所有环境变量
export NAME=value # 设置环境变量(仅当前会话生效)

alias ll='ls -lh' # 设置别名
unalias ll # 取消别名

# 想永久生效:写进 ~/.bashrc,再 source 重新加载
echo 'alias ll="ls -lh"' >> ~/.bashrc
source ~/.bashrc

装完一个命令行工具发现「命令找不到」,十有八九是它的目录不在 $PATH 里。


10. 进程管理

1
2
3
4
5
6
7
8
9
10
11
12
13
ps aux                     # 查看所有进程
ps aux | grep python # 找特定进程
top # 实时看 CPU/内存(q 退出)
htop # 更好看的 top(需安装)

kill 1234 # 结束 PID 为 1234 的进程
kill -9 1234 # 强制结束
pkill -f "关键词" # 按名字批量结束

命令 & # 后台运行
jobs # 看后台任务
fg # 把后台任务调到前台
Ctrl+Z # 暂停当前前台任务

11. 磁盘与内存

1
2
3
4
df -h                      # 各分区磁盘使用情况(-h 人类可读)
du -sh ./dir # 某个目录总共多大
du -sh * # 当前目录每个文件/子目录多大
free -h # 内存/交换分区使用情况

12. 网络

1
2
3
4
5
6
7
8
9
10
ping baidu.com             # 测连通性(Ctrl+C 停)
ip addr # 查看本机 IP
ss -ltnp # 查看监听端口和对应进程

curl http://example.com # 发 HTTP 请求,打印响应
curl -o file.html URL # 下载保存
wget URL # 下载文件

ssh user@1.2.3.4 # 远程登录
scp file user@host:/path # 拷贝文件到远程

13. 压缩与打包

1
2
3
4
5
6
7
8
tar -czf a.tar.gz dir/     # 打包+压缩成 .tar.gz
tar -xzf a.tar.gz # 解压 .tar.gz
tar -xzf a.tar.gz -C /tmp # 解压到指定目录

zip -r a.zip dir/ # 打成 zip
unzip a.zip # 解压 zip
gzip file # 压缩单个文件(生成 file.gz)
gunzip file.gz # 解压

14. 管道与重定向

这是 Linux 最强大的组合拳:把上一个命令的输出接到下一个命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 管道 |
ps aux | grep python | less # 层层过滤

# 重定向
命令 > file.txt # 覆盖写入
命令 >> file.txt # 追加写入
命令 < input.txt # 从文件读入
命令 2> err.txt # 只重定向错误输出
命令 &> all.txt # 标准输出+错误一起

# 组合符
cmd1 && cmd2 # cmd1 成功才执行 cmd2
cmd1 || cmd2 # cmd1 失败才执行 cmd2
cmd1 ; cmd2 # 顺序执行,不管成败

15. 文本处理

1
2
3
4
5
6
7
cut -d: -f1 /etc/passwd       # 按 : 分割取第 1 列
sort file.txt # 排序
sort -n file.txt # 按数字排序
uniq # 去重(常跟在 sort 后)
tr 'a-z' 'A-Z' < file # 大小写转换
sed 's/old/new/g' file # 替换文本
awk '{print $1}' file # 打印第 1 列(按空白分割)

进阶:sed、awk 是两大文本处理神器,先会用 grep + cut + sort + uniq 就够了。


16. 包管理(apt)

Debian / Ubuntu 系(WSL2 默认也是):

1
2
3
4
5
6
sudo apt update               # 更新软件源索引(装东西前先跑)
sudo apt upgrade # 升级已装的包
sudo apt install vim # 安装
sudo apt remove vim # 卸载
sudo apt search 关键词 # 搜索包
apt list --installed # 看已装的包

17. 系统信息

1
2
3
4
5
6
uname -a              # 内核版本
lsb_release -a # 发行版版本
hostname # 主机名
date # 当前时间
uptime # 开机时长 / 负载
history # 命令历史

18. 编辑器入门

nano(简单友好,适合新手):

1
2
nano file.txt
# 直接打字;Ctrl+O 保存,Ctrl+X 退出

vim(强大但学习曲线陡):

1
2
3
4
5
6
7
vim file.txt
# 刚进入是「命令模式」,按 i 进入「编辑模式」开始打字
# 编辑完按 Esc 回到命令模式,然后:
# :w 保存
# :q 退出
# :wq 保存并退出
# :q! 不保存强制退出

一开始用 nano 就能干活;vim 值得后面花时间学(会了效率翻倍)。


19. Shell 脚本入门

把一串命令写进 .sh 文件,一次执行——自动化/部署全靠它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash                 # 第一行 shebang,指定解释器

# 变量
name="world"
echo "hello $name"

# 循环
for i in 1 2 3; do
echo "第 $i 次"
done

# 判断
if [ -f file.txt ]; then
echo "文件存在"
else
echo "文件不存在"
fi

# 函数
greet() {
echo "hi, $1" # $1 是第一个参数
}
greet "小明"
1
2
3
chmod +x script.sh   # 加执行权限
./script.sh # 运行
bash script.sh # 或直接用 bash 跑(不需要执行权限)

变量、$1、if、for 这几个会了,就能读懂和写大部分脚本。


20. 定时任务

1
2
3
4
5
6
7
crontab -e           # 编辑定时任务
crontab -l # 查看已设置的定时任务

# 格式:分 时 日 月 周 命令
0 9 * * * /path/script.sh # 每天 9:00 执行
*/5 * * * * echo hi >> log.txt # 每 5 分钟执行
30 22 * * 1 tar -czf backup.tar.gz /data # 每周一 22:30 备份

21. 服务管理

1
2
3
4
5
6
7
systemctl status ssh    # 查看服务状态
systemctl start ssh # 启动
systemctl stop ssh # 停止
systemctl restart ssh # 重启
systemctl enable ssh # 开机自启
systemctl disable ssh # 取消自启
journalctl -u ssh -f # 实时看该服务的日志

现代 Ubuntu 用 systemctl;老系统(如 WSL1 或旧容器)可能要用 service ssh start。


22. 其他实用命令

1
2
3
4
5
6
7
8
file a.txt             # 判断文件类型
stat a.txt # 查看文件详细属性
diff a.txt b.txt # 对比两个文件差异
tee out.txt # 输出到屏幕的同时写进文件(常配合管道)
watch -n1 df -h # 每 1 秒重复执行一次,实时监控
nohup 命令 & # 关掉终端后命令仍在后台继续跑
xargs # 把前一命令的输出转成参数
echo a b c | xargs mkdir # 等价于 mkdir a b c

23. 快捷键与技巧

快捷键 作用
Tab 自动补全文件名/命令
Ctrl+C 中断当前命令
Ctrl+Z 暂停当前命令
Ctrl+D 退出终端 / 发送 EOF
Ctrl+L 清屏
Ctrl+R 反向搜索历史命令
Ctrl+A / Ctrl+E 光标跳到行首 / 行尾
Ctrl+U 删除光标前整行
↑ / ↓ 上下翻历史命令
!! 重复上一条命令
!$ 上一条命令的最后一个参数
1
2
3
# 小技巧
cd - # 回上一个目录
history | grep apt # 从历史里搜命令

24. 推荐学习路线

  1. 先练熟高频 20 个:ls / cd / pwd / mkdir / cp / mv / rm / cat / less / head / tail / grep / find / chmod / sudo / ps / kill / df / free / ping。

  2. 搞懂管道和重定向(| > >>),这是理解 Linux 的关键。

  3. 学会看日志:tail -f + grep。

  4. 装一个 tldr 看命令的简洁示例(比 man 更友好):

    1
    2
    sudo apt install tldr
    tldr tar
  5. 学点 Shell 脚本(第 19 章),自动化、部署都靠它。

  6. 做做练习:上 linuxsurvival.com 或 OverTheWire 的 bandit 闯关。

学习原则:不要死记,多用 --help / man 查;命令看不懂就 man 命令,记不住就 history | grep 找回来。