LPI Linux 认证/LPIC1 考试 101/Linux 文件系统
- 1.104.1 创建分区和文件系统
- 1.104.2 维护文件系统的完整性
- 1.104.3 控制挂载和卸载文件系统
- 1.104.4 管理磁盘配额
- 1.104.5 使用文件权限控制对文件的访问
- 1.104.6 管理文件所有权
- 1.104.7 创建和更改硬链接和符号链接
- 1.104.8 查找系统文件并将文件放置在正确的位置
- Linux 文件系统
- 创建分区和文件系统
- 维护文件系统的完整性
- 控制挂载和卸载文件系统
- 管理磁盘配额
- 使用文件权限控制对文件的访问
- 管理文件所有权
- 创建和更改硬链接和符号链接
描述: 候选人应能够配置磁盘分区,然后在硬盘等介质上创建文件系统。本目标包括使用各种 mkfs 命令来设置分区到各种文件系统,包括 ext2、ext3、reiserfs、vfat 和 xfs。
关键文件术语和实用程序包括
fdisk
mkfs
介质可以划分为分区。分区通常在安装时创建,但也可以使用 fdisk 程序或其他实用程序创建。这将把介质划分为分区,并且可以构建不同的文件系统,并且可以安装不同的操作系统。
IDE 被识别如下
- 主盘
- /dev/hda : 完整磁盘
- /dev/hda1: 第一个分区
- /dev/hda2: 第二个分区
- 从盘: /dev/hdb
- 辅盘: /dev/hdc
- 从盘: /dev/hdd
SCSI 被识别如下
- ID1
- /dev/sda: 完整磁盘
- /dev/sda1: 第一个分区
- ID2: /dev/sdb
USB 和 FireWire 磁盘被识别为 SCSI 磁盘。
一旦分区完成,就可以在每个分区上构建一个文件系统。
文件系统存在是为了让你能够在介质上存储、检索和操作数据。文件系统维护一个内部数据结构(元数据),它使所有数据井井有条并易于访问。此元数据的结构赋予了文件系统的特征。文件系统通过组织的元数据结构由驱动程序访问。当 Linux 启动时,它会读取 /etc/fstab 中所有需要挂载的文件系统,并检查它们是否处于可用状态。
当电源故障发生时,Linux 将无法正确卸载文件系统,并且缓存中的一些数据将不会同步到介质上。元数据可能会损坏。
重新启动系统后,它会检测到这一点并对整个元数据结构执行 fsck 以进行一致性检查。这可能需要很长时间。几分钟到几小时,与介质大小成正比。对文件系统进行日志记录是在磁盘上添加一个名为日志的新数据结构。在驱动程序对元数据进行每次修改之前,它首先被写入日志。在每次元数据修改之前,日志都会维护接下来操作的日志。
现在,当电源故障发生时,只需要检查日志。日志记录的文件系统恢复非常快。它只需要遍历日志并修复最新的操作。日志记录的文件系统恢复只需要几秒钟。
在集群系统上,日志记录允许快速恢复已关闭节点的共享分区。
- ext2: 旧的非常稳定的 Linux 文件系统。对于大于 ~2-3K 的文件来说效率很高。
- ext3: ext2 的日志记录扩展。可以将文件系统在 ext2 和 ext3 之间来回移动。
- Reiserfs: 日志记录文件系统。在操作小文件时比 ext2 快 8-15 倍。
- XFS: 一个强大的日志记录文件系统,具有可能的配额和 ACL
- Msdos: MS-Windows FAT 文件系统类型。(主要用于软盘)
- Vfat: MS-Windows FAT 文件系统类型。 (主要用于大型硬盘分区)
- NTFS(只读,但循环文件):MS-Windows 日志文件系统
- SMBFS:从 Linux 挂载 Windows 或 Samba 共享的文件系统
- NFS:网络文件系统
...
文件系统树
[edit | edit source]Linux 文件系统有一个名为根 (/) 的顶级目录,其中存储了整个系统的所有子目录。 子目录可以是另一个分区、远程目录或通过 NFS 协议访问的远程分区。
创建文件系统
[edit | edit source]要在分区上创建文件系统,请使用 mkfs。
mkfs [options] -t [fstype] device [blocksize]
常见选项
- -t: fstype: 文件系统类型。
- -c : 在构建文件系统之前检查设备是否有坏块。
整个分区将被擦除并组织为请求的文件系统类型。 没有撤消命令。 可用的 fstype 为:msdos、ext2、ext3、reiserfs、minix、xfs
块大小允许您自定义文件系统的块大小。
示例
mkfs -t msdos /dev/fd0 mkfs -t reiserfs /dev/hdd1 4096
创建扩展文件系统
[edit | edit source]要在分区上创建扩展 (ext2、ext3) 文件系统,请使用 mke2fs。
mke2fs [options] device [blocksize]
常见选项
- -b: 指定块大小 fstype: 文件系统类型。
- -c : 在构建文件系统之前检查设备是否有坏块。
- -j: 使用 ext3 日志创建文件系统。
- -L: 为文件系统设置卷标。
使用 mke2fs,可以将超级块和日志信息存储在另一个设备上。 示例
mkefs -b 2048 /dev/fd0 -L floppy mkfs -V mke2fs 1.26 (3-Feb-2002) Using EXT2FS Library version 1.263
监控磁盘使用情况
[edit | edit source]要打印磁盘使用情况,请使用 du。
du [options] [files...]
常见选项
- -a: 所有文件,不仅仅是目录
- -b: 以字节为单位打印大小
- -c: 总计
- -h: 人类可读格式。 (1K、20M、...)
示例
$ du -ch Documents 112k Documents/Cours/LPI101 4.0k Documents/Cours/LPI102 4.0k Documents/Cours/LPI201 4.0k Documents/Cours/LPI202 124k total
du -sk ~ # Sums up your total disk usage in kilobytes
du -ak ~ | sort -n more # Display every file and its disk space in numerical order.
文件系统磁盘空间
[edit | edit source]文件系统由元数据结构加上块列表组成。 要打印文件系统磁盘空间使用情况,请使用 df。
df [options] [files...]
常见选项
- -a: 包含所有包含 0 个块的文件系统。
- -t: 将列表限制为文件系统类型。
- -h: 人类可读格式。 (1K、20M、...)
示例
$ df -t reiserfs -h F 1k-blocks Used Available Use% Mounted on /dev/hda3 28771528 3121536 25649992 11% /
$ df -t ext2 -h Filesystem Size Used Avail Use% Mounted on /dev/hda1 15M 3.8M 10M 27% /boot
练习
[edit | edit source]- 练习结果.
维护文件系统的完整性
[edit | edit source]概述
[edit | edit source]描述:候选人应该能够验证文件系统的完整性、监控可用空间和 inode,并修复简单的文件系统问题。 此目标包括维护标准文件系统所需的命令,以及与日志文件系统相关的额外数据。
关键文件术语和实用程序包括
du
df
fsck
e2fsck
mke2fs
debugfs
dumpe2fs
tune2fs
检查文件系统
[edit | edit source]要检查文件系统一致性,请使用 fsck。
fsck [options] -t [fstype] device [fsck-options]
常见选项
- -A: 遍历 /etc/fstab 文件并尝试检查所有文件系统。 通常在引导时从脚本中使用。
- -t fslist: 指定要检查的文件系统类型。 使用 -A 时,只检查与 fslist 匹配的文件系统
- -C: 显示完成/进度条。
常见 fsck 选项
- -a: 自动修复。
- -r: 交互式修复。
示例
fsck -t msdos /dev/fd0 -a fsck -t reiserfs /dev/hda2 -r
检查扩展文件系统
[edit | edit source]要检查扩展文件系统一致性,请使用 e2fsck。
e2fsck [options] device
常见选项
- -b: 使用备用超级块文件名。
- -c: 此选项使 badblocks 程序运行并标记所有坏块。
- -f: 即使文件系统看起来很干净,也要强制检查。
- -a 或 -p: 自动修复。
- -y: 非交互模式
示例
e2fsck -ay /dev/fd0 e2fsck -f /dev/hda2
调试扩展文件系统
[edit | edit source]debugfs 程序是一个交互式文件系统调试器。 它可以用来检查和改变 ext2 文件系统的状态。
debugfs device
常见命令
- Help: 提供所有可用命令的帮助。
- Stats: 提供介质的统计信息。
- Stat file: 提供介质上文件的统计信息。
- logdump: 将日志介质转储到文件
示例
stat haut.gif Inode: 14 Type: regular Mode: 0644 Flags: 0x0 Generation: 67558 User: 0 Group: 0 Size: 3786 File ACL: 0 Directory ACL: 0 Links: 1 Blockcount: 8 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x3ddf3840 -- Sat Nov 23 09:11:44 2002 atime: 0x3ddf3840 -- Sat Nov 23 09:11:44 2002 mtime: 0x3ddf3840 -- Sat Nov 23 09:11:44 2002 BLOCKS: (0-3):55-58 TOTAL: 4
转储扩展文件系统信息
[edit | edit source]要打印扩展文件系统的超级块和块组信息,请使用 dumpe2fs。
dumpe2fs [options] device
常见选项
- -b: 打印文件系统的坏块。
- -h: 只显示超级块信息。
示例
dumpe2fs -h /dev/fd0 dumpe2fs 1.26 (3-Feb-2002) Filesystem volume name: floppy Last mounted on: <not available> Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 184 Block count: 1440 Reserved block count: 72 Free blocks: 1258 Free inodes: 168 First block: 1 Block size: 1024 First inode: 11 Inode size: 128 ...
调整扩展文件系统
[edit | edit source]要调整扩展文件系统,请使用 tune2fs。
tune2fs [options] device
常见选项
- -i#: 文件系统检查之间的间隔 [d|m|w]。
- -l: 列出文件系统超级块的内容。
- -L: 设置文件系统的卷标。
示例
tune2fs -L floppy /dev/fd0 tune2fs -l /dev/fd0 (Same output as dumpe2fs -h /dev/fd0)
tune2fs 1.26 (3-Feb-2002) Filesystem volume name: floppy Block count: 1440 Reserved block count: 72 Free blocks: 1258 Free inodes: 168 First block: 1 Block size: 1024 First inode: 11 Inode size: 128 ...
练习
[edit | edit source]- 在软盘上构建一个 ext2 文件系统,块大小为 2048 字节。
- 将软盘的标签更改为 BACKUP。
- 尝试在软盘介质上添加一个日志。
- 使用 debugfs 验证软盘文件系统信息,并检查上次访问时间。
- 使用 watch 监控复制大型文件时的大小。
- 创建一个 shell 脚本,列出软盘上所有大于 100 Kb 的文件。
- 显示所有 MSDOS 文件系统的文件系统使用情况。
- 哪个目录必须存在于 / 中才能将此操作系统归类为 Linux?
- /proc 的文件系统使用情况如何?
.
附加和分离文件系统
[edit | edit source]- 控制挂载和卸载文件系统
概述
[edit | edit source]描述:候选人应该能够配置文件系统的挂载。 此目标包括能够手动挂载和卸载文件系统、在启动时配置文件系统挂载,以及配置用户可挂载的可移动文件系统,例如磁带机、软盘和 CD。
关键文件术语和实用程序包括
/etc/fstab
mount
umount
附加文件系统
[edit | edit source]mount 命令用于将某些设备上的文件系统附加到大型文件树中。
mount [options] mount [options] [-t vfstype] [-o options] device dir
如果设备或目录列在 /etc/fstab 中,您可以使用以下命令
mount [options] [-o options [,...]] device | dir
通常只有 root 才有挂载设备的权限,除非在 /etc/fstab 文件中指定。 示例
# Print all the mounted filesystems (/etc/mtab). mount
# Mount devices or dirs listed in /etc/fstab. mount -a
# Mount /dev/hdc partition in read only mode without updating /etc/mtab. mount -n -o ro /dev/hdc /mnt
# Allow a user to mount the CDROM if the following line is in /etc/fstab: # /dev/cdrom /media/cdrom iso9660 ro,user,noauto,unhide mount /media/cdrom mount /dev/cdrom
# Sync in realtime mount -o sync /dev/sdb1 /mnt/usb
分离文件系统
[edit | edit source]要将文件系统从文件树中分离,请使用 umount。
umount [options] umount [options] [-o options [,...]] device | dir
繁忙的文件系统无法卸载。
- 打开文件
- 进程的工作目录。
示例
umount -a # Unmount devices or dirs listed in /etc/fstab. umount /mnt # Unmount the filesystem attached to /mnt. umount /media/cdrom # Allow a user to unmount the CDROM if the following line is in /etc/fstab: /dev/cdrom /media/cdrom iso9660 ro,user,noauto,unhide
文件系统信息
[edit | edit source]/etc/fstab 文件包含执行 mount -a 时将使用到的所有文件系统及其相关信息。(引导时)
/etc/mtab 文件由内核维护,并跟踪已挂载或未挂载的内容。/etc/fstab 的格式为
#Device Mount point Fs type Options 1 2 /dev/hda3 / reiserfs defaults 1 2 /dev/hda1 /boot ext2 defaults 1 2 /dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0 usbdevfs /proc/bus/usb usbdevfs noauto 0 0 /dev/hda2 swap swap pri=42 0 0
常见选项
- ro: 只读
- noauto: 不要自动挂载
- exec: 可以在文件系统上执行二进制文件
- suid: 允许设置用户位
- user: 允许用户挂载/卸载它
- unhide: 隐藏文件可见
- async: 所有操作都将异步执行
- default: rw、suid、dev、exec、auto、nouser 和 async
练习
[edit | edit source]- 在 /etc/fstab 中创建一行,允许任何用户访问软盘。检查是否可以挂载软盘,并可以使用 touch 创建文件。
- 执行以下操作
- 在软盘上创建 ext2 文件系统。
- 挂载软盘。
- 将所有 /etc/*.conf 文件复制到软盘。
- 卸载它。发生了什么事?
- 重新挂载并检查所有文件是否都在那里。
- 发出以下命令
- Tar cvf /dev/fd0 /etc/*.conf
- 尝试重新挂载它。发生了什么事?
- 使用 tar 查看软盘的内容。
管理磁盘配额
[edit | edit source]概述
[edit | edit source]描述: 考生应该能够管理用户的磁盘配额。本目标包括为文件系统设置磁盘配额,编辑、检查和生成用户配额报告。
关键文件术语和实用程序包括
quota
edquota
repquota
quotaon
- 管理文件系统的配额
- 打印配额报告
- 管理磁盘配额
配额
[edit | edit source]在系统上,root 可以管理每个用户和每个文件系统的磁盘空间使用情况。可以设置的两个限制是:软限制 (soft =) 指定配额用户允许拥有的最大磁盘使用量。硬限制 (hard =) 指定配额用户无法超过的磁盘使用量的绝对限制。还可以设置宽限期,仅在指定的时间段后强制执行软限制。
为用户设置配额
[edit | edit source]1) 必须在要关注的分区的 /etc/fstab 文件中添加关键字 usrquota 或/和 grpquota。
/dev/fd0 /home/yann/mnt auto rw,noauto,user,usrquota 0 0 /dev/hda5 /home ext2 defaults,usrquota,grpquota 1 2
2) 在每个 root 文件系统中添加 user.quota 或/和 group.quota 文件。
touch /mnt/aquota.user touch /home/aquota.user touch /home/aquota.group chmod 600 /mnt/aquota.user chmod 600 /home/aquota.user chmod 600 /home/aquota.group
只有 root 可以执行配额管理,并且创建空文件后,可以设置一些磁盘配额,例如
- 文件和 inode 数量的软限制。
- 如果设置了宽限时间,文件和 inode 数量的硬限制。
为用户设置配额
[edit | edit source]3) 检查设置
quotacheck -v mnt quotacheck: Scanning /dev/fd0 [/home/yann/mnt] done quotacheck: Checked 6 directories and 1 files
4) 在磁盘上启用配额
quotaon -av /dev/fd0 [/home/yann/mnt]: user quotas turned on
5) 自定义磁盘配额限制
$ edquota -u yann Disk quotas for user yann (uid 500): Filesystem locks soft hard inodes soft hard /dev/fd0 15 0 0 4 0 0
$ edquota -g yann
$ edquota -t Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/fd0 7days 7days
列出配额
[edit | edit source]要列出用户或组的配额,请使用 quota。
quota [options] [user|group]
常见选项
- -u: 默认情况下,打印用户配额。
- -g: 打印用户所属组的组配额。
- -q: 打印更简洁的消息,仅包含有关使用量超过配额的文件系统的信息。
示例
quota -u yann
显示配额报告
[edit | edit source]要显示配额报告,请使用 repquota。
repquota [options] [user|group]
常见选项
- -a: 报告 /etc/mtab 中指示为读写并带有配额的所有文件系统。
- -g: 报告组。
示例
$ repquota /dev/fd0 *** Report for user quotas on device /dev/fd0 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 8 0 0 2 0 0 yann -- 15 0 0 4 0 0
练习
[edit | edit source]- 为所有主目录在 /home 的用户设置 500M 的软限制。
- 将宽限时间更改为 0。
- 以用户身份登录并检查限制是否有效。
文件权限和安全性
[edit | edit source]概述
[edit | edit source]Unix 文件安全性 文件和目录权限 默认权限 更改文件权限 更改文件所有者和组 更多权限 Unix 文件安全性 最大的安全问题可能是你。你拥有你创建的任何目录或文件。你负责你的文件的可访问性。你决定谁可以访问哪些文件和目录。
在你的主目录中,你将能够对你自己、你组中的用户以及所有其他用户授予不同的权限级别。
文件和目录权限
[edit | edit source]可以使用 ls -l 查看文件或目录的权限。
文件权限
[edit | edit source]文件权限示例
ls -l readme -rwxrw---- 1 toto users 14 Jul 5 10:00 readme
这意味着用户 toto 具有读、写和执行权限,组 users 的成员具有读写权限。其他人没有权限。(0760)
ls -l /etc/hosts -rw-r--r-- 1 root root 14 Jul 5 10:00 /etc/hosts
这意味着用户 root 具有读写权限,组 root 的成员和所有其他人具有读权限。(0644)
目录权限示例
ls -ld /bin drwxr-xr-x 2 root root 4096 Jul 5 10:00 /bin
这意味着用户 root 具有读、写和执行权限,组 root 的成员和其他人具有读和执行权限。(0755)
ls -l /home/toto drwxr-xr-x 10 toto users 4096 Jul 5 1:00 /home/toto
这意味着用户 toto 具有读、写和执行权限,组 users 的成员和其他人具有读和执行权限。(0755)
默认权限
[edit | edit source]创建文件时的默认权限为 0666,创建目录时的默认权限为 0777。大多数系统会在引导时使用 umask 程序覆盖此权限。通常掩码值为 022。这意味着组和其他用户的写入权限将被阻止。要检查或更改掩码值,请执行
umask umask 066
文件示例
default: rw- rw- rw- (0666) umask: 0 2 2 (0022) Block result: rw- r-- r-- (0644)
目录示例
default: rwx rwx rwx (0777) umask: 0 2 2 (0022) Block result: rwx r-x r-x (0755)
更改文件权限
[edit | edit source]要更改文件或目录的权限,请使用 chmod。要覆盖现有权限,请执行
chmod 0755 /tmp #rwx for user, rx for group and others
要更改添加或取消某些权限而不覆盖所有现有权限,请执行
chmod u+w readme # Add write permission for user chmod +r readme # Add read permission for everybody chmod -r readme # Remove read permission for everybody chmod u+x,g=r readme # Add execution for user and set read for group chmod u=rwx,go=rx readme # Set read write and execution for user, read and execution for group and others
要以递归模式更改,请使用 -R 选项。
chmod -R +x /sbin/*
- 练习结果.
描述: 考生应能够控制用户和组对文件的拥有权。此目标包括能够更改文件的用户和组所有者,以及新文件的默认组所有者。
关键文件术语和实用程序包括
chmod
chown
chgrp
要更改文件或目录的所有者,请使用 chown。
chown yann mon_fichier.txt
要更改文件或目录的组,请使用 chgrp。
chgrp dialout caller
程序 gpasswd 和 yast2 允许您管理组。
gpasswd [-A user,...] [-M user,...] group
- -A: 添加具有组管理员权限的用户。
- -M: 添加组中的成员。
组管理员可以添加或删除组成员。
gpasswd -d toto users gpasswd -a toto users
组管理员可以设置或删除组的密码。
gpasswd users gpasswd -r users
当用户执行特定脚本或程序时,可以通过设置文件的 uid 或 gid 位来为用户提供更多权限。
如果设置了该位,进程将继承文件的拥有者的权限,而不是用户的权限。要设置有效 uid 或 gid,请使用 chmod。
chmod 2640 [file] # (2) gid is inheritable for group. chmod 4640 [file] # (4) uid is inheritable for user.
/bin/passwd 是此类程序的示例。
还可以设置粘性位,可以使程序文本段常驻内存。chmod 1640 [file] (1) 文件程序保留在内存中。
1) 使用 chmod 中的字母编写命令行以设置以下权限
rwxrwxr-x : rwxr--r-- : r--r----- : rwxr-xr-x : rwxr-xr-x : r-x--x--x : -w-r----x : -----xrwx :
2) 使用 chmod 中的八进制数字编写命令行以设置以下权限
rwxrwxrwx : --x--x--x : r---w---x : -w------- : rw-r----- : rwx--x--x :
3) 对于以下 umask 值,文件和目录的创建权限将是什么?
umask = 0027 File permissions: Directory permissions:
umask = 0011 File permissions: Directory permissions:
umask = 0541 File permissions: Directory permissions:
umask = 0777 File permissions: Directory permissions:
4) 创建两个用户帐户
登录 ID: tst1,组 users,使用 bash shell,主目录 /home/tst1
登录 ID: tst2,组 public,使用 bash shell,主目录 /home/tst2
为这两个帐户设置密码。
以 tst1 的身份登录,并将 /bin/ls 复制到 tst1 的主目录中,命名为 myls。将 myls 的所有者更改为 tst1,并将权限更改为 0710。此权限值意味着什么?
以 tst2 的身份登录,尝试使用 /home/tst1/myls 列出您当前的目录。它工作吗?
在 /etc/group 和 /etc/gshadow 中创建一个新的组 labo,其中包含 tst1 和 tst2。将 myls 的所有者组更改为 labo。
再次从 tst2 帐户尝试执行 /home/tst1/myls 以列出您当前的目录。它工作吗?
描述: 考生应能够创建和管理指向文件的硬链接和符号链接。此目标包括能够创建和识别链接,通过链接复制文件,以及使用链接文件来支持系统管理任务。
关键文件术语和实用程序包括
ln
在以下情况下使用链接:您想创建一个指向文件的路径名。为文件设置更短或固定的路径名。
要将一个文件链接到另一个文件,请使用 ln。
ln [options] filename linkname ln [options] filename linkdirectory
常见选项
- -f 强制:覆盖现有链接
- -s 符号链接
默认链接是硬链接(没有选项的 ln)。在 Windows 上,它们被称为快捷方式。硬链接只能创建到同一物理设备上的现有文件,创建后,无法显示链接名称和文件名之间的任何可见关联。符号链接可以创建到尚未存在的文件,可以使用 ls 命令查看链接名称和文件名之间的关联。
可以使用 ls -l 显示符号链接和硬链接。符号链接用箭头表示:link_name->real_filename。
$ ls -l /dev/midi lrwxrwxrwx 1 root root 6 Jul 4 21:50 /dev/midi -> midi00
硬链接用链接计数器表示(在本例中为 3-1=2)。
$ ls -l readme -rwxrwxrwx 3 yann users 677 Jul 4 21:50 readme
删除链接名称时,请使用 rm。只会删除链接,不会删除链接的文件。
- 在您的主目录中创建一个名为 etc 和 bin 的目录。
- 以递归模式将 /etc 中的所有文件复制到您的 etc 目录中,并将 /bin 中的所有文件复制到 bin 中。
- 在您本地的 etc 目录中,将所有 *.conf 文件重命名为 *.conf.bak。
- 在您的主目录中创建一个名为 dir 的符号链接,指向您本地的 bin/ls。检查 dir 是否执行 ls。
- 删除 dir 链接。bin/ls 还在吗?