当前位置: 首页 > news >正文

【Linux】Linux系统编程——Linux目录结构

在这里插入图片描述

Linux的文件系统呈现为一种树状结构,以根目录/为最顶层,其下分布着各种不同的子目录,每个目录都有其特定的用途和功能。下面是Linux目录结构的详细介绍:

1. 根目录 /

  • 根目录是整个文件系统的基础。所有的目录和文件都从这里开始分支。
  • 它是所有其他目录的父目录。

2. /bin

  • 包含基本的用户二进制文件(即程序),如lscp等。
  • 这些命令是用户和系统的基本操作工具。

想象一下,Linux操作系统就像一个大型的、有条不紊的工厂,而/bin目录,它就是这个工厂里的“工具箱”。

/bin目录里,你会找到许多基本的程序,这些程序是Linux系统的核心部分。这些程序就像是各种各样的扳手和螺丝刀,对于维护整个系统来说非常重要。比如,有一个叫做ls的程序,它就像是一个手电筒,帮助你在漆黑的文件夹中照亮并找到你需要的东西。还有cp命令,它就像复印机,可以复制文件和文件夹。

但记住,虽然这些工具非常强大,但也需要谨慎使用。就像你不会用锤子去敲打一个易碎的玻璃杯一样,你也不应该随意使用这些命令,尤其是在不完全了解它们的功能时。比如,rm命令就像是一把锋利的斧头,能够彻底删除文件,一旦使用,就没有回头路了。

作为初学者,你可能不需要立刻掌握/bin目录中的所有工具,但了解它们的基本用途是很有帮助的。随着时间的推移,你会越来越熟练地使用这些工具,就像一个工匠逐渐熟悉他的工具箱一样。而且,不要害怕犯错,这是学习过程的一部分。只要你不是在关键系统文件上使用rm,通常你的错误都是可以修复的。

3. /boot

  • 包含启动Linux系统时所需的文件,例如Linux内核(通常是vmlinuz)、启动加载器(如GRUB)。
  • 这是系统启动和运行的关键部分。

现在,Linux系统变成了一辆超级酷炫的太空船。那么,/boot目录,它就像是这艘太空船的发射控制室。这个目录包含了启动你的Linux系统所需要的所有东西,就像控制室里的按钮和开关一样。

首先,有一个非常重要的文件叫做vmlinuz。这个文件就像是太空船的主引擎,实际上它是Linux内核的压缩版本。没有它,你的系统就无法启动,就像没有引擎的太空船无法飞向太空一样。

接下来,还有一个叫做initrd(初始RAM磁盘)的文件。你可以把它想象成太空船的辅助引擎,它在主引擎启动之前提供必要的支持,比如加载必要的驱动程序和其他文件,确保主引擎(内核)能够顺利启动。

还有一个重要的组件是grub,这个可以看作是太空船的导航系统。它是一个引导加载器,负责在系统启动时显示一个菜单,让你选择要启动的操作系统(如果你有多个的话),或者选择特定的启动选项。

最后,/boot目录还包含一些配置文件和其他文件,这些就像是太空船的日志和技术手册,记录了系统启动过程中需要的各种设置和指令。

4. /dev

  • 这个目录包含设备文件。Linux视所有设备(如硬盘、声卡)为文件,这些特殊文件位于此目录。
  • 这使得用户和程序可以通过访问这些文件来与硬件交互。

现在你的 Linux 系统变为了一个高科技的机器人工厂。在这个工厂里,/dev 目录就好比是机器人的“接口中心”。这个目录里面有各种各样的特殊文件,它们代表了计算机的设备和资源。这就像是工厂里的机器人们,每一个都有自己独特的功能和用途。

这些特殊的文件可以分为两类:字符设备文件和块设备文件。字符设备文件就像是那些需要逐个字符处理数据的机器人,比如键盘和鼠标。而块设备文件,则像是那些一次处理大量数据的机器人,比如硬盘驱动器。

/dev 目录里,你会发现很多看起来很神秘的名字,比如 sdasdb 这些代表硬盘驱动器,tty 是代表终端设备的。这就像每个机器人都有自己的名字和编号一样。当你对 Linux 系统进行操作,比如插入一个U盘或访问硬盘,实际上就是在和 /dev 目录下的某个特殊文件进行互动。

虽然这些文件非常有用,它们也是非常“敏感”的。随意改动 /dev 目录下的文件,就像是随意调整机器人的内部结构,可能会导致不可预料的后果。所以,除非你非常清楚自己在做什么,否则最好不要去碰这个目录里的文件。

5. /etc

  • 包含所有系统级别的配置文件。
  • 例如,网络配置、用户权限、启动脚本等都存放在这里。

想象一下,你的 Linux 系统就像是一座高科技的城市。这个城市中的 /etc 目录,可以看作是城市的行政中心或者图书馆。这里存放着所有的配置文件和脚本,就像是城市的法律、规章和操作手册一样。每当系统或应用程序需要知道如何运行时,它们就会来到这个“图书馆”查阅相关的“书籍”。

/etc 目录下,你会找到许多配置文件。比如,passwd 文件就记录着系统中所有用户的信息,fstab 文件则告诉系统如何挂载(或连接)各种存储设备。还有像 ssh 目录,它包含了安全外壳(SSH)服务的配置文件,这就像是控制城市的安全系统和监控摄像头的指南。

另外,/etc 也是系统管理员的乐园。因为在这里,他们可以定制和调整系统的各种设置。就好比城市规划者可以决定城市的布局和运作方式一样。但同时,这也需要谨慎,因为一次不当的更改可能会影响整个系统的运行,就像错误的城市规划可能导致交通堵塞或供水中断。

6. /home

  • 用户的个人文件夹通常放在这里。每个用户都有一个以其用户名命名的目录。
  • 这是用户存储个人文件和设置的地方。

假设,你的 Linux 系统是一个大型的公寓大楼,而 /home 目录就像是这个大楼里的个人公寓。每个使用这个系统的人都有自己的小空间,在这里,他们可以存放个人文件、定制个人设置,甚至装饰成自己喜欢的风格。

/home 目录下,你会发现有多个文件夹,每个文件夹的名字通常都是一个用户的用户名。比如,如果有一个用户叫做 “alice”,那么就会有一个 /home/alice 的目录。这就是 Alice 的个人空间,在这里,她可以存放她的文档、音乐、图片等等,还可以根据自己的喜好设置桌面环境。

这个目录对于用户来说非常重要,因为它确保了个人数据的隐私和安全。就像在一个大公寓楼里,虽然大家共享某些公共设施,但每个人的公寓都是私人的、安全的。在 Linux 系统中,管理员可以访问所有目录,但普通用户通常只能访问自己的 /home 目录。

7. /lib

  • 包含系统和应用程序所需的库文件。
  • 这些文件提供了程序运行时需要的基本和附加支持。

打个比方,你的 Linux 系统就像是一座现代化的城市。在这座城市里,/lib 目录就好比是一个重要的仓库或者供应站。这个目录里存放的是各种各样的库文件,它们对于整个系统来说就像是基础的建筑材料和工具。

库文件(libraries)是包含特定功能的代码集合,可以被操作系统中的不同程序共享和使用。这就像是城市中的水泥、砖块或电路,它们被用来构建和维护不同的建筑和设施。

/lib 目录中,你会遇到像 libc.so 这样的文件,它是最基础的 C 语言库,提供了很多标准的程序功能。还有像 ld-linux.so 这样的动态链接器,它负责把这些库文件“粘合”到程序上,让它们能够运行。

这些库文件对于系统的正常运行至关重要。就像没有水泥和砖块,建筑师无法建造楼房一样,没有这些基础库文件,许多程序就无法运行。但作为一个普通用户或初学者,你通常不需要直接与这些文件打交道。它们就像城市基础设施的一部分,默默地在背后支撑着整个系统的运作。

8. /media

  • 用于挂载可移动媒体设备,如CD-ROM、USB驱动器。
  • 当你插入一个USB驱动器时,它通常会在这个目录下出现。

想象一下,你的 Linux 系统就像是一个巨大的娱乐中心。在这个中心里,/media 目录就好比是一个专门的区域,用于放置各种外部存储设备,就像是DVD播放器、游戏机或者移动硬盘等。

/media 目录下,每当你连接一个外部存储设备到你的电脑上时,比如一个USB驱动器或外部硬盘,系统就会在这个目录下自动创建一个新的文件夹。这个文件夹就好比是为这个新接入的设备专门预留的一个小空间。你可以把它想象成娱乐中心里的一个小储物柜,专门用来存放和访问外部设备上的内容。

这个特性使得访问外部存储设备变得非常方便。就像在娱乐中心里,你可以轻松地找到你的DVD或游戏盘一样,你可以在 /media 目录下轻松地找到挂载的外部存储设备,并访问其中的文件。

但要记住,当你完成使用这些设备后,最好是“安全移除”它们,以防数据丢失或损坏。这就像在离开娱乐中心之前,你需要确保你的个人物品已经从储物柜中取出,并且储物柜被正确地关闭一样。

9. /mnt

  • 通常用于临时挂载文件系统。
  • 比如,临时挂载一个网络共享或外部硬盘通常使用此目录。

让我们把 Linux 系统看作是一个巨大的探险乐园。在这个乐园里,/mnt(mount的缩写)目录就像是一个临时的营地或者停车场。这个地方是为了临时“挂载”或接入一些外部存储设备而设置的,比如额外的硬盘、网络共享存储或者CD-ROM驱动器等。

在现实中,挂载就像是将一个外部存储设备连接到你的系统,并使其成为系统文件树的一部分。在 /mnt 目录下,系统管理员或用户可以手动挂载设备。这就像在探险乐园中,你可以将你的车辆停在停车场里,然后随时使用它。

/media 目录相比,/mnt 更多地被用于手动挂载操作。比如,如果你有一个外部硬盘驱动器,你可能会选择将它挂载在 /mnt 下的一个特定文件夹中。这就像是在乐园的特定区域设立一个帐篷,用于放置和访问你的个人物品。

/mnt 目录通常是由系统管理员使用,用于执行特定的挂载操作,这些操作可能需要更多的技术知识。这就像是乐园中那些只有经验丰富的探险者才会使用的特殊区域。

10. /opt

  • 用于安装“可选”的软件和大型应用程序。
  • 这是第三方应用程序的常见安装位置。

如果,你的 Linux 系统就像是一个大型的购物中心。在这个购物中心里,/opt 目录就好比是一些专卖店或精品店。这些店铺通常卖一些不属于购物中心主要零售产品的特别商品,就像 /opt 目录通常用来存放那些“额外”的或“可选”的软件。

在 Linux 中,/opt 目录是一个用来安装和存放第三方软件的地方。这些软件通常是独立于系统默认软件管理器安装的。你可以把它想象成一些专门的、非标准的软件,它们不是由系统的标准包管理系统(比如APT或YUM)安装的,而是直接由软件提供商提供。

比如说,你可能会在 /opt 中找到像是图形设计软件、专业音乐制作工具或者大型游戏。这些软件就像是购物中心里的精品店所出售的特别商品,提供了与众不同的体验和功能。

一个关键点是,/opt 目录的使用通常更多地依赖于系统管理员或高级用户,因为在这里安装软件可能需要更多的手动配置和管理。这就像是购物中心中的专卖店可能需要你有更专业的知识来挑选和使用里面的商品。

11. /proc

  • 一个虚拟的文件系统,包含运行时系统信息,如正在运行的进程、系统资源统计。
  • 它是与内核和进程状态交互的窗口。

假设,你的 Linux 系统是一个充满活力的主题公园。在这个公园里,/proc 目录就像是一个包含了各种实时信息展示板的特殊区域。这个目录是一个虚拟的文件系统,它不占用磁盘空间,而是直接在内存中生成,提供了关于系统和运行中的进程的详细信息。

/proc 目录下,每个运行中的进程都有一个以其进程号命名的文件夹。进入这些文件夹就像是查看一个特定游乐设施的详细信息一样。你可以找到关于进程的状态、使用的内存、运行的用户等等信息。

除此之外,/proc 还包含了关于系统硬件和配置的信息。比如,/proc/cpuinfo 文件就提供了关于 CPU 的详细信息,/proc/meminfo 则告诉你关于内存的使用情况。这些就像是展示板上的实时信息,告诉你公园的各种设施是如何运行的。

但是,需要注意的是,虽然 /proc 目录提供了大量的信息,它更多的是用于读取和监控系统状态,而不是用来直接修改的。试图更改 /proc 中的某些文件可能会对系统产生不可预测的影响,就像随意调整主题公园中的控制系统可能会导致游乐设施运行异常。

12. /root

  • 系统管理员(超级用户root)的家目录。
  • 这与普通用户的/home目录不同。

你的 Linux 系统是一个大型的王国。在这个王国里,/root 目录就好比是国王的私人宫殿。这个地方是系统管理员(也被称为“root”用户)的专属区域,他是整个系统的最高统治者。

在 Linux 系统中,root 用户拥有最高权限,能够访问和修改系统中的几乎所有内容。因此,/root 目录是一个为这位超级用户专门设置的私人空间。就像国王的宫殿,这里存放着管理员的个人文件、配置设置等重要资料。

但是,和其他用户的家目录(比如 /home/username)不同,普通用户通常不能访问 /root。这就像是在王国中,普通公民不能随意进入国王的私人宫殿一样。这是为了系统的安全和稳定性考虑,因为不小心的操作可能会对整个系统造成严重的影响。

因此,即使你有机会成为系统管理员,也要谨慎行事。拥有最高权限意味着任何操作都可能产生广泛的影响。这就像国王的每一个决定都可能影响整个王国一样。

13. /sbin

  • 存放系统管理和维护所需的二进制程序,这些命令通常由系统管理员使用。
  • 包括用于启动、修复、配置系统的工具。

想象一下,你的 Linux 系统是一个庞大的机器,而 /sbin 目录就像是这台机器的控制室。这个目录里面存放的是系统管理命令,就像控制室里的各种开关和控制杆,用来管理和维护整个系统。

/sbin 目录下,你会找到很多重要的工具和命令。这些不是给普通用户使用的日常工具,而是那些需要系统管理员权限才能运行的特殊命令。就像在一个复杂的工厂里,只有经过专门培训的工程师才能操作某些关键的机器一样。

举个例子,你会在这里找到像 ifconfig(用于配置网络接口)、fdisk(用于磁盘分区)以及 shutdown(用于关闭或重启系统)等命令。这些命令就像是控制室里的主要控制器,负责管理系统的核心功能。

14. /tmp

  • 用于存放临时文件,系统可能会在重启时清理这个目录。
  • 应用程序和用户可以在这里存储临时数据。

你的 Linux 系统是一个繁忙的办公楼,而 /tmp 目录就好比是这栋楼里的临时存放区。这个目录是专门用来存放那些只需要暂时保留的文件,就像是办公室里的便签纸、草稿纸,或者是一次性咖啡杯。

/tmp 目录下,系统和一些程序会存放临时文件。这些文件在大多数情况下是用完即弃的,它们可能用于存储正在运行程序的临时数据,或者作为交换和处理数据的临时站点。想象一下,在处理大量数据或进行复杂计算时,你可能需要一些空间来临时放置这些数据,直到完成任务。

但是,这里的“临时”是关键词。你可以把 /tmp 目录想象成一个有定期清理服务的垃圾箱。系统会定期清理这个目录中的内容,以确保不会占用太多空间。这就像是办公楼的清洁工会定期清空垃圾桶,以防垃圾堆积。

因此,存放在 /tmp 目录中的文件通常不应该被视为长期存储。一旦系统重启,这些文件可能就会消失。这就好比,你不会把重要的文件放在办公桌上的便签纸上,因为它们可能很快就会被扔掉。

15. /usr

  • 包含用户安装的应用程序和文件,是Unix系统资源的主要存储区域。
  • 包括系统默认的应用程序、文档、图标等。

你的 Linux 系统是一座充满活力的城市。在这座城市中,/usr 目录就像是一个大型的商业区。这个目录包含了绝大多数用户级的应用程序和文件,就像是城市中的商店、办公楼和娱乐设施。

/usr 目录下,你会发现很多子目录,它们各自承担着不同的角色:

  1. /usr/bin:这里就像是商业区的零售店铺,提供各种各样的软件和应用程序。几乎所有的标准用户命令都存放在这里,比如 grepawkcurl 等。

  2. /usr/sbin:这个目录更像是专门为系统管理员设置的服务中心,包含了许多用于系统管理的程序,比如网络配置工具。

  3. /usr/lib:这就像是城市的基础设施,提供支持给商业区的建筑。这里存放的是程序运行所需的库文件。

  4. /usr/local:想象成是一个地方特色区域。这里通常用来安装本地编译的软件,这样可以避免覆盖由系统包管理器安装的软件。

  5. /usr/share:这个目录就像是一个信息中心,提供了文档、图标、背景图片等共享资源。

  6. /usr/include:对于那些喜欢自己动手的开发者来说,这里就像是一个DIY商店,提供了C语言头文件,这些文件在编译软件时需要用到。

16. /var

  • 存放经常变化的文件,如日志文件、邮件队列。
  • 这个目录包含了随着系统运行而持续变化的数据。

你的 Linux 系统是一个繁忙的城市。在这座城市里,/var 目录就像是一个动态的市中心,不断发生着各种活动。这个目录专门用来存放那些经常变化的文件,就像是城市中的新闻报摊、广告牌或是交通信息显示屏。

/var 目录下,你会发现几个重要的子目录:

  1. /var/log:这个目录就像是城市的新闻中心,记录着所有系统和应用程序的日志文件。这些日志提供了系统运行情况的详细记录,就像是一份详尽的城市活动报告。

  2. /var/spool:这里可以比作邮件处理中心或者打印店,存放着等待处理的作业,比如打印文件或邮件队列。

  3. /var/cache:想象成城市的临时存储设施,这里缓存了临时文件,以便快速访问,就像是快递中转站一样。

  4. /var/lib:这个目录就像是一个数据库或档案馆,存放着程序运行时需要的持久性数据。比如,数据库系统会在这里存放它的数据文件。

  5. /var/tmp:与 /tmp 类似,这里是存放那些需要长期保留的临时文件的地方,就像是一个供人们暂时放置物品的储物柜。

/var 目录的内容经常变化,它反映了系统的实时状态和历史记录。这就像是一个充满活力的市中心,随时都在发生变化,记录着城市的生活脉动。

相关文章:

  • 【驱动】TI AM437x(内核调试-02):dynamic 动态打印调试
  • 微信小程序Canvas画布绘制图片、文字、矩形、(椭)圆、直线
  • Spring整理-Spring框架的国际化
  • 根据gbt81702008数值修约的C#函数
  • Logstash:迁移数据到 Elasticsearch
  • MySQL 8.0中新增的功能(八)
  • Python+甘特图及标签设置
  • 计算机网络层之ICMP与IGMP
  • 已解决java.lang.NoSuchFieldException异常的正确解决方法,亲测有效!!!
  • Python 网络爬虫入门详解
  • 图解Kubernetes的服务(Service)
  • 高并发场景系统设计的时候应该怎么考虑?
  • python入门,数据容器:set集合
  • mybatis核心配置文件介绍
  • 作业:通过两台linux主机配置ssh实现互相免密登陆
  • 【刷算法】求1+2+3+...+n
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • hadoop集群管理系统搭建规划说明
  • JavaScript服务器推送技术之 WebSocket
  • Javascript基础之Array数组API
  • laravel 用artisan创建自己的模板
  • Terraform入门 - 3. 变更基础设施
  • 两列自适应布局方案整理
  • 前端自动化解决方案
  • 实习面试笔记
  • 使用 QuickBI 搭建酷炫可视化分析
  • 思维导图—你不知道的JavaScript中卷
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 硬币翻转问题,区间操作
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • "无招胜有招"nbsp;史上最全的互…
  • (1)Nginx简介和安装教程
  • (11)MATLAB PCA+SVM 人脸识别
  • (2)(2.10) LTM telemetry
  • (LeetCode 49)Anagrams
  • (Qt) 默认QtWidget应用包含什么?
  • (SpringBoot)第二章:Spring创建和使用
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (数据结构)顺序表的定义
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET 的程序集加载上下文
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • :=
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [AR]Vumark(下一代条形码)
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [HackMyVM]靶场Boxing
  • [java进阶]——方法引用改写Lambda表达式
  • [Java算法分析与设计]--线性结构与顺序表(List)的实现应用
  • [LeetCode] 93. Restore IP Addresses 复原IP地址
  • [Leetcode] 寻找数组的中心索引
  • [Luogu 3958] NOIP2017 D2T1 奶酪