zoukankan      html  css  js  c++  java
  • 巧用ls命令

    在Linux下,ls这个命令大家肯定太熟悉了,笔者相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次。

    但是,除了ls -l以外,你还知ls的哪些高级用法呢?笔者今天为大家介绍ls命令的8种高级用法。

    假如我们有这样的一个文件夹,我们用tree命令查看它的目录结构:

    用法1:列出/home/alvin/test_dir目录下所有文件及目录的详细资料
    命令:

    ls -lR /home/alvin/test_dir/
    

    结果:

    [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:列出/home/alvin/test_dir目录下以atb开头的所有文件的详细内容
    命令:

    ls -l atb*
    

    结果:

    [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:

    命令:

    ls -F /home/alvin/test_dir | grep /$
    

    结果:

    [alvin@VM_0_16_centos test_dir]$ ls -F /home/alvin/test_dir | grep /$
    include/
    output/
    src/
    

    其中:-F选项表示在每个文件名后附上一个字符以说明改文件的类型。

    “*”:表示可执行的普通文件;“/”:表示目录;“@”:表示符号链接;“|”:表示FIFOs;“=”:表示套接字。

    /其实是一个正则表达式,表示以/结尾。grep/表示过滤出以/结尾的结果,也就是子目录。

    方法2:

    命令:

    ls -p /home/alvin/test_dir | grep /$
    

    结果:

    [alvin@VM_0_16_centos test_dir]$ ls -p | grep /$
    include/
    output/
    src/
    

    其中:-p选项与-F选项类似,也是在每个文件名后附上一个字符以说明改文件的类型。

    方法3:

    命令:

    ls -l /home/alvin/test_dir | grep "^d"
    

    结果:

    [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:

    命令:

    ls -d */
    

    结果:

    [alvin@VM_0_16_centos test_dir]$ ls -d */
    include/  output/  src/
    

    其中:-d选项表示将目录象文件一样显示,而不显示其下的文件。

    用法4:按时间顺序列出目录下的文件,越新越排后面。
    命令:

    ls -ltr
    

    结果:

    [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选项表示对结果进行反向排序,二者结合的话表示以修改时间排序,越新的越靠后。

    用法5:以文件大小进行排序
    命令:

    ls -lhS
    

    结果:

    [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选项就行。

    用法6:统计当前目录下的文件数和目录数
    统计文件数:

    命令:

    ls -l | grep "^-" | wc -l
    

    结果:

    [alvin@VM_0_16_centos test_dir]$ ls -l | grep "^-" | wc -l
    5
    

    其中:^-表示以-开头,即普通文件,ls -l | grep "^-" 过滤出普通文件,再用 wc -l统计过滤出的普通文件的个数。

    统计目录数:

    命令:

    ls -l | grep "^d" | wc -l
    

    结果:

    [alvin@VM_0_16_centos test_dir]$ ls -l | grep "^d" | wc -l
    3
    

    其中:^d表示以d开头,即目录,ls -l | grep "^d"过滤出目录,再用wc -l统计过滤出的目录的个数。

    用法7:列出所有文件的绝对路径
    命令:

    ls | sed "s:^:`pwd`/:"
    

    结果:

    [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(即文件所在路径),与文件名组合成绝对路径。

    用法8:列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归
    在上一个用法里,对于隐藏文件(即以 . 开头的文件)是不作处理的,如果我们需要对隐藏文件也作处理的话,就需要使用下面这个命令:

    find $PWD -maxdepth 1 | xargs ls -ld
    

    结果:

    [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作参数,这样就将当前目录下的所有文件补齐了所在路径。

    来源:CSDN

  • 相关阅读:
    # ConfigureAwait常见问题解答
    # Oracle 常用语句
    # C# 中的Task创建指南
    ASP.NET Core Web API 跨域(CORS) Cookie问题
    Order by 优化
    VMware 安装 CentOS 7
    ThreadLocal 内存泄漏问题深入分析
    Zookeeper 如何保证分布式系统数据一致性
    Redis 5.0 安装
    Redisson 实现分布式锁的原理分析
  • 原文地址:https://www.cnblogs.com/leon1124/p/14039727.html
Copyright © 2011-2022 走看看