我正在编写一个简单的 bash 脚本,但我需要它来检查它是否以 root 身份运行。我知道可能有一种非常简单的方法可以做到这一点,但我不知道该怎么做。
只是要清楚:
编写脚本foo.sh的简单方法是什么,以便命令./foo.sh输出0,命令sudo ./foo.sh输出1?
当我使用sudo以下命令运行命令时,后续sudo命令将不再要求输入密码。
sudo ls
Run Code Online (Sandbox Code Playgroud)
但这仍然运行ls。如果我不想在开始时运行任何命令,而只是sudo在稍后停止询问密码的后续命令。有没有办法这样做?
我正在编写一个巨大的脚本工厂脚本,为我的服务器生成大量维护脚本。
直到现在我写了一些需要写在一行中的行,echo -ne例如
echo -n "if (( " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
# Generate exitCode check for each Server
IFS=" "
COUNT=0
while read -r name ipAddr
do
if(($COUNT != 0))
then
echo -n " || " | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
fi
echo -n "(\$"$name"_E != 0 && \$"$name"_E != 1)" | sudo tee -a /usr/local/bin/upgradeAllServers &> /dev/null
COUNT=$((COUNT+1))
JOBSDONE=$((JOBSDONE+1))
updateProgress $JOBCOUNT $JOBSDONE
done <<< "$(sudo cat /root/.virtualMachines)"
echo " ))" | …Run Code Online (Sandbox Code Playgroud) 我有一个长时间运行的 bash 脚本,其中一些命令需要以 root 身份运行,而大多数命令需要在 sudo 之前以普通用户身份运行,因为它会弄乱文件所有权等。
我想出了一些方法,但每个方法都有一些问题
方法一:在文件中使用sudo
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Run Code Online (Sandbox Code Playgroud)
从代码的编写方式来看,这看起来不错。sudo写在几条实际需要root运行的语句之前,但是如果每次sudo调用之间的时间太长sudo再次要求输入密码。此外,如果第一次执行sudo失败,例如由于密码无效,脚本的其余部分仍会执行。
方法二:使用sudo调用文件,需要时再改回原用户
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must …Run Code Online (Sandbox Code Playgroud) 我最近开始在一家全 Linux 公司担任 IT 人员,并注意到我们所做的一些任务可以“轻松”自动化。今天的自动化任务是/etc/apt/apt.config.d/50unattended-upgrades在新计算机上安装软件和配置。我已经编写了软件安装脚本,但现在我一直坚持取消注释所需的无人值守升级行。
我给你举个例子,这个:
// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that …Run Code Online (Sandbox Code Playgroud) 我想要一个脚本来显示保留块的百分比。如果它可以以另一种方式完成,那就太好了。
如果我手动使其可执行,这将起作用。我可以让它从脚本本身中执行吗?
cat > somescript.sh << \EOF
#!/bin/bash
block_count=$(sudo tune2fs -l /dev/sda1 | awk '/^Block count:/ {print $NF}')
reserved_block_count=$(sudo tune2fs -l /dev/sda1 | awk '/^Reserved block count:/ {print $NF}')
perl -e 'printf("%.1lf%%\n", ($ARGV[0] * 100.0 ) / $ARGV[1])' "$reserved_block_count" "$block_count"
EOF
Run Code Online (Sandbox Code Playgroud)