wyjście programu tail do pliku w systemie Linux


9

Wiem, że możemy użyć poniższego formatu do przekierowania wyjścia ekranu do pliku:

$ your_program > /tmp/output.txt

Jednak gdy użyłem poniższego polecenia, napisano „-bash: /home/user/errors.txt: Odmowa uprawnień”

sudo tail /var/log/apache2/error.log > ~/errors.txt

Czy mogę wiedzieć, jak to zrobić? ~ / Error.txt nie istnieje. Czy muszę najpierw utworzyć ten plik txt, zanim użyję polecenia przekierowania?


1
Co się stanie, jeśli napiszesz echo hi > ~/errors.txt? Czy /home/usertwój poprawny katalog domowy (lub bash w jakiś sposób pomylił się co do tego, gdzie znajduje się twój katalog domowy)?
— cjm

Czy userużytkownik, który uruchamia polecenie?
— użytkownik nieznany

tak, użytkownik jest użytkownikiem, który wykonuje polecenie
— Xianlin

Jest to normalne zachowanie dla sudo. sudonie zezwala na przekierowanie. zbyt wiele sposobów, aby ludzie mogli używać tego do robienia niegrzecznych rzeczy, których nie ma w sudoers.confpliku. Alternatywnie możesz uruchomić, sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"aby zeskrobać koniec error.log do pliku w swoim katalogu domowym.
— Tim Kennedy,

Odpowiedzi:


17

Sudo za fajką nie działa. Nie wiem, dlaczego nie możesz pisać do domu - może plik należy do katalogu głównego?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

Może potrzebujesz innej osoby stojącej za rurą. Na pewno nie potrzebujesz istniejącego pliku.


Tak, to działało ...
— Xianlin,

Jeśli chodzi o problem z uprawnieniami, może $ HOME jest zamontowany w systemie plików NFS z rootquash?
— Ansgar Esztermann

$ HOME nie jest zamontowany w systemie plików NFS.
— Xianlin,

6

Kiedy piszesz sudo somecommand > ~/errors.txt, powłoka, która dzwoni sudo(i działa jak ty), wykonuje przekierowanie i otwieranie ~/errors.txt. Zobacz Przekierowywanie standardowego pliku do pliku, na którym nie masz uprawnień do zapisu . Zwykle problemem w tym przypadku jest to, że chcesz, aby root zapisał do pliku; zobacz powiązane pytanie, aby dowiedzieć się, jak to zrobić.

Dziwne jest to, że nie można zapisać do pliku w katalogu domowym. Możliwe, że wcześniej zapisałeś jakieś dane wyjściowe jako root /home/user/errors.txt, a ten plik już istnieje i należy do roota. Usuń plik (możesz to zrobić, dopóki masz uprawnienia do zapisu /home/user, a następnie będziesz mógł go utworzyć jako użytkownik.

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

Jeśli plik naprawdę nie istnieje, to nie masz uprawnień do zapisu w swoim katalogu domowym. Chociaż jest to technicznie możliwe i czasami przydatne dla niektórych ograniczonych użytkowników, jest to bardzo niezwykłe.


Próbowałem usunąć plik „/home/user/errors.txt” i użyć powyższego polecenia. Nie działało, wciąż zabraniam mi pisać do katalogu domowego. W każdym razie sądzę, że podany przez ciebie link może służyć jako moje rozwiązanie. To jest tak samo jak pierwsza odpowiedź w tym poście. Podałeś jednak kilka szczegółowych wyjaśnień na temat przekierowywania standardowego wejścia do pliku i dziękuję ci za to.
— Xianlin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.