本章内容
◆ 文件系统结构元素
◆ 创建和查看文件
◆ 复制、转移和删除文件
◆ 软和硬链接
文件系统与目录结构
![](https://img.haomeiwen.com/i20946677/9cf8dc7592be6442.png)
lsblk #查看硬盘
虚拟机添加新硬盘不重启
echo '- - -' > /sys/class/scsi_host/host{0,1,2}/scan
文件类型
- 普通文件
b 块文件
c 字符文件
d 目录
s 套接字
p 管道文件
l 软连接
nano /etc/DIR_COLORS #文件颜色
touch -- -h #创建-h文件
pwd #显示当前目录
-P 显示真实物理路径
-L 显示链接路径(默认)
basename /etc/sysconfig/network
结果:network
dirname /etc/sysconfig/network
结果:/etc/sysconfig
stat file #查看文件3个时间
ls -l --time=atime #查看文件读时间(访问也会改变)
ls -l --time=ctime #查看文件属性改变时间
ls -l --time=mtime #查看文件修改时间
vim /etc/selinux/config
SELINUX=disabled #禁用selinux
chkconfig iptables off #centos6禁用防火墙启动项
systemctl disable firewalld #centos7禁用防火墙启动项
通配符
* 匹配零个或多个字符
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+ 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
文件通配符
预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
ls -d .* #显示隐藏文件
ls */ #显示所有非隐藏文件夹
练习
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
ls /var/l*[0-9]*[[:lower:]]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
ls /etc/[0-9]*[^0-9]
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
ls /etc/[^[:alpha:]][[:alpha:]]*
4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
ls /etc/rc[0-6]*
5、显示/etc目录下,所有以.d结尾的文件或目录
ls /etc/*.d
6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
ls /etc/[mnrp]*.conf
7、只显示/root下的隐藏文件和目录
ls -d /root/.*
8、只显示/etc下的非隐藏目录
ls -d /etc/
创建空文件和刷新时间
touch命令
格式:touch [OPTION]... FILE...
-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间
-c 如果文件不存在,则不予创建
复制文件和目录cp
cp SRC... DEST
SRC... 多个文件
DEST 必须存在,且为目录,其它情形均会出错
cp SRC DEST
SRC是目录:此时使用选项:-r
cp常用选项
-i 覆盖前提示
-n 不覆盖,注意两者顺序
-r, -R 递归复制目录及内部的所有内容
-a 归档,相当于-dR --preserv=all
-d --no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-p 等同--preserv=mode,ownership,timestamp
-v --verbose
-f --force
-u --update 只复制源比目标更新文件或目标不存在的文件
-b 目标存在,覆盖前先备份,形式为 filename~
--backup=numbered 目标存在,覆盖前先备份加数字后缀
练习
1、每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
cp -av /etc /data/backup`date +%F`
2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
cp -rp /root /data/rootdir
移动和重命名文件
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i 交互式
-f 强制
-b 目标存在,覆盖前先备份
删除
rm [OPTION]... FILE...
常用选项:
-i 交互式
-f 强制删除
-r 递归
--no-preserve-root 删除/
示例:
rm -rf /*
目录操作
tree 显示目录树
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
mkdir 创建目录
-p: 存在于不报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
rmdir 删除空目录
-p: 递归删除父空目录
-v: 显示详细信息
rm -r 递归删除目录树
删除大文件快速方法
> /tmp/bigfile
快速批量改文件名
rename .log .log.bak *
rename .bak "" *
练习
(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
mkdir -p /testdir/dir1/{x,y}/{a,b}
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
mkdir -p /testdir/dir2/{x/{a,b},y}
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
mkdir -p /testdir/dir{3,4,5/{6,7}}
索引节点
inode(index node)表中包含文件系统所有文件列表
一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:
文件类型,权限,UID,GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
inode表结构
![](https://img.haomeiwen.com/i20946677/718101c19a163641.png)
inode表结构
![](https://img.haomeiwen.com/i20946677/2b7f4f9f6f8151b4.png)
目录
文件引用一个是 inode号
人是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
inode表
![](https://img.haomeiwen.com/i20946677/f2c1ff6bf788401c.png)
cp和inode
在 CP的 命令:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
rm和inode
rm 命令:
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
如果目标和源在一个不同的文件系统, mv相当于cp和rm
硬链接
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
语法:
ln filename [linkname ]
符号(或软)链接
一个符号链接指向另一个文件
ls - l的 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
语法:
ln -s filename ... [linkname]
相对路径软连接
/data/f1
ln -s ../f1 d1/f1.link
硬链接和软件连接区别
1、本质:硬链接:同一个文件,多个名字,软连接不同文件
2、跨分区,硬不支持
3、目录,硬不支持
4、相互关系,软:相互依赖关系
5、inode号,硬相同,软不同
6、链接数
7、路径:软:原始文件路径不同
8、文件类型
9、命令格式不同:硬ln 软ln -s
确定文件内容
文件可以包含多种类型的数据
检查文件的类型,然后确定适当的打开命令或应用程序使用
file [options] <filename>...
常用选项:
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”:” 分隔符
-L 查看对应软链接对应文件的文件类型
--help 显示命令在线帮助
网友评论