20170719 文件管理

前言:

  • linux文件系统是一个倒置树结构,从"/"开始,文件命名区分大小写,遵循FHS(Filesystem Hierarchy Standard)标准确保各个发行版拥有统一的目录结构。
  • 执行ls --color=auto,不同类型文件的颜色不同。普通文件为灰色,目录文件为蓝色,可执行文件为绿色,压缩文件为红色,软链接文件为浅蓝色。

一、linux文件系统结构

  • linux文件系统结构如下图所示:


    20170719 文件管理_第1张图片
  • 简要说明如下:
    • /boot 系统启动文件
    • /bin 普通用户使用的二进制可执行文件
    • /sbin 系统管理员使用的二进制可执行文件
    • /lib 系统启动时需要的库文件和内核模块文件
    • /lib64 与64位系统有关的库文件
    • /etc 配置文件
    • /usr 非常重要的目录,储存可共享并只读的数据
    • /root 系统管理员的家目录
    • /home/user 普通用户的家目录
    • /var 经常变化的数据
    • /media 移动设备挂载点
    • /mnt 临时挂载点
    • /dev 设备文件,包含块设备和字符设备
    • /tmp 临时文件
    • /proc 内核信息,虚拟文件系统
    • /sys 硬件信息,虚拟文件系统
  • 在CentOS 7系统中,/lib, /lib64, /bin, /sbin四个目录已经变作软链接,实质上分别与/usr/lib, /usr/lib64, /usr/bin, /usr/sbin四个目录进行了合并,这也从另一个角度凸显/usr目录的重要性。
  • 基名:路径最底层的文件或目录
  • 目录名:路径除基名的剩余部分
basename /etc/rc.d/rc1.d     
dirname /etc/rc.d/rc1.d      

二、pwd 显示当前工作目录

pwd     
pwd -P     
  • 如下图,进入/bin目录,如果直接pwd的话,显示结果即为/bin;如果命令为pwd -P,返回结果为链接指向的真实物理路径/usr/bin
20170719 文件管理_第2张图片
  • 绝对路径:从"/"开始描述文件位置路径
  • 相对路径:相对当前工作目录或者某个参考点开始描述文件位置路径

三、cd 更改目录

  • 语法:cd 路径
cd ..      
cd -      
cd ~     
cd -P 路径      
20170719 文件管理_第3张图片
  • cd -功能实现:OLDPWD变量储存上一次切换至的目录,cd -时直接读取$OLDPWD值即可

四、ls 列出目录内容

  • 语法:ls [options] [files_or_dirs]
ls -a      
ls -l       
ls -lh     
ls -R     
ls -r       
ls -i       
ls -d      
ls -1     
ls –S    
ls –t      
ls --time=atime 
  • 经常使用ll命令,它是ls -l --color=="auto"的别名,可以方便查询目录内容的扩展信息
  • 文件类型:ll /bin/bash命令结果如下

第1位显示"-"为普通文件。还有一些如下:"d"目录文件,"b"块设备文件,"c"字符设备文件,"l"符号链接文件,"p"管道文件,"s"套接字文件。

五、stat 查看文件状态

  • 使用stat命令主要显示文件的元数据(metadata)
  • 文件的三个时间戳信息:
    • atime(acess time) 访问时间,文件被读取视作访问;
    • mtime(modify time) 修改时间 ,文件数据被修改视作修改;
    • ctime(change time) 改变时间,文件元数据被修改视作改变。
  • 由于文件读取属于经常性操作,频繁修改atime会降低系统性能,也没有实际意义。所以实际上atime每24h更新一次,或当ctime比atime更新时主动进行更新。

六、glob 文件通配符

  • 通配符的使用可以加快操作速度,提高工作效率。
 *              
?              
~              
~mage          
~+             
~-             
[0-9]          
[a-z]          
[A-Z]          
[wang]         
[^wang]        
  • 注意:
  1. [0-9],[a-z],[A-Z]三个通配符里面的数字或字母不能倒叙写成[9-0],[a-z],[A-Z],会报错;

  2. [a-z]指{a,A,b,B...y,Y,z}中的一个字母,[A-Z]指{A,b,B...Y,z,Z}中的一个字母,如果想要表示所有字母中的一个字母,建议使用下面提到的预定义字符类。

  • 实验:

(1) 依次执行touch {a..z}.txt touch {A..Z}.txt touch {0..10}命令,用ls执行结果如下

20170719 文件管理_第4张图片

(2)执行命令ls [z-a].txt,系统报错

(3)执行命令ls [a-z].txtls [A-Z].txt,发现结果与预期不同

20170719 文件管理_第5张图片

(4)想要确保把所有“1位小写字母.txt”的文件显示出来,最好用预定义字符类[:lower:],执行命令ls [[:lower:]].txt,结果如下

  • 预定义的字符类:man 7 glob
[:digit:]     任意数字,相当于0-9
[:lower:]     任意小写字母
[:upper:]     任意大写字母
[:alpha:]     任意大小写字母
[:alnum:]     任意数字或字母

注意:
实际使用时注意还要再加一层括号,例如实现如下要求:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
ls /var/l*[[:digit:]]*[[:lower:]]

七、touch 创建空文件、刷新时间戳

  • 若文件名不存在,则创建空文件;若文件名已存在,则刷新此文件的时间戳。
  • 用法:
touch [OPTION]... FILE...
-a     
-m    
-t  [[CC]YY]MMDDhhmm[.ss]     
-c     

下图:使用-t选项修改atime和mtime

20170719 文件管理_第6张图片

八、cp 复制文件和目录

  • 语法: cp [OPTION]... SOURCE DEST
  • 复制情况比较复杂,具体如下表


    20170719 文件管理_第7张图片
  • 选项用法:
-i     
-n     
-r, -R     
-a     
-d     
--preserv[=ATTR_LIST]     
-P    
-p     
-v     
-f      
  • 实验


    20170719 文件管理_第8张图片

在root账户下,登录hellopeiyang的家目录,建立aaa.txt的空文件,此时可以看到文件的所有者为root。切换为普通账户hellopeiyang,此时执行cp /etc/issue aaa.txt,由于aaa.txt文件所有者为root,无法执行覆盖操作。此时执行cp -f /etc/issue aaa.txt,cp发现无法打开覆盖文件,遂删除之,并重新执行cp命令,可以看到root账户创建的文件被成功覆盖

九、mv 移动和重命名文件

  • 语法:mv [OPTION]... [-T] SOURCE DEST
  • 当SOURCE与DEST在同一个目录下时,表明将文件名从SOURCE改为DEST
  • 批量修改文件名 rename
    rename '.txt' '.txt.bak' *.txt

十、rm 删除——危险命令

  • 语法:rm[OPTION]... FILE...
  • 选项:
    -i 交互式提示
    -r 递归删除
    -f 强制删除不提示
  • 实验:磁盘占用率很高时的删除文件方法
    (1)首先通过df -h命令查看当前分区磁盘利用率,我们计划用dd命令对/boot分区写入一个800M大小的文件test,形成/boot分区磁盘空间紧张的局面;
    (2)文件生成后再次df -h发现磁盘利用率已经达到96%之高,新开一个终端,在新会话中用vim打开test文件;
    20170719 文件管理_第9张图片

    (3)此时使用rm -rf /boot/test命令删除,使用ls命令查询/boot下面已经没有test文件了,但是df -h发现磁盘占用率依旧没有变化,此时此景已经束手无措;
    20170719 文件管理_第10张图片

    (4)将另一个终端的vim退出,再次df -h发现磁盘占用率终于降低了。证明当有进程使用文件时,即便文件已经删除,空间需要在进程结束后才能释放。
    (5)重复构建磁盘高占用状态,此次使用> /boot/test,用df -h查看占用率情况,发现已经降低到正常水平,此时安心使用rm -rf /boot/test删除文件
    20170719 文件管理_第11张图片

十一、目录相关操作

  • tree 显示目录树
    -d 只显示目录
    -L level 指定显示的层级数目
  • mkdir 创建目录
    -p 一次性创建多层目录
    -v 显示详细信息
  • rmdir 删除空目录
    -p: 递归删除父空目录
    -v: 显示详细信息
    删除有内容的目录时不能用rmdir,使用rm -r递归删除目录和文件

十二、索引节点(index node)

  • 一个索引节点包含一个文件的所有元数据信息,所有索引节点构建的索引节点表涵盖分区内所有文件的元数据信息。
  • 文件名引用一个索引节点号,通过查询索引节点表查询到文件数据存放位置。
  • 目录包含目录下文件索引节点与文件名称的映射信息,所以目录下新增、删除文件都会对目录进行修改。
  • cp命令分配一个空闲索引节点,将新建文件与该索引节点进行映射
  • rm命令删除文件与其索引节点的映射从而释放索引节点,但并不立即删除数据。
  • mv命令:
    • 功能为移动时,相当于cprm操作
    • 功能为重命名时,删除旧文件名与索引节点的映射,建立新文件名与索引节点的映射,期间索引节点没有变化(除时间戳)。
  • 分区挂载点inode编码规则:/proc /sys 虚拟分区为1,其他分区挂载点在CentOS 6下从2开始,在CentOS 7下从64开始。如下图为CentOS 7下分区挂载点inode号。
20170719 文件管理_第12张图片

十三、ln 硬链接与软链接

  • 硬链接新建一个文件名与一个已经存在的inode号映射,实际上是为一个文件另起一个名字。
  • 语法: ln filename linkname
    *ln命令只能生成文件的硬链接,目录的索引节点一定大于等于2,包含目录本身和目录下的.文件,增加目录的索引节点只能通过新建目录实现。
20170719 文件管理_第13张图片
  • 软链接储存指向另一个文件的路径。
  • 语法:ln -s filename linkname,注意filename的路径必须以linkname为依据填写相对路径。
  • 实验:
    (1)切换至/app目录,在当前目录下建立空文件aaa
    (2)在当前目录建立文件aaa的硬链接bbb
    (3)可以看到aaa和bbb两个文件完全相同
    (4)在当前目录下建立子目录dir1
    (5)在/app/dir1中建立软链接文件ccc,指向/app/aaa。aaa文件的路径是以当前目录为参考点相对路径
    (6)发现软链接文件ccc出现了错误


    20170719 文件管理_第14张图片

    (7)在/app/dir1中建立软链接文件ddd,指向/app/aaa。aaa文件的路径是以ddd文件的路径作为参考点的相对路径
    (8)发现软链接文件ddd这次正常

20170719 文件管理_第15张图片
  • 硬链接与软链接的区别:
    • 本质区别:硬链接是给一个文件取多个文件名,而软链接与原文件是2个不同的文件;
    • 索引节点:给文件建立硬链接inode增加1,给文件建立软链接inode无变化;
    • 是否跨分区:inode分区内唯一,无法跨分区建立硬链接,软链接无此要求;
    • 修改:删除一个硬链接文件对文件本身无影响(只要不全部删除),删除软链接指向文件导致软链接文件出错。

十四、file 查看文件类型

  • file命令通过读取文件前部内容(Magic Number)确定文件类型。
  • hexdump -C以十六进制查看可执行文件

你可能感兴趣的:(20170719 文件管理)