課題
ルート権限が必要なファイルにヒアドキュメントでファイル出力しようとするとエラーになります。
- hostsファイルに追記する場合の例
ファイル権限確認
[user01@localhost ~]$ ls -l /etc/hosts
-rw-r--r--. 1 root root 158 3月 24 09:59 /etc/hosts
ファイルの中身確認
[user01@localhost ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
ヒアドキュメントで追記(エラーになる)
[user01@localhost ~]$ cat <<EOT >> /etc/hosts
> 127.0.0.2 test2
> 127.0.0.3 test3
> EOT
-bash: /etc/hosts: 許可がありません
- sudoを付けても同じ
sudoを付けて実行(エラーになる)
[user01@localhost ~]$ sudo cat <<EOT >> /etc/hosts
> 127.0.0.2 test2
> 127.0.0.3 test3
> EOT
-bash: /etc/hosts: 許可がありません
解決策
- ルート権限でteeを実行してファイル出力
teeでファイル出力
[user01@localhost ~]$ cat <<EOT | sudo tee -a /etc/hosts > /dev/null
> 127.0.0.2 test2
> 127.0.0.3 test3
> EOT
[sudo] user01 のパスワード:
ファイルの中身確認
[user01@localhost ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.2 test2
127.0.0.3 test3
※tee -aで追記モードにしないと元の内容が消えてしまうので注意
別解
※下記でも良い
teeでファイル出力
[user01@localhost ~]$ sudo tee -a /etc/hosts << EOT > /dev/null
127.0.0.4 test4
EOT
ファイルの中身確認
[user01@localhost ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.2 test2
127.0.0.3 test3
127.0.0.4 test4