Linux'ta kuyruk programı çıktısı


9

Ekran çıktısını bir dosyaya yönlendirmek için aşağıdaki formatı kullanabileceğimizi biliyorum:

$ your_program > /tmp/output.txt

Ancak aşağıdaki komutu kullandığımda, "-bash: /home/user/errors.txt: İzin reddedildi" yazıyor

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

Bu çıktının nasıl çalıştığını öğrenebilir miyim? ~ / Error.txt mevcut değil. Yönlendirme komutunu kullanmadan önce bu txt dosyasını oluşturmam gerekir mi?


1
Yazarsan ne olur echo hi > ~/errors.txt? Is /home/userDoğru ev dizini (veya bash nasılsa ev dizini olduğu hakkında karıştı aldın)?
cjm

userKomutu çalıştıran kullanıcı mı ?
kullanıcı bilinmiyor

evet, kullanıcı şu komutu çalıştıran kullanıcıdır
Xianlin

Bu normal bir davranıştır sudo. sudoyeniden yönlendirmeye izin vermez. insanların sudoers.confdosyayı içine almayan yaramaz şeyler yapmak için kullanabilmeleri için çok fazla yol . Alternatif olarak, sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"error.log dosyasının sonunu ana dizininizdeki dosyaya kazımak için çalışabilirsiniz .
Tim Kennedy

Yanıtlar:


17

Borunun arkasında, sudo çalışmıyor. Neden evinize yazamıyorsunuz bilmiyorum - belki dosya root'tur?

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

Borunun arkasında farklı bir kullanıcıya ihtiyacınız olabilir. Elbette, önceden var olan bir dosyaya ihtiyacınız yoktur.


Evet, işe yaradı ...
Xianlin

İzin sorununa gelince, $ HOME belki NFS ana kök ile monte edilir?
Ansgar Esztermann

$ HOME, NFS'ye bağlı değildir.
Mart'ta Xianlin

6

Eğer yazarken sudo somecommand > ~/errors.txt, aradığını kabuk sudo(ve senin kadar çalışıyorsa) yönlendirmeyi ve açılışını gerçekleştirdikten biridir ~/errors.txt. Bkz. Stdout'u yazma izniniz olmayan bir dosyaya yönlendirme . Genellikle bu durumda sorun kök dosyaya yazmak istediğiniz olmasıdır; Bunu yapmanın yolları için bağlantılı soruya bakın.

Burada, ana dizininizdeki bir dosyaya yazamamanız garip. Muhtemelen daha önce bazı çıktıları root olarak kaydetmiş olmanız /home/user/errors.txtve bu dosya artık mevcut ve root'a ait olmasıdır. Dosyayı kaldırın (yazma izniniz olduğu sürece bunu yapabilirsiniz /home/userve ardından kullanıcı olarak oluşturabilirsiniz.

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

Dosya gerçekten mevcut değilse, ana dizininizde yazma izniniz yoktur. Teknik olarak mümkün olsa da ve bazı kısıtlı kullanıcılar için bazen yararlı olsa da, bu çok sıra dışı.


'/Home/user/errors.txt' dosyasını silmeyi ve yukarıdaki komutunuzu kullanmayı denedim. İşe yaramadı, hala ev dizinine yazmamı yasakladı. Her neyse, sağladığınız bağlantı benim çözümüm olarak kullanılabilir. Bu yazıdaki ilk cevapla aynı. Ancak, bir dosyaya yönlendirme stdoutu hakkında bazı ayrıntılı açıklamalar yaptınız ve bunun için teşekkür ederim.
Xianlin
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.