🖥️ 第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(查看敲过的历史命令)。