Ik heb dit stukje code gevonden in /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
De firewall wordt leeggemaakt en opnieuw geladen.
Ik begrijp de >> /dev/null 2>&1
deel.
Wat is het doel van dit in de cron? Het overschrijft mijn firewallregels.
Kan ik deze cronjob veilig verwijderen?
Antwoord 1, autoriteit 100%
>> /dev/null
leidt de standaarduitvoer (stdout
) om naar /dev/null
, waardoor deze wordt weggegooid.
(De >>
lijkt een beetje overbodig, aangezien >>
betekent toevoegen terwijl >
betekent afkappen en schrijven, en ofwel toevoegen aan of schrijven naar /dev/null
heeft hetzelfde netto-effect. Ik gebruik om die reden meestal gewoon >
.)
2>&1
leidt standaardfout (2
) om naar standaarduitvoer (1
), die deze vervolgens ook verwijdert sinds standaard output is al omgeleid.
Antwoord 2, autoriteit 68%
Laten we >> /dev/null 2>&1
statement in delen:
Deel 1:>>
uitvoeromleiding
Dit wordt gebruikt om de programma-uitvoer om te leiden en de uitvoer aan het einde van het bestand toe te voegen. Meer…
Deel 2:/dev/null
speciaal bestand
Dit is een Pseudo-devices speciaal bestand.
Commando ls -l /dev/null
geeft je details van dit bestand:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Heb je crw
waargenomen? Wat betekent dat het een pseudo-device-bestand is van character-special-filetype dat seriële toegang biedt.
/dev/null
accepteert en negeert alle invoer; produceert geen uitvoer (retourneert altijd een einde-van-bestand indicatie bij een lezen). Referentie: Wikipedia
Deel 3:2>&1
(voegt uitvoer van stream 2 samen met stream 1)
Telkens wanneer u een programma uitvoert, opent het besturingssysteem altijd drie bestanden, standaardinvoer, standaarduitvoer en standaardfout, zoals we weten wanneer een bestand wordt geopend, keert het besturingssysteem (van kernel) terug een niet-negatief geheel getal dat een bestandsdescriptorwordt genoemd. De bestandsdescriptor voor deze bestanden is respectievelijk 0, 1 en 2.
Dus 2>&1
zegt eenvoudigweg standaardfout omleiden naar standaarduitvoer.
&
betekent dat alles wat volgt een bestandsdescriptor is, geen bestandsnaam.
Kortom, door dit commando te gebruiken, vertel je je programma niet te schreeuwen tijdens het uitvoeren.
Wat is het belang van het gebruik van 2>&1
?
Als u geen uitvoer wilt produceren, zelfs niet in het geval van een fout in de terminal. Laten we, om het duidelijker uit te leggen, het volgende voorbeeld bekijken:
$ ls -l > /dev/null
Voor de bovenstaande opdracht is er geen uitvoer afgedrukt in de terminal, maar wat als deze opdracht een fout oplevert:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Ondanks dat ik de uitvoer omleid naar /dev/null
, wordt het afgedrukt in de terminal. Het is omdat we de foutuitvoer niet omleiden naar /dev/null
, dus om ook de foutuitvoer om te leiden, is het vereist om 2>&1
toe te voegen:
$ ls -l file_doesnot_exists > /dev/null 2>&1
Antwoord 3, autoriteit 17%
Dit is de manier om een programma stil uit te voeren en alle uitvoer ervan te verbergen.
/dev/null
is een speciaal bestandssysteemobject dat alles weggooit dat erin geschreven is. Een stream ernaartoe omleiden betekent dat de uitvoer van je programma wordt verborgen.
Het 2>&1
gedeelte betekent “de foutstroom omleiden naar de uitvoerstroom”, dus als u de uitvoerstroom omleidt, wordt de foutstroom ook omgeleid. Zelfs als je programma nu naar stderr
schrijft, wordt die uitvoer ook weggegooid.
Antwoord 4, autoriteit 5%
/dev/null
is een standaardbestand dat alles wat u ernaar schrijft weggooit, maar meldt dat de schrijfbewerking is geslaagd.
1
is standaarduitvoer en 2
is standaardfout.
2>&1
stuurt standaardfout om naar standaarduitvoer. &1
geeft bestandsdescriptor aan (standaarduitvoer), anders (als u alleen 1
gebruikt) stuurt u de standaardfout om naar een bestand met de naam 1
. [any command] >>/dev/null 2>&1
stuurt alle standaardfouten om naar standaarduitvoer en schrijft dat allemaal naar /dev/null
.
Antwoord 5, autoriteit 2%
Laat me het beetje bij beetje uitleggen.
0,1,2
0: standard input
1: standard output
2: standard error
>>
>>
in command >> /dev/null 2>&1
voegt de opdrachtuitvoer toe aan /dev/null
.
opdracht >> /dev/null 2>&1
- Na opdracht:
command
=> 1 output on the terminal screen
=> 2 output on the terminal screen
- Na omleiding:
command >> /dev/null
=> 1 output to /dev/null
=> 2 output on the terminal screen
- Na
/dev/null 2>&1
command >> /dev/null 2>&1
=> 1 output to /dev/null
=> 2 output is redirected to 1 which is now to /dev/null
Antwoord 6, autoriteit 2%
Ik gebruik >> /dev/null 2>&1
voor een stille cronjob. Een cronjob doet het werk, maar stuurt geen rapport naar mijn e-mail.
Voor zover ik weet, verwijder /dev/null
niet. Het is handig, vooral wanneer u cPaneluitvoert, het kan worden gebruikt voor wegwerp-cronjob-rapporten.
Antwoord 7
Zoals beschreven door de anderen, elimineert het schrijven naar /dev/null de uitvoer van een programma. Meestal stuurt cron een e-mail voor elke uitvoer van het proces dat met een cronjob is gestart. Dus door de uitvoer naar /dev/null te schrijven, voorkom je dat je spam krijgt als je je adres in cron hebt opgegeven.
Antwoord 8
Bewerk /etc/conf.apf
. Stel DEVEL_MODE="0"
in. DEVEL_MODE
ingesteld op 1
voegt een cron-taak toe om apf na 5 minuten te stoppen.