Co to jest program `[`, który znajduje się w / bin mojego systemu?


32

Niedawno przeglądałem /binfolder mojej Fedory i zauważyłem plik binarny o nazwie [. Próbowałem przeszukać Internet, aby uzyskać więcej informacji na ten temat, ale nie znalazłem nic przydatnego. Przepuszczanie go stracenie wydaje się również produkować niczego przydatnego do bliższej kontroli.

Co to jest? Czy powinienem się niepokoić? Czy może to wynik kompromisu systemowego? Czy powinienem to uruchomić? Czy należy do jakiejkolwiek paczki?


4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
jasonwryan

@Jasonwryan Tak, zajęło mi to trochę czasu, aby to rozgryźć. Nie mogłem znaleźć dużo informacji na ten temat w sieci, a Google niewiele pomógł. Wysłałem go tutaj w nadziei, że może pomóc następnemu, który jest w moich butach.
NlightNFotis

10
Uruchom, man [aby zobaczyć, jakie [jest polecenie!
Gilles „SO- przestań być zły”

@Gilles Szczerze mówiąc, zrobiłem to i wspomniałem o czymś bash, i pomyślałem, że to może być coś innego. Nie jest to pierwsza rzecz, która przychodzi ci na myśl, gdy widzisz plik binarny o nazwie, której nigdy wcześniej nie widziałeś w systemie plików - lub inaczej mówiąc, musisz znaleźć coś bardziej konkretnego, aby rozwiać wątpliwości w twojej głowie .
NlightNFotis

4
Zrobić rpm -qif /bin/[, aby dowiedzieć się, skąd pochodzi ...
vonbrand

Odpowiedzi:


37

[Binarny zamieszkały pod /bindrzewem w wielu dystrybucjach GNU / Linux nie jest czymś, co należy niepokoić się. Przynajmniej w mojej Fedorze 19 jest to część pakietu coreutils, jak pokazano poniżej:

$ rpm -qf /bin/[
coreutils-8.21-13.fc19.x86_64

i jest synonimem testpozwalającym na wyrażenia takie jak [ expression ]pisanie w skryptach powłoki, a nawet użycie interaktywne.


16
Zauważ, że muszle jak bashmają wbudowaną testi [, a nie powoływać się na binarnym zewnętrznego.
jordanm

1
@jordanm, dziś większość powłok ma je (i wiele innych prostych, typowych operacji) jako wbudowane. Ale nie zawsze tak było (lub tak jest we wszystkich powłokach). Może to być nawet wymagane przez POSIX.
vonbrand,

2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Masz rację. [Ta specyfikacja wymaga polecenia testowego .
yegle

@ vonbrand, tylko powłoki podobne do Bourne'a mają na ogół wbudowane [polecenie. Te , które nie są podobne do Bourne'a, takie jak (t)csh, na ogół nie ( jest to wyjątek). rcesfish
Stéphane Chazelas

5

[Komenda jest taka sama jak na testkomendę.

Umożliwia pisanie raczej krótkich instrukcji warunkowych w skryptach powłoki. Ze strony podręcznika SunOS:

   if [ "$1" = "pear" ] || [ "$1" = "grape" ] || [ "$1" = "apple" ]
   then
       command
   fi

Jeśli go usuniesz, skrypty się zepsują!


Skrypty napisane dla powłok, które nie mają [wbudowanego polecenia, ulegną awarii. Większość pocisków ma. Nadal jednak nie polecam usuwania /bin/[.
Keith Thompson

@KeithThompson, wszystkie powłoki mają [wbudowane, to skrypty, które wykonują aplikacje inne niż powłoki , ulegną awarii [. Like find ... -exec [ -f {} ] \;orenv LC_ALL=C [ -f bar ]
Stéphane Chazelas

@StephaneChazelas: Wszystkie muszle? (csh i tcsh nie, ale być może to nie ma sensu). Nie sądzę, że widziałem powłokę pochodną sh, która nie ma [wbudowanego, ale nie sądzę, że [była wbudowana w oryginał Skorupa Bourne'a. W każdym razie usunięcie /bin/[byłoby złym pomysłem.
Keith Thompson

Drobne spory: testi [prawie takie same. [wymaga zamknięcia ]; testnie pozwala na to (a raczej nie traktuje specjalnie argumentu ]).
Keith Thompson,

2

[Zawsze podaje się jako odpowiednik testu, ale nie widziałem wyraźnie wspomnianego], chociaż zawsze tam jest. Właśnie znalazłem to w http://ss64.com/bash/test.html :

When the [ form is used, the last argument to the command must be a ]

co jest pocieszające - w końcu mam ukończenie, jak mówią.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.