3.5_文件和目录列表

要想知道系统中有哪些文件,可以使用列表命令(ls)。本节将描述ls命令和可用来格式化其输出信息的选项。

总结

ls命令最基本的形式会显示当前目录下的文件和目录:

命令/参数 备注
ls 按列排序显示当前目录下的文件和目录
-F 区分文件和目录。在目录名后加了正斜线(/),在可执行文件(比如上面的my_script文件)的后面加个星号
-a 把隐藏文件(以点号开始的文件)和普通文件及目录一起显示出来
-R 递归选项,列出了当前目录下包含的子目录中的文件
-l 产生长列表格式的输出,包含了目录中每个文件的更多相关信息
-l --time=atime 显示出已经更改过的文件访问时间
文件匹配规则 备注
? 问号可用于过滤器字符串中替代任意位置的单个字符
* 星号可匹配零个或多个字符
[ ] 中括号表示一个字符位置并给出多个可能的选择
[ai] 匹配该位置为a或i的文件名
[a – i] 指定字符范围,例如字母范围[a – i] ,即该位置从a到i的字母都会匹配
[!a] 排除该位置为a的文件名

1.基本列表功能

ls命令最基本的形式会显示当前目录下的文件和目录:

$ ls
Desktop   Downloads        Music     Pictures  Templates   Videos
Documents examples.desktop my_script Public    test_file

注意,ls命令输出的列表是按字母排序的(按列排序而不是按行排序)。如果用户用的是支持彩色的终端仿真器,ls命令还可以用不同的颜色来区分不同类型的文件。LS_COLORS环境变量控制着这个功能。(第6章中会讲到环境变量。)不同的Linux发行版根据各自终端仿真器的能力设置这个环境变量。

如果没安装彩色终端仿真器,可用带-F参数的ls命令轻松区分文件和目录。使用-F参数可以得到如下输出:

$ ls -F
Desktop/   Downloads/       Music/      Pictures/  Templates/   Videos/
Documents/ examples.desktop my_script*  Public/    test_file

-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行文件(比如上面的my_script文件)的后面加个星号,以便用户找出可在系统上运行的文件。

基本的ls命令在某种意义上有点容易让人误解。它显示了当前目录下的文件和目录,但并没有将全部都显示出来。Linux经常采用隐藏文件来保存配置信息。在Linux上,隐藏文件通常是文件名以点号开始的文件。这些文件并没有在默认的ls命令输出中显示出来,因此我们称其为隐藏文件。

要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。下面是一个带有-a参数的ls命令的例子:

3.5_文件和目录列表_第1张图片

所有以点号开头的隐藏文件现在都显示出来了。注意,有三个以.bash开始的文件。它们是bash shell环境所使用的隐藏文件,在第6章会对其进行详细的讲解。

-R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。如果目录很多,这个输出就会很长。以下是-R参数输出的简单例子:

$ ls -F -R
.:
Desktop/   Downloads/        Music/     Pictures/  Templates/  Videos/
Documents/ examples.desktop  my_script* Public/    test_file

./Desktop:

./Documents:

./Downloads:

./Music:
ILoveLinux.mp3*

./Pictures:

./Public:

./Templates:

./Videos:

注意,首先-R参数显示了当前目录下的内容,也就是之前例子中用户home目录下的那些文件。另外,它还显示出了用户home目录下所有子目录及其内容。只有Music子目录中包含了一个可执行文件ILoveLinux.mp3。

选项并一定要像例子中那样分开输入:ls –F –R。它们可以进行如下合并:ls –FR。

在上一个例子中,子目录中没再包含子目录。如果有更多的子目录,-R参数会继续进行遍历。正如你所看到的,如果目录结构很庞大,输出内容会变得很长。

2.显示长列表

在基本的输出列表中,ls命令并未输出太多每个文件的相关信息。要显示附加信息,另一个常用的参数是-l。-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。

ls -l
total 48
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Desktop
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Documents
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Downloads
-rw-r--r-- 1 christine christine 8980 Apr 22 13:36 examples.desktop
-rw-rw-r-- 1 christine christine 0    May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0    May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0    May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0    May 21 13:44 full
drwxr-xr-x 2 christine christine 4096 May 21 11:39 Music
-rw-rw-r-- 1 christine christine 0    May 21 13:25 my_file
-rw-rw-r-- 1 christine christine 0    May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54   May 21 11:26 my_script
-rw-rw-r-- 1 christine christine 0    May 21 13:42 new_file
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Pictures
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Public
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Templates
-rw-rw-r-- 1 christine christine 0    May 21 11:28 test_file
drwxr-xr-x 2 christine christine 4096 Apr 22 20:37 Videos
$

这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有用信息。输出的第一行显示了在目录中包含的总块数。在此之后,每一行都包含了关于文件(或目录)的下述信息:

下面以Music文件为例进行介绍:

drwxr-xr-x 2 christine christine 4096 May 21 11:39 Music
列属性序号 列属性名 示例 注释
1 文件类型 d 目录(d)、文件(-)、字符型文件(c)或块设备(b)
2 文件的权限 rwxr-xr-x (参见第6章)
3 文件的硬链接总数 2
4 文件属主的用户名 christine
5 文件属组的组名 christine
6 文件的大小 4096 (以字节为单位)
7 文件的上次修改时间 May 21 11:39 月 日 时间
8 文件名或目录名 Music

-l参数是一个强大的工具。有了它,你几乎可以看到系统上任何文件或目录的大部分信息。

在进行文件管理时,ls命令的很多参数都能派上用场。如果在shell提示符中输入man ls,就能看到可用来修改ls命令输出的参数有好几页。

别忘了可以将多个参数结合起来使用。你不时地会发现一些参数组合不仅能够显示出所需的内容,而且还容易记忆,例如ls –alF。

3.过滤输出列表

前面的例子可知,默认情况下,ls命令会输出目录下的所有非隐藏文件。有时这个输出会显得过多,当你只需要查看单个少数文件信息时更是如此。
幸而ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件或目录。

这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器:

$ ls -l my_script
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。有时你可能不知道要找的那个文件的确切名称。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配:

 问号(?)代表一个字符;
 星号(*)代表零个或多个字符。

问号可用于过滤器字符串中替代任意位置的单个字符。例如:

$ ls -l my_scr?pt
-rw-rw-r-- 1 christine christine 0  May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

其中,过滤器my_scr?pt与目录中的两个文件匹配。类似地,星号可匹配零个或多个字符。

$ ls -l my*
-rw-rw-r-- 1 christine christine 0  May 21 13:25 my_file
-rw-rw-r-- 1 christine christine 0  May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

使用星号找到了三个名字以my开头的文件。和问号一样,你可以把星号放在过滤器中的任意位置。

$ ls -l my_s*t
-rw-rw-r-- 1 christine christine 0  May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。

$ ls -l my_scr[ai]pt
-rw-rw-r-- 1 christine christine 0  May 21 13:25 my_scrapt
-rwxrw-r-- 1 christine christine 54 May 21 11:26 my_script
$

在这个例子中,我们使用了中括号以及在特定位置上可能出现的两种字符:a或i。中括号表示一个字符位置并给出多个可能的选择。可以像上面的例子那样将待选的字符列出来,也可以指定字符范围,例如字母范围[a – i]。即该位置从a到i的字母都会匹配。

$ ls -l f[a-i]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fall
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
$

另外,可以使用感叹号(!)将不需要的内容排除在外。

$ ls -l f[!a]ll
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fell
-rw-rw-r-- 1 christine christine 0 May 21 13:44 fill
-rw-rw-r-- 1 christine christine 0 May 21 13:44 full
$

在进行文件搜索时,文件扩展匹配是一个功能强大的特性。它也可以用于ls以外的其他shell命令。本章随后的部分会有到更多相关的例子。

你可能感兴趣的:(#,第三章-基本的bash,shell命令,linux,bash)