Linux 文件系统基本管理
·
Linux 文件系统基本管理
一、构建基于 ISO 文件的 yum 仓库
应用场景
客户端需安装图形化界面,但默认依赖互联网 YUM 仓库,为提升安装速度,在 Server 端部署 Nginx 发布 DVD 光盘 ISO 文件作为本地 YUM 仓库,客户端指向该仓库完成安装。
操作步骤
1. Server 端部署并配置 Nginx 服务
# 安装Nginx软件
[root@server ~ 10:32:03]# yum install -y nginx
# 编辑Nginx配置文件,开启目录清单功能
[root@server ~ 10:39:03]# vim /etc/nginx/nginx.conf
......
http {
# 添加以下参数,允许查看目录文件清单
autoindex on;
......
# 设置Nginx开机自启并立即启动
[root@server ~ 10:39:38]# systemctl enable nginx.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
# 准备测试文件,验证Nginx服务可用性
[root@server ~ 10:39:58]# mv /usr/share/nginx/html/index.html{,.ori}
[root@server ~ 10:40:09]# echo welcome to Nginx website. > /usr/share/nginx/html/index.html
[root@server ~ 10:40:21]# systemctl start nginx
2.客户端测试 Nginx 服务连通性
[root@client ~ 11:44:18]# curl http://10.1.8.10
welcome to Nginx website.
3. Server 端挂载 ISO 文件到 Nginx 发布目录
前提:确保 ISO 文件已关联到虚拟机并正确识别光盘设备
# 创建挂载目录
[root@server ~ 10:41:56]# mkdir /usr/share/nginx/html/dvd
# 挂载光盘设备到Nginx发布目录(只读模式)
[root@server ~ 10:43:05]# mount /dev/sr0 /usr/share/nginx/html/dvd
mount: /dev/sr0 写保护,将以只读方式挂载
4.Client 端配置本地 YUM 仓库并安装图形化界面
# 备份原有YUM仓库配置
[root@client ~ 10:42:14]# mkdir /etc/yum.repos.d/old
[root@client ~ 10:43:30]# mv /etc/yum.repos.d/*repo /etc/yum.repos.d/old
# 创建新的YUM仓库配置文件
[root@client ~ 10:43:39]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name= dvd from local server
baseurl=http://10.1.8.10/dvd
gpgcheck=0
# 清理YUM缓存并更新仓库信息
[root@client ~ 10:44:15]# yum clean all
[root@client ~ 10:44:24]# yum grouplist
已加载插件:fastestmirror
没有安装组信息文件
Maybe run: yum groups mark convert (see man yum)
Determining fastest mirrors
dvd | 3.6 kB 00:00:00
(1/2): dvd/group_gz | 153 kB 00:00:00
(2/2): dvd/primary_db | 3.3 MB 00:00:00
可用的环境分组:
最小安装
基础设施服务器
计算节点
文件及打印服务器
基本网页服务器
虚拟化主机
带 GUI 的服务器
GNOME 桌面
KDE Plasma Workspaces
开发及生成工作站
可用组:
传统 UNIX 兼容性
兼容性程序库
图形管理工具
安全性工具
开发工具
控制台互联网工具
智能卡支持
科学记数法支持
系统管理
系统管理工具
完成
# 降级open-vm-tools(解决软件版本兼容性问题)
[root@client ~ 10:46:20]# yum downgrade open-vm-tools-11.0.5-3.el7_9.3 -y
# 安装“带 GUI 的服务器”组包
[root@client ~ 10:46:36]# yum groupinstall -y '带 GUI 的服务器'
# 启动图形化界面
[root@client ~ 10:49:41]# init 5
# 切换回字符界面(可选)
[root@client ~ 10:50:01]# init 3
二、Linux 文件查找工具详解
1. locate:基于数据库快速查找
原理
locate 通过查询mlocate数据库(存储文件路径和名称)实现快速查找,常规用户仅能查到有读取权限的文件;查找前需通过updatedb更新数据库。
# 安装httpd(用于测试)
[root@client ~ 11:35:17]# yum install -y httpd
# 未更新数据库时查找(提示数据库不存在)
[root@client ~ 11:37:48]# locate httpd.conf
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
# 更新数据库后查找
[root@client ~ 11:38:28]# updatedb
[root@client ~ 11:39:49]# locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
# -b选项:仅匹配文件名(忽略路径)
[root@client ~ 11:39:54]# locate -b httpd
/etc/httpd
/etc/httpd/conf/httpd.conf
/etc/logrotate.d/httpd
/etc/sysconfig/httpd
/usr/lib/systemd/system/httpd.service
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd
/usr/libexec/initscripts/legacy-actions/httpd
/usr/sbin/httpd
/usr/share/httpd
/usr/share/augeas/lenses/dist/httpd.aug
/usr/share/augeas/lenses/dist/thttpd.aug
/usr/share/doc/httpd-2.4.6
/usr/share/doc/httpd-tools-2.4.6
/usr/share/doc/httpd-2.4.6/httpd-dav.conf
/usr/share/doc/httpd-2.4.6/httpd-default.conf
/usr/share/doc/httpd-2.4.6/httpd-info.conf
/usr/share/doc/httpd-2.4.6/httpd-languages.conf
/usr/share/doc/httpd-2.4.6/httpd-manual.conf
/usr/share/doc/httpd-2.4.6/httpd-mpm.conf
/usr/share/doc/httpd-2.4.6/httpd-multilang-errordoc.conf
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
/usr/share/man/man8/httpd.8.gz
/usr/share/setroubleshoot/plugins/httpd_can_sendmail.py
/usr/share/setroubleshoot/plugins/httpd_can_sendmail.pyc
/usr/share/setroubleshoot/plugins/httpd_can_sendmail.pyo
/usr/share/setroubleshoot/plugins/httpd_unified.py
/usr/share/setroubleshoot/plugins/httpd_unified.pyc
/usr/share/setroubleshoot/plugins/httpd_unified.pyo
/usr/share/setroubleshoot/plugins/httpd_write_content.py
/usr/share/setroubleshoot/plugins/httpd_write_content.pyc
/usr/share/setroubleshoot/plugins/httpd_write_content.pyo
/var/cache/httpd
/var/log/httpd
# 扩展:basename/dirname(提取文件名/路径)
[root@client ~ 11:41:28]# basename /usr/doc
doc
[root@client ~ 11:42:06]# dirname /usr/share/doc
/usr/share
# -i选项:忽略大小写
[root@client ~ 11:42:34]# locate PASSWD
/etc/PASSWD
[root@client ~ 11:43:03]# locate -i PASSWD
/etc/PASSWD
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/htpasswd
/usr/bin/lppasswd
/usr/bin/passwd
/usr/bin/vncpasswd
/usr/lib/firewalld/services/kpasswd.xml
/usr/lib64/samba/pdb/smbpasswd.so
/usr/lib64/security/pam_unix_passwd.so
/usr/sbin/chgpasswd
/usr/sbin/chpasswd
/usr/sbin/lpasswd
/usr/sbin/saslpasswd2
/usr/share/augeas/lenses/dist/htpasswd.aug
/usr/share/augeas/lenses/dist/passwd.aug
/usr/share/awk/passwd.awk
/usr/share/bash-completion/completions/chpasswd
/usr/share/bash-completion/completions/passwd
/usr/share/cups/www/help/man-lppasswd.html
/usr/share/doc/passwd-0.79
/usr/share/doc/passwd-0.79/AUTHORS
/usr/share/doc/passwd-0.79/COPYING
/usr/share/doc/passwd-0.79/ChangeLog
/usr/share/doc/passwd-0.79/NEWS
/usr/share/locale/ar/LC_MESSAGES/passwd.mo
/usr/share/locale/as/LC_MESSAGES/passwd.mo
/usr/share/locale/ast/LC_MESSAGES/passwd.mo
/usr/share/locale/bg/LC_MESSAGES/passwd.mo
/usr/share/locale/bn/LC_MESSAGES/passwd.mo
/usr/share/locale/bn_IN/LC_MESSAGES/passwd.mo
/usr/share/locale/bs/LC_MESSAGES/passwd.mo
/usr/share/locale/ca/LC_MESSAGES/passwd.mo
/usr/share/locale/cs/LC_MESSAGES/passwd.mo
/usr/share/locale/cy/LC_MESSAGES/passwd.mo
/usr/share/locale/da/LC_MESSAGES/passwd.mo
/usr/share/locale/de/LC_MESSAGES/passwd.mo
/usr/share/locale/el/LC_MESSAGES/passwd.mo
/usr/share/locale/en_GB/LC_MESSAGES/passwd.mo
/usr/share/locale/es/LC_MESSAGES/passwd.mo
/usr/share/locale/et/LC_MESSAGES/passwd.mo
/usr/share/locale/eu/LC_MESSAGES/passwd.mo
/usr/share/locale/fa/LC_MESSAGES/passwd.mo
/usr/share/locale/fi/LC_MESSAGES/passwd.mo
/usr/share/locale/fr/LC_MESSAGES/passwd.mo
/usr/share/locale/gl/LC_MESSAGES/passwd.mo
/usr/share/locale/gu/LC_MESSAGES/passwd.mo
/usr/share/locale/he/LC_MESSAGES/passwd.mo
/usr/share/locale/hi/LC_MESSAGES/passwd.mo
/usr/share/locale/hr/LC_MESSAGES/passwd.mo
/usr/share/locale/hu/LC_MESSAGES/passwd.mo
/usr/share/locale/hy/LC_MESSAGES/passwd.mo
/usr/share/locale/id/LC_MESSAGES/passwd.mo
/usr/share/locale/is/LC_MESSAGES/passwd.mo
/usr/share/locale/it/LC_MESSAGES/passwd.mo
/usr/share/locale/ja/LC_MESSAGES/passwd.mo
/usr/share/locale/ka/LC_MESSAGES/passwd.mo
/usr/share/locale/kn/LC_MESSAGES/passwd.mo
/usr/share/locale/ko/LC_MESSAGES/passwd.mo
/usr/share/locale/ku/LC_MESSAGES/passwd.mo
/usr/share/locale/lo/LC_MESSAGES/passwd.mo
/usr/share/locale/mk/LC_MESSAGES/passwd.mo
/usr/share/locale/ml/LC_MESSAGES/passwd.mo
/usr/share/locale/mr/LC_MESSAGES/passwd.mo
/usr/share/locale/ms/LC_MESSAGES/passwd.mo
/usr/share/locale/my/LC_MESSAGES/passwd.mo
/usr/share/locale/nb/LC_MESSAGES/passwd.mo
/usr/share/locale/nds/LC_MESSAGES/passwd.mo
/usr/share/locale/nl/LC_MESSAGES/passwd.mo
/usr/share/locale/nn/LC_MESSAGES/passwd.mo
/usr/share/locale/or/LC_MESSAGES/passwd.mo
/usr/share/locale/pa/LC_MESSAGES/passwd.mo
/usr/share/locale/pl/LC_MESSAGES/passwd.mo
/usr/share/locale/pt/LC_MESSAGES/passwd.mo
/usr/share/locale/pt_BR/LC_MESSAGES/passwd.mo
/usr/share/locale/ro/LC_MESSAGES/passwd.mo
/usr/share/locale/ru/LC_MESSAGES/passwd.mo
/usr/share/locale/si/LC_MESSAGES/passwd.mo
/usr/share/locale/sk/LC_MESSAGES/passwd.mo
/usr/share/locale/sl/LC_MESSAGES/passwd.mo
/usr/share/locale/sq/LC_MESSAGES/passwd.mo
/usr/share/locale/sr/LC_MESSAGES/passwd.mo
/usr/share/locale/sr@latin/LC_MESSAGES/passwd.mo
/usr/share/locale/sv/LC_MESSAGES/passwd.mo
/usr/share/locale/ta/LC_MESSAGES/passwd.mo
/usr/share/locale/te/LC_MESSAGES/passwd.mo
/usr/share/locale/tr/LC_MESSAGES/passwd.mo
/usr/share/locale/uk/LC_MESSAGES/passwd.mo
/usr/share/locale/ur/LC_MESSAGES/passwd.mo
/usr/share/locale/vi/LC_MESSAGES/passwd.mo
/usr/share/locale/wa/LC_MESSAGES/passwd.mo
/usr/share/locale/zh_CN/LC_MESSAGES/passwd.mo
/usr/share/locale/zh_TW/LC_MESSAGES/passwd.mo
/usr/share/man/cs/man1/gpasswd.1.gz
/usr/share/man/de/man1/gpasswd.1.gz
/usr/share/man/de/man8/chgpasswd.8.gz
/usr/share/man/de/man8/chpasswd.8.gz
/usr/share/man/fr/man1/gpasswd.1.gz
/usr/share/man/fr/man8/chgpasswd.8.gz
/usr/share/man/fr/man8/chpasswd.8.gz
/usr/share/man/hu/man1/gpasswd.1.gz
/usr/share/man/it/man1/gpasswd.1.gz
/usr/share/man/it/man8/chgpasswd.8.gz
/usr/share/man/it/man8/chpasswd.8.gz
/usr/share/man/ja/man1/gpasswd.1.gz
/usr/share/man/ja/man1/passwd.1.gz
/usr/share/man/ja/man8/chpasswd.8.gz
/usr/share/man/man1/gpasswd.1.gz
/usr/share/man/man1/grub2-mkpasswd-pbkdf2.1.gz
/usr/share/man/man1/htpasswd.1.gz
/usr/share/man/man1/lpasswd.1.gz
/usr/share/man/man1/lppasswd.1.gz
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man1/sslpasswd.1ssl.gz
/usr/share/man/man1/vncpasswd.1.gz
/usr/share/man/man3/passwd2des.3.gz
/usr/share/man/man5/passwd.5.gz
/usr/share/man/man5/smbpasswd.5.gz
/usr/share/man/man8/chgpasswd.8.gz
/usr/share/man/man8/chpasswd.8.gz
/usr/share/man/man8/saslpasswd2.8.gz
/usr/share/man/pt_BR/man1/gpasswd.1.gz
/usr/share/man/ru/man1/gpasswd.1.gz
/usr/share/man/ru/man8/chgpasswd.8.gz
/usr/share/man/ru/man8/chpasswd.8.gz
/usr/share/man/zh_CN/man1/gpasswd.1.gz
/usr/share/man/zh_CN/man8/chgpasswd.8.gz
/usr/share/man/zh_CN/man8/chpasswd.8.gz
/usr/share/man/zh_TW/man8/chpasswd.8.gz
/usr/share/vim/vim74/ftplugin/passwd.vim
/usr/share/vim/vim74/syntax/passwd.vim
# -c选项:返回匹配结果数量
[root@client ~ 11:43:22]# locate -b -c PASSWD
1
# -r选项:正则表达式匹配
[root@client ~ 11:44:06]# locate -r 'http.*conf'
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.modules.d
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd/modules/mod_log_config.so
/usr/libexec/initscripts/legacy-actions/httpd/configtest
/usr/share/doc/httpd-2.4.6/httpd-dav.conf
/usr/share/doc/httpd-2.4.6/httpd-default.conf
/usr/share/doc/httpd-2.4.6/httpd-info.conf
/usr/share/doc/httpd-2.4.6/httpd-languages.conf
/usr/share/doc/httpd-2.4.6/httpd-manual.conf
/usr/share/doc/httpd-2.4.6/httpd-mpm.conf
/usr/share/doc/httpd-2.4.6/httpd-multilang-errordoc.conf
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
/usr/share/doc/httpd-2.4.6/proxy-html.conf
2. find:实时遍历文件系统查找
原理
find 命令实时遍历指定路径的文件系统,用户需对目标路径有读 / 执行权限;支持多维度条件筛选和后续操作。
(1)按文件名查找
# 创建测试文件
[root@server ~ 16:49:45]# touch /etc/PASSWD
# 精确匹配(区分大小写)
[root@server ~ 16:49:59]# find /etc/ -name passwd
/etc/passwd
/etc/pam.d/passwd
# 模糊匹配
[root@server ~ 16:50:11]# find /etc/ -name '*passwd*'
/etc/passwd-
/etc/passwd
/etc/pam.d/passwd
/etc/security/opasswd
# 忽略大小写匹配
[root@server ~ 16:50:39]# find /etc/ -iname passwd
/etc/passwd
/etc/pam.d/passwd
/etc/PASSWD
(2)按文件类型查找
| 类型参数 | 说明 |
|---|---|
| b | 块设备文件 |
| c | 字符设备文件 |
| d | 目录 |
| f | 普通文件 |
| l | 软链接文件 |
| p | 管道文件 |
| s | 套接字文件 |
# 创建测试目录
[root@server ~ 16:50:49]# mkdir /etc/yum.repos.d/passwd
# 查找名为passwd的目录
[root@server ~ 16:51:24]# find /etc/ -name 'passwd' -type d
/etc/yum.repos.d/passwd
# 删除测试目录
[root@server ~ 16:51:35]# rmdir /etc/yum.repos.d/passwd
(3)按文件属主 / 属组查找
# 查看用户uid
[root@server ~ 16:51:43]# id liu
uid=1000(liu) gid=1000(liu) 组=1000(liu)
# 按用户名查找
[root@server ~ 16:52:10]# find / -user liu
/home/liu
/home/liu/.bash_logout
/home/liu/.bash_profile
/home/liu/.bashrc
# 按uid查找
[root@server ~ 16:52:41]# find / -uid 1000
/home/liu
/home/liu/.bash_logout
/home/liu/.bash_profile
/home/liu/.bashrc
# 查看组信息
[root@server ~ 16:53:03]# grep wheel /etc/group
wheel:x:10:
# 按组名查找
[root@server ~ 16:54:00]# find / -group wheel
# 按gid查找
[root@server ~ 16:54:19]# find / -gid 10
# 查找无属主/无属组文件
[root@server ~ 16:54:36]# find / -nouser -o -nogroup
(4)按文件权限查找
# 准备测试文件
[root@server ~ 16:55:50]# mkdir lab;cd lab
[root@server lab 16:56:25]# touch file-{1..3}
[root@server lab 16:56:46]# ls -l file*
-rw-r--r-- 1 root root 0 5月 20 16:56 file-1
-rw-r--r-- 1 root root 0 5月 20 16:56 file-2
-rw-r--r-- 1 root root 0 5月 20 16:56 file-3
# -perm mode:精确匹配权限
[root@server lab 16:56:54]# chmod 764 file-1
[root@server lab 16:57:25]# find -perm 764 |xargs ls -l
-rwxrw-r-- 1 root root 0 5月 20 16:56 ./file-1
# -perm -mode:ugo至少满足指定权限(例:764 → u≥7, g≥6, o≥4)
[root@server lab 16:57:54]# chmod 777 file-1
[root@server lab 16:58:33]# chmod 764 file-2
[root@server lab 16:58:40]# chmod 760 file-3
[root@server lab 16:59:04]# find . -perm -764 |xargs ls -l
-rwxrwxrwx 1 root root 0 5月 20 16:56 ./file-1
-rwxrw-r-- 1 root root 0 5月 20 16:56 ./file-2
# 查找SUID权限文件(4000为SUID位)
[root@server lab 17:01:10]# find / -perm -4000
# 查找同时含SUID+SGID的文件(6000=4000+2000)
[root@server lab 17:01:59]# find / -perm -6000 2>/dev/null |xargs ls -l
总用量 0
-rwxrwxrwx 1 root root 0 5月 20 16:56 file-1
-rwxrw-r-- 1 root root 0 5月 20 16:56 file-2
-rwxrw---- 1 root root 0 5月 20 16:56 file-3
# -perm /mode:ugo任一满足指定权限(例:764 → u≥7 或 g≥6 或 o≥4)
[root@server lab 17:03:26]# chmod a=- file-1
[root@server lab 17:03:31]# chmod uo=-,g=rwx file-2
[root@server lab 17:03:41]# chmod ug=-,o=r file-3
[root@server lab 17:03:50]# find -name 'file-*' -perm /764| xargs ls -l
----rwx--- 1 root root 0 5月 20 16:56 ./file-2
-------r-- 1 root root 0 5月 20 16:56 ./file-3
# 查找含SUID/SGID/Sticky的文件(7000=4000+2000+1000)
[root@server lab 17:04:03]# find / -perm /7000
# 查找含SUID或SGID的文件
[root@server lab 17:05:04]# find / -perm /6000
# 按可读/可写/可执行属性查找
find / -readable # 可读
find / -writable # 可写
find / -executable # 可执行
(5)按文件大小查找
| 单位 | 说明 |
|---|---|
| c | 字节 |
| k | KiB(1024 字节) |
| M | MiB(1024KiB) |
| G | GiB(1024MiB) |
# 等于10MiB
[root@server ~ 17:05:58]# find -size 10M
# 大于10GiB
[root@server ~ 17:06:05]# find -size +10G
# 小于10KiB
[root@server ~ 17:06:18]# find -size -10k
# 等于1MiB(注意:size取整,1M包含小于1M的文件,建议用1024k)
[root@server ~ 17:06:29]# find -size 1M
[root@server ~ 17:06:41]# find -size 1024k
(6)按文件时间查找
| 参数 | 单位 | 说明 |
|---|---|---|
| -amin | 分钟 | 访问时间 |
| -cmin | 分钟 | 状态修改时间 |
| -mmin | 分钟 | 内容修改时间 |
| -atime | 24 小时 | 访问时间 |
| -ctime | 24 小时 | 状态修改时间 |
| -mtime | 24 小时 | 内容修改时间 |
| -newer | - | 比指定文件新 |
# 正好10分钟前访问的文件
[root@server ~ 17:08:46]# find -amin 10
# 超过10分钟前访问的文件
[root@server ~ 17:08:53]# find -amin +10
# 10分钟内访问的文件
[root@server ~ 17:08:59]# find -amin -10
(7)按硬链接数 / Inode 查找
# 硬链接数等于3
[root@server ~ 17:09:03]# find -links 3
# 硬链接数大于3
[root@server ~ 17:10:03]# find -links +3
# 硬链接数小于3
[root@server ~ 17:10:08]# find -links -3
# 按Inode查找(示例:Inode=67160130)
[root@server ~ 17:10:11]# ls -i /etc/fstab
67160130 /etc/fstab
[root@server ~ 17:10:35]# find / -inum 67160130| xargs ls -i
67160130 /etc/fstab
(8)多条件组合
| 逻辑符 | 说明 | 示例 |
|---|---|---|
| -a / 空格 | 与 | find /etc -name passwd -type f |
| -o | 或 | find / -nouser -o -nogroup |
| ! | 非 | find / ! -size -200M |
# 查找/etc下名为passwd的普通文件
find /etc -name passwd -type f
# 查找无属主或无属组的文件
find / -nouser -o -nogroup
# 查找大小不小于200MiB的文件(屏蔽错误输出)
[root@server ~ 17:12:44]# find / ! -size -200M 2>/dev/null
/proc/kcore
/proc/2465/task/2465/fd/6
/proc/2465/task/2465/fdinfo/6
/proc/2465/fd/5
/proc/2465/fdinfo/5
(9)后续操作(action)
# -delete:删除找到的文件
[root@server ~ 17:13:44]# find / -name PASSWD
/etc/PASSWD
[root@server ~ 17:14:29]# find / -name PASSWD -delete
[root@server ~ 17:14:42]# find / -name PASSWD
# -ls:查看文件详情(等效ls -dils)
[root@server ~ 17:14:45]# find /etc/ -name passwd -ls
67448031 4 -rw-r--r-- 1 root root 886 5月 13 17:09 /etc/passwd
33992548 4 -rw-r--r-- 1 root root 188 4月 1 2020 /etc/pam.d/passwd
# -exec:执行命令(\;表示命令结束)
[root@server ~ 17:15:57]# find /etc/ -name passwd -exec echo haha \;
haha
haha
# -exec {}:引用找到的文件(示例:复制指定Inode文件)
[root@server ~ 17:16:00]# find / -inum 67160130
/etc/fstab
[root@server ~ 17:16:23]# mkdir findfiles
[root@server ~ 17:16:31]# find / -inum 67160130 -exec cp -a {} ./findfiles \;
[root@server ~ 17:17:09]# ls findfiles/fstab
findfiles/fstab
三、Linux 硬盘分区管理
1. 硬盘分区的意义
- 隔离系统文件与用户文件,避免应用数据占满系统盘;
- 限制用户 / 应用的磁盘可用空间;
- 分区损坏时仅影响该分区数据,降低故障范围;
- 支持创建交换分区(SWAP);
- 优化诊断 / 备份性能,适配不同文件类型(小文件 / 大文件)的存储需求。
2.MBR 分区方案(BIOS 固件)
核心特性
- 支持最多 4 个主分区;
- 可通过 “扩展分区 + 逻辑分区” 扩展至最多 15 个分区(扩展分区不可格式化,逻辑分区可格式化);
- 单分区最大容量≤2TiB(4 字节存储扇区数,2^32 × 512 字节)。
主引导扇区结构(柱面 0、磁头 0、扇区 1)
| 部分 | 大小 | 作用 |
|---|---|---|
| 引导程序 | 446 字节 | 系统启动时转交控制权给指定分区的 OS |
| 磁盘分区表(DPT) | 64 字节(4 个分区项 ×16 字节) | 存储分区信息 |
| 结束标志 | 2 字节 | 固定值 0xAA55,标识扇区有效性 |
fdisk 工具(管理 MBR 分区)
(1)命令语法
[root@server ~ 17:19:26]# fdisk -h
用法:
fdisk [选项] <磁盘> 更改分区表
fdisk [选项] -l <磁盘> 列出分区表
fdisk -s <分区> 给出分区大小(块数)
选项:
-b <大小> 扇区大小(512、1024、2048或4096)
-c[=<模式>] 兼容模式:“dos”或“nondos”(默认)
-h 打印此帮助文本
-u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认)
-v 打印程序版本
-C <数字> 指定柱面数
-H <数字> 指定磁头数
-S <数字> 指定每个磁道的扇区数
(2)查看分区表
# 方法1:直接列出
[root@server ~ 17:19:29]# fdisk -l /dev/sdb
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
# 方法2:交互式查看
[root@server ~ 17:20:23]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xe94a0510 创建新的 DOS 磁盘标签。
# 输入m查看帮助
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
# 输入p打印分区表
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xe94a0510
设备 Boot Start End Blocks Id System
# 输入q退出
命令(输入 m 获取帮助):q
(3)创建 MBR 分区
# 进入交互式管理
[root@server ~ 17:22:34]# fdisk /dev/sdb
# 输入n创建新分区
命令(输入 m 获取帮助):n
# 选择分区类型(默认primary)
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
# 选择分区号(默认1)
分区号 (1-4,默认 1):
# 设置起始扇区(默认2048)
起始 扇区 (2048-209715199,默认为 2048):
将使用默认值 2048
# 设置结束扇区(+2G表示2GiB)
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB
# 输入p验证分区
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41c8b607
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
# 输入w保存并退出
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
# 验证分区创建结果
[root@server ~ 17:26:32]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 2G 0 part
# 若分区表未生效,通知内核更新
[root@server ~ 17:26:56]# partprobe
注意:如果此时分区表未生成,执行以下命令,通知kernel重新生成分区表。有时候重启系统才会生成最新分区表。
[root@server ~ 17:26:56]# partprobe
(4)删除 MBR 分区
[root@server ~ 17:27:30]# fdisk /dev/sdb
# 输入p查看分区
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41c8b607
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
# 输入d删除分区(自动选中唯一分区1)
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
# 输入p验证删除结果
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41c8b607
设备 Boot Start End Blocks Id System
# 输入w保存更改
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
(5)创建扩展分区 + 逻辑分区(突破 4 个主分区限制)
[root@server ~ 18:30:10]# fdisk /dev/sdb
# 创建主分区1(2GiB)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-209715199,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB
# 创建主分区2(3GiB)
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (4196352-209715199,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-209715199,默认为 209715199):+3G
分区 2 已设置为 Linux 类型,大小设为 3 GiB
# 创建主分区3(4GiB)
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p):
Using default response p
分区号 (3,4,默认 3):
起始 扇区 (10487808-209715199,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-209715199,默认为 209715199):+4G
分区 3 已设置为 Linux 类型,大小设为 4 GiB
# 创建扩展分区4(占用剩余所有空间)
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e):
Using default response e
已选择分区 4
起始 扇区 (18876416-209715199,默认为 18876416):
将使用默认值 18876416
Last 扇区, +扇区 or +size{K,M,G} (18876416-209715199,默认为 209715199):
将使用默认值 209715199
分区 4 已设置为 Extended 类型,大小设为 91 GiB
# 在扩展分区中创建逻辑分区5(5GiB)
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (18878464-209715199,默认为 18878464):
将使用默认值 18878464
Last 扇区, +扇区 or +size{K,M,G} (18878464-209715199,默认为 209715199):+5G
分区 5 已设置为 Linux 类型,大小设为 5 GiB
# 输入p验证分区结构
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x41c8b607
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 10487807 3145728 83 Linux
/dev/sdb3 10487808 18876415 4194304 83 Linux
/dev/sdb4 18876416 209715199 95419392 5 Extended
/dev/sdb5 18878464 29364223 5242880 83 Linux
# 输入w保存并退出
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
# 验证分区
[root@server ~ 18:35:13]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 3G 0 part
├─sdb3 8:19 0 4G 0 part
├─sdb4 8:20 0 1K 0 part
└─sdb5 8:21 0 5G 0 part
# 清理测试分区(仅保留演示环境)
[root@server ~ 18:35:35]# fdisk /dev/sdb
命令(输入 m 获取帮助):d
分区号 (1-5,默认 5):5
分区 5 已删除
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):d
分区号 (1-3,默认 3):3
分区 3 已删除
命令(输入 m 获取帮助):d
分区号 (1,2,默认 2):2
分区 2 已删除
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
3. GPT 分区方案(UEFI 固件)
核心特性
- 单分区最大容量≤18ZiB(8 字节存储扇区数,2^64 × 512 字节);
- 支持最多 128 个分区(实际建议不超过 120 个,避免格式化异常);
- 分区表信息冗余备份,自带 CRC32 校验,容错性更强
GPT 分区表结构
| 区域 | 说明 |
|---|---|
| LBA0(保护性 MBR) | 446 字节引导程序 + 0xEE 标识符(标识 GPT 磁盘,防止老工具误修改) |
| LBA1(GPT 表头) | 记录分区表位置 / 大小、备份 GPT 位置、CRC32 校验码 |
| LBA2-33(分区记录区) | 共 32 个 LBA,每个 LBA 存储 4 组分区记录(每组 128 字节),总计 128 组 |
gdisk 工具(管理 GPT 分区)
(1)查看 GPT 分区表
# 安装gdisk
[root@server ~ 18:37:57]# yum install -y gdisk
# 查看分区表(自动识别MBR并提示转换)
[root@server ~ 18:38:11]# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Disk /dev/sdb: 209715200 sectors, 100.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D80CB0F8-A526-4185-8AC3-9102D33CC195
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 209715166
Partitions will be aligned on 2048-sector boundaries
Total free space is 209715133 sectors (100.0 GiB)
Number Start (sector) End (sector) Size Code Name
(2)转换 MBR 为 GPT 分区表
[root@server ~ 18:38:41]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
# 输入?查看帮助信息
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
# 输入 o,创建全新 GPT 分区表(清空原有 MBR 分区)
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
# 输入 p,查看新 GPT 分区表(已清空)
Command (? for help): p
Disk /dev/sdb: 209715200 sectors, 100.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4759EFA7-E486-4F31-B4B5-DA184AD628E2
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 209715166
Partitions will be aligned on 2048-sector boundaries
Total free space is 209715133 sectors (100.0 GiB)
Number Start (sector) End (sector) Size Code Name
# 输入 w,写入 GPT 分区表并退出
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
(3)在 GPT 磁盘上创建分区
[root@server ~ 18:43:20]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
# 输入 n,创建新分区
Command (? for help): n
# 分区编号,默认 1,直接回车
Partition number (1-128, default 1):
# 起始扇区,默认 2048,直接回车
First sector (34-209715166, default = 2048) or {+-}size{KMGTP}:
# 结束扇区,输入 +2G,创建 2G 分区
Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: +2G
Current type is 'Linux filesystem'
# 输入 L 查看分区类型,直接回车默认 8300(Linux 文件系统)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
# 输入 p,查看分区
Command (? for help): p
Disk /dev/sdb: 209715200 sectors, 100.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4759EFA7-E486-4F31-B4B5-DA184AD628E2
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 209715166
Partitions will be aligned on 2048-sector boundaries
Total free space is 205520829 sectors (98.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 Linux filesystem
(4)更改 GPT 分区名称
# 输入 c,修改分区名
Command (? for help): c
Using 1
Enter name: data01
# 输入 p 查看
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 data01
(5)查看分区详细信息
Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: 19AE5CDC-1AB2-4EBA-B9E2-AE9E7BF42653
First sector: 2048 (at 1024.0 KiB)
Last sector: 4196351 (at 2.0 GiB)
Partition size: 4194304 sectors (2.0 GiB)
Attribute flags: 0000000000000000
Partition name: 'data01'
(6)删除 GPT 分区
# 输入 d,删除分区 1
Command (? for help): d
Using 1
# 输入 p 查看,已删除
Command (? for help): p
Number Start (sector) End (sector) Size Code Name
# 输入 w 保存退出
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
四、文件系统持久化挂载
环境准备
利用 parted 创建一个分区,并格式化为xfs文件系统。
[root@server ~ 19:10:40]# parted /dev/sdb mklabel gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want
to continue?
是/Yes/否/No? y
信息: You may need to update /etc/fstab.
[root@server ~ 19:11:15]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
信息: You may need to update /etc/fstab.
[root@server ~ 19:11:48]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 如果格式化时候,提示存在文件系统,则需要-f选项强制格式化
[root@server ~ 19:12:13]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@server ~ 19:12:39]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
持久化挂载
当服务器重启时,系统不会再次将文件系统自动挂载到目录树上,用户无法访问。为了确保系统在启动时自动挂载文件系统, 需要在 /etc/fstab文件中添加一个条目。
/etc/fstab 是以空格分隔的文件,每行具有六个字段。
- **第一个字段指定设备。**可以使用UUID或device来指定设备。
- **第二个字段是目录挂载点。**通过它可以访问目录结构中的块设备。挂载点必须存在;如果不存在,请使用mkdir命令进行创建。
- 第三个字段包含文件系统类型,如xfs或ext4 。
- 第四个字段是挂载选项,以逗号分隔的。 defaults是一组常用选项。详细信息参考mount(8) 。
- 第五个字段指定dump命令是否备份设备。
- 第六个字段指定fsck顺序字段,决定了在系统启动吋是否应运行fsck命令,以验证文件系统是否干净。 该字段中的值指示了 fsck的运行顺序。 对于XFS文件系统, 请将该字段设为0 ,因为XFS并不使用fsck来检查自己的文件系统状态。 对于ext4 文件系统,如果是根文件系统, 请将该字段设 为 1 ; 如果是其他ext4 文件系统, 则将该字段设为2。 这样, fsck就会先处理根文件系统,然后同步检查不同磁盘上的文件系统,并按顺序检查同一磁盘上的文件系统。
示例:
[root@server ~ 19:13:11]# blkid /dev/sdb1
/dev/sdb1: UUID="31872be1-fd55-4689-8b6e-91e084f44148" TYPE="xfs" PARTLABEL="data01" PARTUUID="e84b3213-6124-4072-91b1-b04d79908016"
[root@server ~ 19:13:20]# mkdir /data01
[root@server ~ 19:13:45]# vim /etc/fstab
# 最后一行增加一个条目
UUID="31872be1-fd55-4689-8b6e-91e084f44148" /data01 xfs defaults 0 0
# 使用如下命令立刻挂载
[root@server ~ 19:15:14]# mount /data01
# 验证
[root@server ~ 19:15:31]# df -h /data01
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 33M 2.0G 2% /data01
# 重启系统验证
[root@centos7 ~]# reboot
[root@server ~ 19:16:36]# df -h /data01
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 33M 2.0G 2% /data01
### 取消持久化挂载
删除/etc/fstab中对应条目即可。
更多推荐



所有评论(0)