我如何编写一个 bash 脚本来执行 apt-get?

我如何编写一个 bash 脚本来执行 apt-get?

我正在尝试使用 bash 脚本自动化一些配置,我以前从未这样做过,因此我尝试使用一些简单的东西,例如,Hello World!一切都运行正常,但是后来我尝试了这样的事情:

#!/bin/bash
sudo su
apt-get purge postfix

但它什么也不做,我检查并且 postfix 仍然安装着,并且在任何时候它都会要求我输入任何信息,我刚刚尝试过apt-get但是我会做一些事情ssh-keygen或者甚至写入我猜测的文件cat或者其他什么,我怎样才能让脚本运行并且同时看到发生了什么?

答案1

sudo su为您运行su,然后让您以 root 身份进入 shell,等待您的输入。

您要做的就是sudo apt-get purge postfix……man sudo了解原因。

您会发现大量的 bash 脚本示例可供进一步参考。

答案2

最好由 root/admin 帐户自动执行此操作,而不是留在标准用户的文件中。

关于您想要完成的事情的最佳做法是成为 root sudo su -,然后在 /root 用户目录中工作。通常最好将类似的东西保存在 中,~/bin如果~/scripts不存在,您可能需要创建它,然后验证新目录是否属于您的PATH。保留某种脚本目录来存放您用来管理系统的小脚本总是一个好主意,随着时间的推移,您将拥有相当多的脚本,并且每个管理员都有他们为这些事情保留的“工具箱”。诀窍是尝试编写可重复使用的代码,从而使您的生活更轻松。

如果您要使用其中的一些文件,我会为它们创建一个特殊的目录,~/scripts/sysupdates并尝试让每个文件只执行一项操作。这反映了其他 *nix 系统(如 init.d)的功能,并将使系统维护更加轻松直观。这也有助于限制我们在其他地方的条目,您很快就会看到。

如果你为上面提到的要更新的内容创建了文件(例如 postfix、qmail、update),那么你可以使用 ~/scripts 中的一个脚本循环遍历它们,该脚本可以是这样的:

#/usr/bin/bash
#
# Script: updater.sh
# Author: My Name  
# Date: yyyymmdd - ee   (ee = times edited)
# 
# Purpose: run update scripts from ~/scripts/sysupdates
# 
# Notes:
# 

for SCRIPT in `ls ~/scripts/sysupdates`; do ${SCRIPT}; done

帮自己一个忙,养成为每个创建的文件制作正确标题的习惯。这只需要一分钟,并且可以省去以后的麻烦,记住,你可能不记得为什么创建它或者它做了什么,或者有一天可能不是你必须维护它。

最后一部分是编辑 root crontab。Cron 是一个以指定间隔运行给定脚本的程序。因此,如果我们将 updater.sh 脚本添加到 crontab,我们所要做的就是添加文件,~/scripts/sysupdates它们就会自动运行。

你可以通过 crontab 来访问它crontab -e,并用系统定义的编辑器(在 Linux 中通常是 vim)来编辑它。有一个 crontab 生成器可以帮助你: http://www.thepcmanwebsite.com/crontab_generator.shtml来制作你自己的。添加以下行:

5 0 1 * * /root/scripts/updater.sh

你应该可以开始了。尽情使用这些工具吧,因为它们可以让系统管理员的生活变得更加轻松。

需要注意的是,我不会将 apt-get -y dist-upgrade 添加到你的脚本中,如果它运行不正常,请当你准备好处理它时运行它。

答案3

apt-get purge仅以 sudo 或 root 身份工作,要从脚本运行 sudo,您需要为运行脚本的用户启用无密码的 sudo,否则它将提示输入密码并等待。

运行visudo并在底部添加一行:

yourusername ALL=NOPASSWD: ALL

apt-get 还会给出提示,若要删除软件包而不给出提示,请使用选项 -y

sudo apt-get purge package -y

最终结果可能是这样的:

#!/bin/bash
sudo apt-get purge postfix -y

相关内容