我在bash脚本中有一个变量$data
和变量$file
:
data=$(echo "$(printf '%s\n' "${array[@]/%/$'\n\n'}")")
file=$(<scriptfile_results)
Run Code Online (Sandbox Code Playgroud)
那些变量将包含文本.如何比较这两个?一种选择是使用像这样的diff(1)实用程序:
diff -u <(echo "$data") <(echo "$file")
Run Code Online (Sandbox Code Playgroud)
这是比较两个变量内容的正确而优雅的方法吗?另外这个<( )
技术怎么称呼?据我了解,每个<( )
临时文件(命名管道)都是创建的..
如果我生成一个没有任何上层有效载荷的以太网帧,并使用sendp()在第二层发送它,那么我收到"Mac address to reach destination not found. Using broadcast."
警告并且放到线路的帧确实使用ff:ff:ff:ff:ff:ff作为目标MAC地址.为什么会这样?Scapy不应该发送我构造的框架吗?
我精心制作的包装如下:
>>> ls(x)
dst : DestMACField = '01:00:0c:cc:cc:cc' (None)
src : SourceMACField = '00:11:22:33:44:55' (None)
type : XShortEnumField = 0 (0)
>>> sendp(x, iface="eth0")
WARNING: Mac address to reach destination not found. Using broadcast.
.
Sent 1 packets.
>>>
Run Code Online (Sandbox Code Playgroud) 我有一个名为的变量inet
,其中包含以下字符串:
inet="inetnum: 10.19.153.120 - 10.19.153.127"
Run Code Online (Sandbox Code Playgroud)
我想将此字符串转换为下面的符号:
10.19.153.120 10.19.153.127
Run Code Online (Sandbox Code Playgroud)
我可以轻松实现这一点sed 's/^inetnum: *//;s/^ -//'
,但我更喜欢更紧凑/优雅的解决方案并使用bash.嵌套参数扩展也不起作用:
$ echo ${${inet//inetnum: /}// - / }
bash: ${${inet//inetnum: /}// - / }: bad substitution
$
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?或者我应该使用sed
这个时间?
我看到一个bash脚本exec 1>&2
在一个函数中有命令.就像是:
function example()
{
exec 1>&2
cat <<EOT
Script requires at least one parameter.
EOT
exit 1
}
Run Code Online (Sandbox Code Playgroud)
据我所知,exec 1>&2
意味着从这一点开始的一切都将被引导到stderr.这是某种形式的固定行为的高管需要知道的心脏或者是有这背后的一些很好的解释?我的意思是,据我所知,执行 Bash脚本只是调用一个命令采用与Bash脚本相同的PID,一旦命令完成,PID就会被终止.1>&2不是命令.有人可以解释命令背后的细节(尤其是问题原因)exec 1>&2
吗?
我有以下脚本/tmp
无限期地监视目录,如果该目录中有任何文件操作,则文件名由while循环读取,文件名中的第一个a
字符替换为b
字符,并将此修改后的文件名记录到test.log
文件中:
#!/bin/bash
trap ':' HUP
trap 'kill $(jobs -p)' EXIT
/usr/local/bin/inotifywait -q -m /tmp --format %f |
while IFS= read -r filename; do
echo "$filename" | sed 's/a/b/' > test.log
done
Run Code Online (Sandbox Code Playgroud)
这是实际脚本的简化版本.我上面的脚本也有一个Sys-V类型的init脚本,因为我希望保持LSB兼容,我的init脚本有force-reload
(如果服务支持,则重新加载配置.否则,重新启动服务.)选项它将HUP信号发送到脚本.现在在执行之前执行force-reload
,killproc -HUP test.sh
输出pstree
如下:
# pstree -Ap 4424
test.sh(4424)-+-inotifywait(4425)
`-test.sh(4426)
#
Run Code Online (Sandbox Code Playgroud)
执行后strace killproc -HUP test.sh
,子shell终止:
# pstree -Ap 4424
test.sh(4424)---inotifywait(4425)
#
Run Code Online (Sandbox Code Playgroud)
据strace
,killproc
发送SIGHUP
到过程4424
和 …
我需要发送格式错误的以太网帧以进行测试.我已禁用Rx和Tx校验和的卸载:
root@T60:~# ethtool --show-offload eth0
Features for eth0:
rx-checksumming: off
tx-checksumming: off
tx-checksum-ipv4: off [fixed]
tx-checksum-unneeded: off [fixed]
tx-checksum-ip-generic: off
tx-checksum-ipv6: off [fixed]
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
Run Code Online (Sandbox Code Playgroud)
但是,这种卸载只涉及IP,TCP和UDP校验和吗?是否可以使用Scapy在以太网页脚中发送格式错误的帧序列检查帧?我在此非常怀疑计算以太网FSC可能是在NIC硬件中实现的吗?
我正在构建一个小型监控解决方案,并希望了解在先前读数大于当前读数的情况下,正确/最佳行为是什么.例如,ifHCOutOctets
SNMP对象计算从Cisco路由器中的接口传输的字节数.如果此计数器重置为0,例如由于路由器重启,图形应用程序应该如何运行?在我的选项中,以下算法是正确的行为:
if [ ! $prev_val ]; then
# This reading will be used to set the baseline value for "prev_val" variable
# if "prev_val" does not already exist.
prev_val="$cur_val"
elif (( prev_val > cur_val )); then
# Counter value has set to zero.
# Use the "cur_val" variable.
echo "$cur_val"
prev_val="$cur_val"
else
# In case "cur_val" is higher than or equal to "prev_val",
# use the "cur_val"-"prev_val"
echo $(( cur_val - prev_val ))
prev_val="$cur_val"
fi
Run Code Online (Sandbox Code Playgroud)
我还根据上面的算法制作了一个小例子图:
基于此构建流量图:
reading …
Run Code Online (Sandbox Code Playgroud) 至少在bash模式替换中经常使用以下引号:$' '
例如,${arr[@]/%/$'\n\n\n'}
在每个数组"arr"项之后打印三个换行符.这些是什么特别的报价?他们怎么称呼?除了bash模式替换之外,它们在哪里使用?
我为了学习目的而使用bash(4.0.33)网络支持,并尝试在bash中创建端口扫描程序.对于TCP,我打开了一个TCP/IP套接字
exec 3<>/dev/tcp/192.0.2.1/80
如果连接被拒绝或连接系统调用超时,则采取适当的措施.但是,使用UDP,我很容易发送数据包
echo > /dev/udp/192.0.2.1/53
但如何从正确的套接字读取返回的数据包?我的意思是发送到192.0.2.1的UDP数据报具有来自临时端口范围的源端口,因此我不知道/dev/udp/192.0.2.1/
应该读取目录中的哪个套接字.或者,如果没有像tcpdump这样的外部工具,这不是可行的吗?
假设我有一个Perl脚本,其中包含一个替换命令,它将替换字符串作为位置参数并使用/e
修饰符:
perl -pe 's/abc/$ARGV[0]/ge;'
Run Code Online (Sandbox Code Playgroud)
这种方法是否存在安全问题?我的意思是可以给出这样的位置参数值,使perl执行不需要的功能吗?我的意思是类似的:perl -pe 's/abc//;unlink ("/tmp/file");'
.