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

我们每天都在使用 Linux ls
命令,而不去想它。太可惜了。稍微注意一下,您会发现许多有用的选项——包括一些您应该添加到命令行工具库中的选项。
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

您还可以将 ls
与 grep
一起使用,并使用 grep
的模式匹配功能。让我们查找名称中包含字符串“_pin_”的所有文件:
ls | grep _pin_

这几乎与单独使用 ls
相同,但有两个通配符:
ls | grep _pin_
ls *_pin_*

为什么几乎一样?注意不同的布局。 grep
强制输出为每行格式的单个文件名。
非打印字符
您可能会发现自己的文件名中包含非打印字符或控制字符。通常,当您展开从 Web 下载的档案或检索 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:一个插座。
接下来的九个字符是连续显示的三组三个字符。每三个一组按顺序代表读、写和执行权限。如果授予权限,将出现 r
、w
或 x
。如果未授予权限,则会显示连字符 -
。
第一组三个字符是文件所有者的权限。第二组三个权限是给群成员的,最后一组三个权限是给其他人的。
有时,所有者 的执行权限由s
表示。这是 setuid 位。如果存在,则意味着该文件是以文件所有者的权限执行的,而不是以执行该文件的用户的权限执行的。
组 的执行权限也可以是s
。这是 setgid 位。当这应用于一个文件时,这意味着该文件将以所有者组的权限执行。当与目录一起使用时,在其中创建的任何文件都将从创建文件的目录获得组权限,而不是从创建文件的用户那里获得。
其他人的执行权限有时可以用t
表示。这是粘性位。它通常应用于目录。如果设置了此项,则无论目录中文件的写权限和可执行权限如何,只有文件所有者、目录所有者或根用户才能重命名或删除目录中的文件。
粘滞位的常见用途是在诸如“/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

列表按修改时间排序。
如果文件修改时间在当年,则显示的信息为月、日、时间。如果修改日期不是当年,则显示的信息是月、日和年。
获取目录中最新和最旧文件的快速方法是将 ls
与 head
和 tail
命令一起使用。
要获取最新的文件或目录,请使用以下命令:
ls -t | head -1
要获取最早的文件或目录,请使用以下命令:
ls -t | tail -1

反转排序顺序
要反转任何排序顺序,请使用 -r
(反转)选项。
ls -l -h -S -r

列表现在按从最小文件到最大文件的顺序排列。
还有更多
查看 ls
的手册页,还有更多选项。其中一些满足一些模糊的用例,但偶尔,您会很高兴了解它们。
您是否需要查看 Linux 可以提供的最高精度的文件时间戳?使用全职选项:
ls --full-time
也许您想查看文件的 inode 编号?使用 inode 选项:
ls -i
您是否在单色显示器上工作,并希望消除混淆目录和链接文件的所有风险?使用分类选项,ls
会将其中之一附加到每个列表条目:
- /:目录。
- @:符号链接。
- |:命名管道。
- =:一个插座。
- *:可执行文件
ls -F
做一些挖掘。你会发现 ls
是一条丰富的脉络,你会不断发现宝石。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts