LinuxSir.cn,穿越时空的Linuxsir!

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

关于shell的问题[基本解决]

[复制链接]
发表于 2004-6-13 17:13:12 | 显示全部楼层 |阅读模式
我正在学习http://www.linuxsir.cn/postnuke/ ... order=0&thold=0
Shell从基础学起:第三章 后台执行命令 [连载]

其中有些疑问请各位大大多多指教!!!
问题一:$find /etc -name "srm.conf" -print > find.dt 2 > &1 &
这句话的意思是:找到/ETC下的SRM。CONF文件,重新定向到FIND。DT文件中,并把此工作放到后台进行
现在有个疑问:2 >&1(是什么意思呢!?),为什么不直接 &就好了,完全就可以在后台运行了呀!!!


3.3.1 向后台提交命令
现在我们运行一个find命令,查找名为“ srm.conf”的文件,并把所有标准输出和错误输出重定向到一个叫作find.dt的文件中:

$find /etc -name "srm.conf" -print > find.dt 2 > &1 &
[1]27015

问题二:在运行corntab的时候,按照教学文章所说的范例我写了一corntab的脚
本,如下:
#(put your own initials here) echo the date ton the console every
#15 minutes between 11pm and 6am
0,15,30,45 06-23 * * * /bin/echo 'date' > /dev/tty1

其中和范例有所不同的地方是在时间方面和终端方面,范例的原文是:

#(put your own initials here) echo the date to the console every
# 15 minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console

这断原文的意思是,每天的晚上六点到第二天早上六点每间隔使十五分钟就显示日期到你所登路的终端,不知道我理解的对不对!我开始时是照抄的写了一个
CONRTAB的脚本,但系统发了个MAIL给我说:
From longlei@localhost.localdomain  Sun Jun 13 15:45:02 2004
Return-Path: <longlei@localhost.localdomain>
Received: from localhost.localdomain (biglong [127.0.0.1])
        by localhost.localdomain (8.12.8/8.12.8) with ESMTP id i5D7j1T2002925
        for <longlei@localhost.localdomain>; Sun, 13 Jun 2004 15:45:02 +0800
Received: (from longlei@localhost)
        by localhost.localdomain (8.12.8/8.12.8/Submit) id i5D7j1ta002923
        for longlei; Sun, 13 Jun 2004 15:45:01 +0800
Date: Sun, 13 Jun 2004 15:45:01 +0800
Message-Id: <200406130745.i5D7j1ta002923@localhost.localdomain>
From: root@localhost.localdomain (Cron Daemon)
To: longlei@localhost.localdomain
Subject: Cron <longlei@biglong> /bin/echo 'date' > /dev/console
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/longlei>
X-Cron-Env: <ATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=longlei>

/bin/sh: line 1: /dev/console: Permission denied
我看了一下觉得是终端号不对,就把终端号改成了TTY1了,但现在还有问题,就是CRONTAB可以运行,但是输出的结果不是日期,而就是date这个命令,而且每十五分钟就有一次,这是正常的,那么,我想问,是我上面什么地方写错了吗!?为什么不会出现日期呢!?只会出现date这个字段呢!?

我用的系统是BSHELL的,不是SHELL的说,呵呵,也不知道我理解的对不对,用的是LINUX的REDHAT 9。0 请高手指教,鞠躬!!!
发表于 2004-6-13 17:28:20 | 显示全部楼层
1,2>&1的意思论坛里有详悉的解释,望搜索,简单的说就是把find出错的信息送到标准输出的地方,这里是文件 find.dt
不加&是可以,但是如果你搜索的时间占用过长的时候,用&可以把任务放在后台执行,这样把前台(终端)的资源释放出来
[1]27015是后台任务ID
2,crontab这样的实例在论坛也比比皆是,望搜索关键字:crontab
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=5115
date旁边的是反引号(``),而不是单引号('')
3,redhat的默认shell是bash
 楼主| 发表于 2004-6-13 18:00:13 | 显示全部楼层
非常感谢您回复我这种非常低级的问题,那么我想呢,我不是没有进行搜索的,呵呵,可是我的理解能力可能不大对,所以总是发生歧义,所以真的对不起!给您添麻烦了!
对与您的回复中提到“1,2>&1的意思论坛里有详悉的解释,望搜索,简单的说就是把find出错的信息送到标准输出的地方,这里是文件 find.dt” 我就是对这段不理解的说,唉,资料早看了还是不大理解!!
我把我理解的意思说一下,您看看对不对,如果有错误,请您务必指出!
我理解中有问题的地方是:$find /etc -name "srm.conf" -print > find.dt 2 > &1 &
对与您说的1、2的理解:1是正确的信息,2是错误的信息,
那么>是重新定向,这个也没有任何问题的
但下面我就有点问题了
按照上面所说的2 > &1 &
那么意思是,错误的信息重新定向到&1(这个&1是您说的标准输出的地方,即是find.dt,是这么理解吗!?)那么为什么要有个&的符号呢!?后面已经有了一个&的符号了,那么就标示已经在后台运行了呀!那么&1所代表的是后台正在运行的正确的信息,是不是这么理解呢!?而后面的&号是对于$find /etc -name "srm.conf" -print > find.dt 2 > &1 &起作用的,对吗!?

呵呵,也就是说,这句话的最终的意思是:找到/ETC下名字叫SRM。CONF的文件并把输出结果重定向到FIND。DT中,而在这过程中出现的错误信息要把它也重定向写入到后台正在运行的正确信息输出的地方,也就是FIND。DT中,那么整个过程由&来放置到后台进行!

不知道我这么理解对不对,非常感谢您的帮助,鞠躬!!!!
 楼主| 发表于 2004-6-13 18:05:12 | 显示全部楼层
另外呢,现在论坛的学习的贴子比较多,您可不可以给点建议给我呢!?呵呵,我知道这个要求有点过分,还请您原谅,我自己看的话,好象总有点盲人摸象的感觉,对于SHELL我是完全的初学者的说!如果您愿意指点一二,非常的感激!!!
发表于 2004-6-13 18:18:30 | 显示全部楼层
举个例子吧
command >out 2>&1
命令 的默认输出是屏幕,即标准输出,描述符为1,
而此命令用重定向>改变了他,而把命令的输出送至文件out,此时的标准输出是文件out,即1
2表示标准错误输出,他的默认输出也是屏幕,但是>&改变了他,等于把错误的输出信息也送到了1,
所以,这话的标准解释:
把command的结果重定向至文件out,command在执行中出现的错误也送到文件out
这样的讨论论坛有,也许你没有找到吧~~~~~呵呵
其实自己作个实验,如:
/home/lee/test#ls
a  aa  aaa  a.tmp  b  b.tmp  c  d  e  f  tmp
/home/lee/test#ls c >out 2>&1   #用ls查看文件c,并把出错信息和输出信息一同送至out文件
/home/lee/test#cat out
c
/home/lee/test#ls fff >out 2>&1  
/home/lee/test#cat out  #因为目录里没有fff这个文件,所以出错,那么请看:
ls: fff: 没有那个文件或目录
/home/lee/test#
发表于 2004-6-13 18:20:03 | 显示全部楼层
学习shell,这里有很多的入门教程和实例,基本都在置顶区,望善用论坛搜索
 楼主| 发表于 2004-6-13 18:25:01 | 显示全部楼层
谢谢您耐心的解释,我完全明白了,真是非常感谢您!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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