2.10 显示权限、所有者等详细信息

ls -l

现在你已经学会了如何格式化ls命令的结果,以获取更多关于目录内容的信息,但是实际内容本身的情况会怎么样呢?如何了解文件和文件夹的更多信息,例如它们的大小、所有者,以及谁可以对它们进行什么样的处理?为了获取这些信息,需要使用-l选项(或—format=long)。

  1. $ ls -l ~/bin
  2. total 2951
  3. -rw-r--r-- 1 scott scott 15058 2005-10-03 18:49
  4. adblock_filters.txt
  5. -rwxr-xr-- 1 scott root 33 2005-04-19 09:45
  6. addext
  7. -rwxr--r-- 1 scott scott 245 2005-10-15 22:38
  8. backup
  9. drwxr-xr-x 9 scott scott 1080 2005-09-22 14:42
  10. bin_on_bacon
  11. -rw-r--r-- 1 scott scott 237641 2005-10-14 13:50
  12. calendar.ics
  13. -rwxr-xr-- 1 scott root 190 2005-04-19 09:45
  14. convertsize
  15. drwxr-xr-x 2 scott scott 48 2005-04-19 09:45
  16. credentials

-l选项代表long,可以看到,它提供了目录中文件的大量数据。我们按从右到左的顺序依次介绍你看到的内容。

最右边一列是最简单的内容:所列文件的名称。需要ls命令显示文件名的更多信息吗?将-F选项加到-l上,如ls-lF。设置颜色也非常容易,就是用ls -lF --color

向左一列,接下来看到的是日期和时间。这是文件最后被修改的时间,包括日期(按照年—月—日的格式)和时间(按照24小时制的格式)。

再向左一列是文件的大小(单位是字节)。对于文件夹来说,它的大小计算有些难捉摸。例如,前面的计数显示bin_on_bacon目录是1 080 B,或者说只比1 KB(kilobyte)多一点,而实际上它里面包含887 KB。根据ls –l命令,credentials目录是48 B,但它里面却什么也没有!怎么回事?

还记得在第1章中,我们介绍目录只是一种特殊的文件,它包含了内部一系列内容吗?在这个例子中,credentials目录除了“..”以外,什么也没有(所有目录都必须引用它们的父目录),所以它仅有48 B。而bin_on_bacon目录包含30多个文件,所以它的大小超过了1080 B。

再往左的两列分别是文件的所有者和所属的组。从前面的列表可以看到,几乎每个文件都属于用户scott和组scott,只有addextconvertsize文件例外,它们属于用户scott和组root

说明 如果需要修改权限,第7章将介绍如何进行操作(提示:用到的命令是chownchgrp)。

再向左,紧接着最后一列,这一列包含了一个数字。如果你正在处理一个文件,这个数字可以告诉你该文件有多少个硬链接(hard link);如果它是目录,这个数字是指该目录中包含有多少项内容。

提示 有关硬链接(和软链接,soft link)的更多信息,可以看看http://www.granneman.com/techinfo/linux/thelinuxenvironment/softandhardlinks.htm,或者在Google中搜索“linux hard links”。

现在轮到最左边的第一列了:每个文件和目录的真正权限。初看起来它们像是某种神秘的代码,不过只要有点知识,其实也非常容易理解。每个代码有10个字符,分成4组(虽然看起来不是这样的)。第一组由第一个字符组成;第二组由第二个到第四个字符组成;第三组包括第五个到第七个字符组成;第四组,即最后一组由第八个到第十个字符组成。例如,可以将credentials目录的权限划分成d|rwx|r-x|r-x

第一组告诉你它是什么类型的文件。前面已经看到-F--color选项用不同的方式来展现这一内容,-l也是如此。d表示credentials是目录,而第一个位置上的则表示该项是一个文件(即便文件是可执行的,ls–l仍然只用一个-来表示,所以-F--color选项可以为你提供更多的信息)。当然在第一个位置还可能看到其他选项,详细内容如表2-3所示。 表2-3 权限字符和文件类型

字  符含  义
-普通文件
-可执行文件
d目录
l符号链接文件
s套接字(socket)
b块设备(block device)
c字符设备(character device)
p命名管道(named pipe)

提示 要查看表2-3中列出的每种设备(至少会有一种)的文件,可以试试ls –l /dev

接下来的9个字符(组成第二组、第三组、以及第四组)分别代表对文件的所有者、文件的组,以及系统中所有其他用户的权限。以在前面显示的addext文件为例,它的权限是rwxr-xr--,这表明所有者scott的权限是rwx,组(在这个例子中还是scott)的权限是r-x,系统中其他用户的权限是r--。这些字符代表什么意思呢?

每个例子中,r表示“允许读取”,w表示“允许改写”(改写意味着修改和删除),x表示“允许执行”,则表示“不允许执行这个操作”。如果原本应该出现r字符的位置,现在出现的是-,则表示“不允许读取”。这一点对于wx也同样适用。

这时再看看addext和它的权限rwxr-xr--,你就会一下子明白过来,所有者scott可以读取、改写和执行文件;组(root)的成员可以读取和执行文件,但是不能改写文件;主机上的其他任何人(通常称为“world”)能够读取文件,但是不能改写文件或者把它作为程序运行。

现在你已经明白了权限的意义,以后会开始注意到某些组合似乎经常出现。例如,“rw-r--r--”权限对于很多文件都很常见,表示所有者既可以读取也可以修改文件,但是组和其他类型的用户就只能读取文件。对于程序文件来说,通常会看到rwxr-xr-x的权限,表示使用计算机的任何人都可以读取和运行程序,但是只有所有者才能修改文件。

然而,目录文件则有些不同了。对于一个文件来说,rwx权限的意义非常明确,即读、写(或修改)或者执行这个文件。但是如何“执行”一个目录呢?

我们先从简单的入手:r。对于目录这种情况,r表示用户可以使用ls命令列出目录的内容。w则表示用户可以在目录中增加更多的文件,重命名已经存在的文件,或者删除不再需要的文件。x相当于为了运行命令而访问目录的权力(需要访问和使用目录中的文件),或者是访问目录中的子目录。

可以看到,-l选项本身的功能非常强大,但是如果和其他选项结合起来它还能发挥更大的作用。你早已学会-a选项的用法,它能显示出目录中的所有文件,那么现在应该非常明白-la的用法(或者用--format=long --all)。

  1. $ la -la ~/
  2. drwxr-xr-x 2 scott scott 200 2005-07-28 01:31 alias
  3. drwx------ 2 root root 72 2005-09-16 19:14 .aptitude
  4. -rw-r--r-- 1 scott scott 1026 2005-09-25 00:11 .audacity
  5. drwxr-xr-x 10 scott scott 592 2005-10-18 11:22 .Azureus
  6. -rw------- 1 scott scott 8800 2005-10-18 19:55 .bash_history

说明 根据本章前面学到的内容,如果某个文件的所有者和组用户都是scott,就可以从列表中删除这一文件数据。