我在另一个人给我的脚本中找到了一些代码,作为我正在做的项目的 Ubuntu 16.04 锁定/强化的资源。
我不知道它做了什么,如果我无法确定它会做出什么改变,我不想运行它,有没有人知道它做了什么或改变了什么?只有代码没有简短的解释注释,而且它恰好是我唯一不知道的东西。此外,第二个功能可以通过功能识别,但我不明白目的或细节。
function bacon.config.ubuntu.chage() {
CHAGE_SCRIPT='/etc/cron.daily/userchage'
if [ ! -e $CHAGE_SCRIPT ]; then
printf "#%c/bin/bash \nfor i in \$(awk -F: '{if(($3 >= 1000)&&($3 <65534)) print \$1}' /etc/passwd); do \nchage -m 0 -M 60 -W 10 \$i \ndone \n" ! > $CHAGE_SCRIPT
chmod +x $CHAGE_SCRIPT
fi
}
function bacon.config.ubuntu.log.rotate() {
echo "bacon.config.ubuntu.log.rotate: [INFO] Installing logrotate..."
sudo apt-get install logrotate 1>/dev/null
echo "bacon.config.ubuntu.log.rotate: [INFO] Configuring logrotate..."
sed 's/rotate 4/rotate 60/' /etc/logrotate.conf > /etc/logrotate.conf.new
mv /etc/logrotate.conf.new /etc/logrotate.conf
sed 's/rotate 1/rotate 60/' /etc/logrotate.conf > /etc/logrotate.conf.new
mv /etc/logrotate.conf.new /etc/log.rotate.conf
sed 's/rotate 7/rotate 1825/' /etc/logrotate.d/rsyslog > /etc/logrotate.d/rsyslog.new
mv /etc/logrotate.d/rsyslog.new /etc/logrotate.d/rsyslog
}
Run Code Online (Sandbox Code Playgroud)
识别这些的任何帮助将是惊人的。
第一个函数检查文件是否$CHAGE_SCRIPT
存在,如果不存在,则尝试使用printf
语句创建它。您可以通过在终端中运行该语句来查看它的作用:
$ printf "#%c/bin/bash \nfor i in \$(awk -F: '{if(($3 >= 1000)&&($3 <65534)) print \$1}' /etc/passwd); do \nchage -m 0 -M 60 -W 10 \$i \ndone \n" !
#!/bin/bash
for i in $(awk -F: '{if(( >= 1000)&&( <65534)) print $1}' /etc/passwd); do
chage -m 0 -M 60 -W 10 $i
done
Run Code Online (Sandbox Code Playgroud)
您会注意到,$3
评估为空的实例是因为(与 不同\$1
)它们不受外壳程序扩展的保护。采用%c
插入!
在#!/bin/bash
暗示原作者并不真正了解的bash的历史扩展是如何工作的。
恕我直言,使用此处的文档会更简单、更清晰:
function bacon.config.ubuntu.chage() {
CHAGE_SCRIPT='/etc/cron.daily/userchage'
if [ ! -e "$CHAGE_SCRIPT" ]; then
cat << 'EOF' > "$CHAGE_SCRIPT"
#!/bin/bash
for i in $(awk -F: '{if(($3 >= 1000)&&($3 <65534)) print $1}' /etc/passwd); do
chage -m 0 -M 60 -W 10 $i
done
EOF
chmod +x "$CHAGE_SCRIPT"
fi
}
Run Code Online (Sandbox Code Playgroud)
第二个函数的操作应该很明显——它可以通过组合所有sed
命令来简化,这样文件只被写入/移动一次。