20170719 文件管理

前言:

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

一、linux文件系统结构

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


  • 简要说明如下:
    • /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     <!--输出路径的基名,此命令结果为"rc1.d"-->
dirname /etc/rc.d/rc1.d      <!--输出路径的目录名,此命令结果为"/etc/rc.d"-->

二、pwd 显示当前工作目录

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

三、cd 更改目录

  • 语法:cd 路径
cd ..      <!--切换至当前目录的父目录-->
cd -      <!--切换至上一次切换的目录,只能切换一次-->
cd ~     <!--切换至当前用户的home目录-->
cd -P 路径      <!--与pwd命令的-P选项类似,切换至真实物理路径--!>
  • cd -功能实现:OLDPWD变量储存上一次切换至的目录,cd -时直接读取$OLDPWD值即可

四、ls 列出目录内容

  • 语法:ls [options] [files_or_dirs]
ls -a      <!--包含隐藏文件-->
ls -l       <!--显示额外信息-->
ls -lh     <!--文件大小使用K,M,G单位更方便阅读-->
ls -R     <!--递归显示目录下一层内容-->
ls -r       <!--逆序显示-->
ls -i       <!--符号链接信息-->
ls -d      <!--只显示目录信息-->
ls -1     <!--分行显示-->
ls –S    <!--按从大到小排序-->
ls –t      <!--按mtime排序-->
ls --time=atime <!--按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          <!--用户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执行结果如下

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

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

(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     <!--仅改变atime和ctime-->
-m    <!--仅改变mtime和ctime-->
-t  [[CC]YY]MMDDhhmm[.ss]     <!--指定atime和mtime的时间戳-->
-c     <!--如果文件不存在,则不予创建-->

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

八、cp 复制文件和目录

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


  • 选项用法:
-i     <!--覆盖前提示-->
-n     <!--不覆盖-->
-r, -R     <!--递归复制目录及内部的所有内容-->
-a     <!--归档,相当于-dR --preserv=all-->
-d     <!--不复制原文件,只复制链接名-->
--preserv[=ATTR_LIST]     <!--保留属性——mode:权限,ownership:属主属组,timestamp:时间戳,links:链接,xattr,context,all-->
-P    <!--不复制软链接指向的文件,指复制软链接文件本身-->
-p     <!--preserv=mode,ownership,timestamp,保留权限、所有者、时间戳信息-->
-v     <!--显示操作过程-->
-f      <!--强制,如果已经存在的目标文件不能成功打开,删除它并重复cp操作-->
  • 实验


在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文件;

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

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

十一、目录相关操作

  • 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号。

十三、ln 硬链接与软链接

  • 硬链接新建一个文件名与一个已经存在的inode号映射,实际上是为一个文件另起一个名字。
  • 语法: ln filename linkname
    *ln命令只能生成文件的硬链接,目录的索引节点一定大于等于2,包含目录本身和目录下的.文件,增加目录的索引节点只能通过新建目录实现。
  • 软链接储存指向另一个文件的路径。
  • 语法: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出现了错误



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

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

十四、file 查看文件类型

  • file命令通过读取文件前部内容(Magic Number)确定文件类型。
  • hexdump -C以十六进制查看可执行文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容