Linux 里有/lib和/usr/lib各个目录含义

本文详细介绍了Linux系统中各个重要目录的功能及其用途,包括根目录、引导目录、命令存放目录、库文件目录、设备文件目录、用户家目录等,帮助读者更好地理解Linux文件系统的组织方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:usr-->lib   默认存放的动态库,自己写的应用程序/home/app里面的文件都会调用此
/usr-->lib 目录里面的动态库。
以下是linux系统常见的重要目录以及各个目作用:
/
根目录。
包含了几乎所的文件目录。相当于中央系统。进入的最简单方法是:cd /。

/boot
引导程序,内核等存放的目录。
这个目录,包括了在引导过程中所必需的文件,引导程序的相关文件(例如grub,lilo以及相应的配置文件以及Linux操作系统内核相关文件(例如vmlinuz等一般都存放在这里。在最开始的启动阶段,通过引导程序将内核加载到内存,完成内核的启动(这个时候,虚拟文件系统还不存在,加载的内核虽然是从硬盘读取的,但是没经过Linux的虚拟文件系统,这是比较底层的东西来实现的。然后内核自己创建好虚拟文件系统,并且从虚拟文件系统的其他子目录中(例如/sbin 和 /etc加载需要在开机启动的其他程序或者服务或者特定的动作(部分可以由用户自己在相应的目录中修改相应的文件来配制。如果我们的机器中包含多个操作系统,那么可以通过修改这个目录中的某个配置文件(例如grub.conf来调整启动的默认操作系统,系统启动的择菜单,以及启动延迟等参数。

/sbin
超级用户可以使用的命令的存放目录。
存放大多涉及系统管理的命令(例如引导系统的init程序,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令(但是时普通用户也可能会用到。这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin等目录是相似的,我们要记住,凡是目录sbin中包含的都是root权限才能执行的,这样就行了。后面会具体区分。

/bin
普通用户可以使用的命令的存放目录。
系统所需要的那些命令位于此目录,比如ls、cp、mkdir等命令;类似的目录还/usr/bin,/usr/local/bin等等。这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。

/lib
根目录下的所程序的共享库目录。
此目录下包含系统引导和在根用户执行命令时候所必需用到的共享库。做个不太好但是比较形象的比喻,点类似于Windows上面的system32目录。理说,这里存放的文件应该是/bin目录下程序所需要的库文件的存放地,也不排除一些例外的情况。类似的目录还/usr/lib,/usr/local/lib等等。

/dev
设备文件目录。
在Linux中设备都是以文件形式出现,这里的设备可以是硬盘,键盘,鼠标,网卡,终端,等设备,通过访问这些文件可以访问到相应的设备。设备文件可以使用mknod命令来创建,具体参见相应的命令;而为了将对这些设备文件的访问转化为对设备的访问,需要向相应的设备提供设备驱动模块(一般将设备驱动编译之后,生成的结果是一个*.ko类型的二进制文件,在内核启动之后,再通过insmod等命令加载相应的设备驱动之后,我们就可以通过设备文件来访问设备了。一般来说,想要Linux系统支持某个设备,只要个东西:相应的硬件设备,支持硬件的驱动模块,以及相应的设备文件。

/home
普通用户的家目录($HOME目录。
在Linux机器上,用户主目录通常直接或间接地置在此目录下。其结构通常由本地机的管理员来决定。通常而言,系统的每个用户都自己的家目录,目录以用户名作为名字存放在/home下面(例如quietheart用户,其家目录的名字为/home/quietheart。该目录中保存了绝大多数的用户文件(用户自己的配置文件,定制文件,文档,数据等),root用户除外(参见后面的/root目录。由于这个目录包含了用户实际的数据,通常系统管理员为这个目录单独挂载一个独立的磁盘分区,这样这个目录的文件系统格式就可能和其他目录不一样了(尽管表面上看,这个目录还是属于根目录的一棵子树上),有利于数据的维护。

/root
用户root的$HOME目录
系统管理员(就是root用户或超级用户)的主目录比较特殊,不存放在/home中,而是直接放在/root目录下了。

/etc
全局的配置文件存放目录。
系统和程序一般都可以通过修改相应的配置文件,来进行配置。例如,要配置系统开机的时候启动那些程序,配置某个程序启动的时候显示什么样的风格等等。通常这些配置文件都集中存放在/etc目录中,所以想要配置什么东西的话,可以在/etc下面寻找我们可能需要修改的文件。一些大型套件,如X11,在 /etc 下它们自己的子目录。系统配置文件可以放在这里或在 /usr/etc。 不过所程序总是在 /etc 目录下查找所需的配置文件,你也可以将这些文件链接到目录 /usr/etc。另外,还一个需要注意的常见现象就是,当某个程序在某个用户下运行的时候,可能会在该用户的家目录中生成一个配置文件(一般这个文件最开始就是/etc下相应配置文件的拷贝,存放相应于“当前用户”的配置,这样当前用户可以通过配置这个家目录的配置文件,来改变程序的行为,并且这个行为只是该用户特的。原因就是:一般来说一个程序启动,如果需要读取一些配置文件的话,它会首先读取当前用户家目录的配置文件,如果存在就使用;如果不存在它就到/etc下读取全局的配置文件进而启动程序。就是这个配置文件不自动生成,我们手动在自己的家目录中创建一个文件的话,也有许多程序会首先读取到这个家目录的文件并且以它的配置作为启动的选项(例如我们可以在家目录中创建vim程序的配置文件.vimrc,来配置自己的vim程序。

/usr
这个目录中包含了命令库文件和在通常操作中不会修改的文件。
这个目录对于系统来说也是一个非常重要的目录,其地位类似Windows上面的”Program Files”目录(请原谅我可能这样做比较不太恰当^_^。安装程序的时候,默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行/usr/bin下的程序(当然,前提是这个目录的路径已经被添加到了系统的环境变量中。此目录通常也会挂载一个独立的磁盘分区,它应保存共享只读类文件,这样它可以被运行Linux的不同主机挂载。

/usr/lib
目标库文件,包括动态连接库加上一些通常不是直接调用的可执行文件的存放位置。
这个目录功能类似/lib目录,理说,这里存放的文件应该是/bin目录下程序所需要的库文件的存放地,也不排除一些例外的情况。

/usr/bin
一般使用者使用并且不是系统自检等所必需可执行文件的目录。
此目录相当于根文件系统下的对应目录(/bin,非启动系统,非修复系统以及非本地安装的程序一般都放在此目录下。

/usr/sbin
管理员使用的非系统必须的可执行文件存放目录。
此目录相当于根文件系统下的对应目录(/sbin,保存系统管理程序的二进制文件,并且这些文件不是系统启动或文件系统挂载 /usr 目录或修复系统所必需的。

/usr/share
存放共享文件的目录。
在此目录下不同的子目录中保存了同一个操作系统在不同构架下工作时特定应用程序的共享数据(例如程序文档信息)。使用者可以找到通常放在 /usr/doc 或 /usr/lib 或 /usr/man 目录下的这些类似数据。

/usr/include
C程序语言编译使用的头文件。
linux下开发和编译应用程序所需要的头文件一般都存放在这里,通过头文件来使用某些库函数。默认来说这个路径被添加到了环境变量中,这样编译开发程序的时候编译器会自动搜索这个路径,从中找到你的程序中可能包含的头文件。

/usr/local
安装本地程序的一般默认路径。
当我们下载一个程序源代码,编译并且安装的时候,如果不特别指定安装的程序路径,那么默认会将程序相关的文件安装到这个目录的对应目录下。例如,安装的程序可执行文件被安装(安装实质就是复制到了/usr/local/bin下面,此程序(可执行文件所需要依赖的库文件被安装到了/usr/local/lib目录下,被安装的软件如果是某个开发库(例如Qt,Gtk等那么相应的头文件可能就被安装到了/usr/local/include中等等。也就是说,这个目录存放的内容,一般都是我们后来自己安装的软件的默认路径,如果择了这个默认路径作为软件的安装路径,被安装的软件的所文件都限制在这个目录中,其中的子目录就相应于根目录的子目录。

/proc
特殊文件目录。
这个目录采用一种特殊的文件系统格式(proc格式,内核支持这种格式。其中包含了全部虚拟文件。它们并不保存在磁盘中,也不占据磁盘空间(尽管命令ls -c会显示它们的大小)。当您查看它们时,您实际上看到的是内存里的信息,这些文件助于我们了解系统内部信息。例如:
├1/ 关于进程1的信息目录。每个进程在/proc 下一个名为其进程号的目录。
├cpuinfo 处理器信息,如类型、制造商、型号和性能。
├devices 当前运行的核心配置的设备驱动的列表。
├dma 显示当前使用的DMA通道。
├filesystems 核心配置的文件系统。
├interrupts 显示使用的中断,and how many of each there have been.
├ioports 当前使用的I/O端口。
├kcore 系统物理内存映象。与物理内存大小一样,但实际不占这么多内存;
├kmsg 核心输出的消息。也被送到syslog 。
├ksyms 核心符号表。
├loadavg 系统”平均负载”;3个没意义的指示器指出系统当前的工作量。
├meminfo 存储器使用信息,包括物理内存和swap。
├modules 当前加载了哪些核心模块。
├net 网络协议状态信息。
├self 到查看/proc 的程序的进程目录的符号连接。
├stat 系统的不同状态
├uptime 系统启动的时间长度。
└version 核心版本。

/opt
可择的文件目录。
这个目录表示的是可择的意思,些自定义软件包或者第方工具,就可以安装在这里。比如在Fedora Core 5.0中,OpenOffice就是安装在这里。些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以把它们的安装路径设置成/opt这样来安装。这个目录的作用一点类似/usr/local。

/mnt
临时挂载目录。
这个目录一般是用于存放挂载储存设备的挂载目录的,比如磁盘,光驱,网络文件系统等,当我们需要挂载某个磁盘设备的时候,可以把磁盘设备挂载到这个目录上去,这样我们可以直接通过访问这个目录来访问那个磁盘了。一般来说,我们最好在/mnt目录下面多建立几个子目录,挂载的时候挂载到这些子目录上面,因为通常我们可能不仅仅是挂载一个设备吧?

/media
挂载的媒体设备目录。
挂载的媒体设备目录,一般外部设备挂载到这里,例如cdrom等。比如我们插入一个U盘,我们一般会发现,Linux自动在这个目录下建立一个disk目录,然后把U盘挂载到这个disk目录上,通过访问这个disk来访问U盘。

/var
内容经常变化的目录。
此目录下文件的大小可能会改变,如缓冲文件,日志文件,缓存文件,等一般都存放在这里。

/tmp
临时文件目录。
该目录存放系统中的一些临时文件,文件可能会被系统自动清空。的系统直接把tmpfs类型的文件系统挂载到这个目录上,tmpfs文件系统由Linux内核支持,在这个文件系统中的数据,实际上是内存中的,由于内存的数据断电易失,当系统重新启动的时候我们就会发现这个目录被清空了。

/lost+found
恢复文件存放的位置。
当系统崩溃的时候,在系统修复过程中需要恢复的文件,可能就会在这里被找到了,这个目录一般为空。

另外,有些目录初学者容易混淆,这里简单区分一下:
/bin,/sbin与/usr/bin,/usr/sbin:
/bin一般存放对于用户和系统来说“必须”的程序(二进制文件)。
/sbin一般存放用于系统管理的“必需”的程序(二进制文件),一般普通用户不会使用,根用户使用。
/usr/bin一般存放的只是对用户和系统来说“不是必需的”程序(二进制文件)。
/usr/sbin一般存放用于系统管理的系统管理的不是必需的程序(二进制文件)。

/lib与/usr/lib:
/lib和/usr/lib的区别类似/bin,/sbin与/usr/bin,/usr/sbin。
/lib一般存放对于用户和系统来说“必须”的库(二进制文件)。
/usr/lib一般存放的只是对用户和系统来说“不是必需的”库(二进制文件)。
<think>好的,我现在需要回答用户关于Linux系统中`/usr/lib``/lib`目录区别的问题。首先,我得回忆一下这两个目录的基本作用以及它们在Linux文件系统层次结构中的位置。 我记得在Linux系统中,`/lib`目录通常存放系统启动运行时所需的关键共享库文件,比如内核模块、驱动等。这些库对于系统的基本运行至关重要,尤其是在启动过程中,当`/usr`目录可能尚未挂载的情况下,`/lib`中的库必须可用。这可能是因为`/usr`有时会被放在单独的分区,系统启动的早期阶段需要这些库,而单独的`/usr`分区此时可能还未挂载,因此需要`/lib`来提供必要的库支持。 接下来是`/usr/lib`,这个目录应该包含更多用户级别的应用程序服务的共享库。这些库不是系统启动所必需的,而是支持那些安装在`/usr/bin`或`/usr/sbin`中的应用程序。比如,图形界面程序、开发工具等可能会依赖这的库。`/usr`目录通常包含用户安装的软件工具,而`/usr/lib`则是这些软件的库文件存储位置。 然后我需要考虑这两个目录在历史发展中的变化。早期的Unix系统可能因为存储空间有限,将`/usr`放在另一个磁盘或分区,导致启动时需要`/lib`中的库。现代Linux系统中,虽然很多发行版开始合并这些目录,使用符号链接来简化结构,但传统区分仍然存在。例如,有些系统可能将`/lib`链接到`/usr/lib`,或者将两者合并,但根据FHS(文件系统层次标准),它们还是有不同的用途。 另外,要注意区分`/lib``/lib64`,后者存放64位库,而`/usr/lib`下可能也有对应的架构子目录。同样,`/usr/lib`可能包含更多子目录,比如`/usr/lib/python3.8`用于Python模块,而`/lib`可能更专注于核心系统库。 用户可能还想知道实际例子,比如哪些文件会存放在这两个目录中。例如,`/lib`可能有`libc.so.6`这样的C库文件,而`/usr/lib`可能有像`libpng`这样的图像处理库。不过,具体情况可能因发行版而异,有些库的位置可能随着时间变化,特别是现在很多系统采用动态链接合并目录结构。 总结时,需要强调两者的核心区别在于用途:`/lib`是系统启动运行的关键库,而`/usr/lib`是用户级应用程序的库。同时,提到现代系统中可能的合并趋势,但传统区分仍然重要。 现在需要检查是否有遗漏或错误的信息。例如,是否所有发行版都严格遵循FHS?可能有些差异,但一般来说,主流的发行版如Ubuntu、Fedora等会遵循。另外,符号链接的使用是否正确,比如Debian系的系统如何处理`/lib``/usr/lib`的关系。例如,Debian 9之后可能将`/lib``/usr/lib`合并,使用符号链接,但逻辑上仍然分开管理核心库非核心库。 最后,确保回答清晰,结构合理,适合不同层次的读者理解,避免使用过于专业的术语,必要时解释概念。</think>在 Linux 系统中,`/usr/lib` `/lib` 目录都用于存放系统或应用程序的共享库文件(如 `.so` 文件),但它们的设计目的使用场景有所不同。以下是两者的主要区别: --- ### **1. `/lib` 目录** - **用途**:存放系统启动运行时必需的**核心共享库**(如 C 标准库 `libc`、内核模块等)。 - **依赖时机**: - 这些库是系统启动、修复或进入单用户模式(如救援模式)时的关键依赖。 - 在系统启动的早期阶段,`/usr` 目录可能尚未挂载(例如,若 `/usr` 是独立分区),此时 `/lib` 中的库必须可直接访问。 - **典型内容**: - 基础库:`libc.so.*`(C 库)、`ld-linux.so.*`(动态链接器) - 内核模块:`/lib/modules/` - 硬件驱动相关的库 --- ### **2. `/usr/lib` 目录** - **用途**:存放用户级应用程序服务所需的**非核心共享库**。 - **依赖时机**: - 这些库通常用于支持 `/usr/bin` 或 `/usr/sbin` 中的用户级程序(如图形界面工具、开发工具等)。 - 系统在完成基础启动后才会依赖这些库。 - **典型内容**: - 第三方软件库:如 Python 模块 (`/usr/lib/python3.*`)、图像处理库(如 `libpng.so`) - 桌面环境库:GNOME/KDE 组件的依赖库 - 开发工具链的静态库(如 `.a` 文件) --- ### **关键区别总结** | **对比项** | `/lib` | `/usr/lib` | |------------------|---------------------------------|--------------------------------| | **核心性** | 系统运行必需 | 非必需,多为用户级程序依赖 | | **挂载时机** | 系统启动时即需可用 | 可能在 `/usr` 挂载后才可用 | | **内容** | 基础库、内核模块 | 应用程序库、开发库 | | **是否可独立分区** | 通常不可(需随根目录挂载) | 可以(若 `/usr` 是独立分区) | --- ### **历史背景与现代变化** - **Unix 传统**:早期 Unix 系统因存储限制,常将 `/usr` 放在独立磁盘,导致启动时必须分离核心库(`/lib`)非核心库(`/usr/lib`)。 - **现代 Linux**: - 许多发行版(如 Debian、Ubuntu)开始合并目录结构,例如通过符号链接将 `/lib` 指向 `/usr/lib`,简化管理。 - 但逻辑上仍遵循区分核心库非核心库的原则,尤其在容器化或最小化系统中常见。 --- ### **实际例子** - **`/lib` 中的文件**: ```bash /lib/x86_64-linux-gnu/libc.so.6 # C 标准库 /lib/modules/5.15.0-76-generic/ # 内核模块 ``` - **`/usr/lib` 中的文件**: ```bash /usr/lib/firefox/libxul.so # Firefox 浏览器的库 /usr/lib/python3.10/ # Python 标准库 ``` --- ### **扩展知识** - **`/lib64` `/usr/lib64`**:在 64 位系统中,可能用这些目录存放 64 位库,而 `/lib` `/usr/lib` 存放 32 位库(取决于发行版配置)。 - **其他目录**: - `/usr/local/lib`:用户手动编译安装的软件库。 - `/opt`:某些第三方大型软件(如 MATLAB)可能将私有库放在其专属目录(如 `/opt/matlab/bin/../lib`)。 通过这种设计,Linux 系统确保了基础功能的稳定性,同时允许用户灵活扩展应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值