Linux就该这么学(六)

  • Post author:
  • Post category:linux



一、从“/”开始


Linux 系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、rooT 均代表不同的目录,并且文件名称中不得包含斜杠(/)。Linux 系统中的文件存储结构如下图所示。

在这里插入图片描述

在 Linux 系统中,最常见的目录以及所对应的存放内容如下表所示:

在这里插入图片描述

在 Linux 系统中另外还有一个重要的概念—路径。路径指的是如何定位到某个文件,分为绝对路径与相对路径。绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。


物理设备的命名规则


在 Linux 系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。

系统内核中的 udev 设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev 目录下的设备文件。Linux 系统中常见的硬件设备及其文件名称如下表所示。

在这里插入图片描述

由于现在的 IDE 设备已经很少见了,所以一般的硬盘设备都是以“/dev/sd”开头。而一台主机上可以有多块硬盘,因此系统采用 a~z 来代表 26 块不同的硬盘(默认从 a 开始分配),而且硬盘的分区编号也很有讲究:

➢ 主分区或扩展分区的编号从 1 开始,到 4 结束;

➢ 逻辑分区从编号 5 开始。

在这里插入图片描述

首先,/dev/目录中保存的应当是硬件设备文件;其次,sd 表示的是存储设备;然后,a表示系统中同类接口中第一个被识别到的设备;最后,5 表示这个设备是一个逻辑分区。一言以蔽之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为 5 的逻辑分区的设备文件”。


二、挂载硬件设备



mount

命令

mount 命令用于挂载文件系统,格式为“mount 文件系统 挂载目录”。mount 命令中可用的参数及作用如下表所示。挂载是在使用硬件设备前所执行的最后一步操作。只需使用mount 命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了。对于比较新的 Linux 系统来讲,一般不需要使用-t 参数来指定文件系统的类型,Linux 系统会自动进行判断。而 mount 中的-a 参数则厉害了,它会在执行后自动检查/etc/fstab文件中有无被疏漏挂载的设备文件,如果有,则进行自动挂载操作。

在这里插入图片描述

例如,要把设备/dev/sdb2 挂载到/backup 目录,只需要在 mount 命令中填写设备与挂载目录参数就行,系统会自动判断要挂载文件的类型,命令如下:

[root@linuxprobe ~]# mount /dev/sdb2 /backup

如果在工作中要挂载一块网络存储设备,该设备的名字可能会变来变去,这样再写为sdb 就不太合适了。这时推荐用 UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作。

UUID 是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备。那么,怎么才能得知独立硬盘的 UUID 呢?答案是使用 blkid命令。

blkid 命令用于显示设备的属性信息,英文全称为“block id”,语法格式为“blkid [设备名]”。使用 blkid 命令来查询设备 UUID 的示例如下:

[root@linuxprobe~]# blkid
/dev/sdb1: UUID="2db66eb4-d9c1-4522-8fab-ac074cd3ea0b" TYPE="xfs" PARTUUID="eb23857a-01"
/dev/sdb2: UUID="478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG" TYPE="ext4" PARTUUID="eb23857a-02"

有了设备的 UUID 值之后,就可以用它挂载网络设备了:

[root@linuxprobe~]# mount UUID=478fRb-1pOc-oPXv-fJOS-tTvH-KyBz-VaKwZG /backup

虽然按照上面的方法执行 mount 命令后就能立即使用文件系统了,但系统在重启后挂载就会失效,也就是说需要每次开机后都手动挂载一下。这肯定不是我们想要的效果,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”(各字段的意义见下表)写入到/etc/fstab 文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能一劳永逸了。

在这里插入图片描述

如果想将文件系统为 Ext4 的硬件设备/dev/sdb2 在开机后自动挂载到/backup 目录上,并保持默认权限且无须开机自检,就需要在/etc/fstab 文件中写入下面的信息,这样在系统重启后也会成功挂载。

在这里插入图片描述

由于后面需要使用系统镜像制作 Yum/DNF 软件仓库,我们提前把光盘设备挂载到/media/cdrom 目录中。光盘设备的文件系统格式是 iso9660:

在这里插入图片描述

写入到/etc/fstab 文件中的设备信息并不会立即生效,需要使用 mount -a 参数进行自动挂载:

[root@linuxprobe~]# mount -a


df

命令

df 命令用于查看已挂载的磁盘空间使用情况,英文全称为“disk free”,语法格式为“df -h”。

如果想查看当前系统中设备的挂载情况,非常推荐大家试试 df 命令。它不仅能够列出系统中正在使用的设备有哪些,还可以用-h 参数便捷地对存储容量进行“进位”操作。例如,在遇到 10240K 的时候会自动进位写成 10M,非常方便我们的阅读。

在这里插入图片描述

对了!说到网络存储设备,建议您在 fstab 文件挂载信息中加上_netdev 参数。加上后系统会等联网成功后再尝试挂载这块网络存储设备,从而避免了开机时间过长或失败的情况。

在这里插入图片描述


umount

命令

挂载文件系统的目的是为了使用硬件资源,而卸载文件系统则意味不再使用硬件的设备资源。既然挂载操作就是把硬件设备与目录两者进行关联的动作,那么卸载操作只需要说明想要取消关联的设备文件或挂载目录的其中一项即可,一般不需要加其他额外

的参数。

umount 命令用于卸载设备或文件系统,英文全称为“un mount”,语法格式为“umount [设备文件/挂载目录]”。

[root@linuxprobe~]# umount /dev/sdb2

如果我们当前就处于设备所挂载的目录,系统会提示该设备繁忙,此时只需要退出到其他目录后再尝试一次就行了。轻松搞定。

[root@linuxprobe~]# cd /media/cdrom/
[root@linuxprobe cdrom]# umount /dev/cdrom
umount: /media/cdrom: target is busy.
[root@linuxprobe cdrom]# cd~
[root@linuxprobe~]# umount /dev/cdrom
[root@linuxprobe~]#


注意

:挂载操作就像两人结为夫妻,双方需要同时到场,信息一旦被登记到民政局的系统中,再想重婚(重复挂载某设备)可就不行喽。

注意:开机后进入紧急模式,如何处理

没事闲着无聊给磁盘分区,导致Ubuntu载入时无法识别/路径,查找方法修改/etc/fstab文件夹,在里面增加UUID启动条目,但是却发现即使在root权限下也无法对此文件进行修改。解决办法如下:

mount -o remount,rw /


lsblk

命令用于查看已挂载的磁盘的空间使用情况,英文全称为“list block id”。

[root@linuxprobe~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
	├─rhel-root 253:0 0 17G 0 lvm /
	└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 6.6G 0 rom /media/cdrom


du

命令

du 命令用查看分区或目录所占用的磁盘容量大小,英文全称为“disk usage”,语法格式为“du -sh 目录名称”。

既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,先来看一个用于查看文件数据占用量的 du 命令。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。

在使用 Window 系统时,我们总会遇到“C 盘容量不足,清理垃圾后又很快被占满”的情况。在 Linux 系统中可以使用 du -sh /*命令来查看在 Linux 系统根目录下所有一级目录分别占用的空间大小,在 1s 之内就能找到哪个目录占用的空间最多:

[root@linuxprobe dev]# du -sh /*
0	/bin
113M	/boot
0	/dev
29M	/etc
68K	/home
0	/lib
0	/lib64
6.7G	/media
0	/mnt
0	/opt
0	/proc
85M	/root
9.6M	/run
0	/sbin
0	/srv
0	/sys
16K	/tmp
3.5G	/usr
167M	/var


ln

命令

ln 命令用于创建文件的软硬链接,英文全称为“link”,语法格式为“ln [参数]原始文件名 链接文件名”。

ln 命令的可用参数以及作用如下表所示。在使用 ln 命令时,是否添加-s 参数,将创建出性质不同的两种“快捷方式”。

在这里插入图片描述

为了更好地理解软链接、硬链接的不同性质,我们先创建出一个文件,为其创建一个软链接:

[root@linuxprobe~]# echo "Welcome to linuxprobe.com" > old.txt
[root@linuxprobe~]# ln -s old.txt new.txt
[root@linuxprobe~]# cat old.txt
Welcome to linuxprobe.com
[root@linuxprobe~]# cat new.txt
Welcome to linuxprobe.com
[root@linuxprobe~]# ls -l old.txt
-rw-r--r-- 1 root root 26 Jan 11 00:08 old.txt

原始文件名为 old,新的软链接文件名为 new。删掉原始文件后,软链接文件立刻就无法读取了:

[root@linuxprobe~]# rm -f old.txt
[root@linuxprobe~]# cat new.txt
cat: readit.txt: No such file or directory

接下来针对原始文件 old 创建一个硬链接,即相当于针对原始文件的硬盘存储位置创建了一个指针。这样一来,新创建的这个硬链接就不再依赖于原始文件的名称等信息,也不会因为原始文件的删除而导致无法读取了。同时可以看到创建硬链接后,原始文件的硬盘链接数量增加到了 2。

[root@linuxprobe~]# echo "Welcome to linuxprobe.com" > old.txt
[root@linuxprobe~]# ln old.txt new.txt
[root@linuxprobe~]# cat old.txt
Welcome to linuxprobe.com
[root@linuxprobe~]# cat new.txt
Welcome to linuxprobe.com
[root@linuxprobe~]# ls -l old.txt
-rw-r--r-- 2 root root 26 Jan 11 00:13 old.txt

这是一个非常有意思的现象。创建的硬链接文件竟然会让文件属性第二列的数字变成了2,这个数字表示的是文件的 inode 信息块的数量。相信同学们已经非常肯定地知道,即便删除了原始文件,新的文件也会一如既往地可以读取,因为只有当文件 inode 数量被“清零”时,才真正代表这个文件被删除了。

[root@linuxprobe~]# rm -f old.txt
[root@linuxprobe~]# cat new.txt
Welcome to linuxprobe.com



版权声明:本文为wangqing84411433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。