今天面试的一道题,我不会做

发表于:2007-06-08来源:作者:点击数: 标签:
:(:( 每天12:10,把/tmp目录下大于1M的文件复制到/save目录下。 :(:( race 回复于:2003-08-16 18:25:14 厉害厉害 zhangzzs 回复于:2003-08-16 18:28:11 我也不会呀.这个是要写脚本吧,可是我一点脚本都不会写. blazewater 回复于:2003-08-16 18:44:05 好

:(  :( 

每天12:10,把/tmp目录下大于1M的文件复制到/save目录下。

 :(  :(

 race 回复于:2003-08-16 18:25:14
厉害厉害

 zhangzzs 回复于:2003-08-16 18:28:11
我也不会呀.这个是要写脚本吧,可是我一点脚本都不会写.

 blazewater 回复于:2003-08-16 18:44:05
好像在crontab中可以定时做某些任务,具体看man;
然后写个脚本复制文件不就可以了么
脚本结构可以如下:
#!/bin/sh
files=`ls -l /tmp |awk '{if (文件大小那一项 > 1M) print 文件名那一项}'`
for file in $files 
do
    cp $file /save
done
echo "backup OK!"

写的比较简单

 yuwang007 回复于:2003-08-16 18:45:10
crontab -e 
     10 12  * * *   /save.sh



vi  /save.sh

#!/bin/sh
AWK=/usr/bin/awk 
GREP=/usr/bin/grep 
for i in `ls -tr /tmp/ | $GREP -v ^d | $AWK  '{ if ($5>1048576)  print  $9 }'`
do
      cp  -f  /tmp/$i     /save
done

 w8u8 回复于:2003-08-16 21:41:47
我看不懂,
唉,我真的是太菜了。

 Liu_xp2003 回复于:2003-08-16 21:51:10
能看懂,现在叫我写,估计功力不够! :oops:

 aerolite 回复于:2003-08-16 23:38:36
没有这么复杂吧,这样做就可以了
crontab -e 
10 12 * * * find /tmp -size +1048576c -exec cp $ /save \;

 czw1413_cn 回复于:2003-08-17 11:17:27
呵呵
真够简练的
是那么个意思
行不行你试了吗

 78020281 回复于:2003-08-17 11:26:44
高手,  能看懂些,但是写不出来。

 Arthurking 回复于:2003-08-17 14:30:04
crontab -e 
也是脚本里的吗?
第一次启动后是不是就每天执行了?

 coffee and tea 回复于:2003-08-17 15:06:01
真是好贴子~我估计此贴能激起很多人学习shell的兴趣呢






 wanglp2000 回复于:2003-08-17 15:39:58
这些讨论我觉得很......(滑稽用的多些)
这可是系统管理员最简单的活了,难道这也叫难啊?
看来.........

 itisok96 回复于:2003-08-17 16:42:09
强的说

 yuwang007 回复于:2003-08-17 18:47:38
10 12 * * * find /tmp -size +1048576c -exec cp {} /save \; 



   我没用过那种  find    + , man里没找到,可能没仔细看

 rocazj 回复于:2003-08-18 08:55:05
1、find . -size +200c -exec cp {} 1 \;
将所有大于200字节的文件拷贝到子目录1下。

2、find . -size +26m -exec cp {} 1 \;
将所有大于26兆字节的文件拷贝到子目录1下。

3、find . -size +1k -exec cp {} 1 \;
将所有大于1K字节的文件拷贝到子目录1下。

 houji 回复于:2003-08-18 11:03:12
rocazj 的方法很简单,好使。

 xiongshoufen 回复于:2003-08-18 13:37:40
我连看读看不懂,好惨啊!!!

 twlogin 回复于:2003-08-18 13:49:51
做一个系统管理员不懂shell是无法想象的

 welbird 回复于:2003-08-18 14:12:24
又学了一招,嘿嘿

 6liuy 回复于:2003-08-18 16:23:47
不错,使用find命令

 okwiner 回复于:2003-08-18 16:25:42
shell和编程是一回事么?用什么控制命令执行的逻辑?

 llc107 回复于:2003-08-18 16:38:26
[quote:505116de8a="aerolite"]没有这么复杂吧,这样做就可以了
crontab -e 
10 12 * * * find /tmp -size +1048576c -exec cp $ /save \;[/quote:505116de8a] 

nice done!

 JuGar 回复于:2003-08-18 23:41:21
find很好用的呀~~

 寒带鱼 回复于:2003-08-20 22:20:56
xarg也可以撒

 snaking 回复于:2003-08-24 13:19:27
收到

 blazewater 回复于:2003-08-24 15:07:14
shell实际上是功能很强大的武器
不同的功能都可以实现同一个功能
所谓条条大陆通罗马嘛
不要在这上面浪费口水了
还是多看看书吧

 浦东本地人 回复于:2003-08-24 23:15:27
没有想到那么菜!!!!  
上次我应聘时还要现场写个POSTSCRIPT的脚本呢,足有84行长.还必须用PERL和KSH写两个版本.

 wanfei 回复于:2003-08-25 12:28:56
这个帖子不错。应表扬

 akai_feng 回复于:2003-08-25 13:38:46
说句老实话,好像这已经是熟练SA的最低要求了,不然,也不会出现在面试题

good good study
day day up

 ustcboy 回复于:2003-08-26 15:38:48
http://ustcboy.51.net/download/sa239.rar
    http://ustcboy.51.net/download/sa299.rar


sa299不是教材/好像是做的幻灯片
希望对大家学习有帮助

 tiaozao 回复于:2003-08-27 00:33:46
[quote:5a49ba9be2="rocazj"]1、find . -size +200c -exec cp {} 1 \;
将所有大于200字节的文件拷贝到子目录1下。

2、find . -size +26m -exec cp {} 1 \;
将所有大于26兆字节的文件拷贝到子目录1下。

3、find . -size +1k -exec cp {} ..........[/quote:5a49ba9be2]     

有人试过这个方法么?
我试了,不可以

 老同志lawson 回复于:2003-12-01 17:48:00
脚本如下:
#!/usr/bin/bash
cd /tmp
for file in `ls`
do
if [ -f $file ]
then
file2=`ls -al $file|awk '{print $5}'`
long=`expr 1024 \* 1024`
if [ "$file2" -gt "$long" ]
then
cp $file /save/
fi
else
continue
fi
done
cd ..

 xyf721127 回复于:2005-02-14 00:15:58
看不懂啊,真是很着急!

 Linux@初学者 回复于:2005-02-14 13:45:13
汗一下。

 jndu 回复于:2005-02-14 14:15:15
1M=1048576c ?

怎么得出来的?

不应该是1024*1024*1024=1073741824 么?

 bosshoss_cn 回复于:2005-02-14 16:22:56
我也问一下:
要求在/save目录下自动生成以日期为名字的子目录再COPY行否?
如何实现?
格式:YYYY-MM-DD

 骁骑尉 回复于:2005-02-15 09:11:59
[quote:67bb23a78f="tiaozao"]    

有人试过这个方法么?
我试了,不可以[/quote:67bb23a78f]

find . xxxx

这个表示find的操作是从当前目录开始执行的。前面的题目要求是对/tmp目录下的文件进行操作,所以要使用 find /tmp xxxx

 samshi 回复于:2005-02-16 13:52:15
crontab -e 
10 12 * * * find /tmp -size +1048576c -exec cp {} /save \;

 maping 回复于:2005-02-16 17:46:03
上面说的我也好多看不懂,翻书找到下面内容,和大家共享!



Crontab 安排某个命令有规律地在特定的时间执行
语法:crontab filename
crontab options [user_name]
概述
crontab 命令允许用户提交一个工作列表,这些工作是在用户指定的时间运行。这些命令保存被称为crontab 的文件中。名为cron的系统命令读取crontab文件,并运行这些命令。如果在用户的crontab文件的命令行中没有进行输出重定向,那么才采用标准和错误输出。
参数
在第一种语法格式中,filename是包含crontab命令的一个文件名。如果用户使用一个连字号作为文件名,crontab将从用户键入的标准输入中读取数据;以CONTROL-D结束。
第二种语法格式中的user-name 能够由超级用户来指定,从而能为一个特别的用户改变crontab文件。
选项
 -e    edit.在用户的crontab文件上运行由EDITOR这个shell变量指定的文本编辑器,使得用户可以进行添加,改变或者删除文件的全部。在创建/编辑crontab之后,这个选项将安装它。
  -l    list 显示用户的crontab文件的内容
  -r    remove 删除用户的crontab文件。
注意
每条crontab命令以5个空格风隔字段开始,指定了命令应该什么时候运行:
l 分钟(0-59)
l 小时(0-23)
l 某月的一天(1-31)
l 某年的一月(1-12)
l 某星期的一天(0-6,0=Sunday)
星号代表所有可能的植。
示例
在下面的示例中,root用户设定了一个由cron在没个周六的早上2:05开始执行的命令,这些命令将新五天中系统中没有被访问到的core文件全部删除。ROOT用户从控制台直接输入命令。
# crontab
5 2 * * 6 /usr/bin/find / -name core –atime +5 –exec rm {} \;
CONTROL-D
紊乱在用户的crontab 文件中增加一个条目,运行带有-e选项的crontab命令。-l选项显示了用户crontab 文件的一个副本。
# crontab –l
5 2 * * 6 /usr/bin/find / -name core –atime +5 –exec rm {} \;

 victor_hu 回复于:2005-02-17 14:42:12
crontab -e
0 12 * * * find /tmp -size +1048576c -exec cp -r {} /save \;

 victor_hu 回复于:2005-02-17 14:57:20
试试下面的:

crontab -e
0 12 * * * find /tmp -size +1048576c -exec cp {} /save \;

 freedemon 回复于:2005-02-17 15:36:23
[quote:f233a80069="aerolite"]没有这么复杂吧,这样做就可以了
crontab -e 
10 12 * * * find /tmp -size +1048576c -exec cp $ /save \;[/quote:f233a80069]

不错

思路正确

再严谨一点的话可以加上-type f,限定常规文件,避免一些可能发生的权限错误

find [PATH] -type f -size +******c -exec "......."\;
只要用find查找出对应目录中常规file类型,大小大于(+)1024k的文件,使用find的exec参数调用命令就可以了。

几个需要注意的细节:
1. -type f限定文件类型;
2. -size参数默认数值单位为block(长度512B的Block),如果要用字节作为单位,需要在最后加c,比如1024c,就代表1024Byte;+/-表示大于或小于,否则就代表精确相等;
3. 使用exec进行文件备份命令的执行;
4. 使用crontab定时调用find一条命令就可以了,根本不必写脚本。

.

 sun_boy 回复于:2005-02-17 15:55:02
发现自己很多东西学的还是不够熟练!呵呵!

 xxxxl 回复于:2005-02-18 10:11:13
在solaris下是这样:
crontab -e 
10 12 * * * find /tmp -type f -size +1048576c -exec cp {} /save \;

 fywlily 回复于:2005-02-28 13:13:11
知道个意思,具体的写估计一遍要写错

 sbleo 回复于:2005-02-28 14:11:24
现场那么紧张估计写个大概,面试官也不会太为难的,不过如果不知道怎么下手就要自我检讨一下了。

 Crazy土匪 回复于:2005-03-29 21:08:39
能看懂,写不出来。呵呵

 nhzjoke 回复于:2005-03-29 23:31:51
[quote:eff51c2489="aerolite"]没有这么复杂吧,这样做就可以了
crontab -e 
10 12 * * * find /tmp -size +1048576c -exec cp $ /save \;[/quote:eff51c2489]

楼上的是正解!

原文转自:http://www.ltesting.net