Linux文件管理及bash脚本特性

马哥教育网络班23期+第2周课程练习

Linux文件管理及bash脚本特性

概述,经过前三天的学习,想必我们已经对Linux 有了一个初步的了解,接下来这讲我们要讲述一下Linux至关重要的文件管理和bash脚本特性等知识要点

一、Linux 文件管理

1.1 原理概述

  文件管理对于Linux系统来说至关重要,因为Linux 的哲学思想就是一切皆文件,所以说在Linux 系统上全都是文件,设置设备,分区等等都是文件,所以怎样才能有效的进行文件管理也是一个课题。上次课我们讲到了文件系统这个概念,包括根文件系统,设备需要挂载到根文件系统上才能运行等等,这次课我准备深入一点的来介绍一下文件系统的内部组织方式和原理。

  我们知道,我们去电子市场买一台电脑,回到家之后我们需要安装操作系统,在安装操作系统之前需要先进行分区,把硬盘分区分好以后才能进行安装操作系统后面的步骤,其实硬盘在出厂的时候是进行了一系列分区操作的,我们把它叫做硬盘的低级格式化,就是把硬盘分为 多少磁道 多少柱面 多少扇区 我们知道磁道其实就是硬盘盘面上的一个个同心圆,扇区就是像扇子一样,在磁道上划分的一个个区域,柱面就是不同盘片上的同一个磁道 或同一个扇区所处的面,就像是水桶的表面一样,所以是一个三维的结构,大家可以想象出来最外层的磁道其实是最好寻址的,因为磁头不用往里面寻磁道,一下子就找到了,所以我们把主引导记录一般都放在0磁道0扇区就是这个道理,请看下面我为大家准备的硬盘内部刨析图:

 
图1

blob.png

图2

blob.png

图3

blob.png

  所以说我们拿到手的硬盘其实是没有分区的,是没有组织结构的,如果说我们想往硬盘中寸数据的话,是直接放到一个大的硬盘上,就像是放到一个大仓库一样,这个仓库没有货架,没有分存放区域列表,那么当这个仓库存的东西多了的时候,我们无法找到我们想要的数据,只能一个一个比对,所以说这样是不行的,需要对这个仓库进行管理,这就是文件系统的真正目的,就是在于对文件进行有效的管理,也就是我们常常说的建立索引。

  这里我们先简单了解,Linux 也需要分区之后,在分区后,把相应的分区格式化,其实就是进行建立文件系统,然后再挂载到相应的挂载点才能使用,所以我们说把一个文本文件存放到 /tmp/test/ 目录下其实并不是简单的理解成把数据创建,或者拷贝一个数据到目录下,其实在内部有这样一个结构

    blob.png

  首先 比如说这个文件就是/tmp/test/test.txt 我们需要把磁盘分成分区分成一个一个的块,这个块的大小是一定的,一般是4KB ,由于文件是有元数据和数据的,我们把文件的元数据信息放到图中所示的inode 块中,把文件的数据放到如图所示的绿色的磁盘块中,文件元数据信息磁盘块中存储了文件数据磁盘块的链接 ,所以我们通过文件的元数据可以找到文件的数据信息,至于说文件名并没有在元数据信息中,文件存在于目录的磁盘块中,因为目录也是文件,我们在查找文件的时候,先找到这个文件的路径和它的父目录,找到父目录之后才找到了文件的文件名,通过文件名找到test.txt文件对应的inode 信息,然后再通过inode 信息查找到了真正的数据信息,把这个数据做相应的操作,添加 修改 删除等等。。。

  了解了原理之后,我们下面来看下Linux 的文件管理类命令

1.2 Linux 文件管理类命令

  我把文件管理类命令分为四种,也就是我们常说的CRUD 增删改查

1.2.1 创建类命令

  1、touch 命令 
  touch 命令虽然是修改文件元数据的时间戳,但是如果 touch 命令后面没有加选项 而且这个命令所指向的文件不存在,那么默认就是创建一个touch 后面跟参数的文件 例如: 
  touch /PATH/TO/SOMEFILE 
  touch 更新文件的timestarp 
  -a 更新atime为当前时间

    blob.png

   

  touch -a /PATH/TO/SOMEFILE

     blob.png

  可以看出访问时间也就是 atime 已经修改了,-m 和-a 类似,这里就不说明了 
  -m 更新mtime为当前时间 
  -t 更新为指定时间 
  -c no-creat 如文件不存在,不创建新文件

  2、nano 命令 
  与touch 命令类似,如果文件不存在就新建

  3、vim 命令 
  与touch nano 命令类似

  4、cp 命令 
  文件或目录复制类命令,用法如下: 
  (1)单源复制 cp [OPTION]… [-T] SOURCE DEST

   blob.png

 注意: 如果DEST不存在 :则事先创建此文件,并复制源文件的数据流至DEST中 
  如果DEST存在: 
  如果DEST是一个非目录文件:则覆盖目标文件

  blob.png

  如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流至目标文件

  blob.png

  

  (2)多源复制 cp [OPTION]… SOURCE… DIRECTORY 
     如果DEST不存在:错误:

  blob.png

     如果DEST存在: 
     如果DEST是非目录文件 ;错误 ,错误信息同上

  如果DEST是目录文件:分别复制每一个文件至目标目录中,并保持源名;

  blob.png

  复制命令的常用选项 
  -i 交互式复制,及覆盖之前提醒用户确认; 
  -f 强制覆盖目标文件 
  -r,R 递归复制目录;(如果源是目录),而目标不存在,那么就创建一个目标目录,把源目录中的内容递归复制到目标目录中 
  如果目标存在,那么就直接把源目录中的内容递归复制到目标目录中

  blob.png

  -d 复制符号链接文件本身,而非其指向的源文件;

  5、mv命令 
  mv 命令 move 剪切 
  注意:当源文件和目标文件在同一个目录下,就是重命名文件,如果不在同一个目录下,就是移动 
  常用选项 
  -i 交互式 
  -f force 非交互式,强制执行 
  此命令的用法和cp 命令几乎一样

  6、 install命令: 
  install – copy files and set attributes

  单源复制: 
  install [OPTION]… [-T] SOURCE DEST 
  多源复制: 
  install [OPTION]… SOURCE… DIRECTORY 
  install [OPTION]… -t DIRECTORY SOURCE… 
  创建目录: 
  install [OPTION]… -d DIRECTORY…

  常用选项: 
  -m, –mode=MODE:设定目标文件权限,默认为755; 
  -o, –owner=OWNER:设定目标文件属主; 
  -g, –group=GROUP:设定目标文件属组;

  1.2.2 删除类命令

  rm 命令

  rm命令 remove 删除文件 
  郑重提醒真正生产环境中,不要删除,把他mv 走 ,过几天确认不用再删除 
  常用选项: 
  -i interactive 
  -f force 
  -r recursive 
  删除目录 rm -rf /PATH/TO/DIR 
  rm -rf /* 自杀 危险操作 
  注意 :所有不用的文件建议不要直接删除,而是移动至某个专用目录(模拟回收站)

二 、bash 工作特性

  bash工作特性主要有以下几点,我们一一说明

1、 命令行展开

  ~ 和 {} 
  ~ 我们之前已经使用过,就是管理员可以通过 cd ~ USERNAME到用户的家目录 例如:

     blob.png

   {} 命令行展开机制 ,请看下面的例题: 
   (1) 创建/tmp目录下的a_c , a_d,b_c,b_d

    blob.png   

   (2) 创建/tmp/mylinux 目录下的:

    blob.png

    结果如下:

    blob.png

2、命令别名

  alias 和 unalias

  我们可以使用alias 来创建命令别名 例如:

   blob.png

  也可以使用unalias 来取消别名

  blob.png

3、命令历史

  history 之前讲过,主要就是通过history 查看命令历史,包括可以用 
  !STRING 的形式调用之前执行的命令 
  !! 执行上一条命令

4、文件名通配

  文件名通配之前精讲过,这里只是总结,只要记住那些通配符即可

5、快捷键

  bash 命令的快捷键 Ctrl + a Ctrl +e 等等

6、命令补全机制
7、路径补全机制

  在用户所制定的起始位置进行查找

8、命令哈希

  缓存此前命令的查找结果 缓存的结果就叫做命令哈希 hash 是内嵌命令 不是外部命令 
外部命令才有命令哈希,因为内部命令是shell提供的,所以不存在命令哈希一说,命令哈希的意义就是把之前执行的外部命令缓存到哈希表中,以后如果再执行这个外部命令的时候,就不用去 PATH 环境变量下从左到右依次查找这个命令所在外置去执行,而是直接从哈希表中找到相应的路径直接执行即可。 
  这种方式类似于以空间换时间一说,节省了查找的时间,提高了运行命令的执行效率。

    blob.png

9、命令执行状态返回值

  我们需要了解,每一次输入命令其实后,都会对执行的状态结果做保留,系统会把执行的状态结果保存在一个变量中,我们称这个变量是特殊变量,用$?来表示 例如:

 blob.png

  0 表示 成功 1-255表示各种各样的失败,例如:

  blob.png

三、练习及相关名词解释

3.1 文件元数据信息

  上面已经讲过,所谓文件的元数据信息就是指文件的访问时间,修改时间,改变时间,还有文件的大小,文件的属主 属组等等信息,使用stat命令查看例如:

   blob.png

  如果要修改文件的时间戳信息,需要用touch命令来修改

3.2 命令中引用另一个命令的执行结果

  在命令中,想引用另一个命令的执行结果,需要使用$() 或者 “ (反引号)来使用,例如:

  blob.png

3.3 相关的练习

  1、 显示/var 目录下所有以l开头 以一个小写字母结尾 且中间至少出现一位数字(可以有其它字符)的文件或目录

    blob.png

  2、显示/etc目录下 以任意一个数字开头 且以非数字结尾的文件或目录

    blob.png

  3、显示/etc目录下 以非字母开头 后面跟了一个字母以及其他任意长度任意字符的文件或目录

    blob.png

  4、在/tmp 目录下创建以tfile 开头 后跟当前日期和时间的文件 文件名形如 tfile-2016-05-27-09-32-22

    blob.png

  5、复制/etc 目录下所有以p 开头 以非数字结尾的文件或目录到/tmp/mytest1目录中

    blob.png

  6、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中

    blob.png

  7、复制/etc目录下所有以l或m或n开头,以.conf 几位的文件至/tmp/mytest3目录中

    blob.png

以上就是第二周的博客作业

原创文章,作者:luobo3692003,如若转载,请注明出处:http://www.178linux.com/47285

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 10:28

    看的出来,在很用心的总结,如果在每个选项下面再写一条命令来解释一下的话会更好,加油,另外可以看一下别的同学的排版