Zur Erläuterung, warum die Option "Abschlag" vorzuziehen ist
Wenn Sie die Ausgabe Ihres Befehls über die Pipeline an tee weiterleiten, brauchen Sie nur die Rechte von tee mit sudo zu erhöhen und tee anzuweisen, in die betreffende Datei zu schreiben (oder anzuhängen), vorausgesetzt, Sie haben die entsprechende Berechtigung zur Ausführung des Befehls, der die Ausgabe erzeugt.
In dem in der Frage genannten Beispiel würde das bedeuten:
ls -hal /root/ | sudo tee /root/test.out
für einige weitere praktische Beispiele:
# kill off one source of annoying advertisements
echo 127.0.0.1 ad.doubleclick.net | sudo tee -a /etc/hosts
# configure eth4 to come up on boot, set IP and netmask (centos 6.4)
echo -e "ONBOOT=\"YES\"\nIPADDR=10.42.84.168\nPREFIX=24" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-eth4
In jedem dieser Beispiele nehmen Sie die Ausgabe eines nicht privilegierten Befehls und schreiben in eine Datei, die normalerweise nur von Root geschrieben werden kann, was der Ursprung Ihrer Frage ist.
Es ist eine gute Idee, dies so zu tun, da der Befehl, der die Ausgabe erzeugt, nicht mit erhöhten Rechten ausgeführt wird. Es scheint hier keine Rolle zu spielen mit echo
aber wenn es sich bei dem Quellbefehl um ein Skript handelt, dem Sie nicht ganz trauen, ist das entscheidend.
Beachten Sie, dass Sie die Option -a verwenden können, um append append zu tee (wie >>
) in die Zieldatei zu übertragen, anstatt sie zu überschreiben (wie >
).