Linux和UNIX中的文件系统是文件系统的起点吗??

我们应该都知道Linux和UNIX中的文件系统是以/为根的树状文件结构,/是Linux和UNIX中的根目录,也是文件系统的起点。所有文件和目录都位于/路径下,包括我们经常听到的/usr、/etc、/bin、/home等。在早期的 UNIX 系统中,每个厂商都定义了自己的文件系统的命名结构,这种命名结构令人困惑,难以区分。

为了避免Linux系统上出现这种命名混乱,1994年推出了FSSTND(FileSystemStandard)的Linux文件系统层次标准。后来,UNIX团队将FSSTND发扬光大,成为后来的FHS(FileSystemHierarchyStandard)。

FHS标准使得很多Linux发行版(Linux发行版)都有统一的文件系统命名标准。换句话说:FHS 是一种文件系统命名标准。一般来说,Linux 发行版需要遵循 FHS 规定

目录结构和目录内容文件类型的权限

但是,FHS 只定义了两层规范。第一层是/下每个目录应该放什么文件数据。比如设置文件需要放在/etc下,可执行文件需要放在/bin和/sbin下;第二层是为/usr和/var这两个目录定义的。比如/usr/share需要放共享数据,/var/log需要放系统登录文件等。

下面我给大家介绍一下Linux下/下的定义和规范。

FHS 规格

首先介绍一下根目录的重要性和意义:

根目录是整个系统中最重要的目录。后面的目录都是从根目录派生的。更重要的是,根目录与启动、还原和系统修复有关。由于系统需要特定的环境来启动,所以当系统出错时,根目录也必须包含一个可以修复文件系统的程序。因此,FHS规定根目录的分区大小不宜设置过大。事实上,越小越好,以降低错误率。

FHS 还规定这些目录应该存在于根目录下。

/主目录

/home 目录是系统上的默认用户主目录。

/启动目录

/boot 目录包含引导操作系统所需的静态文件,例如 Linux 内核,这些文件对于系统引导至关重要。LinuxKernel 常用的文件名是 vmlinuz,但如果使用 grub2 引导程序,目录 /boot/grub2 也会存在。

我刚建的Linux,开机是这样的。

切勿删除 /boot 目录,否则可能会导致系统无法启动。

/dev 目录

/dev目录都是设备节点,是Linux系统中的设备或者内核提供的虚拟设备。这些设备节点对于系统的正常运行也至关重要。/dev 目录和子目录中的设备是字符设备和块设备。字符设备是鼠标、键盘、调制解调器,块设备是硬盘和软盘驱动器。在 /dev 目录中存储文件相当于存储设备。

比较重要的文件是

/dev/hda:主IDE通道上的主设备缓存文件是什么意思,指IDE/ATA硬盘时,主通道是指第一、二驱动器连接到主板或接口卡的通道。

/dev/hdb:主 IDE 通道上的从设备。

/dev/tty0:第一个虚拟控制台。虚拟控制台,也称为VC,也称为虚拟终端VT,是用于计算机用户界面的键盘和显示器的概念组合。

/dev/tty1:第二个虚拟控制台。

/dev/sda:主 SCSI 和 SATA 通道上的第一个设备。

/dev/lp0:第一个并行端口。

下面是我的Linux下的目录。

/etc 目录

/etc 目录是为计算机的本地配置文件保留的。系统的主要配置文件都放在这个目录下,比如账号密码、服务的启停等。一般来说,这个目录下的普通用户只有读权限,只有root用户。有权限修改(关于权限的问题,看完这个Linux权限可以看作者上一篇文章,是透明的!)

/etc 下比较重要的文件是

/etc/modprobe.d 内核驱动模块

/etc/passwd 存储用户密码

/etc/fstab 存储挂载信息

/etc/issue 存放系统启动时显示的内容

不要将二进制文件存储在 /etc 目录中。二进制文件最好放在 /sbin 和 /bin 中。

/etc 目录中有两个重要的文件。/etc/x11用于存放XWindow系统配置文件,如xorg.conf,/etc/opt主要用于存放第三方合作软件/opt的配置文件。

/lib 目录

系统中有很多函数库,/lib目录就像一个仓库,用来存放执行/bin和/sbin中的二进制文件所需的库。这些共享库映像对于系统引导和在根文件系统中执行命令特别有用。重要的。

/媒体目录

英文媒体,意思是 /media 可以存储 USB、DVD、CD-ROM 和 Zip 磁盘等可移动媒体的挂载点和子目录。

/mnt 目录

如果你想临时挂载一些额外的设备,你可以把它们放在 /mnt 目录下。其实在最早的时候,/mnt和/media是一样的,但是/media出现之后,就使用了这个目录。安装时。

/opt 目录

/opt/ 目录为大多数应用程序包提供存储空间,将文件放在 /opt/ 目录中的包会创建一个与包同名的目录。反过来,这个目录保存着分散在整个文件系统中的文件,为系统管理员提供了一种简单的方法来确定每个文件在特定包中的角色。

例如,如果 sample 是位于 /opt/ 目录中的特定包的名称,则所有文件都放在 /opt/sample/ 目录中的目录中,例如 /opt/sample/bin/ 用于二进制文件和 /opt /sample/man/ 用于手册页。

/proc 目录

/proc目录本身就是一个虚拟文件系统(virtual file system),它放置的数据在内存中,比如系统核心信息、出行信息、外围设备网络状态等。因为这个目录的数据在内存中,所以它本身并不占用磁盘空间。

这个目录中比较重要的文件是/proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/net/。

/sbin 目录

/sbin 目录存储了 root 用户使用的可执行文件。/sbin 中的可执行文件在启动时用于系统管理和执行系统恢复操作。除了 /bin 中的二进制文件,/sbin 还包含启动、恢复和修复系统所需的二进制文件。

/sbin 目录包含 arp、clock、halt、init、grub、ifconfig、route、shutdown 等。

/tmp 目录

该目录存放一些临时文件,系统重启时会清空。

/sys 目录

这个目录实际上与 /proc 非常相似。它也是一个虚拟文件系统,主要记录与内核和系统硬件相关的信息。该目录也不占用磁盘空间。

/usr 目录

/usr 目录是一个需要讨论的目录。很多读者误以为 /usr 是 user 的缩写。其实usr是UnixSoftwareResource的缩写。FHS 建议软件开发人员应合理地将数据放置在该目录的子目录中。,不要自己创建与软件无关的目录。

所有系统默认软件都会放在/usr下,所以这个目录有点类似于Windows中C:\Windows\+C:\Programfiles\这两个目录的组合。一般来说,系统安装好后,这个目录会占用大量的磁盘容量。/usr 的子目录建议有以下内容

*/usr/bin/* 普通用户可以使用的指令都放在这个目录下。从 CentOS7 开始,/usr/bin 下的指令与 /bin 目录下的指令相同。

*/usr/lib/* 基本上和/lib的功能一样,所以/lib链接到这个目录下。

/usr/local 系统管理员建议将本机下载的软件安装在该目录下,方便管理。

/usr/sbin不是系统正常运行所需的系统命令,最常见的是一些网络服务器软件的服务命令,但基本功能和/sbin差不多,所以目前/sbin链接到这个目录.

/usr/share 共享文件放置区,这个目录还有这些子目录 /usr/share/man, /usr/share/doc, /usr/share/zoneinfo

/usr/games 放置游戏相关数据的地方

/usr/includeC/C++等编程语言的header和include的地方也是直接链接的。

/usr/src 的通用源码建议放在这里,src 表示源码,核心源码建议放在/usr/src/linux 目录下。

/运行目录

早期的FHS规定系统开机后产生的信息应该放在/var/run目录下,新版本的FHS规定在/run下。

/var 目录

如果 /usr 是安装时会占用较大磁盘容量的目录,那么 /var 是系统运行后会逐渐占用磁盘容量的目录。/var 主要包括缓存、登录文件,以及运行一些软件产生的目录,包括程序文件,如 MySQL 数据库文件等。常见的目录有

/var/cache 应用程序缓存目录

/var/crash 系统错误信息

/var/log 日志记录

/var/run 进程的身份数据

/var/tmp 临时文件目录

/var/lock 文件锁定记录

/srv 目录

srv可以看做service的缩写,是一些网络服务启动后这些服务需要访问的数据目录,常见的服务如WWW、FTP等。

CentOS7 在目录的排列上与以前的版本不同。上面已经大致描述过了。这是一个总结。最大的不同是许多本应位于根目录中的目录已移至 /usr。然后进行链接设置,这些包括

/bin->/usr/bin/sbin->/usr/sbin/lib->/usr/lib/lib64->/usr/lib64/var/lock->/run/lock/var/run->/run

为了让大家更容易看到这些目录的作用,我手绘了一张图。图中这些目录之间的关系很像一棵树,所以这个目录也叫目录树。

目录树已经很清晰了,就不多说了。

绝对路径和相对路径

和其他系统一样,Linux中的路径也分为绝对路径(absolute)和相对路径(relative),写法如下:

从根目录开始的路径都是绝对路径。比如上面目录树中的/boot、/usr/local等都是相对于当前文件路径写的,比如../var/log目录。

这里需要注意的是,相对路径是相对于你当前的路径移动的。例如,如果您当前在 /boot 目录中,您想移动到 /usr/src 目录。绝对路径表示法:/usr/src 相对路径表示法:../usr/src

这里还有两个特殊目录需要注意:

.:表示当前目录,或者./可以表示..:表示上一个目录,或者../可以表示

关于绝对路径和相对路径的选择:当文件路径很长时,建议使用相对路径,因为不需要像绝对路径一样写所有路径,直接使用../;

但是从文件路径的正确性来看,绝对路径要好于相对路径。

如果你正在编写一个程序来管理系统,一定要使用绝对路径,因为无论你的文件路径在哪里,绝对路径都会找到指定的文件;如果文件被移动,相对路径可能找不到文件。.

目录相关指令

先说几个与目录相关的命令。

光盘

cd是changedirectory的缩写,这个命令可以切换当前工作目录,有以下四种切换方式

cd/pathname# 表示切换到指定工作目录 cd./# 表示切换到当前工作目录(不做任何切换) cd..# 表示切换到当前工作目录的上一个目录 cd~# 表示返回到当前用户内容

下面来演示一下这四种cd切换方式的操作。

可以看出我们使用cd/usr/local切换到命令目录;使用 cd./ 而不切换任何目录(浪费了两秒钟);使用 cd.. 切换到当前工作目录的上一级;使用 cd ~ 切换到当前登录用户的默认工作目录。

这里要注意的是cd~,如果直接使用cd,切换效果和cd~一样,也就是“cd~==cd”。

密码

上面还有一条指令,pwd。该指令是我们最常用的指令。它的使用频率几乎和cd一样。因为 cd 指令后面经常跟着 pwd 指令,可见 pwd 指令的重要性。

pwd 是 PrintWorkingDirectory 的缩写缓存文件是什么意思,是打印出当前目录的指令。

但是pwd不一定只用来显示当前工作路径,也可以用来显示指定工作目录下的文件路径

但是这个命令好像没什么用,因为我们已经知道了工作目录中的路径,还要打印什么?

mkdir

mkdir 用于新建目录,是makedirectory的缩写,一般情况下后面会跟两个参数。

-m:设置文件权限,直接设置,不考虑默认文件创建权限 -p:递归创建目录

下面是使用mkdir创建文件目录的操作

如上图,我们在/tmp文件目录下创建了一个名为test1的空目录,并打印出当前工作目录。

如果要创建一个不希望其他用户访问的目录,可以使用以下命令

mkdir-m711test2

上图中的ls-ld列出了文件目录的详细信息。如您所见,详细信息的第一部分是文件的权限。

一个一个地创建目录太麻烦了。现在我们要快速创建这些目录。比如我们要创建一个目录格式为/test1/test2/test3/test4。我们使用以下代码

Linux 会提示我们不能使用这种创建方式。

此时需要-p参数,它可以让我们递归创建目录,如下图

只是不建议使用-p,因为很容易打错字。. .

rmdir

rmdir 用于删除空目录。它的使用与 mkdir 非常相似。mkdir -p 用于递归创建目录。同样,rmdir -p 也可以递归删除目录。如下所示

这里需要注意的是,rmdir只删除空目录,这也意味着如果目录中有内容,则不能删除。如何删除它?可以直接使用rm -r 删除。

MV

使用 mv 可以修改目录的名称。例如,我们创建了一个名为 test 的目录。后来我们觉得这个目录不能反映它的所有者。我们想改变它的名字。这时候我们就可以使用mv命令对其进行修改了。.

了解了基本的目录操作之后,我们再思考一个问题,为什么我们可以在各个目录执行ls命令来显示内容呢?按理说 ls 不应该只能用在它的存储路径上吧?

首先,您需要了解 PATH 的概念。PATH 是一个环境变量。当我们执行一条指令时,系统会首先根据PATH设置在每个PATH下寻找一个名为ls的可执行文件。如果有多个 Executable 文件,则先搜索到的先执行。返回搜狐,查看更多

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论