Linux 的 ls 命令拥有数量惊人的选项,可以提供有关文件的重要信息。
ls 命令可以列出一个 POSIX 系统上的文件。这是一个简单的命令,但它经常被低估,不是它能做什么(因为它确实只做了一件事),而是你该如何优化对它的使用。
要知道在最重要的 10 个终端命令中,这个简单的 ls 命令可以排进前三,因为 ls 不会只是列出文件,它还会告诉你有关它们的重要信息。它会告诉你诸如拥有文件或目录的人、每个文件修改的时间、甚至是什么类型的文件。它的附带功能能让你了解你在哪里、附近有些什么,以及你可以用它们做什么。
如果你对 ls 的体验仅限于你的发行版在 .bashrc 中的别名,那么你可能错失了它。
GNU 还是 BSD?
在了解 ls 的隐藏能力之前,你必须确定你正在运行哪个 ls 命令。有两个最流行的版本:包含在 GNU coreutils 包中的 GNU 版本,以及 BSD 版本。如果你正在运行 Linux,那么你很可能已经安装了 GNU 版本的 ls (LCTT 译注:几乎可以完全确定)。如果你正在运行 BSD 或 MacOS,那么你有的是 BSD 版本。本文会介绍它们的不同之处。
你可以使用 --version 选项找出你计算机上的版本:
$ ls --version
如果它返回有关 GNU coreutils 的信息,那么你拥有的是 GNU 版本。如果它返回一个错误,你可能正在运行的是 BSD 版本(运行 man ls | head 以确定)。
你还应该调查你的发行版可能具有哪些预设选项。终端命令的自定义通常放在 $HOME/.bashrc 或 $HOME/.bash_aliases 或 $HOME/.profile 中,它们是通过将 ls 别名化为更复杂的 ls 命令来完成的。例如:
alias ls='ls --color'
发行版提供的预设非常有用,但它们确实很难分辨出哪些是 ls 本身的特性,哪些是它的附加选项提供的。你要是想要运行 ls 命令本身而不是它的别名,你可以用反斜杠“转义”命令:
$ \ls
分类
单独运行 ls 会以适合你终端的列数列出文件:
$ ls ~/example bunko jdk-10.0.2 chapterize otf2ttf.ff despacer overtar.sh estimate.sh pandoc-2.7.1 fop-2.3 safe_yaml games tt
这是有用的信息,但所有这些文件看起来基本相同,没有方便的图标来快速表示出哪个是目录、文本文件或图像等等。
使用 -F (或 GNU 上的长选项 --classify )以在每个条目之后显示标识文件类型的指示符:
$ ls ~/example bunko jdk-10.0.2/ chapterize* otf2ttf.ff* despacer* overtar.sh* estimate.sh pandoc@ fop-2.3/ pandoc-2.7.1/ games/ tt*
使用此选项,终端中列出的项目使用简写符号来按文件类型分类:
- 斜杠(
/ )表示目录(或“文件夹”)。
- 星号(
* )表示可执行文件。这包括二进制文件(编译代码)以及脚本(具有可执行权限的文本文件)。
- 符号(
@ )表示符号链接(或“别名”)。
- 等号(
= )表示套接字。
- 在 BSD 上,百分号(
% )表示涂改(某些文件系统上的文件删除方法)。
- 在 GNU 上,尖括号(
> )表示门(Illumos 和 Solaris上的进程间通信)。
- 竖线(
| )表示 FIFO 管道。 这个选项的一个更简单的版本是 -p ,它只区分文件和目录。
(LCTT 译注:在支持彩色的终端上,使用 --color 选项可以以不同的颜色来区分文件类型,但要注意如果将输出导入到管道中,则颜色消失。)
长列表
从 ls 获取“长列表”的做法是如此常见,以至于许多发行版将 ll 别名为 ls -l 。长列表提供了许多重要的文件属性,例如权限、拥有每个文件的用户、文件所属的组、文件大小(以字节为单位)以及文件上次更改的日期:
$ ls -l -rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh [...]
(编辑:ASP站长网)
|