服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 帮你精通Linux:简约却不简单的ls命令

帮你精通Linux:简约却不简单的ls命令

2020-12-21 23:26TheCodeMaster Linux

ls 命令即 list directory contents是我们最为熟悉的Linux命令。它就如车载或者手机中的导航地图,彻底解放了我们的大脑,片刻不能离身。否则我们下楼取个快递,都得绕18道弯才能勉强找回家。

ls 命令即 list directory contents是我们最为熟悉的Linux命令。它就如车载或者手机中的导航地图,彻底解放了我们的大脑,片刻不能离身。否则我们下楼取个快递,都得绕18道弯才能勉强找回家。

我们在前面的“Linux手册”课程中,大量应用ls这个地图查看器。

1.只列出当前的目录文件

我们先从一个具体的问题出发,如何单单打印出目录文件。

如果使用find命令,不仅简单,而且符合完全语义化的表达:

$ find . -maxdepth 1 -type d | head  

./Templates 

./.ssh 

./.tldr 

./.zoom 

./.presage 

./Videos 

./.racket 

./.mplayer 

./node_modules 

我们甚至可以调用echo

$ echo */ 

anaconda3/ backup.doom.d/ Calibre Library/ Desktop/ Documents/ Downloads/ dwhelper/ emacs.d.backup2/ Mail/ Music/ News/ node_modules/ org/ Pictures/ Public/ snap/ Templates/ Test/ Videos/ 

查阅手册,我们会看到-d的选项:

-d, --directory 

             list directories themselves, not their contents 

直接运行试试:

$ ls -d . 

.  # 只返回了一个当前目录 

改用通配符:

$ ls -d */ 

 anaconda3/          Downloads/         News/           snap/ 

 backup.doom.d/      dwhelper/          node_modules/   Templates/ 

'Calibre Library/'   emacs.d.backup2/   org/            Test/ 

 Desktop/            Mail/              Pictures/       Videos/ 

 Documents/          Music/             Public

如果将d去掉呢?

帮你精通Linux:简约却不简单的ls命令

实际的执行是将扩展的通配符的子目录全部都列了出来。

2.只列出当前的文件

那么如何单单列出来当前的文件呢?最简单的方法还是 find 命令的语义化查询:

$ find . -maxdepth 1 -type f -iname "[^.]*" |nl 

     1  ./#*message*-20191127-125216# 

     2  ./package-lock.json 

     3  ./start.sh 

     4  ./backup.gnus.el 

     5  ./zero-config.el 

     6  ./RMAIL 

     7  ./linux-tutorial.org 

     8  ./linux-tutorial-2.org 

     9  ./*scratch* 

我们知道ls命令有-F(filter)选项,将所有的文件归类:

$ ls -F  

 anaconda3/                          News/ 

 Anaconda3-2020.02-Linux-x86_64.sh   node_modules/ 

 backup.doom.d/                      org/ 

 backup.gnus.el                      package-lock.json 

'Calibre Library'/                   Pictures/ 

 Desktop/                            Public

 Documents/                          RMAIL 

 Downloads/                         '*scratch*' 

 dwhelper/                           snap/ 

 emacs.d.backup2/                    start.sh* 

 linux-tutorial-2.org                Templates/ 

 linux-tutorial.org                  Test/ 

 Mail/                               Videos/ 

'#*message*-20191127-125216#'        zero-config.el 

 Music/ 

于是我们考虑使用组合命令:

$ ls -F |grep .*[^/]$ |nl 

     1  backup.gnus.el 

     2  linux-tutorial-2.org 

     3  linux-tutorial.org 

     4  #*message*-20191127-125216# 

     5  package-lock.json 

     6  RMAIL 

     7  *scratch* 

     8  start.sh* 

     9  zero-config.el 

或者:

$ ls -l |grep ^- |nl 

     1  -rw-rw-r--  1 gaowei gaowei   6042 Feb  4 21:23 backup.gnus.el 

     2  -rw-rw-r--  2 gaowei gaowei    892 May 26 08:34 linux-tutorial-2.org 

     3  -rw-rw-r--  2 gaowei gaowei    892 May 26 08:34 linux-tutorial.org 

     4  -rw-rw-r--  1 gaowei gaowei    139 Nov 27  2019 #*message*-20191127-125216# 

     5  -rw-rw-r--  1 gaowei gaowei    313 Dec 10  2019 package-lock.json 

     6  -rw-rw-r--  1 gaowei gaowei  74109 Mar 17 14:27 RMAIL 

     7  -rw-rw-r--  1 gaowei gaowei    497 Dec  5  2019 *scratch* 

     8  -rwxr-xr-x  1 gaowei gaowei   1793 May  7 06:20 start.sh 

     9  -rw-rw-r--  1 gaowei gaowei   1058 Mar 30 17:10 zero-config.el 

至此我们可以得出结论,ls并没有直接列出全部文件的方案。

3.列出指定类型文件

虽然没有列出全部文件的方法,然而我们却可以打印指定suffix的文件:

$ ls *.org # org 文件 

linux-tutorial-2.org  linux-tutorial.org 

$ ls *.sh # shell文件 

start.sh 

而且可以讲二者组合:

$ ls *.{org,sh} 

linux-tutorial-2.org  linux-tutorial.org  start.sh 

4.无处不在的排序

排序无处不在,两个小学生考试也要排排名次。

我们首先想到的是sort命令。

$ ls -lh | sort -k 5 -h |head 

total 320K 

-rw-rw-r--  1 gaowei gaowei  139 Nov 27  2019 #*message*-20191127-125216# 

-rw-rw-r--  1 gaowei gaowei  313 Dec 10  2019 package-lock.json 

-rw-rw-r--  1 gaowei gaowei  497 Dec  5  2019 *scratch* 

-rw-rw-r--  2 gaowei gaowei  892 May 26 08:34 linux-tutorial-2.org 

-rw-rw-r--  2 gaowei gaowei  892 May 26 08:34 linux-tutorial.org 

-rw-rw-r--  1 gaowei gaowei 1.1K Mar 30 17:10 zero-config.el 

-rwxr-xr-x  1 gaowei gaowei 1.8K May  7 06:20 start.sh 

drwx------  5 gaowei gaowei 4.0K Feb  4 21:32 Mail 

drwxrwxr-x 10 gaowei gaowei 4.0K Mar 19 17:46 emacs.d.backup2 

颇为惊喜的是,ls 贴心的准备了 -S 选项,并且,更为贴心的是输出的结果是倒序排列。

$ ls -lhS |head 

total 320K 

drwxr-xr-x 13 gaowei gaowei 100K Jun 22 15:02 Downloads 

-rw-rw-r--  1 gaowei gaowei  73K Mar 17 14:27 RMAIL 

drwxr-xr-x  8 gaowei gaowei  20K Jun 23 20:01 Videos 

drwxr-xr-x  3 gaowei gaowei  12K Apr 28 04:50 Desktop 

drwxr-xr-x  7 gaowei gaowei  12K Jun 20 21:15 Pictures 

-rw-rw-r--  1 gaowei gaowei 6.0K Feb  4 21:23 backup.gnus.el 

drwxrwxr-x 26 gaowei gaowei 4.0K Jun 16 09:02 anaconda3 

drwxrwxr-x  2 gaowei gaowei 4.0K Jan 27 13:11 backup.doom.d 

drwxrwxr-x  6 gaowei gaowei 4.0K Feb 21 16:17 Calibre Library 

-S 是长选项--sort的短写形式,除了按文件大小排序,也可以按照时间排序等

$ ls -lh --sort=time  |head #简写为 ls -ht 

total 320K 

drwxr-xr-x  8 gaowei gaowei  20K Jun 23 20:01 Videos 

drwxr-xr-x 13 gaowei gaowei 100K Jun 22 15:02 Downloads 

drwxr-xr-x  7 gaowei gaowei  12K Jun 20 21:15 Pictures 

drwxrwxr-x 26 gaowei gaowei 4.0K Jun 16 09:02 anaconda3 

drwxr-xr-x  4 gaowei gaowei 4.0K Jun 15 18:01 snap 

drwxr-xr-x 15 gaowei gaowei 4.0K Jun  2 10:53 Documents 

drwxrwxr-x  2 gaowei gaowei 4.0K May 26 10:50 Test 

-rw-rw-r--  2 gaowei gaowei  892 May 26 08:34 linux-tutorial-2.org 

-rw-rw-r--  2 gaowei gaowei  892 May 26 08:34 linux-tutorial.org 

5.极简模式

有时候,我们阅读-l选项下的结果,眼花缭乱,头晕目眩。此时可以尝试极简模式:

$ ls -sS 

 帮你精通Linux:简约却不简单的ls命令

绝大部分时间,我们更关注的是文件的大小,-s, --size正提供这样的服务。

6.收尾总结

总结上述的方法:

# 1.只列出目录 

ls -d */ 

# 2.只列出文件 

ls *.{txt,pdf,org} 

# 3.文件大小排序 

ls -lhS 

# 4.时间戳排序 

ls -lht 

# 5.极简模式 

ls -Ss 

以上本文收尾,盼对大家有点滴帮助。

原文地址:https://www.toutiao.com/i6908524368884695565/

延伸 · 阅读

精彩推荐
  • Linux详解Linux系统下PXE服务器的部署过程

    详解Linux系统下PXE服务器的部署过程

    这篇文章主要介绍了Linux系统下PXE服务器的部署过程,包括对PXE的API架构作了一个基本的简介,需要的朋友可以参考下...

    运维之道9812019-07-04
  • Linux确保Linux系统安全的前提条件 漏洞防护

    确保Linux系统安全的前提条件 漏洞防护

    Linux 作为开放式的操作系统受到很多程序员的喜爱,很多高级程序员都喜欢编写Linux操作系统的相关软件。这使得Linux操作系统有着丰富的软件支持,还有无...

    Linux之家2642020-04-11
  • LinuxLinux常用的日志文件和常用命令

    Linux常用的日志文件和常用命令

    成功地管理任何系统的关键之一,是要知道系统中正在发生什么事。 Linux 中提供了异常日志,并且日志的细节是可配置的。Linux 日志都以明文形式存储,所...

    Linux教程网2632020-04-18
  • LinuxLinux中环境变量配置的步骤详解

    Linux中环境变量配置的步骤详解

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的...

    Myths7882022-02-10
  • LinuxLinux lnmp下无法使用mail发邮件的两种解决方法

    Linux lnmp下无法使用mail发邮件的两种解决方法

    在配置了lnmp环境后,出现了mail函数不能发送邮件的问题,其实有两种方法,一是使用sendmail组件,而是使用postfix。下面为大家一一介绍下 ...

    Linux之家4042019-09-17
  • Linuxlinux中rmdir命令使用详解(删除空目录)

    linux中rmdir命令使用详解(删除空目录)

    今天学习一下linux中命令: rmdir命令。rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的 ...

    linux命令大全5372019-11-19
  • Linux手把手教您在 Linux 上使用 GPG 加解密文件

    手把手教您在 Linux 上使用 GPG 加解密文件

    在本教程中,我将告诉你如何用 GPG 加密和解密文件。这是一个简单的教程,你可以在你的 Linux 系统上尝试所有的练习。这将帮助你练习 GPG 命令,并在你...

    Linux中国6962021-12-15
  • LinuxLinux上设置用户通过SFTP访问目录的权限的方法

    Linux上设置用户通过SFTP访问目录的权限的方法

    这篇文章主要介绍了Linux上设置用户通过SFTP访问目录的权限的方法,SFTP可以理解为使用SSH协议进行FTP传输的协议,因而同时要对OpenSSH进行相关设置,需要的朋...

    OSChina10022019-06-19