关于bash:sudo echo“something”>>

关于bash:sudo echo“something”>>

sudo echo “something” >> /etc/privilegedFile doesn't work

这是一个非常简单的问题,至少看起来应该是关于Linux中的sudo权限。

很多时候,我只是想在/etc/hosts或类似文件中附加一些内容,但最终都无法附加,因为>>>都是不允许的,即使是根目录。

有没有什么方法可以使这项工作不需要susudo su根深蒂固?


使用tee --appendtee -a

1
echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list

确保避免引号内的引号。

要避免将数据打印回控制台,请将输出重定向到/dev/null。

1
echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list > /dev/null

问题是shell执行输出重定向,而不是sudo或echo,所以这是作为常规用户执行的。

尝试以下代码段:

1
sudo sh -c"echo 'something' >> /etc/privilegedfile"


问题是,处理重定向的是您的shell;它试图以您的权限打开文件,而不是以sudo方式运行的进程。

也许可以这样使用:

1
sudo sh -c"echo 'something' >> /etc/privilegedfile"

1
sudo sh -c"echo 127.0.0.1 localhost >> /etc/hosts"

1
sudo sh -c"echo >> somefile"

应该工作。问题是>和>>是由shell处理的,而不是由"sudoed"命令处理的,因此权限是您自己的,而不是您要"sudoing"的用户的权限。


我要注意的是,出于好奇,您也可以引用一个Heredoc(对于大的块):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sudo bash -c"cat <<EOIPFW >> /etc/ipfw.conf
<?xml version="
1.0" encoding="UTF-8"?>

<plist version="
1.0">
  <dict>
    <key>Label</key>
    <string>com.company.ipfw</string>
    <key>Program</key>
    <string>/sbin/ipfw</string>
    <key>ProgramArguments</key>
   
      <string>/sbin/ipfw</string>
      <string>-q</string>
      <string>/etc/ipfw.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true></true>
  </dict>
</plist>
EOIPFW"


在bash中,可以使用tee> /dev/null组合使用,以保持stdout的清洁。

1
 echo"# comment" |  sudo tee -a /etc/hosts > /dev/null

用yoo的答案,把这个放在你的~/.bashrc里:

1
2
3
4
sudoe() {
    [["$#" -ne 2 ]] && echo"Usage: sudoe <text> <file>" && return 1
    echo"$1" | sudo tee --append"$2"> /dev/null
}

现在你可以运行sudoe 'deb blah # blah' /etc/apt/sources.list

编辑:

一个更完整的版本,允许您通过管道输入或从文件中重定向,并包括一个用于关闭附加的-a开关(默认情况下是打开的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sudoe() {
  if ([["$1" =="-a" ]] || [["$1" =="--no-append" ]]); then
    shift &>/dev/null || local failed=1
  else
    local append="--append"
  fi

  while [[ $failed -ne 1 ]]; do
    if [[ -t 0 ]]; then
      text="$1"; shift &>/dev/null || break
    else
      text="$(cat <&0)"
    fi

    [[ -z"$1" ]] && break
    echo"$text" | sudo tee $append"$1">/dev/null; return $?
  done

  echo"Usage: $0 [-a|--no-append] [text] <file>"; return 1
}

您也可以使用moreutils包中的sponge,无需重新定向输出(即无需隐藏tee噪声):

1
echo 'Add this line' | sudo sponge -a privfile

echo'hello world'(sudo tee-a/etc/apt/sources.list)


通过将sed-i与$a一起使用,您可以在最后一行后面附加包含变量和特殊字符的文本。

例如,向/etc/hosts添加带有$new_ip的$new_主机:

1
sudo sed -i"\$ a $NEW_IP\t\t$NEW_HOST.domain.local\t$NEW_HOST" /etc/hosts

SED选项说明:

  • -我在原地
  • 最后一行
  • 追加的


这对我很有用:原始命令

1
echo"export CATALINA_HOME="/opt/tomcat9"">> /etc/environment

工作指令

1
echo"export CATALINA_HOME="/opt/tomcat9"" |sudo tee /etc/environment

在使用cat >>附加文件之后,您是否可以更改文件的所有权,然后再将其更改回?

1
2
3
sudo chown youruser /etc/hosts  
sudo cat /downloaded/hostsadditions >> /etc/hosts  
sudo chown root /etc/hosts

像这样对你有用吗?


推荐阅读

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    linux改文件夹名命令?

    linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

    linux建文件命令格式?

    linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

    linux文件全选命令?

    linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linux打包文件夹命令?

    linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

    linux中统计文件命令?

    linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

    linux重名名文件命令?

    linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件

    linux的建立文件命令?

    linux的建立文件命令?,名称,系统,时间,名字,命令,文件夹,位置,密码,不了,文

    linux06文件命令?

    linux06文件命令?,数字,系统,工作,第一,名字,信息,管理,文件,目录,命令,linux

    linux将文件备份命令?

    linux将文件备份命令?,系统,密码,设备,软件,通讯,较大,认证,服务,数据,文件,L

    linux扩展文件命令?

    linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Lin

    linux中的改权限命令?

    linux中的改权限命令?,系统,地址,工作,数字,命令,权限,文件,目录,用户,常用

    linux命令新增文件夹?

    linux命令新增文件夹?,系统,名字,首次,名称,新增,文件,命令,文件夹,地址,密

    linux推送文件命令?

    linux推送文件命令?,地址,系统,情况,工作,命令,文件,电脑,密码,信息,目录,Lin

    linux文件替换命令行?

    linux文件替换命令行?,资料,命令,文件,数据,名称,系统,实时,工作,字符串,批

    linux可生成文件命令?

    linux可生成文件命令?,名字,命令,名称,文件,文件夹,位置,数据,密码,时间,电

    linux命令行解锁文件?

    linux命令行解锁文件?,系统,地址,工具,工作,管理,电脑,命令,文件,信息,密码,L