03 文件管理(高级)
1. 文件处理三剑客命令初探
流式编辑器,主要擅长文件的编辑操作,我们可以事先定制好编辑文件的指令,然后sed自动完成对文件的整体编辑
1.1. sed
流式编辑器,主要擅长对文件的编辑操作,我们可以事先定制好编辑文件的指令,然后让sed自动完成对文件的整体编辑
# 用法
sed 选项(规则) '定位+命令' 文件路径
# 选项
-n 取消默认输出
-r 支持扩展正则元字符
-i 立即编辑文件,把流入屏幕的内容流到文件中
[root@wyz ~]# sed -i 'p' a.txt
[root@wyz ~]# cat a.txt
wer
wer
hello
hello
# 定位
行定位:
1定位到第一行
1,3代表从第1行到第3行
[root@wyz ~]# sed -r '1,3p' /sed.txt
111
111
222
222
333
333
444
555
egon123
456egon
eg39on
不写定位代表定位所有行
# sed '3i yyy' a.txt
we
asad
yyy
radf
12
dfas23
af3r
sdf4
修改第三行内容
#定位1,3行的内容
# sed '1,3p' a.txt
111
111
222
222
333
333
444
555
sed -n '' a.txt
# 命令
d # 删除模式内存空间内容
[root@wyz ~]# sed -r '1d' /sed.txt
222
333
444
555
egon123
456egon
eg39on
# 删除第三行,第五行
[root@wyz ~]# sed -r '3d;5d' /sed.txt
111
222
444
egon123
456egon
eg39on
p # 输出内容到屏幕(每行内容输出两遍)
s # 替换 s/原内容/替换内容/g(global全部替代)
[root@wyz ~]# sed -r 's/egon/dsb/g' /sed.txt
111
222
333
444
555
dsb123
456dsb
eg39on
c # 改变内容
[root@wyz ~]# sed -r '1cxxx' /sed.txt
xxx
222
333
444
555
egon123
456egon
eg39on
================用例:================
以文本sed.txt为例
111
222
333
444
555
egon123
456egon
eg39on
# 正则匹配末尾带egon的
[root@wyz ~]# sed -r '/egon$/d' /sed.txt
111
222
333
444
555
egon123
eg39on
# 匹配开头为egon的
[root@wyz ~]# sed -r '/^egon/d' /sed.txt
111
222
333
444
555
456egon
eg39on
sed对比vim
- sed可以把处理文件的规则事先写好,然后用同一套规则编辑多个文件而vim只能一个个编辑
- sed处理文件,一次只能处理一行,即同一时间内存中只有文件的有内容,无论文件多大,都不会对内存造成过大的压力======》用户处理大文件
1.2. awk
ask主要用于处理有格式的文本,例如/etc/passwd这种
# 用法
awk 选项 'pattern{action}' 文件路径
1、awk会读取文件的一行内容然后赋值给$0
2、然后awk会以-F指定的分隔符将该行切分成n段,最多可以达到100段,第一段给$1,第二段给$2,依次次类推
3、print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致
4、重复步骤1,2,3直到文件内容读完
# 内置变量
$0 一整行内容
NR 记录号,等同于行号
NF 以-F分隔符分隔的段数
# pattern可以是
/正则/
/正则/ # 该行内容匹配成功正则
$1 ~ /正则/ # 第一段内容匹配成功正则
$1 !~ /正则/ # 第一段内容没有匹配成功正则
比较运算:
NR >= 3 && NR <=5 # 3到5行
$1 == "root" # 第一段内容等于root
[root@wyz ~]# awk -F: 'NR <=3 || NR >=8{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
sssd 998
abrt 173
libstoragemgmt 997
rpc 32
colord 996
# =================用法示例=================
以bb.txt为例
egon10:12:fmale
egon9:123:male
egon8:124:male
egon7:125:fmale
egon6:126:fmale
egon5:127:male
egon4:128:fmale
egon3:129:male
egon1:120:fmale
egon2:122:fmale
# NR打印序号
[root@wyz ~]# awk -F: '{print NR,$1,$3}' /bb.txt
1 egon10 fmale
2 egon9 male
3 egon8 male
4 egon7 fmale
5 egon6 fmale
6 egon5 male
7 egon4 fmale
8 egon3 male
9 egon1 fmale
10 egon2 fmale
# $NR打印每行最后内容
# NR打印每行最后一列的列号
[root@wyz ~]# awk -F: '{print $NF}' /bb.txt
fmale
male
male
fmale
fmale
male
fmale
male
fmale
1.3. grep
grep擅长过滤内容
# 用法
grep 选项 '正则' 文件路径
# 选项
-n, --line-number 在过滤出的每一行前面加上它在文件中的相对行号
-i, --ignore-case 忽略大小写
--color 颜色
-l, --files-with-matches 如果匹配成功,则只将文件名打印出来,失败则不打印
通常-rl一起用,grep -rl 'root' /etc
-R, -r, --recursive 递归
# 示例
# 过滤'egon' 加上对应行号
[root@wyz ~]# grep -n 'egon' /sed.txt
7:egon123
8:456egon
# 忽略大小写
[root@wyz ~]# grep -i 'egon' /sed.txt
EGON
egon123
456egon
#匹配所有包含'root'文件夹
[root@wyz ~]# grep -rl 'root' /etc
2. 文件管理之:文件查找
2.1. 查看命令所属文件
[root@wyz ~]# which ip
/usr/sbin/ip
# ps: 一些命令的路径都被配置到了环境变量PATH里
echo $PATH
2.2.查找文件
3. 文件系统
3.1. 文件系统介绍
文件是操作系统提供给用户/应用程序操作硬盘的一种功能
文件系统时操作系统内核中负责组织管理硬盘的程序,文件系统提供了文件这种功能
操作系统中的文件系统负责分区文件
linux系统:文件系统—》日志文件系统
ext3
ext4
xfs (centos7默认)
btrfs
widows系统:文件系统—》日志文件系统
FAT32
NTFS
文件系统filesystem是操作系统内核中负责组织管理磁盘的程序。
在传统的磁盘与档案系统(又称为文件系统filesystem)的应用中,一个磁盘分割槽/分区只能被格式化成为一个文件系统,所以我们可以说一个filesystem就是一个partition分区。但是由于新技术的利用,例如我们常听到的LVM与软体磁盘阵列(software raid,又称软raid),这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)!所以说,目前我们在格式化时已经不再说成针对分区来格式化了,通常我们可以称呼一个可被挂载的资料为一个文件系统而不是一个分区!。
linux常见文件系统有xfs、ext4 和 btrfs 文件系统,它们都是日志文件系统(其特点是文件系统将没提交的数据变化保存到日志文件,以便在系统崩溃或者掉电时恢复数据),三者各有优势和劣势:
-
btrfs (B-tree 文件系统) 是个很新的文件系统(Oracel 在2014年8月发布第一个稳定版),它将会支持许多非常高大上的功能,比如 透明压缩( transparent compression)、可写的COW 快照(writable copy-on-write snapshots)、去重(deduplication )和加密(encryption )。因此,Ceph 建议用户在非关键应用上使用该文件系统。 更多的参考包括 (1)(2)(3)。
-
xfs 和 btrfs 相比较ext3/4而言,在高伸缩性数据存储方面具有优势。
-
Ceph 的这篇文章 明确推荐在生产环境中使用 XFS,在开发、测试、非关键应用上使用 btrfs。
-
网上有很多的文章比较这几种文件系统,包括:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRIufGh3-1625883867302)(Linux%E5%9F%BA%E7%A1%8007%20%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86(%E9%AB%98%E7%BA%A7)].assets/v2-0639661ab2b454ba692b839b0623eb6d_720w.jpg)
ps:windows文件系统格式: FAT32、NTFS
总结
操作系统---------》文件系统 文件系统 文件系统
硬盘------------》 分区1 分区2 分区3
3.2 文件系统工作原理
文件系统如何工作的呢?
须知一个文件的由两部分内容组成:
-1 文件的元信息,例如权限(rwx)、拥有者、群组、时间参数等
-2 文件的实际内容
文件系统通常会将这两部分的分别存放在不同的区块
1 文件的原信息放置到inode区块中
2 文件的实际内容则放置到data block区块中
# 强调:每个inode与block 都有自己的编号
另外,文件还有一个超级区块(superblock)会记录整个档案系统的整体信息,包括inode与block的总量、使用量、剩余量等。
补充说明:
# 硬盘的最小存取单位--->扇区
# 操作系统的最小存取单位--->block块
总结文件系统的三种区块inode、block、superblock的意义如下:
# 1.superblock:
记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
# 2.inode:
1 记录文件元信息,包括文件对应的一个或多个block块号码
2 一个文件被分配唯一一个inode
# 3 block:
1 记录文件实际内容
2 一个文件过大时可能会被分配多个block块,即一个文件可能对应多个block块的号码,这些号码都存放在该文件的inode