作为一名系统运维的工程师,深知 Linux 文件系统结构是 Linux 入门的核心基础,也是后续从事运维、开发工作的“基本功”——无论是排查系统故障、配置服务、部署程序,还是处理文件权限问题,都离不开对文件系统结构的精准理解。很多人刚接触 Linux 时,会被“没有C盘、D盘”“所有文件都在根目录下”的设定搞懵,甚至误删系统文件导致系统崩溃,本质上就是没搞懂 Linux 文件系统的组织逻辑和 FHS 标准。
本文将站在专业运维视角,从“所有人都能能听懂”的角度出发,全方面、细致化拆解Linux 文件系统结构与 FHS 标准,既要讲清“是什么”“在哪里”,更要讲透“为什么这么设计”“实际运维中怎么用”“容易踩哪些坑”,全程结合实际场景举例(比如日志存放、配置文件查找),深度刨析每个目录的核心作用、包含内容、权限特点,确保专业且易懂。
一、前置铺垫:先搞懂2个核心问题
在讲解 Linux 文件系统结构和 FHS 标准之前,必须先解决两个最困惑的问题——这两个问题不搞懂,后续学习只会越学越乱。
1.1 为什么 Linux 没有“C盘、D盘”?
我们从小接触的 Windows 系统,采用的是“多根目录”结构,也就是每个磁盘分区对应一个“盘符”(比如 C盘、D盘、E盘),每个盘符都是一个独立的“根”,文件存放是“分区隔离”的——比如系统文件在 C盘,个人文件在 D盘,软件安装在 E盘,这种结构直观、简单,符合所有人的使用习惯,但缺点是“混乱”:不同软件可能把配置文件、日志文件存放在不同盘符,排查问题时需要逐个盘符查找。
而 Linux 采用的是“单根目录”结构,整个系统只有一个唯一的根目录,用/表示(注意是英文斜杠,不是 Windows 的反斜杠\)。Linux 中没有“盘符”的概念,所有的磁盘分区、外接设备(U盘、移动硬盘)都需要“挂载”到根目录下的某个子目录中,才能被系统识别和使用——相当于把所有的“存储设备”都整合到一个“目录树”中,所有文件和目录都从/出发,层级分明、规范统一。
举个通俗的例子:Windows 就像“多个独立的柜子”,C盘是“系统柜”,D盘是“个人文件柜”,E盘是“软件柜”,找东西需要逐个柜子翻;而Linux 就像“一个大衣柜”,所有的东西(系统文件、个人文件、软件、外接设备)都放在这个大衣柜里,每个东西都有固定的“格子”(子目录),找东西只要知道对应的格子,就能快速找到,这也是 Linux 适合服务器运维的核心原因之一——规范、易管理。
结合实际运维场景:常见的 Linux 服务器,通常会把系统分区挂载到/,把数据分区(存放数据、日志)挂载到/var或/data,这样即使数据分区满了,也不会影响系统分区的正常运行,排查日志时,直接去/var/log目录找即可,不用逐个分区排查。
1.2 什么是 FHS 标准?为什么要有这个标准?
同样是 Linux 系统,CentOS、Ubuntu、RedHat、Debian 这些发行版,目录结构几乎是一样的——比如配置文件都在/etc,日志文件都在/var/log,命令都在/bin或/usr/bin,这并不是巧合,而是因为它们都遵循了同一个“目录规范”——FHS标准。
FHS 的全称是Filesystem Hierarchy Standard(文件系统层次结构标准),简单来说,它就是 Linux 社区制定的一套“目录组织规则”,规定了 Linux 系统中各个目录的名称、位置、作用,以及哪些目录是静态的(内容不会频繁变化)、哪些是动态的(内容会实时更新),目的是“统一所有Linux 发行版的目录结构”,让用户和开发者在不同的 Linux 系统中,都能快速找到需要的文件,降低学习成本和运维成本。
举个例子:如果没有 FHS 标准,CentOS 可能把配置文件放在/etc,而 Ubuntu 可能把配置文件放在/config,那么运维人员切换不同发行版的服务器时,就要重新记目录位置,效率极低;而有了 FHS 标准,无论是什么 Linux 发行版,配置文件都在/etc,日志都在/var/log,运维人员可以直接上手,不用重新适应。
FHS 标准并不是“强制要求”,但几乎所有主流 Linux 发行版都主动遵循了这一标准(只有极少数嵌入式Linux 可能会简化),尤其是服务器版本的Linux,严格遵循 FHS 标准是“规范运维”的基础。这样不同运维人员对接时,都能快速熟悉系统结构,提高故障排查和配置管理的效率。
补充说明:目前主流的 FHS 版本是 FHS 3.0(2015年发布),后续的小版本更新主要是细节优化,核心目录结构没有变化,本文讲解的内容,适用于所有主流 Linux 发行版(CentOS 7/8、Ubuntu 18.04/20.04、RedHat 7/8 等),也适用于我们运维中常用的 Linux 服务器系统。
二、Linux 文件系统结构全景图
Linux 所有目录都从根目录/出发,形成一棵“目录树”,FHS 标准规定了/下必须包含的核心子目录,以及每个子目录的核心作用。先给小白看一张“目录树简化图”,建立整体认知:
/(根目录)├─ bin(系统必备命令,任何人可执行)├─ sbin(系统管理员必备命令,普通用户不可执行)├─ etc(系统所有配置文件存放目录)├─ home(普通用户的家目录,每个用户一个子目录)├─ root(超级管理员 root 的家目录,普通用户无权访问)├─ var(动态文件目录,日志、缓存、临时文件等)├─ usr(用户程序目录,系统自带软件、第三方软件都在这里)├─ tmp(临时文件目录,所有用户可读写,重启后内容清空)├─ boot(系统启动目录,存放内核、启动配置文件)├─ dev(设备文件目录,所有硬件设备都以文件形式存在这里)├─ proc(虚拟文件目录,存放系统运行时的实时信息,不占用磁盘空间)├─ sys(虚拟文件目录,存放硬件设备的驱动信息,不占用磁盘空间)├─ mnt(临时挂载目录,用于挂载U盘、移动硬盘等外接设备)└─ media(自动挂载目录,系统会自动识别外接设备并挂载到这里)
这是最核心的目录结构,不需要一次性记住所有目录,重点是先记住“每个目录的核心作用”,后续通过实操慢慢熟悉。接下来,我们逐个目录深度剖析,每个目录都从“核心作用、包含内容、实操案例、误区”四个维度讲解,确保细致易懂。
三、核心目录深度剖析(FHS 标准重点,必学)
FHS 标准将/下的目录分为两类:静态目录和动态目录。静态目录:内容不会频繁变化,比如/bin、/etc、/usr,这些目录的内容主要是系统安装时自带的,后续只有管理员手动修改才会变化;动态目录:内容会实时更新,比如/var、/tmp、/proc,这些目录的内容会随着系统运行、程序启动而不断变化(比如日志文件会持续增加,临时文件会不断创建和删除)。
下面我们按照“静态目录→动态目录”的顺序,逐个讲解核心目录,结合运维场景举例。
3.1 根目录:/(所有目录的“祖先”,重中之重)
根目录是 Linux 文件系统的“顶层目录”,所有的目录、文件、设备都直接或间接挂载在/下,没有/,Linux 系统就无法运行——相当于Windows 系统中所有盘符的“总和”,但它本身不是一个分区,而是一个“目录树的顶点”。
3.1.1 核心作用
1. 作为所有目录的父目录,所有子目录都从/衍生;2. 挂载所有存储设备(硬盘分区、U盘、移动硬盘等),所有设备必须挂载到/ 下的某个子目录,才能被系统识别;3. 存放系统最核心的目录(比如/bin、/sbin、/etc),确保系统启动和基本运行。
3.1.2 注意事项
1. 根目录的空间不能占满!如果/的空间被占满(比如达到100%),Linux 系统会变得非常卡顿,甚至无法正常启动、无法执行命令。在运维中,我们会定期检查/的空间使用情况(用df -h命令),避免出现空间占满的问题。2. 不要随意在根目录下创建文件或目录!根目录是系统核心目录,随意创建文件会导致目录树混乱,后续排查问题时难以定位,正确的做法是:个人文件放在/home,临时文件放在/tmp,软件安装放在/usr或/opt。3. 根目录的权限是rwxr-xr-x(后续讲解权限时会详细说),普通用户只有“读、执行”权限,没有“写”权限,只有 root 用户才有写权限——这是系统的保护机制,防止普通用户误删根目录下的核心文件,导致系统崩溃。
3.1.3 实操案例
查看根目录的空间使用情况:执行命令df -h /,输出结果如下(简化版):FilesystemSizeUsed Avail Use% Mounted on/dev/sda150G12G35G26% /解释:/dev/sda1是系统分区,挂载到/,总大小50G,已使用12G,剩余35G,使用率26%,属于正常范围;如果使用率超过90%,就需要清理空间(比如删除/var/log下的旧日志)。
3.1.4 误区
误区1:把/当成“系统分区”——错!/是目录树的根,不是分区,系统分区是挂载到/下的(比如上面案例中的/dev/sda1),一个系统可以有多个分区,分别挂载到不同的子目录(比如/var单独挂载一个分区)。误区2:认为根目录下的文件越多,系统越慢——错!系统速度和根目录下的文件数量无关,和“根目录所在分区的空间使用率”“系统进程”有关,只要根目录空间充足,文件数量多一点不影响系统运行。
3.2 静态目录详解
静态目录的核心特点是“内容稳定,不会频繁变化”,主要存放系统必备的命令、配置文件、程序文件,这些目录是系统正常运行的基础,修改时需要格外谨慎(尤其是/etc、/boot目录)。
3.2.1 系统命令目录:/bin和/sbin(系统必备,缺一不可)
/bin和/sbin都是存放Linux 系统命令的目录,核心区别是“使用权限”和“命令用途”,容易混淆,我们放在一起讲解,对比着理解。
(1)/bin目录(Binary 的缩写,二进制命令目录)
核心作用:存放系统必备的基础命令,这些命令是所有用户(包括普通用户和 root 用户)都能执行的,用于完成日常最基本的操作(比如查看目录、创建文件、复制文件),系统启动时,/bin目录会被优先加载,即使没有其他目录(比如/usr挂载失败),/bin下的命令也能正常使用,确保系统能正常启动和应急操作。
包含的常见命令:- ls:查看目录内容(最常用命令);- cd:切换目录(最常用命令);- pwd:查看当前所在目录路径;- cp:复制文件或目录;- mv:移动或重命名文件/目录;- rm:删除文件/目录(危险命令,小白慎用);- cat:查看文件内容;- echo:输出内容到终端或文件;- sh:启动shell终端(系统默认shell)。
注意事项:1. /bin下的命令都是“系统必备”,不能随意删除,删除任何一个命令都可能导致系统异常(比如删除ls命令,就无法查看目录内容);2. /bin下的命令都是“二进制文件”(可直接执行),不是文本文件,不能用记事本打开编辑。
(2)/sbin目录(Superuser Binary 的缩写,超级用户命令目录)
核心作用:存放系统管理员(root 用户)必备的管理命令,这些命令主要用于系统管理、故障排查、服务配置(比如启动/停止服务、格式化磁盘、挂载分区),普通用户没有权限执行这些命令(执行会提示“权限不足”),只有切换到 root 用户(用su - root命令)才能执行。
包含的常见命令(运维常用):- systemctl:管理系统服务(比如启动 sshd 服务:systemctl start sshd);- mount:手动挂载存储设备(比如挂载U盘:mount /dev/sdb1 /mnt/usb);- umount:卸载存储设备(比如卸载U盘:umount /mnt/usb);- fdisk:分区管理命令(查看磁盘分区、创建分区);- mkfs:格式化磁盘分区(比如格式化U盘为ext4 格式:mkfs.ext4 /dev/sdb1);- reboot:重启系统;- shutdown:关闭系统;- ifconfig:查看/配置网络(部分系统已被ip命令替代)。
注意事项:1. /sbin下的命令都是“高危命令”,比如fdisk、mkfs、shutdown,执行错误会导致系统崩溃、数据丢失,我们运维中执行这些命令时,都会先备份数据,再谨慎操作;2. 普通用户执行/sbin下的命令时,会提示“Permission denied”(权限不足),此时需要切换到 root 用户,或者在命令前加sudo(前提是普通用户有 sudo 权限);3. /sbin和/bin的区别:简单记“bin 是所有人能用的基础命令,sbin 是 root 能用的管理命令”。
实操案例
案例1:普通用户执行reboot命令(/sbin/reboot),提示权限不足:[yy@localhost ~]$ rebootreboot: 权限不够切换到 root 用户后,执行成功:[yy@localhost ~]$ su - root[root@localhost ~]# reboot系统开始重启。
案例2:查看/bin和/sbin下的命令数量:[root@localhost ~]# ls /bin | wc -l156(不同系统数量略有差异)[root@localhost ~]# ls /sbin | wc -l287(不同系统数量略有差异)
误区
误区1:认为/bin和/sbin可以合并——错!两者的权限和用途完全不同,分开存放是为了“权限隔离”,防止普通用户误执行高危命令(比如shutdown),保护系统安全;误区2:删除/sbin下不常用的命令——错!即使某个命令平时不用,也是系统必备的(比如fsck命令,用于修复文件系统故障,平时不用,但系统出现故障时必须用),删除后会导致系统无法正常排查和修复故障;误区3:普通用户无法执行任何/sbin下的命令——不完全对!部分命令(比如ifconfig),普通用户可以执行“查看”操作,但无法执行“修改”操作(比如修改IP地址)。
3.2.2 系统配置文件目录:/etc(Everything to configure,重中之重)
/etc是Linux 系统中“配置文件的集中存放地”,几乎所有系统服务、应用程序的配置文件都在这里,无论是系统网络配置、用户配置,还是服务(比如 sshd、nginx)的配置,都可以在/etc目录下找到对应的配置文件。对于运维人员来说,/etc目录是“日常操作最多的目录之一”——配置服务、排查配置故障,本质上就是修改/etc下的配置文件。
核心作用:存放系统所有静态配置文件,这些配置文件是文本文件,可以用编辑器(比如 vi、vim)修改,修改后通常需要重启对应的服务,配置才能生效。
包含的核心子目录和配置文件(运维常用):1. 系统用户配置文件:- /etc/passwd:存放所有用户的基本信息(用户名、用户ID、家目录、登录shell等),所有用户都能查看,不能修改(修改会导致用户无法登录);- /etc/shadow:存放用户的密码信息(加密存储),只有 root 用户能查看和修改,普通用户无权访问(保护密码安全);- /etc/group:存放用户组的信息,所有用户都能查看。
2. 系统网络配置文件:- /etc/sysconfig/network-scripts/ifcfg-eth0(CentOS 系统):网卡配置文件,存放IP地址、子网掩码、网关、DNS等信息,修改后需要重启网络服务(systemctl restart network)才能生效;- /etc/resolv.conf:DNS配置文件,存放DNS服务器地址,修改后立即生效(无需重启服务);- /etc/hosts:本地主机映射文件,用于将主机名映射到IP地址(比如会把服务器主机名和IP映射到这里,避免DNS解析失败)。
3. 系统服务配置文件:- /etc/systemd/system/:系统服务的自定义配置目录(比如监控服务,会在这里创建配置文件,设置开机自启);- /etc/ssh/sshd_config:ssh服务的配置文件(比如修改ssh端口、禁止root用户登录,都是修改这个文件);- /etc/fstab:系统挂载配置文件,存放系统启动时自动挂载的分区信息(比如服务器的/var分区,会在这里配置自动挂载,避免重启后挂载失效)。
4. 其他常用配置文件:- /etc/profile:系统全局环境变量配置文件,修改后对所有用户生效(比如配置Java环境变量,会在这里添加配置);- /etc/bashrc:bash shell的配置文件,修改后对所有使用bash shell的用户生效;- /etc/rc.local:系统启动后自动执行的命令文件(比如监控脚本,会在这里添加执行命令,实现开机自启)。
注意事项(运维重点):1. /etc下的配置文件都是“文本文件”,可以用 vi/vim 编辑器修改,但修改前一定要备份!比如修改sshd_config文件前,先执行cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,备份原文件,一旦修改错误,可恢复原文件(运维中,修改任何配置文件都会先备份,避免配置错误导致服务中断);2. 修改配置文件后,大部分服务需要重启才能生效(比如修改sshd_config后,需要执行systemctl restart sshd重启ssh服务);3. /etc目录的权限是rwxr-xr-x,普通用户只有“读、执行”权限,没有“写”权限,只有 root 用户才能修改配置文件——这是系统的保护机制,防止普通用户误改配置文件,导致系统异常;4. 不要随意删除/etc下的任何文件或目录,即使是“看起来没用”的文件,也可能是系统或服务的必备配置,删除后会导致服务无法启动、系统异常。
实操案例
案例1:修改网卡IP地址:1. 备份网卡配置文件:[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak2. 编辑网卡配置文件:[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth03. 修改IP地址相关配置(比如将IP改为192.168.1.100):IPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.84. 保存退出,重启网络服务:[root@localhost ~]# systemctl restart network5. 验证IP是否修改成功:[root@localhost ~]# ip addr show eth0
案例2:备份/etc/fstab文件(防止挂载配置错误):[root@localhost ~]# cp /etc/fstab /etc/fstab.bak说明:/etc/fstab文件如果配置错误,系统重启后会无法正常挂载分区,导致系统无法启动,因此修改前必须备份,这是我们运维的“必备操作”。
误区
误区1:修改/etc下的配置文件后,直接生效——错!大部分配置文件修改后,需要重启对应的服务才能生效(比如修改 sshd_config 后,必须重启 sshd 服务),只有少数配置文件(比如 /etc/resolv.conf)修改后立即生效;误区2:用记事本打开/etc下的配置文件——错!Windows 记事本会自动添加“换行符”(CRLF),而 Linux 系统的配置文件要求换行符是“LF”,用记事本打开编辑后,配置文件会出现格式错误,导致服务无法识别,正确的做法是用 Linux 自带的 vi/vim 编辑器,或者用 Notepad++(Windows 下),并设置换行符为 LF;误区3:删除/etc下的备份文件——错!备份文件是“应急保障”,一旦修改的配置文件出现错误,需要用备份文件恢复,因此备份文件要妥善保存,不要随意删除;误区4:认为/etc下的文件都是系统自带的——错!第三方软件安装后,也会在/etc下创建对应的配置目录或文件。
3.2.3 用户家目录:/home和/root
Linux 是“多用户操作系统”,每个用户都有自己的“家目录”,用于存放个人文件、个人配置、个人软件等,相当于 Windows 系统中“我的文档”目录,不同用户的家目录相互独立,普通用户只能访问自己的家目录,无法访问其他用户的家目录(除非有特殊权限),root 用户可以访问所有用户的家目录。
(1)/home目录(普通用户的家目录集合)
核心作用:存放所有普通用户的家目录,系统创建普通用户时,会自动在/home目录下创建一个与“用户名相同”的子目录,作为该用户的家目录,比如创建一个用户名为yy的用户,系统会自动创建/home/yy目录,作为yy用户的家目录。
家目录的特点:1. 普通用户对自己的家目录拥有“读、写、执行”所有权限,可以在自己的家目录下创建、删除、修改文件和目录,不受限制;2. 普通用户无法访问其他普通用户的家目录(比如yy用户无法访问/home/test目录,除非test用户授权);3. 家目录下通常会有一些默认的隐藏文件(文件名以.开头),用于存放用户的个人配置(比如.bashrc是yy用户的bash 配置文件,.vimrc是 vim 编辑器的个人配置文件);4. 普通用户的家目录路径可以通过echo $HOME命令查看(比如yy用户执行该命令,输出/home/yy)。
(2)/root目录(超级管理员 root 的家目录)
核心作用:root 用户的家目录,用于存放 root 用户的个人文件、个人配置、管理员脚本等,相当于“管理员的专属空间”,和/home目录的区别是:/root目录不在/home下,而是直接在根目录/下,这是因为 root 用户是系统最高权限用户,需要和普通用户的家目录分开,确保 root 用户的文件安全。
注意事项(运维重点):1. /root目录的权限是rwx------,只有 root 用户拥有“读、写、执行”权限,所有普通用户都无权访问(即使是查看目录内容也不行)——这是系统的核心安全机制,防止普通用户查看或修改 root 用户的文件(比如 root 用户的脚本、配置文件);2. 不要随意删除/root目录下的文件,尤其是隐藏配置文件(比如.bashrc、.profile),删除后会导致 root 用户的 shell 配置异常,影响管理员操作;3. 运维中,一般会在/root目录下存放管理员脚本(比如数据备份脚本、故障排查脚本),这些脚本只有 root 用户能执行,确保脚本的安全性和权限控制。
实操案例
案例1:查看普通用户yy的家目录,并创建个人文件:[yy@localhost ~]$ echo $HOME# 查看家目录路径/home/yy[yy@localhost ~]$ cd $HOME# 切换到自己的家目录[yy@localhost ~]$ touch test.txt# 创建个人文件[yy@localhost ~]$ ls# 查看创建的文件test.txt
案例2:普通用户尝试访问/root目录,提示权限不足:[yy@localhost ~]$ cd /root-bash: cd: /root: 权限不够
案例3:root用户访问/home/yy目录,并查看文件:[root@localhost ~]# cd /home/yy[root@localhost yy]# lstest.txt[root@localhost yy]# touch root_test.txt# root 用户可以在普通用户家目录创建文件
误区
误区1:普通用户可以访问/root目录——错!/root目录的权限是rwx------,普通用户无权访问,只有 root 用户能访问;误区2:root 用户的家目录在/home/root——错!root用户的家目录是/root,直接在根目录下,不在/home下;误区3:可以随意删除普通用户的家目录——错!删除普通用户的家目录,会导致该用户的个人文件、个人配置全部丢失,正确的做法是:删除用户时,用userdel -r 用户名命令,同时删除用户和其家目录(比如userdel -r yy,会删除yy用户和/home/yy目录);误区4:隐藏文件没用,可以删除——错!家目录下的隐藏文件(比如.bashrc)是用户的个人配置文件,删除后会导致 shell 配置异常(比如命令提示符显示异常、自定义别名失效)。
3.2.4 程序文件目录:/usr(User System Resources,用户系统资源)
/usr目录是Linux 系统中“程序文件的集中存放地”,相当于Windows 系统中的C:\Program Files目录,存放系统自带的软件、第三方软件、程序库、帮助文档等,FHS 标准规定,/usr目录下的内容是“静态的”(不会频繁变化),除非安装或卸载软件,否则/usr下的内容不会改变。
/usr目录是Linux 中最大的目录之一,包含多个核心子目录,每个子目录都有明确的用途,我们重点讲解常用的子目录。
核心子目录详解(运维常用):1. /usr/bin:用户安装的普通命令目录,存放第三方软件的命令(比如安装 Python 后,python命令会在/usr/bin下),和/bin目录的区别是:/bin是系统自带的基础命令,/usr/bin是用户安装的命令,所有用户都能执行;2. /usr/sbin:用户安装的管理员命令目录,存放第三方软件的管理员命令(比如安装 nginx 后,nginx的管理员命令会在/usr/sbin下),和/sbin目录的区别是:/sbin是系统自带的管理员命令,/usr/sbin是用户安装的管理员命令,只有 root 用户能执行;3. /usr/lib:程序库目录,存放软件运行时需要的共享库(相当于 Windows 系统中的.dll文件),软件运行时会自动从这里加载所需的库文件,如果缺少对应的库文件,软件会无法运行;4. /usr/lib64:64位程序库目录,在64位 Linux 系统中,存放64位软件的共享库,32位软件的共享库存放在/usr/lib下;5. /usr/local:第三方软件安装目录,这是我们运维中最常用的目录之一,手动安装的第三方软件(比如源码安装的 zabbix、Python),通常会安装到/usr/local下(比如/usr/local/python3、/usr/local/zabbix),这样可以和系统自带的软件分开,方便管理和卸载;6. /usr/share:共享资源目录,存放软件的帮助文档、语言包、图标等共享资源(比如/usr/share/man是命令的帮助文档目录,执行man ls命令,会从这里加载 ls 命令的帮助文档);7. /usr/include:头文件目录,存放 C/C++ 编译时需要的头文件,主要用于软件开发(运维人员了解即可)。
注意事项:1. /usr目录的空间通常较大,因为存放了大量的软件和库文件,我们服务器的/usr目录,通常会分配较大的磁盘空间(比如50-100G),避免软件安装时空间不足;2. 不要随意删除/usr下的文件或目录,尤其是/usr/bin、/usr/lib目录,删除后会导致软件无法运行、命令无法执行(比如删除/usr/bin/python,会导致 Python 无法使用);3. 手动安装第三方软件时,优先安装到/usr/local下,这样可以避免和系统自带软件冲突(比如系统自带 Python 2.7,我们需要安装 Python 3.9,就安装到/usr/local/python3下,不会覆盖系统自带的 Python 2.7);4. /usr/local目录的权限是rwxr-xr-x,普通用户只有“读、执行”权限,安装软件时需要切换到 root 用户,或者用sudo权限。
实操案例
案例1:查看/usr/local目录,创建Python 安装目录:[root@localhost ~]# ls /usr/localbinetcgamesincludeliblib64libexecsbinsharesrc[root@localhost ~]# mkdir /usr/local/python3# 创建 Python 安装目录
案例2:查看/usr/bin下的Python 命令,确认软件安装路径:[root@localhost ~]# which python3# 查看 python3 命令的路径/usr/bin/python3[root@localhost ~]# ls -l /usr/bin/python3# 查看命令的软链接(后续讲解软链接)lrwxrwxrwx. 1 root root 9 10月 10 10:00 /usr/bin/python3 -> python3.9
案例3:查看命令的帮助文档(从/usr/share/man加载):[root@localhost ~]# man ls# 查看 ls 命令的帮助文档,按 q 退出
误区
误区1:/usr/bin和/bin可以混用——错!/bin是系统自带的基础命令,/usr/bin是用户安装的命令,虽然两者的命令都能直接执行,但分开存放是为了“区分系统命令和用户命令”,方便管理和排查问题(比如某个命令无法执行,先判断是系统命令还是用户安装的命令,再去对应的目录排查);误区2:软件可以随便安装到/usr下的任何目录——错!软件安装有固定的规范,比如命令放在/usr/bin或/usr/local/bin,库文件放在/usr/lib或/usr/local/lib,如果随便安装,会导致目录树混乱,后续卸载软件时无法彻底删除(比如源码安装的软件,安装路径不规范,卸载时只能手动删除所有相关文件);误区3:/usr/local目录没用——错!/usr/local是第三方软件的“标准安装目录”,运维人员手动安装软件时,都会优先选择这里,方便管理和卸载,是运维工作中最常用的目录之一。