4-1 文件管理

文件管理

touch命令

touch:-m,-c,-a

  1. 文件不存在创建空文件
  2. 文件存在刷新时间戳
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号用光后也会提示设备没有空间,所以当空间还有,却提示没有剩余空间,这就是节点编号用完

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

软硬链接区别:

  1. 本质:
    硬:本质是一个文件
    软:本质不是同一个文件
  2. 跨分区
  3. inode
  4. 链接数
  5. 文件夹
  6. 相对路径
  7. 删除原文件
  8. 文件类型,颜色

    shared命令

    shared:清理数据
    可以使用随机数或者1,0重新覆盖数据区域,可以应付一般的数据清理场景

    file命令

    file:识别文件类型
file FILE
-b:                #只显示结果不显示文件名
-f:                #列出文件列表中的文件名的文件类型,将文件目录放进一个文件中
-F:                #输出指定分隔符,默认是:
-L:                #查看对应软连接类型

magic number:文件类型的标识
readelf 查看二进制头即可看到magic

/dev/zero不能随意cp如果要复制-a保留属性

猜你喜欢

转载自www.cnblogs.com/kjalbert/p/11588024.html
4-1