Linux笔记之本地安装(用户安装)目录和系统安装目录
—— 2024-04-20 杭州
code review!
文章目录
- Linux笔记之本地安装(用户安装)目录和系统安装目录
- 1.区别
- 解释说明:
- 1. `/usr/local/include` 和 `/usr/include`
- 2. `/usr/local/bin` 和 `/usr/bin`
- 3. `/usr/local/lib` 和 `/usr/lib`
- 总结
- 2.使用场景
- 示例1:安装软件
- 示例2:查找库文件
- 示例3:系统升级
- 总结
1.区别
在 Linux 系统中,目录结构是有特定用途和规范的。/usr/local
目录通常用于存放用户自己编译安装的软件,这样可以避免与系统默认的包管理器安装的软件冲突。下面是一个表格,比较了 /usr/local/include
、/usr/local/bin
、/usr/local/lib
和 /usr/include
、/usr/bin
、/usr/lib
之间的区别:
目录 | 用途 | 来源 | 特点 |
---|---|---|---|
/usr/local/include | 存放用户自己编译安装的软件的头文件。 | 用户自行安装的软件。 | 与系统软件包管理器安装的软件隔离,避免冲突。 |
/usr/include | 存放系统默认的软件包管理器(如 apt, yum)安装的软件的头文件。 | 系统包管理器安装的软件。 | 一般不手动修改,由系统管理。 |
/usr/local/bin | 存放用户自己编译安装的可执行文件。 | 用户自行安装的软件。 | 通常在 PATH 环境变量中的优先级高于 /usr/bin 。 |
/usr/bin | 存放系统默认的软件包管理器安装的可执行文件。 | 系统包管理器安装的软件。 | 包含大部分系统命令和程序,由系统管理。 |
/usr/local/lib | 存放用户自己编译安装的软件的库文件。 | 用户自行安装的软件。 | 当系统查找动态库时,这个目录中的库通常优先级高于 /usr/lib 。 |
/usr/lib | 存放系统默认的软件包管理器安装的库文件。 | 系统包管理器安装的软件。 | 包含大部分系统库文件,由系统管理。 |
解释说明:
- 用途:描述了各个目录存放的内容类型,包括可执行文件、库文件和头文件。
- 来源:指示了文件是由系统包管理器安装还是用户自行编译安装。
- 特点:解释了这些目录在系统管理和日常使用中的特殊性。
这种目录结构的设计旨在使系统安装的软件和用户自行安装的软件互不干扰,同时便于管理和维护。用户安装的软件不会覆盖或破坏包管理器安装的软件,这是 Linux 系统稳定性和安全性的重要保障之一。
1. /usr/local/include
和 /usr/include
/usr/include
:这是系统级的包含目录(system include directory),存放由系统包管理器安装的头文件,这些文件通常是各种库和系统服务的接口定义。/usr/local/include
:这是本地包含目录(local include directory),用于存放用户自行安装或编译的软件的头文件。这些文件通常不由系统的包管理器维护。
2. /usr/local/bin
和 /usr/bin
/usr/bin
:这是系统级二进制目录(system binary directory),存放由系统包管理器安装的可执行文件。这些文件包括大多数用户和系统管理员会使用的标准命令和程序。/usr/local/bin
:这是本地二进制目录(local binary directory),用于存放用户自行安装或编译的软件的可执行文件。这些文件通常不由系统的包管理器维护。
3. /usr/local/lib
和 /usr/lib
/usr/lib
:这是系统级库目录(system library directory),存放由系统包管理器安装的库文件。这些库支持系统和应用程序的运行,包括动态链接库(.so 文件)和静态库(.a 文件)。/usr/local/lib
:这是本地库目录(local library directory),用于存放用户自行安装或编译的软件的库文件。这些库文件通常不由系统的包管理器维护。
总结
在 Linux 中,/usr
目录通常包含由系统包管理器管理的非本地系统软件,而 /usr/local
目录则主要用于存放本地安装的软件,即用户自行编译或手动安装的软件。这种区分有助于维护系统的稳定性和软件的组织性,确保系统升级时不会覆盖或影响到用户自定义的安装。
2.使用场景
为了更具体地解释 /usr/local
和 /usr
目录的区别,可以通过一些常见的使用场景来说明这些目录的实际应用。
示例1:安装软件
假设你想要安装最新版本的 Python,而系统的包管理器提供的版本比较旧。你可能会选择从源码编译安装。
-
编译安装到
/usr/local
:- 下载 Python 的最新源码。
- 解压并进入目录。
- 执行配置脚本(
./configure
),默认会配置安装到/usr/local
。 - 编译并安装(
make && make install
)。 - 此操作将 Python 的可执行文件安装到
/usr/local/bin
,库文件安装到/usr/local/lib
,头文件安装到/usr/local/include
。
-
使用系统包管理器安装到
/usr
:- 使用例如
apt install python3
(假设是 Debian 或 Ubuntu 系统)。 - 系统会将 Python 安装到
/usr/bin
,库文件放到/usr/lib
,头文件放到/usr/include
。
- 使用例如
示例2:查找库文件
假设你正在开发一个 C++ 程序,需要链接到 libpng(一个处理 PNG 图片的库)。
- 如果你从源码编译安装 libpng 到
/usr/local
,则库文件将位于/usr/local/lib
。 - 当你的程序尝试链接到 libpng 时,链接器会先在
/usr/local/lib
查找。这就确保了使用的是你自己安装的最新版本的库,而不是系统包管理器提供的可能较旧的版本。
示例3:系统升级
当系统执行升级时,例如使用 apt upgrade
命令,系统会更新 /usr
目录下的软件包,包括 /usr/bin
、/usr/lib
和 /usr/include
中的内容。但是,这个升级过程不会影响 /usr/local
目录下的内容。这意味着用户自行安装的软件不会被系统升级过程覆盖或删除。
总结
通过上述示例可以看出,/usr/local
主要用于用户自行安装的软件,保证其独立于系统的包管理,而 /usr
目录则主要由系统包管理器管理,用于存放系统级的软件和库。这种分离确保了系统的稳定性和软件的可管理性。