一切从“/”开始
在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,一切皆为件
与windows操作系统不同,Linux系统内不存在C/D/E/F盘等,一切文件都是从根(/)目录开始的
Linux系统中按照文件系统层次化标准(FHS)采用树形结构存放文件,以及定义了常见目录的用途
Linux系统中的文件和目录名称是严格区分大小写的,文件名称不能包含斜杠(/)
Linux系统的文件存储结构
前面提到的FHS是根据以往无数Linux系统用户和开发者的经验而总结出来的,是用户在Linux系统中存储文件时需要遵守的规则,用于指导我们应该把文件保存在什么位置,以及告诉用户应该在何处找到所需的文件
Linux系统中常见的目录名称以及相应内容
目录名称 | 应放置文件的内容 |
/boot | 开机所需的文件——内核、开机菜单以及所需配置文件等 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户家目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及/bin与/sbin下面的命令需要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方软件 |
/root | 系统管理员的家目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
Linux系统中还有一概念——路径
路径指的是如何定位到某个文件,分为:绝对路径 和 相对路径
绝对路径指的是从根目录(/)开始写起的文件或目录名称
相对路径指的是相对于当前路径的写法
物理设备的命名规则
常见的硬件设备及其文件名称
硬件设备 | 文件名称 |
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
现在的IDE设备很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。
一台主机上可以有多块硬盘,因此采用a~p来代表16块不同的硬盘(默认从a开始分配)
硬盘的分区编号也有规则:
①主分区或扩展分区的编号从1开始,到4结束
②逻辑分区从编号5开始
首先,/dev/目录中保存的应当是硬件设备文件;其次,sd表示是存储设备;然后,a表示系统中同类接口中第一个被识别到设备,最后,5表示这个设备是一个逻辑分区。
所谓扩展分区,严格上讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表
硬盘分区的规划
文件系统
最常见的文件系统如下:
Ext3:是一款日志文件系统,能够在系统异常死机时避免文件系统资料丢失,并能自动修复数据的不一致与错误
Ext4:Ext3的升级版,作为RHEL6系统中的默认文件管理系统,它支持的存储容量高达1EB,且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率
XFS:是一种高性能的日志文件系统,而且是RHEL7中默认的文件管理系统,它的优势在发生意外死机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极地的计算和存储性能。最大可支持的存储容量为18EB
挂载硬件设备
mount命令
mount命令用于挂载文件系统
格式为:mount 【文件系统】 挂载目录
mount命令中可用的参数
参数 | 作用 |
-a | 挂载所有在/etc/fstab中定义的文件系统 |
-t | 指定文件系统的类型 |
挂载是在使用硬件设备前所执行的最后一步操作
只需要用mount命令把硬盘设备或分区与一个目录文件进行关联,然后就能在这个目录中看到硬件设备中的数据了
对于比较新的Linux系统来讲,一般不需要使用-t参数来指定文件系统的类型,Linux系统会自动进行判断。
而mount命令中的-a参数,它会在执行后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,如果有,则自动挂载操作
umount命令
umount命令用于撤销已经挂载的设备文件
格式为:umount 【挂载点/设备文件】
添加硬盘设备
fdisk命令
在Linux系统中,管理硬盘设备最常用的方法当属fdisk命令
格式为:fdisk 【磁盘名称】
fdisk命令中的参数及其作用
参数 | 作用 |
-m | 查看全部可用的参数 |
-n | 添加新的分区 |
-d | 删除某个分区的信息 |
-l | 列出所有可用的分区类型 |
-t | 改变某个分区的类型 |
-p | 查看分区信息 |
-w | 保存并退出 |
-q | 不保存直接退出 |
我们先使用熟悉一下fdisk命令
fdisk -l
fdisk /dev/nvme0n2 分区
我们输入m,查看帮助
输入参数n尝试添加新的分区。系统会要求您是选择继续输入参数p,还是输入参数e来创建扩展分区。我们这里输入参数p来创建一个主分区。
在确认创建一个分区后,系统要求您先输入主分区的编号。
主分区的编号:1-4
因此这里输入默认的1就行了,不输入任何数字,系统自动选择默认值
接下来系统会提示定义起始的扇区位置,这不需要改动,我们直接回车键默认即可,系统会自动算出最靠前的空闲扇区的位置
最后,系统会要求定义分区的结束扇区,这其实就是要去定义整个分区的大小是多少
我们再次使用参数p来查看硬件设备中的分区信息
我们设置好了以后,千万记得输入w参数进行保存
在上述步骤完成后,Linux系统会自动把这个硬盘主分区抽象成文件
我们可用file命令查看该文件的属性
如果没有同步的话可用使用partprobe手动同步到内核,输入几次后还没同步,就重启把
如果硬件存储设备没有进行格式化,则Linux系统无法得知这么在其上写入数据。因此,在对存储设备进行分区后还需进行格式化。
在Linux系统中用于格式化操作的命令是:mkfs
格式:mkfs.文件类型名称 硬盘文件
简单挂载一下
du命令
既然存储设备已经顺利挂载,接下来就可尝试通过挂载点目录向存储设备中写入文件了
在写入文件之前,先介绍用于查看文件数据占用量的du命令
格式为:du 【选项】【文件】
简单来说就是查看硬盘空间的情况
我们先cp一些文件放入挂载目录
命令行挂载后,设备文件会在下一次重启的时候失效。如果想让这个设备文件的挂载永久有效,则需要把挂载的信息写入配置文件
添加交换分区
SWAP(交换)分区是一种通过在硬盘中预先划分一定发空间,然后将把内存中暂时不常用的数据临时存放在硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用技术,其设计目的是为了解决真实物理内存不足的情况。但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实物理内存耗尽后才会调用交换分区的资源。
交换分区的建立与挂载并使用存储设备的过程很像
在生产环境中:交换分区的大小一般是真实物理内存的1.5-2倍
使用SWAP分区专用的格式化命令 mkswap ,对新建的主分区进行格式化操作:
使用swapon命令把准备好的SWAP分区设备正式挂载到系统中。
我们可用free -m命令查看交换分区的大小
为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关的信息写入到配置文件中去,记得保存:
磁盘容量配额
硬件资源是固定的有限的,如果某些用户一直在Linux系统上创建文件或者存放电影,硬盘空间总有一天会被占满。针对这种情况。root管理员就需要使用磁盘容量配额服务来限制某个用户或者某个用户组针对特定文件夹可使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。
可用使用quota命令来进行管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。
quora命令有两种功能:
①软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用
②硬限制:当达到硬限制时会提示用户,且强制终止用户的操作
reboot之后
接下来创建一个用于检查quota磁盘容量配额效果的用户tom,并针对/boot目录增加其他人的写权限,保证用户能够正常写入数据:
xfs-quota命令
xfs-quota命令是专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令
格式: xfs-quota 【参数】配额 文件系统
当配置好上述的各种软硬限制后,尝试切换到这个普通用户,然后分别尝试创建一个体积为5MB和8MB的文件,可发现,在创建8MB的文件时受到了限制:
edquota命令
edquota命令用于编辑用户的quota配额限制
格式为:edquota 【参数】【用户】
在用户设置了quota磁盘配额限制后,可用使用edquota命令按需修改限额的数值
其中
-u 参数表示要针对那个用户
-g 参数表示要针对那个用户组
edquota命令会调用Vi或Vim编辑器来让root管理员修改要限制的具体细节
下面我们把tom的限额从5提到8MB
软硬方式链接
链接就像windows系统中的快捷方式一样
①硬链接:硬链接文件与原始文件其实是同一个文件,只是名字不一样。我们每添加一个硬链接,该文件的inode连接数就会加1,而且只有当该文件inode连接数为0时,才能彻底删除它。
②软链接(符号链接):仅仅包含所链接文件的路径名,因此能链接目录。也可用跨越文件系统进行链接,但是,当原始文件删除后,链接文件也将失效。这点和windows上的快捷方式一样的性质。
ln命令
ln命令用于创建链接文件
格式为:ln 【选项】目标
Usage: ln [OPTION]... [-T] TARGET LINK_NAMEor: ln [OPTION]... TARGETor: ln [OPTION]... TARGET... DIRECTORYor: ln [OPTION]... -t DIRECTORY TARGET...
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist. Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.必选参数对长短选项同时适用。--backup[=CONTROL] 为每个已存在的目标文件创建备份文件-b 类似--backup,但不接受任何参数-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)-f, --force 强行删除任何已存在的目标文件-i, --interactive prompt whether to remove destinations-L, --logical dereference TARGETs that are symbolic links-n, --no-dereference treat LINK_NAME as a normal file ifit is a symbolic link to a directory-P, --physical make hard links directly to symbolic links-r, --relative create symbolic links relative to link location-s, --symbolic make symbolic links instead of hard links-S, --suffix=SUFFIX override the usual backup suffix-t, --target-directory=DIRECTORY specify the DIRECTORY in which to createthe links-T, --no-target-directory treat LINK_NAME as a normal file always-v, --verbose print name of each linked file--help 显示此帮助信息并退出--version 显示版本信息并退出The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:none, off 不进行备份(即使使用了--backup 选项)numbered, t 备份文件加上数字进行排序existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份simple, never 永远使用普通方式备份Using -s ignores -L and -P. Otherwise, the last option specified controls
behavior when a TARGET is a symbolic link, defaulting to -P.GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 ln 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/ln>