今天早上我的搜索是关于如何在 bash 中比较两个十进制数,我找到了这个答案:如何与 shell 脚本中的浮点数进行比较。然而,这个答案不包括这里的答案:
$ [[ ((3.56 < 2.90)) ]]; echo $?
1
$ [[ ((3.56 < 4.90)) ]]; echo $?
0
Run Code Online (Sandbox Code Playgroud)
考虑到该答案已被否决,并且看起来有些不寻常的 bashism,这种算术评估的准确性是否值得信赖?
如果我告诉 VLC 或 Audacity 等应用程序从我的网络摄像头或麦克风进行录制,它们只会在睡眠时唤醒硬件,并在不受我干扰的情况下完成工作。
虽然这是一件好事,但出于隐私方面的考虑,我一直想知道:是否有办法限制应用程序对硬件设备的访问?
在撰写本文时,我想到了使用 SELinux 或 AppArmor 之类的东西来限制对/dev/something. 这可能吗?有更好或更简单的方法吗?
另外,除了网络摄像头和麦克风之外,还有其他我应该关心的硬件吗?
根据Linux 高级路由和流量控制 HOWTO 的这一部分,我无法tc限制计算机的网络速度。
路由器是摩托罗拉 SurfBoard 调制解调器,具有一些路由功能和防火墙。我想限制流量的机器是192.168.0.5,脚本也是从192.168.0.5运行的。
这是我对上面链接中的命令的改编/etc/NetworkManager/dispatcher.d/:
#!/bin/sh -eu
# clear any previous queuing disciplines (qdisc)
tc qdisc del dev wlan0 root 2>/dev/null ||:
# add a cbq qdisc; see `man tc-cbq' for details
if [ $2 = up ]; then
# set to a 3mbit interface for more precise calculations
tc qdisc add dev wlan0 root handle 1: cbq avpkt 1000 \
bandwidth 3mbit
# leave 30KB (240kbps) …Run Code Online (Sandbox Code Playgroud) 前几天我尝试编写一个脚本来杀死一个PID及其所有子进程,但是在花了一些时间之后,我认为它不值得信赖,因为有时某些子进程的PPID最终会是1。
现在,我正在寻找的是如何在后台运行以下函数,并将该函数和curl所有函数都放在同一个组中,然后在它卡住时杀死该脚本,杀死留在背景:
download(){
until curl -s -S -L -A Mozilla/5.0 -m 300 "$@"; do
echo Retrying in 5 seconds... >&2
sleep 5
done
}
for url in foo.com bar.com baz.com; do
download $url >$url &
done
wait
Run Code Online (Sandbox Code Playgroud)
我知道不需要此函数download,但我将其包含在此处是因为它是我在此脚本中多次使用的函数。另外,我给的最大时限300来curl,但是,在某些网络错误,它也被卡住。
我想从包含元素的 KML 文件中删除所有地标<tessellate>。应完全删除以下块:
<Placemark>
<styleUrl>#m_ylw-pushpin330</styleUrl>
<LineString>
<tessellate>1</tessellate>
<coordinates>
0.0000000000000,0.0000000000000,0 0.0000000000000,0.0000000000000,0
</coordinates>
</LineString>
</Placemark>
Run Code Online (Sandbox Code Playgroud)
我尝试了一些非贪婪的 perl 正则表达式,但没有运气(很多东西与第一个一起删除<Placemark>):
sed -r ':a; N; $!ba; s/\n\t*//g' myplaces.kml |
perl -pe 's|<Placemark>.*?<tessellate>.*?</Placemark>||g'
Run Code Online (Sandbox Code Playgroud)
我相信 XML 解析器是可行的方法,但我阅读了 xmlstarlet 的文档却一无所获。所以也欢迎xmlstarlet、python等任何解决方案!
我在 fifo 上运行 tshark,以下是一个简单的循环示例,用于打印 tshark 的输出:
tshark -i $fifo | while read line; do
echo $line
done
Run Code Online (Sandbox Code Playgroud)
当我向 tshark 添加过滤器时出现问题。此示例仅在 tshark 退出后打印所有$lines(IP 地址被隐藏):
tshark -i $fifo -T fields -e text -R '
ip.src == **.**.***.** &&
http.response.code == 200 &&
http.content_encoding == "gzip" &&
http.content_type contains "text/html"
' | while read line; do
echo $line
done
Run Code Online (Sandbox Code Playgroud)
我尝试过其他形式但没有运气:
while read line; do
echo $line
done < <(tshark ...)
while read line; do
echo $line
done <<<"$(tshark ...)" …Run Code Online (Sandbox Code Playgroud) 从 的输出中pactl list sink-inputs,我需要获取VLC的接收器输入编号。在此之前,我试图提取仅包含 VLC 输出的片段。我认为可行的所有方法都有缺点。这是一个示例输出:
$ pactl list sink-inputs
Sink Input #1373
Driver: protocol-native.c
Owner Module: 9
Client: 10350
Sink: 0
Sample Specification: float32le 2ch 44100Hz
Channel Map: front-left,front-right
Format: pcm, format.sample_format = "\"float32le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\""
Corked: no
Mute: no
Volume: 0: 100% 1: 100%
0: 0,00 dB 1: 0,00 dB
balance 0,00
Buffer Latency: 453287 usec
Sink Latency: 19697 usec
Resample method: copy
Properties:
media.role = "video" …Run Code Online (Sandbox Code Playgroud)