Skip to content

Files

Latest commit

9566748 · Jan 9, 2022

History

History
294 lines (245 loc) · 11 KB

05.md

File metadata and controls

294 lines (245 loc) · 11 KB

五、查看文件和目录详情

ls命令在第三章中有简要介绍。它不仅列出文件和目录,还可以提供关于这些文件和目录的重要细节。与ls一起使用的最常见选项之一是-l,它显示一个长列表格式。以下是一个例子。

    $ ls
    Desktop Documents  Downloads  Music  to-do.txt
    $ ls -l
    total 20
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt
    $

ls -l提供的信息以代表文件或目录权限的一系列字符开始。权限将包含在第 6 章中。权限字符串后面的数字表示指向文件或目录的链接数。接下来,显示所有者,后跟组名。然后显示文件大小。提供的时间戳表示修改时间。最后一项是文件或目录本身的名称。

    $ ls -l to-do.txt
    -rw-r--r-- 1 jason users 73 Jun 22 19:34 to-do.txt
    ---------- - ----- ----- -- ------------ ---------
         |     |   |     |    |       |          |
         |     |   |     |    |       |      File Name
         |     |   |     |    |       |
         |     |   |     |    |       +----- Modification Time
         |     |   |     |    |       
         |     |   |     |    +------------- Size in bytes
         |     |   |     |    
         |     |   |     +------------------ Group
         |     |   |
         |     |   +------------------------ User (owner)
         |     |
         |     +---------------------------- Number of Links
         |
         +---------------------------------- Permissions

默认情况下,ls不显示以句点开头的文件或目录。在 Linux 中,这样的文件被认为是隐藏的。要使用ls显示隐藏文件,使用-a选项包括所有项目。要以长列表格式显示所有项目,请使用-l-a。请记住,选项可以组合使用。这三个命令是等价的:ls -l -als -lals -al

    $ ls
    Desktop Documents  Downloads  Music  to-do.txt
    $ ls -a
    .  .. .bash_history  .bash_logout  .bashrc  Desktop  Documents  Downloads  Music .profile  .ssh  to-do.txt
    $ ls -a -l
    total 48
    drwxr-xr-x 7 jason users 4096 Jun 22 20:36 .
    drwxr-xr-x 6 root  root  4096 May  4 10:26 ..
    -rw------- 1 jason users 3738 Jun 22 19:37 .bash_history
    -rw-r--r-- 1 jason users  220 Mar 30  2013 .bash_logout
    -rw-r--r-- 1 jason users 3650 Jun 22 19:41 .bashrc
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music
    -rw-r--r-- 1 jason users  675 Mar 30  2013 .profile
    drwx------ 2 jason users 4096 May  3 12:44 .ssh
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt
    $ ls -al
    total 48
    drwxr-xr-x 7 jason users 4096 Jun 22 20:36 .
    drwxr-xr-x 6 root  root  4096 May  4 10:26 ..
    -rw------- 1 jason users 3738 Jun 22 19:37 .bash_history
    -rw-r--r-- 1 jason users  220 Mar 30  2013 .bash_logout
    -rw-r--r-- 1 jason users 3650 Jun 22 19:41 .bashrc
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music
    -rw-r--r-- 1 jason users  675 Mar 30  2013 .profile
    drwx------ 2 jason users 4096 May  3 12:44 .ssh
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt
    $ ls -la
    total 48
    drwxr-xr-x 7 jason users 4096 Jun 22 20:36 .
    drwxr-xr-x 6 root  root  4096 May  4 10:26 ..
    -rw------- 1 jason users 3738 Jun 22 19:37 .bash_history
    -rw-r--r-- 1 jason users  220 Mar 30  2013 .bash_logout
    -rw-r--r-- 1 jason users 3650 Jun 22 19:41 .bashrc
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music
    -rw-r--r-- 1 jason users  675 Mar 30  2013 .profile
    drwx------ 2 jason users 4096 May  3 12:44 .ssh
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt

要在ls输出中将文件类型指示器附加到文件或目录的名称,请使用-F选项。

    $ ls
    Desktop  Documents Downloads  link-to-to-do  Music  program  to-do.txt
    $ ls -F
    Desktop/ Documents/  Downloads/  link-to-to-do@  Music/  program*  to-do.txt
    $ ls -lF
    total 24
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop/
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents/
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads/
    lrwxrwxrwx 1 jason users    9 Jun 22 21:01 link-to-to-do -> to-do.txt
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music/
    -rwxr-xr-x 1 jason users   13 Jun 22 21:02 program*
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt
    $

表 2:文件类型指示器

标志 文件类型
/ 目录
@ 符号链接。->符号后面的文件是链接的目标。
* 可执行脚本或程序
= (电源)插座
>
| 命名管道

符号链接,有时称为符号链接或链接,指向实际文件或目录的位置。符号链接只是一个指针,但是您可以像操作实际的文件或目录一样操作它。符号链接通常用于创建长名称或长路径的快捷方式。符号链接的另一个常见用途是指向应用的当前版本,如下例所示。

    $ cd /opt/nginx/
    $ ls -F
    1.6.0/  1.7.1/ 1.7.2/  current@
    $ ls -lF
    total 12
    drwxr-xr-x 2 root root 4096 Jun 22 21:12 1.6.0/
    drwxr-xr-x 2 root root 4096 Jun 22 21:11 1.7.1/
    drwxr-xr-x 2 root root 4096 Jun 22 21:11 1.7.2/
    lrwxrwxrwx 1 root root    5 Jun 22 21:12 current -> 1.7.2/
    $

要按时间对ls命令的输出进行排序,请使用-t选项。这将首先显示最近修改的项目。如果你想颠倒顺序,使用-r。当您有一个包含许多文件的目录时,这可能会派上用场。当你按时间倒过来排序时,旧文件将从屏幕顶部滚下,而最新的文件将显示在你的提示的正上方。

    $ ls -t
    program link-to-to-do  to-do.txt  Music  Downloads  Documents  Desktop
    $ ls -lt
    total 24
    -rwxr-xr-x 1 jason users   13 Jun 22 21:02 program
    lrwxrwxrwx 1 jason users    9 Jun 22 21:01 link-to-to-do -> to-do.txt
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop
    $ ls -lrt
    total 24
    drwxrwxr-x 2 jason users 4096 May  3 08:33 Desktop
    drwxrwxr-x 2 jason users 4096 May  3 08:35 Documents
    drwxrwxr-x 2 jason users 4096 May  3 08:38 Downloads
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music
    -rw-r--r-- 1 jason users   73 Jun 22 19:34 to-do.txt
    lrwxrwxrwx 1 jason users    9 Jun 22 21:01 link-to-to-do -> to-do.txt
    -rwxr-xr-x 1 jason users   13 Jun 22 21:02 program
    $

要执行递归列表,请使用-R选项。

    $ ls -R
    .:
    Desktop Documents  Downloads  link-to-to-do  Music  program  to-do.txt

    ./Desktop:

    ./Documents:
    cat.jpg report.txt

    ./Downloads:

    ./Music:
    JohnColtrane

    ./Music/JohnColtrane:
    giant-steps.mp3
    $

要实现同样的目标,但以更具视觉吸引力的方式,使用tree命令。要仅查看目录结构,请使用tree -d。对于彩色输出,使用tree -C。默认情况下并不总是安装tree命令,因此您可能需要依赖ls命令。

    $ tree
    .
    |-- Desktop
    |-- Documents
    |   |-- cat.jpg
    |   |-- report.txt
    |-- Downloads
    |-- link-to-to-do -> to-do.txt
    |-- Music
    |   |-- JohnColtrane
    |       |-- giant-steps.mp3
    |-- program
    |-- to-do.txt

    5 directories, 6 files
    $ tree -d
    .
    |-- Desktop
    |-- Documents
    |-- Downloads
    |-- Music
        |-- JohnColtrane

    5 directories
    $

当对目录运行ls命令时,显示目录的内容。要让ls仅对目录进行操作,请使用-d选项。

    $ tree Music/
    Music/
    |-- JohnColtrane
        |-- giant-steps.mp3

    1 directory, 1 file
    $ ls Music/
    JohnColtrane
    $ ls -l Music/
    total 4
    drwxrwxr-x 2 jason users 4096 Jun 22 21:39 JohnColtrane
    $ ls -d Music/
    Music/
    $ ls -ld Music/
    drwxrwxr-x 3 jason users 4096 Jun 21 21:16 Music/
    $

要为ls命令的输出着色,请使用--color选项。很像-F选项,这个选项允许区分文件类型。

    $ ls --color
    Desktop  Documents  Downloads  link-to-to-do Music  program to-do.txt

以下是本章涵盖的ls选项的摘要。尽管ls有更多的选项,但这几个选项将涵盖最常见的用例。

表 3:常用ls选项

[计]选项 描述
-a 显示所有文件,包括隐藏文件。
--color 给输出着色。
-d 列出目录而不是目录内容。
-l 使用长列表格式。
-r 颠倒顺序。
-R 递归列出文件。
-t 按时间排序。

转义空格和特殊字符

即使文件名和目录名中允许有空格,如果可能的话,也可以更容易地避免空格。不要使用空格,考虑使用连字符或下划线。另一个好的选择是使用 CamelCase。例如,不要给一个文件命名my to do list,而要命名为my-to-do-listmy_to_do_list,甚至MyToDoList

即使您选择避免在文件名中使用空格,您也可能会遇到由其他人创建的包含空格的文件名。对名称中有空格的文件进行操作的两种方法是使用引号或转义。要对名为my to do list的文件进行操作,请用引号括起来,如:“my to do list”。要转义文件名,请在空格前加一个反斜杠,如:my\ to\ do\ list。除了用于单个字符之外,转义就像使用引号一样。

如果您不确定如何转义文件或目录名,请使用-b选项让ls显示给您。引用和转义不仅适用于空格,还适用于其他特殊字符,包括|&';()<>spacetab

    $ ls
    my to do list
    $ ls -l
    total 4
    -rw-r--r-- 1 jason users 73 Jun 22 22:16 my to do list
    $ ls -l my to do list
    ls: cannot access my: No such file or directory
    ls: cannot access to: No such file or directory
    ls: cannot access do: No such file or directory
    ls: cannot access list: No such file or directory
    $ ls -l "my to do list"
    -rw-r--r-- 1 jason users 73 Jun 22 22:16 my to do list
    $ ls -l my\ to\ do\ list
    -rw-r--r-- 1 jason users 73 Jun 22 22:16 my to do list
    $ ls -lb
    total 4
    -rw-r--r-- 1 jason users 73 Jun 22 22:16 my\ to\ do\ list
    $