文件管理和IO重定向
1.文件系统的目录结构
文件和目录被组织成一个单根倒置树结构
文件系统从坟墓下开始,用“/”表示
以.开头的文件为隐藏文件
路径分隔的/
蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引 号来引用
每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容
2Linux下的文件类型
– 普通文件
d 目录文件directory
b 块设备block
c 字符设备character
l 符号链接文件link
p 管道文件pipe
s 套接字文件socket
3.绝对路径相对路径
绝对路径
以正斜杠/ 即根目录开始 完整的文件的位置路径 可用于任何想指定一个文件名的时候
相对路径名
不以斜线开始 一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置 可以作为一个简短的形式指定一个文件名 ./表示当前目录../表示上级目录
4基础命令cd, pwd,ls, stat, file, touch,cp,mv,rm
cd:改变目录 cd切换至当前用户主目录 cd- 切换至上一个工作目录
pwd:当前目录路径
ls:命令可以列出当前目录的内容或指定目录 -a 包含隐藏文件 -l显示额外信息 -r 目录递归
stat:显示文件相关信息:metadata(元数据), data(数据)
一个是存放文件的元数据、一个是真正存放文件数据的本身
file:文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用
touch:创建文件,刷新文件时间
cp:可以实现文件或目录的复制 -r 递归复制目录及所有内容-a保留文件属性-v显示备份过程
mv:可以实现文件或目录的移动和改名,原理其实是限制性了cp 拷贝到了目标路径、然后再执行 rm 删除源文件
rm:此命令非常危险建议用mv代替rm,-r递归,-f强制删除
alias rm=\'DIR=/data/backup`date +%F%T`;mkdir $DIR;mv -t $DIR\'
tr:转化删除字符-s把连续重复的字符以单独一个字符表示,即去重-d删除所有属于第一字符集的字符-c取字符集的补集
5.文件元数据和节点表结构
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数 据是存放在node(index node)表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文 件的元数据信息
inode number 节点号
文件类型
权限
uid
gid
链接数
该文件的大小和不同的时间戳
第二部分
指向磁盘上文件的数据块指针
有关文件的其他数据
cp:分配一个空闲的inode号,在inode表中生成新条目 在目录中创建一个目录项,将名称与inode编号关联 拷贝数据生成新的文件
rm:链接数递减,从而释放的inode号可以被重用 把数据块放在空闲列表中 删除目录项 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv:如果mv命令的目标和源在相同的文件系统,作为mv 命令 用新的文件名创建对应新的目录项 删除旧目录条目对应的旧的文件名 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动! 如果目标和源在一个不同的文件系统, mv相当于先将旧文件拷贝CP过到新文件路径、再将旧文件 删除rm
6.通配符
* 匹配零个或多个字符,但不匹配 “.” 开头的文件,即隐藏文件
? 匹配任何单个字符
[0-9] 匹配数字范围,表示为0到9的任意一个
[a-z] a-z,A-Y,不包含字母z
[A-Z] 表示A,b,B…..z,Z。不包含字母a
[a-Z] 匹配任意字母
[:alnum:] 字母和数字
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
8. 硬链接和软链接区别总结
1. 本质:
硬链接:本质是同一个文件
软链接:本质不是同一个文
2. 跨设备
硬链接:不支持
软链接:支持
3. inode
硬链接:相同
软链接:不同
4. 链接数
硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
软链接:创建或删除,链接数不会变化
5. 文件夹
硬链接:不支持
软链接:支持
6. 相对路径
硬链接:原始文件相对路径是相对于当前工作目录
软链接:原始文件的相对路径是相对于链接文件的相对路径
7. 删除源文件
硬链接:只是链接数减一,但链接文件的访问不受影响
软链接:链接文件将无法访问
8.
文件类型
硬链接:和源文件相同
软链接:链接文件,和源文件无关
9 I/O重定向和管道
重定向
1> 或 > 把重定标准输出向到文件
2> 把错误输出重定向到文件
&> 把所有输出重定向到文件
注意>会覆盖文件
>> 可以在原有内容基础上,追加内容
[root@centos8 ~]#ls /data/ /xxx > stdout.log 2> stderr.log
标准输出到stdout文件中,错误输出到stderr文件中
管道
格式 命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
所有命令会在当前shell进程的子shell进程中执行
组合多种工具的功能
面试题
1.提示空间满 No space left on device,但 df 可以看到空间很多,为什么
节点标号使用殆尽,删除多余空文件, 即可
2.提示空间快满,使用rm 删除了很大的无用文件后,df 仍然看到空间不足,为什么?如何 解决?
有大文件正在被使用,cat / dev/null >大文件 然后删除文件 ,即可