sudo [duplicate]を使用してファイルにテキストを追加しようとすると、「権限が拒否されました」

sudo [duplicate]を使用してファイルにテキストを追加しようとすると、「権限が拒否されました」

私はAmazon Linuxを使用しています。ファイルにテキストを追加しようとしています。このファイルはrootが所有しています。 「sudo」を使用すると、必要なテキストを追加できると思いましたが、「権限が拒否されました」というメッセージが表示されます。下記をご覧ください。

[myuser@mymachine ~]$ ls -al /etc/yum.repos.d/google-chrome.repo
-rw-r--r-- 1 root root 186 Jul 31 15:50 /etc/yum.repos.d/google-chrome.repo
[myuser@mymachine ~]$ sudo echo -e "[google-chrome]\nname=google-chrome\nbaseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub" >> /etc/yum.repos.d/google-chrome.repo
-bash: /etc/yum.repos.d/google-chrome.repo: Permission denied

必要なテキストがファイルに追加されるように明細をどのように調整しますか?

答え1

tee特定の権限を必要とするファイルにストリームをリダイレクトまたは追加するには、ユーティリティを使用する必要があります。たとえば、次のようになります。

echo something | sudo tee /etc/file

または追加するために

echo something | sudo tee -a /etc/file

デフォルトでは、シェルは自分のユーザー権限とリダイレクトとして実行されるか、>ユーザー>>と同じ権限で実行されるため、実際には許可なく実行およびechoリダイレクトさsudoれますroot

あるいは、ルートシェルをインポートして、通常どおりリダイレクトを試してみることもできます。

sudo -i
echo something >> /etc/pat/to/file
exit

またはsudo -s非ログインシェルの場合。

ルートアクセスで非対話型シェルを実行することもできます。

sudo bash -c 'echo something >> /etc/somewhere/file'

答え2

前の回答で提供した説明は基本的に正しいです。リダイレクト前のコマンドは高い特権で実行されますが、リダイレクト自体は実行されません。

あなたの要件を満たすための別の方法があります。ここや回答には言及されていません。問題はこれが重複です。。完全性のためにここに入れます。

sudo su -c 'echo -e "some\ntext" >> /other/file'

関連情報