Linux目录配置与FHS标准

一:什么是FHS标准

  FHS(Filesystem Hierarchy Standard)是一个在Linux系统上的文件组织结构的标准。它规定了不同目录应该存放哪些类型的文件和它们的用途。主要是为了提供一个统一的文件系统布局,使得软件开发者和系统管理员能够在不同的Linux系统上更容易地理解每个文件夹的作用。

注:本文主要针对FHS3.0来说明!

FHS针对目录树架构仅定义出三个目录下应该放置哪些数据,分别是下面三个目录:
    /(根目录):
        根目录是整个文件系统的起点,与开机系统有关。在根目录下存放着其它所有的目录和文件。
        一些重要的子目录包括 /bin、/etc、/home、/usr、/var等,它们存放着不同类型的文件和目录。
    /usr(unix software resource):
        此目录与软件安装和执行相关。它是用来存放用户和共享的只读数据,包括程序文件、文档和库文件等。
        在/usr目录下,通常包含了一系列子目录:
            如/usr/bin存放可执行的用户命令,/usr/lib存放共享库文件,/usr/share存放共享数据,/usr/include存放头文件等。
    /var(variable):与系统运作过程有关。
        此目录与系统运行过程中的变化有关。它主要存放经常变化的文件,如日志文件、缓存文件、临时文件等。
        在/var目录下,常见的子目录包括/var/log存放日志文件,/var/cache存放缓存文件,/var/tmp存放临时文件等。
        这些文件可能会在系统运作过程中不断地被修改、增加或删除。

注:我们用户禁止在 /(根目录)下创建任意文件和文件夹,要严格遵循FHS指定的规范并存放指定目录里。

二:一切从根目录 (/) 开始

  其实Linux启动时先把内核装载到内存中,然后再由内核去扫描激活树结构目录(这里就是 / 根目录);根目录是整个系统最重要的一个目录,因为所有的目录都是由根目录衍生出来的,同时根目录也与开机、还原和系统修复等动作有关。由于系统开机时需要特定的开机软件、核心文件、开机所需程序、函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。因为根目录是这么的重要,所以在FHS的要求方面,它希望根目录不要放在非常大的分区,因为越大的分区内你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会。因此FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好,这就可以保证根目录所在的文件系统也较不容易发生问题。说白了就是根目录和Windows的C盘一个样。

注:因为根目录与开机有关,开机过程中仅有根目录会被挂载,其它分区则是在开机完成之后才会持续的进行挂载。因此根目录下与开机过程有关的
目录,就不能够与根目录放到不同的分区去。
补充:内核如何再开机时被加载到内存:   其实在开机启动的过程是由引导加载程序(Boot Loader)负责的。引导加载程序是位于硬盘的引导扇区(通常为第一个物理扇区)中的一段代
  码,它会在系统加电启动时首先加载到内存,并负责加载操作系统内核。   最常见的Linux引导加载程序是GRUB(GRand Unified Bootloader),它是用于多操作系统的通用引导加载程序。   当计算机启动时,BIOS或UEFI会根据设定的启动顺序选择引导设备,并读取该设备的引导扇区。如果使用的是GRUB,那么引导扇区中的GRUB代
  码就会被加载到内存中。GRUB会提供一个菜单,列出可用的操作系统和内核映像。用户可以选择要启动的操作系统或内核。然后GRUB会根据用户
  的选择将相应的内核映像加载到内存中,并通过指定的命令行参数启动内核。因此,可以说Linux内核的启动是通过引导加载程序(如GRUB)来
  完成的。引导加载程序负责加载内核并传递控制权给内核,从而启动整个 Linux 系统。
注:这下面的五个目录是不可以与根目录分开存储在不同的分区位置(保证在一个分区下) /etc:存放系统的配置文件。 /bin:存放可执行的重要系统命令。 /dev:所需要的设备文件,用于与设备进行通信。 /lib:执行系统命令所需的函式库与核心所需的模块。 /sbin:存放系统管理员使用的系统命令,如备份、修复等。
遵循FHS的根目录下必须存在的一些目录文件基本说明: bin:
包含一些基本的命令二进制文件(可执行文件),这些文件通常可由所有用户执行。 boot: 存放引导加载程序(如GRUB)和内核的静态文件,用于系统启动时加载。 dev: 包含设备文件,用于表示和访问系统中的硬件设备,例如磁盘、串口、USB 设备等。 etc: 存放主机特定的系统配置文件,包括网络配置、软件配置以及其它系统-wide的配置选项。 lib: 包含一些基本的共享库和内核模块,这些库和模块供其它程序使用。 media: 是可移动媒体的挂载点,当插入可移动存储介质(如光盘、USB驱动器)时,这个目录会自动挂载。 mnt: 是一个用于临时挂载文件系统的目录。可以将其它文件系统(如移动硬盘、网络文件系统)挂载到这个目录下。 opt: 用于安装额外的应用程序软件包的目录,这些软件包通常不是系统自带的,而是后来添加的。 run: 存放与当前正在运行的进程相关的数据,如进程ID文件等。 sbin: 含有一些基本的系统二进制文件,用于系统管理和维护任务,只有系统管理员才能执行。 srv: 包含由系统提供的服务所需的数据,例如Web服务器的网页文件。 tmp: 用于存放临时文件的目录,这些文件在系统重启时可能会被清理掉(30天未查看修改则清理)。 usr: 是一个次要的目录层次结构,它类似于根目录(/),包含用户安装的应用程序、库文件、文档和其它非系统关键文件。 var: 包含一些变量数据,如日志文件、邮件、缓存和数据库等,这些数据可能会随着系统的运行而发生变化。

三:/bin目录

在Linux系统中,/bin目录是一个非常重要的目录,它包含了一些基本的命令二进制文件(可执行文件),这些文件可由所有用户执行:
    ①:常见命令二进制文件:
        在/bin目录中,你会找到许多常见的命令二进制文件如:ls、cp、mv、rm、cat、chmod、chown等。
        这些命令用于执行基本的文件操作、查看和修改文件权限、拷贝和移动文件等。
    ②:系统关键命令:
        在/bin目录中还有一些系统关键命令如:bash、sh等。bash和sh是Linux的命令行解释器,用于执行命令行操作;
            运行简单的命令:bash -c 'echo Hello, World!'
            执行脚本文件:bash script.sh (假设 script.sh 是一个脚本文件)
    ③:不需要超级用户权限:
        在/bin目录中的命令大多数不需要超级用户权限就可以执行,任何用户都可以使用这些命令来进行基本的系统操作。
    ④:无需配置环境变量:
        在/bin目录中的命令通常已经存在系统的环境变量中,这意味着你可以从任何位置使用这些命令,而不需要指定完整路径。
            例如可以在任意命令行中地方直接输入 "ls",而不是 "/bin/ls"。
注意:/bin目录中的命令是针对系统的基本操作和功能而设计的,它们通常具有较少的选项和功能,也是系统启动的必要程序。
更高级或专业的命令可能存放在其它目录,如/usr/bin、/sbin、/usr/sbin等。如果你需要更多功能或专业性的命令,请查看这些目录。

四:/sbin目录

  在Linux系统中有一个/sbin的特定目录,用于存放root用户使用的系统命令和可执行文件。它包括了开机、修复、还原系统等所需要的管理和维护命令,因此对普通用户来说,该目录下的命令一般不可直接执行。

/sbin与/bin目录类似,都是一个个二进制文件,也是系统启动过程中所需的基本命令及工具的位置。
但/sbin目录下的所有命令需要管理员权限才能运行,并且它们通常用于系统配置、网络管理、服务管理等系统级任务。
/sbin目录下常见的一些命令和工具示例:
    reboot:重启系统          shutdown:关闭系统          ifconfig:配置网络接口
    mount:挂载文件系统        fsck:检查和修复文件系统      useradd:添加用户账户
    chroot:创建一个隔离的环境  ip:显示或修改网络接口配置     sysctl:动态地修改内核参数
    service:启动、停止或重新加载系统服务
注意:为了执行/sbin目录下的命令,通常需要具备root权限。普通用户可以使用sudo命令以超级用户身份执行这些命令。
例如:sudo /sbin/reboot 将以管理员身份重启系统。
谨慎使用/sbin目录下的命令,以免对系统造成不可逆的影响。

五:/etc目录

  系统主要的配置文件几乎都放置在这个目录内,例如用户的账号密码、服务的启动配置文件等。这个/etc目录下的所有文件必须是静态的,不能是可执行的二进制文件。一般来说,这个目录下的各个文件属性是可以让一般用户查阅的,但只有root有权利修改。
注:若安装服务后,建议将配置文件存储在etc的子目录中,而不是直接存储在etc目录中。

如:yum的配置文件就在/etc/yum/xx.conf下。

/etc是一个非常重要的目录,用于存放系统的配置文件。它包含了各种应用程序、服务以及操作系统本身的配置信息。以下是对/etc目录部分介绍:
    ## 系统自带的配置
        /etc/passwd:包含用户账户的基本信息,如用户名、用户 ID、用户所属的组 ID、用户的家目录等。
        /etc/group:包含用户组的信息,如组名、组 ID 和该组下的用户列表。
        /etc/shadow:包含加密后的用户密码信息,只有超级用户才能访问。
        /etc/hosts:用于将IP地址解析为对应的主机名,也可以进行反向解析。
        /etc/hostname:存储当前系统的主机名。
        /etc/resolv.conf:指定用于域名解析的DNS服务器地址。
        /etc/sudoers:配置允许使用sudo命令的用户和相关权限。
        /etc/motd:系统登录时显示的消息,可用于提供系统公告或欢迎信息。
        /etc/ssh:SSH服务器的配置文件和密钥等相关文件。
        /etc/sysctl.conf:用于设置内核参数和网络参数的配置文件。
    ## 后续自定义使用RPM安装的服务
        /etc/nginx:nginx服务器的配置目录,包含了网站和虚拟主机的配置文件。
        /etc/my.cnf:MySQL的配置文件
还有许多其它应用程序和服务也将其配置文件放在/etc目录下。这些配置文件的功能各不相同,但它们都起到了关键的作用,通过修改这些配置文件,
可以对系统进行定制和优化。
注意:在对/etc目录进行任何更改之前,请务必备份重要的配置文件,并小心操作,以免影响系统的稳定性和安全性。

六:/home/root目录

/home目录在FHS规范中并不是强制要求的,任何一个Linux系统我们需要先查询是否存在/home后再去进行使用它。
/home目录是用于存储用户个人文件的主目录。每个用户在系统中都有一个对应的子目录,
    /home/<username>:
      该目录是每个用户的个人主目录,其中 <username> 是实际的用户名。每个用户登录后,会自动进入自己的个人主目录。 ~ 符号:
      在命令行中 ~ 符号代表当前用户的个人主目录。例如,~/documents 表示当前用户的 "documents" 子目录。 文件权限:
      用户个人主目录对其他用户默认为不可读取、不可写入和不可执行的,只有拥有者本人才具有相应的权限。 举例:创建一个tom的用户,那么就会自动创建一个/home/tom的目录,登录tom用户就默认在“~”目录下,“~”目录就等于/home/tom 注意:/home目录只存储用户的个人文件和设置,不应该用于存放系统或共享数据。 /root目录是超级用户(即管理员)的家目录。与其它用户的个人主目录(如 /home/<username>)不同,/root目录是系统管理员的专用目录 超级用户的家目录:
    /root是系统管理员(root用户)的默认主目录。 文件权限:
    /root目录对其它用户默认为不可读取、不可写入和不可执行的,只有超级用户本人才具有相应的权限。 系统维护和管理:
    /root目录经常用于存储与系统维护和管理相关的脚本和工具。
    超级用户可以在该目录下创建脚本和工具,用于自动化和简化系统管理任务如备份脚本、安全性审计工具等。 重要文件和配置:
    由于超级用户具有对整个系统的控制权,因此/root目录可能包含一些重要的文件和配置。     这些文件可能包括系统日志、配置文件备份、密钥文件等与整个系统的安全性和运行有关的文件。 注意:建议只在必要的情况下使用超级用户权限进行操作。 对于普通任务和日常使用,请使用普通用户帐户,并使用sudo命令获取临时的超级用户访问权限。 总结/root目录是Linux系统中超级用户(管理员)的家目录,用于存储管理员的个人配置文件、系统维护脚本和重要的系统文件。

七:/tmp目录

/tmp是一个特殊的目录,用于存储临时文件。任何用户和进程都可以在其中创建、读取和修改临时文件。
    基本用途:
        /tmp目录被设计为临时文件的存放位置。临时文件是在程序运行期间生成的,并在不再需要时被删除。
        一些常见的用例包括临时数据、临时缓存、套接字文件等。
    全局可访问:
        /tmp目录是全局可访问的,所有用户和进程都可以在其中进行创建、删除、修改、查询操作。这意味着不同用户之间可以共享临时文件。
        注意:当前用户只能查看其它用户创建的临时文件,不可更新和删除别人创建的文件
    清理策略:
        根据不同的Linux发行版和配置,/tmp目录的清理策略可能会有所不同。
        有些系统会在启动时自动清理该目录或一个月未操作文件则会自动删除该文件,而其它系统则可能依赖管理员或定时任务来定期清理。
注意:由于/tmp目录是全局可访问的,需要小心保护其中的文件和数据,避免敏感信息泄露或被恶意操作。

八:/boot目录

/boot目录主要放置开机会使用到的文件,包括Linux内核文件以及开机菜单与开机所需配置文件等。
    内核文件(vmlinuz):
        最重要的文件之一,通常命名为vmlinuz或类似的名称。
        内核是操作系统的核心,它管理计算机的硬件资源、提供驱动程序并执行关键的系统功能。
    初始RAM磁盘(initrd或initramfs):
        此目录还包含了一个初始RAM磁盘,也称为initrd或initramfs。
        这是一个临时文件系统映像,用于在系统启动过程中提供必要的工具、模块和文件。
        它主要用于在加载真正的根文件系统之前做准备工作,例如加载必要的驱动程序和模块等。
    引导加载程序(bootloader)配置文件:
        引导加载程序负责在系统启动时加载操作系统。配置文件(如GRUB的grub.cfg或LILO的lilo.conf)位于/boot目录中。
        这些配置文件决定了引导加载程序应该从哪个设备启动,并包含其它启动参数和选项。
    内核模块文件:
        Linux内核支持模块化,允许在运行时加载和卸载特定的功能模块。
        /boot目录中可能还包含与系统硬件相关的内核模块文件,这些文件可以根据需要加载到内核中。
总结:此目录是一个存放系统启动所需文件的位置。它包含了内核文件、初始 RAM 磁盘、引导加载程序配置文件和其他启动相关文件。
注:当Linux被正确启动后,此目录也没啥用处了,然后等下次启动时发挥作用

九:/dev目录

在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中的。你只要通过访问这个目录下面的某个文件,就等于访问某个设备。
    设备文件:
        在Linux中,设备(硬件设备、虚拟设备和伪设备)都被抽象为文件的概念。设备文件是与这些设备相关联的特殊文件,用于与设备进行交互。
        在/dev目录中,每个连接到计算机的设备都表示为一个文件或一个文件夹。
    块设备和字符设备:
        设备文件可以是块设备或字符设备。块设备(如硬盘驱动器)以固定大小的数据块进行访问,而字符设备(如串口)以字符流的形式进行访问。
        在/dev目录中,块设备通常具有sda, sdb等命名约定,而字符设备通常具有tty1,ttyUSB0等命名约定。
    设备节点:
        在/dev目录中,设备文件通过设备节点来表示。设备节点分为两种类型:字符设备节点和块设备节点。
        字符设备节点以c开头,块设备节点以b开头,并且后跟设备的主次设备号。例如,一个字符设备节点/dev/tty1表示第一个终端。
        如:brw-rw---- 1 root cdrom    11,   0 8月  14 21:12 sr0       【它是一个光驱的块设备】
        如:crw--w---- 1 root tty       4,   1 8月  14 21:12 tty1      【它是一个字符设备】
    设备类别:
        在/dev目录中,还有一些特殊的文件夹,用于组织和分类设备。
        例如在/dev目录下可以看到input文件夹,它包含了与输入设备(键盘、鼠标等)相关的设备文件。
    虚拟设备和伪设备:
        除了物理硬件设备外,/dev目录中还可以包含虚拟设备和伪设备。虚拟设备是指在软件层面上实现的设备,
        如:/dev/zero表示无限连续的零字节流:
            示例:创建一个名为 "zeros_file" 的文件,大小为 10MB,其中所有字节都是零
                dd if=/dev/zero of=zeros_file bs=1M count=10
        如:/dev/null黑洞文件,任何内容放到/null文件夹下都没了,
            示例:获取的内容丢入黑洞
                ls > /dev/null
        注:伪设备是一种模拟的设备,常用于进行测试、调试或模拟特定环境。
总结:/dev目录是Linux系统中用于表示设备文件的特殊目录。其中包含了硬件设备、虚拟设备和伪设备的文件。

十:/liblib64目录

  在Linux中有一个/lib目录,此目录是必须存在的,主要存放了必要的运行库,/lib目录里有着大量使用C、C++和Fortran语言开发的库文件, 这些库文件也被称为动态链接库,主要方便/bin和/sbin下的可执行文件执行时调用其库里的公共方法。

其实/lib和/lib64目录是一样的,/lib存放32位库文件、/lib64存放64位库文件
    在/lib或/lib64中,可以找到命名类似lib*.so.*的文件,其中*表示库的名称和版本号。例如libpthread.so.0是线程库的文件。
    /lib/modules:放置核心相关的模块(驱动程序)
    /lib/crda/pubkey:放置了一些公钥密码
    /lib/systemd:存放了一些系统脚本,例如shutdown、sleep
    /lib/console:放置了一些驱动安装程序(sh文件),例如keyboard-setup.sh
总结:/lib和/lib64目录是Linux系统中存储共享库文件的默认位置。/lib用于32位应用程序,/lib64适用于64位应用程序。
这些共享库文件提供了操作系统所需的基本功能和接口支持。

补充:动态链接库(Dynamic Link Library,简称 DLL)是一种在运行时被加载和链接到程序中的共享库文件。
    它包含了可被多个应用程序共享和重用的代码和数据。与静态链接库不同,动态链接库的代码和数据不会在编译时被复制到每个应用程序的可执
    行文件中,而是在程序运行时由操作系统动态加载。这种动态加载的方式带来了以下几个好处:
        节约系统资源:
            由于动态链接库可以被多个应用程序共享,因此不同的应用程序可以使用同一个库文件,
            避免了重复存储相同的代码和数据,从而节约了系统资源。
        简化程序更新:
            如果一个应用程序依赖于某个动态链接库,当该库需要更新时,只需替换库文件本身,
            而不需要重新编译和发布整个应用程序。这样可以简化程序的更新过程。
        提高灵活性:
            动态链接库使得软件模块化,不同的模块可以独立开发和维护。应用程序可以根据需要动态加载所需的库文件,提高灵活性可扩展性。
    在使用动态链接库时,应用程序需要在运行时加载并链接库文件,以便能够调用其中的函数和使用其中的数据。
    操作系统负责管理和维护动态链接库的加载和链接过程,确保应用程序能够正确访问所需的函数和数据。
    总结:动态链接库是一种在程序运行时被加载和链接的共享库文件,它可以被多个应用程序共享使用,节约系统资源,简化程序更新,
         并提高灵活性和可扩展性。

十一:/media/mnt目录

在Linux系统中/media和/mnt目录是用于挂载文件系统的常见目录。
/media 目录用于自动挂载可移动媒体设备(如USB驱动器、光盘等)的挂载点。
    当插入一个可移动媒体设备时,系统会自动在/media目录下创建一个与设备相关的子目录,并将该设备挂载到这个子目录下。
    每个子目录通常以设备的标识符、名称或其他识别信息来命名,以便用户很容易找到和访问已挂载的设备。
    例如:插入一个名为"USBDrive"的USB闪存驱动器,
        系统可能会在/media下创建一个名为/media/USBDrive的目录,并将驱动器挂载到此目录中。
/mnt目录是一个通用的挂载点目录,可用于手动挂载各种文件系统。
    用户可以将文件系统手动挂载到/mnt目录下的子目录中,以便访问存储在该文件系统上的数据。目录名称通常根据具体的挂载需求来命名。
    例如:您可能会在/mnt下创建一个名为/mnt/data的目录,用于挂载存储用户数据的文件系统。
    需要注意的是/media和/mnt目录都只是用于临时挂载文件系统的常见约定,并没有硬性规定。
    根据各个Linux发行版和系统管理员的配置,实际的挂载点可能位于其他目录下。
注意:根据FHS规范,更建议将/mnt目录作为临时挂载点使用,而将/media目录保留给自动挂载可移动媒体设备。
总结:/media目录用于自动挂载可移动媒体设备,而/mnt目录是一个通用的手动挂载点目录。
这两个目录都是为了方便访问和管理挂载的文件系统而设置的。

十二:/proc目录

  进程文件系统/proc的根目录,其中的部分文件分别对应正在运行的进程,可用于访问当前进程的地址空间。 它是一个非常特殊的虚拟文件系统,其中并不包含“实际的”文件,而是可用以引用当前运行系统的系统信息如CPU、内存、运行时间、软件配置以及硬件配置的信息,这些信息是在内存中由系统自己产生的。比如:/proc/cpuinfo文件包含了有关CPU的详细信息(如型号、频率等)、/proc/meminfo文件包含了内存使用情况的统计信息、/proc/PID/status文件包含了特定进程的详细状态信息等。

/proc介绍:
    它提供了对正在运行的系统进程和内核信息的实时访问。
    文件和子目录是虚拟的,它们反映了系统中当前运行的进程和内核状态。(文件是开机后生成的,关机则删除此目录下所有虚拟文件)
    提供了一种以文件形式访问内核和进程信息的机制,可以通过读取或写入这些文件来获取或修改相关数据。
/proc目录说明
    /proc/net下的文件分别表示各种网络协议(如TCP、UDP以及ARP等)的状态与统计信息。
    /proc/sys这个目录不仅存有各种系统信息,而且也包含系统内核与TCP/IP网络的可调参数。
        其中/kernel子目录含有共享内存和消息队列的可调参数、而net子目录中含有TCP/IP的各种可调参数。
        例如:shmmax文件中含有系统的最大共享内存定义,如果使用“cat /proc/sys/kernel/shmmax”命令,
        可以直接修改运行系统的内核参数,而无需重新引导系统。
        这一做法要谨慎,有的文件可能包含多个数值,或不同类型的数值,因此在修改以前一定要弄清参数的意义和实际的数值。
        为了在每次启动系统时都能使用定制的系统可调参数,可以设置/etc/sysctl.conf配置文件。

十三:/sys目录

  /sys和/proc差不多,也是特殊的虚拟文件系统目录,它们提供了对内核和系统信息的访问,存放的是关于设备、驱动程序和一些内核特性的信息。它的底层结构由当前使用的Linux内核决定,在其它方面没有明确规定。

其/sys目录如下:
    /sys/block:
        该目录下的所有子目录代表着系统中当前被发现的所有块设备。按照功能来说放置在/sys/class下会更合适,但由于历史遗留因素而一直
        存在于/sys/block,但从linux2.6.22内核开始这部分就已经标记为过去时,只有打开了CONFIG_SYSFS_DEPRECATED配置编译才会
        有这个目录存在,并且其中的内容在从linux2.6.26版本开始已经正式移到了/sys/class/block,旧的接口/sys/block为了向后兼容
        而保留存在,但其中的内容已经变为了指向它们在/sys/devices/中真实设备的符号链接文件。
    /sys/bus:
        该目录下的每个子目录都是kernel支持并且已经注册了的总线类型。这是内核设备按照总线类型分层放置的目录结构,/sys/devices中
        的所有设备都是连接于某种总线之下的,bus子目录下的每种具体总线之下可以找到每个具体设备符号链接,一般来说每个子目录(总线类型)
        下包含两个子目录,一个是devices,另一个是drivers;其中devices下是这个总线类型下的所有设备,这些设备都是符号链接,
        它们分别指向真正的设备(/sys/devices/name/下);而drivers下是所有注册在这个总线上的驱动,每个driver子目录下是一些可以
        观察和修改的driver参数。(它也是构成linux统一设备模型的一部分)
    /sys/class:
        该目录下包含所有注册在kernel里面的设备类型,这是按照设备功能分类的设备模型,每个设备类型表达具有一种功能的设备。每个设备类
        型子目录下都是那个设备类型的各种具体设备的符号链接,这些链接指向/sys/devices/name下的具体设备。设备类型和设备并没有一一
        对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,
        比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。
        (/sys/class也是构成linux统一设备模型的一部分)
    /sys/dev:
        该目录下维护一个按照字符设备和块设备的主次号码(major:minor)链接到真是设备(/sys/devices)的符号链接文件。
    /sys/devices:
        该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结
        构来显示,但有两个例外,即platform devices和system devices。platform devices一般是挂在芯片内部的告诉或者低速总线
        上的各种控制器和外设,他们能被CPU直接寻址;system devices不是外设,而是芯片内部的核心结构,比如CPU,timer等,他们一般
        没有相关的驱动,但是会有一些体系结构相关的代码来配置他们。(sys/devices是内核对系统中所有设备的分层次表示模型,
        也是/sys文件系统管理设备的最重要目录结构)。
    /sys/fireware:
        该目录下包含对固件对象(firmware object)和属性进行操作和观察的接口,即这里是系统加载固件机制的对用户空间的接口。
        (关于固件有专用于固件加载的一套API)
    /sys/fs:
        按照设计,该目录使用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。
    /sys/hypervisor:
        该目录是与虚拟化Xen相关的装置。(Xen是一个开放源代码的虚拟机监视器)
    /sys/kernel:
        存放内核中所有可调整的参数
    /sys/module:
        该目录下有系统中所有的模块信息,不论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件),
        都可能出现在/sys/module中。即module目录下包含了所有的被载入kernel的模块。
    /sys/power:
        该目录是系统中的电源选项,对正在使用的power子系统的描述。这个目录下有几个属性文件可以用于控制整个机器的电源状态,
        如可以向其中写入控制命令让机器关机/重启等等

十四:/lost+found目录

  /lost+found目录是用于存放被破坏的文件系统片段的地方。当文件系统发生错误或者崩溃时,一些文件碎片可能会丢失或者损坏,这些片段将被放置在/lost+found目录中。

主要有两种情况会导致/lost+found目录中出现文件:
    文件系统修复:
        当使用工具如fsck对文件系统进行修复时,任何找到的孤立文件片段或目录将被复制到/lost+found目录下,
        并使用唯一的编号作为文件名进行存储。这个目录提供了一个地方,使得系统管理员可以检查并恢复修复过程中找到的文件。
    损坏的文件系统恢复:
        如果文件系统发生严重的损坏或者文件系统表的信息丢失,操作系统可能会尝试自动修复文件系统或还原已知的文件片段。
        这些文件片段会被放置在/lost+found目录中进行后续处理。
总结:此目录是由系统自动创建的,通常位于根目录下。在正常情况下,这个目录应该是空的。
若发现其中有文件,特别是在没有进行文件系统修复的情况下有大量文件,那可能表示文件系统存在较大的问题,建议进行文件系统检查和修复操作。

十五:/opt目录

  它是个可选的应用程序安装目录,可以用来存放第三方软件包或自己开发的应用程序。当需要卸载第三方应用程序时,可以直接删除安装目录,而不影响系统其它任何设置。

/opt目录的具体说明:
    用途:
        /opt目录被设计为存储整个应用程序(包括可执行文件、库文件、配置文件等)的根目录。
        它提供了一个集中管理和组织应用程序的地方,使得应用程序能够完整地安装到系统中,并与系统的标准目录结构隔离开来。
    目录结构:
        /opt目录下的应用程序可以按照各自的需求创建子目录来进行组织。
        通常应用程序的名称或者供应商名称会被用作子目录的名称,例如/opt/application或者/opt/vendor。在这些子目录下,
        应用程序可以按照约定的目录结构进行安装,如将可执行文件放置于bin目录,库文件放置于lib目录,配置文件放置于etc目录等。
    可选性:
        /opt目录是可选的,不像一些标准的系统目录(如/bin、/usr、/etc等)是必须存在的。
        因此,应用程序的安装不需要依赖于/opt目录的存在。
    权限:
        通常情况下/opt目录的拥有者和组都是root,而普通用户通常没有写入权限。因此安装程序和更新操作需要以管理员权限来执行。
总结:此目录提供了一个用于安装应用程序的可选位置,特别适合存放第三方软件包或自己开发的应用程序。
它使得应用程序可以更好地与系统的其它部分隔离,并且便于管理和维护。

十六:/var目录

  此目录主要针对可变动文件,包括缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file、run file),或例如安装MySQL数据库运行的文件等。

/var目录是一个重要的目录,用于存储可变数据。它包含了在系统运行期间产生或经常变化的文件和目录。如下详细介绍FHS要求必须存在的子目录:
    /var/log/:
        该目录用于存放系统的登录文件、日志文件和跟踪文件。
        各个应用程序可以将它们的日志文件存放在这个目录中,方便系统管理员查看和管理系统的运行状态和问题。
        说白了就是这个目录下可以查看:操作系统、内核、服务和应用程序的活动信息,也可帮助管理员进行故障排除、性能监控和安全审计。
    /var/cache/:
        该目录用于存放应用程序在运行过程中产生的一些缓存文件,这些文件可以在后续的运行使用,以提高性能。
        比如:网络软件可以将下载的文件缓存在这个目录中,加快后续访问速度。
    /var/lib/:
        该目录用于存放应用程序在执行过程中所需要的数据文件。这些数据文件是应用程序的一部分,与应用程序的执行状态相关。
        例如:存储了软件包管理器(如rpm、yum)的相关数据。这包括已安装软件包的数据库、元数据、库文件等。
        我们可以使用系统管理工具跟踪已安装软件包的状态,并提供依赖关系解析和软件升级等功能。但不推荐直接查看文件。如/var/lib/rpm
        再例如:MySQL软件会将数据库文件存放在这个目录中。
    /var/lock/:
        该目录下的文件资源一次只能被一个应用程序所使用,用于实现进程间的同步和互斥。
        当一个应用程序需要独占某个文件或者设备时,它可以在此目录下创建一个锁文件,表示该资源已被占用。
    /var/mail/:
        该目录用于个人电子邮件信箱的存储。
        当用户的邮箱收到新的邮件时,邮件服务器会将邮件存放在这个目录中,用户可以使用邮件客户端读取和管理邮箱中的邮件。
    /var/run/:
        该目录用于存放了某些程序或服务启动后创建临时的运行时文件,用于记录正在运行的进程PID、服务的状态和其他运行时信息。
        PID文件记录了正在运行的进程的进程号,可以通过这些文件来跟踪和管理进程。
    /var/spool/:
        该目录用于存放等待其它应用程序使用的数据。
        例如,打印任务可以先被放置在这个目录中,待到打印服务准备好后再进行处理。
总结:用于存储可变数据的目录。它包含了日志文件、软件包数据、邮件服务器数据、网络服务数据、数据库文件、临时文件和运行时文件等。
常见/var目录下使用示例:
    查看系统日志:tail -f /var/log/messages
        此文件是系统文件之一,主要记录了系统的各种事件、警告和错误消息
            系统启动和关闭的相关信息:
                可以查看系统启动和关闭的时间戳、事件和状态信息(或者用户登录即退出)。
            内核消息:
                记录有关内核的事件、错误和警告消息,如内存管理、设备驱动、硬件故障等信息。服务和应用程序日志:
                许多服务和应用程序将其日志消息写入messages文件,这些消息包括网络服务(如 SSH、FTP、HTTP)的连接请求、
                身份验证信息、配置错误等。
            硬件和设备事件:
                如果系统中出现硬件故障或设备错误,例如磁盘错误、网络接口故障等,相关消息将被记录在此处。
    查看系统日志:tail -f /var/log/secure
        推荐使用 lastb 命令就是查看此文件,(此命令就是查看/var/log/secure文件)
        此文件是系统文件之一,用于记录与系统安全相关的事件和信息,特别是与用户身份验证、授权和访问控制相关的活动。
        用户登录和注销:
            当用户通过SSH控制台或其它方式登录系统时,相关登录和注销事件将被记录在该文件中。它记录登录时间、用户名、IP地址等信息。
        认证和授权信息:
            当用户进行身份验证(如密码验证、密钥验证)时,相关信息会被记录。
            此外,如果用户尝试进行无效的身份验证或授权操作,也会在该文件中生成相应的日志条目。
        重要的系统行为:
            与系统安全相关的重要事件和行为,如密码更改、用户账户管理操作、特权访问等,也会被记录。
        安全策略和防火墙:
            若系统中启用了安全策略或防火墙,与其相关的日志消息也会记录在/var/log/secure文件中。
        注意:一般查看有谁短时间内频繁登录,这说明可能有人暴力破解
    查看用户登录信息文件:/var/log/lastlog
        推荐使用 lastlog 命令就是查看此文件
        记录最后一次登录时间:记录每个用户最近一次登录的日期和时间。
        终端设备:记录用户最近登录所使用的终端设备,如控制台、SSH 连接等。
        登录状态:标记用户最近一次登录的状态,如成功登录、登录失败、用户锁定等。
        注意:由于/var/log/lastlog是一个二进制文件,无法直接查看其内容。要查看用户的最后登录信息,可以使用lastlog命令。
    查看用户登录和注销事件文件:/var/log/wtmp
        推荐使用 last 命令查看此文件
        用户登录和注销:每当用户登录或注销系统时,相关事件会被记录在/var/log/wtmp文件中。
            它记录了登录和注销的时间戳、用户名、终端设备、IP 地址等信息。
        远程连接:如果用户通过远程连接方式(如SSH)登录系统,相关的连接事件也会被记录。
        登录会话的时长:/var/log/wtmp文件中还包含了每个登录会话的开始时间和结束时间,可以计算出用户的登录时长。
        注意:由于/var/log/wtmp是一个二进制文件,无法直接查看其内容。要查看用户的登录和注销历史记录,可以使用last命令。

十七:/usr目录

  根据FHS的定义/usr目录中存放的数据属于可分享的(shareable)但不可变动的(read-only)数据。类似于Windows系统的C:\Windows与C:\Program Files这两个目录的综合体。 建议所有软件开发者将它们的数据合理的分别放置在这个目录下的次目录中,而不是直接放置/usr下自定义的文件夹下。其实usr是Unix Software Resource的缩写,也就是“UNIX 操作系统软件资源”所放置的目录,而不是用户的数据,这点需要注意。

当谈到Linux系统的目录结构时/usr目录是其中一个非常重要的目录之一。下面是对/usr目录的最详细介绍:
主要用途是用来存放大部分用户所需的应用程序、库文件、文档和其它非系统核心文件的目录。
    /usr目录下有许多子目录:
        /usr/bin:(和根目录下的/bin差不多)
            存放大部分用户可执行的命令或可执行文件。这些命令在系统范围内都可用,且不需要管理员权限。
        /usr/sbin:(和根目录下的/sbin差不多)
            存放一些系统管理相关的命令或可执行文件。这些命令通常是系统管理员使用的,需要管理员权限才能运行。
        /usr/lib和/usr/lib64:(和根目录下的/lib、/lib64差不多)
            存放与程序运行相关的共享库文件。这些库文件被应用程序引用,以提供必要的功能支持。
            注:/usr/bin、/usr/sbin有时候也引用/lib、/lib64的动态链接库
        /usr/include:
            C/C++等程序语言的头文件(header)与包含文件(include)放置处
        /usr/share:
            存放共享数据如系统范围内的配置文件、帮助文档、资源文件等。
        /usr/local:
            用于存放与本地安装相关的文件,一般是用户自己手动安装的软件。
        /usr/games:
            存放游戏程序。
        /usr/src:
            存放系统源码文件,一般用于开发者或编译内核时的参考。
    权限:
        /usr目录通常具有较为宽松的权限设置,允许普通用户对其中的大多数文件和目录进行读取和执行操作。
        但是对于一些需要修改系统配置或进行系统管理的目录(如/usr/sbin),需要管理员权限才能进行写入操作。
    分离挂载:
        在一些Linux发行版中,/usr目录可能被独立挂载到单独的分区。这样可以使得系统的根目录更加轻量级,
        而/usr目录则可以被以只读模式挂载,提高系统的稳定性和安全性。
总结:此目录是一个重要的目录,用于存放大部分用户所需的应用程序、库文件和文档等资源。
     它提供了一个集中管理和组织这些资源的地方,使得用户可以方便地访问和使用。
     不同的子目录承担着不同的功能和用途,为系统提供了丰富的功能支持。

.

posted @ 2023-08-17 21:41  蚂蚁小哥  阅读(666)  评论(0编辑  收藏  举报