一、Linux下目录结构介绍
1.Linux下一切皆文件
如下图所示,以 “根目录 /” 作为所有文件的起点,就像一棵大树的 “树根”,图中展示的 /root、/bin、/boot 等目录,都是从根目录延伸的 “枝干”。
这些目录看似和windows下的文件夹一样,但是Linux下你通过查看目录大小可以发现,基本都是4096(4KB)的整数倍大小,这是因为显示的大小并不是目录下所有文件的大小总和,只是目录文件的元数据大小,是存储的该目录在磁盘上的相关信息,像文件名列表、inode 号等 。
2.Linux下文件命名规则
(1)在 Linux 中,除 / 和空字符 \0 外,多数字符(包括特殊符号、空格、非打印字符等)理论上可用于文件名,但使用这些字符可能导致操作复杂、兼容性问题或不可预期的错误,因此不建议使用,具体情况图下表所示:
| 字符风险类型 | 字符 | 备注 |
| 绝对禁止 | /(路径分隔符)、\0(空字符) | 直接导致系统解析错误。 |
| 允许但危险 | 空格、*、?、$、!等 | 需用引号包裹(如 "file?name.txt"),否则命令行可能解析会出错。 |
| 非打印字符 | \t(制表符)、\b(退格)等 | 文件名不可见,易引发误操作。 |
| 隐藏字符 | 如零宽空格(ZWSP) | 肉眼不可见,可能导致同名冲突(如 file.txt 和 file .txt,后者含零宽空格)。 |
| 系统保留字符 | .(隐藏文件)、..(上级目录) | 文件/目录名以 .开头,会被系统识别为隐藏文件 / 目录,正常不可见。如果命名(如 touch .),但会干扰系统命令(如 cd . 仍指向当前目录) |
(2)目录名或文件名的长度不能超过255个字符。
(3)目录名或文件名是区分大小写的。如DOG、dog、Dog、DOg,是互不相同的目录名或文件名,但使用字符大小写来区分不同的文件或目录,也是不建议的。
(4)与Windows操作系统不同,文件的扩展名对Linux操作系统没有特殊的含义,即Linux系统并不以文件的扩展名开分区文件类型。例如,dog.exe只是一个文件,其扩展名.exe并不代表此文件就一定是可执行文件。
尽管 Linux 对扩展名无强制要求,但存在一些约定俗成的命名习惯:
可执行文件:部分开发者会添加 .sh(脚本)、.bin(二进制程序)等扩展名,便于人识别用途;
压缩文件:常用 .tar.gz、.zip 等扩展名,符合通用认知;
3.Linux下目录介绍
在终端执行下面命令,得到如下图所示打印,显示的是当前Linux操作系统根目录下的所有目录
ls /
目录简述:
| 目录名 | 描述 |
| / | Linux文件系统根目录 |
| /bin | 存放系统中供普通用户使用的常用命令(如 ls、cp 等),命令本质是可执行文件,系统启动时会加载这些命令供用户调用 |
| /boot | 存储系统启动相关文件,包括内核文件(vmlinuz)、引导加载程序(如 grub 相关文件),是系统启动的核心目录 |
| /cdrom | 传统用于挂载光驱(CD/DVD)的目录,现代系统中使用频率较低,部分发行版可能用 media 替代光驱挂载功能 |
| /dev | 存储设备文件,将硬件(如硬盘、键盘、串口、USB)抽象为文件,通过操作这些文件实现硬件交互(如 /dev/sda 代表硬盘) |
| /etc | 存放系统配置文件,如网络配置(/etc/network/interfaces)、用户信息(/etc/passwd)等,修改此目录文件会影响系统全局设置 |
| /home | 普通用户的家目录,每个用户(如 user1)会在此创建独立目录(/home/user1),用于存储个人文件、配置 |
| /lib | 保存系统基础库文件(如动态链接库 .so),供系统命令和程序调用,是系统运行的依赖核心 |
| /lib32 | 存放 32 位程序的库文件,用于支持 32 位应用在 64 位系统上运行 |
| /lib64 | 存储 64 位程序的库文件,适配 64 位系统架构 |
| /libx32 | 针对 x32 架构的库文件,较少见,用于特定编译场景 |
| lost+found | 文件系统修复(如 fsck 命令)时,存放找回的丢失文件,通常在操作系统出现异常后生成内容 |
| media | 自动挂载可移动媒体(如 U 盘、SD 卡)的目录,系统检测到外部设备时,会在此创建挂载点 |
| mnt | 手动挂载临时存储设备(如硬盘分区、网络存储)的目录,用户可自定义挂载操作(如 mount /dev/sdb1 /mnt) |
| opt | 用于安装可选的第三方软件,一些大型应用(如数据库)会默认安装到此目录,方便统一管理 |
| proc | 虚拟文件系统,存储系统运行时的动态信息(如进程、内存使用),数据存于内存,不占磁盘空间(如 /proc/cpuinfo 显示 CPU 信息) |
| root | 系统管理员(root 用户)的家目录,存放 root 用户的个人文件和配置,与普通用户的 home 目录隔离 |
| run | 存储系统运行时产生的临时数据,如进程 PID 文件、服务状态信息,系统重启后内容会清空 |
| sbin | 存放系统管理专用命令(如 init、reboot),普通用户无执行权限,需管理员权限(root 或 sudo)调用 |
| snap | 一种软件包格式,也是一种包管理机制,由 Canonical 公司推广,广泛应用于 Ubuntu 等 Linux 发行版 |
| srv | 存储服务相关数据,如 Web 服务的网页文件、FTP 服务的共享文件,由服务程序启动后调用 |
| swapfile | 用于扩展系统虚拟内存 |
| sys | 基于内核的 sysfs 虚拟文件系统,提供内核对象(如设备、驱动)的信息接口,用于查看硬件属性等 |
| tmp | 存放临时文件,所有用户均可读写,系统重启后内容可能被清空,常用于存储程序运行时的临时数据 |
| usr | 用户共享目录,存放非系统运行必需的文件(如应用程序、文档),类似 Windows 的 “Program Files”,可单独挂载 |
| var | 存储可变数据,如日志文件(/var/log)、邮件(/var/mail)、缓存(/var/cache),数据会随系统使用不断变化 |
二、Linux中7种文件类型
在终端执行下面命令,得到如下图所示打印。从第三行开始的每一行开头的第一个字母代表的就是对应文件的类型缩写。
ll /dev
或者
ls -al /dev
Linux文件类型简述:
| 文件类型 | 文件缩写 | 对应英文 |
| 普通文件 | - | |
| 目录文件 | d | dir |
| 字符设备文件 | c | char |
| 块设备文件 | b | block |
| 管道文件 | p | pipe |
| 套接字文件 | s | socket |
| 链接文件 | l | link |