小编Ter*_*ior的帖子

bash中十进制数的比较

今天早上我的搜索是关于如何在 bash 中比较两个十进制数,我找到了这个答案:如何与 shell 脚本中的浮点数进行比较。然而,这个答案不包括这里的答案:

$ [[ ((3.56 < 2.90)) ]]; echo $?
1
$ [[ ((3.56 < 4.90)) ]]; echo $?
0
Run Code Online (Sandbox Code Playgroud)

考虑到该答案已被否决,并且看起来有些不寻常的 bashism,这种算术评估的准确性是否值得信赖?

bash arithmetic floating-point

9
推荐指数
2
解决办法
2万
查看次数

限制应用程序访问某些硬件(网络摄像头、麦克风...)

如果我告诉 VLC 或 Audacity 等应用程序从我的网络摄像头或麦克风进行录制,它们只会在睡眠时唤醒硬件,并在不受我干扰的情况下完成工作。

虽然这是一件好事,但出于隐私方面的考虑,我一直想知道:是否有办法限制应用程序对硬件设备的访问?

在撰写本文时,我想到了使用 SELinux 或 AppArmor 之类的东西来限制对/dev/something. 这可能吗?有更好或更简单的方法吗?

另外,除了网络摄像头和麦克风之外,还有其他我应该关心的硬件吗?

linux selinux privacy apparmor

6
推荐指数
1
解决办法
3271
查看次数

无法获得 tc 来限制网络流量

根据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)

networking qos tc

6
推荐指数
1
解决办法
3944
查看次数

在一组中启动后台进程,然后将它们全部杀死

前几天我尝试编写一个脚本来杀死一个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,但是,在某些网络错误,它也被卡住。

shell process

5
推荐指数
1
解决办法
1696
查看次数

删除包含特定元素的 XML 节点

我想从包含元素的 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等任何解决方案!

xml sed python perl regular-expression

4
推荐指数
1
解决办法
1万
查看次数

无法使用管道处理标准输出

我在 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)

shell bash pipe fifo tshark

4
推荐指数
1
解决办法
2548
查看次数

使用 awk、sed 或 grep 从文件中提取唯一的文本片段

从 的输出中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)

shell grep sed awk text-processing

4
推荐指数
2
解决办法
762
查看次数