前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 sudo 巧妙重定向输出到受限目录

用 sudo 巧妙重定向输出到受限目录

作者头像
程序熵
发布2024-03-25 16:36:38
830
发布2024-03-25 16:36:38
举报
文章被收录于专栏:技术汇技术汇

我已经获得了我们开发用的 RedHat Linux 服务器之一的 sudo 访问权限,我似乎经常需要将输出重定向到我通常没有写入权限的位置。

麻烦在于,这个人为构造的例子不能正常工作:

代码语言:javascript
复制
sudo ls -hal /root/ > /root/test.out

我只收到响应 :

代码语言:javascript
复制
-bash: /root/test.out: Permission denied

我怎么才能让它工作?

你的命令之所以不工作,因为重定向是由你的 shell 执行的,而你的 shell 没有权限写入到 /root/test.out。输出的重定向不是由 sudo 执行的。

你可以使用 sudo 命令结合 tee 命令将输出重定向到你没有写入权限的位置。tee 命令从标准输入读取并将其写入标准输出和文件。当与 sudo 一起使用时,它允许你将输出写入需要超级用户权限的位置。

以下是实现此操作的方法:

代码语言:javascript
复制
sudo command | sudo tee /path/to/output

在这个命令中:

  • 在命令之前的 sudo 允许以超级用户权限执行命令。
  • |(管道符)将前面命令的标准输出发送到后续命令的标准输入。
  • 第二个 sudo tee /path/to/output 允许将输出写入指定位置,即 /path/to/output,而你通常没有写入权限。

例如,如果要将命令 my_command 的输出写入需要超级用户权限的文件 /var/log/output.log,你可以使用:

代码语言:javascript
复制
sudo my_command | sudo tee /var/log/output.log

运行此命令时,首先使用 sudo 处理 my_command 的输出以获取必要的权限,然后再次使用 sudotee 将输出写入 /var/log/output.log

请务必谨慎使用 sudo,因为它授予了重要的权限,同时必须确保命令及其效果的准确性。

针对这一问题,还有如下几种解决方法:

  1. 使用 sudo 运行一个 Shell,并通过 -c 选项传递命令:
代码语言:javascript
复制
sudo sh -c 'ls -hal /root/ > /root/test.out'

这样,命令及其重定向将在具有提升权限的 Shell 环境中执行。

  1. 创建一个包含命令的脚本,并使用 sudo 运行该脚本:
代码语言:javascript
复制
#!/bin/sh
ls -hal /root/ > /root/test.out

创建好脚本后,执行以下命令以提升权限运行:

代码语言:javascript
复制
sudo ./ls.sh
  1. 使用 sudo -s 启动一个具有提升权限的 Shell,然后在其中执行命令:
代码语言:javascript
复制
[nobody@so]$ sudo -s
[root@so]# ls -hal /root/ > /root/test.out
[root@so]# ^D  # Ctrl+D,退出具有提升权限的 Shell
[nobody@so]$ 

在开启的具有超级用户权限的 Shell 中执行命令并完成重定向操作,完成后使用 Ctrl+D 退出。

  1. 使用 sudo 命令结合 dd 命令
代码语言:javascript
复制
sudo ls -lha /root/ | sudo dd of=/root/test.out
  1. 使用 Here Documents
代码语言:javascript
复制
sudo bash <<EOF
ls -hal /root/ > /root/test.out
EOF

参考:

  • stackoverflow question 82256
  • man tee
  • man dd
  • https://www.gnu.org/software/bash/manual/bash.html#Here-Documents
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-21,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com