如果我trap两次发出内置命令 [对于相同的信号],会发生什么?第二个命令是添加到第一个命令中,还是替换第一个命令?
trap Foo SIGINT
...
trap Bar SIGINT
...
Run Code Online (Sandbox Code Playgroud)
当 SIGINT 发生时,Bash 是直接运行Bar还是同时运行Foo?或者是其他东西...?
OK,所以这不是什么秘密,strace产生庞大的数量输出。(我知道有多种选项可以稍微过滤输出。)
是否有任何工具可以将原始strace日志处理为更易读的内容?
我在寻找什么样的“解码”?好吧,按设计strace在非常低的水平上工作。我正在寻找可以总结最重要观点的东西。例如,FD 4 可能在不同的时刻指向不同的文件;让机器而不是我来跟踪它会很有用。PID 也是如此。我希望能够在跟踪中的不同时刻看到进程树,等等。GUI 工具会很棒,但如果它使事情更容易理解,即使是基于文本的工具也是可以接受的。
这主要是出于学术原因。;-)
考虑以下 Bash 语句:
foo | bar
Run Code Online (Sandbox Code Playgroud)
这将执行两个进程,foo和bar,这样 的标准输出foo连接到 的标准输入bar。到现在为止还挺好。
有没有办法调用foo,bar以便我们也有相反方向的连接?
foo.stdout -> bar.stdin
foo.stdin <- bar.stdout
Run Code Online (Sandbox Code Playgroud)
据我所知,击调用pipe(2)以创建一对彼此连接的FD,然后可以用于替换的stdin/stdout在相应的子进程。在内核级别,我看不出为什么不能调用pipe(2)两次并安排上面描述的循环排列。
但我无法弄清楚实际执行此操作的 shell 语法。
到目前为止,我能想到的最好的主意是使用命名管道,或者启动一个子shell并以某种方式进行一些疯狂的FD到FD重定向......
我正在努力寻找有关trap命令如何工作的清晰、明确的信息。
特别是,trap本地的效果是在脚本出现的地方吗?我一直认为是这种情况,但我看到了相反的陈述。是否trap影响从当前调用的其他 shell 脚本?它会影响二进制程序吗?
使用该losetup命令,您可以将常规文件转换为假装块设备。然后,您可以像任何其他设备一样对其进行分区和格式化。
有没有办法让 Linux 假装这个“设备”有一个 4K 的逻辑扇区大小?
默认情况下,在除 VT7 之外的每个 VT 上systemd自动启动getty。我想是systemd要推出top的VT6代替getty。知道我如何配置它来做到这一点吗?
我目前正在努力解决这个问题。
if [ $CHAR == ( ]
Run Code Online (Sandbox Code Playgroud)
显然,这行不通。那么我如何强迫它做我显然打算做的事情呢?
(对于奖励积分,我如何在一个case区块中进行比较?)
我有一个安装脚本,可以通过运行大约两打gsettings set命令来自定义目标计算机。问题是,只有当您以正确的用户身份运行该命令时,这才有效。如果你以 root 身份运行它,它根本不起作用。
所以我发明了一个脚本函数,如下所示:
function GSET
{
echo "gsettings set '$1' '$2' '$3'"
sudo -u mango dbus-launch gsettings set "$1" "$2" "$3"
}
Run Code Online (Sandbox Code Playgroud)
然后该脚本调用该函数数十次,这似乎有效(即设置现在实际上发生了变化),并且一切都很好。
好吧,不完全是:如果我在我尝试配置的机器上运行它,它似乎工作得很好。如果我尝试在chroot环境中的构建服务器上运行它来创建安装映像...服务器dbus-daemon上现在有十几个进程正在运行。每次我运行新的安装版本时,都会留下越来越多的无用进程在运行,直到最终服务器耗尽某种资源(PID 或其他东西),并gsettings完全停止工作。
所以,我的问题是:正确的工作方式是什么gsettings?我在某个地方看到了另一个答案,建议添加--exit-with-session开关,但这根本就停止了命令的工作。有没有办法为所有设置启动一个守护进程,然后停止它或其他什么?
大多数人都知道,shell 允许您在运行命令时重定向 stdin/stdout/stderr,还可以将输出从一个命令传送到另一个命令。
可能很少有人知道,您可以编写“列表”命令,使用; && ||运算符有条件或无条件地一个接一个执行。
这些功能如何相互作用?如果我做类似的事情
command1 && command2 >file
Run Code Online (Sandbox Code Playgroud)
它是只重定向最后一个命令的输出,还是两者都重定向?如果我写
command1 | command2 && command3 | command4
Run Code Online (Sandbox Code Playgroud)
它实际上是做什么的?这两条管道是有条件的吗?或者这是一个包含条件作为管道步骤之一的管道?
据我所知,shell 不支持添加括号来消除歧义,所以我不确定您如何请求一种解释或另一种解释......无论如何,了解 shell 如何解释会很有用这些所有。(像大多数人一样,我只使用 Bash。)
看来 Grub-EFI 只会启动一个“签名”的 Linux 内核。是否有一些命令可以让我查询给定的内核映像以找出其上存在哪些签名(如果有)?
我有一个棘手的问题,我不知道如何解决。
我有一个包含几百万行文本的文本文件。基本上我想运行uniq,但有一个转折:如果两行相同但有:FOO后缀,则删除缺少后缀的行。但前提是这些线在其他方面完全相同。并且仅用于:FOO,而不是任何其他可能的后缀。也没有想放弃/usr/bin/delta:FOO,因为上面的线是不相同的。
red.7
green.2
green.2:FOO
blue.6
yellow.9:FOO
Run Code Online (Sandbox Code Playgroud)
我想删除green.2,因为下面的行是相同的,但带有后缀。所有其他行应保持不变。
[编辑:我忘了提到,文件已经按顺序排列了。]
到目前为止我的想法:
uniq是做到这一点的工具。uniq忽略前缀,但不能忽略后缀。(这太烦人了!):是一个字段分隔符,然后cut(连同paste)来翻转字段顺序。但是不,cut如果不存在分隔符,显然不可能强制输出空行。任何提示?
我可能最终只使用真正的编程语言来解决这个问题。在 Bash 中修复它似乎很简单,但我已经浪费了很多时间未能让它工作......
我正在尝试在多台 Linux 机器之间共享文件。2023 年,NFS 是实现这一目标的好方法吗?
我对NFS了解不多。我的印象是 NFS 很旧、有缺陷、不可靠、设计糟糕且过时,并且应该仅用于与旧系统的向后兼容性。这在多大程度上是正确的?使用 NFS 进行新部署是否明智?我可以使用更好的东西吗?