こんな感じ
~$ 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。