LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1432|回复: 9

对几个shell命令的一点体会

[复制链接]
发表于 2003-1-25 13:21:48 | 显示全部楼层 |阅读模式
今天看书,无意中对几个shell常用命令有了一些新体会,拿出来博大家一笑,希望能加深大家对shell的认识。(本文是写给初学者的,高手们就不用看了。)
我相信大家都已经知道ls命令的作用,如果不带参数,ls将会列出当前目录下的文件名,并以字母顺序排列出来。如:

[kj501@c4 tmp]$ ls
1  11  2  29  dd  kk  vv

那么要以其它顺序排列文件,比如说以文件使用时间排列文件,应该怎么办? 这个问题也非常简单,加上-u 参数就行了。如

[kj501@c4 tmp]$ ls -u
dd  vv  kk  29  11  2  1

如果加上的是-t 参数,则会以修改时间排列文件:

[kj501@c4 tmp]$ ls -t
vv  kk  dd  29  11  2  1

可以看到文件排列顺序发生了变化,但是否确实按照时间来排列呢? 用-l 参数可以显示文件的详细信息。如:

[kj501@c4 tmp]$ ls -l
总用量 0
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 1
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 11
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 2
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 29
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 dd
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 kk
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 vv

这样,我们可以很清楚的看到,-t 参数是以最后修改的时间来排序文件的,而且是越近的越排在前面。把这两个参数组合在一起,就可以按修改时间排列文件并显示详细信息:

[kj501@c4 tmp]$ ls -lt
总用量 0
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 vv
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 kk
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 dd
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 29
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 11
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 2
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 1

但如果要把顺序反过来,即最后修改的文件排列在后面,最先修改的文件排列在前面,可以再加上一个参数-r,如:

[kj501@c4 tmp]$ ls -ltr
总用量 0
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 1
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 2
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 11
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 29
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 dd
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 kk
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 vv

我们可以看到顺序完全倒过来了。以此类推,ls -lut 会按照最新使用的顺序排列文件。ls -lurt 会用最后使用的顺序排列文件。

[kj501@c4 tmp]$ ls -lurt
总用量 0
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 1
-rw-r--r--    1 kj501    kj501           0  1月 25 11:02 2
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 11
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 29
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 kk
-rw-r--r--    1 kj501    kj501           0  1月 25 11:03 vv
-rw-r--r--    1 kj501    kj501           0  1月 25 11:10 dd

大家细心一点会发现,文件dd的时间与前面不一样。这个我可没有弄错,大家想想是什么道理吧。
接着,我们再来看看sort的用法。我们可以把sort和ls命令组合起来,实现对文件名的排序。如:

[kj501@c4 tmp]$ ls | sort
1
11
2
29
dd
kk
vv

大家一定会看到11比2 大,却排在前面,这是因为sort没有按数字大小排列造成的。要按数字大小排列,用sort -n,如:

[kj501@c4 tmp]$ ls | sort -n
dd
kk
vv
1
2
11
29

当然,根据前面学到的知识,用-r可以把顺序反过来。

[kj501@c4 tmp]$ ls | sort -nr
29
11
2
1
vv
kk
dd

下面,再来看看重定向的问题。如前所述,用ls命令时,显示如下内容:

[kj501@c4 tmp]$ ls
1  11  2  29  dd  kk  vv

如果用ls > temp,文件temp的内容会与上面ls出来的结果完全一样吗?

[kj501@c4 tmp]$ ls > temp
[kj501@c4 tmp]$ cat temp
1
11
2
29
dd
kk
temp
vv

呵呵,很奇怪吧,temp居然也在其中。没关系,原因下面再解释。我们先来看看这个:

[kj501@c4 tmp]$ rm temp
rm:是否删除一般空文件 temp ? y
[kj501@c4 tmp]$ vv > temp
bash: vv: command not found
[kj501@c4 tmp]$ ls
1  11  2  29  dd  kk  temp  vv
[kj501@c4 tmp]$ cat temp
[kj501@c4 tmp]$

我们可以看到,在删除temp文件后,执行vv > temp命令失败,因为在linux中是没有vv这个命令的。但是接着用ls命令查看文件时,我们发现temp文件以出现了。当用cat命令查看temp的内容时,却发现它是一个什么也没有的空文件。
由此,我们可以得出shell在执行vv > temp时的过程。首先是检查有没有temp这个文件,如果没有,就创建它。然后再执行vv,并把结果输出到temp中。当然,由于找不到vv命令,执行失败了,但仍然在磁盘上留下了temp文件。从这个结果,我们也可得出,重定向符号的一端,必须是命令,否则,执行必然会失败。这一点与管道不同,在管道符号的两端,都要是命令,如果有一个是文件名,反而会出问题。不信,你试试看。
发表于 2003-1-26 21:39:07 | 显示全部楼层
谢谢kj兄
发表于 2003-1-26 21:45:44 | 显示全部楼层

新发现

屏幕抓图新法,不用敲命令的法子:
按键盘的[PrtScr]按键,可以直接抓图! 希望能给兄弟们带来方便!
 楼主| 发表于 2003-1-26 21:49:41 | 显示全部楼层

Re: 新发现

最初由 javalee 发布
屏幕抓图新法,不用敲命令的法子:
按键盘的[PrtScr]按键,可以直接抓图! 希望能给兄弟们带来方便!

不对吧,这个办法是在windows下才管用的,在linux下不行啊。
发表于 2003-1-26 21:54:44 | 显示全部楼层
你可以试试呀
 楼主| 发表于 2003-1-26 22:04:37 | 显示全部楼层
我已经试过了,你是怎么做的?
发表于 2003-1-26 22:09:37 | 显示全部楼层
嘿嘿嘿~~~~;)偶然发现的~~~看来linux真的奥妙无穷呀
 楼主| 发表于 2003-1-26 22:13:21 | 显示全部楼层
看来你还想保密。你不说也没关系,我也有我的办法。呵呵。。。
发表于 2003-1-26 22:18:03 | 显示全部楼层
我~~~~比窦娥都怨!真是偶然发现的..我555555~~~
发表于 2003-1-27 11:01:01 | 显示全部楼层
那个printScr估计是有的版本的linux支持...比如MDK(也许支持)...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表