2009-03-15

ls命令

平常只简单地用ls列一下文件,man了一下ls以后,发现ls还有很多有用的选项.下面举例说明按文件内容修改时间排序,按文件状态修改时间排序,按文件访问时间排序,按文件大小排序,先列出文件夹再列出文件这些选项

1. 按文件内容修改时间排序
默认情况下,list是按文件名排序的. -t选项让ls按文件内容的修改时间排序. 一般与-l选项一起使用,因为这样可以看到文件内容的修改时间. 使用--time-style=WORD可以指定时间的显示方式,WORD可以是full-iso, long-iso, ios, locale四种. 默认是按locale来显示时间的
$ ls -l --time-style=long-iso kk sed.test
-rw-r--r-- 1 Administrator None 12 2000-01-02 03:04 kk
-rw-r--r-- 1 Administrator None 6 2008-08-08 08:08 sed.test

$ ls -lt --time-style=long-iso kk sed.test
-rw-r--r-- 1 Administrator None 6 2008-08-08 08:08 sed.test
-rw-r--r-- 1 Administrator None 12 2000-01-02 03:04 kk

$ ls -lt --time-style=full-iso kk sed.test
-rw-r--r-- 1 Administrator None 6 2008-08-08 08:08:00.000000000 +0800 sed.test
-rw-r--r-- 1 Administrator None 12 2000-01-02 03:04:45.000000000 +0800 kk

$ ls -lt --time-style=iso kk sed.test
-rw-r--r-- 1 Administrator None 6 2008-08-08 sed.test
-rw-r--r-- 1 Administrator None 12 2000-01-02 kk

$ ls -lt --time-style=locale kk sed.test
-rw-r--r-- 1 Administrator None 6 Aug 8 2008 sed.test
-rw-r--r-- 1 Administrator None 12 Jan 2 2000 kk


2. 按文件状态修改时间排序
文件状态修改时间和文件内容修改时间是不同的. -c让ls -l显示的是文件状态修改的时间,而不是文件内容修改时间.当它与-lt选项一起使用的时候,按文件状态修改时间排序;当它只与-l选项一起使用的时候,按文件名排序;不与-l一起使用的时候,按文件状态修改时间排序
$ stat sed*
File: `sed.test'
Size: 6 Blocks: 1 IO Block: 65536 regular
Device: 88337c02h/2285075458d Inode: 24769797950545978 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/
Access: 2009-03-15 11:43:20.927875000 +0800
Modify: 2008-08-08 08:08:00.000000000 +0800
Change: 2009-03-15 11:49:24.781250000 +0800
File: `sed.write'
Size: 12 Blocks: 1 IO Block: 65536 regular
Device: 88337c02h/2285075458d Inode: 1688849860313230 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/
Access: 2009-03-15 14:56:41.031250000 +0800
Modify: 2007-07-07 07:07:00.000000000 +0800
Change: 2009-03-15 14:56:41.046875000 +0800

$ ls -lt --time-style=long-iso sed*
-rw-r--r-- 1 Administrator None 6 2008-08-08 08:08 sed.test
-rw-r--r-- 1 Administrator None 12 2007-07-07 07:07 sed.write

$ ls -ltc --time-style=long-iso sed*
-rw-r--r-- 1 Administrator None 12 2009-03-15 14:56 sed.write
-rw-r--r-- 1 Administrator None 6 2009-03-15 11:49 sed.test

$ ls -lc --time-style=long-iso sed*
-rw-r--r-- 1 Administrator None 6 2009-03-15 11:49 sed.test
-rw-r--r-- 1 Administrator None 12 2009-03-15 14:56 sed.write

$ ls -c --time-style=long-iso sed*
sed.write sed.test


3. 按文件访问时间进行排序
-u指定按访问时间进行排序
$ stat sed* bb
File: `sed.test'
Size: 6 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 24769797950545978 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2000-01-02 03:04:56.000000000 +0800
Modify: 2007-07-07 07:07:00.000000000 +0800
Change: 2009-03-15 15:29:18.921875000 +0800
File: `sed.write'
Size: 12 Blocks: 1 IO Block: 65536 regular file
Device: 88337c02h/2285075458d Inode: 1688849860313230 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 2009-03-15 14:56:41.031250000 +0800
Modify: 2007-07-07 07:07:00.000000000 +0800
Change: 2009-03-15 14:56:41.046875000 +0800
File: `bb'
Size: 0 Blocks: 0 IO Block: 65536 regular empty file
Device: 88337c02h/2285075458d Inode: 8162774324707404 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 1999-01-02 03:04:56.000000000 +0800
Modify: 2007-07-07 07:07:00.000000000 +0800
Change: 2009-03-15 15:34:21.375000000 +0800

$ ls -u sed* bb
sed.write sed.test bb


4. 按文件大小排序
-S 用于指定按文件大小排序.小定的-s用于列出文件大小,但是不按大小排序. 另外,还可以用-h让ls在文件大小后面使用一个更适合的单位
$ ls giant*
giant.file.1 giant.file.2 giant.file.3

$ ls -s giant*
1024 giant.file.1 2048 giant.file.2 3072 giant.file.3

$ ls -sh giant*
1.0M giant.file.1 2.0M giant.file.2 3.0M giant.file.3

$ ls -sSh giant*
3.0M giant.file.3 2.0M giant.file.2 1.0M giant.file.1


5. 先列出文件夹,再列出文件
--group-directories指定先列出文件夹,再列出文件
$ ls
awk.test bc.test.bak kk lsdir2 perl.test~ touch.1
bb func.test log.test orld sed.test xargs.file
bc.test grep.test lsdir perl.test sed.write

$ ls --group-directories
lsdir bb func.test log.test perl.test~ touch.1
lsdir2 bc.test grep.test orld sed.test xargs.file
awk.test bc.test.bak kk perl.test sed.write

上例中,lsdir,lsdir2都是文件夹

另外,-d是列出文件夹本向的信息,而不是文件夹里的文件的信息
$ ls -l lsdir
total 0

$ ls -ld lsdir
drwxr-xr-x+ 2 Administrator None 0 Mar 15 14:36 lsdir


-r可以逆向排序
$ ls -Ssh giant*
3.0M giant.file.3 2.0M giant.file.2 1.0M giant.file.1

Administrator@snow ~
$ ls -Sshr giant*
1.0M giant.file.1 2.0M giant.file.2 3.0M giant.file.3


--time=WORD可以指定ls -l输出什么时间.WORD可以是atime(文件访问时间),ctime文件状态修改时间.如果不指定这个参数,就是文件内容修改时间. 这个参数还可以与--sort=WORD结合使用,指定依哪个时间进行排序.(不过,谁会这么麻烦呢,直接用-t(文件内容修改时间), -c(文件状态修改时间), -u(文件访问时间)就行啦.可能用这个参数形式更统一吧)
$ stat bb
File: `bb'
Size: 0 Blocks: 0 IO Block: 65536 regular empty file
Device: 88337c02h/2285075458d Inode: 8162774324707404 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/Administrator) Gid: ( 513/ None)
Access: 1999-01-02 03:04:56.000000000 +0800
Modify: 2007-07-07 07:07:00.000000000 +0800
Change: 2009-03-15 15:34:21.375000000 +0800

$ ls -l --time=atime --time-style=long-iso bb
-rw-r--r-- 1 Administrator None 0 1999-01-02 03:04 bb

$ ls -l --time=ctime --time-style=long-iso bb
-rw-r--r-- 1 Administrator None 0 2009-03-15 15:34 bb

$ ls -l --time-style=long-iso bb
-rw-r--r-- 1 Administrator None 0 2007-07-07 07:07 bb


-X可以按文件名的后缀排序
$ ls -sh giant*
1.0M giant.file.1 2.0M giant.file.2 3.0M giant.file.3 4.0K giant.file.4

$ ls -Xr giant*
giant.file.4 giant.file.3 giant.file.2 giant.file.1


-b可以显示"不可打印"的字符

上图中有一个文件名里有换行符,不使用-b选项的时候,它显示为一个问号;使用-b以后,换行符以\n显示


转载请注明出处 http://fornote.blogspot.com

没有评论:

发表评论