在特定shell命令后执行一些操作=> (跟踪已安装的包裹)

时间:2015-04-10 15:59:14

标签: linux shell install.packages

我刚安装了一个全新的Linux发行版,我想跟踪我要安装的所有新软件包。

因此,每次运行sudo apt-get install packageName时,我都想记录特定的包以跟踪我的配置。

然后,对于新安装,我可以编写一个简单的脚本来选择是否要安装旧包。

你们有没有解决方案?也许简单的事情就是用所有已安装的软件包跟踪文件?但我确信有很多依赖,而不是基本的?

我们的想法是永久监视shell条目并保存匹配的字符串(包名)也许这不是最好的解决方案。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以创建用作安装命令别名的脚本,该脚本会记住每个新安装的软件包,可能是通过将每个条目附加到某个文件的某个位置。此脚本可以选择重新安装包,如果选择,将迭代每个记住的包并提示您是否要安装它。如果您在干净的计算机上备份该脚本和已安装软件包的文件,则只需复制这些文件并重新安装所需的软件包。

或者,您可以使用配置工具(如Puppet,Chef,Salt等)来调查您的系统。这可能是一种更好的方法。

答案 1 :(得分:0)

在跟踪包安装时间方面 - 您不需要; apt-get already records all the metadata you need(特别参见/var/log/apt/history.log)。因此,您真的不需要遵循以下针对用例的建议。


但是,作为问题的一般答案:写一个包装器。如果/usr/local/bin位于/usr/bin/bin前面sudo为根创建的路径中,那么您可以将以下内容放在/usr/local/bin/apt-get中:

#!/bin/bash
# ^-- using /bin/bash rather than /bin/sh enables printf %q

# Shell-quote the command to unambiguously present arguments even if it contains
# newlines, spaces, etc.
printf -v cmd '%q ' "${0##*/}" "$@"

# Trim the trailing space
cmd=${cmd%" "}

# Log that command
printf '%s\n' "$cmd" >>/var/log/apt-get-commands

# ...and run the real command.
exec /usr/bin/apt-get "$@"