2.10 显示权限、所有者等详细信息
ls -l
现在你已经学会了如何格式化ls
命令的结果,以获取更多关于目录内容的信息,但是实际内容本身的情况会怎么样呢?如何了解文件和文件夹的更多信息,例如它们的大小、所有者,以及谁可以对它们进行什么样的处理?为了获取这些信息,需要使用-l
选项(或—format=long
)。
$ ls -l ~/bin
total 2951
-rw-r--r-- 1 scott scott 15058 2005-10-03 18:49
➥adblock_filters.txt
-rwxr-xr-- 1 scott root 33 2005-04-19 09:45
➥addext
-rwxr--r-- 1 scott scott 245 2005-10-15 22:38
➥backup
drwxr-xr-x 9 scott scott 1080 2005-09-22 14:42
➥bin_on_bacon
-rw-r--r-- 1 scott scott 237641 2005-10-14 13:50
➥calendar.ics
-rwxr-xr-- 1 scott root 190 2005-04-19 09:45
➥convertsize
drwxr-xr-x 2 scott scott 48 2005-04-19 09:45
➥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
,只有addext
和convertsize
文件例外,它们属于用户scott
和组root
。
说明 如果需要修改权限,第7章将介绍如何进行操作(提示:用到的命令是
chown
和chgrp
)。
再向左,紧接着最后一列,这一列包含了一个数字。如果你正在处理一个文件,这个数字可以告诉你该文件有多少个硬链接(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
字符的位置,现在出现的是-
,则表示“不允许读取”。这一点对于w
和x
也同样适用。
这时再看看addext
和它的权限rwxr-xr--
,你就会一下子明白过来,所有者scott
可以读取、改写和执行文件;组(root
)的成员可以读取和执行文件,但是不能改写文件;主机上的其他任何人(通常称为“world”)能够读取文件,但是不能改写文件或者把它作为程序运行。
现在你已经明白了权限的意义,以后会开始注意到某些组合似乎经常出现。例如,“rw-r--r--
”权限对于很多文件都很常见,表示所有者既可以读取也可以修改文件,但是组和其他类型的用户就只能读取文件。对于程序文件来说,通常会看到rwxr-xr-x
的权限,表示使用计算机的任何人都可以读取和运行程序,但是只有所有者才能修改文件。
然而,目录文件则有些不同了。对于一个文件来说,r
、w
、x
权限的意义非常明确,即读、写(或修改)或者执行这个文件。但是如何“执行”一个目录呢?
我们先从简单的入手:r
。对于目录这种情况,r
表示用户可以使用ls
命令列出目录的内容。w
则表示用户可以在目录中增加更多的文件,重命名已经存在的文件,或者删除不再需要的文件。x
相当于为了运行命令而访问目录的权力(需要访问和使用目录中的文件),或者是访问目录中的子目录。
可以看到,-l
选项本身的功能非常强大,但是如果和其他选项结合起来它还能发挥更大的作用。你早已学会-a
选项的用法,它能显示出目录中的所有文件,那么现在应该非常明白-la
的用法(或者用--format=long --all
)。
$ la -la ~/
drwxr-xr-x 2 scott scott 200 2005-07-28 01:31 alias
drwx------ 2 root root 72 2005-09-16 19:14 .aptitude
-rw-r--r-- 1 scott scott 1026 2005-09-25 00:11 .audacity
drwxr-xr-x 10 scott scott 592 2005-10-18 11:22 .Azureus
-rw------- 1 scott scott 8800 2005-10-18 19:55 .bash_history
说明 根据本章前面学到的内容,如果某个文件的所有者和组用户都是
scott
,就可以从列表中删除这一文件数据。