ls命令常见实用用法

前言

ls(list directory contents,列出目录内容)命令是linux最常用的命令之一,通过man ls可以看到,ls的参数很多,但是本文不准备列出或者介绍这些参数的具体含义或用法,而是挑选一些实际应用中最常见的用法。

介绍之前

在介绍之前,先说明以下几点:

  • . 代表当前目录
  • ..代表上一级目录,当前目录为根目录时,..与.相同
  • 以.开头的文件为隐藏文件
  • 有类似a->b的为链接文件,在文件权限列的开头是l
  • 文件或目录名由除”/“和空字符“\0”之外的任意字符序列组成

使用ls -l命令列出文件后,有9列,每一列含义如下:

  • 1.文件权限
  • 2.连接数
  • 3.文件所有者
  • 4.文件所属组
  • 5.文件大小
  • 6.7.8列,文件最后修改时间
  • 9.文件名

下面开始介绍一些常见用法

列出当前目录文件名

1
2
3
4
5
6
7
ls   #列出当前目录文件名,不包括隐藏文件,且无法看到符号链接链向的文件

# -a ALL
ls -a #列出当前目录下所有文件,包括隐藏文件,当前目录.以及上一级目录..
ls -A #列出当前目录下所有文件,包括隐藏文件,不包括前目录.以及上一级目录..

ls -al # 列出当前目录所有文件,并且使用长格式显示所有信息,包括权限,大小,用户,时间等,与ll作用相同

以易读方式列出当前目录文件大小

相关参数-h(human-readable),如下所示,文件大小不以初始字节显示,而是以k或者M为单位显示。

1
2
3
4
5
6
7
8
ls -lh   
总用量 1.4M
drwxrwxr-x 3 hyb hyb 4.0K 10月 19 2017 Area3
drwxrwxr-x 3 hyb hyb 4.0K 10月 19 2017 home
-rw-r--r-- 1 root root 1.3K 10月 19 2017 home.zip
lrwxrwxrwx 1 hyb hyb 8 9月 13 21:19 test -> home.zip
-rw-rw-r-- 1 hyb hyb 1.3M 9月 16 15:30 test.zip
drwxrwxr-x 2 hyb hyb 4.0K 10月 19 2017 user

递归列出当前目录以及子目录的文件

相关参数-R(recursive)。

1
ls -lR

但是这样列出来的内容可读性较差,可参考后面的使用。

列出特定目录下的文件

参数与前面类似,最后再跟上目录名,例如:

1
2
ls -a test
lrwxrwxrwx 1 hyb hyb 8 9月 13 21:19 test -> home.zip

列出符合条件的文件

参数与前面类似,最后跟上条件,例如列出所有以te开头的文件:

1
2
3
ls -al te*
lrwxrwxrwx 1 hyb hyb 8 9月 13 21:19 test -> home.zip
-rw-rw-r-- 1 hyb hyb 1345047 9月 16 15:30 test.zip

按指定顺序列出文件

列出时,也可以按照指定字段排序列出,同样还可以配合前面的参数一起使用,例如:

1
2
3
ls -lt  #按文件修改时间排序
ls -alS #按文件大小排序
ls -X #按扩展名排序

计算目录下的文件或目录数量

先介绍以下文件权限列,文件权限列的开头代表了文件类型:

  • l 链接文件
  • d 目录
  • - 普通文件
    下面命令中^-的含义为,以-开头的字符,有兴趣的可以学习更多正则表达式的使用,这里不再赘述。
    1
    2
    3
    4
    ls -l | grep "^-" | wc -l  #计算当前目录下文件数量
    ls -lR | grep "^-" | wc -l #包括子目录
    ls -lR | grep "^d" | wc -l #计算当前目录下的目录数量,且不包括.和..
    ls -lR | grep "^l" | wc -l #计算当前目录下的链接数量

列出目录下部分文件

当目录下文件较多时,可以结合more命令,只显示部分,例如:

1
ls -al|more

列出目录下所有文件的完整路径

例如,列出LTE目录下所有文件完整路径,$9代表第9列,即文件名,-R,递归子目录。

1
2
3
4
5
6
7
8
ls -lR |grep '^-' |awk '{print "/LTE/" $9}'
/LTE/1.txt
/LTE/home.zip
/LTE/test.zip
/LTE/qqq.txt
/LTE/test.txt
/LTE/qqq.txt
ls -lR |grep '^-' |awk '{print "/LTE/" $1 " " $9 }' ##打印第一列和第九列

^-也可以改为以下几种:

  • ^l 列出目录下所有链接
  • ^[-l] 列出目录下所有文件和链接
  • ^d 列出目录下所有目录

总结

ls命令是linux最常见的命令之一,以上用法在实际应用中基本能够满足日常需求,更多参数或使用方法可使用命令man ls查看。

守望 wechat
关注公众号[编程珠玑]获取更多原创技术文章
出入相友,守望相助!