当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 在dpkg.log和/var/lib/dpkg/info/找一批同时安装的包(写好的bash)
帖子发表于 : 2006-05-06 23:06 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
赶紧补充一句,有人用此脚本对系统原始安装的包操作过,而且按照提示删除了。这个要小心啊。因为最开始系统安装时,包没有明确按照依赖关系操作的,所以有可能把不应该删除的包都一起显示出来了。此脚本一般针对后面独立安装的包及其依赖包,这样才会正常。

第一种方法:简单些,只是操作/var/log/dpkg.log。适合于刚刚安装的软件,操作量小。

代码:
#!/bin/bash

[ -z $1 ] && exit 1;
arg=$1
grep '[0-9]\ install' /var/log/dpkg.log>tmp
find=`awk '$4~/'$arg'/ {print $2}' tmp`    [color=red]#不知道awk如何执行{find=$2:0:5}这样的功能,只好输出到find,再有bash处理。[/color]
find=${find:0:5}
dpkg=`awk '$2~/'$find:[0-9][0-9]'/ {print $4} ' tmp`     [color=red]#目前只是判断了同一分钟的,需要判断上下2分钟内的。也是不知道awk如何执行{dpkg+=" "$4}这样的功能[/color]
echo sudo apt-get remove --purge $dpkg


执行结果如下:
引用:
exp@eexpress:~$ ./find-install-dpkg-group.sh 囗囗囗
sudo apt-get remove --purge libevent1 囗囗囗囗囗囗囗 囗囗囗囗囗囗 囗囗囗
exp@eexpress:~$ ./find-install-dpkg-group.sh eyed3
sudo apt-get remove --purge python2.4-eyed3 python-eyed3 eyed3


第二种方法:由于上面的操作,是读dpkg.log内容,有可能文件内容已经不包含所有包的信息,下面修改为另外一种操作。直接操作/var/lib/dpkg/info/目录。这样可以追溯系统的所有安装的包。

代码:
#!/bin/bash

[ -z $1 ] && echo "输入一个正则表达式参数,指明需要查找的包。本bash将给出与指定包同时安装的那些依赖包的卸载命令。" &&exit 1;
arg=$1
cd /var/lib/dpkg/info/
ls -l -t *.list|awk '$5!=0 {gsub(".list","",$8); print $6"-"$7,$8}'>~/dpkg.list
awk '$2~/'$arg'/' ~/dpkg.list>~/tmp
echo 找到如下结果:
cat ~/tmp
t=`cat ~/tmp|wc -l`
[ $t -eq 0 ] && echo "没有找到任何包" && exit 1;
[ $t -gt 1 ] && echo "找到以上一系列包。但需要确定唯一的一个包。" && exit 1;
echo 可以使用以下命令,卸载全部与 `awk '{print $2}' ~/tmp` 同时安装的依赖的包
find=`awk '{print $1}' ~/tmp`
dpkg=`awk '$1~/'$find'/ {print $2} ' ~/dpkg.list`
echo --------------------------------------------
echo sudo apt-get remove --purge $dpkg
echo --------------------------------------------
cd ~
rm dpkg.list tmp


执行如下:
引用:
$ ./find-install-dpkg-group-1.sh eth
找到如下结果:
2006-03-14-05:23 ethtool
可以使用以下命令,卸载全部与 ethtool 同时安装的依赖的包
--------------------------------------------
sudo apt-get remove --purge tcpd ubuntu-keyring reiser4progs reiserfsprogs strace pciutils python netbase netcat net-tools ntpdate whiptail memtest86+ mii-diag libiw28 libsysfs2 libwrap0 lsb-release lsof libpopt0 libreiserfs0.3-0 libldap2 libncursesw5 libnewt0.51 libopencdk8 libtasn1-2 libusb-0.1-4 less libatm1 libgcrypt11 libgpg-error0 liblzo1 iputils-ping jfsutils grepmap ifupdown libgnutls12 libgpmg1 gettext-base eject ethtool libfribidi0 cpio console-common
--------------------------------------------


引用:
$ ./find-install-dpkg-group-1.sh amule
找到如下结果:
2006-03-26-18:25 amule
2006-03-26-18:25 amule-utils
找到以上一系列包。但需要确定唯一的一个包。


引用:
$ ./find-install-dpkg-group-1.sh amule$ <------使用正则表达式,确定唯一的包
找到如下结果:
2006-03-26-18:25 amule
可以使用以下命令,卸载全部与 amule 同时安装的依赖的包
--------------------------------------------
sudo apt-get remove --purge amule amule-utils
--------------------------------------------


_________________
● 鸣学


最后由 eexpress 编辑于 2006-05-22 12:51,总共编辑了 4 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-05-06 23:12 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
这是为了方便大家平时测试软件写的。安装一个软件,发现不好用,或者不是需要的,新利得里面如果卸载,总会搞不清附带安装了那些包。
使用上面2个bash,就可以轻松的卸载,而且不会把同时也是其他软件需要的依赖包也卸载的。
安装时间操作的,没想好如何处理跨过一分钟安装的包如何处理。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-05-07 20:06 
头像

注册: 2006-04-24 14:20
帖子: 55
送出感谢: 0 次
接收感谢: 0 次
谢谢楼主共享,虽然现在暂时还没有用得上

正在学习bash中...


_________________
^偶的个性,偶的最爱^

----------------------------


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译