hostsファイルに行を追加し、sudoの使用時に許可を拒否する-Mac


13

端末で1行のコマンドを実行して、Macのhostsファイルに行を追加しようとしています。

これはsudoを使用すると簡単だと思いましたが>>、hostsファイルに追加しようとすると「permission denied」が返されますが>、hostsの内容を置き換えると機能します。

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

OSは最新です。


単純にテキストエディタ(sudoで始まる)を使用して/ etc / hosts
MrSmith42

1
これを自動化するスクリプトを作成したいので、この場合はテキストエディターは役に立ちません。
ミント

回答:


16

これechoはルートとして実行されているためですが、実際にリダイレクトを実行するのはシェルです。これを機能させるには、新しいシェルを作成する必要があります。

sudo -- sh -c "echo test >> /etc/hosts"

編集:>リダイレクトが機能するという事実を見たことはありません。説明できません。


セキュリティ上の理由から、ほとんどの実稼働環境ではteeサブシェルの実行を許可するsudo必要があるため、ユーティリティに注目する価値があると感じています。
スティーブブゾナス

9

代わりに、あなたの例ではエコーが実行されているのでルートではなく、現在のユーザーとして実行されるリダイレクトを介してエコーを実行し、Steve Buzonasが示唆するようにティーを使用します

 echo 'test' | sudo tee -a /etc/hosts

これで、sudoがteeコマンドに適用されました。「-a」はファイルに追加します

これはまた、teeを標準出力に出力します。ターミナルで「テスト」を表示したくない場合> /dev/nullは、その行の最後に:を追加します。


1

新しい行が最初に作成されたことを確認するために、私はこれを使用しました:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.