Linux 常用目录及其用途

在 Linux 系统中,文件的存放遵循一套约定俗成的标准,称为 文件系统层次结构标准(FHS,Filesystem Hierarchy Standard)。这套标准帮助系统管理员和开发者保持一致,开发相关的文件(源代码、编译产物、下载包、安装的程序等)都有对应的推荐路径。


📁 Linux 常用目录及其用途

首先要知道,通常使用的文件夹有以下几类,

text 复制代码
/
├── bin         # 存放普通用户和系统管理员都可以使用的基本命令(二进制文件)。
├── boot        # 存放启动加载器(如 GRUB)和 Linux 内核文件。
├── dev         # 设备文件,包括终端、磁盘、USB 等硬件设备对应的文件。
├── etc         # 系统配置文件(文本文件),几乎所有的系统配置都在这里。
├── home        # 普通用户的主目录,每个用户一个子目录,如 /home/username。
├── lib         # 存放 /bin 和 /sbin 中命令所需的共享库(类似 Windows 的 DLL)。
├── lib64       # 64 位系统的共享库(在 64 位系统中,通常指向 /lib 或独立存在)。
├── media       # 挂载点,通常用于自动挂载可移动设备(如 U 盘、光盘)。
├── mnt         # 临时挂载点,管理员可以手动挂载文件系统到此目录。
├── opt         # 可选的第三方软件包,通常是大型商业软件或独立安装的程序。
├── proc        # 虚拟文件系统,以文件形式提供内核和进程信息(如进程列表、系统状态)。
├── root        # 超级用户(root)的主目录。
├── run         # 运行时数据,存放自系统启动以来的进程信息(如 PID 文件)。
├── sbin        # 系统管理员使用的系统管理命令(如 fdisk、ifconfig)。
├── srv         # 服务数据目录,存放系统提供的服务数据(如 FTP、Web 服务)。
├── sys         # 虚拟文件系统,与 proc 类似,但更侧重于设备和内核对象的信息。
├── tmp         # 临时文件目录,所有用户可读写,重启后可能被清空。
├── usr         # 用户软件资源,包含大多数用户级应用程序和文件。
└── var         # 可变数据目录,存放日志、缓存等动态数据。

我们开发者常用的文件有 usretchomeopttmpvar 这几个。

📁 /usr 目录结构概览

text 复制代码
/usr
├── bin/          # 大多数用户命令(非系统启动必需)
├── sbin/         # 系统管理命令(非系统启动必需)
├── lib/          # 应用程序的共享库
├── libexec/      # 内部使用的辅助程序(不直接由用户调用)
├── include/      # C/C++ 头文件(用于开发)
├── share/        # 架构无关的共享数据(文档、图标、man 手册等)
├── src/          # 内核源码(可选安装)
├── local/        # 本地管理员安装的软件(类似 /usr 的子目录结构)
└── games/        # 游戏相关文件(可选)

1、/usr/local -- 本地手动安装的软件

当你从源代码编译安装软件时,通常将软件安装在此目录下。它模仿了 /usr 的结构,但专用于本地管理员安装的软件,不会被系统包管理器覆盖。

例如 NginxRedis 等软件安装到 /usr/local 下,可执行文件在 /usr/local/bin,库文件在 /usr/local/lib

手动解压的 JDK 可以放在 /usr/local/java/,然后通过软链链接到 /usr/local/bin

2、/usr/local/src -- 本地编译源码存放处

当你从源代码编译安装软件时,可以将下载的源码包解压到这里,然后在此目录下执行 ./configure && make && sudo make install。安装完成后,源码可以保留或删除。下载的源码压缩包可以先放在 ~/Downloads,解压到 /usr/local/src 后进行编译。

3、/usr/lib -- 应用程序的共享库

当你使用一键安装等方式时安装的 node.jspythonjdk 等都会安装在这个位置。

4、/usr/src -- 源代码存放目录

通常用于存放内核源码或一些需要编译的系统级软件源码。普通开发者很少直接使用。


📁 /home 用户个人工作区

  • 路径:/home/你的用户名/
  • 用途:存放个人文件、项目代码、配置文件、下载的临时安装包等。
  • 权限:该目录归你所有,无需 sudo 即可读写。
  • 推荐:
    • 个人开发的项目代码 → ~/projects/~/workspace/
    • 临时下载的软件包(如 .tar.gz)→ ~/Downloads/(用完可删)
    • 个人使用的脚本或小工具 → ~/bin/(可手动加入 PATH

📁 /opt 第三方软件包

  • 路径:/opt/jdk-17//opt/google/chrome/
  • 用途:用于存放独立的第三方软件,通常是商业软件或大型软件包。每个软件通常有自己独立的子目录,内部包含 binlib 等。
  • 权限:通常需要 sudo
  • 推荐:
    • 从官方下载的预编译软件(如 JDK、Maven、Tomcat)→ 解压到 /opt/软件名-版本/,然后创建符号链接 /opt/软件名 指向它,方便升级。
    • 阿里云扩展程序安装的 JDK 在 /usr/lib/jvm,而不是 /opt,因为它是通过包管理器安装的;但手动安装的 JDK 放在 /opt 也是很常见的做法。

📁 /tmp/var/tmp 临时文件

  • 用途:
    • /tmp:存放临时文件,重启后通常会被清空。
    • /var/tmp:存放持久性更强的临时文件,重启后保留,但可能被系统定期清理。
  • 推荐:
    • 编译过程中的临时文件、一次性脚本输出等可以放在 /tmp
    • 不要将重要数据放在这两个目录下。

📁 /var 可变数据

  • 路径:/var/log(日志)、/var/lib(数据库/应用状态)
  • 用途:存放运行时的可变数据,如日志、数据库文件、缓存等。通常不需要直接操作,但了解这些有助于排查问题(如查看应用日志)。

🧩 开发文件的分类存放建议

文件类型 推荐存放路径 说明
个人项目代码 ~/projects/~/workspace/ 每个项目一个子目录,如 ~/projects/my-web-app/
从网上下载的安装包 (如 .tar.gz.deb ~/Downloads/(临时) 安装后可删除,节省空间
手动编译的软件源码 /usr/local/src/软件名-版本/ 需要 sudo,编译安装后源码可保留也可删除
通过包管理器安装的软件 由系统自动管理,通常位于 /usr/usr/lib 不要手动修改其中的文件
手动安装的独立软件(如 JDK、Tomcat) /opt/软件名-版本/,然后软链接到 /opt/软件名 便于多版本共存和升级
编译安装的软件最终文件 /usr/local/(二进制在 /usr/local/bin,库在 /usr/local/lib 遵循 GNU 惯例
用户个人脚本或可执行文件 ~/bin/(需将 ~/bin 加入 PATH 无需 sudo 即可使用
IDE 配置文件 ~/.config/~/.idea/ 通常是隐藏目录,无需手动管理
系统服务配置文件 /etc/ 或其子目录(如 /etc/nginx/ 需要 sudo 编辑

✅ 最佳实践总结

1、个人开发环境 :优先使用 ~/ 下的目录(如 ~/projects~/Downloads),避免污染系统目录。

2、系统级软件 :尽可能使用包管理器(yum/apt)安装,它们会自动将文件放到正确位置并处理依赖。

3、手动安装的软件

  • 如果需要系统所有用户使用,安装到 /usr/local
  • 如果是独立软件包(如 JDK、IDE、数据库),安装到 /opt
  • 源码编译的中间文件放在 /usr/local/src

4、环境变量配置 :对于手动安装的软件,记得将 bin 目录添加到 PATH(在 ~/.bashrc/etc/profile 中)。

5、保持整洁 :定期清理 ~/Downloads 中的旧安装包,避免磁盘空间浪费。

遵循这些约定,Linux 系统将保持清晰、易于维护,其他开发者也能快速找到需要的文件。

相关推荐
智能工业品检测-奇妙智能2 小时前
化工行业安全体系管理平台如何助力企业实现安全生产标准化
服务器·人工智能·安全·openclaw·奇妙智能
芒果披萨2 小时前
Linux磁盘挂载
linux·运维·服务器
icy、泡芙2 小时前
全志 GPIO BUG
linux·bug
从入门到放弃-咖啡豆2 小时前
服务器部署docker 运行.NET 8 项目
服务器·docker·容器
2401_873587822 小时前
Linux——高级IO
服务器·数据库·php
SMF19192 小时前
【Docker】Linux系统上卸载旧Docker、卸载Podman并重新安装Docker及配置国内镜像源
linux·docker·podman
中科三方2 小时前
实操指南:网站更换服务器IP后,域名解析如何修改和验证?
运维·服务器·tcp/ip
ErizJ2 小时前
面试 | Linux
linux·面试
Rabbit_QL2 小时前
GitHub 多账号 SSH 配置指南:让个人和工作账号共存
运维·ssh·github