【Linux】Linux 系统的目录结构详解

【Linux】Linux 系统的目录结构详解
在这里插入图片描述
👋 大家好,欢迎来到我的技术博客!
📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。
🎯 本文将围绕Linux这个话题展开,希望能为你带来一些启发或实用的参考。
🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获!

文章目录

【Linux】Linux 系统的目录结构详解 📁

在 Linux 系统的世界里,一切皆文件,而目录则是组织这些文件的基石。理解 Linux 系统的目录结构,就像掌握了一把打开 Linux 世界大门的钥匙。它不仅决定了文件和程序的存放位置,还深刻影响着系统的运行、管理和维护方式。本文将深入探讨 Linux 系统的目录结构,从根目录开始,逐层剖析各个重要目录的功能和作用,帮助您构建对 Linux 文件系统的全面认知。

1. Linux 目录结构概述 🌐

Linux 系统采用一种树状的目录结构,这种结构类似于一棵倒置的树,其中根目录(/)位于最顶端。所有的文件和目录都从根目录开始,通过不同的分支延伸至各个角落。这种统一的结构使得 Linux 系统具有高度的一致性和可预测性,便于用户和系统管理员进行管理和操作。

核心特点:

  • 层次化结构:目录层级清晰,便于理解和管理。
  • 统一命名空间:所有文件和设备都通过路径唯一标识。
  • 标准化:遵循 Filesystem Hierarchy Standard (FHS),确保不同发行版间的一致性。
  • 灵活性:用户可以根据需要在目录树中创建自己的子目录。

外站链接:

2. 根目录 (/) —— 系统的起点 🚩

根目录是整个 Linux 文件系统结构的起点,所有其他目录和文件都直接或间接地隶属于它。它是整个文件系统的最高级别目录,通常被称作 /

特点:

  • 唯一性:每个 Linux 系统只有一个根目录。
  • 核心地位:所有文件和目录的起始点。
  • 不可删除:根目录是系统的核心部分,不能被删除或卸载。

示例: 查看根目录下的内容。

# 查看根目录内容ls / # 输出示例:# bin dev home lib64 mnt proc run srv tmp var# boot etc lib media opt root sbin sys usr

代码示例: 使用 pwdls 命令查看当前工作目录和根目录内容。

# 当前工作目录pwd# 输出: /home/username# 查看根目录ls / # 输出: bin dev home lib64 mnt proc run srv tmp var ...

3. /bin —— 基本命令的家 🛠️

/bin 目录存放着系统启动和运行必需的基本命令(Binary)。这些命令通常在单用户模式下也能使用,是系统运行不可缺少的部分。

常见文件:

  • ls, cp, mv, rm:基础文件操作命令。
  • cat, grep, find:文本处理和搜索命令。
  • sh, bash:Shell 解释器。

示例: 查看 /bin 目录下的常用命令。

# 查看 /bin 目录下的 ls 命令ls -l /bin/ls # 输出示例:# -rwxr-xr-x 1 root root 134240 Apr 15 2023 /bin/ls# 查看 /bin 目录下的 shell 命令ls -l /bin/bash # 输出示例:# -rwxr-xr-x 1 root root 1206640 Apr 15 2023 /bin/bash

代码示例: 使用 which 命令查找命令所在位置。

# 查找 ls 命令的位置whichls# 输出: /bin/ls# 查找 grep 命令的位置whichgrep# 输出: /bin/grep

4. /sbin —— 系统管理员的工具箱 🛠️

/sbin 目录存放着系统管理员使用的系统管理命令。这些命令通常用于系统维护、配置和故障排查,需要 root 权限才能执行。

常见文件:

  • ifconfig, iptables:网络配置命令。
  • fdisk, mkfs:磁盘分区和格式化命令。
  • reboot, shutdown:系统重启和关机命令。
  • mount, umount:挂载和卸载文件系统命令。

示例: 查看 /sbin 目录下的系统管理命令。

# 查看 /sbin 目录下的 mount 命令ls -l /sbin/mount # 输出示例:# -rwsr-xr-x 1 root root 65536 Apr 15 2023 /sbin/mount# 查看 /sbin 目录下的 ifconfig 命令ls -l /sbin/ifconfig # 输出示例:# -rwxr-xr-x 1 root root 32768 Apr 15 2023 /sbin/ifconfig

代码示例: 使用 ls 查看 /sbin 目录内容。

# 查看 /sbin 目录下的命令 (简化输出)ls /sbin |head -10 # 输出示例:# busybox# fsck# ifconfig# init# iptables# killall# login# lsblk# mkfs.ext4# mount

5. /lib 和 /lib64 —— 系统库的家园 📦

/lib/lib64 目录分别存放着 32 位和 64 位的共享库文件(Shared Libraries)。这些库文件是程序运行时依赖的动态链接库,包含了许多通用函数和功能模块。

区别:

  • /lib:存放 32 位共享库,用于 32 位应用程序。
  • /lib64:存放 64 位共享库,用于 64 位应用程序。在某些 32 位系统上可能不存在。

常见文件:

  • libc.so.6:C 标准库。
  • libm.so.6:数学库。
  • libpthread.so.0:线程库。

示例: 查看 /lib 目录下的库文件。

# 查看 /lib 目录下的 libc 库ls -l /lib/libc.so.6 # 输出示例:# lrwxrwxrwx 1 root root 12 Apr 15 2023 /lib/libc.so.6 -> libc-2.31.so# 查看 /lib64 目录下的 libc 库 (如果存在)ls -l /lib64/libc.so.6 # 输出示例:# lrwxrwxrwx 1 root root 12 Apr 15 2023 /lib64/libc.so.6 -> libc-2.31.so

代码示例: 使用 ldd 命令查看程序依赖的库。

# 查看 ls 命令依赖的库 ldd /bin/ls # 输出示例:# linux-vdso.so.1 (0x00007fff...)# libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f...)# /lib64/ld-linux-x86-64.so.2 (0x00007f...)

6. /etc —— 系统配置的中枢 📝

/etc 目录是 Linux 系统的配置文件集中地。这里存放着几乎所有系统和服务的配置文件,是系统管理和维护的关键区域。这些文件通常是纯文本格式,供系统管理员编辑和修改。

常见目录和文件:

  • passwd:用户账户信息。
  • group:用户组信息。
  • fstab:文件系统挂载表。
  • hosts:主机名和 IP 地址映射。
  • crontab:定时任务配置。
  • /etc/init.d/:系统服务启动脚本。
  • /etc/rc.d/:运行级别脚本。

示例: 查看 /etc 目录下的关键配置文件。

# 查看 /etc/passwd 文件 (用户信息)head -5 /etc/passwd # 输出示例:# root:x:0:0:root:/root:/bin/bash# daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin# bin:x:2:2:bin:/bin:/usr/sbin/nologin# sys:x:3:3:sys:/dev:/usr/sbin/nologin# sync:x:4:65534:sync:/bin:/bin/sync# 查看 /etc/group 文件 (用户组信息)head -5 /etc/group # 输出示例:# root:x:0:root# daemon:x:1:daemon# bin:x:2:bin# sys:x:3:sys# adm:x:4:daemon,adm

代码示例: 使用 grep 命令在配置文件中查找信息。

# 在 /etc/passwd 中查找用户名为 'root' 的条目grep"^root:" /etc/passwd # 输出示例:# root:x:0:0:root:/root:/bin/bash# 在 /etc/group 中查找组名为 'wheel' 的条目grep"^wheel:" /etc/group # 输出示例:# wheel:x:10:root

7. /home —— 用户的私人天地 🏠

/home 目录是用户主目录的存放位置。每个用户都有一个独立的子目录,通常以用户名命名,用于存放用户的个人文件、设置和配置。这是用户数据的主要存储区域。

特点:

  • 用户隔离:每个用户的文件相互独立。
  • 可扩展性:可以为不同用户分配不同大小的空间。
  • 权限控制:每个用户对其主目录拥有完全控制权。

示例: 查看 /home 目录下的用户目录。

# 查看 /home 目录下的用户ls -la /home # 输出示例:# total 20# drwxr-xr-x 5 root root 4096 Apr 15 2023 .# drwxr-xr-x 18 root root 4096 Apr 15 2023 ..# drwx------ 2 user user 4096 Apr 15 2023 user# drwx------ 2 test test 4096 Apr 15 2023 test# 查看用户 'user' 的主目录ls -la /home/user # 输出示例:# total 20# drwx------ 2 user user 4096 Apr 15 2023 .# drwxr-xr-x 5 root root 4096 Apr 15 2023 ..# -rw-r--r-- 1 user user 220 Apr 15 2023 .bash_logout# -rw-r--r-- 1 user user 3771 Apr 15 2023 .bashrc# -rw-r--r-- 1 user user 807 Apr 15 2023 .profile# drwx------ 2 user user 4096 Apr 15 2023 .ssh

代码示例: 使用 pwdls 查看当前用户主目录。

# 查看当前用户主目录echo$HOME# 输出示例: /home/user# 查看当前工作目录 (通常就是主目录)pwd# 输出示例: /home/user# 查看主目录内容ls -la ~ # 输出示例:# total 20# drwx------ 2 user user 4096 Apr 15 2023 .# drwxr-xr-x 5 root root 4096 Apr 15 2023 ..# -rw-r--r-- 1 user user 220 Apr 15 2023 .bash_logout# ...

8. /usr —— 用户程序的宝库 📚

/usr 目录是一个非常重要的目录,它包含了大量用户程序、库文件、文档和帮助文件。它是 Linux 系统中最大的目录之一,通常包含许多子目录来组织不同类型的内容。

常见子目录:

  • /usr/bin:用户可执行命令。
  • /usr/lib:用户程序使用的库文件。
  • /usr/share:共享的数据文件。
  • /usr/include:头文件(C/C++ 程序开发时使用)。
  • /usr/local:本地安装的软件。

示例: 查看 /usr 目录结构。

# 查看 /usr 目录内容ls /usr # 输出示例:# bin games include lib local sbin share src# 查看 /usr/bin 目录ls /usr/bin |head -10 # 输出示例:# bash cat chfn chsh cp date dd df du echo# 查看 /usr/share 目录ls /usr/share |head -10 # 输出示例:# aclocal applications doc games icons locale man mime misc pixmaps

代码示例: 查看 /usr/bin 目录下的命令。

# 查看 /usr/bin 目录下的 python 命令ls -l /usr/bin/python* # 输出示例:# lrwxrwxrwx 1 root root 9 Apr 15 2023 /usr/bin/python3 -> python3.9# -rwxr-xr-x 1 root root 147840 Apr 15 2023 /usr/bin/python3.9# 查看 /usr/share/doc 目录ls /usr/share/doc |head -5 # 输出示例:# bash coreutils dpkg gawk grep

9. /var —— 变化的数据中心 🔄

/var 目录用于存放经常变化的文件,如日志文件、数据库文件、邮件队列、缓存等。这些文件随着系统的运行而不断增长或改变,因此需要专门的目录来管理。

常见子目录:

  • /var/log:系统日志文件。
  • /var/tmp:临时文件(比 /tmp 更持久)。
  • /var/spool:排队等待处理的任务(如打印任务)。
  • /var/lib:系统运行时需要的持久化数据(如数据库文件)。
  • /var/cache:应用程序缓存数据。

示例: 查看 /var 目录下的日志文件。

# 查看 /var/log 目录ls /var/log |head -10 # 输出示例:# alternatives.log auth.log bootstrap.log daemon.log debug dpkg.log kern.log syslog user.log wtmp# 查看最近的日志文件ls -lt /var/log |head -5 # 输出示例:# -rw-r----- 1 root adm 12345 Apr 15 10:30 auth.log# -rw-r----- 1 root adm 12345 Apr 15 10:30 syslog# -rw-r----- 1 root adm 12345 Apr 15 10:30 kern.log# -rw-r----- 1 root adm 12345 Apr 15 10:30 dpkg.log# -rw-r----- 1 root adm 12345 Apr 15 10:30 bootstrap.log# 查看 /var/lib 目录ls /var/lib # 输出示例:# apt debconf dpkg initramfs-tools lxd mysql postgresql systemd udisks2

代码示例: 查看日志文件。

# 查看最近的登录日志tail -n 10 /var/log/auth.log # 输出示例:# Apr 15 10:30:01 hostname sshd[1234]: Accepted password for user from 192.168.1.100 port 54321 ssh2# Apr 15 10:30:01 hostname sshd[1234]: pam_unix(sshd:session): session opened for user user by (uid=0)# 查看系统日志tail -n 10 /var/log/syslog # 输出示例:# Apr 15 10:30:01 hostname kernel: [12345.678901] systemd[1]: Started Session 123 of user user.# Apr 15 10:30:01 hostname systemd[1]: Starting User Manager for UID 1000...

10. /dev —— 设备的入口 🖥️

/dev 目录包含了系统中所有设备文件的入口点。这些是特殊的文件,代表了系统中的物理设备(如硬盘、键盘、鼠标)和虚拟设备(如终端、伪终端)。通过这些设备文件,用户和程序可以与硬件进行交互。

常见设备文件:

  • /dev/null:空设备,丢弃写入的所有数据。
  • /dev/zero:产生无限的零字节流。
  • /dev/tty:当前终端。
  • /dev/sda:第一个 IDE 硬盘。
  • /dev/loop0:循环设备(用于挂载 ISO 文件等)。

示例: 查看 /dev 目录下的设备文件。

# 查看 /dev 目录内容 (简化输出)ls /dev |head -10 # 输出示例:# autofs fd full null ptmx pts random sda stderr stdin stdout tty urandom zero# 查看 /dev 目录下的终端设备ls -l /dev/tty* # 输出示例:# crw-rw---- 1 root tty 5, 0 Apr 15 2023 /dev/tty# crw-rw---- 1 root tty 5, 2 Apr 15 2023 /dev/tty2# crw-rw---- 1 root tty 5, 1 Apr 15 2023 /dev/tty1# crw-rw---- 1 root tty 5, 3 Apr 15 2023 /dev/tty3# 查看 /dev 目录下的硬盘设备ls -l /dev/sd* # 输出示例:# brw-rw---- 1 root disk 8, 0 Apr 15 2023 /dev/sda# brw-rw---- 1 root disk 8, 1 Apr 15 2023 /dev/sda1# brw-rw---- 1 root disk 8, 2 Apr 15 2023 /dev/sda2

代码示例: 使用 catdd 命令与设备文件交互。

# 读取 /dev/zero 设备 (产生零)ddif=/dev/zero bs=1024count=1| hexdump -C |head -1 # 输出示例:# 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|# 00000010# 向 /dev/null 写入数据 (丢弃)echo"This is a test"> /dev/null # 无输出,数据被丢弃

11. /proc —— 进程的虚拟文件系统 🧠

/proc 是一个虚拟文件系统,它不是存储在磁盘上的物理文件,而是由内核动态生成的。它提供了关于系统进程、内存、硬件等信息的实时视图。通过读取 /proc 目录下的文件,可以获取系统内部的详细信息。

常见子目录和文件:

  • /proc/cpuinfo:CPU 信息。
  • /proc/meminfo:内存信息。
  • /proc/partitions:磁盘分区信息。
  • /proc/pid:特定进程的信息(如 /proc/1 表示 init 进程)。
  • /proc/self:指向当前进程的符号链接。

示例: 查看 /proc 目录下的信息。

# 查看 /proc 目录内容 (简化输出)ls /proc |head -10 # 输出示例:# 1 10 11 12 13 14 15 16 17 18# 查看 CPU 信息cat /proc/cpuinfo |grep"model name"# 输出示例:# model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz# 查看内存信息cat /proc/meminfo |grep MemTotal # 输出示例:# MemTotal: 8123456 kB# 查看当前进程的详细信息 (假设当前进程 ID 为 1234)ls -l /proc/1234 # 输出示例:# dr-xr-xr-x 5 user user 0 Apr 15 10:30 /proc/1234# -r-------- 1 user user 0 Apr 15 10:30 /proc/1234/cmdline# -r--r--r-- 1 user user 0 Apr 15 10:30 /proc/1234/environ# -r--r--r-- 1 user user 0 Apr 15 10:30 /proc/1234/stat# -r--r--r-- 1 user user 0 Apr 15 10:30 /proc/1234/status

代码示例: 获取当前进程信息。

# 获取当前进程的 PIDecho$$# 查看当前进程的命令行参数cat /proc/$$/cmdline |tr'\0'' '# 输出示例:# bash# 查看当前进程的状态cat /proc/$$/status |grep"VmRSS"# 输出示例:# VmRSS: 12345 kB

12. /sys —— 系统信息的虚拟文件系统 🧩

/sys 目录也是一个虚拟文件系统,它提供了关于系统硬件、内核模块和设备驱动的详细信息。它与 /proc 类似,但更侧重于设备和硬件的结构化信息。

常见内容:

  • /sys/class:设备类信息。
  • /sys/devices:设备信息。
  • /sys/block:块设备信息。
  • /sys/bus:总线信息。

示例: 查看 /sys 目录下的硬件信息。

# 查看 /sys 目录内容 (简化输出)ls /sys |head -10 # 输出示例:# block bus class devices firmware fs kernel module power# 查看系统中的块设备 (硬盘等)ls /sys/block/ # 输出示例:# loop0 sda sr0# 查看硬盘 sda 的信息ls /sys/block/sda/ # 输出示例:# device queue size stat subsystem# 查看硬盘 sda 的型号cat /sys/block/sda/device/model # 输出示例:# Samsung SSD 860 EVO 500GB

代码示例: 获取系统信息。

# 查看系统中的 USB 设备ls /sys/bus/usb/devices/ # 输出示例:# 1-0:1.0 1-1:1.0 1-1.1:1.0# 查看 CPU 核心数量cat /sys/devices/system/cpu/present # 输出示例:# 0-3# 查看内存大小cat /sys/devices/system/memory/*/size # 输出示例:# 1048576# 1048576# 1048576# 1048576

13. /tmp —— 临时文件的暂存地 🗑️

/tmp 目录用于存放临时文件。这些文件通常在系统重启后会被清除,也可以手动清理。它是用户和应用程序临时存储文件的地方,但不适合存放重要数据。

特点:

  • 临时性:文件可能会被自动删除。
  • 公共访问:通常所有用户都可以访问。
  • 安全考虑:应避免在此目录存放敏感信息。

示例: 查看 /tmp 目录。

# 查看 /tmp 目录内容ls -la /tmp # 输出示例:# total 12# drwxrwxrwt 2 root root 4096 Apr 15 10:30 .# drwxr-xr-x 18 root root 4096 Apr 15 10:30 ..# -rw-r--r-- 1 root root 123 Apr 15 10:30 temp_file.txt# drwx------ 1 user user 4096 Apr 15 10:30 user_temp_dir# 查看 /tmp 目录的权限ls -ld /tmp # 输出示例:# drwxrwxrwt 2 root root 4096 Apr 15 10:30 /tmp

代码示例: 创建和清理临时文件。

# 在 /tmp 目录下创建一个临时文件touch /tmp/my_temp_file.txt # 查看临时文件ls -l /tmp/my_temp_file.txt # 输出示例:# -rw-r--r-- 1 user user 0 Apr 15 10:30 /tmp/my_temp_file.txt# 删除临时文件rm /tmp/my_temp_file.txt # 查看 /tmp 目录是否为空ls /tmp 

14. /opt —— 可选软件包的安装地 📦

/opt 目录用于安装第三方或可选的软件包。它为非系统自带的软件提供了一个标准化的安装位置,避免了与系统软件混合在一起。

特点:

  • 独立性:与系统其他部分分离。
  • 可扩展性:方便添加和移除软件包。
  • 命名规范:通常以软件包名称命名子目录。

示例: 查看 /opt 目录。

# 查看 /opt 目录内容ls /opt # 输出示例:# java mysql nodejs python3# 查看某个软件包的安装路径ls -la /opt/java/ # 输出示例:# total 20# drwxr-xr-x 3 root root 4096 Apr 15 2023 .# drwxr-xr-x 5 root root 4096 Apr 15 2023 ..# lrwxrwxrwx 1 root root 10 Apr 15 2023 bin -> /opt/java/bin# lrwxrwxrwx 1 root root 10 Apr 15 2023 lib -> /opt/java/lib

代码示例: 创建一个简单的 /opt 目录结构。

# 创建一个示例软件包目录sudomkdir -p /opt/myapp/{bin,lib,etc}# 查看创建的目录ls -la /opt/myapp/ # 输出示例:# total 20# drwxr-xr-x 4 root root 4096 Apr 15 10:30 .# drwxr-xr-x 5 root root 4096 Apr 15 10:30 ..# drwxr-xr-x 2 root root 4096 Apr 15 10:30 bin# drwxr-xr-x 2 root root 4096 Apr 15 10:30 etc# drwxr-xr-x 2 root root 4096 Apr 15 10:30 lib

15. /boot —— 系统启动的起点 🚀

/boot 目录包含了系统启动所需的文件,如内核镜像(vmlinuz)、初始 RAM 磁盘(initrd)和引导加载程序(如 GRUB)的配置文件。

常见文件:

  • vmlinuz-*:内核镜像。
  • initrd.img-*:初始 RAM 磁盘。
  • grub/:GRUB 引导加载程序配置文件。

示例: 查看 /boot 目录内容。

# 查看 /boot 目录内容ls /boot # 输出示例:# abi-5.4.0-42-generic config-5.4.0-42-generic efi grub initrd.img-5.4.0-42-generic System.map-5.4.0-42-generic vmlinuz-5.4.0-42-generic# 查看内核镜像和初始化 RAM 磁盘ls -l /boot/vmlinuz* /boot/initrd.img* # 输出示例:# -rw-r--r-- 1 root root 12345678 Apr 15 2023 /boot/vmlinuz-5.4.0-42-generic# -rw-r--r-- 1 root root 1234567 Apr 15 2023 /boot/initrd.img-5.4.0-42-generic

代码示例: 查看当前使用的内核版本。

# 查看当前内核版本uname -r # 输出示例:# 5.4.0-42-generic# 查看 /boot 目录下与当前内核相关的文件ls -l /boot/vmlinuz-$(uname -r) /boot/initrd.img-$(uname -r)# 输出示例:# -rw-r--r-- 1 root root 12345678 Apr 15 2023 /boot/vmlinuz-5.4.0-42-generic# -rw-r--r-- 1 root root 1234567 Apr 15 2023 /boot/initrd.img-5.4.0-42-generic

16. /mnt 和 /media —— 挂载点的临时家 📁

/mnt/media 目录通常用作临时挂载点。它们用于挂载外部设备(如 USB 驱动器、CD/DVD、网络文件系统等)。

区别:

  • /mnt:传统上用于手动挂载文件系统。
  • /media:通常由桌面环境自动挂载移动设备(如 USB 驱动器、CD/DVD)。

示例: 查看 /mnt/media 目录。

# 查看 /mnt 目录 (可能为空)ls /mnt # 输出示例:# (空)# 查看 /media 目录 (可能包含挂载的设备)ls /media # 输出示例:# user usbdrive cdrom# 挂载一个示例设备 (假设存在一个挂载点)sudomount /dev/sdb1 /mnt/test_mount ls /mnt # 输出示例:# test_mount

代码示例: 挂载和卸载文件系统。

# 创建一个挂载点sudomkdir -p /mnt/example # 查看当前挂载情况mount|grep example # 输出示例:# (无输出)# 假设有一个虚拟磁盘设备 /dev/loop0# sudo losetup /dev/loop0 /path/to/image.iso# sudo mount /dev/loop0 /mnt/example# 查看挂载情况mount|grep example # 输出示例:# /dev/loop0 on /mnt/example type iso9660 (ro,noatime)# 卸载设备# sudo umount /mnt/example

17. /run —— 运行时状态信息 🔄

/run 目录用于存放系统运行时产生的临时文件,如进程 ID 文件(PID 文件)、套接字文件等。它通常在系统启动时自动创建,并在系统关闭时被清除。

特点:

  • 运行时:仅在系统运行期间存在。
  • 临时性:每次系统重启都会清空。
  • 安全性:通常只有 root 用户可以访问。

示例: 查看 /run 目录。

# 查看 /run 目录内容 (简化输出)ls /run # 输出示例:# avahi-daemon systemd udev user user-runtime-dir# 查看 systemd 进程 ID 文件ls -l /run/systemd/ # 输出示例:# -rw-r--r-- 1 root root 10 Apr 15 10:30 system.pid# -rw-r--r-- 1 root root 10 Apr 15 10:30 user.pid

代码示例: 查看系统运行时信息。

# 查看系统运行时间cat /proc/uptime # 输出示例:# 123456.78 987654.32# 查看系统启动时间who -b # 输出示例:# system boot 2023-04-15 08:00# 查看运行中的进程 (使用 /run 目录)ls -l /run/systemd/ # 输出示例:# -rw-r--r-- 1 root root 10 Apr 15 10:30 system.pid

18. /srv —— 服务数据的存放地 📂

/srv 目录用于存放特定服务提供的数据。这是一个可选目录,用于存放服务相关的数据,如 Web 服务器内容、FTP 服务器文件等。

示例: 查看 /srv 目录。

# 查看 /srv 目录内容ls /srv # 输出示例:# ftp www# 查看 Web 服务目录ls -la /srv/www/ # 输出示例:# total 20# drwxr-xr-x 2 root root 4096 Apr 15 2023 .# drwxr-xr-x 5 root root 4096 Apr 15 2023 ..# -rw-r--r-- 1 root root 123 Apr 15 2023 index.html

代码示例: 创建一个简单的服务目录结构。

# 创建一个 Web 服务目录sudomkdir -p /srv/www/{css,js,images}# 创建一个示例 HTML 文件sudotee /srv/www/index.html <<EOF <!DOCTYPE html> <html> <head> <title>My Service</title> </head> <body> <h1>Welcome to My Service</h1> </body> </html> EOF# 查看创建的目录和文件ls -la /srv/www/ # 输出示例:# total 20# drwxr-xr-x 4 root root 4096 Apr 15 10:30 .# drwxr-xr-x 5 root root 4096 Apr 15 10:30 ..# drwxr-xr-x 2 root root 4096 Apr 15 10:30 css# drwxr-xr-x 2 root root 4096 Apr 15 10:30 images# drwxr-xr-x 2 root root 4096 Apr 15 10:30 js# -rw-r--r-- 1 root root 123 Apr 15 10:30 index.html

19. 总结与最佳实践 📝

Linux 系统的目录结构经过精心设计,遵循了 Filesystem Hierarchy Standard (FHS),确保了不同发行版之间的兼容性和一致性。理解并合理利用这些目录,对于 Linux 系统的日常管理和维护至关重要。

关键要点回顾:

  1. 根目录 (/) 是起点:所有目录都从这里开始。
  2. /bin/sbin 存放命令:分别是用户命令和系统管理命令。
  3. /lib/lib64 存放库文件:程序运行时依赖的共享库。
  4. /etc 是配置中心:存放所有系统和服务的配置文件。
  5. /home 是用户空间:每个用户拥有自己的主目录。
  6. /usr 是用户程序宝库:包含大部分用户程序和数据。
  7. /var 是变化的数据中心:存放日志、缓存等经常变动的文件。
  8. /dev 是设备入口:通过特殊文件访问硬件设备。
  9. /proc/sys 是虚拟文件系统:提供系统内部信息。
  10. /tmp 是临时文件区:存放临时数据。
  11. /opt 是可选软件安装区:第三方软件的独立安装位置。
  12. /boot 是启动文件区:包含内核和引导程序。
  13. /mnt/media 是挂载点:临时挂载外部设备。
  14. /run 是运行时信息区:存放运行时状态文件。
  15. /srv 是服务数据区:存放特定服务的数据。

最佳实践建议:

  1. 遵守 FHS 标准:遵循标准目录结构有助于系统的一致性和维护。
  2. 合理分配存储空间:为 /home/var 等目录预留足够的空间。
  3. 定期清理 /tmp:避免临时文件占用过多空间。
  4. 备份 /etc 目录:配置文件是系统稳定运行的关键,定期备份很重要。
  5. 谨慎修改系统目录:如 /bin/sbin/lib 等,修改可能导致系统无法启动。
  6. 使用符号链接:当需要将数据迁移到其他目录时,可以使用符号链接保持路径不变。
  7. 监控 /var 目录:定期检查日志文件大小,防止磁盘空间被占满。

希望这篇详细的目录结构详解能帮助您更好地理解和管理 Linux 系统。随着实践经验的积累,您将更加熟练地运用这些知识,成为一名出色的 Linux 系统管理员或开发者。🎉


注:本文旨在提供 Linux 文件系统目录结构的全面介绍,具体目录内容可能因不同的 Linux 发行版和系统配置而略有差异。

参考链接:


Mermaid 图表:Linux 目录结构功能分类图

运行时与特殊目录

用户与数据目录

系统核心目录

根目录 /

系统命令 /bin

系统管理 /sbin

系统库 /lib & /lib64

配置文件 /etc

用户主目录 /home

用户程序 /usr

变化数据 /var

设备文件 /dev

运行时 /run

虚拟文件系统 /proc & /sys

临时文件 /tmp

可选软件 /opt

启动文件 /boot

挂载点 /mnt & /media

服务数据 /srv


🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨

Read more

Flutter 三方库 shorebird_redis_client 鸿蒙适配交互分布式字典引擎栈:以 RESP 总线桥接高负载实时网关建立穿透防御状态共享网络-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 shorebird_redis_client 鸿蒙适配交互分布式字典引擎栈:以 RESP 总线桥接高负载实时网关建立穿透防御状态共享网络-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 shorebird_redis_client 接驳鸿蒙超速交互分布式字典引擎栈适配:以 RESP 通信总线桥接高负载实时网关建立千万级穿透防御状态共享网络 前言 在 OpenHarmony 全场景应用开发中,面对大规模的高并发数据处理(如分布式排行榜、实时消息队列、或者是跨终端同步的缓存状态),传统的各种本地 SQL 数据库往往在灵活性和读写延迟上难以满足“毫秒级”响应的需求。shorebird_redis_client 为 Flutter 开发者提供了一套高性能、专注于极致速度的 Redis 客户端访问方案。本文将带大家在鸿蒙端实战适配这一“内存级”数据底座。 一、原直线性 / 概念介绍 1.1 基础原理/概念介绍 shorebird_redis_client 的核心逻辑是基于

By Ne0inhk
Flutter 组件 tree_iterator 适配鸿蒙 HarmonyOS 实战:高性能树状数据遍历,构建海量节点递归优化与分布式层级调度架构

Flutter 组件 tree_iterator 适配鸿蒙 HarmonyOS 实战:高性能树状数据遍历,构建海量节点递归优化与分布式层级调度架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 tree_iterator 适配鸿蒙 HarmonyOS 实战:高性能树状数据遍历,构建海量节点递归优化与分布式层级调度架构 前言 在鸿蒙(OpenHarmony)生态迈向万物智联、涉及海量传感器拓扑映射、复杂 UI 树状 DOM 解析及超大型目录层级处理的背景下,如何实现高效、内存友好的“非线性数据遍历”,已成为决定应用数据发现效率与算法性能表现的基石。在鸿蒙设备这类强调 AOT 极致性能与低堆内存占用的环境下,如果应用依然采用简单的递归(Recursion)进行深度数据挖掘,由于由于树状结构深度的不可控性,极易由于由于“栈溢出(Stack Overflow)”或“重复解析”导致系统的瞬时崩卡。 我们需要一种能够解耦数据结构与遍历逻辑、支持深度/广度优先算法且具备“零样板代码”调用的迭代器方案。 tree_iterator 为

By Ne0inhk
从小项目到大型鸿蒙 App 的架构变化

从小项目到大型鸿蒙 App 的架构变化

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名) 大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。 我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案, 在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。 技术方向:前端 / 跨端 / 小程序 / 移动端工程化 内容平台:掘金、知乎、ZEEKLOG、简书 创作特点:实战导向、源码拆解、少空谈多落地 文章状态:长期稳定更新,大量原创输出 我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、

By Ne0inhk