刚接触 Linux 的时候,很多人会被一堆概念绕晕:内核、Shell、终端、根目录、主目录、工作目录、绝对路径、相对路径……名字都很像,放在一起更容易混。

如果只是照着命令敲,短时间也能用;但一旦开始学运维、渗透测试、应急响应或者脚本自动化,这些基础概念迟早都得补上。

这篇文章就不堆术语,尽量用实用、直白的方式,把 Linux 的底层结构和最常用的文件系统概念理清楚。

一、Linux 到底由哪些部分组成

从整体上看,一个 Linux 系统可以理解为由下面几部分组成:

可以先看一张简化示意图:

br

+-----------------------------------+br

| 应用程序                          |br

| nginx / mysql / python / vim      |br

+-----------------------------------+br

| Shell / Terminal                  |br

| bash / zsh / sh                   |br

+-----------------------------------+br

| 文件系统                          |br

| /etc /home /var /tmp ...          |br

+-----------------------------------+br

| Linux Kernel                      |br

| 进程 / 内存 / 驱动 / 网络 / 文件   |br

+-----------------------------------+br

| 硬件资源                          |br

+-----------------------------------+

这几层不是完全物理隔离的,但这样理解最容易入门。

二、内核:Linux 真正的核心

Linux 最核心的部分是内核

内核不负责让你“看起来好用”,它负责的是系统最基础、最关键的事情,比如:

  • 进程管理
  • 内存管理
  • 设备驱动管理
  • 文件系统管理
  • 网络通信管理

也就是说,你平时执行一个命令、打开一个文件、启动一个程序、建立一个网络连接,背后最终都绕不开内核。

内核能做什么

举几个最常见的例子:

  • 你运行一个程序,内核负责创建进程
  • 程序需要内存,内核负责分配和回收
  • 你访问磁盘文件,内核负责调度文件系统
  • 你访问网卡发包,内核负责网络栈处理
  • 你插入 U 盘,内核负责识别设备并加载驱动
为什么用户不能直接操作内核

原因很简单:危险,也不方便

如果每个人都直接和内核打交道,不但操作复杂,而且非常容易把系统弄崩。
所以 Linux 在内核之外设计了一层更适合人使用的接口,这层最常见的入口之一,就是Shell

三、Shell 是什么:给内核加的一层“壳”

Shell 这个词,原意就是“壳”。

它包在内核外面,作用可以理解为:

  • 接收用户输入
  • 解释命令含义
  • 调用系统功能
  • 把结果返回给用户

你在命令行里输入:

br

cat /etc/passwd

你看到的是一个简单命令,但系统真正执行时,并不是“内核直接认识 cat 这三个字母”,而是 Shell 帮你解析命令,再交给对应程序和系统调用去完成。

Shell 的两个核心作用1)简化操作

人不需要直接和内核通信,只需要输入相对友好的命令。

2)隔离和保护

用户不会直接碰到底层内核接口,这本身就是一种安全边界。

四、常见的 Shell 有哪些

Linux 里并不只有一种 Shell,常见的有:

  • /bin/sh
  • /bin/bash
  • /bin/csh
  • /bin/ksh
  • /bin/zsh

其中最常见的是:

1)Bash

全称Bourne Again Shell,也是多数 Linux 发行版里最常见、最经典的默认 Shell。

2)Zsh

交互体验更好,补全能力更强,不少安全从业者和开发者喜欢用。
像 Kali Linux 这类系统,默认往往就是 zsh。

五、怎么查看当前正在使用哪个 Shell

直接执行:

br

echo $SHELL

例如输出:

br

/bin/bash

说明当前用户默认使用的是 Bash。

如果想查看系统里有哪些可用 Shell,可以看:

br

cat /etc/shells

这会列出系统认可的 Shell 路径。

六、如何切换默认 Shell

先列出可切换的 Shell:

br

chsh -l

然后切换,比如切到 zsh:

br

chsh -s /bin/zsh

切换完成后,一般需要重新登录,配置才会生效。

提醒一下:切换 Shell 不等于临时运行某个解释器,而是修改当前用户的默认登录 Shell。
七、Terminal 和 Shell 不是一回事

这是很多初学者最容易混淆的地方。

Terminal 是什么

Terminal,中文一般叫“终端”,它更像是一个界面程序

比如你双击打开的“终端”窗口,本质上是一个图形界面工具,它负责:

  • 接收你的键盘输入
  • 把内容交给 Shell
  • 把执行结果显示出来
Shell 是什么

Shell 是命令解释器,负责理解并执行命令。

它们的关系可以简单画成这样:

br

用户输入br

   │br

   ▼br

Terminal(终端窗口)br

   │br

   ▼br

Shell(bash/zsh)br

   │br

   ▼br

Linux Kernel(内核)br

   │br

   ▼br

执行结果返回

所以,平时说“打开终端”,不等于“打开 Shell”;
更准确地说,是打开一个终端程序,在里面运行一个 Shell

八、Windows 其实也有“Shell”

Shell 并不是 Linux 独有的概念。

Windows 里也有:

  • cmd
  • PowerShell

它们本质上也属于命令解释环境。
所以你可以把 Linux 的 Bash、Zsh,理解成 Windows 命令行家族的“同类产品”。

九、Shell 不只是命令行,还是脚本语言

Shell 还有一个非常重要的身份:脚本解释器

也就是说,Shell 不光能让你一条一条敲命令,还可以把多条命令写进文件里,变成自动化脚本。

通常脚本文件扩展名写成:

br

.sh

例如:

br

#!/bin/bashbr

echo "hello"br

pwdbr

whoami

这里第一行:

br

#!/bin/bash

叫做Shebang,表示这个脚本要交给 Bash 来解释执行。

十、Shell 脚本能做什么

Shell 脚本虽然不适合做大型系统开发,但在 Linux 管理和安全领域非常实用。

它能完成的事情包括:

  • 批量执行命令
  • 清理日志
  • 巡检系统状态
  • 检查异常进程
  • 审计网络连接
  • 分析历史命令
  • 检查定时任务
  • 快速做应急响应
一个典型场景:应急响应排查

比如你怀疑一台机器中了挖矿木马,Shell 脚本很适合快速收集这些信息:

  • 历史命令是否异常
  • 是否有可疑进程高占用 CPU
  • 是否存在异常网络连接
  • 是否被写入恶意定时任务
  • 是否存在异常启动项
  • 是否下载了可疑脚本

所以 Shell 脚本在网络安全领域尤其常见,既能用于运维自动化,也能用于入侵排查。

十一、Linux 文件系统的核心思想:一切皆文件

这是 Linux 里一个非常经典的理念:

一切皆文件

初学者听到这句话通常会误解成“所有东西本质上真的都是普通文件”,其实不是这个意思。

更准确地说:

Linux 提供了一套统一的访问方式,让很多资源都可以像文件一样被访问。

这些“资源”包括但不限于:

  • 普通文件
  • 目录
  • 设备
  • 进程信息
  • 管道
  • 链接
  • Socket
  • 网络连接相关对象

你不一定非要马上理解它背后的设计哲学,但至少先记住一句话:

在 Linux 里,文件不仅仅是文本文档。

十二、用 lsof 体会“一切皆文件”

lsof 的全称是:

br

list open files

也就是:列出系统中被打开的文件。

它特别适合帮助理解 Linux 的文件视角。

1)查看某个文件被哪些进程打开

br

lsof /bin/bash

这可以看到哪些进程正在使用 /bin/bash 这个文件。

2)查看某个用户打开了哪些文件

br

lsof -u root
3)查看某个程序相关的打开文件

br

lsof -c sshd
4)查看 TCP 连接

br

lsof -i tcp

这点很有意思。
网络连接本来听起来像“网络层面的事”,但在 Linux 里,依然可以通过“打开文件”的视角去观察。

这就是“一切皆文件”的典型体现。

十三、Linux 没有 C 盘、D 盘、E 盘那套逻辑

Windows 用户刚切到 Linux 时,最不适应的一点通常是:

“盘符去哪了?”

在 Linux 里,没有 C:、D:、E: 这种驱动器盘符概念。
整个系统只有一个统一的目录树,它的起点叫:

br

/

这就是根目录

可以把它想成一棵树的树根,整个文件系统都从这里往下展开。

示意图如下:

br

/br

├── binbr

├── bootbr

├── devbr

├── etcbr

├── homebr

├── libbr

├── mediabr

├── mntbr

├── optbr

├── procbr

├── rootbr

├── sbinbr

├── srvbr

├── sysbr

├── tmpbr

├── usrbr

└── var
十四、根目录 / 是什么

根目录是 Linux 文件系统的起点。

注意这里的 / 有两个常见含义:

1)它表示根目录

例如:

br

cd /

表示切换到根目录。

2)它也是路径分隔符

例如:

br

/usr/local/bin

这里每一级目录都是靠 / 隔开的。

这和 Windows 不一样。
Windows 路径通常长这样:

br

C:\Users\admin\Desktop

Linux 则是:

br

/home/admin/Desktop
十五、根目录下常见目录都有什么用

刚开始不需要死记,但知道大概用途,后面排错和找文件会轻松很多。

1)/bin

存放普通用户也能使用的基础命令。

比如常见命令可能就在这里:

  • ls
  • cat
  • cp
  • mv
2)/sbin

存放系统管理命令,很多需要管理员权限。

例如:

  • 用户管理
  • 网络管理
  • 磁盘管理
  • 系统维护
3)/boot

启动相关文件目录。
包括内核文件、引导加载器等。

4)/dev

设备文件目录。

例如磁盘、终端、随机数设备等,都可能在这里以文件形式出现。

这正是“一切皆文件”的体现之一。

5)/etc

系统配置文件目录,非常重要。

很多关键配置都在这里,比如:

  • 用户相关配置
  • 服务配置
  • 网络配置
  • 主机名配置
  • 开机启动配置

例如:

br

/etc/passwdbr

/etc/shadowbr

/etc/hostname
/etc/passwd

存储用户账户信息。

/etc/shadow

存储密码哈希,更敏感,权限更严格。

6)/home

普通用户的家目录都在这里。

比如用户 aiyou 的主目录通常就是:

br

/home/aiyou
7)/root

这是 root 用户自己的主目录。

注意,root 用户不在 /home/root,而是直接在:

br

/root
8)/tmp

临时文件目录,很常用。

特点:

  • 所有用户通常都能写
  • 常用于放临时数据
  • 很多程序会在这里生成临时文件

在安全场景里,/tmp 也是高频目录。
因为很多临时下载、样本落地、恶意脚本执行都喜欢放这里。

9)/usr

用户空间程序和资源目录,内容很多。

常见的自定义软件安装位置之一是:

br

/usr/local/

很多人也会在这里放自己手动安装的软件。

10)/opt

可选软件目录,常用于第三方软件安装。

比如你自己安装一个独立软件包,也很适合放在这里。

11)/var

存放经常变化的数据。

例如:

  • 日志
  • 缓存
  • 队列
  • 运行状态数据
12)/proc

虚拟文件系统,用来反映进程和内核状态。

它不是普通磁盘文件,而是系统运行状态映射出来的接口。

13)/sys

也是一个虚拟文件系统,和设备、内核、硬件状态关系很大。

14)/media 和 /mnt

一般用于挂载外部设备或临时挂载文件系统。

十六、主目录和工作目录,不是一回事

这是第二个高频混淆点。

1)主目录(Home Directory)

每个用户登录后,都有一个属于自己的默认目录。

  • root 的主目录:/root
  • 普通用户的主目录:/home/用户名

例如:

br

/home/wuya

主目录就像这个用户在系统里的“个人空间”。

快速回到主目录

执行下面任意一个都可以:

br

cd

或者:

br

cd ~

这里的 ~ 就代表当前用户的主目录。

2)工作目录(Working Directory)

工作目录就是你当前所处的位置

比如你现在进入了:

br

/usr/local

那此时的工作目录就是 /usr/local。

查看当前工作目录:

br

pwd

pwd 的全称是:

br

Print Working Directory
3)cd 的含义

cd 的全称可以理解为:

br

Change Directory

作用就是切换当前工作目录。

例如:

br

cd /etc

表示把当前工作目录切换到 /etc。

十七、路径:绝对路径和相对路径

Linux 用路径来定位文件或目录。

1)绝对路径

绝对路径一定从根目录 / 开始写。

例如:

br

/etc/passwdbr

/usr/local/binbr

/home/wuya/test.txt

特点:无论你当前站在哪儿,它指向的都是同一个位置。

2)相对路径

相对路径不是从 / 开始,而是从当前工作目录开始算。

例如你当前在:

br

/usr/local

这时执行:

br

cd bin

其实等价于:

br

cd /usr/local/bin

前提是 bin 确实是当前目录下的子目录。

图示理解

假设当前目录是 /usr/local:

br

当前工作目录:/usr/localbr

br

绝对路径:/usr/local/srcbr

相对路径:src

所以两者最直观的区分方法就是:

  • 以 / 开头的是绝对路径
  • 不以 / 开头的通常是相对路径
十八、几个必须认识的特殊路径符号

Linux 里有几个符号会频繁出现,必须熟悉。

1)/

根目录

br

cd /
2).

当前目录

例如:

br

cd .

意思其实是“进入当前目录”,通常没什么实际意义,但在命令中非常常见。

比如:

br

./test.sh

表示执行当前目录下的 test.sh。

上一级目录

例如:

br

cd ..

表示返回上一层。

如果要返回上两层:

br

cd ../..
4)~

当前用户主目录

例如:

br

cd ~

或者:

br

vim ~/.bashrc

这里的 ~/.bashrc 就等价于:

br

/root/.bashrc

br

/home/用户名/.bashrc

取决于你当前是谁。

十九、隐藏文件:为什么有些文件平时看不见

在 Linux 中,名字以 . 开头的文件或目录,默认是隐藏的

例如:

br

.bashrcbr

.profilebr

.ssh

平时用 ls 看不到它们,要加参数:

br

ls -a

这样才能显示全部内容。

这类文件在用户配置、Shell 环境、SSH 密钥管理中非常常见。

二十、为什么目录后面有时候会带 /

目录名后面加 /,是一个很实用的小细节。

例如:

br

/home/br

/etc/br

/usr/local/

它表示:这是个目录

而普通文件后面不能随便加 /。
比如你对一个普通文件这样写,通常会报错,因为文件不是目录。

所以有时候看到路径结尾带 /,其实是在明确告诉你:这里必须是目录。

二十一、上级目录可以一直往上退吗

可以,而且就算超过层级,也不会报错。

例如你已经在根目录 / 了,再执行:

br

cd ..

你依然还是留在根目录。

也就是说,根目录已经是顶层,再往上也不会真的“跑出文件系统外面”。

这一点在写脚本或者排查路径时很实用。

二十二、几个最常用的基础命令查看当前 Shell

br

echo $SHELL
查看可用 Shell

br

cat /etc/shells
查看当前路径

br

pwd
切换目录

br

cd /etcbr

cd ..br

cd ~
查看文件

br

lsbr

ls -a
查看文件内容

br

cat /etc/passwd
查看打开文件

br

lsofbr

lsof -i tcp
二十三、一张图把几个核心概念串起来

br

用户br

                  │br

                  ▼br

          +----------------+br

          | Terminal 终端   |br

          +----------------+br

                  │br

                  ▼br

          +----------------+br

          | Shell 命令解释器|br

          | bash / zsh     |br

          +----------------+br

                  │br

                  ▼br

          +----------------+br

          | Linux 内核      |br

          | 进程/内存/网络  |br

          +----------------+br

                  │br

                  ▼br

          +----------------+br

          | 文件系统        |br

          | /etc /home /tmp |br

          +----------------+

如果你能把这张图理解透,后面很多 Linux 命令学习就会顺很多。

二十四、对网络安全学习者来说,为什么这些基础很重要

很多人学网络安全,一开始只盯着工具和漏洞,反而忽略了 Linux 基础。
但实际上,后面你会频繁碰到这些内容:

  • Web 服务部署在 Linux 上
  • 漏洞利用后拿到的是 Linux Shell
  • 权限维持常常和用户目录、启动项、定时任务有关
  • 入侵排查离不开进程、网络连接、日志与文件系统
  • 恶意脚本、挖矿木马、后门程序大量使用 Shell 脚本

如果连 /etc、/tmp、/var、/home、主目录、工作目录、路径符号这些都不熟,后续学习会非常吃力。

二十五、总结

把这篇文章的重点压缩一下,其实就几条:

Linux 的基本结构

  • 内核
  • Shell
  • 文件系统
  • 应用程序
Shell 的本质
  • 命令解释器
  • 帮用户和内核交互
  • 也是脚本语言执行环境
文件系统的核心思想
  • 没有 Windows 那种盘符结构
  • 一切从根目录 / 展开
  • “一切皆文件”是 Linux 的重要设计理念
必须区分的几个概念
  • 主目录:用户自己的固定目录
  • 工作目录:当前所在位置
  • 绝对路径:从 / 开始
  • 相对路径:从当前目录开始
  • :当前目录
  • :上一级目录
  • :主目录