[总结]Linux 下 ls 命令的高级用法
1. 用法1:列出/home/alvin/test_dir目录下所有文件及目录的详细资料
命令:
1 |
ls -lR /home/alvin/test_dir/ |
结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[alvin@VM_0_16_centos test_dir]$ ls -lR /home/alvin/test_dir/ /home/alvin/test_dir/: total 28 -rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c -rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 atb_ota.c drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 Makefile drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src/home/alvin/test_dir/include: total 0 -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 a.h -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 b.h -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 c.h /home/alvin/test_dir/output: total 0 -rwxrwxr-x 1 alvin alvin 0 Nov 18 09:12 app /home/alvin/test_dir/src: total 0 -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 a.c -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 b.c -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 c.c |
在这里,-l选项大家应该比较熟悉,是以列表的形式显示结果的意思。而对于 -R选项,意思是递归处理,将指定目录下的所有文件及子目录一并处理。
2. 用法2:列出/home/alvin/test_dir目录下以atb开头的所有文件的详细内容
命令:
1 |
ls -l atb* |
结果:
1 2 3 4 5 |
[alvin@VM_0_16_centos test_dir]$ ls -l atb* -rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c -rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 atb_ota.c |
用法3:只列出目录下的子目录
方法1:
命令:
1 |
ls -F /home/alvin/test_dir | grep /$ |
结果:
1 2 3 4 |
[alvin@VM_0_16_centos test_dir]$ ls -F /home/alvin/test_dir | grep /$ include/ output/ src/ |
其中:-F选项表示在每个文件名后附上一个字符以说明改文件的类型。
“*”:表示可执行的普通文件;“/”:表示目录;“@”:表示符号链接;“|”:表示FIFOs;“=”:表示套接字。
/$其实是一个正则表达式,表示以/结尾。grep/$表示过滤出以/结尾的结果,也就是子目录。
方法2:
命令:
1 |
ls -p /home/alvin/test_dir | grep /$ |
结果:
1 2 3 4 |
[alvin@VM_0_16_centos test_dir]$ ls -p | grep /$ include/ output/ src/ |
其中:-p选项与-F选项类似,也是在每个文件名后附上一个字符以说明改文件的类型。
方法3:
命令:
1 |
ls -l /home/alvin/test_dir | grep "^d" |
结果:
1 2 3 4 |
[alvin@VM_0_16_centos test_dir]$ ls -l /home/alvin/test_dir | grep "^d" drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src |
其中:^d也是一个正则表达式,表示以d开头。grep “^d”表示过滤出以d开头的结果,而ls -l所列出来的结果,首位如果是d的话,表示这个文件是个目录,这样就可以过滤出子目录了。
方法4:
命令:
1 |
ls -d */ |
结果:
1 2 |
[alvin@VM_0_16_centos test_dir]$ ls -d */ include/ output/ src/ |
其中:-d选项表示将目录象文件一样显示,而不显示其下的文件。
3. 用法4:按时间顺序列出目录下的文件,越新越排后面。
命令:
1 |
ls -ltr |
结果:
1 2 3 4 5 6 7 8 9 10 |
[alvin@VM_0_16_centos test_dir]$ ls -lrt total 28 drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 Makefile drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include -rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 atb_ota.c -rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c |
其中:-t选项表示以文件修改时间排序,越新的越靠前。-r选项表示对结果进行反向排序,二者结合的话表示以修改时间排序,越新的越靠后。
4. 用法5:以文件大小进行排序
命令:
1 |
ls -lhS |
结果:
1 2 3 4 5 6 7 8 9 10 |
[alvin@VM_0_16_centos test_dir]$ ls -lhS total 28K drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 include drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 output drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 src -rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c -rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 atb_ota.c -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 Makefile |
其中:-h选项表示以可读选项显示,否则文件大小是默认以字节数显示,比如:4873字节,你知道是多少吗?加了-h选项系统就帮你换算成以k或者其它单位的结果。
-S选项表示以文件大小进行排序,文件越大越靠前。想要文件小者靠前的话,加个-r选项就行。
5. 用法6:统计当前目录下的文件数和目录数
统计文件数:
命令:
1 |
ls -l | grep "^-" | wc -l |
结果:
1 2 |
[alvin@VM_0_16_centos test_dir]$ ls -l | grep "^-" | wc -l 5 |
其中:^-表示以-开头,即普通文件,ls -l | grep “^-” 过滤出普通文件,再用 wc -l统计过滤出的普通文件的个数。
统计目录数:
命令:
1 |
ls -l | grep "^d" | wc -l |
结果:
1 2 |
[alvin@VM_0_16_centos test_dir]$ ls -l | grep "^d" | wc -l 3 |
其中:^d表示以d开头,即目录,ls -l | grep “^d”过滤出目录,再用wc -l统计过滤出的目录的个数。
6. 用法7:列出所有文件的绝对路径
命令:
1 |
ls | sed "s:^:`pwd`/:" |
结果:
1 2 3 4 5 6 7 8 9 |
[alvin@VM_0_16_centos test_dir]$ ls | sed "s:^:`pwd`/:" /home/alvin/test_dir/atb_aux.c /home/alvin/test_dir/atb_can.c /home/alvin/test_dir/atb_orch.c /home/alvin/test_dir/atb_ota.c /home/alvin/test_dir/include /home/alvin/test_dir/Makefile /home/alvin/test_dir/output /home/alvin/test_dir/src |
其中:sed “s:^:
pwd
/:”表示在行首增加pwd
(即文件所在路径),与文件名组合成绝对路径。
7. 用法8:列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归
在上一个用法里,对于隐藏文件(即以 . 开头的文件)是不作处理的,如果我们需要对隐藏文件也作处理的话,就需要使用下面这个命令:
1 |
find $PWD -maxdepth 1 | xargs ls -ld |
结果:
1 2 3 4 5 6 7 8 9 10 |
[alvin@VM_0_16_centos test_dir]$ find $PWD -maxdepth 1 | xargs ls -ld drwxrwxr-x 5 alvin alvin 4096 Nov 18 17:30 /home/alvin/test_dir -rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 /home/alvin/test_dir/atb_aux.c -rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 /home/alvin/test_dir/atb_can.c -rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 /home/alvin/test_dir/atb_orch.c -rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 /home/alvin/test_dir/atb_ota.c drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 /home/alvin/test_dir/include -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 /home/alvin/test_dir/Makefile drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 /home/alvin/test_dir/output drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 /home/alvin/test_dir/src |
其中:find $PWD -maxdepth 1限定了在当前层级(即不递归),再对find结果传递给ls -ld作参数,这样就将当前目录下的所有文件补齐了所在路径。
方法9: 找到所有文件大小大于阈值的文件
工作中经常是因为某个程序的日志占满了空间。当发现磁盘满了以后不要着急,使用以下命令从根目录开始排除查找哪个文件夹最大:
1 |
du --max-depth=1 |
找到最大的目录后,进入目录再执行上面的命令,逐步就找到大空间的文件夹了,如果是日志文件删除了就可以了。
如:查看所有大于5mb的文件
1 |
find . -type f -size +50000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }' |
结果:
1 2 3 4 5 6 7 8 9 10 |
./boot/initramfs-0-rescue-6b6e170fa601465481830eda32bbca3a.img: 50M ./proc/kcore: 128T find: ‘./proc/4856/task/4856/fdinfo/6’: No such file or directory find: ‘./proc/4856/fdinfo/5’: No such file or directory ./sys/devices/pci0000:00/0000:00:0f.0/resource1_wc: 128M ./sys/devices/pci0000:00/0000:00:0f.0/resource1: 128M ./var/lib/docker/overlay2/273aa3d673a297f76a95de521dde2faedb3dd5da59974b5807712c77212dc479/diff/usr/bin/dockerd: 63M ./var/lib/docker/overlay2/b40f9d5ae339f2e0ad1698182a3a43611e5fd0b9732645cdfc57aa4c185071b9/diff/usr/bin/dockerd: 59M ./var/lib/docker/overlay2/f283aca556ad125bbdb94eb1414f13ba89ecb3a7d8aee2e55cf756c6ae642227/diff/usr/bin/dockerd: 59M ./var/lib/docker/overlay2/898ca879eb73b49efa56570e4c6d80e4cc8f0695c1f9e3507b8a2b459185b165/merged/usr/bin/dockerd: 59M |
[source]8 个 Linux 下 ls 命令的高级用法