回答:
同様に安全な別のオプションは、sudo
の-i
スイッチを使用してrootとしてログインすることです:
$ sudo -i
# echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'
ルートアカウントは実際には有効になっていませんが、ルートとして安全に実行できるため、これは依然としてベストプラクティスのルールに従います。からman sudo
:
The -i (simulate initial login) option runs the shell
specified by the password database entry of the target user
as a login shell. This means that login-specific resource
files such as .profile or .login will be read by the shell.
If a command is specified, it is passed to the shell for
execution via the shell's -c option. If no command is
specified, an interactive shell is executed.
sudo bash
単一引用符なしでコマンドを表現する場合、単一引用符で囲んでコマンドを実行し、中間シェルを介して実行できます。
これをルートとして実行するには:
echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
使用しない別の方法でコマンドを記述します'
。
echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock
次に呼び出しsudo sh -c …
ます:
sudo sh -c 'echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'
または、rootのみが書き込み可能なファイルに出力を書き込むには、を呼び出しますsudo tee
。-a
オプションを渡しtee
て、宛先ファイルに追加します。追加しない場合、ファイルは切り捨てられます。
echo 'clock_hctosys="YES"' | sudo tee -a /etc/conf.d/hwclock >/dev/null
より複雑なファイルの変更のために、あなたが呼び出すことができsudo sed
、sudo ed
、sudo perl
、...
または、適切なエディターを使用して、sudoを呼び出します。Emacsでを開き/sudo:/etc/conf.d/hwclock
ます。Vimで:w !sudo tee %
、開いたファイルにルートとして書き込むために呼び出すか、sudo.vimプラグインを使用します。または、sudoの最後からを呼び出しますsudoedit /etc/conf.d/hwclock
。
または、暗黒面に屈してシェルをルートとして実行することもできます。
$ sudo -i
# echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
リダイレクトされたファイルの許可が原因でコマンドは失敗します。リダイレクトは、sudo
コマンドが呼び出される前でも発生します。
書き込み用にファイルを実際に開くのはルートであることを確認する必要があります。
それを行う最も簡単な方法:
echo 'clock_hctosys="YES"' | sudo tee -a /etc/conf.d/hwclock >/dev/null
echo
それだけでテキスト文字列を生成して、あなたの通常のユーザーとして実行することができます。tee
ユーティリティは、しかし、rootとして実行する必要がありますし、tee -a
データを追加します。デフォルトでは、指定されたファイルへの書き込みに加えて、入力データを標準出力に複製する/dev/null
ためtee
、出力をにリダイレクトします。
とbash
や、「ここで、文字列を」理解任意のシェル:
sudo tee -a /etc/conf.d/hwclock >/dev/null <<<'clock_hctosys="YES"'
これは、上記と実質的に同じです。文字列の生成方法のみが変更されます。
別の、やや迂回の方法:
sudo sh -c 'echo clock_hctosys=\"YES\" >>/etc/conf.d/hwclock'
ここでは、sh -c
ルートとして実行されている子シェル内でリダイレクトが行われます。
sudo dd of=
必要に応じて追加するには:
echo inbytes | sudo dd of=outfile oflag=append conv=notrunc
または、ファイルを最初から再作成するには:
echo inbytes | sudo dd of=outfile
利点:
tee
ないためよりも良い/dev/null
sh
サブシェルがないからよりいいdd
status=progress
転送の進行状況を確認するなど、多くの強力なオプションがありますsudoがコマンドにstdinを転送するため、機能します。
tee
コマンドはrootとして実行されるだけで、複雑で誤動作を起こしやすいメインコマンドではないからです。(ではありませんecho
)