刚接触 Linux 的时候,很多人会被一堆概念绕晕:内核、Shell、终端、根目录、主目录、工作目录、绝对路径、相对路径……名字都很像,放在一起更容易混。
如果只是照着命令敲,短时间也能用;但一旦开始学运维、渗透测试、应急响应或者脚本自动化,这些基础概念迟早都得补上。
这篇文章就不堆术语,尽量用实用、直白的方式,把 Linux 的底层结构和最常用的文件系统概念理清楚。
一、Linux 到底由哪些部分组成
从整体上看,一个 Linux 系统可以理解为由下面几部分组成:
- 内核(Kernel)
- Shell
- 文件系统
- 应用程序
可以先看一张简化示意图:
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 这个词,原意就是“壳”。
它包在内核外面,作用可以理解为:
- 接收用户输入
- 解释命令含义
- 调用系统功能
- 把结果返回给用户
你在命令行里输入:
brcat /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
直接执行:
brecho $SHELL例如输出:
br/bin/bash说明当前用户默认使用的是 Bash。
如果想查看系统里有哪些可用 Shell,可以看:
brcat /etc/shells这会列出系统认可的 Shell 路径。
六、如何切换默认 Shell
先列出可切换的 Shell:
brchsh -l然后切换,比如切到 zsh:
brchsh -s /bin/zsh切换完成后,一般需要重新登录,配置才会生效。
提醒一下:切换 Shell 不等于临时运行某个解释器,而是修改当前用户的默认登录 Shell。七、Terminal 和 Shell 不是一回事
这是很多初学者最容易混淆的地方。
Terminal 是什么
Terminal,中文一般叫“终端”,它更像是一个界面程序。
比如你双击打开的“终端”窗口,本质上是一个图形界面工具,它负责:
- 接收你的键盘输入
- 把内容交给 Shell
- 把执行结果显示出来
Shell 是命令解释器,负责理解并执行命令。
它们的关系可以简单画成这样:
br用户输入br │br ▼brTerminal(终端窗口)br │br ▼brShell(bash/zsh)br │br ▼brLinux Kernel(内核)br │br ▼br执行结果返回所以,平时说“打开终端”,不等于“打开 Shell”;
更准确地说,是打开一个终端程序,在里面运行一个 Shell。
八、Windows 其实也有“Shell”
Shell 并不是 Linux 独有的概念。
Windows 里也有:
- cmd
- PowerShell
它们本质上也属于命令解释环境。
所以你可以把 Linux 的 Bash、Zsh,理解成 Windows 命令行家族的“同类产品”。
九、Shell 不只是命令行,还是脚本语言
Shell 还有一个非常重要的身份:脚本解释器。
也就是说,Shell 不光能让你一条一条敲命令,还可以把多条命令写进文件里,变成自动化脚本。
通常脚本文件扩展名写成:
br.sh例如:
br#!/bin/bashbrecho "hello"brpwdbrwhoami这里第一行:
br#!/bin/bash叫做Shebang,表示这个脚本要交给 Bash 来解释执行。
十、Shell 脚本能做什么
Shell 脚本虽然不适合做大型系统开发,但在 Linux 管理和安全领域非常实用。
它能完成的事情包括:
- 批量执行命令
- 清理日志
- 巡检系统状态
- 检查异常进程
- 审计网络连接
- 分析历史命令
- 检查定时任务
- 快速做应急响应
比如你怀疑一台机器中了挖矿木马,Shell 脚本很适合快速收集这些信息:
- 历史命令是否异常
- 是否有可疑进程高占用 CPU
- 是否存在异常网络连接
- 是否被写入恶意定时任务
- 是否存在异常启动项
- 是否下载了可疑脚本
所以 Shell 脚本在网络安全领域尤其常见,既能用于运维自动化,也能用于入侵排查。
十一、Linux 文件系统的核心思想:一切皆文件
这是 Linux 里一个非常经典的理念:
一切皆文件
初学者听到这句话通常会误解成“所有东西本质上真的都是普通文件”,其实不是这个意思。
更准确地说:
Linux 提供了一套统一的访问方式,让很多资源都可以像文件一样被访问。
这些“资源”包括但不限于:
- 普通文件
- 目录
- 设备
- 进程信息
- 管道
- 链接
- Socket
- 网络连接相关对象
你不一定非要马上理解它背后的设计哲学,但至少先记住一句话:
在 Linux 里,文件不仅仅是文本文档。
十二、用 lsof 体会“一切皆文件”
lsof 的全称是:
brlist open files也就是:列出系统中被打开的文件。
它特别适合帮助理解 Linux 的文件视角。
1)查看某个文件被哪些进程打开
brlsof /bin/bash这可以看到哪些进程正在使用 /bin/bash 这个文件。
2)查看某个用户打开了哪些文件
brlsof -u root3)查看某个程序相关的打开文件brlsof -c sshd4)查看 TCP 连接brlsof -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)它表示根目录
例如:
brcd /表示切换到根目录。
2)它也是路径分隔符
例如:
br/usr/local/bin这里每一级目录都是靠 / 隔开的。
这和 Windows 不一样。
Windows 路径通常长这样:
brC:\Users\admin\DesktopLinux 则是:
br/home/admin/Desktop十五、根目录下常见目录都有什么用刚开始不需要死记,但知道大概用途,后面排错和找文件会轻松很多。
1)/bin
存放普通用户也能使用的基础命令。
比如常见命令可能就在这里:
- ls
- cat
- cp
- mv
存放系统管理命令,很多需要管理员权限。
例如:
- 用户管理
- 网络管理
- 磁盘管理
- 系统维护
启动相关文件目录。
包括内核文件、引导加载器等。
4)/dev
设备文件目录。
例如磁盘、终端、随机数设备等,都可能在这里以文件形式出现。
这正是“一切皆文件”的体现之一。
5)/etc
系统配置文件目录,非常重要。
很多关键配置都在这里,比如:
- 用户相关配置
- 服务配置
- 网络配置
- 主机名配置
- 开机启动配置
例如:
br/etc/passwdbr/etc/shadowbr/etc/hostname/etc/passwd存储用户账户信息。
/etc/shadow
存储密码哈希,更敏感,权限更严格。
6)/home
普通用户的家目录都在这里。
比如用户 aiyou 的主目录通常就是:
br/home/aiyou7)/root这是 root 用户自己的主目录。
注意,root 用户不在 /home/root,而是直接在:
br/root8)/tmp临时文件目录,很常用。
特点:
- 所有用户通常都能写
- 常用于放临时数据
- 很多程序会在这里生成临时文件
在安全场景里,/tmp 也是高频目录。
因为很多临时下载、样本落地、恶意脚本执行都喜欢放这里。
9)/usr
用户空间程序和资源目录,内容很多。
常见的自定义软件安装位置之一是:
br/usr/local/很多人也会在这里放自己手动安装的软件。
10)/opt
可选软件目录,常用于第三方软件安装。
比如你自己安装一个独立软件包,也很适合放在这里。
11)/var
存放经常变化的数据。
例如:
- 日志
- 缓存
- 队列
- 运行状态数据
虚拟文件系统,用来反映进程和内核状态。
它不是普通磁盘文件,而是系统运行状态映射出来的接口。
13)/sys
也是一个虚拟文件系统,和设备、内核、硬件状态关系很大。
14)/media 和 /mnt
一般用于挂载外部设备或临时挂载文件系统。
十六、主目录和工作目录,不是一回事
这是第二个高频混淆点。
1)主目录(Home Directory)
每个用户登录后,都有一个属于自己的默认目录。
- root 的主目录:/root
- 普通用户的主目录:/home/用户名
例如:
br/home/wuya主目录就像这个用户在系统里的“个人空间”。
快速回到主目录
执行下面任意一个都可以:
brcd或者:
brcd ~这里的 ~ 就代表当前用户的主目录。
2)工作目录(Working Directory)
工作目录就是你当前所处的位置。
比如你现在进入了:
br/usr/local那此时的工作目录就是 /usr/local。
查看当前工作目录:
brpwdpwd 的全称是:
brPrint Working Directory3)cd 的含义cd 的全称可以理解为:
brChange Directory作用就是切换当前工作目录。
例如:
brcd /etc表示把当前工作目录切换到 /etc。
十七、路径:绝对路径和相对路径
Linux 用路径来定位文件或目录。
1)绝对路径
绝对路径一定从根目录 / 开始写。
例如:
br/etc/passwdbr/usr/local/binbr/home/wuya/test.txt特点:无论你当前站在哪儿,它指向的都是同一个位置。
2)相对路径
相对路径不是从 / 开始,而是从当前工作目录开始算。
例如你当前在:
br/usr/local这时执行:
brcd bin其实等价于:
brcd /usr/local/bin前提是 bin 确实是当前目录下的子目录。
图示理解
假设当前目录是 /usr/local:
br当前工作目录:/usr/localbrbr绝对路径:/usr/local/srcbr相对路径:src所以两者最直观的区分方法就是:
- 以 / 开头的是绝对路径
- 不以 / 开头的通常是相对路径
Linux 里有几个符号会频繁出现,必须熟悉。
1)/
根目录
brcd /2).当前目录
例如:
brcd .意思其实是“进入当前目录”,通常没什么实际意义,但在命令中非常常见。
比如:
br./test.sh表示执行当前目录下的 test.sh。
上一级目录
例如:
brcd ..表示返回上一层。
如果要返回上两层:
brcd ../..4)~当前用户主目录
例如:
brcd ~或者:
brvim ~/.bashrc这里的 ~/.bashrc 就等价于:
br/root/.bashrcbr/home/用户名/.bashrc取决于你当前是谁。
十九、隐藏文件:为什么有些文件平时看不见
在 Linux 中,名字以 . 开头的文件或目录,默认是隐藏的。
例如:
br.bashrcbr.profilebr.ssh平时用 ls 看不到它们,要加参数:
brls -a这样才能显示全部内容。
这类文件在用户配置、Shell 环境、SSH 密钥管理中非常常见。
二十、为什么目录后面有时候会带 /
目录名后面加 /,是一个很实用的小细节。
例如:
br/home/br/etc/br/usr/local/它表示:这是个目录。
而普通文件后面不能随便加 /。
比如你对一个普通文件这样写,通常会报错,因为文件不是目录。
所以有时候看到路径结尾带 /,其实是在明确告诉你:这里必须是目录。
二十一、上级目录可以一直往上退吗
可以,而且就算超过层级,也不会报错。
例如你已经在根目录 / 了,再执行:
brcd ..你依然还是留在根目录。
也就是说,根目录已经是顶层,再往上也不会真的“跑出文件系统外面”。
这一点在写脚本或者排查路径时很实用。
二十二、几个最常用的基础命令查看当前 Shell
brecho $SHELL查看可用 Shellbrcat /etc/shells查看当前路径brpwd切换目录brcd /etcbrcd ..brcd ~查看文件brlsbrls -a查看文件内容brcat /etc/passwd查看打开文件brlsofbrlsof -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
- 文件系统
- 应用程序
- 命令解释器
- 帮用户和内核交互
- 也是脚本语言执行环境
- 没有 Windows 那种盘符结构
- 一切从根目录 / 展开
- “一切皆文件”是 Linux 的重要设计理念
- 主目录:用户自己的固定目录
- 工作目录:当前所在位置
- 绝对路径:从 / 开始
- 相对路径:从当前目录开始
- :当前目录
- :上一级目录
- :主目录
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.