Linux:ls指令
博客大纲
本系列博客依据man手册来讲解指令及其选项,并带有大量示例。
需要选项查阅时,直接依据索引跳转即可。
目录展示
本博客示例所处的目录结构:
.
├── 123.txt
├── 124.txt
├── a
│ └── b
│ └── c
│ └── d
│ └── e
│ └── f
├── abc
│ ├── 1.txt
│ ├── 2.txt
│ ├── 3.txt
│ ├── 4.txt
│ └── 5.txt
├── a.out
└── code.c
@
- 博客大纲
- ls指令
- 前提知识需要
- 指令释义
- 基本语法
- 选项
- -1选项
- -a选项 --all
- -A选项
- -c选项 --time=ctime, --time=status
- -t选项 --sort=time
- -d选项 --directory
- -f选项
- -U选项 --sort=none
- -i选项 --inode
- -l选项 --format=long, --format=verbose
- -m选项 --format=commas
- -n选项 --numeric-uid-gid
- -o选项
- -G选项 --no-group
- -F选项 --classify, --file-type
- -p选项
- -r选项 --reverse
- -s选项 --size
- -w选项 -width cols
- -x选项 --format=across, --format=horizontal
- -C选项 --format=vertical
- -Q选项 --quote-name
- -N选项
- -R选项 --recursive
- -S选项 --sort=size
ls指令
前提知识需要
在阅读本博客时,可能需要用到的知识:
指令释义
全称:
list directory contents
| 单词 | 释义 |
|---|---|
| list: | 列出 |
| directory: | 目录,文件夹 |
| contents: | 内容 |
功能:
当使用ls指令作用于文件时,将会列出该文件的信息;当使用ls指令作用于目录时,则会列出该目录下的文件与子目录;
基本语法
语法:
ls [选项] [文件名...]
使用示例:
不操作文件名:
当我们直接使用ls,而不加任何选项与文件名,就会输出当前目录下的所有子目录与文件夹:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
操作目录名:
在我们当前目录下,我们有一个abc的子目录。当我们对abc使用ls指令,最后就会输出abc目录中的所有内容:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls abc
1.txt 2.txt 3.txt 4.txt 5.txt
操作文件:
而当我们对当前目录下的123.txt使用ls指令,在不加选项的情况下,只输出文件名:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls 123.txt
123.txt
选项
-1选项
功能:一行输出一个文件(单列输出)。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-1选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -1
123.txt
124.txt
a
abc
a.out
code.c
可以发现:每个文件或目录都独占一列了。
-a选项 --all
功能:列出目录中所有文件,包括以“.”开头的文件。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-a选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -a
. .. 123.txt 124.txt a abc a.out code.c .hide
可以发现:我们使用-a选项后,多出来了三个文件,它们都是以'"."开头的隐藏文件。所以-a可以显示一些无法直接观察到的隐藏文件。
-A选项
功能:列出目录中除了".'与".."外的所有文件。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-a选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -a
. .. 123.txt 124.txt a abc a.out code.c .hide
- 对当前目录使用
-A选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -A
123.txt 124.txt a abc a.out code.c .hide
可以发现:当使用-A选项后,相比于使用-a选项,少了".'与".."两个文件,但是相比于对照组,任然多了".hide"文件。也就是说,-A选项一般用于输出".'与".."以外的隐藏文件。
-c选项 --time=ctime, --time=status
功能: 按文件状态改变时间(i节点中的ctime)排序并输出目录内容。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-c选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -c
abc 123.txt a.out code.c 124.txt a
可以发现:使用-c选项后,文件的排列顺序改变了。
-c选项可以让文件按照最后状态改变的时间排序。
证明:
我们先在当前目录创建一个名为b的目录,在分别用指令操作:
- 不对当前目录使用
-c选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out b code.c
- 对当前目录使用
-c选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -c
b abc 123.txt a.out code.c 124.txt a
可以发现:没有-c选项的时候,新创建的目录插在了a开头的文件与c开头的文件中间,也就是按照字母表排的序。
而当使用-c选项后,新创建的目录放在了最开头的位置,因为b目录是最后创建的,也就是最后状态发生改变的。
-t选项 --sort=time
功能:按文件最近修改时间( i 节点中的 mtime )而不是按文件名字典序排序,新文件靠前。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-t选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -t
abc 123.txt a.out code.c 124.txt a
可以发现:当我们使用-t选项后,文件的顺序发生了改变,这就是根据文件的最近修改时间排的序。
-d选项 --directory
功能:将目录名像其它文件一样列出,而不是列出它们的内容。
使用此功能,其实就是把目录当成文件来输出。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls abc
1.txt 2.txt 3.txt 4.txt 5.txt
- 对abc目录使用
-c选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -d abc
abc
当我们使用ls对一个目录操作的时候,会输出目录的所有内容,而当我们对文件使用ls时,就只会输出文件名。
此处我们直接对abc目录使用ls后,输出了abc目录中的文件;当加上-d选项后,abc目录就被当成了一个文件,只输出名称了。
-f选项
功能:不排序目录内容;按它们在磁盘上存储的顺序列出,同时启动“ -a ”选项。
这也是一个调序的选项,它会按照文件与目录在磁盘中存储的顺序输出。启动-a选项的意思是,只使用-f也会带着隐藏文件一起输出。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-f选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -f
abc .. a.out 123.txt 124.txt . a .hide code.c
可以发现:使用-f选项后,这个输出顺序就改变了,还会顺带输出隐藏文件。
-U选项 --sort=none
功能:不排序目录内容;按它们在磁盘上存储的顺序列出。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-f选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -f
abc .. a.out 123.txt 124.txt . a .hide code.c
- 对当前目录使用
-U选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -U
abc a.out 123.txt 124.txt a code.c
相比于-f选项,-U不会开启或禁止其它选项,比如此处-f就会顺带开启“ -a ”,选项显示隐藏文件,而-U没有。
-i选项 --inode
功能:在每个文件左边打印i节点号。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-i选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -i
1315676 123.txt 1315677 124.txt 1314444 a 1315680 abc 1315679 a.out 1315678 code.c
可以发现:当我们使用-i选项后,每个文件或目录的左侧都出现了相应的节点号。
-l选项 --format=long, --format=verbose
功能:除每个文件名外,增加显示文件类型、权限、硬链接数、所有者名、组名、大小( byte )、及时间信息(如未指明是其它时间即指修改时间)。
可以简单将其理解为,更详细地显示出文件与目录的信息。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-l选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -l
total 32
-rw-r--r-- 1 root root 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 root root 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 root root 4096 Nov 25 16:48 a
drwxr-xr-x 2 root root 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 root root 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 root root 70 Nov 25 16:53 code.c
可以发现:当我们使用-l选项后,每个文件或目录都有了十分详细的信息。
组合:
我们再尝试去单独观察一个目录的详细信息:
- 对abc目录使用
-l选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -l abc
total 0
-rw-r--r-- 1 root root 0 Nov 25 16:56 1.txt
-rw-r--r-- 1 root root 0 Nov 25 16:56 2.txt
-rw-r--r-- 1 root root 0 Nov 25 16:56 3.txt
-rw-r--r-- 1 root root 0 Nov 25 16:56 4.txt
-rw-r--r-- 1 root root 0 Nov 25 16:56 5.txt
此时操作系统并没有输出abc目录本身的详细信息,而是将abc目录下的文件的详细信息输出了。这是一位ls操作在目录时,就是会输出这个目录的内容。在此我们要额外使用-d选项,将这个abc目录当作文件处理:
- 对abc目录使用
-l和-d选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -l -d abc
drwxr-xr-x 2 root root 4096 Nov 25 16:56 abc
这样我们就可以得到abc目录本身的信息了。
缩写形式:
我们在使用ls -l的时候,可以将其简写为ll。两者的效果是一致的:
- 对当前目录使用
ll:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ll
total 32
-rw-r--r-- 1 root root 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 root root 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 root root 4096 Nov 25 16:48 a
drwxr-xr-x 2 root root 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 root root 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 root root 70 Nov 25 16:53 code.c
-m选项 --format=commas
功能: 水平列出文件,每行尽可能多,相互用逗号和一个空格分隔。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-m选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -m
123.txt, 124.txt, a, abc, a.out, code.c
可以发现:当我们使用-m选项后,每个文件或目录都被一个空格和逗号分割开了。
那要怎样理解每行尽量多这个句子呢?
我们尝试压缩我们的终端(即显示器)的大小,再输出一遍:
- 对比项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInst | <-这是屏幕边界
ruction]# ls |
123.txt a a.out code.c |
124.txt abc |
当我们压缩后,直接使用ls,超出屏幕边界的文件名会自动换行到下一行。
- 对当前目录使用
-m选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInst | <-这是屏幕边界
ruction]# ls -m |
123.txt, 124.txt, a, abc, a.out, |
code.c |
当我们压缩后,使用-m选项,发现,文件的顺序被调整了,这是因为它会尽量保证在每行尽量多输出文件。所以对文件进行了一次排序,以保证排序后,可以让一行内出现的文件数最多。比如此处使用-m选项后就比使用前的第一行多放了两个文件。
-n选项 --numeric-uid-gid
功能:列出数字化的 UID 和 GID 而不是用户名和组名。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -l
total 32
-rw-r--r-- 1 root root 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 root root 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 root root 4096 Nov 25 16:48 a
drwxr-xr-x 2 root root 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 root root 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 root root 70 Nov 25 16:53 code.c
- 对当前目录使用
-n选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -n
total 32
-rw-r--r-- 1 0 0 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 0 0 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 0 0 4096 Nov 25 16:48 a
drwxr-xr-x 2 0 0 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 0 0 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 0 0 70 Nov 25 16:53 code.c
可以发现:当我们使用-n选项后,相比于-l选项,root被改为了0,也就是数字化的UID与GID。
-o选项
功能:以长格式列出目录内容,但是不显示组信息。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -l
total 32
-rw-r--r-- 1 root root 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 root root 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 root root 4096 Nov 25 16:48 a
drwxr-xr-x 2 root root 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 root root 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 root root 70 Nov 25 16:53 code.c
- 对当前目录使用
-o选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -o
total 32
-rw-r--r-- 1 root 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 root 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 root 4096 Nov 25 16:48 a
drwxr-xr-x 2 root 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 root 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 root 70 Nov 25 16:53 code.c
可以发现:当使用-o选项后,相比于-l选项,少了一组root,即少输出了一个组信息。
提供此选项是为了与其它版本的ls 兼容。
-G选项 --no-group
功能:以长格式列目录时不显示组信息。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-G选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -G
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-G与-l选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ll -G
total 28
-rw-r--r-- 1 root 59 Nov 25 16:54 123.txt
-rw-r--r-- 1 root 0 Nov 25 16:52 124.txt
drwxr-xr-x 3 root 4096 Nov 25 16:48 a
drwxr-xr-x 2 root 4096 Nov 25 16:56 abc
-rwxr-xr-x 1 root 8360 Nov 25 16:53 a.out
-rw-r--r-- 1 root 70 Nov 25 16:53 code.c
可以发现:当使用-G选项后,并不能像-o一般输出所有文件的详细信息,只能配合着-l选项一起使用,并减去原本应该输出的组名。
-F选项 --classify, --file-type
功能:在每个文件名后附上一个字符以说明该文件的类型。
类型说明:
| 符号 | 类型 |
|---|---|
| “ * ” | 表示普通的可执行文件; |
| “ / ” | 表示目录; |
| “ @ ” | 表示符号链接; |
| “| ” | 表示FIFOs; |
| “ = ” | 表示套接字 (sockets) ; |
| 什么也没有 | 表示普通文件。 |
使用示例:
- 对比项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-F选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -F
123.txt 124.txt a/ abc/ a.out* code.c
可以发现:当我们使用-F选项后,在输出文件名称的末尾,标识了每种文件的类型。
此处注意”.txt“不是上述类型之一,它被解析为普通文件,故什么也没有加,".txt"只是文件名的一部分。
-p选项
功能:在每个文件名后附上一个字符以说明该文件的类型。类似“ -F ”选项但是不 标示可执行文件。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -F
123.txt 124.txt a/ abc/ a.out* b/ code.c
- 对当前目录使用
-p选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -p
123.txt 124.txt a/ abc/ a.out code.c
可以发现:当我们使用-p选项后,相比于使用-F选项后,并没有将a.out这个可执行文件标识出来。
-r选项 --reverse
功能:逆序排列目录内容。
使用示例:
- 对比项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-r选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -r
code.c a.out abc a 124.txt 123.txt
可以发现:当我们使用-r 选项后,刚好将文件与目录的顺序倒置了一遍
-s选项 --size
功能:在每个文件名左侧输出该文件的大小,以1024字节(即1k)的块为单位。
使用示例:
-对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-s选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -s
total 32
4 123.txt 0 124.txt 4 a 4 abc 12 a.out 4 code.c
可以发现:当我们使用-s选项后,每个文件前都多出了一组数字,这个数字的单位为K。
-w选项 -width cols
功能:假定屏幕宽度为指定值。
此选项使用时要在后面加上数字,数字值代表当前屏幕宽度。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls | <-这是屏幕的边界
123.txt 124.txt a abc a.out code.c |
- 对当前目录使用
-w选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -w 20 | <-这是屏幕的边界
123.txt abc |
124.txt a.out |
a code.c |
可以发现:当我们使用-w选项,并将宽度设为20后,虽然真实的屏幕边界没有动,但是其依然限制了输出的宽度为指定值。
-x选项 --format=across, --format=horizontal
功能:多列输出时,横向排序。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-w选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -w 20
123.txt abc
124.txt a.out
a code.c
- 对当前目录使用
-w和-x选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -w 20 -x
123.txt 124.txt
a abc
a.out code.c
我们现在对比三个输出结果
当我们只用-w时,其文件的排列顺序是纵向排列的,也就是按照对照组的顺序,先将第一条纵队排满,再去排第二条纵队。
当我们再加上-x选项时,其文件的排列顺序就变成了横向的,也就是按照对照组的顺序,会先将第一排排满,再去排第二排。
所以-x选项的作用是在多列输出的时候,将文件横向排序。
此外,此处额外插入一个选项:
-C选项 --format=vertical
功能: 多列输出,纵向排序。当标准输出是终端时这是缺省项。
在上述过程中,我们在没有使用-C选项,就自动纵向输出了,故这个选项是缺省的。
-Q选项 --quote-name
功能: 用双引号引起文件名。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-Q选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -Q
"123.txt" "124.txt" "a" "abc" "a.out" "code.c"
可以发现:当使用-Q选项后,每个文件或目录都被双引号引起来了。
-N选项
功能:不要用引号引起文件名。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-Q选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -Q
"123.txt" "124.txt" "a" "abc" "a.out" "code.c"
- 对当前目录使用
-Q与-N选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -Q -N
123.txt 124.txt a abc a.out code.c
由于直接输出本身就不带双引号,所以-N选项其实比较鸡肋,要体现其功能,甚至需要先用-Q创造双引号,再消除它。
-R选项 --recursive
功能:递归列出全部目录的内容。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-R选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -R
.:
123.txt 124.txt a abc a.out code.c
./a:
b
./a/b:
c
./a/b/c:
d
./a/b/c/d:
e
./a/b/c/d/e:
f
./a/b/c/d/e/f:
./abc:
1.txt 2.txt 3.txt 4.txt 5.txt
当使用-R选项后,把从当前目录开始往下的所有目录都展示了出来,甚至把每个目录都作为根进行了一次递归。
-S选项 --sort=size
功能:按文件大小而不是字典序排序目录内容,大文件靠前。
使用示例:
- 对照组:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls
123.txt 124.txt a abc a.out code.c
- 对当前目录使用
-S选项:
[root@iZf8zdrs09p97o9xxgii5hZ lsInstruction]# ls -S
a.out a abc code.c 123.txt 124.txt
浙公网安备 33010602011771号