• L6.linux命令每日一练 -- 第二章 文件和目录操作命令 -- touch和ls命令


    2.5 touch:创建文件或更改文件时间戳

    2.5.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

    ​ touch命令包含两个功能:一是创建新的空文件;二是改变已有文件的时间戳属性。

    【语法格式】

    touch [option] [file]
    touch [选项] [文件]
    
    • 1
    • 2

    说明:

    ​ 1)touch命令以及后面的选项和文件,每个元素之间都至少要有一个空格。

    ​ 2)注意区分touch和mkdir命令的功能,mkdir命令是创建空目录,而touch是创建空文件。

    ​ 3)在Linux中,一切皆文件。虽然touch命令不能创建目录,但是可以修改目录的时间戳。

    【选项说明】

    ​ 表2-6针对touch命令的参数选项进行了说明。

    ​ 表2-6 touch命令的参数选项及说明
    在这里插入图片描述

    2.5.2 使用范例

    ​ **范例2-21:**创建文件示例(用于文件事先不存在的情况)。

    [root@centos7 ~]# mkdir test	#新建一个test目录
    [root@centos7 ~]# cd test	#切换到test目录。
    [root@centos7 ~/test]# touch oldboy.txt	#创建空文件。
    [root@centos7 ~/test]# ls
    oldboy.txt
    [root@centos7 ~/test]# touch a.txt b.txt #同时创建多个文件,类似于mkdir创建多个目录。
    [root@centos7 ~/test]# touch sdu{01..05}	#利用大括号“{}”输出的字符序列批量创建文件。
    [root@oldboyedu2 ~/test]#ls
    a.txt  b.txt  oldboy.txt  sdu01  sdu02  sdu03  sdu04  sdu05
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ​ **范例2-22:**更改文件的时间戳属性。

    [root@centos7 ~/test]# stat oldboy.txt 	#stat命令可以查看文件的时间戳属性,具体用法见stat命令的详解。
      File: ‘oldboy.txt’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d	Inode: 33914867    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2020-10-05 21:19:50.049175542 +0800
    Modify: 2020-10-05 21:19:50.049175542 +0800
    Change: 2020-10-05 21:19:50.049175542 +0800
     Birth: -
    #说明:文件的时间戳属性分为访问时间、修改时间和状态改变时间。
    [root@centos7 ~/test]# touch -a oldboy.txt 	#-a参数可用于更改最后的访问时间。
    [root@centos7 ~/test]# stat oldboy.txt 
      File: ‘oldboy.txt’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d	Inode: 33914867    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2020-10-05 21:25:30.994178713 +0800
    Modify: 2020-10-05 21:25:18.371178595 +0800
    Change: 2020-10-05 21:25:30.994178713 +0800
     Birth: -
    [root@centos7 ~/test]# touch -m oldboy.txt 	#-m参数用于更改最后的修改时间。
    [root@centos7 ~/test]# stat oldboy.txt 
      File: ‘oldboy.txt’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d	Inode: 33914867    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2020-10-05 21:25:30.994178713 +0800
    Modify: 2020-10-05 21:25:40.966178805 +0800
    Change: 2020-10-05 21:25:40.966178805 +0800
     Birth: -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    ​ **范例2-23:**指定时间属性创建/修改文件。

    ​ 可利用选项-d指定创建文件后的文件修改时间,示例代码如下:

    [root@centos7 ~/test]# ls -lh oldboy.txt 
    -rw-r--r--. 1 root root 0 Oct  5 21:25 oldboy.txt	#修改前的文件修改时间是10月5日。
    [root@centos7 ~/test]# touch -d 20211001 oldboy.txt 	#指定创建文件后的文件修改时间为2021年10月01日。
    [root@centos7 ~/test]# ls -lh oldboy.txt 
    -rw-r--r--. 1 root root 0 Oct  1  2021 oldboy.txt	#文件修改时间已改为2021年10月01日。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ​ 也可利用选项-r,修改oldboy.txt的时间属性,使其与a.txt的时间属性一致,示例代码如下:

    [root@centos7 ~/test]# ls -lh a.txt 
    -rw-r--r--. 1 root root 0 Oct  5 21:22 a.txt	#查看a.txt的修改时间。
    [root@centos7 ~/test]# touch -r a.txt oldboy.txt 	#使用-r参数使得oldboy.txt时间属性与a.txt一致。
    [root@centos7 ~/test]# ls -lh oldboy.txt a.txt 
    -rw-r--r--. 1 root root 0 Oct  5 21:22 a.txt
    -rw-r--r--. 1 root root 0 Oct  5 21:22 oldboy.txt	
    #oldboy.txt文件的修改时间已经与a.txt一致了。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ​ 还可以利用选项-t,将文件设置为2015123112234.50的时间格式,示例代码如下:

    [root@centos7 ~/test]# touch -t 201512312234.50 oldboy.txt 
    [root@centos7 ~/test]# ls -lh --full-time oldboy.txt 
    -rw-r--r--. 1 root root 0 2015-12-31 22:34:50.000000000 +0800 oldboy.txt	#查看设置的属性。
    
    • 1
    • 2
    • 3

    ​ 上述案例涉及的ls命令的用法详见后面5.2.6节ls的相关内容详解。

    2.5.3 扩展知识

    ​ 这里扩展一旦有关时间戳属性的知识。

    ​ GUN/Linux的文件包含3中类型的时间戳:

    Access: 2020-10-05 21:19:50.049175542 +0800		#文件最后被访问的时间。
    Modify: 2020-10-05 21:19:50.049175542 +0800		#文件最后被修改的时间。
    Change: 2020-10-05 21:19:50.049175542 +0800		#文件状态最后被改变的时间。
    
    • 1
    • 2
    • 3

    ​ 对应ls命令,查看上述时间戳的选项如下:

    mtime: 最后修改时间(ls -lt)	#修改文件内容,文件的修改时间(modufy time)会改变。
    ctime:状态改变时间(ls -lc)	#修改文件内容、移动文件或改变文件属性等,文件的change时间会改变。
    atime:最后访问时间(ls -lu)	#查看文件内容时,文件的访问时间(access time)会改变。
    
    • 1
    • 2
    • 3

    2.6 ls:显示目录下内容及属性信息的命令

    2.6.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

    ​ ls命令可以理解为英文单词list的缩写,其功能是列出目录的内容及其内容属性信息(list directory contents)。该命令有点类似于DOS系统下的dir命令,有趣的是Linux下其实也有dir命令,但我们更习惯使用ls。

    【语法格式】

    ls [option] [file]
    ls [选项] [<文件或目录>]
    
    • 1
    • 2

    说明:

    ​ 1)ls命令以及后面的选项和文件,每个元素之间都至少要有一个空格。

    ​ 2)命令后面的选项和目录文件可以省略,表示查看当前路径的文件信息。

    【选项说明】

    ​ 表2-7针对ls命令的参数选项进行了说明。

    ​ 表2-7 ls命令的参数选项及说明

    在这里插入图片描述

    2.6.2 使用范例

    ​ 在开始范例讲解之前,先做一些准备,顺便整合一下使用前面的命令。准备代码如下:

    [root@centos7 ~]# mkdir test	#在根“/”下创建一个目录
    [root@centos7 ~]# cd test/	#切换到test目录下。
    [root@centos7 ~/test]# touch file{1..3}.txt
    #批量创建若干文件。
    [root@centos7 ~/test]# mkdir dir{1..3}
    #批量创建多个目录。
    [root@centos7 ~/test]# tree	#显示前面创建的文件及目录结构。
    .
    ├── dir1
    ├── dir2
    ├── dir3
    ├── file1.txt
    ├── file2.txt
    └── file3.txt
    
    3 directories, 3 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.6.2.1 基础范例

    ​ **范例2-24:**直接ls命令,不带任何参数。

    [root@centos7 ~/test]# ls	#不加参数的结果,显示所有文件和目录
    dir1  dir2  dir3  file1.txt  file2.txt  file3.txt
    
    • 1
    • 2

    ​ **范例2-25:**使用-a参数显示所有文件,特别是隐藏文件。

    [root@centos7 ~/test]# touch .file4.txt	#创建一个隐藏文件,在Linux系统中以“.”(点号)开头的文件就是隐藏文件。
    [root@centos7 ~/test]# ls
    dir1  dir2  dir3  file1.txt  file2.txt  file3.txt
    [root@centos7 ~/test]# ls -a
    .  ..  dir1  dir2  dir3  file1.txt  file2.txt  file3.txt  .file4.txt
    #说明:加了-a参数,就会把以“.”(点号)开头的内容显示出来。这里显示的第一个点号,表示当前目录,即test目录本身,而两个点号表示当前目录的上级目录。有关一个点、两个点的知识,在8.2.3节的ln命令中会有详细讲解。
    [root@centos7 ~/test]# ls -A	#列出所有文件,包括隐藏文件,但不包括“.”和“..”这两个目录。
    dir1  dir2  dir3  file1.txt  file2.txt  file3.txt  .file4.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ​ **范例2-26:**使用-l参数显示详细信息。

    [root@centos7 ~/test]# ls -l	#此处时间属性列默认显示的是文件的最后一次修改时间。
    total 0
    drwxr-xr-x. 2 root root 6 Oct  6 16:42 dir1
    drwxr-xr-x. 2 root root 6 Oct  6 16:42 dir2
    drwxr-xr-x. 2 root root 6 Oct  6 16:42 dir3
    -rw-r--r--. 1 root root 0 Oct  6 16:42 file1.txt
    -rw-r--r--. 1 root root 0 Oct  6 16:42 file2.txt
    -rw-r--r--. 1 root root 0 Oct  6 16:42 file3.txt
    #说明:这个“-l”参数是最常用的参数,意思是用长格式列出目录下的文件类型、权限、连接数、属主(组)及创建修改时间的信息。这里的每个列的属性含义都需要熟练掌握,后文会详细讨论这些属性信息。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ​ 可能有人以及注意到了,创建或修改时间的格式没有年份的信息,那么如何显示时间的全部信息呢?见范例2-27。

    ​ **范例2-27:**显示完整时间属性的参数–time-style=long-iso。

    [root@centos7 ~/test]# ls -l --time-style=long-iso	#以long-iso方式显示时间,这个命令结果是非常棒的。
    total 0
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir1
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir2
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir3
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file1.txt
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file2.txt
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file3.txt
    #提示:这样的时间格式是不是看起来总是让人心情舒畅呢?--time-style的其他可选参数请大家自行测试。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ​ 对于上面的命令,说明如下。

    ​ 1)–time-style包含的可选参数值有:full-iso、long-iso、iso、locate。默认值是locate。

    ​ 2)在生产场景中经常会遇到同一目录下文件及目录时间的显示不一致的问题。所以需要用ls -l --time-style=long-iso来进行调整,如果觉得参数太多不好记,则可以设置一个别名来进行管理,详见后文的alias命令。

    ​ 3)值得一提的是,执行ls -l等命令时,默认显示的是文件最后一次修改的时间(如果是新文件就是创建时间)。

    ​ 4)ls --full-time用于显示完整的时间,等同于ls -l --time-style=full-iso。

    ​ 既然ls -l输出结果的时间属性列为修改时间,那么能否改成其他的时间呢?例如,显示最后一次文件访问的时间。这当然是可以的,见下文。

    ​ **范例2-28:**执行ls命令,带显示内容的访问时间属性的参数。

    [root@centos7 ~/test]# stat file1.txt	#显示文件的属性及状态信息,stat命令后文会详细讲解,暂时不用理会。
      File: ‘file1.txt’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d	Inode: 16880703    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2020-10-06 16:42:01.535314886 +0800	#这里就是文件的访问时间,是我们现在需要关注的。
    Modify: 2020-10-06 16:42:01.535314886 +0800
    Change: 2020-10-06 16:42:01.535314886 +0800
     Birth: -
    [root@oldboyedu2 ~/test]#date	#查看当前的系统时间。
    Tue Oct  6 17:05:11 CST 2020
    
    [root@centos7 ~/test]# cat file1.txt 	#查看文件内容即表示访问文件了,cat命令后面会讲,暂时不用理会。
    [root@centos7 ~/test]# stat file1.txt	#重新查看文件的访问时间。
      File: ‘file1.txt’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: 803h/2051d	Inode: 16880703    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:admin_home_t:s0
    Access: 2020-10-06 17:04:28.927244778 +0800	#我们发现file1.txt的访问时间以及发生了变化。
    Modify: 2020-10-06 16:42:01.535314886 +0800
    Change: 2020-10-06 16:42:01.535314886 +0800
     Birth: -
    
    [root@centos7 ~/test]# ls -l --time-style=long-iso --time=atime	#增加--time=atime参数,显示访问时间。
    total 0
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir1
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir2
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir3
    -rw-r--r--. 1 root root 0 2020-10-06 17:04 file1.txt
    #文件的时间列确实发生了变化,是前面的访问时间无疑。
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file2.txt
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file3.txt
    
    [root@centos7 ~/test]# ls -l --time-style=long-iso
    total 0
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir1
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir2
    drwxr-xr-x. 2 root root 6 2020-10-06 16:42 dir3
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file1.txt
    #这里是文件的默认修改时间列。
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file2.txt
    -rw-r--r--. 1 root root 0 2020-10-06 16:42 file3.txt
    #通过以上实践,我们可以得出理论了。--time=atime显示的确实是访问时间,而非默认的修改时间。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    ​ 对于上面的命令,说明如下。

    ​ 1)与之相关的命令还有ls -l --time-style=long-iso --time=ctime,用于显示文件的改变时间。

    ​ 2)有关文件时间列及mtime、atime、ctime的知识在介绍touch命令时已经讲解过了。

    ​ **范例2-29:**执行ls命令,带-F参数(有些类似于tree命令的-F)

    [root@centos7 ~/test]# ls -F
    dir1/  dir2/  dir3/  file1.txt  file2.txt  file3.txt
    #说明:加了-F之后,我们可以清晰地看到所有目录的结尾都加上了斜线/。这样的功能对于工作有什么用呢?当然有用了,例如,我们要过滤出所有的目录来,那么只需要将带斜线的过滤出来就可以了。
    [root@centos7 ~/test]# ls -F|grep /	#过滤目录,grep命令的具体用法见后面grep章节。
    dir1/
    dir2/
    dir3/
    [root@centos7 ~/test]# ls -F|grep -v /	#过滤普通文件。
    file1.txt
    file2.txt
    file3.txt
    #说明:ls的-F参数是在文件结尾加上文件类型指示符号(*、/、=、@、|,其中的一个)。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ​ **范例2-30:**使用-d参数只显示目录本身的信息。

    ​ 有时候我们想查看目录本身的信息,但是若使用“ls 目录”命令,就会显示目录里面的内容。示例代码如下:

    [root@centos7 ~/test]# ls -l dir1	#这样根本无法查看目录本身的信息,除非到上级目录中查看。
    total 0
    
    • 1
    • 2

    ​ 如果只是想显示目录本身的信息,那么这个时候参数-d就能派上用场了,示例代码如下:

    [root@centos7 ~/test]# ls -ld dir1	#加-d参数就可以如愿以偿了。
    drwxr-xr-x. 2 root root 6 Oct  6 16:42 dir1
    
    • 1
    • 2

    ​ **范例2-31:**使用-R参数递归查看目录。

    [root@centos7 ~/test]# mkdir -p dir1/sub1/test	#递归创建目录的命令。
    [root@centos7 ~/test]# ls -R dir1	#类似于tree但没有tree好用的方法。
    dir1:
    sub1
    
    dir1/sub1:
    test
    
    dir1/sub1/test:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.6.2.2 技巧性范例

    ​ **范例2-32:**ls命令别名的相关知识及设置ls别名。

    ​ 可通过如下命令查看ls在系统中的默认别名设置,执行等号前面的内容就会调用后面的命令:

    [root@centos7 ~/test]# alias |grep ls	#alias命令的用法请参见相应的alias章节。
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    #提示:什么是别名呢?别名很好理解,就是另外一个名字而已。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ​ 例如,显示时间格式的参数太长,这里就可以做个别名,示例代码如下:

    [root@centos7 ~/test]# alias lst='ls -l --time-style=long-iso'	#配置命令别名
    [root@centos7 ~/test]# alias|grep lst	#检查命令别名是否生效。
    alias lst='ls -l --time-style=long-iso'
    [root@centos7 ~/test]# lst
    #执行命令别名,检查效果。
    total 0
    drwxr-xr-x. 3 root root 18 2020-10-06 17:26 dir1
    drwxr-xr-x. 2 root root  6 2020-10-06 16:42 dir2
    drwxr-xr-x. 2 root root  6 2020-10-06 16:42 dir3
    -rw-r--r--. 1 root root  0 2020-10-06 16:42 file1.txt
    -rw-r--r--. 1 root root  0 2020-10-06 16:42 file2.txt
    -rw-r--r--. 1 root root  0 2020-10-06 16:42 file3.txt
    #注意:这里的别名是临时生效的,如果希望永久生效则需要将别名放到环境变量的配置里才可以。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    ​ **范例2-33:**查找最近更新过的文件。

    ​ 在工作中,我们经常需要查看一个包含很多文件的目录,找出最近更新过但不知道具体文件名的文件,这时可以用ls -lrt或者ls -rt这个组合命令,示例代码如下:

    [root@centos7 ~/test]# touch /opt/test.txt	#创建一个新文件,假设不知道名字,呢如何快速找到它?
    [root@centos7 ~/test]# ls -lrt /opt/	#-t是按时间排序,-r是倒序,即按时间倒序排序。
    total 0
    -rw-r--r--. 1 root root 0 Oct  6 15:14 a.txt
    -rw-r--r--. 1 root root 0 Oct  6 17:35 test.txt
    #不用翻屏回查,最后一屏的最后一行就是我们需要查找的文件。如果直接定位文件还可以用如下命令。
    [root@centos7 ~/test]# ls -lrt /opt/|tail -1	#tail命令后面会讲。
    -rw-r--r--. 1 root root 0 Oct  6 17:35 test.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.6.2.3 生产案例

    ​ **范例2-34:**生产场景数据库备份,获取数据库名列表。

    #!/bin/bash
    # backup database and save one week data
    # neteagle 2020-10-19
    destdir=/data/mysql_backup
    mysqldumpbin=/usr/local/mysql/bin/mysqldump
    ls -F /usr/local/mysql/data |egrep "/" |awk -F "/" '{print $1}' >/root/dbfilename.list
    ...省略部分...
    #提示:在此数据库分表备份脚本中,用到了ls -F加egrep的组合命令来把数据库目录名过滤出来。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ​ 范例2-35:在生产场景下删除占用inode节点的垃圾。

    #CentOS 5.X默认安装sendmail邮件程序
    [root@centos5 ~]# cd /var/spool/clientmqueue/
    #sendmail邮件临时目录。
    [root@centos5 clientmqueue]# ls |xargs rm -f
    [root@centos5 clientmqueue]# ll
    total 0
    
    #CentOS 6和CentOS 7默认安装postfix邮件程序
    [root@centos7 ~]# cd /var/spool/postfix/maildrop/	#postfix邮件临时目录。
    [root@centos7 /var/spool/postfix/maildrop]# ls |xargs rm -f		#如果文件特别多,那么直接rm -rf *是无法删除的。
    [root@centos7 /var/spool/postfix/maildrop]# ll
    total 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ​ 在生产环境中,若是系统服务配置不当,例如设置了定时任务,则可能会导致/var/spool/clientmqueue/或/var/spool/postfix/maildrop/目录下碎文件过多,使得系统空间被垃圾充满,那么,此案例给出的是手工解决的办法。当然还可以通过定时认为执行本案例,这里的ls命令也可以用find命令来代替。

    2.6.3 ls -F命令的扩展知识

    ​ 从前面的范例可以看到,目录的结尾加上了斜线(/),若是其他类型的文件,就不是加斜线了,而是别的符合,具体如下:

    [root@centos7 ~]# ll /etc/init.d
    lrwxrwxrwx. 1 root root 11 Oct  1 14:39 /etc/init.d -> rc.d/init.d
    [root@centos7 ~]# ls -F /etc/init.d
    /etc/init.d@	#链接文件结尾是@。
    [root@centos7 ~]# ls -F /bin/date
    /bin/date*	#命令结尾是*。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ​ ls -F命令表示在每个文件名后附上一个字符以说明文件的类型:

    man ls :
           -F, --classify
                  append indicator (one of */=>@|) to entries
    
    • 1
    • 2
    • 3

    ​ 1)加上“*”代表可执行的普通文件:

    [root@centos6 ~]# ll -F /etc/init.d/ |egrep "ssh|syslog|crond"
    #grep和egrep命令都可以过滤指定的字符串,具体用法请参见grep命令章节。
    -rwxr-xr-x. 1 root root  2826 Aug 24  2016 crond*
    -rwxr-xr-x. 1 root root  2011 Dec  1  2017 rsyslog*
    -rwxr-xr-x. 1 root root  4621 Apr  9  2019 sshd*
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ​ 2)加上“/”表示目录:

    [root@centos7 ~]# ll -F /etc |egrep "sysconfig|ssh"
    drwxr-xr-x.  2 root root      248 Oct  6 18:26 ssh/
    drwxr-xr-x.  6 root root     4096 Oct 17 14:21 sysconfig/
    
    • 1
    • 2
    • 3

    ​ 3)加上“=”表示套接字(sockets):

    [root@centos7 ~]# find / -type s -exec ls -lF {} \;	#这里查找不同类型文件的find命令,后文会将。
    srw-rw-rw-. 1 root root 0 Oct 19 17:29 /dev/log=
    srw-rw-rw-. 1 root root 0 Oct 19 17:29 /run/vmware/guestServicePipe=
    srw-rw-rw-. 1 root root 0 Oct 19 17:29 /run/abrt/abrt.socket=
    srw-rw-rw-. 1 root root 0 Oct 19 17:29 /run/dbus/system_bus_socket=
    srw-------. 1 root root 0 Oct 19 17:29 /run/udev/control=
    srw-------. 1 root root 0 Oct 19 17:29 /run/systemd/shutdownd=
    srwxrwxrwx. 1 root root 0 Oct 19 17:29 /run/systemd/private=
    srw-rw-rw-. 1 root root 0 Oct 19 17:29 /run/systemd/journal/socket=
    srw-rw-rw-. 1 root root 0 Oct 19 17:29 /run/systemd/journal/stdout=
    srwx------. 1 root root 0 Oct 19 17:29 /run/systemd/cgroups-agent=
    srwxrwxrwx. 1 root root 0 Oct 19 17:29 /run/systemd/notify=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/tlsmgr=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/rewrite=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/bounce=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/defer=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/trace=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/verify=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/proxymap=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/proxywrite=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/smtp=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/relay=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/error=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/retry=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/discard=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/local=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/virtual=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/lmtp=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/anvil=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/private/scache=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/public/pickup=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/public/cleanup=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/public/qmgr=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/public/flush=
    srw-rw-rw-. 1 postfix postfix 0 Oct 19 17:29 /var/spool/postfix/public/showq=
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    ​ 4)加上“|”表示FIFOs:

    [root@centos7 ~]# find / -type p -exec ls -lF {} \;
    prw-------. 1 root root 0 Oct 19 17:29 /run/systemd/inhibit/1.ref|
    prw-------. 1 root root 0 Oct 19 17:29 /run/systemd/sessions/2.ref|
    prw-------. 1 root root 0 Oct 19 17:29 /run/systemd/initctl/fifo|
    
    • 1
    • 2
    • 3
    • 4

    ​ 5)加上“@”表示符合链接:

    [root@centos7 ~]# ll -F /bin/sh
    lrwxrwxrwx. 1 root root 4 Oct  1 16:03 /bin/sh -> bash*
    
    • 1
    • 2

    ​ 其实还有个类似的选项“-p”,它的功能比较简单,只是在目录后面加上“/”。大家可以自行实验。

    2.6.4 ls命令输出内容的属性解读

    ​ 使用ls命令之后,通常会有类似如下的输出内容:

    [root@centos7 ~/test]# ls -lhi	#l参数前面以及详细讲解过了,-h参数的作用是将文件的大小以人类可读的方式显示,像下面的4.0K你就能很容易知道文件的大小,-i参数的作用是显示文件的Inode值。
    total 0
    33914847 drwxr-xr-x. 3 root root 18 Oct  6 17:26 dir1
    50333656 drwxr-xr-x. 2 root root  6 Oct  6 16:42 dir2
      142528 drwxr-xr-x. 2 root root  6 Oct  6 16:42 dir3
    16880703 -rw-r--r--. 1 root root  0 Oct  6 16:42 file1.txt
    16880737 -rw-r--r--. 1 root root  0 Oct  6 16:42 file2.txt
    16880749 -rw-r--r--. 1 root root  0 Oct  6 16:42 file3.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ​ 上述命令结果中各列的含义如下。

    ​ 第一列:Inode索引节点编号。

    ​ 第二列:文件类型及权限(第一个字符为类型,后9个字符为文件权限符号)。

    ​ 第三列:硬链接个数(详情请参看ln命令的讲解)。

    ​ 第四列:文件或目录所属的用户(属主)。

    ​ 第五列:文件或目录所属的组。

    ​ 第六列:文件或目录的大小。

    ​ 第七、八、九列:文件或目录的修改时间。

    ​ 第十列:实际的文件名或目录。

    ​ 详细解释见图2-2。

    在这里插入图片描述
    ​ 图2-2 ls命令输出内容的属性解读

    【ls输出的文件属性举例说明】

    ​ 下面以oldboy文件为例说明输出文件的属性细节(具体见表2-8),具体列的内容请参考图2-2。

    ​ 表2-8 ls输出的文件属性细节说明
    在这里插入图片描述

  • 相关阅读:
    python列表list的index方法的用法和实例
    [附源码]java毕业设计基于JAVAWEB的高校实训管理系统
    【Unity3D】AudioSource组件
    分享一份关于 Rust 编程的学习指南
    草坪维护不求人,高尔夫球场草坪自动化灌溉联网方案
    mysql面试题32:MySQL数据库服务器性能分析的方法命令有哪些?
    Llama2-Chinese项目:4-量化模型
    解决Jmeter 4.x 请求到elasticsearch 中文乱码的问题
    【17. 双链表】
    5G网络架构与组网部署01--5G网络架构的演进趋势
  • 原文地址:https://blog.csdn.net/qq_25599925/article/details/125350934