Muszę edytować plik należący do roota przez ssh. Dodaję wpis do pliku, zachowuję pierwsze 9 wierszy i reorganizuję resztę do pliku tymczasowego. Wiem, że> nadpisuje to, co jest w pliku (i to jest to, czego chcę), ale muszę zachować roota jako właściciela pliku. Jak mogę to zrobić? Dzięki!
#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
cat temp > file;
rm -f temp
"
Odpowiedzi:
1 dla odpowiedzi № 1To nie jest cat
to zmienia właściciela, to jest sed
. Kiedy używasz sed -i
, robi coś takiego:
mv file file.bak
sed "$a$user" file.bak > file
rm file.bak
Jak widzisz, tworzy to nowy plik z nazwą oryginalnego pliku i jest własnością użytkownika, który tworzy plik.
Jeśli chcesz tego uniknąć, utwórz kopię oryginalnego pliku zamiast używać -i
opcja.
cp file /tmp/file.$$
sed "$a$user" /tmp/file.$$ > file
rm /tmp/file.$$
Albo po prostu możesz to zrobić sed
do twojego rurociągu:
sed "$a$user" file | head -n 9 file ; tail -n +10 file | sort > temp
cat temp > file
rm temp
0 dla odpowiedzi nr 2
Minęło trochę czasu odkąd napisałem w BASH, ale myślę, że punktem wyjścia będzie
chown root $file // if you have a variable with the file name in
lub
chown root thefile.txt //if you want it hard coded;
Inna zmienna w równaniu brzmi: kto ma właściciela kota aplikacji? Myślę, że każdy, kto jest właścicielem uruchomionej aplikacji, decyduje o tym, w jaki sposób własność plików, z których korzysta, jest określona
może mógłbyś też spróbować
$ sudo cat temp > file
ponieważ sesja należałaby wtedy do katalogu głównego, a zatem wyjście należałoby do katalogu głównego ???
0 dla odpowiedzi № 3
Rozumiem, że użytkownik, który się loguje, nie może zostać rootem? Więc najlepszym rozwiązaniem jest użycie dd
dd if = tmpfile of = outfile
oczywiście wykonuj wszystkie zamówienia, seding, awking i greping w pliku tmp. dd w tym użyciu jest równoważny> bez tworzenia nowego pliku
0 dla odpowiedzi nr 4
#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
sudo mv temp file;
sudo chown root file
"
Będzie to działać lepiej, jeśli na komputerze xxxx użytkownik xxxx, którego zalogujesz, ma dostęp do sudo bez hasła. Możesz to zrobić, umieszczając ten wpis w pliku / etc / sudoers:
xxxx ALL=NOPASSWD: ALL