![我如何编写一个 bash 脚本来执行 apt-get?](https://linux22.com/image/1333997/%E6%88%91%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%20bash%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E6%89%A7%E8%A1%8C%20apt-get%EF%BC%9F.png)
我正在尝试使用 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