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
-copsi: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.outJalankan
sudo ls.sh. Lihat jawaban Steve Bennett jika Anda tidak ingin membuat file sementara. -
Luncurkan shell dengan
sudo -slalu jalankan perintah Anda:[example@unixlinux.online]$ sudo -s [example@unixlinux.online]# ls -hal /root/ > /root/test.out [example@unixlinux.online]# ^D [example@unixlinux.online]$ -
Gunakan
sudo tee(jika Anda harus banyak melarikan diri saat menggunakan-cpilihan):sudo ls -hal /root/ | sudo tee /root/test.out > /dev/nullPengalihan ke
/dev/nulldiperlukan untuk menghentikan tee dari keluaran ke layar. Untuk menambahkan alih-alih menimpa file keluaran (>>), gunakantee -aatautee --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