错误的写法:
sudo cat >/etc/sysctl.d/bbr.conf <<EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
此写法看似很合理,但执行的时候会报 Permission denied
这是因为输出重定向(例如>
)由shell
执行,而不是由cat
执行,sudo
命令只对cat
命令进行了提权,shell
在进行重定向的时候会报权限不足的错误。
两种解决方法
对 shell 进行提权
sudo bash -c 'cat >/etc/sysctl.d/bbr.conf' <<EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
使用 tee 命令
cat <<EOF|sudo tee /etc/sysctl.d/bbr.conf >/dev/null
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
参考链接
- https://stackoverflow.com/questions/18836853/sudo-cat-eof-file-doesnt-work-sudo-su-does
- https://wangchujiang.com/linux-command/c/tee.html