ls 命令是 Linux 下最常用的命令之一,用来查询目录下的内容(list directory contents)。本文将介绍其基本的用法和一些典型的用例。笔者使用的测试环境为 ubuntu 16.04。

基本输出

直接在命令行中输入 ls 并回车。这是最精简的用法,因为我们省略了所有的选项和参数,输出的结果是当前目录下的文件名和目录名:

文件名和目录名称被按照字母序混排在一起,以列为单位从左到右排列。需要注意的是此时的输出并不包含隐藏文件和隐藏的目录。
如果想要调整输出结果的排序方式,可以使用 -r 选项来逆序输出的顺序:

$ ls -r

此时以 w 开头的名称排在了第一个位置。-r 选项的含义为把排序方式颠倒,所以在使用其它方式排序后也可以使用这个选项来颠倒排序的结果。

显示隐藏文件

在 Linux 中以 . 号(dot)开头的目录和文件被理解为隐藏文件。ls 命令默认不会列出这些文件,除非你指定了 -a 选项。-a 选项其实是显示所有的文件,包含隐藏的文件和目录。在用户的家目录下试试 ls -a 命令,你会发现有不少的隐藏目录和隐藏文件呢!

上图中以 . 开头的都是隐藏目录或文件。

使用长格式显示更多信息

长格式能够提供更多的信息,比如文件和目录的大小,最后更新的时间,所有者及其权限。使用 -l (小写的字母L) 选项可以输出长格式的信息:

此时每行显示一个文件或者目录的信息。第一个字母描述文件类型:- 为一般文件,d 为目录,l 为符号链接。接下来的 9 个字符说明文件权限的信息:针对每个用户、组以及除此以外的其它人。r 表示读取,w 表示写入,x 表示执行,如果未提供权限则是 -。

第二栏包含链接计数。第三栏和第四栏分别显示所有者与所属组。

第五栏则是以字节为单位显示的文件大小。在 Linux 命令中,涉及到文件大小的地方,一般默认是以字节为单位显示的。这样可读性就不是很好。所以有了 -h 选项!这个选项的全称是 --human-readable(给人读的)。也就是以 K, M, G 等单位来显示文件的大小:

在应用 l 选项的同时应用 h 选项,会以合适的单位显示文件大小,比如上图中已经变成以 K 为单位显示了。

接下来的三栏是最后修改时的时间戳。显示的顺序为月,日,年。但是仔细观察你会发现只有一些行在年的位置显示了年份(2017),其它的行在这个位置显示的都是一个时间。这里有一个规则:最后修改时间如果超过六个月才显示为年份,六个月以内的则显示为时间。如果你想要得到更精确的时间,可以同时使用 --full-time 选项:

此时显示的时间精度为百万分之一秒,并且会显示出时区的信息。

关于时间戳我们还需要知道另外一点,默认在这里显示的时间是 mtime。如果我们需要显示 atime 或者是 ctime 该怎么办?此时就要用到 --time 选项来设置时间戳显示的时间类型:

对比前面的图片,设置为 atime 后,显示的时间信息发生了明显的变化。

通配符

在 ls 命令中使用通配符有时会产生一些比较奇怪的结果,接下来笔者将尝试解释通配符在 ls 命令中的使用方式。
在 ls 命令中使用 * 和 ?等通配符时首先发生的是 shell 的展开!
Bash 会扫描命令行中的每一个单词,如果在其中发现了 *, ? 或者是 [,那么这个单词就被认为是一个模式。然后用匹配的以字母序排列的文件名称列表替换这个模式。说简单点,在 ls 命令执行前,Bash 会进行模式匹配并进行替换。然后 ls 使用替换后的参数执行命令。举个例子:

$ ls test*

如果当前目录中有一个名为 test 的目录和一个名为 testsql 的目录,那么 Bash 替换完成后命令是这个样子:

$ ls test testsql

所以上面的命令会列出这两个目录下的所有文件:

再来个例子,在用户的家目录下执行下面的命令:

$ ls D*

用户家目录下一般会存在 Desktop,Documents 和 Downloads 目录,所以 D* 会被展开为 "Desktop Documents Downloads",最终 ls 执行的命令变成了:

$ ls Desktop Documents Downloads

这些目录下的文件都会被添加到命令的输出中。
好了,当你理解了 Bash 展开的过程后,我想你就可以解释那些乍一看让人摸不着头脑的输出结果了!

关于通配符,还有一点需要注意:默认不会匹配到隐藏的文件,即便指定 a 选项也不行:

如果要匹配隐藏文件,需要显式的指定 . 号,比如:

$ ls -d .*

这里的 d 选项本身与隐藏文件无关,我们会在接下来详细介绍。

d 选项详解

d 选项的描述为:显示目录自身,而不显示其内容。所以使用 d 选项可以轻松的查看当前目录或是指定目录的信息:

如果去掉 d 选项则会输出这些目录下的内容。

d 选项还能够在使用通配符过滤时保证子目录的内容不会被输出:

这是一种比较常见的使用方式,加上 d 选项能保证结果符合我们的预期。

我们还可以通过 d 选项过滤出当前目录下的所有子目录:

$ ls –d */

看上去很神奇,其实这与我们前面执行的 ls -d my* 命令是一样的,只不过这次 Bash 过滤了以 / 号结尾的名称,而以 / 号结尾的名称都是目录的名称!

排序

ls 命令的输出默认是以字母序排列的,只是隐藏文件的 . 号没有参与排序规则。除了字母序,我们还能以文件的大小或最后修改时间为排序条件。
S 选项会以文件的大小为条件排列输出的结果:

默认的顺序为从大到小排列,你可以使用 r 选项来反转这个顺序。需要注意的是,所有目录的大小都是一样的,总为 4096 字节。

t 选项默认则以文件的最后修改时间(mtime)为条件排列输出的结果:

默认的顺序为最新修改的文件在最顶端,你可以使用 r 选项来反转这个顺序。这里你还可以通过 --time 选项改变长格式输出的时间类型(比如 atime 或 ctime),t 选项会以你指定的时间类型进行排序。

区分文件与目录

F 选项可以用来区分目录与文件。默认情况下 p 与 F 选项的表现是相同的。都是在目录的结尾添加斜线(/):

因此在命令中我们可以通过结尾处的斜线(/)过滤出文件:

$ ls -F |grep -v /
$ ls -p |grep -v /

或过滤出目录:

$ ls -F |grep /$
$ ls -p |grep /$

总结

除了本文介绍的基本用法和常用的选项,ls 命令还有很多的选项可以提供更多的功能。比如 i 选项可以显示文件的 inode 信息等等。所以 ls 是一个看似简单实则功能强大的命令。

linux ls 命令的更多相关文章

  1. linux ls命令教程,ls命令怎么用,全部招数都教你

    linux ls命令的用法大全 学习linux这么久了,最常用的命令莫属 ls命令了,今天就总结下ls命令的用法与经验技巧.   ls命令按文件大小查看文件   a.降序:ls -lsh moudae ...

  2. Linux ls命令详解

    ls 命令可以说是Linux下最常用的命令之一. -a 列出目录下的所有文件,包括以 . 开头的隐含文件.(后有详解)-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在c语言里一样)的形式列出. ...

  3. Linux ls命令

    ls:即列表List的意思,用来列出目录下的文件用来列出给定目录下的文件,参数为空默认列出当前目录下的文件. 用法是:ls [选项] [目录] 常用的选项有 -a, –all 列出目录下的所有文件,包 ...

  4. linux ls命令按时间显示文件

      本文介绍下,使用ls命令显示文件,并按时间排序的方法,供大家学习参考. 在linux系统中,使用ls命令按时间排序文件,其实很简单,如下: #ls -tr 即可按时间排序当前目录下的文件. 附,l ...

  5. Linux ls命令参数详解

    -a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录.      -l -- 长(long).列举目 ...

  6. Linux ls命令参数详解 <转>

    下面是一个与 ls 一起使用的一些常用选项的简短列表.请记住,你可以通过阅读 ls 的说明书页(man ls)来获得选项的完整列表. -a – 全部(all).列举目录中的全部文件,包括隐藏文件(.f ...

  7. Linux ls 命令实现(简化版)

    在学习linux系统编程的时候,实现了ls命令的简化版本号. 实现的功能例如以下: 1. 每种文件类型有自己的颜色 (- 普通文件, d 文件夹文件, l 链接文件. c 字符设备文件. b 快设备文 ...

  8. 你应该了解的 7个Linux ls 命令技巧

    在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容.本文时‘ls命令’系列的最后一部分.如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接. 15 个‘ls’命令的面 ...

  9. Linux ls命令详解-乾颐堂CCIE

      ls命令用法举例: 例一:列出/home文件夹下的所有文件和目录的详细资料: 1 ls -l -R /home 命令参数之前要有一短横线“-”, 上面的命令也可以这样写: 1 ls -lR /ho ...

随机推荐

  1. 聊一聊FE面试那些事

    聊一聊FE面试那些事 最近公司由于业务的扩展.技术的延伸需要招一批有能力的小伙伴加入,而我有幸担任"技术面试官"的角色前前后后面试了不下50多位候选人,如同见证了50多位前端开发者 ...

  2. spring boot 配置文件application

    场景:在项目部署的过程中,对于spring boot的配置文件一直不很了解,直到项目出现一个莫名其妙的问题——工程classes中的配置文件被覆盖,程序启动总是报错! 1  配置文件的优先级 appl ...

  3. Webservice 实践

    摘要: 实现webservice,spring ws,XFire实现方法未实现.(记得补上~) 1 概述 1.1关键技术 SOAP:简单对象存取协议.是XML Web Service 的通信协议.当用 ...

  4. 如何自己写一个公用的NPM包

    以markdown-clear,创建过程为例,讲解整个NPM包创建和发布流程 1 如何创建一个包 1.1 创建并使用一个工程 在GitHub上新建一个仓库,其名markdown-clear clone ...

  5. Handler实现线程之间的通信-下载文件动态更新进度条

    1. 原理 每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息. 2. ...

  6. input file样式修改,图片预览删除功能

    本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能. 效果图如下: 这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这 ...

  7. Jdbc模版式写法与Spring-JdbcTemplate的比较

    一.Jdbc模版式写法: [流程] 加载驱动 获取数据库链接 创建Statement对象(用于发送sql语句) 向数据库发送sql语句,获取数据库返回的结果集 从结果集中获取数据 释放资源 上述部分用 ...

  8. JDK问题--linux下java unrecognized class file version错误的解决

    linux下java unrecognized class file version错误的解决 环境:RedHat Linux Enterprise 5.4 问题:java.sun.com下载jdk1 ...

  9. 编译器报错:'IHTMLControlElement' : redefinition

    由于我安装了platform SDK,编译导致错误: error C2367: 'IHTMLControlElement' : redefinition; different uuid specifi ...

  10. 老司机和你深聊 Kubenertes 资源分配之 Request 和 Limit 解析

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云容器服务团队 Kubernetes是一个容器集群管理平台,Kubernetes需要统计整体平台的资源使用情况,合理地将资源分配 ...