一个朋友昨天在工作的时候不小心把/usr目录下的任何文档和子目录的owner用chown -R命令改成了他自己,机器立马就登录不进去了。万幸的是,他更有一个root的console没有关掉。根据上述的情况,写了一个脚本,现在和大家分享。脚本名:ckown
[code:1:7a7edddf48]#!/bin/sh
mkdir /tmp/recd #在/tmp下建立临时目录recd以存放脚本产生的文档
fn=$1 #fn作为调用的参数,本文中即为/usr
tmpd=/tmp/recd
tmpf=${tmpd}/tmpfout #输出文本
err=${tmpd}/tmpferr #错误文本
cmd=${tmpd}/tmpfcmd #正确的文本
notfound=${tmpd}/tmpfnotfound #没找到的文本
if grep "^$fn " /var/sadm/install/contents > $tmpf 2>&1 #察看文档名或目录名是否存在/var/sadm/install/contents中
then
ln=`wc -l $tmpf | awk '{ print $1}'` #确保没有重复的文档名
if [ $ln = 1 ]
then
awk '{ print "chown",$5":"$6,$1 }' $tmpf >> $cmd #将找到的文档名写入文本,并且做好chown的格式
else #有重复的一般都是联接连同目录
echo "======$fn=======" >> $err
cat $tmpf >> $err
echo >> $err
#将重复的目录名写入文本
awk '$2=="d" {print "chown",$5":"$6,$1 }' $err >> $cmd
fi
else
echo "$fn" >> $notfound
fi
echo $fn
[/code:1:7a7edddf48]
只所以要将输出存入文本是为了安全,然后在仔细检查了tmpfcmd文档后
[code:1:7a7edddf48]/bin/sh tmpfcmd[/code:1:7a7edddf48]
这个脚本其实是利用了/var/sadm/install/contents文档的性质:任何系统安装文档都在该文档中留有记录。
当然,假如是/home目录被改了的话,这个脚本就帮不上忙了。
| C.Arthur 回复于:2003-12-04 18:41:06 |
| 精品啊 |
| nanaskylead 回复于:2003-12-04 20:34:06 |
| 嘿嘿,被偶像一夸,立马体重减轻了50%。。。。。。 |
| 予默 回复于:2003-12-04 20:43:11 |
| 大侠 |
| nanaskylead 回复于:2003-12-05 08:06:02 |
| 被您们都夸的不好意思了,谁不知道iricyan和C.Arthur是CU的两面旗帜啊。 |
| beginner-bj 回复于:2003-12-05 08:51:00 |
| 各位大侠,
上面的脚本更有个小问题,就是没有做递归。 |
| 朽木可雕 回复于:2003-12-05 09:17:28 |
| 走召弓虽 |
| sunmarmot 回复于:2003-12-05 09:33:47 |
| [quote:ca0645ed54="nanaskylead"]被您们都夸的不好意思了,谁不知道iricyan和C.Arthur是CU的两面旗帜啊。[/quote:ca0645ed54]
iricyan也是偶的偶像呀!!好崇拜 :mrgreen: |
| metor78 回复于:2003-12-05 09:36:06 |
| 不错!顶! |
| beginner-bj 回复于:2003-12-05 09:41:41 |
| MY GOD!
自己都不试试,就说好? |
| nanaskylead 回复于:2003-12-05 09:53:44 |
| sorry,漏了点东西,寒自己一个。。。。。。
[code:1:e26eba6651]find /usr -user xxx > /tmp/xxx /tmp/ckown /tmp/xxx[/code:1:e26eba6651] 把任何被改过的文档写到/tmp/xxx中,然后对这个文档做操作。这样就递归了,:),上文中我说对整个/usr做操作是错的,我道歉。 郁闷,做的时候倒是很有条理,写出来的时候就忘了。 谢谢beginner-bj,您总是很仔细认真哦。 |
| beginner-bj 回复于:2003-12-05 10:41:40 |
| [code:1:98249fceab]#!/bin/sh
mkdir /tmp/recd #在/tmp下建立临时目录recd以存放脚本产生的文档 tmpd=/tmp/recd tmpf=${tmpd}/tmpfout #输出文本 err=${tmpd}/tmpferr #错误文本 cmd=${tmpd}/tmpfcmd #正确的文本 notfound=${tmpd}/tmpfnotfound #没找到的文本 find $1 > /tmp/xxx for fn in `cat /tmp/xxx` do if grep "^$fn " /var/sadm/install/contents > $tmpf 2>&1 #察看文档名或目录名是否存在/var/sadm/install/contents中 then ln=`wc -l $tmpf | awk '{ print $1}'` #确保没有重复的文档名 if [ $ln = 1 ] then awk '{ print "chown",$5":"$6,$1 }' $tmpf >> $cmd #将找到的文档名写入文本,并且做好chown的格式 else #有重复的一般都是联接连同目录 echo "======$fn=======" >> $err cat $tmpf >> $err echo >> $err #将重复的目录名写入文本 awk '$2=="d" {print "chown",$5":"$6,$1 }' $err >> $cmd fi else echo "$fn" >> $notfound fi echo $fn done[/code:1:98249fceab] |
| brucewoo 回复于:2003-12-05 10:44:05 |
| Solaris 5.8
01. find /usr -user root > /tmp/abc.txt 02. ckown /tmp/abc.txt 03. cat /tmp/recd/tmpfcmd 该文档没有任何内容,该脚本似乎有问题吧
文章整理:西部数码--专业提供域名注册、虚拟主机服务 相关文章
热点关注
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源 网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧 行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒 网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer 网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash 程序设计 Java技术 C/C++ VB delphi 网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术 操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD |




