文件系统
简介:
- ext:扩展文件系统。
- ext2:第二代扩展文件系统,linux 内核使用的文件系统。
- ext3:第三代扩展文件系统,是一个日志文件系统。
- ext4:第四代扩展文件系统,基于磁盘的日志文件系统。
- CentOS6 默认使用。
- 目录文件超过 200W 性能开始下降。
- 最大文件个数40亿+,inode 为32位,单个文件支持 16T。
- 断电数据容易丢失。
- XFS:支持超大文件容量。
- CentOS7 默认使用。
- 最大文件个数达到EB级别,inode 为64位。
- 多文件,大文件系统,空间利用率比 ext4 高。
- 缩容比较困难。
- NTS:网络文件系统,用来共享文件。
- NTFS:windows xp、NT。
- ISO9660:光盘或镜像采用的文件系统。
- SMBFS:SAMBA公司开发的共享文件系统。
- TMPFS:内存文件系统。
XFS 特性:
- 为大数据而生。
- 单个系统支持 8EB。
- 单个文件大小支持 16TB。
- 拓展性比较高。
- 默认工具:备份工具 xfsdump,恢复工具:xfsrestore。
- 备份和恢复可保持镜像的一致性。
- 不会锁定文件系统,备份和恢复过程中可中断继续。
- 可拆分为多个数据流。
- xfsdump 有10个备份级别。
- 0:完全备份。
- 1~9:增量备份,只备份新增内容。
目录结构
windows:多根系统,即c:/
、d:/
、e:/
linux:单根系统,即/
特性:
- 大小写敏感。
- 隐藏文件以
.
开头。 - 路径以
/
作为分割符。 - 文件名最长255个字节,包括路径在内4095个字节。
- 一切皆为文件。
路径分类:
- 绝对路径:从根目录
/
开始的路径。 - 相对路径:从当前目录
.
或..
开始的路径。
根目录/
:linux 系统结构的最顶端,linux 的入口、文件、目录、设备都在根目录下。
/bin
:二进制命令目录,例如cat、ls、mkdir。/boot
:系统启动相关文件目录,例如 kernel.grub(引导装载程序),服务器配置建议大小 500M。/dev
:设备文件目录。/etc
:配置文件,服务启动命令,系统二进制安装包默认目录,例如 hosts、group、passwd。/home
: 普通用户主目录。/lib
、/lib64
:库文件目录。/media
:移动设备默认挂载点。/mnt
:光驱挂载点。/net
:automount 进程挂载点。/opt
:可移动设备的挂载目录,可选为软件包的安装目录。/proc
:进程信息,内核信息,内存信息目录,是系统映射的虚拟目录。/root
:管理员主目录。/run
:系统运行数据的临时储存目录。/sbin
:系统管理相关命令目录,只有 root 用户才能访问。/srv
: 存放服务启动后需要提取的数据,不是服务器为空。/sys
:存放针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。/tmp
:临时文件目录。/usr
:系统文件,普通用户应用程序和文件的存放目录。/var
:存放经常修改文件及日志文件。/var/log/secure
:ssh 日志。/var/log/message
:系统日志。/var/log/mail
:邮件日志。/var/spool/cron
:定时任务。
常用配置文件(熟记):
/etc/resolv.conf
:linux 系统 DNS 客户端。/etc/hostname
:主机名。/etc/host
:用户名,域名。/etc/fstab
: 开机自动挂载。/etc/inittab
:系统启动时设定运行级别等。/etc/profile
、/etc/bashrc
:系统环境变量/别名等。/etc/profile.d
:用户登录后执行的脚本。/etc/motd
:配置用户登录系统之后显示提示内容。/etc/redhat-release
:查看Red Hat 版本号和名称信息。/etc/sysctl.conf
:Linux 内核参数。/var/log
:记录系统及软件运行信息和所在目录。/var/log/secure
:用户登录信息日志文件。/proc/cpuinfo
:当前 CPU 相关信息。/proc/meminfo
:当前内存信息。/proc/loadavg
:当前平均负载。/proc/mounts
:当前挂载相关信息。
文件信息
ll
示例:
$ ls -l xdg
# 或
$ ll xdg
附图:
文件类型:
- -:普通文件。
- d:目录文件。
- l:链接文件。
- b:块设备文件。
- c:字符设备文件。
- p:管道文件。
- s:socket 套接字文件。
- c:字符设备文件。
文件名称颜色:可以辅助判断文件类型,但是不能只靠颜色判断。
颜色 | 文件类型 |
---|---|
蓝色 | 目录 |
黑色 | 文件 |
浅蓝色 | 链接 |
红色 | 压缩包 |
绿色 | 可执行文件 |
黑底黄字 | 设备文件 |
stat
示例:
[root@centos7-110 test]# stat test.txt
文件:"test.txt"
大小:73 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:42112982 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-12-02 20:02:50.581114497 +0800
最近更改:2022-12-02 20:02:40.146114912 +0800
最近改动:2022-12-02 20:02:40.154114912 +0800
创建时间:-
属性解析:
- Uid、GId:root 用户创建的文件是 0,普通用户创建的文件是非零值。
- 创建时间:
- 最近访问(atime):查看或更改文件内容刷新,如
cat
。 - 最近更改(mtime):更改文件内容刷新,如
vim
。 - 最近改动(ctime):修改文件权限或更改文件内容刷新,如
chmod +x
。
- 最近访问(atime):查看或更改文件内容刷新,如
命令
touch
功能:创建空文件,如果文件存在,则修改文件的创建时间,文件的内容不会改变。
格式:
$ touch [参数] [文件名]
常用参数:
- 缺省:创建文件,若文件已存在则刷新更改时间。
-m
:只修改更改时间和改动时间。-a
:只修改访问时间和改动时间。
示例:
# 在当前目录下创建文件
$ touch test.txt
# 刷新文件的更改时间和改动时间
$ touch -m 1.txt
# 刷新文件的访问时间和改动时间
$ touch -a 1.txt
# 在指定目录下创建文件
$ touch /root/test.txt
mkdir
功能:创建目录。
格式:
$ mkdir [参数] [目录名]
常用参数:
- 缺省:创建目录。
-p
:要创建目录的上级目录如果不存在的话,也一并创建。-v
:每次创建都显示详细信息。-m
:直接给权限。
示例:
# 在当前目录下创建 test 目录
$ mkdir test
# 创建目录 如果父目录不存在也一并创建
$ mkdir -p /root/test/a/b
# 创建目录 并显示创建信息
$ mkdir -v sh
# 创建目录并给与最大权限 rwxrwxrwx
$ mkdir -m 777 test
rm
功能:删除目录或文件,删除单个或多个都可以。链接文件,源文件保持不变。
格式:
$ rm [参数] [文件/目录]
常用参数:
- 缺省:删除文件。
-f
:强制删除,不提示。-r
:递归删除目录。-v
:删除时输出详细信息。
示例:
# 删除当前目录下所有文件及目录
$ rm -rf ./*
# 删除文件并显示删除信息
$ rm -v 1.txt
注意:删除重要文件前,要考虑先备份后删除。
cp
功能:复制目录或者文件。
格式:
$ cp [参数] [源] [目标]
常用参数:
-r
:递归目录。-p
:保留源文件或目录属性。-v
:详细信息。
示例:
# 递归拷贝 a 目录及其所有子目录和文件到 aa 目录
$ cp -r a aa
# 拷贝文件并保留源文件的属性
$ cp -p test.txt test1.txt
# 拷贝文件并显示拷贝信息
$ cp -v test.txt test2.txt
mv
功能:移动目录或者文件,也可以用来重命名。
格式:
$ mv [参数] [源] [目标]
常用参数:
- 缺省:移动目录或文件。
-b
:若需覆盖文件,则覆盖前先备份。-f
:force 强制覆盖,如果目标文件已经存在,则直接覆盖。
示例:
# 将多个文件移动到 test 目录下 有同名则先备份
$ mv -b a.txt b.txt c.txt test/
# 移动文件 若存在同名文件则强制覆盖
$ mv -fv test1.txt test2.txt
cat
功能:查看文件内容。
格式:
# 查看文件内容
$ cat [参数] [源]
# 在文件中追加内容 以 EOF 作为结束标志 结束标志可自定义
$ cat >>[文件名]<< EOF
常用参数:
-n
:添加行号。-s
: 多个空行显示为一行。-b
:跳过空行。
示例:
# 查看文件的内容 并跳过空行 合并空行 添加行号
$ cat -bns passwd
# 查看 passwd 的内容 只查看以root开头的行
$ cat passwd | grep ^root
# 在 redhat.repo 文件中追加内容 并以 EOF 作为结束标志
$ cat >> /etc/yum.repo.d/redhat.repo << EOF
> 123456
> abcdef
> EOF
# 将 a.txt 和 b.txt 的内容追加到 d.txt 如果没有 d.txt 则创建一个
$ cat a.txt b.txt > d.txt
# 清空 c.txt 的内容
$ cat /dev/null > c.txt
# 查看 d.txt 有几行数据
$ cat d.txt | wc -l
more
功能:逐页或逐行查看文件内容,不支持翻页。
格式:
$ more [参数] [文件]
常用参数:
- 缺省:分页查看文件内容。
-d
:查看帮助。-s
:多个空行显示为一行。-[n]
:指定每页显示 n 行。+[n]
:从文件第 n 行开始显示。
常用操作:
- 下一行:回车
- 下一页:空格
- 退出:
q
示例:
# 分页查看文件内容
$ more /etc/passwd
# 分页查看文件内容 并显示帮助信息
$ more -d /etc/passwd
# 分页查看文件内容 有多个空行时合并为一个
$ more -s test.txt
# 从第 3 行开始显示 每页 10行
$ more +3 -10 /etc/passwd
less
功能:逐页查看文件内容,支持翻页。
格式:
$ less [文件]
常用操作:
- 向上翻页:[Page Up]键
- 向下翻页:[Page Down]键,空格键
- 显示下一行:方向键下,回车键
- 显示上一行:方向键上
- 显示下一页:空格
- 退出:
q
示例:
# 逐页查看
$ less /etc/passwd
head
功能:查看文件内容。
格式:
$ head [参数] [文件]
常用参数:
- 缺省:显示前10行。
-n [num]
:显示前 num 行
示例:
# 显示前3行
$ head -3 test.txt
tail
功能:查看文件内容。
格式:
$ tail [参数] [文件]
常用参数:
- 缺省:显示后10行
-n [num]
:显示倒数 num 行-f
:动态查看内容,[Ctrl] + [c] 退出
示例:
# 查看第7行
$ head -7 /etc/passwd | tail -1
# 动态查看登录日志文件 有人登录会自动刷新内容
$ tail -f /var/log/secure
tree
功能:查看目录结构工具。
格式:
$ tree [参数][目录]
常用参数:
- 缺省:查看当前目录结构。
-L [level]
:指定最大显示深度。-d
:只显示目录。
示例:
# 查看 /nmt 目录的结构
$ tree /mnt
# 之查看一级目录
$ tree -L 1 /mnt
# 只显示目录
$ tree -d /mnt
拓展
磁盘操作
创建分区:
- 查看设备:
$ lsblk
- 磁盘位置:
/dev/sd*
- 分区工具:fdisk
- 格式化命令:
$ mkfs.xfs [分区]
- 挂载磁盘:
mount /dev/[分区] [挂载目录]
fdisk 的使用
格式:
$ fdisk /dev/[磁盘]
常用命令:
- n:增加新硬盘。
- w:保存退出。
- p:查看现有分区。
- m:查看命令清单。
- d:删除分区。
示例:
# 在硬盘上创建一个5G大小的主分区
[root@tp404 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
[root@tp404 ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 11月 4 19:17 /dev/sdb
[root@tp404 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x29d8643f 创建新的 DOS 磁盘标签。
命令(输入 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)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x29d8643f
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
yum 的使用
格式:
# 查找执行命令所需的包
$ yum search [命令]
示例:
[root@centos7-110 test]# yum search rz
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
================================== N/S matched: rz ==================================
lrzsz.x86_64 : The lrz and lsz modem communications programs
名称和简介匹配 only,使用“search all”试试。
统计文件行数
格式:
$ wc -l [源]
示例:
# 统计行数并显示文件名
$ wc -l a.txt
# 统计文件行数不显示文件名
$ wc -l < a.txt
集合
示例:
{1..20}
:从1到20逐个取值。
[1-10]
:从1到10逐个取值。
[a,b,c]
:按顺序逐个取值。