GNU/Linux >> Linux の 問題 >  >> Linux

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

/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 でシェルを起動します 次に、コマンドを実行します:

    [[email protected]]$ sudo -s
    [[email protected]]# ls -hal /root/ > /root/test.out
    [[email protected]]# ^D
    [[email protected]]$
    
  • sudo tee を使用 ( -c を使用するときに多くのエスケープが必要な場合 オプション):

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

    /dev/null へのリダイレクト ティーを止めるために必要です 画面への出力から。 追加する 出力ファイルを上書きする代わりに (>> )、tee -a を使用 または tee --append (最後のものは GNU coreutils に固有のものです)。

2 番目、3 番目、4 番目のソリューションを提供してくれた Jd、Adam J. Forster、Johnathan に感謝します。


ここの誰かが sudoing tee を提案しました:

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

これは、アクセス権のないディレクトリにコマンドをリダイレクトするためにも使用できます。これは、tee プログラムが実質的に「ファイルへのエコー」プログラムであり、/dev/null へのリダイレクトにより、画面への出力も停止して、上記の元の不自然な例と同じになるため、機能します。


私が自分で見つけたトリックは

sudo ls -hal /root/ | sudo dd of=/root/test.out

Linux
  1. Nginxを使用してリダイレクトする方法

  2. プログラムの出力をZipファイルにリダイレクトする方法は??

  3. chmodを使用してファイルのパーミッションを変更するにはどうすればよいですか?

  1. 出力をファイルと標準出力にリダイレクトする方法

  2. system() の出力をファイルにリダイレクトする方法は?

  3. tcpdump でファイルに書き込み、標準出力に適切なデータを出力するにはどうすればよいですか?

  1. 特定のインターフェースで cURL を使用する方法

  2. spark-submit の出力全体をファイルにリダイレクトする方法

  3. sudo アクセス権があるかどうかを確認するにはどうすればよいですか?