Ich habe diesen Code in /etc/cron.daily/apf gefunden
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Die Firewall wird geleert und neu geladen.
Ich verstehe den >> /dev/null 2>&1
Teil nicht.
Was ist der Zweck, dies in der Cron zu haben? Es überschreibt meine Firewall-Regeln. Kann ich diesen Cron-Job sicher entfernen?
shell
syntax
posix
io-redirection
ruhen
quelle
quelle
>&- 2>&-
.2>&1 > /dev/null
das gleiche wie> /dev/null 2>&1
? Es scheint mir natürlicher .../dev/null
-stderr ausgegeben. Probieren Sie das Tool unter gist.github.com/zigg/344361751c0110419b0fAntworten:
>> /dev/null
leitet die Standardausgabe (stdout
) an um/dev/null
, wodurch sie verworfen wird.(Das
>>
scheint seitdem irgendwie überflüssig>>
"Anhängen" bedeutet, während>
"Abschneiden" und "Schreiben" bedeutet und entweder "Anhängen" oder "Schreiben an"/dev/null
den gleichen Nettoeffekt hat. Normalerweise verwende ich dies nur>
aus diesem Grund.)2>&1
Leitet Standardfehler (2
) an Standardausgabe (1
) um, die ihn dann ebenfalls verwirft, da die Standardausgabe bereits umgeleitet wurde.quelle
&
Symbol anzuzeigen , da drin2>&1
.When redirecting data streams, & means whatever follows is a file descriptor, not a filename.
>> /dev/null 2>&1
Teilen wir die Aussage in Teile auf:Teil 1:
>>
AusgabeumleitungDies wird verwendet, um die Programmausgabe umzuleiten und die Ausgabe am Ende der Datei anzuhängen. Mehr...
Teil 2:
/dev/null
SpezialdateiDies ist eine spezielle Pseudo-Gerätedatei .
Der Befehl
ls -l /dev/null
gibt Ihnen Details zu dieser Datei:Hast du beobachtet
crw
? Dies bedeutet, dass es sich um eine Pseudo-Gerätedatei handelt , die vom Typ einer speziellen Zeichendatei ist und seriellen Zugriff bietet.Teil 3:
2>&1
DateideskriptorWenn Sie ein Programm ausführen, öffnet das Betriebssystem immer drei Dateien: Standardeingabe, Standardausgabe und Standardfehler. Wie wir wissen, gibt das Betriebssystem (vom Kernel ) beim Öffnen einer Datei eine nicht negative Ganzzahl zurück, die als Dateideskriptor bezeichnet wird . Der Dateideskriptor für diese Dateien ist 0, 1 bzw. 2.
Also
2>&1
einfach Standardfehler zur Standardausgabe umleiten.Kurz gesagt, mit diesem Befehl weisen Sie Ihr Programm an, während der Ausführung nicht zu schreien.
Was ist die Bedeutung der Verwendung
2>&1
?Wenn Sie keine Ausgabe erzeugen möchten, auch wenn im Terminal ein Fehler auftritt. Betrachten wir zur besseren Erläuterung das folgende Beispiel:
Für den obigen Befehl wurde keine Ausgabe im Terminal gedruckt, aber was ist, wenn dieser Befehl einen Fehler erzeugt:
Obwohl ich die Ausgabe auf umlenke
/dev/null
, wird sie im Terminal gedruckt. Dies liegt daran, dass wir die Fehlerausgabe nicht umleiten./dev/null
Um auch die Fehlerausgabe umzuleiten, müssen Sie Folgendes hinzufügen2>&1
:quelle
>
ein Umleitungsoperator ist, was auch immer Umleitungsoperator folgt wird erwartet , das Hinzufügen eine Datei Lage sein ,&
bevor1
zeigt an, dass es nicht eine Datei ist , wenn die Anwendung hat die Ausgabe umleiten , aber ein Dateideskriptor. Ich würde mich freuen, wenn jemand weitere Details zu diesem Kommentar hinzufügen kann.Auf diese Weise können Sie ein Programm leise ausführen und alle seine Ausgaben verbergen.
/dev/null
ist ein spezielles Dateisystemobjekt, das alles verwirft, was in es geschrieben wurde. Wenn Sie einen Stream in diesen Stream umleiten, wird die Ausgabe Ihres Programms ausgeblendet.Der
2>&1
Teil bedeutet "Fehlerstrom in den Ausgabestream umleiten". Wenn Sie also den Ausgabestream umleiten, wird der Fehlerstrom ebenfalls umgeleitet. Selbst wenn Ihr Programmstderr
jetzt schreibt, wird diese Ausgabe ebenfalls verworfen.quelle
2>&1
leitet tatsächlichstderr
zu weiterstdout
. Der Unterschied zwischen diesem und dem, was Sie behauptet haben, lässt sich am besten durch Vertauschen der Reihenfolge der Weiterleitungen veranschaulichen, z2>&1 >/dev/null
./dev/null
ist eine Standarddatei, die alles verwirft, was Sie darauf schreiben, aber meldet, dass der Schreibvorgang erfolgreich war.1
ist Standardausgabe und2
ist Standardfehler.2>&1
Leitet den Standardfehler zur Standardausgabe um.&1
Gibt den Dateideskriptor (Standardausgabe) an. Andernfalls (wenn Sie nur verwenden1
) leiten Sie den Standardfehler in eine Datei mit dem Namen um1
.[any command] >>/dev/null 2>&1
Leitet alle Standardfehler zur Standardausgabe um und schreibt dies alles in/dev/null
.quelle
ich benutze
>> /dev/null 2>&1
für einen stillen Cronjob. Ein Cronjob erledigt den Job, sendet aber keinen Bericht an meine E-Mail.Soweit ich weiß, nicht entfernen
/dev/null
. Dies ist besonders dann nützlich, wenn Sie cPanel ausführen . Es kann zum Wegwerfen von Cronjob-Berichten verwendet werden.quelle
Wie von den anderen beschrieben, eliminiert das Schreiben in / dev / null die Ausgabe eines Programms. Normalerweise sendet cron eine E-Mail für jede Ausgabe des Prozesses, der mit einem Cronjob gestartet wurde. Wenn Sie also die Ausgabe in / dev / null schreiben, verhindern Sie Spam, wenn Sie Ihre Adresse in cron angegeben haben.
quelle
Bearbeiten
/etc/conf.apf
. Stellen Sie einDEVEL_MODE="0"
.DEVEL_MODE
set to1
fügt einen Cron-Job hinzu, um apf nach 5 Minuten zu stoppen.quelle