gpt4 book ai didi

bash - Sed 在特权符号链接(symbolic link)上就位

转载 作者:行者123 更新时间:2023-11-29 09:51:58 25 4
gpt4 key购买 nike

曾几何时,我结合使用 sedtee 来更改特权文件。因为 shell 本身没有 root 权限,所以我必须创造性地将命令输出写入文件:

sed -r 'script' "/etc/hosts" | sudo tee "/etc/hosts" 1>/dev/null

当时,这非常有效。直到我开始使用我的主机文件来拦截广告后,我才意识到管道仅限于一个缓冲区,之后 tee 会很乐意覆盖该文件,文件的其余部分将消失。

我还考虑了一个更简单的版本:

sed -r 'script' "/etc/hosts" > "/etc/hosts.tmp" && sudo mv "/etc/hosts.tmp" "/etc/hosts"

不幸的是,这也行不通,因为有问题的文件是一个符号链接(symbolic link)。 mv 会覆盖符号链接(symbolic link),而不是下面的文件。

我目前的解决方案是这样的:

sed -r 'script' "/etc/hosts" | sudo tee "/etc/hosts.tmp" 1>/dev/null &&
sudo cat "/etc/hosts.tmp" | sudo tee "/etc/hosts" 1>/dev/null &&
sudo rm "/etc/hosts.tmp"

呃!多么冗长!

有没有更简洁的方法来做到这一点?

最佳答案

如果您使用的是 GNU sed,您可以使用它的 -i 就地编辑标志,以便它的执行结果直接保存到它处理的文件中。然后你只需要 sudo sed 命令就可以了。

另外要写入文件而不是链接,请使用 sed 的 --follow-symlinks 标志。

其他情况,检查this answer to a similar question on SO .

关于bash - Sed 在特权符号链接(symbolic link)上就位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com