使用 Linux,不仅限于学习各种命令,了解整个 Linux 文件系统的目录结构以及各个目录的功能同样至关重要。使用 Linux 时,通过命令行输入 ls -l / 可以看到,在 Linux 根目录(/)下包含很多的子目录(称为一级目录),例如 bin、boot、dev 等。同时,各一级目录下还含有很多子目录(称为二级目录),比如 /bin/bash、/bin/ed 等。Linux 文件系统目录总体呈现树形结构,/ 根目录就相当于树根。由于 Linux 系统免费开源,使得 Linux 发行版本有很多,利用 Linux 开发产品的团队也有很多,如果任由每个人都按照自己的想法来配置 Linux 系统文件目录,后期可能会产生诸多的管理问题。试想,如果你进入一家公司,所用 Linux 系统的文件目录结构与所学的完全不同,实在令人头疼。
为了避免诸多使用者对 Linux 系统目录结构天马行空,Linux 基金会发布了 FHS 标准。多数 Linux 发行版系统都遵循这一标准。

Linux的目录结构

Linux灵魂我们已经知道,平时打交道的都是文件,那么,应该如何找到它们呢,很简单,在 Linux 操作系统中,所有的文件和目录都被组织成以一个根节点“/”开始的倒置的树状结构,如图所示:

其中,目录就相当于 Windows 中的文件夹,目录中存放的既可以是文件,也可以是其他的子目录,而文件中存储的是真正的信息。文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件。如此反复就可以构成一个庞大的文件系统。

现实中也有许多类似的例子,例如在整个行政管理体制中,村民就相当于文件,他们住在一个村庄中,村庄就是存储村民的目录。许多村又组成了个乡,这个乡就相当于存储村的目录,依此类推,最终就构建出了一个庞大的行政区域管理结构图。注意,目录名或文件名都是区分大小写的,如 dog、DOG 和 Dog 为 3 个不同的目录或文件。完整的目录或文件路径是由一连串的目录名所组成的,其中每一个目录由“/”来分隔。如 cat 的完整路径是 /home/cat。

在文件系统中,有两个特殊的目录,一个是用户所在的工作目录,即当前目录,可用一个点“.”表示;另一个是当前目录的上一层目录,也叫父目录,用两个点“..”表示。

Linux对应目录的作用(常规)

根目录

FHS 认为,Linux 系统的根目录(/)最为重要(没有之一),其原因有以下 2 点:

    1. 所有目录都是由根目录衍生出来的;
    2. 根目录与系统的开机、修复、还原密切相关;

因此,根目录必须包含开机软件、核心文件、开机所需程序、函数库、修复系统程序等文件,如下表。

 Linux一级目录及其作用
一级目录 功能(作用)

/bin/
存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行

/boot/
系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等

/dev/
设备文件保存位置

/etc/
配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等

/home/
普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming

/lib/
系统调用的函数库保存位置

/media/
挂载目录。系统建议用来挂载媒体设备,如软盘和光盘

/mnt/
挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区

/misc/
挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的

/opt/
第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件

/root/
root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下

/sbin/
保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看

/srv/
服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据

/tmp/
临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空
(续)其他一级目录及功能
一级目录 功能(作用)

/lost+found/
当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录

/proc/
虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的......

/sys/
虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

Linux /usr 目录

usr(注意不是 user),全称为 Unix Software Resource,此目录用于存储系统软件资源。FHS 建议所有开发者,应把软件产品的数据合理的放置在 /usr 目录下的各子目录中,而不是为他们的产品创建单独的目录。Linux 系统中,所有系统默认的软件都存储在 /usr 目录下,/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。
FHS 建议,/usr 目录应具备表以下所示的子目录。

/usr 子目录及其功能
子目录 功能(作用)
/usr/bin/ 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/  存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
/usr/lib/ 应用程序调用的函数库保存位置
/usr/XllR6/ 图形界面系统保存位置
/usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
/usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/ 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中
/usr/include C/C++ 等编程语言头文件的放置目录

Linux /var 目录

/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。通常,此目录下建议包含如下表所示的这些子目录。

/var子目录及其功能
/var子目录 功能(作用)
/var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中
/var/log/ 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。
/var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置
/var/spool/ 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。
/var/www/ RPM 包安装的 Apache 的网页主目录
/var/nis和/var/yp NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
/var/tmp 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除

根据以上各表列举的各目录及作用,如果我们要做一些实验和练习,需要创建一些临时文件,应该保存在哪里呢?

答案是用户的主目录或 /tmp/ 临时目录。但是要小心有些目录中不能直接修改和保存数据,比如 /proc/fn/sys/ 目录,因为它们是保存在内存中的,如果在这里写入数据,那么你的内存会越来越小,直至死机;/boot/ 目录也不能保存额外数据,因为 /boot/ 目录会单独分区作为启动分区,如果没有空闲空间,则会导致系统不能正常启动。

Linux(三):Linux的目录及相关作用的更多相关文章

  1. linux文档与目录的相关命令

    Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来 ...

  2. Linux下文件和目录的相关操作

    文件和目录的操作命令,按以下思路进行整理,感觉更便于记忆和使用 1.创建一个二进制文件 touch f1 2.向文件中写入数据 echo "hello" >> f1 e ...

  3. Jdk和Jre目录和三个lib目录说明----外部扩展jar包servlet,mysql,oracle等

    以下文章转载自a personal blog:For Future,因为昨天下午在cmd模式下编译servlet失败,后来在网上找到这篇文章帮我解决了该问题,我觉得挺值得收藏的,并且这篇文章对&quo ...

  4. 转:java两个jre目录和三个lib目录

    lib目录下放置着jar包.程序中的import语句找的就是这些文件!例如:import javax.servlet.RequestDispatcher;    问题在于,在cmd模式下编译,系统会提 ...

  5. java-两个jre目录和三个lib目录-转

    lib目录下放置着jar包.程序中的import语句找的就是这些文件!例如:import javax.servlet.RequestDispatcher; 问题在于,在cmd模式下编译,系统会提示:C ...

  6. CentOS(十)--与Linux文件和目录管理相关的一些重要命令②

    在结束了第二期的广交会实习之后,又迎来了几天休闲的日子,继续学习Linux.在上一篇随笔 Linux学习之CentOS(十七)--与Linux文件和目录管理相关的一些重要命令① 中,详细记录了与Lin ...

  7. CentOS(九)--与Linux文件和目录管理相关的一些重要命令①

       接上一篇文章,实际生产过程中的目录管理一定要注意用户是root 还是其他用户. 一.目录与路径 1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 & ...

  8. Linux之文档与目录结构 目录的相关操作 Linux的文件系统

    Linux之文档与目录结构   Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到 ...

  9. Linux目录与相关配置文件讲解

    linux目录介绍及配置文件详细介绍 重要目录简介 目录名 作用 boot 与电脑启动相关,推荐单独分区. etc 存放配置文件 mnt 一般用来设置挂载点 src.sys.proc 与系统内核相关, ...

  10. Linux(centos)系统各个目录的作用详解

    Linux(centos)系统各个目录的作用详解 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码 ...

随机推荐

  1. 鸿蒙HarmonyOS实战-ArkUI组件(Button)

    一.Button Button(按钮)是一种常见的用户界面控件,通常用于触发操作或提交数据.Button 拥有文本标签和一个可点击的区域,用户点击该区域即可触发相应的操作或事件. Button 的主要 ...

  2. 13 JavaScript关于prototype(超重点)

    13 JavaScript关于prototype(超重点) prototype是js里面给类增加功能扩展的一种模式. 写个面向对象来看看. function People(name, age){ th ...

  3. #范德蒙德卷积,第二类斯特林数,NTT#洛谷 2791 幼儿园篮球题

    题目 \(T(T\leq 200)\)组数据求 \[\frac{1}{C(n,k)}\sum_{i=0}^kC(m,i)C(n-m,k-i)i^L \] 对于所有数据满足 \(n,m,k\leq 2* ...

  4. 【FAQ】视频编辑服务常见问题及解答

    Q1问题描述 1. 访问贴纸等素材的时候提示"网络异常,请重试"怎么办? 2. 使用AI能力时,提示"errorCode:20124 errorMsg:Method no ...

  5. 日调用量超600亿次,HMS Core HiAI Foundation助力AI应用高效开发

    随着新技术的不断演进,人工智能已经广泛地应用到教育.金融.物流.零售.交通.医疗等各个领域.而在AI高速发展的当下,高效开发变得更为重要,如何将创意想法与AI技术深度融合,迅速转化为可落地的AI应用, ...

  6. django ORM 按月分组统计

    一.搭建环境,准备数据 1.1:新建项目 django-admin startproject Test 1.2:新建app python manage.py startapp app 1.3:设置 s ...

  7. 使用Helm部署Wikijs

    使用 Helm 部署 Wiki.js ️ 参考文档: Wiki.js 官方文档 - 安装 - Kubernetes Wiki.js 使用 Helm 安装 Wiki.js 官方文档 - 安装 - 侧加载 ...

  8. vue3探索——使用ref与$parent实现父子组件间通信

    在vue3中,可以使用vue3的API defineExpose()函数结合ref或者$parent,实现父子组件数据的传递. 子组件向父组件传递数据defineExpose()和ref 子组件:通过 ...

  9. 优先队列的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 特性 效率比普通队列高 每个出队元素拥有最高优先级 可以用 数组.链表 等数据结构实现,但是 堆结构 是最常用的实现方式 ...

  10. 新手的登录qsnctfwp

    打开登录界面 按要求以普通用户 user 的身份,通过密码 password 登录 使用 BurpSuite 拦截登录情况 在获取(GET)登录结果页面时,修改 Cookie 中的 username ...