GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menggunakan sudo untuk mengarahkan keluaran ke lokasi yang saya tidak punya izin untuk menulis?

Perintah Anda tidak berfungsi karena pengalihan dilakukan oleh shell Anda yang tidak memiliki izin untuk menulis ke /root/test.out . Pengalihan keluaran tidak dilakukan oleh sudo.

Ada beberapa solusi:

  • Jalankan shell dengan sudo dan berikan perintah dengan menggunakan -c opsi:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Buat skrip dengan perintah Anda dan jalankan skrip itu dengan sudo:

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

    Jalankan sudo ls.sh . Lihat jawaban Steve Bennett jika Anda tidak ingin membuat file sementara.

  • Luncurkan shell dengan sudo -s lalu jalankan perintah Anda:

    [[email protected]]$ sudo -s
    [[email protected]]# ls -hal /root/ > /root/test.out
    [[email protected]]# ^D
    [[email protected]]$
    
  • Gunakan sudo tee (jika Anda harus banyak melarikan diri saat menggunakan -c pilihan):

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

    Pengalihan ke /dev/null diperlukan untuk menghentikan tee dari keluaran ke layar. Untuk menambahkan alih-alih menimpa file keluaran (>> ), gunakan tee -a atau tee --append (yang terakhir khusus untuk GNU coreutils).

Terima kasih kepada Jd, Adam J. Forster, dan Johnathan untuk solusi kedua, ketiga, dan keempat.


Seseorang di sini baru saja menyarankan sudoing tee:

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

Ini juga dapat digunakan untuk mengalihkan perintah apa pun, ke direktori yang tidak dapat Anda akses. Ini berfungsi karena program tee secara efektif merupakan program "echo to a file", dan redirect ke /dev/null adalah untuk menghentikannya juga menampilkan ke layar agar tetap sama seperti contoh buatan asli di atas.


Trik yang saya temukan sendiri adalah

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

Linux
  1. Bagaimana Cara Mengarahkan Output Program Ke File Zip??

  2. Bagaimana cara menggunakan chmod untuk mengubah izin file?

  3. Cara mengarahkan output ke file dan stdout

  1. Bagaimana cara mengarahkan output dari system() ke file?

  2. Bagaimana saya bisa membuat tcpdump menulis ke file dan menghasilkan data standar yang sesuai?

  3. cara menggunakan cURL pada antarmuka tertentu

  1. Cara mengarahkan seluruh output dari spark-submit ke file

  2. Bagaimana cara menambahkan file sebagai sudo?

  3. Bagaimana cara memeriksa apakah saya memiliki akses sudo?