笔者在学习linux过程中,总是记不住每个目录的设计之初的含义,今天专门整理了一下,方便复习。
目录总览
以centos7为例:登录系统之后执行命令:
ll
可以看到如下详细的目录以及具有的权限,当前用户为root
编辑
Linux文件系统结构,它遵循了一种层次化的目录结构。以下是一些常见的目录以及它们的解释。
一、下面对这些目录进行解释:
/:根目录
这是整个文件系统的顶级目录,所有其他目录和文件都位于根目录下。
/bin:二进制文件
Binaries (二进制文件) 的缩写,这个目录包含了许多基本的可执行文件,如系统命令(ls、cp、rm等)和常见的工具。
/bin目录的主要特点和作用包括:
- 可执行命令:/bin目录包含了一些常用的用户级别可执行命令,这些命令可以被系统上的所有用户直接执行。例如,ls、cp、mv、rm等命令就存放在/bin目录下。
- 系统启动和基本操作:/bin目录中的一些命令对于系统的启动和基本操作非常重要。例如,/bin/init命令是系统启动过程中的第一个进程,/bin/sh是系统默认的命令行解释器。
- 单用户模式:在系统故障或维护时,可以进入单用户模式,此时只有/bin目录下的一些基本命令可用,用于进行系统修复和故障排查。
- 系统路径:/bin目录是系统默认的命令搜索路径之一。因此,当用户在命令行中输入一个命令时,系统会首先在/bin目录下查找是否存在该命令的可执行文件。
需要注意的是,/bin目录中的命令通常是基本而常用的,对于系统的正常运行和用户的日常操作至关重要。这些命令一般都是具有核心功能的基本工具,不依赖于其他软件包。
/boot:启动文件
在Linux系统中,/boot目录是用于存放与系统启动相关的文件的目录。它包含了引导加载程序(bootloader)和内核(kernel)镜像文件,以及与系统引导过程有关的配置文件。
以下是/boot目录的一些主要内容和作用:
- 引导加载程序(bootloader):
/boot目录通常包含引导加载程序的配置文件和二进制文件。引导加载程序负责在系统启动时加载操作系统内核到内存中,并执行系统引导过程。常见的引导加载程序包括GRUB(GRand Unified Bootloader)和LILO(LInux LOader)。
- 内核镜像文件:
Linux操作系统的内核镜像文件通常存放在/boot目录中。内核是操作系统的核心组件,负责管理系统资源、提供系统服务和驱动程序等功能。内核镜像文件通常以类似于"vmlinuz"或"bzImage"的文件名格式存在。
- initramfs(Initial RAM File System):
/boot目录可能包含initramfs文件,它是一个临时的根文件系统,用于在系统引导过程中加载必要的驱动程序和文件系统模块。initramfs在引导过程中允许系统加载所需的初始化程序和驱动程序,以便成功启动操作系统。
- 其他引导相关文件:
/boot目录可能还包含其他与引导过程有关的文件,如配置文件(如grub.cfg)、备份的内核镜像文件、启动时的图形背景等。这些文件在引导过程中起到配置和定制的作用。
/dev:设备文件
Device(设备) 的缩写,Linux将设备表示为文件,/dev目录包含了与硬件设备相关的文件,例如磁盘驱动器、USB设备等。
/dev目录的一些主要特点和作用包括:
- 设备节点:/dev目录中的文件通常被称为设备节点。每个设备节点对应着系统中的一个硬件设备或虚拟设备。例如,/dev/sda表示硬盘设备,/dev/tty1表示虚拟终端设备。
- 设备文件的访问:通过在设备文件上进行读写操作,可以与对应的设备进行数据的输入和输出。例如,可以通过/dev/sda设备文件访问硬盘上的数据。
- 设备的控制和配置:一些设备文件可以用于控制和配置硬件设备的行为。例如,/dev/snd/controlC0设备文件用于控制音频设备。
- 虚拟设备:除了物理硬件设备,/dev目录中也包含一些虚拟设备文件。例如,/dev/null是一个特殊的设备文件,用于丢弃数据;/dev/random和/dev/urandom是用于生成随机数的设备文件。
- 自动创建:设备文件通常由系统在启动时自动创建或通过设备驱动程序动态创建。这些设备文件的创建和管理由udev(设备管理守护进程)负责。
/etc:系统配置文件
"et cetera"(和其他的) 的缩写,大多数系统配置文件都存放在这个目录中,如网络配置、用户配置、服务配置等。
以下是/etc目录的一些主要内容和作用:
- 系统配置文件:/etc目录中包含了许多系统级别的配置文件,用于设置系统的行为和参数。例如,/etc/passwd存储了用户账户信息,/etc/group存储了用户组信息,/etc/hosts用于IP地址和主机名的映射等。
- 网络配置:/etc目录中的一些文件用于网络配置。例如,/etc/network/interfaces用于配置网络接口,/etc/resolv.conf用于配置DNS解析器。
- 服务配置:许多服务和守护进程的配置文件位于/etc目录中。例如,/etc/apache2目录包含了Apache Web服务器的配置文件,/etc/mysql目录包含了MySQL数据库服务器的配置文件。
- 启动和初始化脚本:/etc目录中的一些文件和子目录用于系统的启动和初始化。例如,/etc/init.d目录包含了启动和停止系统服务的脚本,/etc/rc.local是系统启动时自定义脚本的位置。
- 软件包管理:在某些Linux发行版中,/etc目录中的一些文件用于软件包管理。例如,/etc/apt目录包含了APT软件包管理器的配置文件,/etc/yum.conf是YUM软件包管理器的配置文件。
/etc目录中的配置文件对于系统的运行和应用程序的行为起着关键作用。修改这些配置文件可以更改系统的行为,定制各种服务和应用程序的参数和功能。
需要注意的是,修改/etc目录下的配置文件通常需要root权限或特定的权限设置。在修改配置文件之前,建议备份原始文件,以防止不正确的修改导致系统问题。
/home:用户主目录
在Linux中,每个用户都有一个对应的主目录,位于/home目录下。用户名为"user"的用户的主目录路径为/home/user。
以下是/home目录的一些主要特点和作用:
- 用户主目录:/home目录中的子目录对应着系统上的每个用户的主目录。例如,对于用户名为"john"的用户,其主目录路径为/home/john。
- 用户数据和配置:每个用户主目录是该用户的私有空间,用户可以在其中存储个人数据、文件和配置。用户可以自由地组织和管理自己的主目录,包括创建子目录、存放文档、配置文件和个人设置等。
- 用户权限:用户主目录具有用户的权限限制,只有相应用户及管理员具有读写权限。这样可以确保用户的数据和个人文件的隐私和安全性。
- 默认登录位置:当用户登录系统时,默认的工作目录即为用户的主目录。用户可以在主目录下进行各种操作和访问自己的文件。
/home目录在Linux系统中扮演着重要的角色,为每个用户提供了私有的工作空间和存储位置。每个用户在其主目录下可以自由地管理和组织个人文件和配置,确保数据的隐私和安全。
需要注意的是,除了/home目录,还存在一些特殊的系统用户,它们的主目录可能位于其他目录,如/var/www(用于Web服务器用户)或/opt(用于特定应用程序用户)。这些特殊用户的主目录可以根据系统和应用程序的需求进行定制。
/lib:库文件
这个目录包含了许多共享库文件,用于支持系统和应用程序的运行。
在Linux系统中,/lib目录是用于存放共享库文件(动态链接库)的目录。共享库包含了一组可被多个应用程序共享和重用的函数和资源,它提供了一种模块化的方式来共享代码,减少了应用程序的大小并提高了系统资源的利用效率。
以下是/lib目录的一些主要特点和作用:
- 共享库文件:/lib目录中存放了系统级别的共享库文件,这些库文件以.so(共享对象)的扩展名结尾。共享库包括了许多常见的系统函数和服务,如C标准库(libc.so)、数学库(libm.so)、网络库(libnet.so)等。
- 动态链接:应用程序可以在运行时动态地链接到共享库,以使用库中定义的函数和资源。这种动态链接的方式使得应用程序可以在执行时共享已编译好的代码,减少了重复代码的占用空间,并提高了系统资源的利用效率。
- 可更新性和共享性:共享库的存在使得系统上的多个应用程序可以共享同一个库文件,从而减少了存储空间的占用和维护的工作量。当共享库被更新时,所有使用该库的应用程序都可以受益于更新,无需单独修改每个应用程序的代码。
- 运行时加载:共享库文件在应用程序运行时被动态加载到内存中,以供应用程序使用。这种运行时加载的方式使得系统可以根据需要加载所需的共享库,实现了灵活的代码复用和资源管理。
需要注意的是,/lib目录中的共享库文件通常由操作系统和软件包管理器安装和维护。在编译和开发应用程序时,需要确保所依赖的共享库文件存在,并正确地设置库文件的搜索路径。
/media:可移动媒体设备
在Linux系统中,/media目录是用于挂载可移动媒体设备的目录。可移动媒体设备包括USB闪存驱动器、移动硬盘、光盘、SD卡等。当这些设备插入系统时,它们通常会自动挂载到/media目录下的相应子目录中。
以下是/media目录的一些主要特点和作用:
- 自动挂载点:当可移动媒体设备插入系统时,操作系统会自动检测并将其挂载到/media目录下的一个子目录中。这个子目录的名称通常是根据设备的标识符或名称来命名的,例如"/media/usb-drive"或"/media/cdrom"。
- 访问可移动设备:通过/media目录,用户可以方便地访问和管理插入系统的可移动媒体设备。挂载后,用户可以在相应的子目录中访问设备中的文件和文件夹,并进行复制、移动、删除等操作。
- 自动卸载:当用户从系统中拔出可移动媒体设备时,操作系统会自动卸载该设备,释放相关资源,并从/media目录中删除相应的子目录。
需要注意的是,/media目录的使用可能会因不同的Linux发行版和桌面环境而有所差异。有些系统可能使用其他目录来挂载可移动媒体设备,例如"/mnt"或"/run/media"等。此外,用户也可以手动将可移动媒体设备挂载到/media目录或其他自定义目录。
/mnt:临时挂载目录
在Linux系统中,/mnt目录是一个用于临时挂载其他文件系统的标准目录。挂载是将一个文件系统连接到文件系统目录树的过程,使其在该目录下可访问。
/mnt目录的主要目的是为了方便临时挂载其他设备或文件系统,例如网络共享、其他硬盘分区或移动存储设备。当你需要访问这些设备或文件系统时,可以将它们挂载到/mnt目录下,使其在文件系统中可用。
通常,/mnt目录下会创建子目录来表示每个挂载点。例如,你可以在/mnt目录下创建一个名为"usb"的子目录,并将USB闪存驱动器挂载到该目录下。这样,你就可以通过/mnt/usb路径访问USB驱动器中的文件。
需要注意的是,/mnt目录通常用于临时挂载,而/mnt目录下的子目录应该是空的或只包含挂载的文件系统。如果你需要长期挂载文件系统,更常见的做法是使用在根目录下的其他目录,如/media目录。
/opt:可选应用程序
在Linux文件系统中,/opt目录是用于存放可选应用程序的目录。"opt"是"optional"(可选)的缩写,这个目录提供了一个通用的位置,供第三方软件包或应用程序安装它们自己的文件。
/opt目录的设计初衷是为了和系统提供的软件包进行区分。系统软件包通常安装在其他目录(如/bin、/usr/bin等),而/opt目录则用于那些不属于操作系统核心部分的可选软件。
安装在/opt目录下的应用程序通常被放置在单独的子目录中,以组织它们的文件。例如,一个名为"myapp"的应用程序可以被安装在/opt/myapp目录下。这样做的好处是,应用程序的文件可以被集中管理,而不会散布在系统的其他目录中。
此外,/opt目录还提供了一种使可选应用程序易于升级和删除的机制。当你需要更新或删除/opt目录下的应用程序时,只需操作相关的子目录即可,而不会影响系统的其他部分。
需要注意的是,/opt目录并不是Linux系统中所有第三方应用程序的默认安装目录。某些应用程序可能选择将它们的文件安装在其他位置,这取决于软件包的发布者和特定的发行版。
/proc:进程信息
/proc目录是Linux系统中一个特殊的虚拟文件系统,用于提供关于运行中进程和系统信息的实时访问。通过浏览和读取/proc目录中的文件和目录,你可以获取有关系统的实时状态和详细信息。
/proc目录中的每个子目录和文件都与系统中的进程或系统信息相关联。以下是一些常见的文件和子目录:
- /proc/<PID>:
在/proc目录下,每个目录的名称对应一个运行中进程的进程ID(PID)。你可以通过进入/proc/<PID>目录来访问有关特定进程的信息。例如,/proc/1234表示进程ID为1234的进程。
- /proc/cpuinfo:
这个文件包含有关CPU(中央处理器)的信息,如型号、速度、缓存等。
- /proc/meminfo:
这个文件提供了关于系统内存的信息,包括总内存量、可用内存量、缓存等。
- /proc/filesystems:
这个文件列出了当前系统支持的文件系统类型。
- /proc/net:
这个目录包含与网络相关的信息,如网络接口、连接状态、路由表等。
- /proc/sys:
这个目录包含了许多系统配置和参数,可以通过读取或写入相关文件来调整系统行为。
- /proc/version:
这个文件包含了当前运行的内核版本信息。
/proc目录还包含其他许多与进程、硬件和系统状态相关的文件和目录。通过在/proc中浏览和读取这些文件,你可以获取有关系统的实时信息,并监视和调整系统的运行。
值得注意的是,/proc目录中的文件和目录通常是虚拟的,其内容在访问时动态生成,而不是存储在磁盘上。这使得它提供了对系统状态的实时访问,并允许进程和系统信息动态更新。
/root:系统管理员主目录
在Linux系统中,/root目录是系统管理员(通常是超级用户root)的主目录。它是root用户的个人工作目录和配置文件存储位置。
/root目录的作用类似于其他用户的主目录(如/home/user),但是它是用于root用户的,而不是普通用户。作为系统管理员的主目录,/root通常具有更高的权限和特权,允许对系统进行广泛的配置和管理。
/root目录通常包含了root用户的个人配置文件、脚本和工具。这些文件有助于定制系统的行为、设置环境变量、配置系统服务等。/root目录也是root用户执行命令和存储临时文件的默认位置。
/root目录对于系统管理员来说是私有的,普通用户通常无法访问该目录下的内容,除非他们具有足够的权限。
需要注意的是,虽然/root目录是root用户的主目录,但并不是建议在该目录下存储大量的个人数据。根据最佳实践,个人数据应该存储在其他位置,以便更好地进行备份和管理。
/sbin:系统二进制文件
在Linux系统中,/sbin目录是用于存放系统二进制文件的目录。这些二进制文件是用于系统管理和维护任务的工具和命令。与普通用户的可执行程序存放在/bin目录中不同,/sbin目录中的二进制文件通常需要超级用户(root用户)权限才能执行。
/sbin目录中的二进制文件通常用于系统的启动、维护和修复。这些工具提供了对系统底层功能和配置的访问和控制。以下是一些常见的/sbin目录中的二进制文件:
- /sbin/init:
这是系统的初始化进程,负责启动系统并管理其他进程的启动和终止。
- /sbin/reboot:
这个命令用于重新启动系统。
- /sbin/shutdown:
这个命令用于安全地关闭系统。
- /sbin/ifconfig:
这个命令用于配置和管理网络接口。
- /sbin/fsck:
这个命令用于检查和修复文件系统上的错误。
- /sbin/mount:
这个命令用于挂载文件系统。
- /sbin/lvm:
这个命令用于逻辑卷管理,用于创建、删除和管理逻辑卷和卷组。
/sbin目录中的二进制文件通常被认为是系统管理任务的核心工具,因此它们被放置在/sbin目录中,以便于超级用户直接访问和执行。
/tmp:临时文件
在Linux系统中,/tmp目录是用于存放临时文件的目录。它是一个临时性的文件存储位置,用于存放在系统运行过程中产生的临时文件。
临时文件是在程序运行期间生成的,用于临时存储数据或进行临时操作。它们通常不需要长期保存,而是在使用后应该被清理掉。
/tmp目录的特点如下:
- 共享性:/tmp目录是系统范围内的共享目录,所有用户和进程都可以访问和使用其中的临时文件。
- 清理机制:一般情况下,/tmp目录的内容并不会永久保存。系统通常会定期清理该目录,删除过时的临时文件,以防止它们占用过多的磁盘空间。
- 权限:/tmp目录对于系统中的所有用户都是可写的,这意味着任何用户都可以在该目录中创建临时文件。
由于/tmp目录是共享的临时文件存储位置,因此它经常被应用程序和系统工具用来存储临时数据。例如,下载文件时,临时下载文件可能会被保存在/tmp目录中。其他一些临时文件可能包括日志文件、临时缓存文件、临时数据库文件等。
需要注意的是,由于/tmp目录是共享的,任何用户都可以在其中创建和修改文件,因此在安全性要求较高的环境中,可能需要对/tmp目录进行额外的安全配置和监控。
/usr:用户程序资源
这个目录包含了大多数用户安装的应用程序、库文件和文档。
在Linux系统中,/usr目录是用于存放用户程序资源的目录。它是Unix Software Resource(USR)的缩写,包含了系统安装的大部分用户级别的程序、库文件、文档和其他相关资源。
/usr目录的结构通常如下:
- /usr/bin:
这个目录包含可执行的用户级别命令和程序。通常,系统中的许多常用命令和应用程序都被安装在这个目录中,供所有用户使用。
- /usr/sbin:
这个目录包含系统管理员级别的可执行命令和程序。与/sbin目录类似,这些工具通常需要超级用户(root用户)权限才能执行。
- /usr/lib:
这个目录包含共享库文件,它们被用户程序和系统工具使用。共享库包括一些常见的库,如C标准库和其他系统库。
- /usr/include:
这个目录包含用于编程的头文件(header files)。头文件通常包含了函数、常量和数据结构的声明,供开发人员在编写程序时使用。
- /usr/share:
这个目录包含与程序相关的共享数据,如系统范围的配置文件、帮助文档、示例文件、图标等。
- /usr/local:
这个目录是用于存放用户自行安装的软件的位置。它类似于/usr目录的结构,但是主要用于用户自定义的软件安装,而不是系统默认安装的软件。
- /usr/games:
这个目录包含一些游戏程序,供用户娱乐和休闲使用。
需要注意的是,/usr目录通常包含系统范围的程序资源,而与用户个人相关的数据和配置文件通常存放在用户的主目录(如/home/user)下。
/var:可变数据
可变数据,如日志文件、缓存、邮件等,存放在这个目录下。
在Linux系统中,/var目录是用于存放可变数据(variable data)的目录。它包含了在系统运行过程中产生、变化和更新的数据,而不是系统安装过程中的静态文件。
/var目录的主要作用是存储经常变化的数据,其中包括但不限于以下内容:
- 日志文件(log files):
系统和应用程序生成的日志文件通常存放在/var/log目录中。这些日志文件记录了系统的活动、错误消息、服务日志等,对于故障排查和系统监控非常重要。
- 数据库文件(database files):
一些应用程序使用/var目录存储数据库文件,这些文件包含了应用程序的数据、配置和状态信息。
- 缓存文件(cache files):
临时缓存文件、网络缓存、软件包管理器的包缓存等通常存放在/var/cache目录中。这些文件可用于提高性能、加快访问速度或减轻对外部资源的依赖。
- 运行时文件(runtime files):
某些应用程序在运行时需要创建临时文件或进程文件,这些文件通常存放在/var/run目录中。这些文件记录了正在运行的程序的信息,如进程ID(PID)文件、锁文件等。
- 邮件(mail):
邮件服务器存储接收的邮件和邮件队列等数据通常位于/var/mail或/var/spool/mail目录中。
除了上述常见的数据之外,/var目录可能还包含其他应用程序特定的数据和文件。需要注意的是,/var目录中的数据通常是可变的,可能会增长,因此对磁盘空间的管理和监控也很重要。
总结
Linux系统目录结构是一个层次化的文件系统布局,它提供了一种组织和管理文件、程序和资源的标准化方式。在Linux系统中,各个目录有着特定的用途和含义,使得系统管理、软件安装和用户数据等操作更加方便和一致。
总的来说,Linux系统目录结构的主要特点包括:
- 根目录(/)是整个目录结构的起点,包含了系统中所有其他目录和文件。
- /bin目录存放了常用的用户可执行命令,是普通用户可以直接执行的命令的存放位置。
- /sbin目录存放了系统管理和维护任务的二进制文件,这些文件通常需要超级用户权限才能执行。
- /usr目录包含了用户程序资源,包括可执行命令、库文件、头文件和共享数据等。
- /etc目录存放了系统的配置文件,包括网络配置、用户账户配置、服务配置等。
- /var目录存放了可变数据,如日志文件、数据库文件、缓存文件等。
- /home目录是用户的主目录,每个用户在此目录下有一个独立的子目录,用于存放用户的个人文件和数据。
- /tmp目录是用于存放临时文件的目录,通常不需要长期保存,而是在使用后应该被清理掉。
- /dev目录包含了设备文件,用于与硬件设备进行交互。
- /proc目录是一个虚拟文件系统,提供了对系统内核和进程的信息访问。
Linux系统目录结构的合理组织和标准化有助于提高系统的可管理性、可维护性和可扩展性。它使得不同的Linux发行版和应用程序能够遵循一致的文件布局,简化了软件的安装和配置过程,同时也方便了系统管理员和用户对系统的管理和使用。