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. 有点难度的JS面试题

    自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...

  2. SetConsoleTextAttribute 函数--设置控制台文本属性

    SetConsoleTextAttribute函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs. ...

  3. swift3.0 CoreGraphics绘图-实现画板

    swift3.0对绘图的API进行了优化,看起来更swift了. 看下UI的构造.设置画笔粗细.清空面板和保存到本地 下面直接看画板文件 这里我做的比较复杂,记录触摸到的每个点,再连成路径,其实直接用 ...

  4. HTML5 开发APP(打开相册以及图片上传)

    我们开发app,常常会遇到让用户上传文件的功能.比如让用户上传头像.我公司的业务要求是让用户上传支付宝收款二维码,来实现用户提现的功能.想要调用相册要靠HTML Plus来实现.先上效果图 基本功能是 ...

  5. 【.net 深呼吸】自定义应用程序配置节

    实际上,应用程序配置文件 App.config,是由各个节(Configuration Section)组成的,通常,配置节是按功能划分的,比如我们很熟悉的 appSettings.connectio ...

  6. kickstart自动化安装--tftp+nfs+dhcp

    使用kickstart实现Centos 自动化安装 Kickstart自动化安装简介: 规模化:同时装配多台 服务器 自动化 :安装系统,配置各种服务 远程实现:不需要光盘,U盘等安装介质 优势: ( ...

  7. 只需要一点点C++基础,新手也可以制作单机游戏内存修改器

    声明:本文只是为了初学C++的,能够做出一些实用的东西,跳出管理系统的束缚,提升学习的兴趣,在这里选取了单机游戏,请不要尝试在线游戏,违发而已未必可行.序:首先我们需要一个Qt+VS环境Qt从http ...

  8. HTML相关知识

    1 Day01HTML HTML5声明:<!doctype html> <html> 1.1 HTML基本结构: <head> <title>题目< ...

  9. WIN10-64+CUDA8.0+OpenCV3.0+VS2015配置

    在网上参考了各位前辈的攻略后,捣鼓了两天总算配置成功了. 目前网上多的还是ubuntu上配置CUDA的教程比较多比较详尽,但是我现在就是想在windows10上跑啊,就是想用CUDA啊... 1.CU ...

  10. 参数化Insert

    public void Insert(Customer item) {            string sql = @"USE [WXCustomerCard]GOINSERT INTO ...