Linux常用命令系列——文件和目录操作命令(ls)

时间:2021-05-31 17:47:16

文章目录:

 

ls命令

        ls(可以理解为list的缩写)命令,其功能是显示目录下的内容及其相关属性信息,在Linux中是使用率较高的命令。

1.语法

        ls [选项] [参数]

2.选项

    • -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出);
    • -A:显示除隐藏文件“.”和“..”以外的所有文件列表;
    • -C:多列显示输出结果。这是默认选项;
    • -l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
    • -F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
    • -b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
    • -c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
    • -d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
    • -f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
    • -i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
    • --file-type:与“-F”选项的功能相同,但是不显示“*”;
    • -k:以KB(千字节)为单位显示文件大小;
    • -l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
    • -m:用“,”号区隔每个文件和目录的名称;
    • -n:以用户识别码和群组识别码替代其名称;
    • -r:以文件名反序排列并输出目录内容列表;
    • -s:显示文件和目录的大小,以区块为单位;
    • -t:用文件和目录的更改时间排序;
    • -L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
    • -R:递归处理,将指定目录下的所有文件及子目录一并处理;
    • --full-time:列出完整的日期与时间;
    • --color[=WHEN]:使用不同的颜色高亮显示不同类型的。

3.参数

        目录:指定要显示列表的目录,也可以是具体的文件。

4.实例

4.1 显示当前目录下非隐藏文件与目录

[root@localhost data]# ls
1.sh dir1 dir2 dir3 file1.txt file2.txt file3.txt

4.2 显示当前目录下包括隐藏文件在内的所有文件列表

[root@localhost data]# ls -a
. ..
1.sh dir1 dir2 dir3 file1.txt file2.txt file3.txt .file4

4.3 输出长格式列表

        可以简单理解为将文件或目录以一行一个的方式显示出来。

[root@localhost data]# ls -1
1.sh
dir1
dir2
dir3
file1.txt
file2.txt
file3.txt

4.4 列出文件和文件夹的详细信息

        ls -l也可简写为ll。

[root@localhost data]# ls -l
total
12
-rwxr-xr-x 1 root root 0 Feb 18 23:52 1.sh
drwxr
-xr-x 2 root root 4096 Feb 9 19:03 dir1
drwxr
-xr-x 2 root root 4096 Feb 9 18:08 dir2
drwxr
-xr-x 2 root root 4096 Feb 9 18:08 dir3
-rw-r--r-- 1 root root 0 Feb 9 19:02 file1.txt
-rw-r--r-- 1 root root 0 Feb 9 19:03 file2.txt
-rw-r--r-- 1 root root 0 Feb 9 18:10 file3.txt

4.5 显示文件的inode信息

        索引节点(index inode简称为“inode”)是Linux中一个特殊的概念,具有相同的索引节点号的两个文本本质上是同一个文件(除文件名不同外)。

[root@localhost data]# ls -li
total
12
916490 -rwxr-xr-x 1 root root 0 Feb 18 23:52 1.sh
919809 drwxr-xr-x 2 root root 4096 Feb 9 19:03 dir1
919810 drwxr-xr-x 2 root root 4096 Feb 9 18:08 dir2
919811 drwxr-xr-x 2 root root 4096 Feb 9 18:08 dir3
919817 -rw-r--r-- 1 root root 0 Feb 9 19:02 file1.txt
919818 -rw-r--r-- 1 root root 0 Feb 9 19:03 file2.txt
919814 -rw-r--r-- 1 root root 0 Feb 9 18:10 file3.txt

4.6 水平输出文件列表

[root@localhost data]# ls -m
1.sh, dir1, dir2, dir3, file1.txt, file2.txt, file3.txt

4.7 用文件和目录的更改时间排序

[root@localhost data]# ls -t
1.sh file2.txt dir1 file1.txt file3.txt dir2 dir3

4.8 显示递归文件

[root@localhost data]# ls -R
.:
1.sh dir1 dir2 dir3 file1.txt file2.txt file3.txt

.
/dir1:
test

.
/dir2:

.
/dir3:

4.9 打印文件的UID和GID

[root@localhost data]# ls -n
total
12
-rwxr-xr-x 1 0 0 0 Feb 18 23:52 1.sh
drwxr
-xr-x 2 0 0 4096 Feb 9 19:03 dir1
drwxr
-xr-x 2 0 0 4096 Feb 9 18:08 dir2
drwxr
-xr-x 2 0 0 4096 Feb 9 18:08 dir3
-rw-r--r-- 1 0 0 0 Feb 9 19:02 file1.txt
-rw-r--r-- 1 0 0 0 Feb 9 19:03 file2.txt
-rw-r--r-- 1 0 0 0 Feb 9 18:10 file3.txt

4.10 列出可读文件和文件夹详细信息

[root@localhost data]# ls -lh
total 12K
-rwxr-xr-x 1 root root 0 Feb 18 23:52 1.sh
drwxr
-xr-x 2 root root 4.0K Feb 9 19:03 dir1
drwxr
-xr-x 2 root root 4.0K Feb 9 18:08 dir2
drwxr
-xr-x 2 root root 4.0K Feb 9 18:08 dir3
-rw-r--r-- 1 root root 0 Feb 9 19:02 file1.txt
-rw-r--r-- 1 root root 0 Feb 9 19:03 file2.txt
-rw-r--r-- 1 root root 0 Feb 9 18:10 file3.txt

4.11 显示目录信息

[root@localhost data]# ls -ld dir1
drwxr
-xr-x 2 root root 4096 Feb 9 19:03 dir1

4.12 以文件名反序排列

[root@localhost data]# ls -r
file3.txt file2.txt file1.txt dir3 dir2 dir1
1.sh

4.13 查找最近更新过的文件

[root@localhost data]# ls -lrt|tail -1
-rwxr-xr-x 1 root root 0 Feb 18 23:52 1.sh

4.14 显示完整时间属性

[root@localhost data]# ls -l --time-style=long-iso
total
12
-rwxr-xr-x 1 root root 0 2018-02-18 23:52 1.sh
drwxr
-xr-x 2 root root 4096 2018-02-09 19:03 dir1
drwxr
-xr-x 2 root root 4096 2018-02-09 18:08 dir2
drwxr
-xr-x 2 root root 4096 2018-02-09 18:08 dir3
-rw-r--r-- 1 root root 0 2018-02-09 19:02 file1.txt
-rw-r--r-- 1 root root 0 2018-02-09 19:03 file2.txt
-rw-r--r-- 1 root root 0 2018-02-09 18:10 file3.txt
    • --time-style可选的参数值有如下几个,如full-iso、long-iso、iso、locale。默认值是locale。
    • 在生产场景中经常会遇到同一目录下的文件及目录时间的显示不一致的问题,所以需要用ls -l --time-style=long-iso来调整,如果觉得参数太多不好记,则可以设置一个别名管理。
    • 值得一提的是,执行ls -l等命令时,默认显示的是文件最后一次的修改时间(如果是新文件那么就是创建时间了)。
    • ls --full-time用于显示完整的时间,等同于ls -l --time-style=full-iso。

4.15 显示文件或目录的访问时间

[root@localhost data]# ls -l --time-style=long-iso --time=atime
total
12
-rwxr-xr-x 1 root root 0 2018-02-18 23:52 1.sh
drwxr
-xr-x 2 root root 4096 2018-02-18 23:56 dir1
drwxr
-xr-x 2 root root 4096 2018-02-18 23:56 dir2
drwxr
-xr-x 2 root root 4096 2018-02-18 23:56 dir3
-rw-r--r-- 1 root root 0 2018-02-09 19:02 file1.txt
-rw-r--r-- 1 root root 0 2018-02-09 19:03 file2.txt
-rw-r--r-- 1 root root 0 2018-02-09 18:10 file3.txt

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

 4.16 按照特殊字符对文件进行分类

[root@localhost data]# ls -F
1.sh* dir1/ dir2/ dir3/ file1.txt file2.txt file3.txt

5.ls -F命令的扩展知识

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

(1)「*」表示可执行的普通文件

[root@localhost data]# ls -F
1.sh* dir1/ dir2/ dir3/ file1.txt file2.txt file3.txt

(2)「/」表示目录

[root@localhost data]# ls -F
1.sh* dir1/ dir2/ dir3/ file1.txt file2.txt file3.txt

(3)「=」表示套接字(sockets)

[root@localhost data]# find / -type s -exec ls -lF {} \;
srwxrwxrwx
1 root root 0 Feb 9 17:09 /var/run/dbus/system_bus_socket=
srwxr
-xr-x 1 root root 0 Feb 9 17:09 /var/run/portreserve/socket=
srw
-rw-rw- 1 root root 0 Feb 9 17:09 /var/run/abrt/abrt.socket=
srw
-rw-rw- 1 root root 0 Feb 9 17:08 /var/run/vmware/guestServicePipe=
srwxrwxrwx
1 root root 0 Feb 9 17:09 /var/run/cups/cups.sock=
srw
-rw-rw- 1 root root 0 Feb 9 17:09 /var/run/sdp=
srw
-rw-rw- 1 root root 0 Feb 9 17:09 /var/run/rpcbind.sock=
srw
-rw-rw- 1 root root 0 Feb 9 17:09 /var/run/acpid.socket=

(4)「|」表示FIFOS

[root@localhost data]# find / -type p -exec ls -lF {} \;
prw
------- 1 root root 0 Feb 9 17:09 /var/run/autofs.fifo-net|
prw
------- 1 root root 0 Feb 9 17:09 /var/run/autofs.fifo-misc|

(5)「@」表示符号链接

[root@localhost data]# ls -lF /bin/sh
lrwxrwxrwx.
1 root root 4 Dec 5 22:21 /bin/sh -> bash*

        还有个类似的选项「-p」,它的功能比较简单,只是在目录后面加上「/」。

6.ls 命令输出内容的属性

[root@localhost data]# ls -lhi
total 12K
916490 -rwxr-xr-x 1 root root 0 Feb 18 23:52 1.sh
919809 drwxr-xr-x 2 root root 4.0K Feb 9 19:03 dir1
919810 drwxr-xr-x 2 root root 4.0K Feb 9 18:08 dir2
919811 drwxr-xr-x 2 root root 4.0K Feb 9 18:08 dir3
919817 -rw-r--r-- 1 root root 0 Feb 9 19:02 file1.txt
919818 -rw-r--r-- 1 root root 0 Feb 9 19:03 file2.txt
919814 -rw-r--r-- 1 root root 0 Feb 9 18:10 file3.txt

    上述命令结果中各列的含义具体如下:

    • 第一列:inode 索引节点编号。
    • 第二列:文件类型及权限(第一个字符为类型,后 9 个字符为文件权限符号)。
    • 第三列:硬链接个数(详细请参看 ln 命令的讲解)。
    • 第四列:文件或目录所属的用户(属主)。
    • 第五列:文件或目录所属的组。
    • 第六列:文件或目录的大小。
    • 第七、八、九列:文件或目录的修改时间。
    • 第十列:实际的文件名或目录名。