4-1 文件管理
文件管理
touch命令
touch:-m,-c,-a
- 文件不存在创建空文件
- 文件存在刷新时间戳
touch -a #仅改变atime和ctime
touch -m #仅改变mtime和ctime
touch -t #[[CC]YY]MMDDhhmm[.ss]指定atime和mitme的时间戳
touch -c #如果文件不存在,则不予创建
查看shell:cat /etc/shells
查看当前shell:echo $SHELL
- 创建空文件:>,>>,touch
- 某些情况使用>创建控股文件是失效的比如csh,不过可以cat /dev/null>FILE来创建
- 这种是追加的方式>>
- touch 创建空文件更加普遍
- cat /dev/null >FILE清空文件更加方便
cp命令
root用户的cp是别名,使用了cp -i命令
不加选项的cp是会改变文件属性的,比如时间属性,比如属主属组属性,用法:
cp /PATH/TO/FILE /DIR #直接复制
cp /PATH/TO/FILE1 /PATH/TO/FILE2 DEST #多个文件复制到一个文件夹
cp -t DEST /PATH/TO/FILE1... #将目的和源位置呼唤
cp -r /PATH/TO/DIR /DIR/ #将前一个目录复制到后一个目录
cp -r /PATH/OT/DIR /DIR/DIR1 #如果DIR1不存在会将DIR改名为DIR1,如果存在会进入目录在DIR1下建立DIR目录复制
源\目标 | 不存在 | 存在且为文件 | 存在且为目录 |
---|---|---|---|
一个文件 | 新建DEST,并将SRC的内容填充至DEST中 | 将SRC中的内容覆盖至DEST中 | 在DEST下新建与源文件同名的文件,并将SRC中内容填充至新文件中 |
多个文件 | 提示错误 | 提示错误 | 在DEST下新建与源文件同名的文件,并将源文件内容复制到目录中 |
目录(须使用-r选项) | 创建指定的DEST同名目录,复制SRC目录中所有文件至DEST下 | 提示错误 | 在DEST下新建与源目录同名的目录,并将SRC中内容复制至新目录中 |
-i #覆盖前提示
-n #不覆盖
-R #等于-r递归复制目录及内部所有内容
-d #--no-dereference --preserv=links 不复制原文件,只复制链接名
-p #等同--preserv=mode,ownership,timestmp
-preserv=ownership #作用与保留属性,保留属组属主
mode:权限
ownership:属组属主
timestamp:时间戳
links:链接
xattr:文件扩展属性
context:
all:所有
-f #等同--force如果文件存在且不能被打开,将文件删除后尝试复制
-a #相当于-dR --preserv=all既可以保留属性,还可以保留链接和整个目录
-u #等同--update只复制源比目标更新文件或目标不存在的文件
-b #目标存在,覆盖钱先备份,形式为FILENAME~,能治保留一份
--backup=numbered #目标存在,覆盖前先备份加数字后缀
-v #--verbose显示复制详细信息
mv命令
mv:移动文件或者更改文件名称
mv SRC DEST
mv SRC... DEST
mv -t DEST SRC...
#常用选项
-i: #交互式
-f: #强制
-b: #目标存在,覆盖先前备份
在分区内移动文件时很快,因为并没有真正复制,而是将索引更改了一下而已,删除也是一样,将索引删除
rm命令
rm:删除文件或文件夹
-i #交互式
-r #递归删除文件
-f #不询问也不报错
rm -rf命令太过危险,在重要环境中应该使用别名,将rm改为mv移动至其他文件夹中rm='mv -t /tmp/trash'
有特殊文件名的情况下使用绝对路径或者相对路径删除
删除大文件时,正在使用的文件不会释放空间,必要时可以使用>将文件清楚并删除,就会释放空间(文件描述符被占用)
rename命令
rename:批量修改文件名称
rename txt txt.bak f* #将f开头的所有txt文件改为txt.bak为后缀的名称
tree命令
tree:列出目录的梳妆结构
-d:只显示目录
-L:指定显示的层级数目
-P pattern:只显示由指定wild-card 通配符匹配到的路径
mkdir命令
mkdir:建立文件夹
-p:没有路径上的文件夹时建立文件夹
-v:显示详细信息
-m:创建目录时直接指定权限
rmdir命令
rmdir:删除空目录
-p:删除掉目标目录后如果父目录为空,删除,依次类推
-v:显示详细信息
df
df:查看磁盘使用信息
-h:使用k,M,G的方式显示大小
-t:指定查看某个文件系统的分区
-i:查看分区节点编号的使用情况
索引节点编号:inode
Inode:节点编号,为文件的唯一标识
节点编号也是文件的元数据之一
元数据:metadata
存放了节点编号,权限大小,文件位置。属组属主信息等
stat命令可以查看节点编号
ll -i也可以查看节点编号
df -i查看inode号使用情况,由于在inode号用光后也会提示设备没有空间,所以当空间还有,却提示没有剩余空间,这就是节点编号用完
图中左边是元数据信息,而其中的指针信息为标识文件存放位置的地方,假设一个数据块存放为4k大小,那么直接指针可以直接指向数据块,ext4系列中有12个直接指针,12x4k为48k大小,所以直接指针存放的文件最多为48k大小,大于48k时需要双重间接指针,一级指针指的是指针数据块,二级指针指的才是文件数据,依次类推,不同的文件系统细节不同
一个目录是目录下的文件名和inode号之间的映射
一般inode表会占用文件系统磁盘空间的1%
cp命令执行过程:分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件
rm命令执行过程:链接数递减,释放的inode号可以被重用,把数据块放在空闲列表中,删除目录项,数据实际上不会被马上删除,但当另一个文件使用数据块时将被覆盖
ln命令
ln FILE1 FILE2:创建的文件inode号是完全一样的,所以指的是同一个文件,这属于硬链接
ln命令执行过程:在目录中创建一个目录项,将名称与inode号关联
链接数:有几个硬链接,当硬链接为1时删除文件将会删除文件,否则只会删除一个目录项
ll可以查看链接数
由于硬链接是同一个文件,所以不能跨分区
且硬链接不可以链接文件夹,文件夹的硬链接数是可以增长的,多一个子文件夹就可以增加一个连接数,因为子目录的..目录就是此目录
ln -s软链接
ln -s就是建立软连接,通过一个文件指向另一个文件
ln -s f1.txt f1.txt.link #创建了f1.txt的软链接,软连接是根据文件名的,且软连接可以跨设备,也可以链接文件夹。软连接创捷的时候的相对路径有些奇特,软连接的相对路径必须相对于软连接的路径,例如:
ln -s ../f1.txt f11.txt.link
#软链接不识别inode号,只根据文件名判断,所以当原文件被删除时,软链接不会被删除,在建立与原文件名同名的文件,软连接即可回复使用
#删除时,rm -rf /data/dir11/ 会删除dir1下的内容,而rm -rf /data/dir11 会删除dir11这个软连接
dir1
dir11 -> dir1
软硬链接区别:
- 本质:
硬:本质是一个文件
软:本质不是同一个文件 - 跨分区
- inode
- 链接数
- 文件夹
- 相对路径
- 删除原文件
- 文件类型,颜色
shared命令
shared:清理数据
可以使用随机数或者1,0重新覆盖数据区域,可以应付一般的数据清理场景
file命令
file:识别文件类型
file FILE
-b: #只显示结果不显示文件名
-f: #列出文件列表中的文件名的文件类型,将文件目录放进一个文件中
-F: #输出指定分隔符,默认是:
-L: #查看对应软连接类型
magic number:文件类型的标识
readelf 查看二进制头即可看到magic
/dev/zero不能随意cp如果要复制-a保留属性