往期目录:
从0开始学习Linux——简介&安装
从0开始学习Linux——搭建属于自己的Linux虚拟机
从0开始学习Linux——文本编辑器
从0开始学习Linux——Yum工具
从0开始学习Linux——远程连接工具
上期教程我们学习了如何使用远程连接工具去连接Linux系统,这节教程我们将了解Linux系统的文件目录。
在Linux系统中,文件系统的目录结构是层次化的,根目录 (/
) 位于最上层,所有其他文件和目录都在其下。Linux的目录结构遵循文件系统层次标准(FHS),这是一个定义标准目录和文件位置的规范。
上图就是Linux系统的一个文件目录,我们可以发现它和我们的windows这些系统的目录结构是不一样的。在 Linux 中,文件系统不是像 Windows 中那样使用驱动器号(如 C:、D:)。而是所有的文件和设备都被挂载到根目录/下。硬盘分区、外部存储设备等都可以挂载到某个目录下。例如,一个外部硬盘可以挂载到/mnt/data,一个新创建的分区可以挂载到/data。
一、“/”根目录
Linux 是一个类 Unix 系统,它采用层次化的文件系统结构。根目录是整个文件系统的顶级目录,所有其他文件和目录都是从此目录衍生出来的。它是文件系统的起点。
注意:在 Linux 中,整个系统只有一个根目录,即/。所有其他目录(如/home、/usr等)都是根目录下的子目录。
二、“/bin”目录
在 Linux 操作系统中/bin(Binary的缩写)目录是一个非常重要的系统目录,它存放了系统启动和正常运行所必需的基本命令和可执行文件。该目录对于系统的基本操作至关重要,通常是操作系统中最核心的一部分之一。
2.1 /usr/bin目录
在Linux系统中/bin是指向/usr/bin目录的,也就是说/bin目录是/usr/bin目录的一个快捷方式。
也就是说我们打开/usr/bin目录和/bin目录其实是一样的,因为/bin目录是/usr目录的一个快捷方式。
注意:由于系统不一样或者版本不一样,可能对/bin和/usr/bin的处理关系也有所不同。
2.2 bin目录文件结构
/bin目录的主要目的是存放系统的基本命令(文件管理、系统监控、硬件管理、网络配置等常用功能的程序命令),这些命令通常是系统启动和恢复过程中所必需的,或者是单用户模式下使用的命令。它包含了大多数管理员和普通用户日常使用的基本命令。所有存储在该目录中的可执行文件必须是可以在没有其他文件系统或挂载点的情况下运行的,因此 /bin目录中的工具通常都是小巧且高效的。
/bin目录常见命令如下所示:
- ls:列出目录内容
- cp:复制文件或目录
- mv:移动文件或目录
- rm:删除文件或目录
- cat:查看文件内容
- echo:输出文本到终端
- pwd:显示当前目录路径
- chmod:更改文件权限
- chown:更改文件所有者
- ln:创建文件链接
- bash:Bash shell 命令解释器
- tar:打包和解包文件
- gunzip:解压缩.gz格式的文件
- ps:查看系统进程
- kill:终止进程
上述命令我们将在后续教程中陆陆续续的使用到。
对于上述命令我们做一个大致分类:
- 系统命令:如ls、cv、mp等。
- Shell 命令:如 bash,sh等。
- 系统工具:如 kill,ps,mount 等。
- 程序工具:如 tar,gzip,zip 等。
补充:
在Linux系统中,命令指的是你在终端输入的指令。命令可以是可执行文件、脚本、内置命令或外部程序。命令的作用是执行特定的操作,而可执行文件是实际的二进制文件,包含计算机能够执行的指令。
2.2 /bin目录挂载&重要性
/bin目录通常是 根文件系统的一部分,并且在系统启动时首先挂载。它包含了一些必须能够在根文件系统无法访问其他文件系统时就能运行的程序。因此,/bin 目录中的程序是非常关键的,系统故障恢复时也需要这些命令来进行修复和诊断。
在某些特殊的 Linux 系统配置中,可能会使用一个单独的、仅包含/bin 和最必要的命令的"紧急"根文件系统。这样,系统就可以在某个严重错误时最小化恢复到一个工作状态。
三、”/sbin“目录
/sbin(sbin 是 "System Binary"(系统二进制)的缩写)目录是一个非常重要的系统目录,用于存放系统管理命令的目录即专门用于存放系统管理和修复等高级任务所需的二进制可执行文件。这些文件通常用于系统的启动、维护和修复,不同于普通的用户程序,它们通常是由系统管理员 (root 用户) 执行的,也就是说普通用户通常不需要访问这个目录中的命令,除非他们有足够的权限(如 root 权限)。
注意:与/bin 目录类似,/sbin 也存放的是二进制可执行文件(如ls、cp、mv 等基本命令)。这些文件通常是静态链接的,这意味着它们不依赖于共享库,能够在最基础的环境下运行。
3.1 关机&重启
- shutdown:关机命令,用于安全地关闭系统。
- reboot:重启系统。
- halt:停止系统的所有进程,并使其进入停止状态。
- poweroff:关闭电源,关闭系统。
3.2 系统修复&维护
- fsck:文件系统一致性检查工具,用于检查和修复损坏的文件系统。
- mount:挂载文件系统。
- umount:卸载文件系统。
3.3 网络
- ifconfig:用于查看或配置网络接口(如果该命令执行不了就说明没有安装工具,可以先安装sudo yum install net-tools,然后再去执行)。
- ip:用于网络配置的现代工具,取代了 ifconfig。
- route:显示或修改路由表。
- netstat:显示网络连接、路由表、接口统计等。
3.4 磁盘管理
- parted:磁盘分区管理工具。
- fdisk:用于管理磁盘分区的工具。
- mkfs:格式化磁盘并创建文件系统。
3.5 系统进程
- init:初始化进程,用于启动和管理系统的运行级别(runlevel)。
- systemctl:用于管理 systemd 服务,启动、停止、重启服务等。
- service:传统的服务管理命令(在使用 systemd 后,systemctl 是更推荐的工具)。
3.6 /usr/sbin
在Centos7这里/sbin还是指向的是/usr/sbin里面的。
四、”/boot“目录
/boot目录包含启动操作系统所需的文件,如Linux内核文件和启动引导程序(如GRUB)。
五、”/dev“目录
该目录用于存放设备文件,这些文件表示系统中的硬件设备(例如磁盘、终端、打印机等)。
六、”/etc“目录
/etc目录是一个非常重要的系统目录,主要用于存储系统和应用程序的配置文件。这个目录包含了操作系统、服务、用户和系统配置等方面的所有配置文件,管理员通过编辑这些文件来管理和定制系统行为。
6.1 常见文件&目录
6.1.1 /etc/hostname
该文件存储系统的主机名(hostname),即机器在网络中的名称,当系统启动时,操作系统会从这个文件读取主机名。
6.1.2 /etc/fstab
该文件用于存储文件系统的挂载信息也就是定义在系统启动时应该自动挂载的磁盘分区、网络共享等。比如,它会列出硬盘分区、挂载点、文件系统类型、挂载选项等信息。
6.1.3 /etc/hosts
该文件用于存储静态的IP地址与主机名映射。系统会首先检查这个文件来解析域名,如果无法通过DNS解析域名,就会通过/etc/hosts文件查找。
6.1.4 /etc/passwd
该文件用于存储系统用户账户的基本信息。每个用户的相关信息(如用户名、UID、GID、家目录、默认shell等)都记录在这个文件中。此文件可以让你查看或编辑用户的基本信息。
6.1.5 /etc/group
该文件用于存储用户组的信息。每个用户组的基本信息(如组名、GID、组成员)都记录在此文件中。
6.1.6 /etc/sudoers
该文件用于配置sudo权限文件,定义哪些用户可以执行特定的命令,以及是否需要提供密码等。通过visudo命令进行编辑,因为它会进行语法检查以避免配置错误。
6.1.7 /etc/sysconfig/
此目录包含了 CentOS 系统的许多配置信息,包括各类系统服务和程序的配置文件,如网络配置、系统安全、主机名、语言设置等。
例如:/etc/sysconfig/network存储网络配置,/etc/sysconfig/network-sctripts 目录包含了网络接口的配置文件。
6.1.8 /etc/selinux/
此目录包含 SELinux(Security-Enhanced Linux)相关的配置文件。
6.1.9 /etc/init.d/
该目录下的脚本用于管理系统服务,主要用于传统的 SysVinit 服务管理,在 CentOS 7 中已经被systemd 所取代,但这些脚本仍然存在以保证向后兼容。
6.1.10 /etc/systemd/
该目录包含了 systemd 服务单元配置文件。systemd 是 CentOS 7 中的初始化系统和服务管理器,管理着系统的启动、服务的状态、依赖关系等。
6.1.11 /etc/crontab
系统级的 cron 定时任务配置文件。
6.1.12 /etc/ssh/
该目录存放 SSH 服务的配置文件,例如sshd_config(SSH 守护进程的配置文件),该文件控制 SSH 服务的行为和安全设置。
6.1.13 /etc/logrotate.conf
和 /etc/logrotate.d/
控制日志文件的轮转策略,定期删除或压缩旧日志文件,避免日志文件占用过多磁盘空间。
6.1.14 /etc/yum.repos.d/
存放 YUM 仓库的配置文件,定义了从哪些镜像站点安装和更新软件包。
6.1.15 /etc/ssl/
该目录用于存放 SSL 证书、密钥以及配置文件。
6.1.16 /etc/nsswitch.conf
该文件配置 DNS、NIS、LDAP 等数据库查找顺序。
七、”/home“目录
该目录用于存放所有用户的个人文件和配置文件,每个用户通常都有一个与用户名同名的目录。
例如我创建了一个admin用户,那么在该/home目录下就会有一个admin文件夹。
八、”/lib“目录
该目录用于存放系统和程序运行所需的共享库文件,类似Windows中的DLL文件,包括包括必要的动态链接库(如lbc.o)、内核模块等。
九、”/media“目录
该目录通常用于挂载可移动设备(如USB驱动器、CD/DVD等)。
插当入USB设备、光盘或其他外部存储设备时,Linux会自动将它们挂载到/media 下的某个子目录中。
十、”/mnt“目录
该目录用于临时挂载文件系统。管理员可以在此目录中挂载文件系统,以便进行维护或调试。
十一、”/opt“目录
/opt目录是一个用于存放附加应用程序的标准目录,它遵循 Linux 文件系统层次结构标准(Filesystem Hierarchy Standard, FHS)。这个目录通常包含了那些不是操作系统一部分的、由第三方提供的、独立安装的应用程序和软件包。
该目录的主要作用是用来存放那些由系统管理员或用户手动安装的、附加的软件包。这些软件包通常不属于操作系统的标准软件仓库,而是由第三方提供的独立应用程序、商业软件、或大规模的应用程序套件。
/opt目录的设计思想是将由第三方提供的应用程序与操作系统本身的文件隔离开来。这意味着,应用程序的安装文件和配置文件不会干扰到系统核心文件或其他软件的文件。因此,如果要卸载某个软件,只需要删除 /opt 目录下对应的子目录即可,而不必担心影响到系统其他部分。
注意:/opt目录的权限通常较为宽松,允许系统管理员安装第三方软件。然而,普通用户通常没有权限在/opt目录下创建或修改文件,只有管理员(root 用户)才有权限操作此目录。
十二、”/proc“目录
这是一个虚拟文件系统,不是存储在磁盘上的实际文件。它提供了内核和进程的信息。
十三、”/root“目录
这是超级用户(root)的个人目录,类似普通用户的/home/用户名,它可以存放root用户的个人配置文件、脚本等。/root 目录一般具有更高的权限。
十四、”/run“目录
该目录用于存放系统启动后运行时的临时数据,通常包括PID文件、锁文件、缓存等,包含系统运行时生成的状态信息,如 /run/utmp(当前登录用户的信息)等。
十五、”/srv“目录
该目录用于存放某些服务的特定数据。例如,Web服务器或FTP服务器的文件可以存放在这里。
例如/srv/www可能包含网站的文件,/run/ftp可能包含FTP服务的数据。
十六、”/sys“目录
该目录类似于 /proc,但是专注于系统硬件和内核信息,包含了关于设备驱动程序和内核模块的详细信息。通过 /proc,用户可以访问系统的内核结构,查看或修改硬件设备的状态。
十七、”/tmp“目录
该目录用于存放临时文件,通常由应用程序生成,在重启系统后这些文件会被删除,比如应用程序生成的临时缓存文件、日志文件等。
十八、”/usr“目录
/usr是 Unix 系统中用于存放用户级程序和数据的一个目录。最初,/usr被用来存储可选的、非必需的程序和库文件,而 /bin和 /lib 用来存放系统的核心文件。随着时间的发展,/usr逐渐成为了一个系统重要组成部分,其中包含了大多数用户需要的程序、库、文档等。
18.1 常见子目录
- /usr/bin:这个目录是用户可执行程序的主要存放地。
- /usr/sbin:这个目录存放的是系统管理员(root 用户)执行的程序,通常用于系统管理、维护任务等。虽然普通用户不能执行这些命令(除非具有管理员权限),但这些命令通常对系统的管理和配置非常重要。
- /usr/lib:这个目录包含了系统和应用程序的共享库文件。共享库是动态链接库(DLL),它们为程序提供运行时支持,例如提供各种系统功能、图形界面、网络功能等。不同于静态库,动态库在程序运行时被加载。
- /usr/share:该目录主要存放系统中不依赖于架构的共享数据文件。这些文件通常是静态的、与平台无关的内容,比如文档、帮助文件、应用程序的共享资源等。
- /usr/include:该目录包含了系统中各类开发头文件(.h 文件)。这些文件定义了程序的接口,例如系统调用、库函数、数据结构等。开发人员在编写程序时,通常会包含这些头文件来使用操作系统提供的功能。
- /usr/local:该目录是用于存放手动安装的软件的地方。与 /usr 中的系统文件不同,/usr/local 主要用于存放管理员手动安装的程序、库和数据文件。通常,管理员会将自编译的应用程序安装到此目录,而不是系统自带的 /usr/bin或/usr/lib 中。
- /usr/src:该目录存放的是源代码文件,通常包括操作系统内核源码和其他程序的源代码。管理员可以在这个目录中编译内核或者其他软件包。
- /usr/liexec:这个目录存放的是一些系统服务和守护进程的可执行文件。它们并不直接供用户使用,而是为系统其他程序或服务提供支持。通常,这些文件会被系统自动调用。
补充:如果你安装的软件是由你自己编译的,或者是一些需要手动管理的程序,推荐将其安装到 /usr/local,如果你安装的是第三方的商业软件或一些需要隔离的应用,推荐使用 /opt。
十九、”/var“目录
该目录用于存放经常变化的文件,如日志文件、邮件、缓存等。
二十、绝对路径和相对路径
20.1 绝对路径
绝对路径是从文件系统的根目录”/“开始,完整地描述了文件或目录的定位方式。根目录是 Linux 系统中的最上层目录,所有其他文件和目录都在这个根目录下或其子目录中。
特点:
- 以
/
开头。 - 指定了文件或目录的完整位置,不依赖于当前工作目录。
- 在系统中,绝对路径唯一地标识了文件或目录。
例如:/var/log/syslog,这是另一个绝对路径,指向系统日志文件。
20.2 相对路径
相对路径是相对于当前工作目录(即当前所在的目录)而言的路径。当你使用相对路径时,它不以 / 开头,而是根据当前目录的位置来定位目标文件或目录。
特点:
- 不以 / 开头,而是根据当前工作目录来指定路径。
- 使用相对路径时,路径的解析依赖于你当前所在的目录。
- 相对路径通常比绝对路径简短,适合在特定环境中使用。
假设当前的工作目录是/home/admin:
- documents/file.txt:这是一个相对路径,指的是位于当前目录下 documents子目录中的 file.txt 文件即/home/admin/documents/file.txt。
- ../file.txt:
../
表示上一级目录, ../file.txt指的是/home/admin/file.txt 文件。 - ./file.txt:./表示当前目录,通常用来指定当前目录下的文件或程序,这里指的是当前目录下的file.txt文件即/home/admin/file.txt。
- file.txt:指的当前目录下file.txt即/home/admin/file.txt。
20.3 目录跳转
在linux中目录跳转可以使用cd命令完成。
我们可以使用绝对路径进行跳转,例如:cd /opt/xx/yy
当然我们也可以使用相对路径,假设我们现在在/opt/xx目录下,cd ../或者cd ..表示跳转到/opt/xx的父级目录即/opt,而./或者.则表示当前目录下。
补充:
cd ~命令是 Linux 系统中一个非常常用的命令,~是一个特殊的符号,代表当前用户的 家目录(Home Directory),当然我们也可以跳转到其它用户的家目录,例如cd ~root。