LoginSignup
1
0

ルート権限でのヒアドキュメント ファイル出力

Last updated at Posted at 2024-03-24

課題

ルート権限が必要なファイルにヒアドキュメントでファイル出力しようとするとエラーになります。

  • 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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0