linux学习12 bash的常见特性及文本查看命令实战

一、回顾

  1、FHS,命令及bash命令历史

    a、FHS:

      /bin,/sbin,/lib,/lib64,/etc

      /home,/root

      /boot

      /media,/mnt

      /proc,/sys

      /tmp

      /srv

      /opt

      /dev

      /usr

        bin,sbin,lib,lib64,share,local,include,...

      /var

        cache,lib,log,

  2、命令:which,whereis,who,w,alias,unalias

  3、命令历史:history

  4、文件类型:-,d,b,c,l,p,s

二、bash的基础特性

  1、命令补全:

    a、shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令

    b、命令查找机制:

      查找内部命令

      根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名

    c、给定的打头字符串如果能唯一的标识某命令程序文件,则直接补全,如果不能唯一标识某命令程序文件,再敲击一次tab键会给出列表

  2、路径补全

    a、在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件

        tag:如果能唯一标识,则直接补全;否则,再一次tab,给出列表。

三、目录管理类的命令

  1、mkdir(make directory):mkdir [OPTION]... DIRECTORY...,创建目录

    a、注意:路径基名方为命令的作用对象,基名之前的路径必须存在

    b、mkdir -pv :自动按需创建父目录并显示详细的过程信息

[root@localhost ~]# mkdir -pv /tmp/m/n/p
mkdir: created directory ‘/tmp/m’
mkdir: created directory ‘/tmp/m/n’
mkdir: created directory ‘/tmp/m/n/p’

    c、-m MODE:直接给定权限,否则为默认权限

  2、rmdir(remove empty directory):仅用于删除空目录。

    a、rmdir -p :删除某目录后,如果其父目录为空,则一并删除

    b、rmdir -v:显示过程

四、bash的基础特性之:命令行展开

  1、思考如下问题

    a、问题1:如何创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b ?

    b、问题2:如何创建a_c,a_d,b_c,b_d

    c、创建如下目录结构

      /tmp/mysysroot/

        bin

        sbin

        etc

          sysconfig

            network-scripts

        usr

          bin

          sbin

          local

            bin

            sbin

            etc

            lib

          lib

          lib64

        var

          cache

          log

          run

  2、命令行展开

    a、~:自动展开为用户的家目录,或指定的用户的家目录

    b、{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径

      例如:/tmp/{a,b},相当于/tmp/a,/tmp/b

      问题一答案:

[root@localhost tmp]# mkdir -pv /tmp/x/{y1/{a,b},y2}
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y1’
mkdir: created directory ‘/tmp/x/y1/a’
mkdir: created directory ‘/tmp/x/y1/b’
mkdir: created directory ‘/tmp/x/y2’
[root@localhost tmp]# tree /tmp/x/
/tmp/x/
├── y1
│   ├── a
│   └── b
└── y2

      问题二答案:

[root@localhost tmp]# mkdir -pv {a,b}_{c,d}
mkdir: created directory ‘a_c’
mkdir: created directory ‘a_d’
mkdir: created directory ‘b_c’
mkdir: created directory ‘b_d’

      问题三答案:

 

   3、tree命令:tree [options] [directory]

    a、tree -L level:指定要显示的层级

五、bash的基础特性:命令的执行状态结果

  1、命令执行的状态结果:

    a、bash通过状态返回值来输出此结果:

      成功:0

      失败:1-255

    b、命令执行完成之后,其状态返回值保存于bash的特殊变量$?中

  2、命令正常执行时,有的还会有命令返回值:

    根据命令及其功能不同,结果各不相同

  3、引用命令的执行结果

    $(COMMAND)

    `COMMAND`:`是esc键下的符号

六、bash的基础特性:引用

  1、强引用:''

  2、弱引用:“”

  3、命令引用:`` && $(COMMAND)

七、bash基础特性:快捷键

  1、Ctrl + a:跳转至命令行首部

  2、Ctrl + e:跳转至命令行行尾

  3、Ctrl + u:删除行首至光标所在处之间的所有字符

  4、Ctrl + k:删除光标所在处至行尾的所有字符

  5、Ctrl + l:相当于clear命令

八、文件查看类命令:cat,tac,head,tail,more,less

  1、分屏查看命令:more,less

    a、more

      more FILE,主要特点在于翻屏至文件尾部后自动退出。

    b、less 

      less FILE

  2、head命令

    a、查看文件的前n行,默认前n行

    b、查看前5行。-n  5  && -5

[root@localhost tmp]# head -n 5 /etc/init.d/functions
# -*-Shell-script-*-
#
# functions This file contains functions to be used by most or all
#       shell scripts in the /etc/init.d directory.
#
[root@localhost tmp]# head -5 /etc/init.d/functions
# -*-Shell-script-*-
#
# functions This file contains functions to be used by most or all
#       shell scripts in the /etc/init.d directory.
#

  3、tail命令

    a、查看文件的后n行,默认为后10行

    b、查看后5行。-n  5  && -5

    c、-f :查看文件尾部内容结束后不退出,跟随显示新增的行

  4、stat命令,显示文件或文件系统的状态

    a、stat FILE

[root@localhost tmp]# stat /tmp/functions 
  File: ‘/tmp/functions’ #文件名
  Size: 18104 #大小        Blocks: 40 #占据了多少个块        IO Block: 4096 #io块大小是多少,即有30个块,每个块大小是这么大   regular file
Device: fd00h/64768d #所在设备的设备号   Inode: 33557922 #索引节点号   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-15 19:46:32.178963513 +0800 #最近一次访问时间
Modify: 2019-12-15 19:46:32.178963513 +0800 #最近一次更改时间
Change: 2019-12-15 19:46:32.178963513 +0800 #最近一次改动时间
 Birth: - #普通文件

    b、时间戳

      1)、Access: 2019-12-15 19:46:32.178963513 +0800 #最近一次访问时间 

        对Linux文件来说我们分为两种数据

          元数据:metadata

          数据:data

          比如你拿到一本书,会有索引,他虽然也是书的一部门不过他不是真正的数据,他相当于是描述内容属性的,这种就相当于元数据,而书的真正内容才是数据。我们cat命令查看的相当于是数据,而我们stat查看的相当于是元数据。此数据中有三个时间戳,如果我们此时用cat 查看了这个文件的内容那么时间戳中的Access时间就会变成查看时的时间

      2)、Modify: 2019-12-15 19:46:32.178963513 +0800 #最近一次更改时间

        打开文件新增一行即是更改,更改是指数据改变,即内容发生改变。内容发生改变元数据也会发生改变,即change时间会发生改变。
      3)、Change: 2019-12-15 19:46:32.178963513 +0800 #最近一次改动时间

        改动是指元数据改变。如果文件名称发生改变那么其时间就会发生改变,不过更改时间不会发生改变。

  5、touch命令。

    a、修改文件的时间戳,他可以修改当前文件的时间戳,将时间戳修改为最近的时间

[root@localhost tmp]# stat functions 
  File: ‘functions’
  Size: 18110         Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33557922    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-15 20:14:47.370957047 +0800
Modify: 2019-12-15 20:15:26.997956895 +0800
Change: 2019-12-15 20:16:43.882956602 +0800
 Birth: -
[root@localhost tmp]# touch functions 
[root@localhost tmp]# stat functions 
  File: ‘functions’
  Size: 18110         Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33557922    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-15 20:17:48.710956355 +0800
Modify: 2019-12-15 20:17:48.710956355 +0800
Change: 2019-12-15 20:17:48.710956355 +0800
 Birth: -

    b、当touch一个不存在的文件时就会创建一个空文件

    c、touch -c ,指定的文件路径不存在时不予创建。即文件存在就修改时间戳,文件不存在就算了,也不创建文件。

    d、touch -a:仅修改access time

    e、touch -m:仅修改modify time

      chang time不能手动指定修改

    f、touch -t :修改至指定的时间

        -t STAMP
        use [[CC]YY]MMDDhhmm[.ss] instead of current time

[root@localhost tmp]# touch -m -t 0212010303.03 functions  #也可以写为200212010303.03
[root@localhost tmp]# stat functions 
  File: ‘functions’
  Size: 18110         Blocks: 40         IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33557922    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-12-15 20:17:48.710956355 +0800
Modify: 2002-12-01 03:03:03.000000000 +0800
Change: 2019-12-15 20:23:44.012954999 +0800
 Birth: -
原文地址:https://www.cnblogs.com/Presley-lpc/p/12038671.html