欢迎来到《Linux入门到精通》系列的第三篇文章!在上一章《精通Linux系列第二章:虚拟机安装Linux系统环境教程》,我们学会了如何使用虚拟机搭建Linux学习环境,也了解了各种Linux发行版本的搭建方式与区别,有了环境才能更好更深刻的实践与学习,接下来我们一起进入第三章探索Linux文件系统目录结构。“Linux系统一切皆为文件” 是一个经典的说法,它反映了Linux操作系统的设计哲学和特点。在Linux系统中,几乎所有的设备、文件和资源都被视为文件。这包括硬盘驱动器、键盘、鼠标、网络接口、进程、目录等等。通过将这些不同类型的实体都抽象为文件,Linux提供了一种统一的方式来访问和管理它们。这种文件的抽象使得Linux系统具有了许多优势。首先,它简化了系统的管理和配置。通过使用相同的文件系统接口,管理员可以使用相似的命令和工具来处理不同类型的实体。其次,它提供了一种统一的访问机制,使得用户和应用程序可以以相同的方式与不同的资源进行交互。最后,这种文件的抽象也为Linux系统的可扩展性和灵活性提供了基础,因为新的设备和资源可以很容易地被添加和管理。总而言之,“Linux系统一切皆为文件” 的说法强调了Linux操作系统的设计理念和独特之处,它是Linux系统的一个重要特点。
文件系统是操作系统中用于组织和管理计算机存储设备上的文件和目录的一种机制
。它提供了一种结构化的方式来存储、访问和管理文件数据
。
例如,我们可以将文件系统比喻为一个文件柜,其中的文件和文件夹就像是柜子里的文件和文件夹一样。文件系统通过创建层次结构来组织文件和目录,使得用户可以方便地找到和管理所需的文件。假设我们有一个名为"Documents"的文件夹,其中包含了多个文件和子文件夹。通过文件系统,我们可以将这些文件和子文件夹组织成一个层次结构,例如:
- Documents
- File1.txt
- File2.docx
- Pictures
- Image1.jpg
- Image2.png
- Reports
- Report1.pdf
- Report2.doc
"Documents"是顶级文件夹,它包含了两个文件(File1.txt和File2.docx)以及两个子文件夹(Pictures和Reports)。子文件夹"Pictures"下有两个图片文件(Image1.jpg和Image2.png),而子文件夹"Reports"下有两个报告文件(Report1.pdf和Report2.doc)。
文件系统还定义了文件和目录的命名规则。例如,在Linux系统中,文件和目录的命名可以包含字母、数字和特殊字符,但不能包含斜杠(/)和空格。这样的命名规则确保了文件系统的正常运行。
此外,文件系统还涉及文件的物理存储方式。文件数据被存储在存储设备的扇区中,并使用文件系统元数据来记录文件的属性和位置信息。这样,文件系统可以快速访问和检索文件。
常见的Linux文件系统包括:
这些文件系统在不同的场景和需求下具有不同的优势。根据你的具体需求,选择适合的文件系统可以提供更好的性能、可靠性和数据管理功能。
df
命令:mount
命令:lsblk
命令:cat
命令查看/etc/fstab
文件,需要root权限:通过观察这些输出,你可以确定你的Linux系统中使用的文件系统类型。在上述示例中,根文件系统使用的是xfs文件系统。
当插入新的硬盘,要使用特定的文件系统,可以按照以下方式创建使用。
创建文件系统:首先,您需要在磁盘分区或设备上创建所需的文件系统。例如,使用ext4文件系统,可以使用以下命令在分区上创建ext4文件系统:
sudo mkfs.ext4 /dev/sdX
其中,/dev/sdX
是您要创建文件系统的分区设备。
挂载文件系统:一旦文件系统创建完成,您可以将其挂载到Linux文件系统层次结构中的某个目录上。例如,将ext4文件系统挂载到/mnt/mydrive
目录:
sudo mount /dev/sdX /mnt/mydrive
访问和管理文件系统:一旦文件系统挂载成功,您可以通过访问挂载点目录来读取、写入和管理文件。例如,使用文件管理器或命令行工具访问 /mnt/mydrive
目录。
卸载文件系统:在完成对文件系统的操作后,您可以卸载它以确保数据的完整性。使用以下命令卸载文件系统:
sudo umount /mnt/mydrive
Linux文件系统的层次结构如下:
这些目录在Linux文件系统中具有不同的作用和用途。了解文件系统的层次结构可以帮助你更好地组织和管理文件和目录。
文件和目录是Linux文件系统中的基本概念,它们用于组织和存储数据。
文件和目录是Linux文件系统中的基本组成部分,它们共同构成了文件系统的结构和功能。了解这些基本概念可以帮助你更好地理解和管理文件系统中的数据。
在Linux中,你可以使用以下命令来创建文件和目录:
touch filename
mkdir directoryname
mkdir -p path/to/directory
cat
命令,它会将文件的内容输出到终端,查看文件内容的常见用例包括查看日志文件、配置文件、脚本文件等。 实例:假设我们要查看名为example.txt
的文本文件的内容,可以运行以下命令:cat example.txt
ls
命令,它会列出当前目录中的所有文件和目录。 实例:运行以下命令来查看当前目录下的文件和目录列表:ls
ls
命令的-l
选项,它会以长格式显示文件和目录的详细信息,包括权限、所有者、大小等。 实例:运行以下命令来查看当前目录下文件和目录的详细信息:ls -l
cp
命令,后面跟上源文件/目录和目标位置。 实例:将文件example.txt
复制到目录backup
中,可以运行以下命令:cp example.txt backup/
mv
命令,后面跟上源文件/目录和目标位置。 实例:将文件example.txt
移动到目录new_folder
中,可以运行以下命令:mv example.txt new_folder/
mv
命令,后面跟上源文件/目录和目标名称。 实例:将文件old_name.txt
重命名为new_name.txt
,可以运行以下命令:mv old_name.txt new_name.txt
rm
命令,后面跟上要删除的文件名。 实例:删除文件example.txt
,可以运行以下命令:rm example.txt
rm
命令的-r
选项,后面跟上要删除的目录名。 实例:删除目录myfolder
及其所有内容,可以运行以下命令:rm -r myfolder
请注意,删除文件和目录是不可逆的操作,如高危rm操作rm -rf *
等,请谨慎使用。在执行删除操作之前,确保你真正想要删除的文件或目录。
文件权限由三个组合在一起的权限集合表示:所有者权限、群组权限和其他用户权限。每个权限集合包含读取(r)、写入(w)和执行(x)三种权限。
实例:假设我们有一个名为example.txt
的文件,以下是一个文件权限的示例:
-rw-rw-r--. 1 yishuoit yishuoit 0 Oct 21 08:15 example.txt
在这个示例中,第一个字符-
表示这是一个文件(如果是目录,则显示为d
)。接下来的三个字符rw-
表示所有者(owner)对文件具有读写权限,而-r-
表示群组(group)和其他用户(others)只有读取权限。通过正确设置文件权限,你可以控制谁可以访问、修改和执行文件,从而保护文件的安全性和完整性。
文件权限在Linux中以一串字符的形式表示,共有十个字符。
字符表示文件类型如下:
-
表示普通文件d
表示目录l
表示符号链接(软链接)c
表示字符设备文件b
表示块设备文件s
表示套接字文件p
表示命名管道(FIFO)r
表示可读w
表示可写x
表示可执行文件权限的常见用例包括限制对敏感文件的访问、控制文件的编辑权限等。例如,你可以将配置文件的权限设置为只有所有者可以读写,而其他用户只能读取,以确保配置文件的安全性。
要修改文件权限,可以使用chmod
命令,后面跟上权限设置和文件名。
实例:将文件example.txt
的权限设置为所有者具有读写权限,群组和其他用户只有读取权限,可以运行以下命令:
chmod 644 example.txt
在这个示例中,6
表示所有者具有读写权限(4+2),而4
表示群组和其他用户只有读取权限。
+
和-
来添加或移除权限,使用=
来设置权限。 实例:将文件example.txt
的权限设置为所有者具有读写权限,群组和其他用户只有读取权限,可以运行以下命令:
chmod u+rw,g+r,o+r example.txt
在这个示例中,u+rw
表示为所有者添加读写权限,g+r
表示为群组添加读取权限,o+r
表示为其他用户添加读取权限。修改文件权限的常见用例包括限制对敏感文件的访问、控制文件的编辑权限等。例如,你可以使用chmod 600 private_file.txt
将一个私密文件的权限设置为只有所有者可以读写。
每个文件都有一个所有者(owner),可以是用户或用户组。所有者对文件具有特殊的权限,可以控制文件的访问、修改和执行。
实例:假设我们有一个名为example.txt
的文件,以下是一个文件所有权的示例:
-rw-r--r-- 1 user group 1024 Jan 1 00:00 example.txt
在这个示例中,user
是文件的所有者,group
是文件所属的群组。文件所有权的常见用例包括限制对敏感文件的访问、控制文件的编辑权限等。例如,你可以将配置文件的所有权设置为只有特定用户或用户组可以修改,以确保配置文件的安全性。
实例:将文件example.txt
的所有者修改为yishuo
,可以运行以下命令:
chown yishuo example.txt
实例:将文件example.txt
的所属群组修改为yishuogroup
,可以运行以下命令:
chown :yishuogroup example.txt
实例:将文件example.txt
的所有者修改为yishuo
,所属群组修改为yishuogroup
,可以运行以下命令:
chown yishuo:yishuogroup example.txt
实际用例:修改文件所有权的常见用例包括更改文件的所有者、更改文件所属群组等。例如,你可以使用chown root:admin sensitive_file.txt
将一个敏感文件的所有者修改为root
,所属群组修改为admin
。通过使用chown
命令,你可以灵活地修改文件的所有者和所属群组,以满足你的文件系统管理需求。请注意,修改文件所有权可能需要管理员或所有者的权限。
SUID(Set User ID)权限是Linux文件系统管理中的一种特殊权限,它允许用户以文件所有者的权限来执行文件,当用户执行具有SUID权限的文件时,该文件将以文件所有者的身份运行,而不是执行用户的身份。
实例:假设我们有一个名为program
的可执行文件,具有SUID权限。以下是一个示例:
-rwsr-xr-x 1 owner group 1024 Jan 1 00:00 program
在这个示例中,s
表示SUID权限被设置在文件的执行权限上。SUID权限的常见用例包括允许普通用户执行特定的系统命令或程序,而无需提供管理员权限。例如,passwd
命令通常具有SUID权限,允许普通用户更改自己的密码,而无需管理员权限。
chmod
命令设置SUID权限。在终端中输入以下命令:chmod u+s program
chmod 4755 program
SGID(Set Group ID)权限是Linux文件系统管理中的一种特殊权限,SGID权限可以应用于可执行文件和目录。当用户执行具有SGID权限的文件或访问具有SGID权限的目录时,该文件或目录将以文件所属群组的身份运行或访问。
实例:假设我们有一个名为directory
的目录,具有SGID权限。以下是一个示例:
drwxr-sr-x 1 owner group 1024 Jan 1 00:00 directory
在这个示例中,s
表示SGID权限被设置在目录的执行权限上。SGID权限的常见用例包括在共享目录中确保新创建的文件继承目录的所属群组,以便多个用户可以共享文件。
chmod
命令设置SGID权限。在终端中输入以下命令:chmod g+s directory
chmod 2755 directory
Sticky位权限是Linux文件系统管理中的一种特殊权限,它主要应用于目录,当目录具有Sticky位权限时,只有文件的所有者或超级用户才能删除该目录中的文件,其他用户无法删除。
实例:假设我们有一个名为directory
的目录,具有Sticky位权限。以下是一个示例:
drwxrwxrwt 1 owner group 1024 Jan 1 00:00 directory
在这个示例中,t
表示Sticky位权限被设置在目录的执行权限上。Sticky位权限的常见用例是在共享目录中限制其他用户对文件的删除操作。例如,当多个用户共享一个目录,并且你希望确保只有文件的所有者才能删除自己的文件,而其他用户无法删除其他用户的文件。
chmod
命令设置Sticky权限。在终端中输入以下命令:chmod +t directory
chmod 1755 directory
挂载点是一个目录,用于将一个文件系统连接到该目录,使得文件系统中的文件和目录可以在该挂载点下访问。挂载点和挂载操作的常见用例包括将外部存储设备(如硬盘、USB驱动器)挂载到系统中,以便访问其中的文件和目录。例如,你可以将一个USB闪存驱动器挂载到/mnt/usb
目录,以便在该目录下访问闪存驱动器中的文件。可以使用mount
命令进行挂载操作。
实例:要将/dev/sdb
分区挂载到/mnt
目录,可以运行以下命令:
mount /dev/sdb /mnt
通过使用挂载点和挂载操作,你可以方便地将文件系统连接到目录结构中的特定位置,以便访问其中的文件和目录。请注意,挂载操作可能需要管理员权限 ,这里简单讲解,后续会详细介绍 。
mount
命令用于显示当前系统中已挂载的文件系统及其挂载点。
实例:运行mount
命令,可以列出当前系统中已挂载的文件系统及其挂载点。示例如下:
/dev/sda1 on / type ext4 (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
/dev/sdb1 on /mnt type ext4 (rw,relatime)
在这个示例中,可以看到三个已挂载的文件系统,分别是根文件系统(/),临时文件系统(/run)和挂载点为/mnt的文件系统。通过使用mount
命令,你可以方便地查看当前系统中已挂载的文件系统及其挂载点,以便进行文件系统管理和访问。
umount
命令用于卸载已挂载的文件系统,断开文件系统与挂载点之间的连接。
实例:要卸载名为/mnt
的挂载点上的文件系统,可以运行以下命令:
umount /mnt
实际用例:卸载文件系统的常见用例包括安全地移除外部存储设备,以及解除挂载不再需要的网络共享目录。例如,你可以使用umount
命令来卸载一个已挂载的USB驱动器,以便安全地将其从系统中移除。通过使用umount
命令,你可以方便地卸载已挂载的文件系统,确保文件系统与挂载点之间的连接被断开。请注意,卸载操作可能需要管理员权限。
实现永久挂载文件系统,您可以编辑系统的 /etc/fstab
文件,该文件包含了系统启动时要挂载的文件系统的信息。以下是进行永久挂载的步骤:
打开 /etc/fstab
文件:
sudo nano /etc/fstab
在文件的末尾添加一行来描述要挂载的文件系统。行的格式如下:
/dev/sdX /mnt/mydrive ext4 defaults 0 0
其中,/dev/sdX
是您要挂载的分区设备,/mnt/mydrive
是挂载点目录,ext4
是文件系统类型,defaults
是挂载选项,0 0
是用于文件系统检查的选项。
保存并关闭文件(在nano编辑器中,按下 Ctrl + X
,然后按下 Y
保存更改)。
重新启动系统或使用以下命令重新加载 /etc/fstab
文件以应用更改:
sudo mount -a
此时,文件系统将在每次系统启动时自动挂载到指定的挂载点。请确保在编辑 /etc/fstab
文件之前备份文件以防止意外错误。如果您需要修改或删除挂载点,只需编辑 /etc/fstab
文件并重新加载即可。
磁盘配额允许系统管理员为每个用户或用户组设置磁盘使用限制,以防止他们占用过多的磁盘空间。通过使用磁盘配额,系统管理员可以有效地管理磁盘空间的使用,避免资源浪费和滥用。请注意,磁盘配额的实现可能因文件系统类型而有所不同,例如,可以使用quota
命令来设置和管理磁盘配额。
磁盘配额是Linux文件系统管理中的一种功能,用于限制用户或用户组在文件系统上可以使用的磁盘空间。
实例:假设我们有一个名为/home
的文件系统,我们要为用户user1
设置磁盘配额为1GB,而为用户user2
设置磁盘配额为500MB。
df -TH /home
命令执行结果示例:
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda1 ext4 10485760 524288 9961472 6% /home
在这个示例中,文件系统类型为ext4
。
sudo quotacheck -cug /home
user1
设置磁盘配额为1GB。可以使用以下命令设置磁盘配额:sudo setquota -u user1 1048576 1048576 0 0 /home
user2
设置磁盘配额为500MB。可以使用以下命令设置磁盘配额:sudo setquota -u user2 524288 524288 0 0 /home
实际用例:磁盘配额的常见用例包括在共享文件系统上限制用户的磁盘使用,以确保公平分配和避免资源滥用。通过使用磁盘配额,系统管理员可以有效地管理磁盘空间的使用,避免资源浪费和滥用。
监控和管理磁盘配额是Linux文件系统管理中的重要任务,用于跟踪和管理用户或用户组在文件系统上的磁盘使用情况。以下是相关内容:
repquota
命令来监控磁盘配额的使用情况。以下是一个示例:repquota /home
命令执行结果示例:
*** Report for user quotas on device /dev/sda1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
user1 -- 524288 1048576 1048576 10 0 0
user2 -- 262144 524288 524288 5 0 0
在这个示例中,我们可以看到用户user1
使用了524288个磁盘块,而用户user2
使用了262144个磁盘块。
edquota
命令来管理磁盘配额,包括修改配额限制和警告设置。以下是一个示例:edquota -u user1
命令执行结果示例:
Disk quotas for user user1 (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 524288 1048576 1048576 10 0 0
在这个示例中,我们可以看到用户user1
的磁盘配额限制。监控和管理磁盘配额的常见用例包括定期检查磁盘使用情况,警告用户接近配额限制,并根据需要调整配额限制。
文件系统检查工具是Linux文件系统管理中的重要工具,用于检查和修复文件系统中的错误。以下是相关内容:
fsck
是一个常用的文件系统检查工具,用于检查和修复文件系统中的错误。可以使用以下命令运行fsck
:sudo fsck /dev/sda1
命令执行结果示例:
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
/dev/sda1: clean, 100/65536 files, 200/262144 blocks
在这个示例中,fsck
检查了/dev/sda1
文件系统,并显示了文件系统的状态。
badblocks
是一个用于检测磁盘坏道的工具。可以使用以下命令运行badblocks
:sudo badblocks -v /dev/sda1
命令执行结果示例:
Checking blocks 0 to 262143
Checking for bad blocks (read-only test): done
Pass completed, 0 bad blocks found. (0/0/0 errors)
在这个示例中,badblocks
检查了/dev/sda1
文件系统中的坏道,并显示了检测结果。通过使用文件系统检查工具,可以及时发现和修复文件系统中的错误,确保文件系统的完整性和稳定性。请注意,运行文件系统检查工具可能需要管理员权限。
执行文件系统修复是Linux文件系统管理中的重要任务,用于修复文件系统中的错误。
fsck
命令的修复选项来修复文件系统。以下是一个示例:sudo fsck -y /dev/sda1
命令执行结果示例:
fsck from util-linux 2.34
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda1: 11/65536 files (0.0% non-contiguous), 200/262144 blocks
在这个示例中,fsck
修复了/dev/sda1
文件系统中的错误,并显示了修复后的文件系统状态。通过执行文件系统检查和修复,可以及时发现和修复文件系统中的错误,确保文件系统的完整性和稳定性。请注意,运行文件系统检查和修复命令可能需要管理员权限。
文件系统加密是Linux文件系统管理中的一种安全措施,用于保护文件系统中的数据免受未经授权的访问。文件系统加密通过对文件系统中的数据进行加密,确保只有授权用户才能解密和访问文件系统中的数据。
在Linux上有多种加密工具可供选择,以下是一些常见的加密工具:
这些加密工具都有各自的特点和用途,您可以根据您的需求选择适合您的加密工具。请注意,在使用加密工具时,请确保备份重要数据,并妥善保管加密密钥和密码。后续文章会详细介绍windows和linux加密工具的使用。
学习Linux系统是进入开源世界的大门,它将为你打开更广阔的职业发展道路,并使你在各种工作角色中更加灵活和自主。无论你是系统管理员、网络工程师、软件开发人员还是数据分析师,掌握Linux系统技能都将为你的工作带来巨大的价值。在后续的文章中,我们将继续探索Linux的更多主题,敬请期待!微信公众号搜索关注艺说IT,分享各种原创技术干货文章,对你有用的话请一键三连,感谢。