Yalnızca kök yazma iznine sahip bir dosyaya satır nasıl eklenir ve kod yürütülmesine devam edilir


9

Ben bash betiklerini öğrenmeye çalışıyorum. Pratik bir sorun üzerinde çalışıyorum ve bir noktada rootyazma izni gerektiren bir dosyaya bir satır eklemem gerekiyor .

Kod şöyle görünür:

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

Komut dosyasının bir şekilde kök parola istemesini, parolayı doğrulamasını ve başarılı kimlik doğrulamasında dosyayı değiştirmesini mümkün mü? Komut dosyası daha sonra kullanıcı moduna dönmeli ve komutun yürütülmesine devam etmelidir.

Yanıtlar:


13

sudoMan sayfasında böyle bir şeyin nasıl yapılacağını açıklayan bir ipucu var . İşte benim tek astarım:

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

Açıkçası, öncelikle kullanıcınızı sudoayrıcalıklara sahip olacak şekilde ayarlamanız gerekir . shKabuk çünkü kök mülkiyetindeki dosyaya yönlendirmenin kullanılır. echoKomuta için kullanılan alıntılardan da kaçmak zorunda kaldım .


2

su çoğu unix sisteminde kullanılabilir ve çalışmalıdır:

su root -c 'echo "add this line to the code" >> fileName'

Bunun aksine sudo, şifreler önbelleğe alınmıyor gibi görünüyor su.
Ryne Everett

@Ryne Everett: Sudo'ya aşina değilim. Ancak 'su' davranışı aslında OP'nin senaryosu tarafından ihtiyaç duyulduğu gibidir. Çoğu zaman 'su' kullanıyorum: kökten başka bir kullanıcıya geçiş. Bu durumda, hiçbir parola gerekmez.
miracle173

1

Sen kullanabilirsiniz teeile sudo:

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

echo'nin çıkışı |( pipe ) ile yönlendirilir sudo tee. standart girdidentee okur ve herhangi bir dosyayı standart çıktıya yazar , bu durumda . (veya ) dosyalara dosya ekler, bu olmadan dosyaların üzerine yazılır. As ile çalıştırılan bu kök izinlere sahip dosyalar açılır. Son olarak, standart çıkışa çıkışını bastırır .filename-a--appendteeteesudo> /dev/nulltee

Veya teeile yeniden yönlendirme de dahil olmak üzere tüm komutu başlatmak yerine kullanmanın bir avantajı , ilk komutun tırnak işaretini herhangi bir şekilde değiştirmek zorunda kalmamanızdır (Tırnaklar içeren satırlar zaman zaman oldukça çirkinleşebilir).su -csudo sh -c


0

Bunu deneyin Bu komut Unix ve Linux'ta kullanılabilir.

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


-2

Hile yapmak:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

Neden ssh? Sen gerekiyor suile sudove belirtmek gerekiyor ne rootvarsayılan olarak. Sonuç olarak, OP sadece bir problemi çözmekle kalmayıp bir şeyler öğrenmek istediği için biraz daha fazla açıklama iyi olurdu.
Adaephon

Sanırım çift tırnak işaretleri ile sorun
yaşarsınız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.