我试图了解 Bash 是如何处理以下行的:
$(< "$FILE")
Run Code Online (Sandbox Code Playgroud)
根据 Bash 手册页,这相当于:
$(cat "$FILE")
Run Code Online (Sandbox Code Playgroud)
我可以按照第二行的推理思路。Bash 对 执行变量扩展$FILE,进入命令替换,传递$FILEto的值cat,cat 将内容$FILE输出到标准输出,命令替换通过用内部命令产生的标准输出替换整行来完成,Bash 尝试执行它一个简单的命令。
但是,对于我上面提到的第一行,我理解为:Bash 在 上执行变量替换$FILE,Bash 打开$FILE以读取标准输入,以某种方式将标准输入复制到标准输出,命令替换完成,并且 Bash 尝试执行生成的标准输出。
有人可以向我解释如何$FILE从标准输入到标准输出的内容吗?
是否可以在bash.
例如,我希望有一个特定的用户,无论何时运行命令,它总是用datebefore 和 after 或time.
这是可能的,如果是,如何?
多宿主 Linux 机器能否实现真正的强 ES 模型?
我有一个系统,有五个不同的接口,每个接口都连接到同一个子网,因此连接到 Internet 的网关相同。
curl --interface interface_ip http://ipecho.net/plain应该始终显示与我绑定的相同 IP 地址
--interface。来自RFC 1122 - 互联网主机要求 - 通信层,第 3.3.4.2 节 - 多宿主要求:
Internet 主机实现者使用了两种不同的多宿主概念模型,在以下讨论中进行了简要总结。本文件不支持首选哪种型号;每个似乎都有一个位置。这种矛盾反映在问题(A)和(B)是可选的。
??强ES模型
强 ES(终端系统,即主机)模型强调主机/网关 (ES/IS) 的区别,因此在上述问题 (A) 和 (B) 中将 MUST 替换为 MAY。它倾向于将多宿主主机建模为同一物理主机中的一组逻辑主机。
关于 (A),Strong ES 模型的支持者指出,自动 Internet 路由机制无法将数据报路由到与目标地址不对应的物理接口。
在强 ES 模型下,传出数据报的路由计算是映射:Run Code Online (Sandbox Code Playgroud)route(src IP addr, dest IP addr, TOS) -> gateway此处源地址作为参数包括在内,以便选择在相应物理接口上可直接访问的网关。请注意,此模型在逻辑上要求每个 IP 源地址通常至少有一个默认网关,最好有多个默认网关。
??弱ES模型
这种观点不强调 …
目前在 Ubuntu Linux 上,但我在其他操作系统上也注意到了这一点。显然任何用户都可以执行该sync命令——但这是为什么呢?我只能看到缺点:由于不必要的磁盘写入,系统速度变慢。
为什么每个用户都可以执行sync?
前言:我理解-exec {} \;&之间的区别-exec {} +。我也没有问题,因为这样,我只是好奇的语义find。
当-exec以+而不是结束参数时;,我们需要以 结束{} +,例如:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
;在这些示例中使用而不是+工作正常(但显然做了其他事情)。
从POSIX:
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +... …
我有一个文本文档,其中包含大量文本,每个字母后都添加了一个额外的空格!
例子:
T h e b o o k a l s o h a s a n a n a l y t i c a l p u r p o s e w h i c h i s m o r e i m p o r t a n t…
Run Code Online (Sandbox Code Playgroud)
视觉上:
T␣h␣e␣␣b␣o␣o␣k␣␣a?l?s?o??h?a?s??a?n??a?n?a?l?y?t?i ?c?a?l??p?u?r?p?o?s?e??w?h?i?c?h??i?s??m?o?r?e??i? m?p?o?r?t?a?n?t…
请注意,每个字母后面都有一个额外的空格,因此连续单词之间有两个空格。
有没有办法获得awk或sed删除多余的空格?(不幸的是,这个文本文档很大,需要很长时间手动完成。)
我很欣赏这可能是一个更复杂的问题,只需一个简单的 bash 脚本即可解决,因为还需要某种文本识别。
我该如何解决这个问题?
我已经习惯了 while 循环中bash的内置read函数,例如:
echo "0 1
1 1
1 2
2 3" |\
while read A B; do
echo $A + $B | bc;
done
Run Code Online (Sandbox Code Playgroud)
我一直在做一些make项目,拆分文件和存储中间结果变得谨慎。因此,我经常最终将单行分解为变量。虽然下面的例子效果很好,
head -n1 somefile | while read A B C D E FOO; do [... use vars here ...]; done
Run Code Online (Sandbox Code Playgroud)
这有点愚蠢,因为 while 循环永远不会运行超过一次。但没有while,
head -n1 somefile | read A B C D E FOO; [... use vars here ...]
Run Code Online (Sandbox Code Playgroud)
当我使用它们时,读取变量总是空的。我从未注意到 的这种行为read,因为通常我会使用 while 循环来处理许多类似的行。如何在没有 while 循环的情况下使用 …
如何禁用 Chrome 操作系统中 Secure Shell 发出的哔声/铃声?当某些命令失败时,例如在空命令行或失败的选项卡自动完成上按退格键,我会听到非常响亮且烦人的声音。这似乎是一个愚蠢的问题,但我一直在使用 Secure Shell,而且声音经常发生。
我在这里谈论的是 Secure Shell,当 Chrome OS 处于开发人员模式时,可以通过按Ctrl+ Alt+T然后输入“shell”来访问它。
如果您向 Web 服务器发送 SIGSTOP,内核是否只是告诉网络堆栈阻止/休眠与该服务器套接字的所有连接,直到它继续?服务器超时值似乎无关紧要;它会无限期地等待,但是如何呢?
请求会无限期地位于套接字缓冲区中吗?如果 Web 服务器收到大量请求怎么办?当套接字缓冲区填满时会发生什么?
每隔一段时间,我就会搜索如何在 Linux 中为网络端口访问设置用户级权限,结果相当枯燥。例如,如果你有一台机器运行一个监听端口 5080 的关键进程,我觉得应该有一种方法只允许一组特定的可信用户访问该端口——就像任何其他合理的权限进程一样完成,如文件系统权限。
但似乎所有用户都可以使用高端口,而低端口仅对 root 可用,只有像 authbind 和使用 iptables 转发这样的粗略黑客才能允许其他用户使用低端口。这似乎是一个非常奇怪的情况,所以我想知道,为什么它是这样设计的,为什么人们觉得没有必要改变这种情况?