CentOS 6.3
我正在尝试使用一个小脚本来发送一封电子邮件,其中包含正文中的电子邮件标题副本(用于内部报告)。
模板文件包含以下内容:
Alert Report
Alert has triggered at TMPDATE
HEADERS
-------
TMPHEADERS
SOURCE IP
---------
TMPSOURCEIP
Run Code Online (Sandbox Code Playgroud)
我希望我的脚本找到并用与警报相关的实际信息替换“TMP”占位符。
日期和源 IP 变量似乎工作正常,但是如果/当我尝试查找/替换 TMPHEADERS 时,它会导致奇怪的症状,包括整个输出为空白。我有理由肯定它与包含大量特殊字符(@ % & 等)的标题有关。
有人可以建议如何最好地通过 bash 完成此操作吗?
我当前的代码如下所示:
cat /test/emailtemplate | sed s/TMPHEADERS/"$HEADERS"/ > /test/output
Run Code Online (Sandbox Code Playgroud)
根据请求,这是我尝试插入模板文件的一组示例标头(IP 地址和电子邮件地址已更改以保护无辜者 :-) ):
From foo@yahoo.com Thu Apr 25 20:18:19 2013
Return-Path: <foo@yahoo.com>
Received: from nm30-vm0.bullet.mail.ne1.yahoo.com (nm30-vm0.bullet.mail.ne1.yahoo.com [98.138.11.36])
by serv.example.com (8.14.4/8.14.4) with ESMTP id r3Q3IJVV009411
for <test@example.com>; Thu, 25 Apr 2013 20:18:19 -0700
Received: from [108.108.108.108] by nm30.bullet.mail.ne1.yahoo.com with NNFMP; 26 …Run Code Online (Sandbox Code Playgroud) 我正在为 RHCSA 学习,但对我在一些培训材料中遇到的声明感到困惑:
没有实际的最大 RAM,因为理论上,您可以在 RHEL 6 上运行 128 TB 的 RAM。但这只是理论。Red Hat 在 RHEL 6 上支持的最大 RAM 在 32 位系统上为 16 GB,在 64 位系统上为 2 TB。
有人可以解释一下 128 TB 的理论限制来自哪里吗?如果 RHEL 6 明确定义了其他最大限制,我对作者如何知道理论限制存在感到困惑。这只是考虑了 64 位架构的理论限制吗?还是这里有其他原因?
在 RHEL 培训文档中,作者说:
...运行以下命令以禁用当前系统上的防火墙:iptables -F
他明确使用了“禁用”这个词,对我来说,这表明重新启用会很简单。在阅读 iptables 的手册页时,我看到了这一点:
刷新选定的链(如果没有给出表中的所有链)。这相当于将所有规则一一删除。
我可以获得有关预期行为的说明吗?
CentOS 6.3 / RHEL 6.3
有人可以解释whatis命令和apropos命令之间的区别吗?我注意到两者似乎都是默认安装的,我不确定它们之间有什么区别。
CentOS 6.x
我想从 curl、grep 获取两个完全独立的字符串的输出,并将它们各自的值分配为变量。执行此操作的最有效方法是什么(不将输出写入磁盘)?
通常我会想到有一个类似的脚本:
#!/usr/bin/env bash
foo1=$(curl https://domain.com/file.xml | grep string1)
foo2=$(curl https://domain.com/file.xml | grep string2)
Run Code Online (Sandbox Code Playgroud)
但这最终需要两次传球,而且效率极低。有没有更好的办法?希望有一个涉及更少通行证的解决方案?
CentOS 5.9
我想重置接口的 ifconfig 输出中的 RX/TX 计数器。我的理解是这些计数器在重新启动期间会重置,但我想避免重新启动。有没有另一种方法可以重置不干扰数据传输的方法?
CentOS 6.x | OpenVZ
我想在我的 vps 主机上运行 NTP 服务器。这可能吗?
当我尝试启动 ntpd 时,它立即失败并出现以下错误:
Mar 14 22:47:44 ev1 ntpd[3456]: cap_set_proc() failed to drop root privileges: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我已将其本地化为 /etc/sysconfig/ntpd 中的设置
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
Run Code Online (Sandbox Code Playgroud)
启用此行时,它会失败(大概是因为共享内核拒绝允许权限更改)。如果我将其注释掉,ntpd 运行良好,但以 root 身份运行,这是一件坏事。
无论如何让ntpd在openVZ上以ntp用户身份运行?诚然,我知道在 OpenVZ 服务器上运行它是一个好主意,但我仍然想尝试一下。
CentOS / RHEL 6
我最近了解到有一个名为IPV4_FAILURE_FATALexists的 ifcfg 指令可用于位于此处的文件:/etc/sysconfig/networking-scripts/ifcfg-*. 但是我很难找到有关它的信息。
根据对 stackoverflow的回答,我的理解是将 bash 变量封装在双引号中是一种相当安全的用户输入清理方式。
awk 变量呢?例如,如果我有类似的东西:
awk -v SOURCEIP="$SOURCEIP" -v REVERSEDNS="$REVERSEDNS" '{
gsub(/^_TMPSOURCEIP_/, SOURCEIP);
gsub(/^_TMPREVERSEDNS_/, REVERSEDNS);
print
}' /home/foo/footemplate
Run Code Online (Sandbox Code Playgroud)
我应该在 gsub 行中的变量周围加上引号吗?所以它看起来像:
awk -v SOURCEIP="$SOURCEIP" -v REVERSEDNS="$REVERSEDNS" '{
gsub(/^_TMPSOURCEIP_/, "SOURCEIP");
gsub(/^_TMPREVERSEDNS_/, "REVERSEDNS");
print
}' /home/foo/footemplate
Run Code Online (Sandbox Code Playgroud)
或者这没有区别?
我遇到了这样的 if/then 语句:
if ! foo ; then
echo "blah"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
具体if !是什么意思?“如果结果foo不是真的?” “如果退出代码foo不是 0”?