1. ホーム
  2. linux

[解決済み】sudoを使用して、書き込み権限のない場所に出力をリダイレクトするにはどうすればよいですか?[解決済み]

2022-03-23 01:39:01

質問

私は開発用のRedHat Linuxの1台でsudoアクセスを与えられており、通常書き込み権限がない場所に出力をリダイレクトする必要があることがよくあるようです。

困ったことに、この工夫された例ではうまくいかない。

sudo ls -hal /root/ > /root/test.out

回答が届いたところです。

-bash: /root/test.out: Permission denied

どうすればいいのでしょうか?

どのように解決するのですか?

への書き込み権限を持たないシェルがリダイレクトを行っているため、コマンドが動作しない。 /root/test.out . 出力のリダイレクトは sudoによって実行されます。

解決策は複数あります。

  • sudoでシェルを起動し、そのシェルにコマンドを与えるために -c オプションで指定します。

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
    
  • コマンドを記述したスクリプトを作成し、そのスクリプトをsudoで実行します。

    #!/bin/sh
    ls -hal /root/ > /root/test.out
    
    

    実行 sudo ls.sh . Steve Bennett の アンサー 一時ファイルを作成しない場合。

  • でシェルを起動します。 sudo -s で、コマンドを実行します。

    [nobody@so]$ sudo -s
    [root@so]# ls -hal /root/ > /root/test.out
    [root@so]# ^D
    [nobody@so]$
    
    
  • 使用方法 sudo tee (を使うときに、たくさんエスケープする必要がある場合)。 -c というオプションがあります)。

    sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
    
    

    へのリダイレクトは /dev/null を止めるために必要です。 ティー を画面に出力することができます。には アペンド 出力ファイルを上書きするのではなく ( >> を使用します。 tee -a または tee --append (最後のものは GNU coreutils ).

ありがとうございました。 Jd , アダム・J・フォースター そして ジョナサン は、2番目、3番目、4番目の解答です。