Znalazłem ten fragment kodu w /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Opróżnia i ładuje zaporę ogniową.
Nie rozumiem tej >> /dev/null 2>&1
części.
Jaki jest cel posiadania tego w cronie? Zastępuje moje reguły zapory. Czy mogę bezpiecznie usunąć to zadanie CRON?
shell
syntax
posix
io-redirection
spoczynkowy
źródło
źródło
>&- 2>&-
.2>&1 > /dev/null
taki sam jak> /dev/null 2>&1
? Wydaje mi się to bardziej naturalne .../dev/null
—stderr będzie nadal wysyłany. Wypróbuj narzędzie na gist.github.com/zigg/344361751c0110419b0fOdpowiedzi:
>> /dev/null
przekierowuje standardowe wyjście (stdout
) do/dev/null
, które je odrzuca.(
>>
Wydaje się to trochę zbędne, ponieważ>>
oznacza „dopisz, a”>
oznacza „obcinaj i pisz”, a albo dołączanie do, albo pisanie do/dev/null
ma ten sam efekt netto. Zwykle używam tylko>
z tego powodu).2>&1
przekierowuje standardowy error (2
) na standardowe wyjście (1
), które następnie go również odrzuca, ponieważ standardowe wyjście zostało już przekierowane.źródło
&
symbol2>&1
.When redirecting data streams, & means whatever follows is a file descriptor, not a filename.
Podzielmy
>> /dev/null 2>&1
zdanie na części:Część 1:
>>
przekierowanie wyjściaSłuży do przekierowania wyjścia programu i dołączenia wyjścia na końcu pliku. Więcej...
Część 2:
/dev/null
plik specjalnyTo jest specjalny plik Pseudo-urządzeń .
Polecenie
ls -l /dev/null
poda szczegóły tego pliku:Czy zaobserwowałeś
crw
? Co oznacza, że jest to plik pseudo-urządzenia , który ma typ znaków specjalnych, który zapewnia dostęp szeregowy.Część 3:
2>&1
deskryptor plikuIlekroć uruchamiasz program, system operacyjny zawsze otwiera trzy pliki, standardowe wejście, standardowe wyjście i standardowy błąd, jak wiemy, gdy plik jest otwierany, system operacyjny (z jądra ) zwraca nieujemną liczbę całkowitą zwaną deskryptorem pliku . Deskryptorem plików dla tych plików są odpowiednio 0, 1 i 2.
Po
2>&1
prostu mówi przekierowanie standardowego błędu na standardowe wyjście.Krótko mówiąc, używając tego polecenia, mówisz swojemu programowi, aby nie krzyczał podczas wykonywania.
Jakie znaczenie ma używanie
2>&1
?Jeśli nie chcesz generować żadnych danych wyjściowych, nawet w przypadku wystąpienia błędu w terminalu. Aby wyjaśnić jaśniej, rozważmy następujący przykład:
W przypadku powyższego polecenia w terminalu nie wydrukowano żadnych danych wyjściowych, ale co się stanie, jeśli polecenie to spowoduje błąd:
Mimo że przekierowuję dane wyjściowe
/dev/null
, są one drukowane w terminalu. Jest tak, ponieważ nie przekierowujemy danych wyjściowych błędów/dev/null
, więc aby przekierować również dane wyjściowe błędów, należy dodać2>&1
:źródło
>
jest operatorem przekierowania, cokolwiek po operatorze przekierowania powinno być dodawaniem lokalizacji pliku&
przed,1
wskazuje, że nie jest to plik, w którym aplikacja musi przekierować dane wyjściowe, ale deskryptor pliku. Będę wdzięczny, jeśli ktoś może dodać więcej szczegółów tego komentarza.Jest to sposób na ciche wykonanie programu i ukrycie wszystkich jego wyników.
/dev/null
to specjalny obiekt systemu plików, który odrzuca wszystko, co w nim zapisane. Przekierowanie do niego strumienia oznacza ukrywanie danych wyjściowych programu.Te
2>&1
środki część „przekierować strumień błędów do strumienia wyjściowego”, więc kiedy przekierować strumień wyjściowy strumień błędów zostaje przekierowany również. Nawet jeśli twój program zapisuje dostderr
tej pory, dane wyjściowe również zostaną odrzucone.źródło
2>&1
rzeczywistości przekierowujestderr
dostdout
. Różnicę między tym a tym, co twierdziłeś, najlepiej ilustruje zamiana kolejności przekierowań, np2>&1 >/dev/null
./dev/null
to standardowy plik, który odrzuca wszystko, co do niego piszesz, ale informuje, że operacja zapisu się powiodła.1
to standardowe wyjście i2
standardowy błąd.2>&1
przekierowuje standardowy błąd na standardowe wyjście.&1
wskazuje deskryptor pliku (standardowe wyjście), w przeciwnym razie (jeśli tylko użyjesz1
) przekierujesz standardowy błąd do pliku o nazwie1
.[any command] >>/dev/null 2>&1
przekierowuje wszystkie standardowe błędy na standardowe dane wyjściowe i zapisuje to wszystko/dev/null
.źródło
Używam
>> /dev/null 2>&1
do cichej koleżanki. Koleżanka wykona zadanie, ale nie wyśle raportu na mój e-mail.O ile mi wiadomo, nie usuwaj
/dev/null
. Jest to przydatne, zwłaszcza gdy uruchamiasz cPanel , może być używany do wyrzucania raportów z cronjob.źródło
Jak opisano w innych, pisanie do / dev / null eliminuje dane wyjściowe programu. Zwykle cron wysyła wiadomość e-mail do każdego wyjścia z procesu rozpoczętego przez cronjob. Zapisując wynik do / dev / null, zapobiegniesz spamowaniu, jeśli podałeś swój adres w cron.
źródło
Edit
/etc/conf.apf
. SetDEVEL_MODE="0"
.DEVEL_MODE
ustawione na1
doda zadanie cron, aby zatrzymać apf po 5 minutach.źródło