output del programma di coda su file in Linux


9

So che possiamo usare il formato seguente per reindirizzare l'output dello schermo su un file:

$ your_program > /tmp/output.txt

Tuttavia, quando ho usato il comando sotto, dice "-bash: /home/user/errors.txt: autorizzazione negata"

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

Posso sapere come far funzionare questo output? ~ / Errors.txt non esiste. Devo creare questo file txt prima di utilizzare il comando redirect?


1
Cosa succede se si digita echo hi > ~/errors.txt? La /home/usertua home directory corretta (o bash in qualche modo si è confuso su dove si trova la tua home directory)?
cjm

È userl'utente che esegue il comando?
utente sconosciuto

sì, l'utente è l'utente che esegue il comando
Xianlin

Questo è un comportamento normale per sudo. sudonon consente il reindirizzamento. troppi modi perché le persone possano usarlo per fare cose cattive non comprese nel sudoers.conffile. In alternativa, è possibile eseguire sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"per eliminare la fine di errors.log nel file nella directory principale.
Tim Kennedy,

Risposte:


17

Dietro la pipa, il sudo non funziona. Non so perché non puoi scrivere a casa tua - forse il file appartiene a root?

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

Forse hai bisogno di un utente diverso dietro la pipe. Di sicuro, non è necessario un file preesistente.


Sì, ha funzionato ...
Xianlin

Per quanto riguarda il problema dei permessi, forse $ HOME è montato su NFS con rootquash?
Ansgar Esztermann,

$ HOME non è montato su NFS.
Xianlin,

6

Quando scrivi sudo somecommand > ~/errors.txt, la shell che chiama sudo(ed è in esecuzione come te) è quella che esegue il reindirizzamento e l'apertura ~/errors.txt. Vedere Reindirizzamento di stdout su un file per il quale non si dispone dell'autorizzazione di scrittura . Di solito il problema in quel caso è che si desidera che root scriva sul file; vedere la domanda collegata per i modi per farlo.

Qui, è strano che non puoi scrivere su un file nella tua home directory. È probabile che in precedenza tu abbia salvato un output come root /home/user/errors.txt, e quel file ora esiste e appartiene a root. Rimuovi il file (puoi farlo fintanto che hai il permesso di scrittura /home/usere quindi sarai in grado di crearlo come utente.

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

Se il file non esiste davvero, non hai i permessi di scrittura nella tua home directory. Sebbene tecnicamente possibile e talvolta utile per alcuni utenti con restrizioni, è molto insolito.


Ho provato a eliminare '/home/user/errors.txt' e usare il comando sopra. Non ha funzionato, mi proibisce ancora di scrivere nella home directory. Comunque immagino che il link che hai fornito possa usare come mia soluzione. È la stessa della prima risposta in questo post. Tuttavia, hai fornito alcune spiegazioni dettagliate sul reindirizzamento di stdout a un file e ti ringrazio per questo.
Xianlin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.