/usr 的由来及/usr目录结构

本文详细解析了Linux系统中关键目录/usr的历史演变及其重要组成部分。从/usr的起源讲起,介绍了它从用户目录转变为系统资源目录的过程,并对各子目录的功能进行了说明。
linux 文件结构中,有一个很神奇的目录 —— /usr。之前一直没有怎么关注过它,反正程序都是安装在里边的,也没有什么值得追根溯源的东西。直到有一天 fedora 要简化整个文件系统体系,看到讨论才想到,usr 到底是什么的缩写呢,它又是怎么来的呢?讨论中,大部分观点认为:
usr 是 unix system resources 的缩写;
usr 是 user 的缩写;
usr 是 unix software resources 的缩写。

根据常识判断,是 user 缩写的可能性不大,因为和 /home 冲突了嘛。不过是 system resources 还是 software resources 的缩写还真不好说。特此查了好多东西,却发现竟然连 wikipedia 也模棱两可。

后来终于找到了 相关的文档和介绍。(via,cache)


/usr usually contains by far the largest share of data on a system. Hence, this is one of the most important directories in the system as it contains all the user binaries, their documentation, libraries, header files, etc…. X and its supporting libraries can be found here. User programs like telnet, ftp, etc…. are also placed here. In the original Unix implementations, /usr was where the home directories of the users were placed (that is to say, /usr/someone was then the directory now known as /home/someone). In current Unices, /usr is where user-land programs and data (as opposed to ’system land’ programs and data) are. The name hasn’t changed, but it’s meaning has narrowed and lengthened from “everything user related” to “user usable programs and data”. As such, some people may now refer to this directory as meaning ‘User System Resources’ and not ‘user’ as was originally intended.(via 1,2)

/usr 是系统核心所在,包含了所有的共享文件。它是 unix 系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,x,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。

曾经的 /usr 还是用户的家目录,存放着各种用户文件 —— 现在已经被 /home 取代了(例如 /usr/someone 已经改为 /home/someone)。现代的 /usr 只专门存放各种程序和数据,用户目录已经转移。虽然 /usr 名称未改,不过其含义已经从“用户目录”变成了“unix 系统资源”目录。值得注意的是,在一些 unix 系统上,仍然把 /usr/someone 当做用户家目录,如 Minix。

至此,真相大白。看来就像前一阵子的 /var/run 移到 /run 一样。

真的是不看不知道,一看吓一跳呀。原来 linux 几经进化,好多目录的诞生和用途已经产生了根本的变化。历史车轮在前进,长江后浪推前浪,正所谓:学习历史,收获真知;尽心竭力,前进不止。

附录:/usr 目录结构
/usr/bin : 所有可执行文件,如 gcc,firefox 等(指不包含在 /sbin 和 /bin 内的);
/usr/include : 各种头文件,编译文件等时需要使用; /usr/include/’package-name’ : 程序特定的头文件;

/usr/lib : 所以可执行文件所需要的库文件;
/usr/local : /usr 通常只包含系统发行时自带的程序,而 /usr/local 则是本地系统管理员用来自由添加程序的目录;
/usr/X11R6 : x 系统的二进制文件,库文件,文档,字体等。它不等同于 /usr 的作用,只有 x 才能调用这些库文件等,其他程序不读取或者使用。因为 linux 没有原生图形界面,而且 linux 大部分情况下是 for server 的,所以图形界面没有意义;其中 X11R6 代表 version 11 release 6; /usr/X11R6/bin : x 的二进制文件,包含运行 x 的必须文件;
/usr/X11R6/include : x 相关的头文件;
/usr/X11R6/lib : x 库文件;
/usr/X11R6/lib/modules : x 的模块,启动时加载。缺少 video4linux, DRI and GLX 和 输入输出设备 模块,将工作不正常;
/usr/X11R6/lib/X11/fonts : x font server 的字体文件;

/usr/doc : 文档。实际是 /usr/share/doc 的软链接;
/usr/etc : 一个极少用到的配置文件存放地;
/usr/games : 曾经包含游戏等文件,现在很少用到;
/usr/info : 系统相关信息,是 /usr/share/info 的软链接;
/usr/man : man 手册,已经移至 /usr/share/man;
/usr/sbin : 类似 /sbin,root 可以执行。但此目录不包含在环境变量 $PATH 中,它包含的程序类似于 chroot, useradd, in.tftpd and pppconfig;
/usr/share : 它包含了各种程序间的共享文件,如字体,图标,文档等。(/usr/local 对应的目录是 /usr/loca/share); /usr/share/doc : 类似应用程序的 man 手册。它包含程序的说明文件,默认配置文件等;
/usr/share/info : 不常用,已经被 man 代替;
/usr/share/man : app 的 manual;
/usr/share/icons : 应用程序的图标等文件,分为 png,svg 等多种格式;
/usr/share/fonts : 字体文件,系统范围内可使用,~/.fonts 仅当前用户可用;

/usr/src : linux 内核的源码和说明文档等; /usr/src/linux : linux 源代码;
/usr/src/linux/.config : 内核编译过程产生的文件;通常由命令 ‘make config’ , ‘make menuconfig’ 或 ‘make xconfig’ 执行后产生;
/usr/src/linux/.depend, /usr/src/linux/.hdepend : ‘make dep’ 检测编译依赖时需要的文件,由 /usr/src/linux/.config 产生;
/usr/src/linux/COPYING : GNU license;
/usr/src/linux/Makefile : 编译内核所需的 Makefile;
/usr/src/linux/Rules.make : 当有多个 Makefile 时,根据它的规则执行 make;

/usr/tmp : 已经被众多发行版抛弃的临时文件夹。
<think>首先,用户的问题是关于Linux系统中的目录问题:用户提到“/usr/local/ directory missing nginx files”。这看起来像是用户在抱怨或询问为什么在/usr/local/目录下没有nginx相关的文件,可能是在安装nginx时遇到了问题。 从系统级指令来看: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用:有四个引用[^1]、[^2]、[^3]、[^4],这些是关于nginx安装、编译错误、环境设置等问题的引用。 用户上一次的问题似乎是关于nginx安装的编译错误,引用[^1]描述了编译nginx时出现的错误,引用[^2]是配置命令,引用[^3]是关于安装软件的命令,引用[^4]是关于mysql启动问题。用户现在的问题聚焦在/usr/local/目录下缺少nginx文件。 关键点: - /usr/local/是Linux中常见的安装目录,用于用户编译安装的软件。 - nginx通常安装在/usr/local/nginx下,如果用户编译安装时指定了--prefix=/usr/local/nginx。 - 用户可能期望在/usr/local/下看到nginx文件,但如果没有,可能安装路径不同或安装失败。 我的回答应该: 1. 解释为什么nginx文件可能不在/usr/local/下。 2. 帮助用户诊断问题。 3. 提供解决方案。 4. 生成相关问题。 步骤: - 确认问题:用户可能在编译或安装nginx后,在/usr/local/下找不到nginx文件。 - 可能原因: - 安装时指定了不同的prefix。 - 安装失败。 - nginx被安装到其他目录,如/usr/share/nginx或/opt/nginx。 - 系统使用包管理器安装(如apt),则文件可能分布在/usr/share/nginx、/etc/nginx等。 - 参考引用:引用[^2]中配置命令是--prefix=/usr/local/nginx,所以如果用户用了这个命令,文件应该在/usr/local/nginx下。但引用[^1]显示编译错误,可能安装失败。 - 解决方案: - 检查安装路径:使用whereis nginx或which nginx命令。 - 检查编译日志:查看make和make install的输出。 - 重新安装,确保没有错误。 - 生成相关问题:基于主题,如nginx安装路径、编译错误处理等。 回答结构: 1. 理解问题:用中文解释用户的问题。 2. 诊断原因:列出可能原因。 3. 提供步骤:逐步指导如何解决。 4. 生成相关问题:在最后添加。 使用引用:在回答中自然地引用参考内容。例如,提到编译错误时引用[^1],配置命令引用[^2]。 确保LaTeX正确:虽然这个问题不涉及数学,但如果有数学表达式,要使用正确格式。这里可能不需要,但保持警惕。 最终回答: - 开头:确认问题。 - 主体:解释原因和解决方案。 - 结尾:生成相关问题。</think>### 在 Linux 中 /usr/local/ 目录下缺少 Nginx 文件的问题分析 您的查询表明您在 Linux 系统中检查 `/usr/local/` 目录时,未找到预期的 Nginx 相关文件(如配置文件、二进制文件或日志目录)。这通常发生在 Nginx 编译安装过程中,可能由安装路径错误、编译失败或环境配置问题导致。下面我将逐步解释原因并提供解决方案,帮助您定位和修复问题。 #### 1. **可能原因分析** - **安装路径未正确指定**: 在编译 Nginx 时,如果未使用 `--prefix` 参数指定安装目录,Nginx 默认会安装到 `/usr/local/nginx/`。但如果您在配置命令中省略了路径(如 `./configure`),或指定了其他目录(如 `/opt/nginx`),文件就不会出现在 `/usr/local/` 下[^2]。 例如,引用[^2]中的命令 `./configure --prefix=/usr/local/nginx` 明确将安装目录设为 `/usr/local/nginx`,如果省略此参数,文件可能分散到系统默认位置(如 `/usr/share/nginx`)。 - **编译或安装失败**: 如果编译过程出错(如依赖库缺失或链接错误),Nginx 可能未完全安装。引用[^1]描述了编译时的常见错误(如 `undefined reference to symbol 'OpenSSL_version'`),这会导致 `make install` 步骤失败,从而在 `/usr/local/` 下无文件生成[^1]。 - **包管理器安装的干扰**: 如果您使用包管理器(如 `apt` 或 `yum`)安装过 Nginx,文件可能位于标准系统目录(如 `/etc/nginx` 或 `/usr/share/nginx`),而非 `/usr/local/`。引用[^3]提到,在 Ubuntu 中通过 `apt` 安装 Nginx 时,文件默认不放在 `/usr/local/`[^3]。 - **目录权限或残留文件**: `/usr/local/` 通常需要 root 权限写入。如果安装时未使用 `sudo`,或之前安装残留了冲突文件(如旧版本 OpenSSL 库),可能导致安装中断。 #### 2. **诊断与解决步骤** 按照以下步骤排查问题,确保操作在终端中以 root 权限运行(使用 `sudo`): **步骤 1: 检查 Nginx 是否已安装** 运行命令确认 Nginx 的可执行文件位置: ```bash which nginx # 显示二进制文件路径 whereis nginx # 显示所有相关文件路径 ``` - 如果输出路径如 `/usr/sbin/nginx`,说明是包管理器安装。 - 如果无输出或路径不在 `/usr/local/`,继续下一步。 **步骤 2: 验证编译安装过程** 如果您是源码编译安装: - 重新运行配置命令,确保指定 `--prefix=/usr/local/nginx`: ```bash ./configure --prefix=/usr/local/nginx --with-openssl=/usr/local/openssl [其他参数] # 参考引用[^2] ``` - 编译并安装: ```bash make # 检查是否有错误(类似引用[^1]中的链接错误) sudo make install # 必须用sudo写入系统目录 ``` - **关键点**:如果 `make` 报错(如 OpenSSL 库冲突),需解决依赖问题。例如,引用[^1]的错误可通过确保 OpenSSL 版本一致并添加正确链接参数修复[^1]。 **步骤 3: 检查安装日志和目录** - 查看编译日志: ```bash cat objs/autoconf.err # Nginx 编译错误日志 ``` - 手动检查 `/usr/local/nginx/` 是否存在: ```bash ls /usr/local/nginx/ # 如果目录为空,说明安装未完成 ``` **步骤 4: 处理依赖和环境问题** - 卸载冲突包:如果之前用包管理器安装过 Nginx,先移除: ```bash sudo apt remove nginx # Ubuntu/Debian sudo yum remove nginx # CentOS/RedHat ``` - 清理旧文件:删除残留的 Nginx 文件,如 `sudo rm -rf /usr/local/nginx/`。 - 修复库依赖:确保 OpenSSL 等库版本兼容。引用[^1]中的错误可通过重装 OpenSSL 并更新链接解决[^1]。 **步骤 5: 备选方案——使用包管理器安装** 如果编译问题复杂,推荐使用包管理器简化安装(文件将不在 `/usr/local/`): ```bash sudo apt update && sudo apt install nginx # Ubuntu/Debian, 参考引用[^3] sudo yum install epel-release && sudo yum install nginx # CentOS/RedHat ``` 安装后,文件位于 `/etc/nginx/`(配置)、`/usr/share/nginx/`(网页文件)等。 #### 3. **预防措施** - 编译前安装依赖:确保 PCRE、OpenSSL、zlib 等库已正确安装(如 `sudo apt install libpcre3-dev openssl libssl-dev`)。 - 指定完整路径:在 `./configure` 中始终使用 `--prefix` 避免歧义。 - 查看文档:参考 Nginx 官方安装指南。 如果以上步骤未解决,请提供 `make` 错误日志或终端输出,我会进一步协助分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值