小编Dom*_*ore的帖子

为什么 echo -e 在 Makefile 中表现得很奇怪?

我正在编写一个 Makefile(在 Ubuntu 20.04 上,如果相关的话),并注意到echo. 以这个简单的 Makefile 为例:

test.txt:
        @echo -e 'hello\nworld'
        @echo -e 'hello\nworld' > test.txt
Run Code Online (Sandbox Code Playgroud)

当我运行时make,我希望在 stdout 上看到与 test.txt 中相同的内容,但事实上我没有。我在标准输出上得到这个:

hello
world
Run Code Online (Sandbox Code Playgroud)

但这在 test.txt 中:

-e hello
world
Run Code Online (Sandbox Code Playgroud)

同时,如果我-e从 Makefile 中的两行中删除,我会在标准输出上得到:

hello\nworld
Run Code Online (Sandbox Code Playgroud)

在 test.txt 中:

hello
world
Run Code Online (Sandbox Code Playgroud)

这让我想知道是否echo检测到重定向并表现出不同的行为,但当我在 shell 中手动运行它时却没有(如我通常期望的那样,/bin/echo -e 'hello\nworld' > test.txt它会在单独的行上产生hello和)。world我什至通过添加一行来确认 Makefile 使用的是 /bin/echo 而不是内置的 shell @echo --version

这里发生了什么?

echo gnu-make

17
推荐指数
1
解决办法
6767
查看次数

网络接口首选项

当两者都连接到同一网络时,Linux 如何确定使用哪个网络接口?

请注意,这不是关于路由的问题。我熟悉它的工作原理。例如,如果我的笔记本电脑通过以太网卡和无线网卡连接到无线路由器,或者如果我有两个以太网卡都连接到同一路由器。

我可以从经验中说,在我的情况下,我的笔记本电脑似乎更喜欢以太网卡(eth0)而不是无线(eth1--我知道这不是无线接口的典型名称,但这就是我所拥有的),但我是想知道,它是如何决定的?如果它只是从编号最低的接口中选择,如果这两个选择是 eth0 和 wlan0 呢?

编辑:@Nils 指出这仍然是路由问题,路由表提供了答案(请参阅他的答案)。这仍然留下我最初的问题,但形式不同。什么决定了 Linux 路由表中条目的顺序?例如,这是我连接到两个接口时的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.4.1     0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
Run Code Online (Sandbox Code Playgroud)

很明显,对于本地网络中的目的地,表中 eth0 的优先级高于 eth1,但在 Linux 中,这是根据链接延迟、链接吞吐量、甚至接口名称还是什么决定的?(同样的问题可能会问为什么 eth0 是默认路由的接口。)

linux networking routing

9
推荐指数
1
解决办法
8482
查看次数

这个 sat0 设备是什么?

我正在为 Hurricane Electric 的 IPv6 隧道代理设置我的计算机(运行 Debian Buster)。他们提供了几种配置方法的说明,但这里是 iproute2 的说明,我一直将其用于测试目的:

ip tunnel add he-ipv6 mode sit remote 216.66.22.2 local <local-IP-addr> ttl 255
ip link set he-ipv6 up
ip addr add <IPv6-addr>/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr
Run Code Online (Sandbox Code Playgroud)

当我这样做时,sit0还会出现一个神秘的界面。显然,它与 6in4 隧道相关,但我找不到更多关于它的信息,除了它有点特殊并且每当模块加载时它就存在sit。出于好奇,我尝试为隧道代理配置它,而不是创建新接口,但它似乎无法做到这一点。

这个装置是什么?

linux networking ipv6 tunneling network-interface

7
推荐指数
1
解决办法
9268
查看次数

在 systemd 插件覆盖中取消设置选项

背景:

我有一个包提供了一个与 LXD 不兼容的 systemd 单元文件。具体来说,它使用以下两个选项,这些选项似乎在容器内失败:

[Service]
IOSchedulingClass=realtime
CPUSchedulingPolicy=rr
Run Code Online (Sandbox Code Playgroud)

因此,我尝试使用以下内容通过插入覆盖这些systemctl edit

[Service]
IOSchedulingClass=
CPUSchedulingPolicy=
Run Code Online (Sandbox Code Playgroud)

但后来我收到以下消息journalctl -xe

Jun 17 18:40:14 nickel systemd[1]: [/etc/systemd/system/freeswitch.service.d/override.conf:2] Failed to parse IO scheduling class, ignoring: 
Jun 17 18:40:14 nickel systemd[1]: [/etc/systemd/system/freeswitch.service.d/override.conf:4] Failed to parse CPU scheduling policy, ignoring: 
Run Code Online (Sandbox Code Playgroud)

题:

似乎不允许取消设置这样的选项。我还尝试使用一对空引号(例如IOSchedulingClass="")。这样做的正确方法是什么?我知道我可以覆盖整个单元文件,但如果可能的话,我不希望从打包的单元文件中屏蔽任何以后的更新。

作为参考,手册systemd.exec(5)建议应该有一些方法来做到这一点:

如果将空字符串分配给此选项,则 IOSchedulingClass= 和 IOSchedulingPriority= 的所有先前分配都无效。

systemd lxd

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

电传打字机上的哈希符号

我的问题有点不寻常,所以我想提供一个简短的背景。我正在查看国际混淆 C 代码竞赛的老赢家,并遇到了为 PDP-11 编写的条目(条目在这里,对于那些感兴趣的人)。所以,我搜索了一个模拟器,我在http://simh.trailing-edge.com/找到了它,并用 UNIX v7(来自同一站点)启动它。同样,对于那些感兴趣的人,我在http://wandel.ca/homepage/unixdemo.html找到了有关启动它的说明。

考虑到这一背景,这是我的实际问题。当我在 ed 中输入程序时,哈希字符很有趣。他们实际上不会保存在文件中。经过大量研究,我发现它正在模拟物理电传打字机(!),并且由于您无法退格打印在纸上的字符,因此哈希表示“忽略前一个字符”。

所以我的问题是:我如何实际输入哈希字符?

terminal special-characters tty

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