🖥️ 第01章 · 命令行入门

终端、提示符、命令格式、man/help/type/which

命令行入门

这一章带你认识终端、Shell 和命令本身:一个命令长什么样、怎么敲、敲错了怎么查。学完你就能在这台 Ubuntu 24.04 服务器上独立敲出第一行有效命令,而不是只会复制粘贴。

终端、Shell 与提示符

先分清三个概念,它们常被混着说:

概念 是什么 例子
终端 (Terminal) 显示字符、接收键盘输入的窗口 SSH 登录的成功画面、VS Code 内置面板
Shell 真正解释并执行命令的程序 bash(默认)、zsh、sh
提示符 (Prompt) Shell 打印出来等你在后面输字的一段提示 root@srv1952823:~#

你登录服务器后,看到的类似 root@srv1952823:~# 就是提示符,拆开看:

  • root —— 当前登录用户(whoami 可验证);
  • srv1952823 —— 主机名(hostname 可验证);
  • ~ —— 当前位置,~ 表示当前用户的家目录(/root);
  • # —— 超级用户(root)用 #,普通用户用 $。
whoami        # 查看当前用户
hostname      # 查看主机名
pwd           # 查看当前位置的绝对路径
echo $SHELL   # 查看默认 Shell

命令的基本格式

一条命令通常由三部分构成,空格把它们隔开:

命令名 [选项] [参数]
ls -lh /root/scripts
#  │  │    │
#  │  │    └─ 参数:要操作的对象(目录路径)
#  │  └─ 选项:控制行为的开关,前带 - 或 --
#  └─ 命令名:要执行的动作

选项有两种写法:

  • 短选项:-l,可合并成 -la(等于 -l -a);
  • 长选项:--help,语义更清晰但更长。
ls -l                    # 长格式列出文件
ls -la /root             # -l 与 -a 合并,连隐藏文件一起列
ls --human-readable      # 等价于 -h,人类可读大小

提示 命令解析以空格为界,ls -la 与 ls -l -a 效果相同。选项和参数的位置多数命令可互换,但个别命令要求选项在前,拿不准就看帮助。

命令从哪里来:type 与 which

Shell 执行命令时,会在一个"查找路径列表"里按顺序找,这个列表就是环境变量 PATH。type 和 which 能告诉你命令的真实来源。

type ls        # 告诉我 ls 是别名、内建命令还是外部程序
which python3  # 输出 python3 的绝对路径
echo $PATH     # 查看查找路径列表,冒号分隔

在这台服务器上,你会看到:

  • node、npm、pnpm 多装在 /usr/local/bin(手动/官方脚本安装);
  • apt、nginx、mysql 多装在 /usr/bin 或 /usr/sbin(Debian 包安装)。

注意 如果你运行某个命令提示 command not found,先用 which 命令名 确认它是否还在 PATH 里;很多"命令不见"其实是路径问题,不是没安装。

命令的说明书:man 与 help

记不住参数很正常,关键是知道怎么查:

途径 适用对象 用法 特点
man 外部程序 man ls 最全的手册,可翻页
命令 --help 几乎所有程序 ls --help 简洁,直接输出
help Shell 内建命令 help cd 只对内建命令有效
apropos 按关键词搜手册 apropos "find file" 记不清命令名时搜索

man 手册里翻页键:

man ls
# q 退出;空格/PageUp/PageDown 翻页;g 跳到开头;G 跳到结尾;/关键词 搜索

提示 新手优先用 命令 --help。它比 man 短、可读性好,绝大多数日常用法都够了;需要深挖才开 man。内建命令(如 cd、alias)没独立手册,要用 help 查。

Shell 内建命令与外部程序

Shell 执行的命令分两类,学会区分能帮你判断该查哪种帮助:

类别 说明 例子
内建命令 集成在 Shell 内部,不启动外部进程 cd、echo、alias、help
外部程序 磁盘上独立的可执行文件,在 PATH 里查找 ls、grep、tar、nginx
别名 自定义的快捷方式 ll 常是 ls -al 的别名

用 type 一眼看出类别:

type cd            # 输出: cd is a shell builtin(内建)
type ls            # 输出: ls 是外部程序(在 /usr/bin/ls)
type ll            # 输出: 别名,指向 ls -alF

提示 想改命令的默认行为,优先用别名而不是重写脚本。alias ll='ls -al' 会让 ll 永远带长格式;想永久生效就把它写进 ~/.bashrc。

把命令组合起来:; && ||

三条命令可以"接龙"执行,区别在失败是否中断:

符号 含义 何时用
; 无论前一条成败,都执行后一条 无关联的几个动作
&& 前一条成功才执行后一条 有依赖、要"串行就绪"
\|\| 前一条失败才执行后一条 失败时的兜底
cd /var/www && ls; echo "done"
# 先 cd 成功才 ls;最后无论怎样都打印 done

mkdir -p /root/backup && cp -a /etc/nginx /root/backup
# 只有备份目录创建成功才会去复制(典型"有依赖"场景)

注意 grep 没匹配到任何行时退出码是 1(而非 0),所以在 &&/|| 链里要留意:哪怕"正常没找到",也会被当成失败。

历史命令与补全

动作 作用
↑ / ↓ 调出上一条 / 下一条命令
history 列出敲过的命令
!100 重跑历史中第 100 条
!! 重跑上一条命令
Tab 自动补全命令名 / 文件名 / 路径 —— 必用
Ctrl+R 反向搜索历史命令

提示 补全(Tab)和 Ctrl+R 是你最快提升打字速度的两招。路径又长又容易拼错,敲前几个字母再按 Tab,几乎不会出错。

实用的第一条命令清单

刚上手,把这几个先敲一遍,感受"命令产出结果"的节奏:

echo "Hello, bangdream.xyz"   # 输出一段文字
date                          # 当前时间
uname -a                      # 系统信息:内核、架构
lsb_release -a                # Ubuntu 发行版信息
uptime                        # 开机时长与负载
top -bn1 | head -5            # 只看一次 CPU/内存概况(第 6 章细讲)

在这台服务器上执行 uname -a 大概会看到:

Linux srv1952823 6.8.0-139-generic x86_64 GNU/Linux

即 Ubuntu 24.04.5、内核 6.8.0-139、64 位架构——和后面章节举的例子完全对应。

易错点

  • 大小写敏感:LS 不等于 ls,Linux 命令几乎全部小写。
  • 别用回车当空格:一行命令里的空格很重要,ls-la 会被当成一个完整的、不存在的命令。
  • 超长命令别硬敲:复杂命令先复制到编辑器里排好版,再粘贴执行,避免漏掉某个引号或反斜杠。
  • 根用户慎用:# 提示符的 root 权力太大,rm 之类的危险操作在 root 下没有二次确认(第 4 章细讲)。

相关命令

type、which、man、help、apropos、alias、history(查看敲过的历史命令)。