linux命令 ls
ls命令列出POSIX系统上的文件。 这是一个简单的命令,经常被低估,不是因为它可以做什么(因为它实际上只做一件事),而是在于如何优化使用它。
在要了解的10个最重要的终端命令中,最卑鄙的ls命令位于前三名,因为ls 不仅列出文件,还告诉您有关文件的重要信息。 它会告诉您诸如谁拥有文件或目录,何时丢失或修改每个文件,甚至是哪种文件等信息。 然后,它具有附带功能,可以让您了解自己的位置,附近有什么物体,以及可以使用它们做什么。
如果您对ls的经验仅限于您的发行版在.bashrc中将其别名的内容,那么您可能会错过。
是GNU还是BSD?
在查看ls的隐藏功能之前,必须确定正在运行的ls命令。 最受欢迎的两个版本是GNU coreutils软件包中包含的GNU版本和BSD版本。 如果您正在运行Linux,则可能已安装了ls 。 如果您正在运行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
*
使用此选项,可以使用以下缩写按文件类型对终端中列出的项目进行分类:
- 斜杠( / )表示目录(或“文件夹”)。
- 星号( * )表示可执行文件。 这包括二进制文件(编译后的代码)以及脚本(具有可执行权限的文本文件)。
- at符号( @ )表示符号链接(或“别名”)。
- 等号( = )表示套接字。
- 在BSD上,百分号( % )表示泛白(某些文件系统上的文件删除方法)。
- 在GNU上,尖括号( > )表示一扇门( Illumos和Solaris上的进程间通信)。
- 竖线( | )表示FIFO 。
此选项的更简单版本是-p ,它仅将文件与目录区分开。
长名单
从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
[ ...
]
如果您不以字节为单位考虑,请添加-h标志(或GNU中的--human )以将文件大小转换为更人性化的表示法:
$
ls
--human
-rwxrwx---.
1 seth
users
455 Mar
2
2017 estimate.sh
-rwxrwxr-x.
1 seth seth
662 Apr
29
22 :
27 factorial
-rwxrwx---.
1 seth
users 20M Jun
29
2018 fop-
2.3 -bin.tar.gz
-rwxrwxr-x.
1 seth seth 6.1K May
22
10 :
22 geteltorito
-rwxrwx---.
1 seth
users
177 Nov
12
2018 html4mutt.sh
通过仅显示-o的所有者列或-g的组列,您可以看到的信息要少一些:
$
ls
-o
-rwxrwx---.
1 seth
455 Mar
2
2017 estimate.sh
-rwxrwxr-x.
1 seth
662 Apr
29
22 :
27 factorial
-rwxrwx---.
1 seth 20M Jun
29
2018 fop-
2.3 -bin.tar.gz
-rwxrwxr-x.
1 seth 6.1K May
22
10 :
22 geteltorito
-rwxrwx---.
1 seth
177 Nov
12
2018 html4mutt.sh
合并两个选项均不显示。
时间和日期格式
ls的长列表格式通常如下所示:
-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
月份的名称不容易排序,无论是通过计算还是通过识别(取决于您的大脑是倾向于字符串还是整数)(取决于您的大脑)。 您可以使用--time-style选项加上格式名称来更改时间戳的格式。 可用格式为:
- 全ISO(1970-01-01 21:12:00)
- 长期iso(1970-01-01 21:12)
- iso(01-01 21:12)
- 语言环境(使用您的语言环境设置)
- posix-STYLE(用语言环境定义替换STYLE)
您还可以使用date命令的正式符号创建自定义样式。
按时间排序
通常, ls命令按字母顺序排序。 您可以使用-t选项根据最近更改过的文件(最新列出的是最先列出的文件)进行排序。
例如:
$
touch foo bar baz
$
ls
bar baz foo
$
touch foo
$
ls
-t
foo bar baz
清单类型
ls的标准输出平衡了可读性和空间效率,但是有时您希望文件列表采用特定的排列方式。
对于以逗号分隔的文件列表,请使用-m :
ls
-m ~
/ example
bar, baz, foo
要每行强制使用一个文件,请使用-1选项(即数字1,而不是小写的L):
$
ls
-1 ~
/ bin
/
bar
baz
foo
要按文件扩展名而不是文件名对条目进行排序,请使用-X (大写的X):
$
ls
bar.xfc baz.txt foo.asc
$
ls
-X
foo.asc baz.txt bar.xfc
隐藏混乱
在某些ls列表中有一些您可能不需要关心的条目。 例如,元字符。 和..分别代表“这里”和“后一级”。 如果您熟悉在终端中导航,则可能已经知道每个目录都将自己称为。 并以..为其父项,因此使用-a选项显示隐藏文件时,无需经常提醒它。
要显示几乎所有隐藏的文件( 。和..除外),请使用-A选项:
$
ls
-a
.
..
.android
.atom
.bash_aliases
[ ...
]
$
ls
-A
.android
.atom
.bash_aliases
[ ...
]
使用许多优秀的Unix工具,就有保存备份文件的传统,即在要保存的文件名后附加一些特殊字符。 例如,在Vim中,备份时会在名称后附加〜字符。
这类备份文件曾几次使我免于愚蠢的错误,但是经过多年享受它们提供的安全感之后,我觉得不需要有直观的证据来证明它们的存在。 我相信Linux应用程序可以生成备份文件(如果他们声称这样做的话),并且我很高兴相信它们的存在。
要从视图中隐藏备份文件,请使用-B或--ignore-backups隐藏常见的备份格式(此选项在BSD ls中不可用):
$
ls
bar.xfc baz.txt foo.asc~ foo.asc
$
ls
-B
bar.xfc baz.txt foo.asc
当然,备份文件仍然存在。 它只是被过滤掉,因此您不必查看它。
GNU Emacs使用文件名( #file# )的开头和结尾使用哈希字符( # )保存备份文件(除非另行配置)。 其他应用程序可能使用其他样式。 使用哪种模式都没有关系,因为您可以使用--hide选项创建自己的排除项:
$
ls
bar.xfc baz.txt
#foo.asc# foo.asc
$
ls
--hide =
"#*#"
bar.xfc baz.txt foo.asc
列出具有递归的目录
ls命令不会列出目录的内容,除非您在该目录上专门运行ls :
$
ls
-F
example
/ quux
* xyz.txt
$
ls
-R
quux xyz.txt
.
/ example:
bar.xfc baz.txt
#foo.asc# foo.asc
使用别名使其永久
ls命令可能是在任何给定的Shell会话期间最常使用的命令。 它是您的眼睛和耳朵,可为您提供上下文并确认命令的结果。 尽管有很多选择很有用,但ls的优点在于它的简洁:两个字符和Return键,您可以确切地知道自己在哪里以及附近在哪里。 如果您不得不停止考虑(少得多的类型)几个不同的选项,它将变得不那么方便,因此通常即使是最有用的选项也会被忽略。
解决方案是为ls命令添加别名,以便在使用它时获得最在意的信息。
要在Bash Shell中为命令创建别名,请在主目录中创建一个名为.bash_aliases的文件(必须在开头包含点)。 在此文件中,列出要为其创建别名的命令,然后列出要创建的别名。 例如:
alias ls = 'ls -A -F -B --human --color'
这行代码使您的Bash shell将ls命令解释为ls -A -F -B --human --color 。
您不仅限于重新定义现有命令。 您可以创建自己的别名:
alias
ll =
'ls -l'
alias
la =
'ls -A'
alias
lh =
'ls -h'
为了使别名起作用,您的外壳程序必须知道.bash_aliases配置文件存在。 在编辑器中打开.bashrc文件(或创建它,如果它不存在),并包括以下代码块:
if
[
-e
$HOME
/ .bash_aliases
] ;
then
source
$HOME
/ .bash_aliases
fi
每次加载.bashrc时 (这是启动新的Bash shell的任何时间),Bash都会将.bash_aliases加载到您的环境中。 您可以关闭并重新启动您的Bash会话,或者立即强制它执行此操作:
$ source ~ / .bashrc
如果忘记了是否为命令加上别名,那么which命令将告诉您:
$
which
ls
alias
ls =
'ls -A -F -B --human --color'
/ usr
/ bin
/
ls
如果您使用选项为ls命令加上别名,则可以通过在ls前面加上反斜杠来随时覆盖自己的别名。 例如,在示例别名中,使用-B选项隐藏了备份文件,这意味着无法使用ls命令备份文件。 覆盖别名以查看备份文件:
$
ls
bar baz foo
$ \
ls
bar baz baz~ foo
一件事做好
ls命令具有数量惊人的选项,其中许多选项很小,或者高度依赖于所使用的终端。 看看上GNU或BSD系统更多的选择GNU系统或人为LS 信息LS。
您可能会发现奇怪的是,一个以每个工具“都能做一件事并且做得很好”为前提的著名系统会以50个选项权衡其最常见的命令。 但是ls只做一件事:它列出文件。 ls有50个选项可让您控制如何接收该列表,因此ls非常非常好地完成了它的一项工作。
linux命令 ls