ls高级用法

1 使用通配符列出文件夹的内容

ls ~/videos/*.wmv

刚才你已经学会了如何在包含多个文件的目录中查找文件,但是还有一种更快的方法。如果你知道正在找的Tiger Woods的视频文件是Windows Media格式的,那么这个文件名一定是以.wmv为后缀的,这时就可以使用通配符只显示以.wmv结尾的文件。

$ ls ~/videos
Ubuntu_Talk.mpeg       nerdtv_1_andy_hertzfeld
airhorn_surprise.wmv   nerdtv_2_max_levchin
apple_navigator.mov    nerdtv_3_bill_joy
b-ball-e-mail.mov      RPG_Nerds.mpeg
carwreck.mpg           tiger_woods_just_did_it.wmv
$ ls ~/videos/*.wmv
airhorn_surprise.wmv   tiger_woods_just_did_it.wmv

 

另外还有一种更快的方法,也使用了通配符:只查找文件名包含tiger这个单词的文件。

$ ls ~/videos/*tiger*
tiger_woods_just_did_it.wmv

 

2 查看子文件夹中的文件列表

ls -R

也可以用一个命令来查看多个子目录的内容。假如你正在参加一个LUG(Linux Users Group)聚会,大家都在紧张地安装着Linux。有人说话了:“嗨,谁有新的Kubuntu的ISO镜像文件,能给我用用吗?”你记得前几天下载过这么个文件,为了确定一下,运行以下命令(除了用ls–R,也可以用ls --recursive):

$ ls -R ~/iso
iso:
debian-31r0a-i386-netinst.iso knoppix ubuntu

iso/knoppix:
KNOPPIX_V4.0.2CD.iso  KNOPPIX_V4.0.2DVD.iso

iso/ubuntu:
kubuntu-5.10-install.iso   ubuntu-5.10-install.iso
kubuntu-5.10-live.iso      ubuntu-5.10-live.iso

 

就是这个文件,在~/iso/ubuntu : kubuntu-5.10-install-i386.iso中。-R选项会递归地遍历iso目录,显示iso目录和它的每个子目录的内容。每个文件夹都以原命令中指定的目录作为开始,显示为它们各自相对于该目录的路径,路径名称后面跟着一个冒号,接着再列出相应子文件夹中的所有内容。记住,如果有很多子目录,子目录中又有很多内容的话,递归选项就不太起作用。因为显示的内容将会一屏接着一屏,很难找到你想要的内容。当然,如果你想做的只是验证一下目录中确实有很多文件和文件夹,这时滚动浏览所有内容是很有用的,不过这种情况并不经常有。

3 以单独一列显示内容

ls -1

到目前为止,你使用的都是ls命令的默认输出格式。注意,ls命令按照字母顺序列出目录的内容,每列之间最少保留两个空格,以便阅读。但是如果你想要用不同的方式来查看内容又该怎么做呢?

如果多列显示方式不是你想要的,从逻辑上来讲,你也可以用单独一列的方式来查看ls命令的结果,这时用ls-1(或ls --format= single-column)就够用了。

$ ls -1 ~/
bin
Desktop
documents
iso
music
pictures
src
videos

 

如果目录中的内容多得数不清,这种列举方式可能会变得没完没了,尤其是使用递归选项时更是如此,例如ls -1R ~/。如果看到终端屏幕上没完没了地显示文件列表,这时可以按Ctrl+c组合键取消命令。

4 用逗号分隔的列表显示内容

ls -m

不论是一列还是多列,对于不喜欢标准显示方式的人来说,另外一种显示格式选择就是-m选项(或--format=commas)。

$ ls -m ~/
bin, Desktop, docs, iso, music, pix, src, videos

 

将-m中的m看作是“,(逗号)”的助记符,这样更容易记住这个选项。当然,如果你正在编写脚本,需要以逗号分隔的列表来表示目录的内容时,这个选项也很有用。不过,这是这个有价值的选项更为高级的一种用法。

5 查看隐藏的文件和文件夹

ls -a

现在,你已经能够查看目录中可见的文件了,但是不要忘记,很多目录中还包含隐藏的文件。例如,home目录就有大量的隐藏文件和文件夹,都是在它们的名字前面加上一个“.”,就设置成了不可见的。如果想查看这些隐藏文件,只要使用-a选项(或--all)。

$ ls -a ~/
.            .gimp-2.2      .openoffice.org1.9.95
..           .gksu.lock     .openoffice.org1.9
.3ddesktop   .glade2        .openoffice.org2
.abbrev_defs .gnome         .opera

.adobe       .gnome2_private pictures

 

关于这个列表有几点应该知道。首先,ls –a[a代表all(所有)]命令既能显示隐藏内容,也能显示非隐藏内容,所以.gnome和pictures这两个文件都能看到。其次,你总是可以看到“.”和“..”,因为“.”代表当前目录,而“..”则代表上一级目录,即当前目录的父目录。这两个隐藏文件在系统的每个文件夹中都存在,不能删除。每次使用-a选项时就能看到它们。最后,根据不同的目录,-a选项可能显示出你以前没有注意到的大量隐藏文件。

6 显示文件的类型

ls -F

除了目录中各文件的名称以外,ls命令默认不会告诉你更多其他的信息。仅凭名称,很难区分清楚某项是文件、目录,或是其他什么东西。为了解决这一问题,可以让ls命令提供更多的信息,一种简单方法就是使用-F选项(或--classify)。

$ ls -F ~/bin
adblock_filters.txt    fixm3u*        pix2tn.pl*
addext*                flash.xml*     pop_login*
address_book.csv       getip*         procmail/
address_book.sxc       homesize*
programs_kill_artsd*
address_book.xls       html2text.py*
programs_usual*

 

这样显示的信息就多了些。文件后面的“*”(星号)表示该文件是可执行文件,“/”(斜杠)表示它是一个目录。如果文件名后面没有任何附加符号,那这个文件就是一个普通的文件。表2-1总结了一些其他可能的结尾附加符号。

表2-1 符号和文件类型

字 符

含 义

*

可执行文件

/

目录

@

符号链接文件

|

管道(FIFO)

=

套接字(socket)

7 用不同的颜色显示内容

ls --color

除了使用-F选项在文件和文件夹名称后面附加特殊的符号,还可以让shell用不同的颜色显示内容,这样就能够用另一种方法把不同的内容进行分类,将它们区分开来。很多Linux系统在安装时就已经设置好shell显示不同的颜色,但是如果你的shell还没有设置好,就得使用--color选项。

$ ls --color
adblock_filters.txt   fixm3u      pix2tn.pl
addext                flash.xml   pop_login
address_book.csv      getip       procmail

 

在我安装的系统中,可执行文件显示为绿色,文件夹显示为蓝色,普通文件显示为黑色(在我的shell中,文本的默认颜色是黑色)。表2-2列举了所有常见的颜色关联(但要记住,特定的Linux发行版本中这些颜色的含义可能会有所不同)。

表2-2 颜色和文件类型

颜 色

含 义

默认的shell文本颜色

普通文件

绿色

可执行文件

蓝色

目录

紫红色

符号链接文件

黄色

管道(FIFO)

紫红色

套接字(socket)

红色

压缩文件(.tar、.zip、.deb、.rpm)

紫红色

图片文件(.jpg、.gif、.png、.tiff)

紫红色

音频文件(.mp3、.ogg、.wav)

提示 知道系统为各种文件映射了什么颜色吗?输入dircolors --print-database,自己慢慢看结果吧。也可以使用dircolors命令修改这些颜色配置。

结合--color和-F选项,当前目录中有哪些类型的文件一目了然。现在我们就来试一把!

$ ls -F --color
adblock_filters.txt       fixm3u*        pix2tn.pl*
addext*                   flash.xml*     pop_login*
address_book.csv          getip*         procmail/

 

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

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)的更多信息,可以看看Soft and Hard Links | Scott Granneman,或者在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,就可以从列表中删除这一文件数据。

9 以相反的顺序显示列表内容

ls -r

如果你不喜欢-l选项使用的默认字母顺序,则可以使用-r(或者--reverse)选项,以相反的顺序来排列显示内容。

$ ls -lar ~/

-rw-------  8800 2005-10-18 19:55 .bash_history
drwxr-xr-x   592 2005-10-18 11:22 .Azureus
-rw-r--r--  1026 2005-09-25 00:11 .audacity
drwx------    72 2005-09-16 19:14 .aptitude
drwxr-xr-x   200 2005-07-28 01:31 alias

 

说明 要记住,这里使用的是-r,而不是-R。-r表示反向,而-R则表示递归。

当使用-l选项时,输出的结果按照文件和文件夹名称的字母顺序来排序。添加-r选项后,将以相反的顺序输出结果,但仍然是基于文件名排序的。也要记住,在使用ls命令时,如果你想将输入的命令和选项的默认输出结果按相反的顺序排列,可以随时增加这个-r选项。

10 按文件的扩展名排序

ls -X

文件名称并不只是字母排序时唯一可用的排序对象。也可以对文件的扩展名进行字母顺序的排序。换句话说,你可以使用ls命令把所有以.doc结尾的文件分为一组,接着是以.jpg结尾的文件,最后是以.txt结尾的文件。使用-X选项(或--sort=extension);如果你想按相反的顺序排序,只需加上-r选项(或者--reverse)。

$ ls -lX ~/src
drwxr-xr-x     320 2005-10-06 22:35 backups
drwxr-xr-x    1336 2005-09-18 15:01 fonts
-rw-r--r-- 2983001 2005-06-20 02:15 install.tar.gz
-rw-r--r-- 6683923 2005-09-24 22:41 DuckDoom.zip

 

在结果中,最先显示的是文件夹(毕竟,它们没有文件扩展名),后面接着显示具有扩展名的各个文件。尤其是注意install.tar.gz这个文件有两个扩展名,但ls命令在排序时使用最后一个扩展名(.gz)。

11 按日期和时间排序

ls -t

按字母排序是不错,但是有时还需要按日期和时间对目录的内容进行排序。要想这样做,可以在-l选项的基础上使用-t选项(或者--sort=time);要按相反顺序排序,可以在-l选项的基础上使用-tr选项(或者--sort=time –reverse)。

$ ls -latr ~/
-rw-------   8800 2005-10-18 19:55 .bash_history
drwx------    368 2005-10-18 23:12 .gnupg
drwxr-xr-x   2760 2005-10-18 23:14 bin
drwx------    168 2005-10-19 00:13 .Skype

 

除了最后一项以外,其他所有项都是在同一天修改的。如果不使用-r选项,结果将按相反的顺序排列,最后一项会出现在第一个位置。

说明 注意在前面这个命令中一次使用了4个选项:-latr。你原本可以用-l -a -t –r来代替上述选项,但是谁愿意输入所有这么多连字符呢?将所有选项组合成一个大选项更快捷,也更容易。这些选项的加长版本(以两个连字符开始,由一个或者两个单词组成的选项)就不能组合在一起,而必须单独输入,如-la --sort=time --reverse。

12 按文件大小进行排序

ls -S

除了按照文件名或者扩展名的字母顺序,以及日期和时间对文件排序,还可以使用-S(或--sort=size)选项按照文件大小来排序。

$ ls -laS ~/
-rw-r--r--  109587 2005-10-19 11:53 .xsession-errors
-rw-------   40122 2005-04-20 11:00 .nessusrc
-rwxr--r--   15465 2005-10-12 15:45 .vimrc
-rw-------    8757 2005-10-19 08:43 .bash_history

 

当按照文件大小排序时,体积最大的文件会排在第一位。要按相反顺序排序,让体积最小的文件排在第一位,只需使用-r选项。

13 用K、M和G显示文件大小

ls -h

在上一节中,.vimrc文件那一行上的15 465表示这个文件大概有15 KB,但是需要自己动脑将字节转换为相应的千字节、兆字节或者吉字节并不总是很方便。通常,使用-h(或--human-readable)选项会更方便,也更容易理解。

$ ls -laSh ~/
-rw-r--r--  100K 2005-10-19 11:44 .xsession-errors
-rw-------   40K 2005-04-20 11:00 .nessusrc
-rwxr--r--   16K 2005-10-12 15:45 .vimrc
-rw-------  8.6K 2005-10-19 08:43 .bash_history

 

在这个例子中,K代表千字节(kilobyte)。如果文件足够大,还会看到代表兆字节(megabyte)的M,甚至是代表吉字节(gigabyte)的G。或许你会问,使用-h选项时,为什么.nessusrc文件的40 122字节显示为40 KB。记住,1 KB等于1024字节,用40 122除以1 024时,得到的是39.1816406千字节,ls–h就取整为40 KB。1 MB实际上是1 048 576字节,1 GB则是1 073 741 824字节,所以在显示这些值时也会进行类似的取整。

说明 在我的~/.bashrc文件中,定义了以下别名,它们是我用了许多年的。可以使用在本章节学到的内容,扩展这些例子,并创建满足自己需要的别名。

  alias l= 'ls -F'
  alias l1= 'ls -1F'
  alias la= 'ls -aF'
  alias ll= 'ls -laFh'
  alias ls= 'ls -F'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hamilton_Huan

原创不易,结合业务原创更不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值