Linux 文件系统的特性:
- super block(超级块):记录整个文件系统的信息,包括 block 与 inode 的总量,已经使用的 inode 和 block 的数量,未使用的 inode 和 block 的数量,block 与 inode 的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
- date block(数据块,也称作 block):用来实际保存数据的(柜子的隔断),block 的大小(1KB、2KB 或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个 blcok 只能保存一个文件的数据,要是文件数据小于一个 block 块,那么这个 block 的剩余空间不能被其他文件是要;要是文件数据大于一个 block 块,则占用多个 block 块。Windows 中磁盘碎片整理工具的原理就是把一个文件占用的多个 block 块尽量整理到一起,这样可以加快读写速度。
- inode(i 节点,柜子门上的标签):用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。
Linux 目录结构:
目 录 名 | 目录的作用 |
/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行。 是/usr/bin/目录的软链 接 |
/sbin/ | 存放系统命令的目录, 只有超级用户才可以执行。是/usr/sbin/目录的软链接 |
/usr/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行 |
/usr/sbin/ | 存放系统命令的目录, 只有超级用户才可以执行 |
/boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
/dev/ | 设备文件保存位置 |
/etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件 全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
/home/ | 普通用户的家目录。在创建用户时,每个用户要有一个默认登录和保存自己数据 的位置,就是用户的家目录,所有普通用户的宿主目录是在/home/下建立一个和 用户名相同的目录。如用户 user1 的家目录就是/home/user1/ |
/lib/ | 系统调用的函数库保存位置。是/usr/lib/的软链接 |
/lib64/ | 64 位函数库保存位置。是/usr/lib64/的软链接 |
/lost+found/ | 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的 过程中 fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分 区中出现,例如/lost+found 就是根分区的备份恢复目录, /boot/lost+found 就是 /boot 分区的备份恢复目录 |
/media/ | 挂载目录。系统建议是用来挂载媒体设备的,如软盘和光盘 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。我们在刚刚已经解释了挂载, 童鞋们应该知道只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然 准备了三个默认挂载目录/media、 /mnt、 /misc,但是到底在哪个目录中挂载什么 设备都可以由管理员自己决定。例如超哥接触 Linux 的时候,默认挂载目录只有 /mnt 一个,所以养成了在/mnt 下建立不同目录挂载不同设备的习惯。如 /mnt/cdrom 挂载光盘, /mnt/usb 挂载 U 盘,这都是可以的 |
/mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。现在系统建议这个 目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装 的源码包软件都可以安装到这个目录中。不过超哥还是习惯把软件放到 /usr/local/目录中,也就是说, /usr/local/目录也可以用来安装软件 |
/proc/ | 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保 存系统的内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo 是保存 CPU 信息的, /proc/devices 是保存设备驱动的列表的, /proc/filesystems 是保存文件系统列表,/proc/net是保存网络协议的。 |
/sys/ | 虚拟文件系统。和/proc/目录相似,该目录中的数据都保存在内存中,主要保存 与内核相关的信息 |
/root/ | root 的宿主目录。普通用户宿主目录在/home/下, root 宿主目录直接在“/”下 |
/run/ | 系统运行时产生的数据,如 ssid, pid 等相关数据。 /var/run/是此目录的软链接 |
/srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。 我们建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
/usr/ | 系统软件资源目录。注意 usr 不是 user 的缩写,而是“UNIX Software Resource” 的缩写,所以不是存放用户数据的目录,而是存放系统软件资源的目录。系统中 安装的软件大多数保存在这里 |
/usr/lib/ | 应用程序调用的函数库保存位置 |
/usr/local/ | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 |
/usr/share/ | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 |
/usr/src/ | 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过 超哥更习惯把手工下载的源码包保存到/usr/local/src/目录中,把内核源码保存到 /usr/src/kernels/目录中 |
/usr/src/kernels/ | 内核源码保存位置 |
/var/ | 动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件 |
/var/www/html/ | RPM 包安装的 Apache 的网页主目录 |
/var/lib/ | 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/目录中 |
/var/log/ | 系统日志保存位置 |
/var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置。是/run/目录的软链接 |
/var/spool/ | 放置队列数据的目录。就是排队等待其他程序使用的数据,比如邮件队列和打印 队列 |
/var/spool/mail/ | 新收到的邮件队列保存位置。系统新收到的邮件会保存在此目录中 |
/var/spool/cron/ | 系统的定时任务队列保存位置。系统的计划任务会保存在这里 |
Linux 常见文件系统
文件系 统 |
描 述 |
ext | Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用 |
ext2 | 是 ext 文件系统的升级版本, Red Hat Linux 7.2 版本以前的系统默认都是 ext2 文件 系 统 。 于 1993 年 发 布 , 支 持 最 大 16TB 的 分 区 和 最 大 2TB 的 文 件 (1TB=1024GB=1024×1024KB) |
ext3 | 是 ext2 文件系统的升级版本,最大的区别就是带日志功能, 以便在系统突然停止时 提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件 |
ext4 | 是 ext3 文件系统的升级版。 ext4 在性能、伸缩性和可靠性方面进行了大量改进。 ext4 的变化可以说是翻天覆地的,比如向下兼容 ext3、最大 1EB 文件系统和 16TB 文件、无 限数量子目录、 Extents 连续数据块概念、 多块分配、延迟分配、持久预分配、快速 FSCK、 日志校验、无日志模式、在线碎片整理、 inode 增强、默认启用 barrier 等。它是 CentOS 6.x 的默认文件系统 |
xfs | XFS 最早针对 IRIX 操作系统开发,是一个高性能的日志型文件系统,能够在断电以及 操作系统崩溃的情况下保证文件系统数据的一致性。它是一个 64 位的文件系统,后来 进行开源并且移植到了 Linux 操作系统中,目前 CentOS 7.x 将 XFS+LVM 作为默认的文 件系统。据官方所称, XFS 对于大文件的读写性能较好。 |
swap | swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存 不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。 它是 Linux 的必需分区 |
NFS | NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件 共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源 |
iso9660 | 光盘的标准文件系统。 Linux 要想使用光盘,必须支持 iso9660 文件系统 |
fat | 就是 Windows 下的 fat16 文件系统,在 Linux 中识别为 fat |
vfat | 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区 和最大 4GB 的文件 |
NTFS | 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如 果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快, 支持最大 2TB 的分区和最大 64GB 的文件 |
ufs | Sun 公司的操作系统 Solaris 和 SunOS 所采用的文件系统 |
proc | Linux 中基于内存的虚拟文件系统,用来管理内存存储目录/proc |
sysfs | 和 proc 一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs |
tmpfs | 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区 |
常用的硬盘管理命令
Linux df命令
语法
df [选项]... [FILE]...
- 文件-a, --all 包含所有的具有 0 Blocks 的文件系统
- 文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
- 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
- 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
- 文件-i, --inodes 列出 inode 资讯,不列出已使用 block
- 文件-k, --kilobytes 就像是 --block-size=1024
- 文件-l, --local 限制列出的文件结构
- 文件-m, --megabytes 就像 --block-size=1048576
- 文件--no-sync 取得资讯前不 sync (预设值)
- 文件-P, --portability 使用 POSIX 输出格式
- 文件--sync 在取得资讯前 sync
- 文件-t, --type=TYPE 限制列出文件系统的 TYPE
- 文件-T, --print-type 显示文件系统的形式
- 文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
- 文件-v (忽略)
- 文件--help 显示这个帮手并且离开
- 文件--version 输出版本资讯并且离开
[root@iZbp143t3oxhfc3ar7jey0Z dns]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 644K 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/vda1 40G 8.0G 30G 22% / tmpfs 379M 0 379M 0% /run/user/0
Linux du命令
Linux du命令用于显示目录或文件的大小。
du会显示指定的目录或文件所占用的磁盘空间。
语法
du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]
参数说明:
- -a或-all 显示目录中个别文件的大小。
- -b或-bytes 显示目录或文件大小时,以byte为单位。
- -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
- -D或--dereference-args 显示指定符号连接的源文件大小。
- -h或--human-readable 以K,M,G为单位,提高信息的可读性。
- -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
- -k或--kilobytes 以1024 bytes为单位。
- -l或--count-links 重复计算硬件连接的文件。
- -L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
- -m或--megabytes 以1MB为单位。
- -s或--summarize 仅显示总计。
- -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
- -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
- -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
- --exclude=<目录或文件> 略过指定的目录或文件。
- --max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
- --help 显示帮助。
- --version 显示版本信息。
[root@iZbp143t3oxhfc3ar7jey0Z dns]# du -sh / du: cannot access ‘/proc/24763/task/24763/fd/3’: No such file or directory du: cannot access ‘/proc/24763/task/24763/fdinfo/3’: No such file or directory du: cannot access ‘/proc/24763/fd/4’: No such file or directory du: cannot access ‘/proc/24763/fdinfo/4’: No such file or directory 7.9G /
du 与 df 的区别: du 是用于统计文件大小的,统计的文件大小是准确的; df 是用于统计空间大小的,统计的剩余空是准确的 ,df比du大,是把临时文件都算进去了。
Linux fsck命令
Linux fsck命令用于 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统。
语法
fsck [-sACVRP] [-t fstype] [--] [fsck-options] filesys [...]
参数 :
- filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
- -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
- -s : 依序一个一个地执行 fsck 的指令来检查
- -A : 对/etc/fstab 中所有列出来的 partition 做检查
- -C : 显示完整的检查进度
- -d : 列印 e2fsck 的 debug 结果
- -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
- -R : 同时有 -A 条件时,省略 / 不检查
- -V : 详细显示模式
- -a : 如果检查有错则自动修复
- -r : 如果检查有错则由使用者回答是否修复
[root@iZbp143t3oxhfc3ar7jey0Z dns]# fsck –y /dev/sdb1
注:此命令不要执行,因为在系统启动的时候也会执行修复命令,能修复的话,那个时候就已经修复了。
Linux dumpe2fs命令
[root@iZbp143t3oxhfc3ar7jey0Z dns]# dumpe2fs -h /dev/vda1 dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: <none> Last mounted on: / Filesystem UUID: 1114fe9e-2309-4580-b183-d778e6d97397 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 2621440 Block count: 10484164 Reserved block count: 471777 Free blocks: 8102524 Free inodes: 2381953 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 1021 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Flex block group size: 16 Filesystem created: Thu Jul 11 10:52:00 2019 Last mount time: Tue Mar 17 18:42:14 2020 Last write time: Wed Mar 18 02:42:12 2020 Mount count: 8 Maximum mount count: -1 Last checked: Thu Jul 11 10:52:00 2019 Check interval: 0 (<none>) Lifetime writes: 20 GB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 First orphan inode: 1447930 Default directory hash: half_md4 Directory Hash Seed: 0163c9aa-b271-4625-b08d-5a774c70359e Journal backup: inode blocks Journal features: journal_incompat_revoke Journal size: 128M Journal length: 32768 Journal sequence: 0x0006551c Journal start: 4069 [root@iZbp143t3oxhfc3ar7jey0Z dns]#
Linux stat命令
stat以文字的格式来显示inode的内容。
语法
stat [文件或目录]
[root@iZbp143t3oxhfc3ar7jey0Z tmp]# touch abc [root@iZbp143t3oxhfc3ar7jey0Z tmp]# stat abc File: ‘abc’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd01h/64769d Inode: 1183621 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-04-09 22:58:48.523933945 +0800 Modify: 2020-04-09 22:58:48.523933945 +0800 Change: 2020-04-09 22:58:48.523933945 +0800 Birth: - [root@iZbp143t3oxhfc3ar7jey0Z tmp]#
判断文件类型
file 文件名 判断文件类型
type 命令名 判断命令类型
[root@iZbp143t3oxhfc3ar7jey0Z tmp]# file abc abc: ASCII text