在Linux下,想必大家对ls命令都非常熟悉了。梁旭相信,只要是Linux工程师,每天都会离不开这个命令,每天都会用到几百次。不过,除了ls-l,你还知道ls还有哪些高级用法呢?许亮今天就给大家介绍一下ls命令的8个高级用法。如果我们有这样一个文件夹,我们使用tree命令查看其目录结构:用法一:列出/home/alvin/test_dir目录下所有文件和目录的详细信息命令:ls-lR/home/alvin/test_dir/结果:[alvin@VM_0_16_centostest_dir]$ls-lR/home/alvin/test_dir//home/alvin/test_dir/:total28-rw-rw-r--1alvinalvin37Nov1809:12atb_aux.c-rw-rw-r--1alvinalvin8Nov1809:12atb_can.c-rw-rw-r--1alvinalvin24Nov1809:12atb_orch.c-rw-rw-r--1alvinalvin5Nov1809:12atb_ota.cdrwxrwxr-x2alvinalvin4096Nov1809:12include-rw-rw-r--1alvinalvin0Nov1809:12Makefiledrwxrwxr-x2alvinalvin4096Nov1809:12outputdrwxrwxr-x2alvinalvin4096Nov1809:12src/home/alvin/test_dir/include:total0-rw-rw-r--1alvinalvin0Nov1809:12a.h-rw-rw-r--1alvinalvin0Nov1809:12b.h-rw-rw-r--1alvinalvin0Nov1809:12c。h/home/alvin/test_dir/output:total0-rwxrwxr-x1alvinalvin0Nov1809:12app/home/alvin/test_dir/src:total0-rw-rw-r--1alvinalvin0Nov1809:12a.c-rw-rw-r--1alvinalvin0Nov1809:12b.c-rw-rw-r--1alvinalvin0Nov1809:12c.c在这里,你sh应该熟悉-l选项,这意味着以列表的形式显示结果。对于-R选项,表示递归处理,将指定目录下的所有文件和子目录一起处理。用法二:列出/home/alvin/test_dir目录下所有以atb开头的文件的详细内容命令:ls-latb*结果:[alvin@VM_0_16_centostest_dir]$ls-latb*-rw-rw-r--1alvinalvin37Nov1809:12atb_aux.c-rw-rw-r--1alvinalvin8Nov1809:12atb_can.c-rw-rw-r--1alvinalvin24Nov1809:12atb_orch.c-rw-rw-r--1alvinalvin5Nov1809:12atb_ota.c用法三:只列出目录子目录(1)方法一:命令ls-F/home/alvin/test_dir|grep/$Result:[alvin@VM_0_16_centostest_dir]$ls-F/home/alvin/test_dir|grep/$include/output/src/其中:-F选项表示在每个文件名后附加一个字符来描述文件的类型。“*”:表示可执行的普通文件;“/”:表示目录;“@”:表示符号链接;“|”:表示先进先出;“=”:表示一个套接字。/$其实是以/结尾的正则表达式。grep/$表示过滤掉以/结尾的结果,即子目录。(2)方法二:命令:ls-p/home/alvin/test_dir|grep/$Result:[alvin@VM_0_16_centostest_dir]$ls-p|grep/$include/output/src/其中:-p选项和-F选项类似,在每个文件名后附加一个字符以指示文件类型。(3)方法三:命令:ls-l/home/alvin/test_dir|grep"^d"结果:[alvin@VM_0_16_centostest_dir]$ls-l/home/alvin/test_dir|grep"^d"drwxrwxr-x2alvinalvin4096Nov1809:12includeddrwxrwxr-x2alvinalvin4096Nov1809:12outputdrwxrwxr-x2alvinalvin4096Nov1809:12src其中:^d也是正则表达式,表示以d开头。grep"^d"的意思是过滤掉d开头的结果,如果ls-l列出的结果第一位是d,就说明该文件是一个目录,这样就可以过滤掉子目录。(4)方法四:command:ls-d*/result:[alvin@VM_0_16_centostest_dir]$ls-d*/include/output/src/其中:-d选项表示将目录显示为文件,不显示文件。用法4:按时间顺序列出目录下的文件,越新越晚命令:ls-ltr结果:[alvin@VM_0_16_centostest_dir]$ls-lrttotal28drwxrwxr-x2alvinalvin4096Nov1809:12srcdrwxrwxr-x2alvinalvin4096Nov12-rw-rw-rw-rwxr-x2alvinalvin4096Nov12-rw-rw-rwxr-x2alvinalvin4096Nov12-rw-rw-r1alvinalvin0Nov1809:12Makefiledrwxrwxr-x2alvinalvin4096Nov1809:12include-rw-rw-r--1alvinalvin5Nov1809:12atb_ota.c-rw-rw-r--1alvinalvin24Nov1809:12atb_orch.c-rw-rw-r--1alvinalvin8Nov1809:12atb_can.c-rw-rw-r--1alvinalvin37Nov1809:12atb_aux.c其中:-t选项表示修改文件按时间排序,较新的在前。-r选项表示对结果进行反向排序。如果两者结合起来,就是按照修改时间排序,越新越晚。Usage5:SortbyfilesizeCommand:ls-lhSResult:[alvin@VM_0_16_centostest_dir]$ls-lhStotal28Kdrwxrwxr-x2alvinalvin4.0KNov1809:12includedrwxrwxr-x2alvinalvin4.0KNov1809:12outputdrwxrwxr-x2alvinalvin4.0r--1wovin1809:12outputdrwxrwxr-x2alvinalvin4.0r:Nwov1809:12outputdrwxrwxr-x2alvinalvin4.0r1alvinalvin37Nov1809:12atb_aux.c-rw-rw-r--1alvinalvin24Nov1809:12atb_orch.c-rw-rw-r--1alvinalvin8Nov1809:12atb_can.c-rw-rw-r--12.18vinalvinalb9-rw-rw-r--1alvinalvin0Nov1809:12Makefile其中:-h选项表示以可读选项显示,否则文件大小默认以字节为单位显示,例如:4873字节,你知道多少吗?添加-h选项,系统会帮你转换成k或其他单位的结果。-S选项表示按文件大小排序,文件越大越靠前。如果您希望较小的文件成为第一个,只需添加-r选项。用法六:统计当前目录下文件和目录的个数(1)统计文件个数:命令:ls-l|grep"^-"|wc-l结果:[alvin@VM_0_16_centostest_dir]$ls-l|grep"^-"|wc-l5其中:^-表示以-开头,即普通文件,ls-l|grep"^-"过滤掉普通文件,然后用wc-l统计过滤掉的普通文件个数。(2)统计目录个数:命令:ls-l|grep"^d"|wc-l结果:[alvin@VM_0_16_centostest_dir]$ls-l|grep"^d"|wc-l3其中:^d表示d开头是目录,ls-l|grep"^d"过滤出目录,然后用wc-l统计过滤出的目录个数。用法7:列出所有文件的绝对路径命令:ls|sed"s:^:`pwd`/:"结果:[alvin@VM_0_16_centostest_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(即文件所在的路径),并将文件名组合成一个绝对路径。用法8:列出当前目录下所有文件(包括隐藏文件)的绝对路径,不递归目录。在前面的用法中,不处理隐藏文件(即以.开头的文件)。如果我们需要处理隐藏文件,需要使用如下命令:find$PWD-maxdepth1|xargsls-ldResult:[alvin@VM_0_16_centostest_dir]$find$PWD-maxdepth1|xargsls-lddrwxrwxr-x5alvinalvin4096Nov1817:30/home/alvin/test_dir-rw-rw-r--1alvinalvin37Nov1809:12/home/alvin/test_dir/atb_aux.c-rw-rw-r--1alvinalvin8Nov1809:12/home/alvin/test_dir/atb_can.c-rw-rw-r--1alvinalvin24Nov1809:12/home/alvin/test_dir/atb_orch.c-rw-rw-r--1alvinalvin5Nov1809:12/home/alvin/test_dir/atb_ota.cdrwxrwxr-x2alvinalvin4096Nov1809:12/home/alvin/test_dir/include-rw-rw-r--1alvinalvin0Nov1809:12/home/alvin/test_dir/Makefiledrwxrwxr-x2alvinalvin4096Nov1809:12/home/alvin/test_dir/outputdrwxrwxr-x2alvinalvin4096Nov1809:12/home/alvin/test_dir/src其中:maxde$PthD在当前级别定义(即不递归),将查找结果作为参数传递给ls-ld,这样当前目录下的所有文件都会被路径填充。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
