ls: 显示目下的内容及相关属性信息
【功能说明】
ls 命令可以理解为英文单词 “list” 的缩写,其功能是列出目录的内容及其内容属性信息(list directory contents)。该命令有点类似于DOS系统下的dir命令,有趣的是,Linux下其实也有dir命令,但是我们更习惯于使用ls命令。
【语法格式】
1 ls [option] [file]2 ls 【选项】 【文件或者目录】
提示说明:
1) ls命令以及后面的选项和文件,每个元素之间都要至少要有一个空格。
2) 命令后面的选项和目录文件可以省略,表示查看当前路径的文件信息
【命令参数说明】
参数选项 | 解释说明 |
-l | 使用长格式列出文件及目录信息 |
-a | 显示目录下的所有文件,包括以 “.” 字符开始的隐藏文件 |
-t | 根据最后的修改时间(mtime)排序,默认是以文件名排序 |
-r | 依相反次序排序 |
-F | 在条目后加文件类型的指示符号(*、/、=、@、|,其中的一个) |
-P | 只在目录后面加上 “/” |
-i | 显示文件或目录的inode节点信息 |
-d | 当遇到目录时,列出目录本身而非目录内的文件,并且不跟随符号链接 |
-h | 以人类可读的信息显示文件或目录大小,如1kb、1M、1G等显示格式 |
-S | 根据文件大小排序 |
-R | 递归列出所有子目录 |
-x | 逐行列出项目而不是逐栏列出 |
-X | 根据扩展名排序 |
-c | 根据状态改变时间(ctime)排序 |
-u | 根据最后访问时间(atime)排序 |
--color={never,always,auto} | 不同的文件类型显示不同的颜色参数,never表示不显示,always表示总是显示,auto表示自动显示 |
--full-time | 以完整的时间格式输出 |
--time-style={full-iso,long-ios,ios,locale} | 以不同的时间格式输出,long-iso效果最好 |
--time={atime,ctime} | 按不同的时间属性输出,atime表示按访问时间,ctime表示按改变权限属性时间,如果不加此参数则默认认为最后的修改时间。 |
【使用范例】
在开始范例讲解之前,需要先做一些准备,顺便整合一下前面使用的命令。
1 [root@test-1 ansible]# mkdir -p /test 2 [root@test-1 ansible]# cd /test/ 3 [root@test-1 test]# touch file{1..5}.txt 4 [root@test-1 test]# mkdir -p dir{1..5} 5 [root@test-1 test]# tree 6 . 7 ├── dir1 8 ├── dir2 9 ├── dir310 ├── dir411 ├── dir512 ├── file1.txt13 ├── file2.txt14 ├── file3.txt15 ├── file4.txt16 └── file5.txt17 18 5 directories, 5 files
1.基础范例
1.1 案例1:直接指向ls命令,不带任何参数。
1 [root@test-1 test]# ls2 dir1 dir2 dir3 dir4 dir5 file1.txt file2.txt file3.txt file4.txt file5.txt
1.2 案例2:使用-a参数显示所有文件,特别是隐藏文件。
1 [root@test-1 test]# touch .file6.txt #在创建一个隐藏文件,在linux系统中“.”(点号)开头的文件就是隐藏文件2 [root@test-1 test]# ls3 dir1 dir2 dir3 dir4 dir5 file1.txt file2.txt file3.txt file4.txt file5.txt4 [root@test-1 test]# ls -a5 . .. dir1 dir2 dir3 dir4 dir5 file1.txt file2.txt file3.txt file4.txt file5.txt .file6.txt6 #提示:7 #加了-a参数,就会把以“.”(点号)开头的内容显示出来了,这里显示的第一个点号,表示当前目录,即test目录本身,而两个点号则表示当前目录的上级目录,此处就代表根目录了。有关一个点、两个点的知识,在后面的ln命令中会有详细讲解8 [root@test-1 test]# ls -A #列出所有文件,包括隐藏文件,但不包括 “.” 与 “..”这两个目录9 dir1 dir2 dir3 dir4 dir5 file1.txt file2.txt file3.txt file4.txt file5.txt .file6.txt
1.3 案例3:使用-l参数显示详细信息
[root@test-1 test]# ls -l #此处的时间属性列默认显示的是文件的最后一次修改时间total 0drwxr-xr-x 2 root root 6 Sep 21 07:06 dir1drwxr-xr-x 2 root root 6 Sep 21 07:06 dir2drwxr-xr-x 2 root root 6 Sep 21 07:06 dir3drwxr-xr-x 2 root root 6 Sep 21 07:06 dir4drwxr-xr-x 2 root root 6 Sep 21 07:06 dir5-rw-r--r-- 1 root root 0 Sep 21 07:06 file1.txt-rw-r--r-- 1 root root 0 Sep 21 07:06 file2.txt-rw-r--r-- 1 root root 0 Sep 21 07:06 file3.txt-rw-r--r-- 1 root root 0 Sep 21 07:06 file4.txt-rw-r--r-- 1 root root 0 Sep 21 07:06 file5.txt#提示: #说明:这个-l参数是最常用的参数了,意思是用长格式列出目录下的文件类型、权限、连接数、属主、属组及创建修改时间的信息。这里每个列的属性含义都需要熟练掌握,后文会详细说明这些属性信息
可能有人已经注意到了,创建或修改时间的格式没有年份的信息,那么如何显示时间全部信息呢,请看案例4
1.4 案例4:显示完整时间属性的参数 --time-style=long-iso
1 [root@test-1 test]# ls -l --time-style=long-iso #以long-iso方式显示时间 2 total 0 3 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir1 4 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir2 5 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir3 6 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir4 7 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir5 8 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file1.txt 9 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file2.txt10 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file3.txt11 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file4.txt12 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file5.txt13 14 #提示:这样的时间格式看起来是不是总让人感到心情舒畅呢,关于--time-style的其他可选参数,请大家自行测试
对于上面的命令,说明如下:
1)--time-style 可选的参数值有如下几个,如full-iso、long-iso、iso、locale。默认值是locale
2)在生产场景中经常会遇到同一个目录下的文件及目录时间的显示不一致的问题,所以需要使用 ls -l --time-style=long-iso 来调整,如果觉得参数太多不好记,则可以设置一个别名管理,见后文的alias命令
3)值得一提的是,执行ls -l等命令时,默认显示的是文件最后一次的修改时间(如果是新文件那么就是创建时间了)
4)ls --full-time用于显示完整时间,等同于ls -l --time-style=full-iso
既然ls -l输出结果的时间属性列为修改时间,那么能否改成其他的时间,例如:显示最后一次文件访问时间,这当然也是可以的,具体请参考案例5
1.5 案例5:执行ls命令,带显示内容的访问时间属性的参数
1 [root@test-1 test]# stat file1.txt #显示文件的属性及状态信息, 2 File: ‘file1.txt’ 3 Size: 0 Blocks: 0 IO Block: 4096 regular empty file 4 Device: fd00h/64768d Inode: 100825163 Links: 1 5 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) 6 Access: 2019-09-21 07:06:01.923683869 -0400 #这里就是文件的访问时间,是我们现在需要关注的 7 Modify: 2019-09-21 07:06:01.923683869 -0400 8 Change: 2019-09-21 07:06:01.923683869 -0400 9 Birth: -10 [root@test-1 test]# date #查看当前系统时间11 Sat Sep 21 07:51:47 EDT 201912 [root@test-1 test]# cat file1.txt #查看文件内容即表示访问了文件,13 [root@test-1 test]# stat file1.txt #重新查看文件的访问时间14 File: ‘file1.txt’15 Size: 0 Blocks: 0 IO Block: 4096 regular empty file16 Device: fd00h/64768d Inode: 100825163 Links: 117 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)18 Access: 2019-09-21 07:52:12.945530547 -0400 #可以发现file1.txt的访问时间已经发生了变化19 Modify: 2019-09-21 07:06:01.923683869 -040020 Change: 2019-09-21 07:06:01.923683869 -040021 Birth: -22 [root@test-1 test]# ls -l --time-style=long-iso --time=atime #增加--time=atime参数,显示访问时间23 total 024 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir125 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir226 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir327 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir428 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir529 -rw-r--r-- 1 root root 0 2019-09-21 07:52 file1.txt #文件的时间列确实发生了改变,是前面的访问的时间无疑30 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file2.txt31 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file3.txt32 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file4.txt33 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file5.txt34 [root@test-1 test]# ls -l --time-style=long-iso35 total 036 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir137 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir238 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir339 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir440 drwxr-xr-x 2 root root 6 2019-09-21 07:06 dir541 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file1.txt #这里是文件的默认修改时间列42 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file2.txt43 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file3.txt44 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file4.txt45 -rw-r--r-- 1 root root 0 2019-09-21 07:06 file5.txt
提示:通过上面实践,可以得出结论了,--time=atime显示的确实是访问时间,而非默认的修改时间。
对于上的命令,需要说明如下两点
1)与之相关命令还有ls -l --time-style=long-iso --time=ctime,用于显示文件改变的时间
2)有关文件时间列及mtime、atime、ctime的知识,touch命令时已经写出来了
1.6 案例6:执行ls 命令,带 -F参数(这一点和tree命令有点类似)
1 [root@test-1 test]# ls -F # -F 我们可以清晰的看到所有的目录的结尾都被加上了斜线 "/" 2 dir1/ dir2/ dir3/ dir4/ dir5/ file1.txt file2.txt file3.txt file4.txt file5.txt 3 [root@test-1 test]# ls -F |grep / #过滤目录 4 dir1/ 5 dir2/ 6 dir3/ 7 dir4/ 8 dir5/ 9 [root@test-1 test]# ls -F |grep -v / #排除所有目录,过滤出文件10 file1.txt11 file2.txt12 file3.txt13 file4.txt14 file5.txt