Cara menambahkan baris ke file yang hanya memiliki izin menulis root dan untuk melanjutkan eksekusi skrip

9

Saya mencoba mempelajari skrip bash. Saya sedang mengerjakan masalah praktis dan pada satu titik saya perlu menambahkan baris ke file yang memerlukan rootizin untuk menulis.

Kode ini terlihat seperti ini:

# some code
echo "add this line to the code" >> fileName
# some code

Apakah mungkin untuk membuat script meminta kata sandi root, memvalidasi kata sandi, dan ketika otentikasi berhasil memodifikasi file? Skrip kemudian harus kembali ke mode pengguna dan melanjutkan eksekusi perintah.

Alex
sumber

Jawaban:

13

Ada tip di sudohalaman manual yang menjelaskan bagaimana melakukan sesuatu seperti ini. Inilah one-liner saya:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Jelas, Anda harus terlebih dahulu mengatur pengguna Anda untuk memiliki sudohak istimewa. The shshell digunakan karena redirection ke file milik root. Saya juga harus melarikan diri dari kutipan yang digunakan untuk echoperintah.

SigueSigueBen
sumber
2

su tersedia di sebagian besar sistem unix dan harus berfungsi:

su root -c 'echo "add this line to the code" >> fileName'
keajaiban173
sumber
Berbeda dengan dengan sudo, kata sandi sepertinya tidak di-cache su.
Ryne Everett
@Ryne Everett: Saya tidak terbiasa dengan sudo. Tetapi perilaku 'su' sebenarnya seperti yang dibutuhkan oleh naskah OP. Sebagian besar waktu saya menggunakan 'su' sebaliknya: mengubah dari root ke pengguna lain. Dalam hal ini tidak diperlukan kata sandi untuk semua.
miracle173
1

Anda bisa menggunakan teedengan sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoOutput diarahkan dengan |( pipa ) ke sudo tee. teemembaca dari input standar dan menulis ke output standar setiap file yang diberikan, dalam hal ini filename. -a(atau --append) membuat teemenambahkan ke file, tanpa itu file akan ditimpa. Saat teedijalankan dengan sudoitu membuka file dengan izin root. Akhirnya, > /dev/nullmenekan teeoutput ke output standar .

Salah satu keuntungan menggunakan teedaripada hanya memulai seluruh perintah termasuk pengalihan dengan su -catau sudo sh -cadalah, bahwa Anda tidak harus mengubah kuotasi dari perintah awal dengan cara apa pun (Mengutip baris yang sudah berisi tanda kutip kadang-kadang bisa sangat jelek).

Adaephon
sumber
0

Coba ini Perintah ini tersedia di Unix dan Linux.

sudo sh -c "echo 'add this line to the code' >> fileName"

JongYoung
sumber
-2

Akan melakukan trik:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"
pengguna1934677
sumber
Mengapa ssh? Anda tidak perlu sudengan sudodan Anda juga tidak perlu menentukan rootkarena ini adalah default. Secara keseluruhan, sedikit penjelasan akan lebih baik karena OP ingin belajar sesuatu dan bukan hanya masalah yang diselesaikan.
Adaephon
Saya pikir Anda akan mengalami masalah dengan Anda tanda kutip ganda
miracle173