Posts Tagged ‘xargs’

同时操作多台主机的命令行

September 27th, 2009

先让命令行亮相一下:

cat conf/slaves| xargs echo |sed -e "s/ /,/g" | \

sed -e "s/^\(.*\)$/pdsh -f 200 -w \"\1\" \"jps|grep JobShell|cut -f1 -d\’ \’ |xargs kill -9 \"/" | \

/bin/bash

第一行主要就是将一行一个的 slave 整成全在一行里,逗号分隔,第一行的 sed 用 tr 也能干。

第二行的用途是整成一个 pdsh 命令行,这是个同时操作多台机器的工具,pdsh –w 后面是节点列表,也就是刚才那个一行的文件列表。后面用引号引起来一群命令行,这些命令行会送到每台计算机去执行,上面这行实际是去杀掉每个节点上的 JobShell Java 进程。最后,第三行里,是把上面合成的命令行交给 shell 执行

这个命令行看起来长,但实际上并不复杂,这里还有一个变形版本

cat conf/slaves| xargs echo |sed -e ‘s/ /,/g’ | \

sed -e "s/^\(.*\)$/pdsh -f 200 -w \"\1\"
\’ for i in \`seq 2001 2100\`;
do  \/share\/home\/testhdp\/hadoop-0\.19\.2\/bin\/hadoop fs -touchz \`uname -n\`\.\$i ;
done \’ /" | \

/bin/bash

中间一行被断成四行写了,实际不应该断行的,这里面的头一部分和上面是一样的,之后的关键实际是怎么把反引号送出去,而不是当场在本机shell被直接变量替换了,实际处理很简单——将命令行放在单引号里,当然,各种引号和 i 前面的 $ 需要反斜线,否则在送到 bash 之前就被当前 shell 给解释了。这样处理后,反引号会被送到每台机器上,由那台机器上的shell来将反引号打开、变量替换也会在远程进行。

嗯,这个命令行长,但是并不很复杂,有兴趣的朋友可以修改并反馈哈。

按路径选择文件

October 22nd, 2008

选取上层目录下的 global 和 util 两个子目录之外的所有子目录的 c 源文件,并送至某程序(这里用 echo 代替)的命令行

ls ../*/*.c | grep -v "^../\(global/\|util/\)" | xargs echo

这里主要是 grep 的或操作需要注意一下,其余没有什么特别的。

清除已删除软件包的配置文件的方法

May 14th, 2008

嗯,今天 (May 14th, 2006) 清理一下系统,使用了一个命令行,可能对其他人有参考价值

dpkg -l |grep "^rc"|awk ‘{print $2}’ |xargs aptitude -y purge

用途:

删除已经删除的软件包的残留配置文件。因为 debian 中 remove 包不删除配置文件,purge 才能清除,但根据依赖关系自动清除都是 remove,在加上自己失手操作,所以用得时间长了,难免残留很多没必要的配置文件,比较烦,于是有了上述操作。

说明:

1) dpkg –l

列出系统中安装的所有包的状态,`ii’ 开头的是正常安装的包,`rc’开头的则是删除但仍留下配置文件的包,其他状态则是有错误的状态,自己执行一次就明白了,输出结果的开头有说明的。

2) grep "^rc"

提取以 rc 开头的包,也就是被删除但仍残留配置文件的包的信息的行

3) awk ‘{print $2}’

打印这些包的名字,他们位于 dpkg -l 输出结果的第二个字段,估计有很多人是通过这个命令认识到 awk 的,也有很多人只在这个命令行中才使用 awk,我就是其中之一。

4) xargs aptitude -y purge

把上述输出,也就是要清除配置文件的包的名字放在 aptitude -y purge 后面,purge 命令会清除配置文件,而 -y 参数会自动对后面 aptitude 命令的提示回答是,这个开关通常是危险的,所以在一般情况下不要轻易使用,而在这里,如果你确定这些包的配置文的清除是没有问题的的话,可以使用这个开关。

完毕 :)

Switch to our mobile site