Linux /etc/ 目录详解
/etc/ 文件夹的作用是什么?
根路径下各个文件都有其特殊的用处, 譬如/bin
目录包含了系统启动和基本操作所需的核心命令(二进制文件);/boot
目录包含了启动系统所需的文件,如内核映像文件和引导加载程序(bootloader)配置文件;/dev
目录是设备文件的存放位置等.
而/etc
则是包含了系统的配置文件,大多数系统级别的配置文件和脚本都存放在此处,例如 /etc/passwd
(存储用户信息)、/etc/hosts
(存储主机名和 IP 地址的映射)等。了解其下各个子文件夹的内容对我们了解Linux的工作特性大有帮助, 许多我们常用的命令只是将配置文件的信息打印出来而已.
/etc/ 子文件(夹)类型
/etc
文件夹中并不是只有文本文件, 还有文件夹, 比如/etc/cron.d/
. 在Linux系统中,”.d” 的后缀通常表示一个目录(directory)。这种命名约定用于指示特定目录中包含了相关配置文件或脚本的集合。在特定的上下文中,”.d” 目录通常用于允许系统管理员或应用程序添加、修改或删除与特定功能相关的配置文件,而无需修改主配置文件。这种设计模式提供了一种灵活的方式来管理和组织配置。
除了.conf
后缀外, 还有一类特殊的后缀-
. 在Linux系统中,”/etc/passwd-“ 文件的 “-“ 后缀通常表示一个备份文件。这种命名约定用于表示原始文件的备份副本,通常在对原始文件进行修改或更新之前创建。对于 “/etc/passwd-“ 文件而言,它是 “/etc/passwd” 文件的备份副本。”/etc/passwd” 是一个重要的系统文件,它包含了关于系统中用户账户的基本信息,如用户名、用户ID、用户主目录等。
常见的文件有哪些?
用户相关信息:
- 基本子文件夹:
/etc/passwd
: 这个文件包含了系统上所有用户的基本信息,如用户名、用户ID、默认shell、主目录等。它用于验证用户登录和识别用户。/etc/group
: 这个文件包含了系统上所有用户组的信息,如组名、组ID和组成员。它用于管理用户和组的关系,控制访问权限等。/etc/shadow
: 这个文件存储了用户的加密密码和密码过期信息。它通常只对管理员可见,用于保护用户密码的安全性。/etc/default/useradd
: 新增用户的默认设置。
- 与用户相关的命令有:
useradd
命令用于创建新的用户账户。它会读取/etc/default/useradd
文件中的默认设置,并将新用户的信息添加到/etc/passwd
、/etc/shadow
和/etc/group
文件中。passwd
命令用于更改用户密码。它会修改/etc/shadow
文件中的密码字段,将新密码加密后保存。usermod
命令用于修改现有用户账户的属性。它可以修改/etc/passwd
和/etc/shadow
中的相关字段,如用户名、用户组、用户主目录等。userdel
命令用于删除用户账户。它会从/etc/passwd
、/etc/shadow
和/etc/group
文件中删除与用户相关的信息。id
命令用于显示用户的标识号(UID)和所属的组标识号(GID)。它会读取/etc/passwd
和/etc/group
文件来获取用户和组的相关信息。who
命令用于显示当前登录系统的用户信息。它读取/var/run/utmp
文件来获取已登录用户的信息。
- 基本子文件夹:
网络配置信息:
- 手动配置网络:
/etc/hosts
: 这个文件用于配置主机名与IP地址的映射关系。你可以在这里手动添加或编辑条目,以便在本地系统上解析主机名。/etc/resolv.conf
: 这个文件包含了用于解析域名的DNS服务器的配置信息。你可以在这里指定DNS服务器的IP地址、搜索域等。/etc/network/interfaces
或/etc/sysconfig/network-scripts/ifcfg-*
: 这些文件用于配置网络接口的设置,如IP地址、子网掩码、网关等。具体文件名称可能因不同的Linux发行版而有所不同。- 与用户信息相关的不同, 网络配置相关配置文件多是用于手动配置. 下面列出的命令通过读取内核的网络状态信息,不涉及具体的文件。
ip
:ip
命令是一个强大的网络工具,用于配置和显示网络接口、路由表、网络命名空间等。它可以读取和修改网络接口的各种属性,如 IP 地址、子网掩码、网关等。
netstat
:netstat
命令用于显示网络状态和连接信息。它可以显示当前活动的网络连接、监听的端口以及路由表等信息。route
:route
命令用于配置和显示网络路由表。它可以添加、删除和修改路由表项,指定网络流量的传输路径。iptables
:iptables
命令是一个强大的防火墙工具,用于配置和管理网络包的过滤和转发规则。它可以读取和修改防火墙规则,控制网络流量的传输。为什么没有
ifconfig
? 因为ip
命令要强大的多, 故而最新版Ubuntu甚至不默认安装该命令了.
- 手动配置网络:
硬盘配置信息:
/etc/fstab
:/etc/fstab
文件是用于存储文件系统挂载信息的配置文件。它包含了挂载点、文件系统类型、设备文件和挂载选项等信息。通过编辑该文件,你可以配置系统启动时自动挂载文件系统的行为。- 相关命令:
fdisk
:fdisk
命令用于分区硬盘。它可以读取和修改硬盘的分区表,允许你创建、删除、调整分区等操作。fdisk
命令直接操作硬盘设备文件,例如/dev/sda
。parted
:parted
命令也用于分区硬盘,但提供了更高级的分区操作功能。它可以读取和修改硬盘的分区表,支持更多的分区类型和功能。parted
命令直接操作硬盘设备文件,例如/dev/sda
。mkfs
:mkfs
命令用于创建文件系统。它可以在指定的分区上创建不同类型的文件系统,如 ext4、NTFS 等。mkfs
命令直接操作分区设备文件,例如/dev/sda1
。mount
:mount
命令用于挂载文件系统。它可以将指定的文件系统挂载到指定的挂载点上,使得文件系统中的内容可访问。mount
命令会修改/etc/fstab
文件以记录挂载信息。umount
:umount
命令用于卸载文件系统。它可以卸载已经挂载的文件系统,使得挂载点上的内容不再可访问。umount
命令会修改/etc/fstab
文件以移除挂载信息。fsck
:fsck
(file system check)命令用于检查和修复文件系统。它可以读取和修改文件系统的元数据,检测和修复文件系统中的错误。fsck
命令直接操作文件系统设备文件,例如/dev/sda1
。
- 工作逻辑:
- 分区操作:
fdisk
和parted
命令直接操作硬盘的分区表,可以读取和修改分区信息,包括创建、删除、调整分区等。 - 文件系统操作:
mkfs
命令用于创建文件系统,可以在指定的分区上创建不同类型的文件系统。mount
命令用于挂载文件系统,将文件系统挂载到指定的挂载点上。
- 分区操作:
/etc/apt
目录相关的重要文件和目录:/etc/apt/sources.list
或/etc/apt/sources.list.d/
目录:这些文件用于定义软件包源(软件仓库)。sources.list
是主要的源配置文件,而sources.list.d/
目录包含了其他源配置文件,通常以.list
扩展名结尾。这些文件指定了系统从哪些源获取软件包,包括官方源、第三方源以及其他自定义源。/etc/apt/apt.conf
或/etc/apt/apt.conf.d/
目录:这些文件是APT的配置文件。你可以在这里设置各种选项,如代理设置、下载限速等。apt.conf
是主要的配置文件,而apt.conf.d/
目录包含了其他配置文件,通常以.conf
扩展名结尾。/etc/apt/preferences
:该文件是一个可选的配置文件,用于定义软件包的优先级。你可以使用它来指定系统如何处理软件包版本冲突或优先选择特定版本。/etc/apt/trusted.gpg
和/etc/apt/trusted.gpg.d/
目录:这些文件和目录包含了用于验证软件包签名的 GPG 密钥。APT使用这些密钥来确保下载的软件包是经过验证和信任的。
/etc/crontab
是一个系统级别的crontab文件,用于配置在Linux系统上定期运行的任务。Cron是一个用于执行预定时间间隔任务的守护进程。在/etc/crontab
文件中,你可以定义系统范围的定时任务。这些任务可以是系统维护、备份、日志清理、定期脚本等等。m
:分钟(0-59)h
:小时(0-23)dom
:一个月的某一天(1-31), 即day of a month
mon
:月份(1-12)dow
:星期几(0-7,其中0和7都代表星期日),即day of a week
user
:执行任务的用户command
:要运行的命令或脚本run-parts
命令表示运行路径下所有脚本.
- 上述文件表明: 每小时的第17分钟,系统会运行
/etc/cron.hourly
目录中的脚本;每天的早上6:25,系统会运行/etc/cron.daily
目录中的脚本;每周的星期天早上6:47,系统会运行/etc/cron.weekly
目录中的脚本;每月的第一天早上6:52,系统会运行 /etc/cron.monthly
目录中的脚本。- 当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab。但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的。
/etc/cron.d
是Linux系统中存放 Cron 任务的目录。Cron 是一个用于在预定时间或间隔上运行指定命令或脚本的任务调度程序。在/etc/cron.d
目录中,你可以找到一系列以文件名结尾为.conf
的配置文件,这些文件包含了 Cron 任务的定义。
- 当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab。但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的。
/etc/ssh/sshd_config
: 这个文件包含了SSH服务器的配置选项,如端口号、允许的用户、登录选项等。它用于控制SSH连接的行为。/etc/alternatives
是一个特殊的目录,它在Linux系统中扮演着重要的角色。它实际上是一组符号链接(symbolic link)的集合,用于提供系统中不同可替代项之间的选择。- 在Linux系统中,有一些命令或路径有多个可选项,比如不同的版本或不同的实现方式。正是
/etc/alternatives
目录中的符号链接允许你在这些可选项之间进行切换。每个符号链接指向一个真正的可执行文件、路径或其他资源。通过更改这些符号链接,你可以更改系统中默认使用的可选项。 update-alternatives --config <link>
用于管理这些链接. 替换<link>
为你要管理的符号链接名,比如vi
。显示一个列表,其中列出了可用的选项及其对应的编号、名称和路径。
- 在Linux系统中,有一些命令或路径有多个可选项,比如不同的版本或不同的实现方式。正是
/etc/sysctl.conf
是一个重要的配置文件,用于管理Linux系统内核参数。内核参数是控制和调整操作系统内核行为的设置。- 在
/etc/sysctl.conf
文件中,你可以定义和修改各种内核参数的值。这些参数影响着系统的性能、安全性和行为。通过修改这些参数,你可以优化系统的性能、改变网络设置、提高安全性等。 - 以下是一些
/etc/sysctl.conf
文件的示例设置:
- 在