【Ubuntu】所有者がrootのファイルに対してsudo echo “hogehoge” >> test.txt をすると失敗する

スポンサーリンク

こんな感じ

~$ ls -al test.txt
-rw-rw-r-- 1 root root 18  3月  7 21:15 test.txt
~$ sudo echo "hogehoge" >> test.txt
bash: test.txt: 許可がありません

sudo=root権限だから、rootで追記しろと言っても通らないっぽい

対策

sudo+echoが絡むとちょっとややこしいみたい。

$ sudo -i

でrootシェルになってからechoをやるのが早そう。

Ask Ubntu

をみると
command line – Cannot echo “hello” > x.txt even with sudo? – Ask Ubuntu

The redirection is done by the shell before sudo is even started. So either make sure the redirection happens in a shell with the right permissions

リダイレクトがsudoの前、つまり一般ユーザ権限で行われてしまうので権限が足らず「許可がありません」と出ます。

つまり

echo "hogehoge" >> /home/t/test.txt

が先にシェルで評価・実行されるので、エラーになる。この時のechoは一般ユーザ権限なので、権限が足りない。

防ぐには

sudo bash -c 'echo "hello" > f.txt'

と、sudo後にbashにecho “hello” > f.txtを渡すために、-cオプションをつけシングルクォートで囲む
または

echo "hello" | sudo tee -a f.txt

とteeコマンドを使う。teeはオプション無しだと新規作成になるので、上書きの場合は-aオプションをつけろ

ということらしいです。さらっと答えてるAsk Ubuntuがすごい^^;

あとは、ファイルを編集すればいいなら

$ sudo vi hoge.txt

でvi起動して最後に追記してもOK。