Wat is /dev/null 2>&1?

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>&1deel.

Wat is het doel van dit in de cron? Het overschrijft mijn firewallregels.
Kan ik deze cronjob veilig verwijderen?


Antwoord 1, autoriteit 100%

>> /dev/nullleidt 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/nullheeft hetzelfde netto-effect. Ik gebruik om die reden meestal gewoon >.)

2>&1leidt 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>&1statement 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/nullspeciaal bestand

Dit is een Pseudo-devices speciaal bestand.

Commando ls -l /dev/nullgeeft je details van dit bestand:

crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null

Heb je crwwaargenomen? Wat betekent dat het een pseudo-device-bestand is van character-special-filetype dat seriële toegang biedt.

/dev/nullaccepteert 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>&1zegt 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>&1toe 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/nullis 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>&1gedeelte betekent “de foutstroom omleiden naar de uitvoerstroom”, dus als u de uitvoerstroom omleidt, wordt de foutstroom ook omgeleid. Zelfs als je programma nu naar stderrschrijft, wordt die uitvoer ook weggegooid.


Antwoord 4, autoriteit 5%

/dev/nullis een standaardbestand dat alles wat u ernaar schrijft weggooit, maar meldt dat de schrijfbewerking is geslaagd.

1is standaarduitvoer en 2is standaardfout.

2>&1stuurt standaardfout om naar standaarduitvoer. &1geeft bestandsdescriptor aan (standaarduitvoer), anders (als u alleen 1gebruikt) stuurt u de standaardfout om naar een bestand met de naam 1. [any command] >>/dev/null 2>&1stuurt 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>&1voegt de opdrachtuitvoer toe aan /dev/null.

opdracht >> /dev/null 2>&1

  1. Na opdracht:
command
=> 1 output on the terminal screen
=> 2 output on the terminal screen
  1. Na omleiding:
command >> /dev/null
=> 1 output to /dev/null
=> 2 output on the terminal screen
  1. 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>&1voor een stille cronjob. Een cronjob doet het werk, maar stuurt geen rapport naar mijn e-mail.

Voor zover ik weet, verwijder /dev/nullniet. 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_MODEingesteld op 1voegt een cron-taak toe om apf na 5 minuten te stoppen.

Other episodes