Linux 命令行简介 #

什么是命令行? #

命令行界面(Command Line Interface,CLI)是一种通过文本命令与计算机交互的方式。用户输入命令,系统执行并返回结果。

text
┌─────────────────────────────────────────────────────────────┐
│                      用户与系统交互方式                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   命令行界面 (CLI)              图形用户界面 (GUI)            │
│   ┌───────────────┐            ┌───────────────┐           │
│   │ $ ls -la      │            │  📁 📂 📄     │           │
│   │ $ cd /home    │            │  🖱️ 点击操作   │           │
│   │ $ cat file    │            │  📊 可视化     │           │
│   └───────────────┘            └───────────────┘           │
│                                                             │
│   文本输入 → 精确控制            鼠标操作 → 直观易用          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

命令行的历史 #

发展历程 #

text
1960年代 ─── 批处理系统
    │
    │      穿孔卡片
    │      无交互能力
    │
1970年代 ─── Unix Shell 诞生
    │
    │      Ken Thompson 创建 sh
    │      命令行真正开始
    │
1980年代 ─── Bash 出现
    │
    │      Brian Fox 创建 Bash
    │      成为最流行的 Shell
    │
2000年代 ─── 现代终端
    │
    │      终端模拟器普及
    │      远程管理成为主流
    │
至今   ─── 云计算时代
    │
    │      容器化、自动化
    │      DevOps 核心技能

重要里程碑 #

年份 事件 意义
1969 Unix 诞生 操作系统的基础
1971 Thompson Shell 第一个 Unix Shell
1979 Bourne Shell sh 成为标准
1989 Bash 发布 最广泛使用的 Shell
2005 zsh 流行 现代化 Shell 体验
2020 PowerShell Core 跨平台命令行

为什么学习命令行? #

1. 强大的控制能力 #

bash
# 图形界面:需要多次点击
# 命令行:一条命令完成

# 批量重命名文件
$ for f in *.txt; do mv "$f" "${f%.txt}.bak"; done

# 查找并删除 7 天前的日志
$ find /var/log -name "*.log" -mtime +7 -delete

# 统计代码行数
$ find . -name "*.js" | xargs wc -l | tail -1

2. 自动化能力 #

bash
# 自动备份脚本
#!/bin/bash
backup_dir="/backup/$(date +%Y%m%d)"
mkdir -p "$backup_dir"
cp -r /important/data "$backup_dir/"
echo "Backup completed at $(date)"

3. 远程管理 #

bash
# SSH 远程连接
$ ssh user@remote-server.com

# 远程执行命令
$ ssh user@server 'df -h'

# 远程文件传输
$ scp file.txt user@server:/path/to/dest/

4. 资源效率 #

text
┌─────────────────────────────────────────────────────────────┐
│                      资源占用对比                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   命令行环境                   图形界面环境                   │
│   ┌───────────────┐            ┌───────────────┐           │
│   │ 内存: ~50MB   │            │ 内存: ~500MB  │           │
│   │ CPU: 极低     │            │ CPU: 中等     │           │
│   │ 启动: 毫秒级   │            │ 启动: 秒级    │           │
│   └───────────────┘            └───────────────┘           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Shell 是什么? #

Shell 是命令行解释器,它接收用户输入的命令,并将其转换为操作系统能理解的指令。

常见 Shell 类型 #

Shell 名称 特点
sh Bourne Shell 最原始的 Shell
bash Bourne Again Shell 最流行,功能丰富
zsh Z Shell 现代化,插件丰富
fish Friendly Shell 用户友好,自动建议
dash Debian Almquist 轻量级,脚本执行快

查看当前 Shell #

bash
# 查看当前使用的 Shell
$ echo $SHELL
/bin/bash

# 查看系统支持的 Shell
$ cat /etc/shells
/bin/sh
/bin/bash
/bin/zsh
/usr/bin/fish

# 查看所有 Shell 版本
$ bash --version
GNU bash, version 5.0.17(1)-release

终端与控制台 #

概念区分 #

text
┌─────────────────────────────────────────────────────────────┐
│                      术语区分                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   终端 (Terminal)                                            │
│   ├── 物理终端:早期硬件设备                                  │
│   └── 终端模拟器:软件模拟(如 GNOME Terminal)               │
│                                                             │
│   控制台 (Console)                                           │
│   └── 系统直接连接的物理设备                                  │
│                                                             │
│   Shell                                                      │
│   └── 命令解释器程序(bash、zsh 等)                          │
│                                                             │
│   关系:终端 → Shell → 操作系统                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

常见终端模拟器 #

终端 平台 特点
GNOME Terminal Linux GNOME 默认终端
Konsole Linux KDE 默认终端
iTerm2 macOS 功能强大
Terminal.app macOS 系统默认
Windows Terminal Windows 现代化终端
Alacritty 跨平台 GPU 加速

命令行的优势 #

1. 精确控制 #

bash
# 精确控制文件权限
$ chmod 755 script.sh

# 精确控制文件所有者
$ chown user:group file.txt

# 精确控制进程
$ kill -HUP 1234

2. 可重复性 #

bash
# 将操作记录为脚本
#!/bin/bash
# setup.sh - 项目初始化脚本

mkdir -p project/{src,tests,docs}
touch project/src/main.py
touch project/tests/test_main.py
echo "# Project" > project/README.md

3. 可组合性 #

bash
# 组合多个命令完成复杂任务
$ cat access.log | grep "ERROR" | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

# 分析:
# cat access.log        - 读取日志文件
# grep "ERROR"          - 筛选错误行
# awk '{print $1}'      - 提取第一列(IP地址)
# sort                  - 排序
# uniq -c               - 统计出现次数
# sort -rn              - 按数字倒序排列
# head -10              - 显示前 10 行

4. 脚本自动化 #

bash
# 定时任务自动化
# crontab -e
0 2 * * * /home/user/backup.sh    # 每天凌晨 2 点执行备份
*/5 * * * * /home/user/check.sh   # 每 5 分钟执行检查

命令行的应用场景 #

1. 服务器管理 #

bash
# 查看系统状态
$ uptime
 10:30:00 up 30 days,  2:15,  3 users,  load average: 0.05, 0.10, 0.15

# 查看磁盘使用
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   50G   50G  50% /

# 查看内存使用
$ free -h
              total        used        free
Mem:           8G         4G         4G

2. 开发工作流 #

bash
# Git 版本控制
$ git status
$ git add .
$ git commit -m "feat: add new feature"
$ git push origin main

# 构建项目
$ npm run build
$ docker build -t myapp .
$ kubectl apply -f deployment.yaml

3. 数据处理 #

bash
# 处理 CSV 文件
$ awk -F',' '{sum+=$3} END {print sum}' data.csv

# 分析日志
$ grep "2026-04-11" access.log | wc -l

# 批量转换图片
$ for f in *.png; do convert "$f" "${f%.png}.jpg"; done

4. 系统运维 #

bash
# 服务管理
$ systemctl status nginx
$ systemctl restart nginx
$ journalctl -u nginx -f

# 用户管理
$ useradd -m -s /bin/bash newuser
$ passwd newuser
$ usermod -aG sudo newuser

学习建议 #

循序渐进 #

text
┌─────────────────────────────────────────────────────────────┐
│                      学习路径                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   第一阶段:基础命令                                          │
│   ├── ls, cd, pwd, mkdir, rm                               │
│   ├── cat, less, head, tail                                │
│   └── cp, mv, touch                                        │
│                                                             │
│   第二阶段:进阶操作                                          │
│   ├── grep, find, sort, uniq                               │
│   ├── chmod, chown                                         │
│   └── ps, top, kill                                        │
│                                                             │
│   第三阶段:高级技巧                                          │
│   ├── 管道与重定向                                           │
│   ├── Shell 脚本编写                                        │
│   └── 正则表达式                                             │
│                                                             │
│   第四阶段:专家技能                                          │
│   ├── 系统调优                                              │
│   ├── 自动化运维                                            │
│   └── 性能分析                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

实践建议 #

  1. 每天使用:将命令行融入日常工作
  2. 记录笔记:记录常用命令和技巧
  3. 阅读手册:使用 man 命令学习
  4. 动手实践:在虚拟机中练习
  5. 解决问题:用命令行解决实际问题

获取帮助 #

man 手册 #

bash
# 查看命令手册
$ man ls

# 查看特定章节
$ man 5 passwd    # 第 5 章是文件格式

# 搜索手册
$ man -k "copy files"

info 文档 #

bash
# 查看 info 文档
$ info bash

# 更详细的信息
$ info coreutils

命令内建帮助 #

bash
# 大多数命令支持 --help
$ ls --help
$ grep --help

# 某些命令使用 -h
$ python -h

在线资源 #

bash
# 使用 tldr 获取简化帮助
$ tldr tar

# 使用 explainshell 解释命令
# 访问 https://explainshell.com

小结 #

Linux 命令行是与系统交互的强大工具。通过本节学习,你应该了解:

  1. 命令行的本质:文本方式与系统交互
  2. Shell 的作用:命令解释器,连接用户与内核
  3. 学习命令行的意义:效率、自动化、远程管理
  4. 学习路径:从基础命令到高级脚本

下一步,我们将学习终端的基础操作,包括如何启动终端和使用常用快捷键。

最后更新:2026-04-11