如何在Linux上使用ls命令列出文件和目录

时间:2020-01-09 10:39:55  来源:igfitidea点击:

我们每天都在使用Linuxls命令,而无需考虑它。太可惜了。注意一下,我们会发现许多有用的选项,包括应该添加到命令行库中的一些选项。

ls列出文件和目录

ls命令可能是大多数Linux用户遇到的第一个命令。我们中那些徘徊在命令行中的人日复一日地使用它,甚至没有考虑它。这也许可以解释为什么此命令比大多数用户意识到的更多。我们用它列出文件以查看目录中的内容。当我们想查看文件的权限时,我们以长格式列出文件。除此之外,它几乎没有考虑。

" ls"命令是带有大量选项的命令之一。也许这是问题的一部分。有这么多种选择,我们如何筛选它们以找到有用的选择?找到它们之后,我们如何记住它们?

带有其选项和参数字符串的ls命令的有用排列是别名的理想选择。实际上,在大多数发行版中,我们认为裸露的" ls"命令实际上是一个别名。除其他外,type命令可用于显示别名的基本定义。让我们看一下ls的定义:

输入ls

每次使用ls命令时,都会自动包含--color = auto参数。这就是为列表中的不同文件类型提供不同颜色的原因。

简单的ls列表

每个在Linux终端上花了一些时间的人都知道,默认情况下," ls"会列出当前目录中的文件和目录。

ls

如果要在单列中显示列表,请使用-1(每行一个文件)选项:

ls -1

一分钟后,我们将在列表顶部讨论该看起来怪异的文件名。

在不同目录上使用ls

要使ls列出当前目录以外的目录中的文件,请在命令行上将目录的路径传递给ls。我们还可以将多个目录传递到ls,并将它们一个接一个地列出。在这里,我们要求ls在两个目录中列出文件,一个目录名为Help,另一个目录名为gc_help。

ls Help gc_help

ls列出了第一个目录的内容时,它列出了第二个目录的内容。在处理每个目录时,它会打印每个目录的名称:

使用文件模式

要有选择地列出一组文件,请使用模式匹配。问号"?"代表任何单个字符,星号" *"代表任何字符串。要列出名称以ip_开头的任何文件或者目录,请使用以下格式:

ls ip_*

要列出具有.c扩展名的文件,请使用以下格式:

ls *.c

我们还可以将lsgrep结合使用,并使用grep的模式匹配功能。让我们查找名称中带有字符串_pin_的所有文件:

ls | grep _pin_

这几乎与单独使用ls相同,带有两个通配符:

ls | grep _pin_
ls *_pin_*

为什么差不多?注意不同的布局。 grep强制输出为每行格式一个文件名。

非印刷字符

可能会发现自己的文件名中包含非打印字符或者控制字符。通常,当我们扩展从网上下载的档案或者检索git存储库,并且原始作者在创建文件但未发现文件时出错时,会发生这种情况。

我们的怪异文件是其中之一:

如果我们在文件浏览器中查看它并按F2重命名,则非打印字符将由一个奇怪的符号表示。

我们可以使用-b(转义)选项来查看文件名实际包含的内容。这个选项使ls使用C编程语言的转义序列来表示控制字符。

ls -b a*

神秘字符显示为换行符,用C表示为\ n。

忽略文件

要使列表中省略某些文件,请使用--hide选项。假设我们不想在列表中看到备份的.bak文件。我们可以使用以下命令:

ls
ls --hide=*.bak

.bak文件不包括在第二个列表中。

长格式列表

-l(长列表)选项使ls提供有关每个文件的详细信息。

ls -l

这里有很多信息,所以让我们逐步进行。

" ls"显示的第一件事是列表中所有文件的总大小。然后,每个文件或者目录将单独显示在一行上。

第一组十个字母和破折号是文件类型以及所有者,组和其他文件权限。

第一个字符代表文件类型。它将是以下之一:

  • :常规文件。

  • b:块特殊文件。

  • c:字符特殊文件。

  • d:目录。

  • l:符号链接。

  • n:网络文件。

  • p:命名管道。

  • s:一个socket。

接下来的九个字符是连续显示的三组,每组三个字符。每三个一组,分别代表读取,写入和执行权限。如果授予了许可,则将出现" r"," w"或者" x"。如果未授予许可,则显示连字符"-"。

第一组三个字符是文件所有者的权限。第二组三个权限适用于组成员,最后一组三个权限适用于其他权限。

有时,所有者的执行许可由s表示。这是setuid位。如果存在,则表示该文件是使用文件所有者(而不是执行文件的用户)的特权执行的。

该组的执行许可也可以是s。这是setgid位。将其应用于文件时,这意味着将使用所有者组的特权来执行文件。与目录一起使用时,在目录中创建的所有文件都将从其创建目录中获得组权限,而不是从创建文件的用户那里获得组权限。

其他权限的执行权限有时可以用t表示。这是粘性的位。它通常应用于目录。如果设置了此选项,则无论在目录中的文件上设置了写和可执行特权,只有文件所有者,目录所有者或者root用户都可以重命名或者删除目录中的文件。

粘性位的常见用法是在/ tmp等文件夹上。这是计算机上的所有用户均可写的。目录上的粘性位可确保用户和用户启动的进程只能重命名或者删除自己的临时文件。

我们可以在/ tmp目录中看到粘性位。注意使用-d(目录)选项。这使ls报告目录的详细信息。没有这个选项,ls将报告目录中的文件。

ls -l -d /tmp

权限后的数字是指向文件或者目录的硬链接的数量。对于文件,通常是一个,但是如果创建了其他硬链接,则此数目将增加。一个目录通常至少具有两个硬链接。一个是指向自身的链接,另一个是其在父目录中的条目。

接下来显示所有者和组的名称。它们后面是文件大小和文件的最后修改日期。最后,给出文件名。

人类可读的文件大小

以字节为单位的文件大小并不总是很方便。要以最合适的单位(千字节,兆字节等)查看文件大小,请使用-h选项(人类可读):

ls -l -h

显示隐藏文件

要查看隐藏的文件,请使用-a(全部)选项:

ls -l -a

这两个条目。和..分别代表当前目录和父目录。现在首次显示名为.base_settings的文件。

省略。和..来自列表

如果我们不希望商家信息混乱不堪。和..条目,但我们确实想查看隐藏文件,请使用-A(几乎所有)选项:

ls -l -A

隐藏文件仍然列出,但是。和..条目被抑制。

递归列出目录

要使" ls"列出所有子目录中的文件,请使用" -R"(递归)选项

ls -l -R

ls遍历起始目录下的整个目录树,并列出每个子目录中的文件。

显示UID和GID

要显示用户ID和组ID而不是用户名和组名,请使用-n(数字uid和gid)选项。

ls -n

排序列表

我们可以按扩展名,文件大小或者修改时间对列表进行排序。这些选项不必与长列表格式一起使用,但是这样做通常是有意义的。如果按文件大小排序,则可以在列表中查看文件大小。按扩展名类型排序时,长列表格式并不那么重要。

要按扩展名排序,请使用-X(按扩展名排序)选项。

ls -X -1

根据扩展名,目录首先列出(根本没有扩展名),然后其余按照字母顺序列出。

要按文件大小排序,请使用-S(按文件大小排序)选项。

ls -l -h -S

排序顺序从大到小。

要按修改时间对列表进行排序,请使用-t(按修改时间排序)选项。

ls -l -t

该列表按修改时间排序。

如果文件修改时间在当前年份之内,则显示的信息是月份,日期和时间。如果修改日期不是当前年份,则显示的信息是月份,日期和年份。

获取目录中最新和最旧文件的快速方法是将lsheadtail命令一起使用。

要获取最新的文件或者目录,请使用以下命令:

ls -t | head -1

要获取最早的文件或者目录,请使用以下命令:

ls -t | tail -1

颠倒排序顺序

要颠倒任何排序顺序,请使用-r(颠倒)选项。

ls -l -h -S -r

现在按最小文件到最大文件的顺序排列列表。

还有更多

查看手册页中的" ls",还有更多选择。他们中的一些人满足了一些晦涩的用例,但是不时地,我们会很高兴了解它们。

我们是否需要查看Linux可以提供的最高精度的文件时间戳?使用全职选项:

ls --full-time

也许我们想查看文件的索引节点号?使用inode选项:

ls -i

我们是否正在使用单色显示器,并希望消除混淆目录和链接文件的所有风险?使用分类选项,ls将其中之一添加到每个列表条目:

  • /:目录。

  • @:符号链接。

  • |:命名管道。

  • =:一个套接字。

  • *:可执行文件

ls -F