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

Linux 在特定的shell命令=>;之后执行一些操作;(跟踪已安装的软件包),linux,shell,install.packages,Linux,Shell,Install.packages,我刚刚安装了一个新的Linux发行版,我想跟踪我将要安装的所有新软件包 因此,每次运行sudo apt get install packageName,我都希望记录特定的包以跟踪我的配置 然后,对于新安装,我可以编写一个简单的脚本来选择是否要安装旧软件包 你们有解决办法吗?也许简单的方法就是跟踪包含所有已安装软件包的文件?但我确信有很多依赖关系,而不是基本的依赖关系 这样做的目的是永久地监视shell条目并保存匹配的字符串(包名),也许这不是最好的解决方案 提前感谢您的帮助。您可以创建一个脚本,

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

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

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

你们有解决办法吗?也许简单的方法就是跟踪包含所有已安装软件包的文件?但我确信有很多依赖关系,而不是基本的依赖关系

这样做的目的是永久地监视shell条目并保存匹配的字符串(包名),也许这不是最好的解决方案


提前感谢您的帮助。

您可以创建一个脚本,作为install命令的别名,它可以记住每个新安装的软件包,可以将每个条目附加到某个文件中。此脚本可以选择重新安装软件包,如果选中此选项,将遍历每个记住的软件包,并提示您是否要安装它。如果备份该脚本和已安装软件包的文件,那么在干净的计算机上只需复制这些文件并重新安装所需的软件包


或者,您可以研究使用Puppet、Chef、Salt等资源调配工具来为您的系统进行资源调配。这可能是一个更好的方法。

在跟踪软件包安装时间方面——您不需要;(具体请参见
/var/log/apt/history.log
)。因此,对于给定的用例,您真的不需要遵循下面的建议


然而,作为对这个问题的一般回答:写一个包装器。例如,如果
/usr/local/bin
位于
/usr/bin
前面,并且
/bin
位于
sudo
为root创建的路径中,那么您可以在
/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 "$@"

顺便说一句,dpkg已经跟踪了用户请求安装的包(而不是依赖项安装的包)以及安装时间。因此,我不知道你为什么要自己建造这个。