linux ls 命令
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 命令的更多相关文章
- linux ls命令教程,ls命令怎么用,全部招数都教你
linux ls命令的用法大全 学习linux这么久了,最常用的命令莫属 ls命令了,今天就总结下ls命令的用法与经验技巧. ls命令按文件大小查看文件 a.降序:ls -lsh moudae ...
- Linux ls命令详解
ls 命令可以说是Linux下最常用的命令之一. -a 列出目录下的所有文件,包括以 . 开头的隐含文件.(后有详解)-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在c语言里一样)的形式列出. ...
- Linux ls命令
ls:即列表List的意思,用来列出目录下的文件用来列出给定目录下的文件,参数为空默认列出当前目录下的文件. 用法是:ls [选项] [目录] 常用的选项有 -a, –all 列出目录下的所有文件,包 ...
- linux ls命令按时间显示文件
本文介绍下,使用ls命令显示文件,并按时间排序的方法,供大家学习参考. 在linux系统中,使用ls命令按时间排序文件,其实很简单,如下: #ls -tr 即可按时间排序当前目录下的文件. 附,l ...
- Linux ls命令参数详解
-a -- 全部(all).列举目录中的全部文件,包括隐藏文件(.filename).位于这个列表的起首处的 .. 和 . 依次是指父目录和你的当前目录. -l -- 长(long).列举目 ...
- Linux ls命令参数详解 <转>
下面是一个与 ls 一起使用的一些常用选项的简短列表.请记住,你可以通过阅读 ls 的说明书页(man ls)来获得选项的完整列表. -a – 全部(all).列举目录中的全部文件,包括隐藏文件(.f ...
- Linux ls 命令实现(简化版)
在学习linux系统编程的时候,实现了ls命令的简化版本号. 实现的功能例如以下: 1. 每种文件类型有自己的颜色 (- 普通文件, d 文件夹文件, l 链接文件. c 字符设备文件. b 快设备文 ...
- 你应该了解的 7个Linux ls 命令技巧
在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容.本文时‘ls命令’系列的最后一部分.如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接. 15 个‘ls’命令的面 ...
- Linux ls命令详解-乾颐堂CCIE
ls命令用法举例: 例一:列出/home文件夹下的所有文件和目录的详细资料: 1 ls -l -R /home 命令参数之前要有一短横线“-”, 上面的命令也可以这样写: 1 ls -lR /ho ...
随机推荐
- HTML5之placeholder属性以及如何更改placeholder属性中文字颜色
今天在群里看到群友问了一个这样的问题,就是如何更改placeholder属性中文字的颜色,以前用过这属性,却是没更改过颜色,于是便试了试,中途遇到些问题,查找资料后特来总结一下. 熟悉HTML5的人应 ...
- Hibernate 实体关联关系映射----总结
在我看来,Hibernate提供这些映射关系,常用就是一对一和多对一,并且在能不用连接表的时候尽量不要用连接表.多对多会用到,如果用到了,应该首先考虑底层数据库设计是否合理. 在实际开发中,在Hi ...
- (转)Linux(Centos)之安装Java JDK及注意事项
场景:天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣.人之为学有难易乎?学之,则难者亦易矣:不学,则易者亦难矣. 1 准备工作 下面配置jdk的方式在具有root权限时候能够执行.如果没有ro ...
- HDOJ2002-计算球体面积
Problem Description 根据输入的半径值,计算球的体积. Input 输入数据有多组,每组占一行,每行包括一个实数,表示球的半径. Output 输出对应的球的体积,对于每组输 ...
- Linux(4)系统管理
系统管理 cal :查看当前月份和日历, 加-y查看整年日历 date :显示或设置时间 设置时间格式(需要管理员权限) date [MMDDhhmm[[CC]YY][.ss]]+format CC为 ...
- 52. leetcode 96. Unique Binary Search Trees
96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) tha ...
- Dubbo负载均衡策略
在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用. 可以自行扩展负载均衡策略,参见:负载均衡扩展Random LoadBalance 随机,按权重设置随机概率. 在一个截面上 ...
- equals()与 == 比较,hashCode方法
1.Object类 Object类是java中一切类的父类,java中所有的类都直接或间接 继承自Object类 Object中定义的方法不多,原因在于,java的类多种多样 ...
- .NET Standard 2.0 特性介绍和使用指南
.NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...
- Coursera scala课程第一周答案
Exercise 1: Pascal's Triangle The following pattern of numbers is called Pascal's triangle. 1 1 1 1 ...