linux文件系统 重要目录及命令解释
(1)/根目录
/作用1:根目录,linux所有文件的顶级目录;
/作用2:目录分隔符,/tmp
kiosk@foundation0 \~\]$ ssh root@servera Activate the web console with: systemctl enable --now cockpit.socket Register this system with Red Hat Insights: insights-client --register Create an account or view all your systems at https://red.ht/insights-dashboar Last login: Mon Sep 29 22:28:40 2025 from 172.25.250.250 \[root@servera \~\]# **cd /** \[root@servera /\]# pwd / \[root@servera /\]# **ll -a**
ll长选项解析(可区分文件还是目录或其他)
total 36 (并不是某个文件的名字,而是说明 当前目录中所有文件的"磁盘块占用总数,不是字节(磁盘是按块分配的,磁盘占用=数据块 + inode + 目录项等元数据)"。这个目录下的所有文件和子目录,总共占用了 36 个磁盘块(block)。在 Linux 中,一个块(block)通常是 1KB(也可能是 4KB,取决于文件系统)。所以 total 36 大约等于 36KB 磁盘空间。只是文件元数据占用的空间,不等于文件大小的总和:ls -l 输出里每个文件有一个 大小(比如 4096 字节),那 total 不直接等于这些大小加起来,文件大小(比如 4096)是逻辑大小,表示文件内容占多少字节。磁盘块占用是实际磁盘存储的开销。即使文件大小是 0,也需要一个 inode 和目录项,仍会占用磁盘块。
文件大小是指文件内容真正需要多少字节存储,这些内容会被存放在磁盘数据块 (data block) 中。Linux 文件系统(ext4, xfs 等)按块分配磁盘空间,每块通常 4KB(ext4 默认)。如果文件大小 < 块大小,仍然会占用整块。如果文件大小 > 块大小,会占用多个连续块(分块)。
如何区分 文件 和 目录: ll=ls -l ,第一个字符对应的含义,file也可显示文件类型。
[文件类型][权限位][SELinux标记] ,长度一般是 10 个字符,第一位 文件类型,接下来的 9 位权限位(3 组三组:属主/属组/其他人,分成 3 组,每组 3 位:rwx rwx rwx),最后一位 "." 或 "+" 表示 ELinux 安全上下文或 ACL。
举例:d r-x r-x r-x .:
| 字符 | 描述 |
|---|---|
| - | 普通文件 |
| d | 目录 (directory) |
| l | 符号链接 (symlink) |
| c | 字符设备 (char device) |
| b | 块设备 (block device) |
| p | 命名管道 (FIFO) |
| s | 套接字 (socket) |
| 字符 | 描述 |
|---|---|
| r | 可读 (read) |
| w | 可写 (write) |
| x | 可执行 / 进入目录 (execute) |
| - | 没有该权限 |
/根目录内容
dr-xr-xr-x. 19 root root 246 May 23 2022 .
dr-xr-xr-x. 19 root root 246 May 23 2022 ...
dr-xr-xr-x. 2 root root 6 Aug 9 2021 afs
lrwxrwxrwx. 1 root root 7 Aug 9 2021 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 23 2022 boot
drwxr-xr-x. 18 root root 3220 Oct 2 22:39 dev
drwx------. 3 root root 16384 Dec 31 1969 efi
drwxr-xr-x. 105 root root 8192 Oct 2 22:39 etc
drwxr-xr-x. 4 root root 35 May 18 2022 home
lrwxrwxrwx. 1 root root 7 Aug 9 2021 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Aug 9 2021 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Aug 9 2021 media
drwxr-xr-x. 2 root root 6 Aug 9 2021 mnt
drwxr-xr-x. 2 root root 6 Aug 9 2021 opt
dr-xr-xr-x. 195 root root 0 Oct 2 22:39 proc
dr-xr-x---. 3 root root 140 Sep 29 05:17 root
drwxr-xr-x. 37 root root 1160 Oct 2 22:39 run
lrwxrwxrwx. 1 root root 8 Aug 9 2021 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Aug 9 2021 srv
dr-xr-xr-x. 13 root root 0 Oct 2 22:39 sys
drwxrwxrwt. 9 root root 4096 Oct 2 22:40 tmp
drwxr-xr-x. 12 root root 144 May 3 2022 usr
drwxr-xr-x. 20 root root 279 May 18 2022 var
(2)boot目录及dev
bios加电以后,查找到引导磁盘,读取引导的文件系统就是boot,bios查找boot,boot一般是单独的一个分区,
root@servera /\]# **df -h(显示磁盘分区的使用情况** ,参数 -h 表示 人类可读(human-readable),会把容量显示成 KB/MB/GB) Filesystem 哪个文件系统/分区) Size Used Avail Use% Mounted on(挂载点/目录) devtmpfs 844M 0 844M 0% /dev(是 Linux 的设备文件系统(动态生成 /dev 下的设备节)) tmpfs 888M 0 888M 0% /dev/shm(tmpfs是内存中的临时文件系统,/dev/shm用来做 共享内存,进程间通信) tmpfs 355M 9.5M 346M 3% /run(/run 目录,存放运行时数据(PID 文件、socket 等,也是基于内存的临时文件系统) /dev/vda4 9.4G 1.7G 7.7G 18% /(/是根分区,设备 /dev/vda4 表示虚拟磁盘的第 4 个分区) **/dev/vda3 495M 160M 335M 33% /boot** **(/boot 分区,存放内核和引导程序。)** /dev/vda2 200M 7.0M 193M 4% /boot/efi(EFI 系统分区,UEFI 引导用,用来存放启动所需的 EFI 文件) tmpfs 178M 0 178M 0% /run/user/0(用户 root 的运行时数据存放目录,当 root 登录时,会在 /run/user/0 下创建也是临时的,系统重启会清空。) 总结:devtmpfs、tmpfs → 内存型文件系统,重启后数据会消失。/dev/vdaX → 真正的磁盘分区,存储系统数据。/ → 根分区,存大部分文件。/boot、/boot/efi → 系统启动相关分区。/run、/dev/shm → 临时运行时空间。
区分设备文件、分区、目录、挂载点
| 名称 | 描述 |
|---|---|
| 设备文件 | 在 Linux 里,一切都是文件,包括硬件,/dev/xxx 目录下的东西就是设备文件,用来代表真实的硬件。例如:/dev/sda → 整个硬盘 ;/dev/sda1 → 硬盘第 1 个分区;/dev/vda2 → 虚拟磁盘 的第 2 个分区;它不是普通的文本文件,而是一个接口,操作它就是在操作真实的硬件。 |
| 分区 | 把一个物理硬盘切成几块区域,每一块就是分区。分区相当于一个"独立的小硬盘",可以格式化成文件系统(ext4, xfs, fat32 等)。例如:/dev/sda → 整个磁盘,/dev/sda1、/dev/sda2 → 分区,分区必须 格式化(mkfs.ext4 / mkfs.xfs)之后,才能存放文件。 |
| 目录 | Linux 没有 C: D: E: 盘符的概念。所有东西都放在一个 树形目录 里(从 / 根开始)。分区/设备要用之前,必须"挂载"到一个目录上,这个目录就叫 挂载点。比如:/dev/sda1 → /boot,/dev/sda2 → /,/dev/sda3 → /home,这样进入 /home,其实就是在访问 /dev/sda3 这个分区。 |
| 挂载点 | 就是日常看到的文件夹,比如 /home、/etc、/boot/efi。目录本身只是一个逻辑路径。挂载点本质上就是"选择一个目录",把设备的内容贴到这个目录下 |
root@servera /\]# **lsblk** (list block devices,列出系统里的 块设备,硬盘、分区、U 盘等存储设备) NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 252:0 0 10G 0 disk ├─**v** da1 252:1 0 1M 0 part ├─vda2 252:2 0 200M 0 part /boot/efi ├─vda3 252:3 0 500M 0 part /boot └─vda4 252:4 0 9.3G 0 part / vdb 252:16 0 5G 0 disk vdc 252:32 0 5G 0 disk vdd 252:48 0 5G 0 disk(vdb、vdc、vdd:三块 空的**虚拟**磁盘,每个 5GB。目前没有分区,也没有挂载点(MOUNTPOINTS 是空的)。如果要用它们,需要先 fdisk 分区,再 mkfs 格式化,然后 mount 到某个目录。)
(3)home目录
参考基础Linux访问命令行的2.区分:普通用户与超级用户提示符
root@servera /\]# cd home \[root@servera home\]# ll total 0 drwx------. 4 devops devops 111 Sep 29 05:03 devops drwx------. 3 student student 77 May 18 2022 student **\[root@servera home\]# useradd test(添加一个test用户)** \[root@servera home\]# ll total 0 drwx------. 4 devops devops 111 Sep 29 05:03 devops drwx------. 3 student student 77 May 18 2022 student drwx------. 2 test test 62 Oct 3 07:11 test \[root@servera home\]# su - devops Last login: Mon Sep 29 04:51:24 EDT 2025 on pts/0 \[devops@servera \~\]$ ll total 0 \[devops@servera \~\]$ ll -a total 16 drwx------. 4 devops devops 111 Sep 29 05:03 . drwxr-xr-x. 5 root root 47 Oct 3 07:11 ... drwx------. 3 devops devops 17 May 18 2022 .ansible -rw-------. 1 devops devops 71 Sep 29 05:03 .bash_history -rw-r--r--. 1 devops devops 18 Nov 5 2021 .bash_logout -rw-r--r--. 1 devops devops 141 Nov 5 2021 .bash_profile -rw-r--r--. 1 devops devops 492 Nov 5 2021 .bashrc drwx------. 2 devops devops 25 Sep 29 05:01 .ssh **\[devops@servera \~\]$ ll /home/student/** **ls: cannot open directory '/home/student/': Permission denied(普通无法查看其他用户数据,root用户可以看任何人的数据)** \[devops@servera \~\]$ ll /home/ total 0 **drwx------. 4 devops devops 111 Sep 29 05:03 devops(rwx------所有者拥有完全权限,组内用户和组外用户没有任何权限)** drwx------. 3 student student 77 May 18 2022 student drwx------. 2 test test 62 Oct 3 07:11 test
(4)bin目录
/bin(根目录下的bin是软连接,虚的)---->/us目录r/bin(挪)
(5)usr目录
usr目录下的内容:
root@servera bin\]# cd \[root@servera \~\]# cd /usr \[root@servera usr\]# ll total 140 dr-xr-xr-x. 2 root root 28672 May 18 2022 bin drwxr-xr-x. 2 root root 6 Aug 9 2021 games drwxr-xr-x. 3 root root 23 May 3 2022 include dr-xr-xr-x. 34 root root 4096 May 18 2022 lib dr-xr-xr-x. 53 root root 32768 May 18 2022 lib64 drwxr-xr-x. 34 root root 4096 May 18 2022 libexec drwxr-xr-x. 12 root root 131 May 3 2022 local dr-xr-xr-x. 2 root root 16384 May 18 2022 sbin drwxr-xr-x. 105 root root 4096 May 18 2022 share drwxr-xr-x. 4 root root 34 May 3 2022 src lrwxrwxrwx. 1 root root 10 Aug 9 2021 tmp -\> .../var/tmp
符号链接部分
[kiosk@foundation0 ~] ll /proc/$/ns
total 0
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 mnt -> 'mnt:[4026531840]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 net -> 'net:[4026531992]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 pid -> 'pid:[4026531836]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 time -> 'time:[4026531834]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 user -> 'user:[4026531837]'
lrwxrwxrwx. 1 kiosk kiosk 0 Oct 3 10:07 uts -> 'uts:[4026531838]'
ll /proc/$$/ns:是 Linux 命名空间(namespace) 的信息/proc/$$/ :当前shell进程的/proc目录,两个美元符是当前进程ID
/proc//ns/ → 存放该进程所处的各种 namespace 的符号链接
每一行是一个命名空间的符号链接 (l rwxrwxrwx),指向类似 'xxx:[数字]' 的对象。
cgroup 这个链接指向的是一个命名空间对象,类型是 cgroup,ID 是 4026531835。
| 描述 | |
|---|---|
| l | 表示这是一个 符号链接(link) 文件,而不是普通文件 |
| rwxrwxrwx | 权限,说明任何人都能读写执行(符号链接的权限一般不重要) |
| . | 表示有 SELinux 上下文 |
| 1 | 硬链接数(对符号链接通常是 1) |
| kiosk kiosk | 文件的属主和属组(这里是用户 kiosk) |
| 0 | 文件大小(符号链接大小一般显示为 0) |
| Oct 3 10:07 | 文件最后修改时间 |
| cgroup | 文件名(即 namespace 类型) |
| -> 'cgroup:[4026531835]' | 符号链接指向它 |
这些代表进程所在的不同 命名空间类型:
cgroup:控制组命名空间,用于资源限制和隔离。
ipc:进程间通信命名空间(System V IPC、POSIX message queues)。
mnt:挂载命名空间(隔离挂载点)。
net:网络命名空间(隔离网卡、IP、路由表等)。
pid:进程 ID 命名空间(容器里常见 PID 隔离)。
pid_for_children:子进程使用的 PID 命名空间。
time / time_for_children:时间命名空间(隔离时钟、CLOCK_MONOTONIC 等)。
user:用户命名空间(隔离 UID/GID)。
uts:UTS 命名空间(隔离主机名和域名)。
后面的数字(如 [4026531835])是 namespace 的唯一标识符(inode 号)。
如果两个进程的 /proc//ns/xxx 链接指向同一个 [数字],说明它们处于同一个命名空间。
📌为什么要有这些?
Linux 命名空间是 容器技术(Docker, Kubernetes, LXC) 的核心机制,用来提供隔离:让容器里的进程有自己的 网络、挂载、PID、用户、主机名,互不干扰。它和 cgroups 一起构成了 Linux 容器的基础。
👉 举个例子:
你在 Docker 容器里运行 ll /proc/$$/ns,会看到和宿主机不一样的 PID/NET namespace ID。这就是容器"看起来像独立机器"的原因。