你一定听说过操作系统,比如 Windows 或者安卓,我们用它来管理文件、运行软件或者 App。Linux 也是一套操作系统。它既可以安装在个人电脑上作为日常桌面,也是全球很多服务器运行的基础。
说到 Linux,很多人的刻板印象就是命令窗口,就像电影中黑客在一个黑底绿字的窗口里高速敲击键盘那样。

但其实这是一个误解。Linux 也是可以安装图形桌面的,事实上很多美化效果非常好看,用户同样可以用鼠标点击打开应用。只是在服务器工作中,我们大部分情况下都是直接连接服务器运行简短的命令,这时使用命令行会更高效。
图:ItroVertise,Wikimedia Commons,CC BY-SA 4.0
本模块会从最基本的命令输入开始,逐步介绍 Linux 的目录结构、文件编辑、管道与重定向、文本检索以及用户权限,最后完成一次真实的文件排查练习。
内核与发行版
Linux 起源于 1991 年芬兰大学生 Linus Torvalds 编写并开源的操作系统内核。全球开发者协作维护至今,使其成长为广泛使用的 Linux 内核(Kernel)。
内核直接与 CPU、内存和硬件交互,协调所有软件运行。把 Linux 内核、常用命令行工具、系统服务、软件包管理器以及桌面环境组合起来,就形成了可直接安装使用的 Linux 发行版(Distribution)。
常见发行版各有定位:
- Ubuntu:社区资源丰富,兼顾桌面易用性与服务器稳定性;
- Debian:以极高的稳定性和开源原则著称,是众多发行版的基石;
- Kali Linux:面向渗透测试与数字取证,基于 Debian 开发并预装了大量安全工具。
不同发行版预装的软件和界面可能不同,但底层的命令、目录结构和权限规则高度一致。

上图是一台 AlmaLinux(GNOME 桌面)的图形界面:文件管理器打开在当前用户主目录,左侧任务栏可以看到终端与浏览器入口。不过,在服务器与安全工作中更常用、更高效的是终端与命令行。(图片来源:Wikimedia Commons,AlmaLinux OS Foundation,GPLv2+)
命令行与 Shell
在图形界面双击文件夹,或在终端输入命令列出目录,本质上都是向计算机发出操作请求。后者称为命令行界面(CLI,Command Line Interface):输入文字指令,按回车执行,读取系统返回的结果。
在服务器运维与安全工作中,命令行不可替代主要有三个原因:一是生产服务器为节省资源与减少攻击面通常不装图形界面,只能通过 SSH 远程操作;二是命令行可以把重复操作写成脚本自动执行;三是 Linux 的小工具可以通过管道自由组合,几秒内就能处理海量日志。
Windows(PowerShell、CMD)和 macOS 也有自带的终端应用,只是命令习惯不同,例如查看目录在 Windows CMD 中用 dir,在 Linux 中用 ls。
命令行环境由两部分配合组成:
- 终端(Terminal):负责接收键盘输入并把执行结果展示在屏幕上的窗口;
- Shell(壳程序):在后台读取、解析并执行命令的解释器。Linux 中最常见的默认 Shell 是 Bash(Bourne Again SHell)。
看懂终端提示符
我们先看一段终端输出:
crow@trainer:~$ pwd
/home/crow
crow@trainer:~$
第一行开头的 crow@trainer:~$ 是 Shell 打印出来的提示符(Prompt),包含了几项基础信息:
| 组成部分 | 示例含义 | 说明 |
|---|---|---|
crow | 当前登录用户名 | 表示当前用户身份 |
@ | 连接符 | 分隔用户名和主机名 |
trainer | 主机名 | 当前计算机的名称 |
: | 分隔符 | 分隔主机名与当前所在的工作路径 |
~ | 当前目录 | 波浪号 ~ 代表当前用户的主目录,例如 /home/crow |
$ | 权限提示符 | $ 表示普通用户;如果是超级管理员 root,末尾会变成 # |
提示符后面的 pwd 是我们输入的命令(Print Working Directory,打印当前工作目录)。按下回车后,第二行输出了 /home/crow。第三行再次出现提示符 crow@trainer:~$,说明上一条命令已经跑完,正在等待下一条指令。
接着输入 ls(List,列出目录内容)并回车:
crow@trainer:~$ ls
notes.txt secret/
屏幕上列出了当前目录里的两个项目:文件 notes.txt 和文件夹 secret/。
要查看文件里写了什么,可以用 cat 命令。命令名后面空一格,跟上文件名:
注意
cat 源自 concatenate(拼接),最初用来把多个文件接在一起输出,查看单个文件只是它最常用的一种用法。如果不好记,可以理解成:让猫把内容抓出来。
crow@trainer:~$ cat notes.txt
在 cat notes.txt 这条命令里,cat 是命令名,空格后面的 notes.txt 是参数(Argument),用来告诉命令操作哪个文件。命令与参数之间必须用空格隔开;如果连写成 catnotes.txt,Shell 会把整串当成一个命令名去找,然后报错说找不到。
切换目录
进入子目录使用 cd 命令(Change Directory):
- 进入子目录:
cd secret。进去后可以用pwd看当前路径,再用ls看里面的文件; - 返回上一级目录:
cd ..。注意cd和两个英文点..之间也要空一格,..代表当前目录的父目录。
下面在模拟器里试一下: