文件系统¶
在本章中,您将学习如何使用文件系统。
**目标**: 在本章中,未来的 Linux 管理员将学习如何
管理磁盘上的分区;
使用 LVM 更好地利用磁盘资源;
为用户提供文件系统并管理访问权限。
以及发现
Linux 中的树形结构是如何组织的;
提供的不同类型的文件以及如何使用它们;
**硬件**、**磁盘**、**分区**、**lvm**、**linux**
**知识**:
**复杂性**:
**阅读时间**: 20 分钟
分区¶
分区将允许安装多个操作系统,因为它们不可能在同一个逻辑驱动器上共存。它还允许逻辑地分离数据(安全性、访问优化等)。
分区表存储在磁盘的第一个扇区(MBR:主引导记录)中,记录了物理磁盘划分为分区卷的划分。
对于 **MBR** 分区表类型,同一个物理磁盘最多可以划分为 4 个分区
- 主分区(或主分区)
- 扩展分区
警告
每个物理磁盘只能有一个扩展分区。也就是说,一个物理磁盘在 MBR 分区表中最多可以有
- 三个主分区加一个扩展分区
- 四个主分区
扩展分区不能写入数据和格式化,只能包含逻辑分区。MBR 分区表可以识别的最大物理磁盘为 **2TB**。
设备文件名命名规范¶
在 GNU/Linux 世界中,一切都是文件。对于磁盘,它们在系统中被识别为
硬件 | 设备文件名 |
---|---|
IDE 硬盘 | /dev/hd[a-d] |
SCSI/SATA/USB 硬盘 | /dev/sd[a-z] |
光驱 | /dev/cdrom 或 /dev/sr0 |
软盘 | /dev/fd[0-7] |
打印机(25 针) | /dev/lp[0-2...] |
打印机(USB) | /dev/usb/lp[0-15] |
鼠标 | /dev/mouse |
虚拟硬盘 | /dev/vd[a-z] |
Linux 内核包含大多数硬件设备的驱动程序。
我们称之为设备的是存储在/dev
之外的文件,用于标识主板检测到的不同硬件。
名为 udev 的服务负责应用命名规范(规则)并将其应用于它检测到的设备。
有关更多信息,请参阅 此处。
设备分区号¶
块设备(存储设备)后面的数字表示分区。对于 MBR 分区表,数字 5 必须是第一个逻辑分区。
警告
请注意!这里提到的分区号主要指块设备(存储设备)的分区号。
至少有两个命令用于分区磁盘:fdisk
和 cfdisk
。这两个命令都有一个交互式菜单。cfdisk
更可靠,优化程度更高,因此最好使用它。
使用fdisk
的唯一原因是当您想使用-l
选项列出所有逻辑设备时。fdisk
使用MBR分区表,因此它不支持**GPT**分区表,并且不能处理大于**2TB**的磁盘。
sudo fdisk -l
sudo fdisk -l /dev/sdc
sudo fdisk -l /dev/sdc2
parted
命令¶
parted
(分区编辑器)命令可以对磁盘进行分区,而不会像fdisk
那样有缺点。
parted
命令可以在命令行或交互式地使用。它还具有恢复功能,可以重写已删除的分区表。
parted [-l] [device]
在图形界面下,有一个非常完整的gparted
工具:Gnome PARtition EDitor。
gparted -l
命令列出计算机上的所有逻辑设备。
gparted
命令在没有参数的情况下运行时,将显示一个包含其内部选项的交互模式。
help
或错误的命令将显示这些选项。- 在此模式下,
print all
将与命令行上的gparted -l
具有相同的结果。 quit
返回提示符。
cfdisk
命令¶
cfdisk
命令用于管理分区。
cfdisk device
示例
$ sudo cfdisk /dev/sda
Disk: /dev/sda
Size: 16 GiB, 17179869184 bytes, 33554432 sectors
Label: dos, identifier: 0xcf173747
Device Boot Start End Sectors Size Id Type
>> /dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 33554431 31455232 15G 8e Linux LVM
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Partition type: Linux (83) x
x Attributes: 80 x
xFilesystem UUID: 54a1f5a7-b8fa-4747-a87c-2dd635914d60 x
x Filesystem: xfs x
x Mountpoint: /boot (mounted) x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
[Bootable] [ Delete ] [ Resize ] [ Quit ] [ Type ] [ Help ]
[ Write ] [ Dump ]
在没有LVM的情况下,物理介质的准备工作要经过五个步骤
- 设置物理磁盘;
- 对卷进行分区(磁盘的划分,可以安装多个系统,...);
- 创建文件系统(允许操作系统管理文件,树结构,权限,...);
- 挂载文件系统(在树结构中注册文件系统);
- 管理用户访问。
逻辑卷管理器 (LVM)¶
Logical Volume Manager(LVM)
由标准分区创建的分区不能动态调整硬盘的资源,一旦分区被挂载,容量就被完全固定,这种限制在服务器上是不可接受的。虽然标准分区可以通过某些技术手段强制扩展或缩小,但很容易造成数据丢失。LVM可以很好地解决这个问题。LVM在Linux内核版本2.4开始提供,其主要特点是
- 更灵活的磁盘容量;
- 在线数据移动;
- 以stripe模式存在的磁盘;
- 镜像卷(重新复制);
- 卷快照(snapshot)。
LVM的原理很简单
- 在物理磁盘(或磁盘分区)和文件系统之间添加了一个逻辑抽象层
- 将多个磁盘(或磁盘分区)合并到卷组 (VG) 中
- 通过一个叫做逻辑卷 (LV) 的东西对它们执行底层磁盘管理操作。
物理介质:LVM的存储介质可以是整个硬盘、磁盘分区或RAID阵列。在执行进一步的操作之前,必须将设备转换为LVM物理卷 (PV),或对其进行初始化。
PV(物理卷) 是LVM的基本存储逻辑块。您可以使用磁盘分区或磁盘本身来创建物理卷。
VG(卷组):类似于标准分区中的物理磁盘,VG由一个或多个PV组成。
LV(逻辑卷):类似于标准分区中的硬盘分区,LV建立在VG之上。您可以在LV上设置文件系统。
PE:物理卷中可以分配的最小存储单元,默认为4MB。您可以指定一个额外的尺寸。
LE:逻辑卷中可以分配的最小存储单元。在同一个VG中,PE和LE是相同的,并且一一对应。
缺点是,如果其中一个物理卷出现故障,那么所有使用该物理卷的逻辑卷都会丢失。您需要在raid磁盘上使用LVM。
注意
LVM仅由操作系统管理。因此,BIOS需要至少一个没有LVM的分区来启动。
信息
在物理磁盘中,最小的存储单元是扇区,在文件系统中,GNU/Linux中最小的存储单元是块,在Windows操作系统中被称为簇。在RAID中,最小的存储单元是块。
LVM的写入机制¶
将数据存储到LV时,有几种存储机制,其中两种是
- 线性卷;
- 以stripe模式存在的卷;
- 镜像卷。
用于卷管理的LVM命令¶
主要的相关命令如下
项目 | PV | VG | LV |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
创建 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce | |
摘要信息 | pvs | vgs | lvs |
pvcreate
命令¶
pvcreate
命令用于创建物理卷。它将Linux分区(或磁盘)转换为物理卷。
pvcreate [-options] partition
示例
[root]# pvcreate /dev/hdb1
pvcreate -- physical volume « /dev/hdb1 » successfully created
您也可以使用整个磁盘(例如,这便于在虚拟环境中增加磁盘大小)。
[root]# pvcreate /dev/hdb
pvcreate -- physical volume « /dev/hdb » successfully created
# It can also be written in other ways, such as
[root]# pvcreate /dev/sd{b,c,d}1
[root]# pvcreate /dev/sd[b-d]1
选项 | 描述 |
---|---|
-f | 强制创建卷(磁盘已转换为物理卷)。使用时要格外小心。 |
vgcreate
命令¶
vgcreate
命令创建卷组。它将一个或多个物理卷分组到一个卷组中。
vgcreate <VG_name> <PV_name...> [option]
示例
[root]# vgcreate volume1 /dev/hdb1
…
vgcreate – volume group « volume1 » successfully created and activated
[root]# vgcreate vg01 /dev/sd{b,c,d}1
[root]# vgcreate vg02 /dev/sd[b-d]1
lvcreate
命令¶
lvcreate
命令创建逻辑卷。然后在这些逻辑卷上创建文件系统。
lvcreate -L size [-n name] VG_name
示例
[root]# lvcreate –L 600M –n VolLog1 volume1
lvcreate -- logical volume « /dev/volume1/VolLog1 » successfully created
选项 | 描述 |
---|---|
-L size | 设置逻辑卷大小,单位为K、M或G。 |
-n name | 设置LV名称。一个特殊文件被创建在/dev/name_volume 中,使用这个名称。 |
-l number | 设置要使用的硬盘容量的百分比。您也可以使用PE的数量。一个PE等于4MB。 |
信息
使用lvcreate
命令创建逻辑卷后,操作系统的命名规则是 - /dev/VG_name/LV_name
,这种文件类型是软链接(也称为符号链接)。链接文件指向像/dev/dm-0
和/dev/dm-1
这样的文件。
用于查看卷信息的LVM命令¶
pvdisplay
命令¶
pvdisplay
命令允许您查看有关物理卷的信息。
pvdisplay /dev/PV_name
示例
[root]# pvdisplay /dev/PV_name
vgdisplay
命令¶
vgdisplay
命令允许您查看有关卷组的信息。
vgdisplay VG_name
示例
[root]# vgdisplay volume1
lvdisplay
命令¶
lvdisplay
命令允许您查看有关逻辑卷的信息。
lvdisplay /dev/VG_name/LV_name
示例
[root]# lvdisplay /dev/volume1/VolLog1
物理介质的准备¶
使用LVM对物理支持进行的准备工作分为以下几步
- 设置物理磁盘
- 对卷进行分区
- LVM物理卷
- LVM卷组
- LVM逻辑卷
- 创建文件系统
- 挂载文件系统
- 管理用户访问
文件系统的结构¶
一个文件系统FS负责以下操作
- 确保对文件的访问和修改权限;
- 操作文件:创建、读取、修改和删除;
- 在磁盘上定位文件;
- 管理分区空间。
Linux操作系统能够使用不同的文件系统(ext2、ext3、ext4、FAT16、FAT32、NTFS、HFS、BtrFS、JFS、XFS,...)。
mkfs
命令¶
mkfs
(创建文件系统) 命令允许您创建Linux文件系统。
mkfs [-t fstype] filesys
示例
[root]# mkfs -t ext4 /dev/sda1
选项 | 描述 |
---|---|
-t | 指示要使用的文件系统类型。 |
警告
如果没有文件系统,就不可能使用磁盘空间。
每个文件系统在每个分区上都有一个相同的结构。系统会初始化一个引导扇区和一个超级块,然后管理员会初始化一个inode表和一个数据块。
注意
唯一的例外是交换分区。
引导扇区¶
引导扇区是可引导存储介质的第一个扇区,即0柱面、0磁道、1扇区(1个扇区等于512字节)。它由三部分组成
- MBR(主引导记录): 446字节。
- DPT(磁盘分区表): 64字节。
- BRID(引导记录ID): 2字节。
项目 | 描述 |
---|---|
MBR | 存储“引导加载程序”(或“GRUB”);加载内核,传递参数;在启动时提供菜单界面;转移到另一个加载程序,例如,当安装多个操作系统时。 |
DPT | 记录整个磁盘的分区状态。 |
BRID | 确定设备是否可用于引导。 |
超级块¶
超级块表的尺寸在创建时定义。它存在于每个分区上,包含利用它所需的元素。
它描述文件系统
- 逻辑卷的名称;
- 文件系统的名称;
- 文件系统的类型;
- 文件系统状态;
- 文件系统的尺寸;
- 空闲块的数量;
- 指向空闲块列表开头的指针;
- inode列表的尺寸;
- 空闲inode的数量和列表。
系统初始化后,一个副本会被加载到中央内存中。只要修改了这个副本,系统就会立即更新它,并且系统会定期保存它(命令sync
)。
当系统停止时,它会将内存中的这个表复制到它的块中。
inode表¶
inode表的大小在创建时定义,并存储在分区上。它由记录组成,称为inode,对应于创建的文件。每个记录包含构成文件的data块的地址。
注意
inode号在一个文件系统中是唯一的。
系统初始化后,一个副本会被加载到中央内存中。只要修改了这个副本,系统就会立即更新它,并且系统会定期保存它(命令sync
)。
当系统停止时,它会将内存中的这个表复制到它的块中。
文件由它的inode号管理。
注意
inode表的大小决定了FS可以包含的最大文件数量。
inode表中存在的信息
- inode号;
- 文件类型和访问权限;
- 所有者标识号;
- 所有者组的标识号;
- 此文件的链接数量;
- 文件的大小(以字节为单位);
- 上次访问文件的日期;
- 上次修改文件的日期;
- inode的最后修改日期(=创建);
- 包含文件片段的逻辑块的多个指针(块表)。
数据块¶
其大小对应于分区剩余的可用空间。此区域包含对应于每个目录的目录以及对应于文件内容的数据块。
为了保证文件系统的完整性,在操作系统加载时,会将超级块和 inode 表的映像加载到内存(RAM)中,以便所有 I/O 操作都通过这些系统表进行。当用户创建或修改文件时,此内存映像首先更新。因此,操作系统必须定期更新逻辑磁盘的超级块(sync
命令)。
系统关闭时,这些表会被写入硬盘。
注意
如果突然停止,文件系统可能会失去一致性并导致数据丢失。
修复文件系统¶
可以使用 fsck
命令检查文件系统的一致性。
如果出现错误,将提出解决方案来修复不一致。修复后,在 inode 表中没有条目的文件将附加到逻辑驱动器的 /lost+found
文件夹。
fsck
命令¶
fsck
命令是 Linux 文件系统的控制台模式完整性检查和修复工具。
fsck [-sACVRTNP] [ -t fstype ] filesys
示例
[root]# fsck /dev/sda1
要检查根分区,可以创建一个 forcefsck
文件并重新启动或运行带有 -F
选项的 shutdown
命令。
[root]# touch /forcefsck
[root]# reboot
or
[root]# shutdown –r -F now
警告
要检查的分区必须卸载。
文件系统组织¶
根据定义,文件系统是由根目录构建的目录树结构(一个逻辑设备只能包含一个文件系统)。
注意
在 Linux 中,一切皆为文件。
文本文档、目录、二进制文件、分区、网络资源、屏幕、键盘、Unix 内核、用户程序……
Linux 符合 FHS(文件系统层次结构标准)(参见 man hier
),它定义了文件夹的名称和作用。
目录 | 功能 | 完整词 |
---|---|---|
/ | 包含特殊目录 | |
/boot | 与系统启动相关的文件 | |
/sbin | 系统启动和修复所需的命令 | 系统二进制文件 |
/bin | 基本系统命令的可执行文件 | 二进制文件 |
/usr/bin | 系统管理命令 | |
/lib | 共享库和内核模块 | 库 |
/usr | 保存与 UNIX 相关的数据资源 | UNIX 系统资源 |
/mnt | 临时挂载点目录 | 挂载 |
/media | 用于挂载可移动介质 | |
/misc | 用于挂载 NFS 服务的共享目录。 | |
/root | 管理员的登录目录 | |
/home | 普通用户主目录的上级目录 | |
/tmp | 包含临时文件的目录 | 临时 |
/dev | 特殊设备文件 | 设备 |
/etc | 配置文件和脚本文件 | 可编辑的文本配置 |
/opt | 特定于已安装的应用程序 | 可选 |
/proc | 这是 proc 文件系统的挂载点,它提供有关正在运行的进程和内核的信息 | 进程 |
/var | 此目录包含可能改变大小的文件,例如 spool 文件和日志文件 | 变量 |
/sys | 虚拟文件系统,类似于 /proc | |
/run | 即 /var/run | |
/srv | 服务数据目录 | 服务 |
- 要在树级别挂载或卸载,您不能位于其挂载点下方。
- 在非空目录上挂载不会删除内容。它只是隐藏起来。
- 只有管理员可以执行挂载操作。
- 在引导时自动挂载的挂载点必须在
/etc/fstab
中输入。
/etc/fstab
文件¶
/etc/fstab
文件在系统启动时读取,其中包含要执行的挂载操作。每个要挂载的文件系统都在单独的一行上描述,字段之间用空格或制表符分隔。
注意
按顺序读取行(fsck
、mount
、umount
)。
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=46….92 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
1 2 3 4 5 6
列 | 描述 |
---|---|
1 | 文件系统设备(/dev/sda1 、UUID=...、...) |
2 | 挂载点名称,绝对路径(交换除外) |
3 | 文件系统类型(ext4、swap、...) |
4 | 挂载的特殊选项(defaults 、ro 、...) |
5 | 启用或禁用备份管理(0:未备份,1:已备份)。dump 命令在这里用于备份。此过时的功能最初旨在将旧文件系统备份到磁带中。 |
6 | 使用 fsck 命令检查 FS 时的检查顺序(0:不检查,1:优先级,2:不优先级) |
mount -a
命令允许您根据 /etc/fstab
配置文件的内容自动挂载。然后将挂载的信息写入 /etc/mtab
。
警告
只有在 /etc/fstab
中列出的挂载点会在重新启动时挂载。一般来说,我们不建议将 USB 闪存盘和可移动硬盘写入 /etc/fstab
文件,因为当外部设备拔掉并重新启动时,系统会提示找不到设备,导致无法启动。那我该怎么办呢?临时挂载,例如
Shell > mkdir /mnt/usb
Shell > mount -t vfat /dev/sdb1 /mnt/usb
# Read the information of the USB flash disk
Shell > cd /mnt/usb/
# When not needed, execute the following command to pull out the USB flash disk
Shell > umount /mnt/usb
信息
可以复制 /etc/mtab
文件或将其内容复制到 /etc/fstab
。如果您想查看设备分区号的 UUID,请键入以下命令:lsblk -o name,uuid
。UUID 是 Universally Unique Identifier
的缩写。
挂载管理命令¶
mount
命令¶
mount
命令允许您挂载并查看树中的逻辑驱动器。
mount [-option] [device] [directory]
示例
[root]# mount /dev/sda7 /home
选项 | 描述 |
---|---|
-n | 设置挂载而不写入 /etc/mtab 。 |
-t | 指示要使用的文件系统类型。 |
-a | 挂载 /etc/fstab 中提到的所有文件系统。 |
-r | 以只读方式挂载文件系统(相当于 -o ro )。 |
-w | 以读写方式挂载文件系统,默认情况下(相当于 -o rw )。 |
-o opts | opts 参数是逗号分隔的列表(remount 、ro 、...)。 |
注意
mount
命令本身显示所有已挂载的文件系统。如果挂载参数是 -o defaults
,它相当于 -o rw,suid,dev,exec,auto,nouser,async
并且这些参数独立于文件系统。如果您需要浏览与文件系统相关的特殊挂载选项,请阅读 man 8 mount
中的“挂载选项 FS-TYPE”部分(FS-TYPE 被替换为相应的文件系统,例如 ntfs、vfat、ufs 等)
umount
命令¶
umount
命令用于卸载逻辑驱动器。
umount [-option] [device] [directory]
示例
[root]# umount /home
[root]# umount /dev/sda7
选项 | 描述 |
---|---|
-n | 设置卸载而不写入 /etc/mtab 。 |
-r | 如果 umount 失败,则以只读方式重新挂载。 |
-f | 强制卸载。 |
-a | 删除 /etc/fstab 中提到的所有文件系统的挂载操作。 |
注意
拆卸时,您不能停留在挂载点下方。否则,会显示以下错误消息:device is busy
。
文件命名约定¶
与任何系统一样,遵守文件命名规则对于浏览树结构和文件管理很重要。
- 文件以 255 个字符编码;
- 可以使用所有 ASCII 字符;
- 区分大小写;
- 大多数文件没有文件扩展名的概念。在 GNU/Linux 世界中,大多数文件扩展名不是必需的,除了少数(例如 .jpg、.mp4、.gif 等)。
用空格分隔的词组必须用引号括起来
[root]# mkdir "working dir"
注意
虽然从技术上讲,用空格创建文件或目录没有问题,但通常“最佳实践”是避免这样做,并将任何空格替换为下划线。
注意
文件名开头的 . 只会将其隐藏在简单的 ls
命令中。
文件扩展名协议的示例
.c
:用 C 语言编写的源文件;.h
:C 和 Fortran 头文件;.o
:用 C 语言编写的目标文件;.tar
:使用tar
实用程序存档的数据文件;.cpio
:使用cpio
实用程序存档的数据文件;.gz
:使用gzip
实用程序压缩的数据文件;.tgz
:使用tar
实用程序存档并使用gzip
实用程序压缩的数据文件;.html
:网页。
文件名详细信息¶
[root]# ls -liah /usr/bin/passwd
266037 -rwsr-xr-x 1 root root 59K mars 22 2019 /usr/bin/passwd
1 2 3 4 5 6 7 8 9
部分 | 描述 |
---|---|
1 | inode 号 |
2 | 文件类型(10 个块的第一个字符),“-”表示这是一个普通文件。 |
3 | 访问权限(10 个块的最后 9 个字符) |
4 | 如果是目录,此数字表示该目录中包含多少个子目录,包括隐藏的子目录。如果是文件,它表示硬链接的数量。当数字为 1 时,只有一个硬链接。 |
5 | 所有者的名称 |
6 | 组的名称 |
7 | 大小(字节、千字节、兆字节) |
8 | 上次更新日期 |
9 | 文件的名称 |
在 GNU/Linux 世界中,有七种文件类型
文件类型 | 描述 |
---|---|
- | 表示普通文件。包括纯文本文件 (ASCII);二进制文件 (binary);数据格式文件 (data);各种压缩文件。 |
d | 表示目录文件。 |
b | 表示块设备文件。它包括硬盘驱动器、USB 驱动器等。 |
c | 表示字符设备文件。串行端口的接口设备,例如鼠标、键盘等。 |
s | 表示套接字文件。它是一种专门用于网络通信的文件类型。 |
p | 表示管道文件。它是一种特殊的文件类型。主要目的是解决多个程序同时访问文件导致的错误。FIFO 是 first-in-first-out 的缩写。 |
l | 表示软链接文件,也称为符号链接文件,类似于 Windows 中的快捷方式。硬链接文件,也称为物理链接文件。 |
目录补充说明¶
每个目录都有两个隐藏文件:. 和 ..。你需要使用 ls -al
来查看,例如
# . Indicates that in the current directory, for example, you need to execute a script in a directory, usually:
Shell > ./scripts
# .. represents the directory one level above the current directory, for example:
Shell > cd /etc/
Shell > cd ..
Shell > pwd
/
# For an empty directory, its fourth part must be greater than or equal to 2. Because there are "." and ".."
Shell > mkdir /tmp/t1
Shell > ls -ldi /tmp/t1
1179657 drwxr-xr-x 2 root root 4096 Nov 14 18:41 /tmp/t1
特殊文件¶
为了与外设(硬盘、打印机等)通信,Linux 使用称为特殊文件(设备文件 或 特殊文件)的接口文件。这些文件允许外设识别自己。
这些文件之所以特殊,是因为它们不包含数据,而是指定与设备通信的访问模式。
它们在两种模式下定义
- 块 模式;
- 字符 模式。
# Block device file
Shell > ls -l /dev/sda
brw------- 1 root root 8, 0 jan 1 1970 /dev/sda
# Character device file
Shell > ls -l /dev/tty0
crw------- 1 root root 8, 0 jan 1 1970 /dev/tty0
通信文件¶
这些是管道(pipes)和套接字文件。
管道文件 通过 FIFO(先进先出)在进程之间传递信息。一个进程将瞬态信息写入管道文件,另一个进程读取它。读取后,信息不再可访问。
套接字文件 允许双向进程间通信(在本地或远程系统上)。它们使用文件系统的inode。
链接文件¶
这些文件允许为同一个物理文件赋予多个逻辑名称,从而创建一个新的文件访问点。
链接文件有两种类型
- 软链接文件,也称为符号链接文件;
- 硬链接文件,也称为物理链接文件。
它们的主要特点是
链接类型 | 描述 |
---|---|
软链接文件 | 此文件类似于 Windows 的快捷方式。它具有 0777 的权限,并指向原始文件。当原始文件被删除时,你可以使用 ls -l 来查看软链接文件的输出信息。在输出信息中,软链接的文件名以红色显示,指向的原始文件以红色显示并带有闪烁的提示。 |
硬链接文件 | 此文件表示占用相同inode号的不同映射。它们可以同步更新(包括文件内容、修改时间、所有者、组隶属关系、访问时间等)。硬链接文件不能跨分区和文件系统,也不能在目录中使用。 |
具体示例如下
# Permissions and the original file to which they point
Shell > ls -l /etc/rc.locol
lrwxrwxrwx 1 root root 13 Oct 25 15:41 /etc/rc.local -> rc.d/rc.local
# When deleting the original file. "-s" represents the soft link option
Shell > touch /root/Afile
Shell > ln -s /root/Afile /root/slink1
Shell > rm -rf /root/Afile
Shell > cd /home/paul/
Shell > ls –li letter
666 –rwxr--r-- 1 root root … letter
# The ln command does not add any options, indicating a hard link
Shell > ln /home/paul/letter /home/jack/read
# The essence of hard links is the file mapping of the same inode number in different directories.
Shell > ls –li /home/*/*
666 –rwxr--r-- 2 root root … letter
666 –rwxr--r-- 2 root root … read
# If you use a hard link to a directory, you will be prompted:
Shell > ln /etc/ /root/etc_hardlink
ln: /etc: hard link not allowed for directory
文件属性¶
Linux 是一个多用户操作系统,其中对文件访问的控制至关重要。
这些控制是以下功能的函数
- 文件访问权限;
- 用户(ugo 用户组其他)。
文件和目录的基本权限¶
文件权限的描述如下
文件权限 | 描述 |
---|---|
r | 读。允许读取文件(cat 、less 等)和复制文件(cp 等)。 |
w | 写。允许修改文件内容(cat 、>> 、vim 等)。 |
x | 执行。将文件视为可执行文件(二进制文件或脚本)。 |
- | 无权限 |
目录权限的描述如下
目录权限 | 描述 |
---|---|
r | 读。允许读取目录的内容(ls -R )。 |
w | 写。允许你在此目录中创建和删除文件/目录,例如命令 mkdir 、rmdir 、rm 、touch 等。 |
x | 执行。允许进入目录(cd )。 |
- | 无权限 |
信息
对于目录的权限,r
和 x
通常同时出现。移动或重命名文件取决于它所在的目录是否具有 w
权限,删除文件也是如此。
与基本权限对应的用户类型¶
用户类型 | 描述 |
---|---|
u | 所有者 |
g | 所有者组 |
o | 其他用户 |
信息
在某些命令中,你可以使用 a(all)来代表 ugo。例如:chmod a+x FileName
等效于 chmod u+x,g+x,o+x FileName
或 chmod ugo+x FileName
。
属性管理¶
权限的显示使用命令 ls -l
完成。它是 10 个块的最后 9 个字符。更准确地说,是 3 次 3 个字符。
[root]# ls -l /tmp/myfile
-rwxrw-r-x 1 root sys ... /tmp/myfile
1 2 3 4 5
部分 | 描述 |
---|---|
1 | 所有者(user)权限,这里为 rwx |
2 | 所有者组权限(group),这里为 rw- |
3 | 其他用户权限(others),这里为 r-x |
4 | 文件所有者 |
5 | 文件的组所有者 |
默认情况下,文件的所有者是创建它的人。文件的组是创建文件的用户的组。其他人是指不属于前两种情况的人。
属性使用 chmod
命令更改。
只有管理员和文件的拥有者才能更改文件的权限。
chmod
命令¶
chmod
命令允许你更改文件的访问权限。
chmod [option] mode file
选项 | 观察 |
---|---|
-R | 递归地更改目录及其下所有文件的权限。 |
警告
文件和目录的权限不是分离的。对于某些操作,你需要了解包含该文件的目录的权限。受写保护的文件可以被另一个用户删除,只要包含它的目录的权限允许该用户执行此操作。
模式指示可以是八进制表示(例如 744
)或符号表示([ugoa
] [+=-
] [rwxst
])。
八进制(或数字)表示¶
数字 | 描述 |
---|---|
4 | r |
2 | w |
1 | x |
0 | - |
将三个数字加在一起以获得一种用户类型权限。例如 755=rwxr-xr-x。
信息
有时你会看到 chmod 4755
。这里的数字 4 指的是特殊权限 set uid。特殊权限暂时不会在此处展开,仅作为基本理解。
[root]# ls -l /tmp/fil*
-rwxrwx--- 1 root root … /tmp/file1
-rwx--x--- 1 root root … /tmp/file2
-rwx--xr-- 1 root root … /tmp/file3
[root]# chmod 741 /tmp/file1
[root]# chmod -R 744 /tmp/file2
[root]# ls -l /tmp/fic*
-rwxr----x 1 root root … /tmp/file1
-rwxr--r-- 1 root root … /tmp/file2
符号表示¶
这种方法可以被认为是用户类型、运算符和权限之间的“字面”关联。
[root]# chmod -R u+rwx,g+wx,o-r /tmp/file1
[root]# chmod g=x,o-r /tmp/file2
[root]# chmod -R o=r /tmp/file3
默认权限和掩码¶
当创建文件或目录时,它已经具有权限。
- 对于目录:
rwxr-xr-x
或 755。 - 对于文件:
rw-r-r-
或 644。
此行为由默认掩码定义。
原则是从最大权限中移除由掩码定义的值,但不包括执行权限。
对于目录
对于文件,执行权限被移除
信息
/etc/login.defs
文件定义了默认的 UMASK,值为 022。这意味着创建文件的权限为 755(rwxr-xr-x)。但是,为了安全起见,GNU/Linux 不会为新创建的文件提供x权限。此限制适用于 root(uid=0)和普通用户(uid>=1000)。
# root user
Shell > touch a.txt
Shell > ll
-rw-r--r-- 1 root root 0 Oct 8 13:00 a.txt
umask
命令¶
umask
命令允许你显示和修改掩码。
umask [option] [mode]
示例
$ umask 033
$ umask
0033
$ umask -S
u=rwx,g=r,o=r
$ touch umask_033
$ ls -la umask_033
-rw-r--r-- 1 rockstar rockstar 0 nov. 4 16:44 umask_033
$ umask 025
$ umask -S
u=rwx,g=rx,o=w
$ touch umask_025
$ ls -la umask_025
-rw-r---w- 1 rockstar rockstar 0 nov. 4 16:44 umask_025
选项 | 描述 |
---|---|
-S | 文件权限的符号显示。 |
警告
umask
不会影响现有文件。umask -S
显示将要创建的文件的文件权限(不包括执行权限)。因此,它不是用于减去最大值的掩码的显示。
注意
在上面的示例中,使用命令修改掩码仅适用于当前连接的会话。
信息
umask
命令属于 bash 的内置命令,因此当你使用 man umask
时,将显示所有内置命令。如果你只想查看 umask
的帮助,必须使用 help umask
命令。
要保留该值,你需要修改以下配置文件:
对于所有用户
/etc/profile
/etc/bashrc
对于特定用户
~/.bashrc
当写入上述文件时,它实际上会覆盖 /etc/login.defs
的 UMASK 参数。如果你想提高操作系统的安全性,可以将 umask 设置为 027 或 077。
作者:Antoine Morvan
贡献者:Steven Spencer、tianci li、Serge、Ganna Zhyrnova