Was ist das `[` Programm, das sich im / bin meines Systems befindet?

32

Ich habe kürzlich den /binOrdner meines Fedora durchsucht und eine Binärdatei mit dem Namen entdeckt [. Ich habe versucht, im Internet nach weiteren Informationen zu suchen, aber ich konnte nichts Nützliches finden. Das Durchgehen stracescheint auch bei näherer Betrachtung nichts Nützliches hervorzubringen.

Was ist das? Soll ich alarmiert sein? Könnte es das Ergebnis eines Systemkompromisses sein? Soll ich es laufen lassen? Gehört es zu einem Paket?

NlightNFotis
quelle
4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
Jasonwryan
@jasonwryan Ja, es hat eine Weile gedauert, bis ich es herausgefunden habe. Ich konnte im Internet nicht viele Informationen dazu finden, und Google hat nicht viel geholfen. Habe es hier in der Hoffnung gepostet, dass es dem nächsten helfen könnte, der in meinen Schuhen ist.
NlightNFotis
10
Führen Sie aus, um man [zu sehen, was der [Befehl ist!
Gilles 'SO- hör auf böse zu sein'
@Gilles Um ehrlich zu sein, ich habe es getan und es hat etwas erwähnt und mir bashgedacht, dass das etwas anderes sein könnte. Es ist nicht das Erste, woran Sie denken, wenn Sie eine Binärdatei mit einem Namen sehen, den Sie noch nie zuvor in Ihrem Dateisystem gesehen haben .
NlightNFotis
4
Finden rpm -qif /bin/[Sie heraus, woher es kommt ...
vonbrand

Antworten:

37

Die [Binärdatei, die sich /binin vielen GNU / Linux-Distributionen unter dem Baum befindet, ist nicht alarmierend. Zumindest in meinem Fedora 19 ist es ein Teil des Coreutils-Pakets, wie unten gezeigt:

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

und ist ein Synonym für test, damit Ausdrücke [ expression ]in Shell-Skripten oder sogar interaktiv geschrieben werden können.

NlightNFotis
quelle
16
Beachten Sie, dass Shells wie bashein eingebautes testund [nicht das externe Binärprogramm aufrufen.
Jordanien
1
@jordanm, heute haben die meisten Shells sie (und viele andere einfache, übliche Operationen) als Builtins. Aber das war nicht immer so (oder ist in allen Schalen so). Es könnte sogar von POSIX beauftragt werden.
Vonbrand
2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Sie haben Recht. Für [diese Spezifikation ist ein Testbefehl erforderlich.
Yegle
@vonbrand, nur Bourne-ähnliche Shells haben im Allgemeinen einen eingebauten [Befehl. Nicht-Bourne-artige mögen (t)csh, rcim esAllgemeinen nicht ( fishist dort eine Ausnahme).
Stéphane Chazelas
5

Der [Befehl ist der gleiche wie der testBefehl.

Es erlaubt Ihnen, ziemlich knappe bedingte Anweisungen in Shell-Skripten zu schreiben. Auf der SunOS-Handbuchseite:

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

Wenn Sie es entfernen, brechen Skripte!

Thorbjørn Ravn Andersen
quelle
Skripte, die für Shells geschrieben wurden, die keinen [eingebauten Befehl haben, brechen ab. Die meisten Muscheln tun es. Trotzdem würde ich das Entfernen auf keinen Fall empfehlen /bin/[.
Keith Thompson
@KeithThompson, alle Shells haben [eingebaute Skripte, deren Ausführung von Nicht-Shell-Anwendungen unterbrochen [wird. Gefällt find ... -exec [ -f {} ] \;env LC_ALL=C [ -f bar ]
mir
@StephaneChazelas: Alle Muscheln? (csh und tcsh tun das nicht, aber vielleicht ist das nicht der [springende Punkt.) Ich glaube nicht, dass ich eine von sh abgeleitete Shell gesehen habe, die nicht als eingebautes Element vorhanden ist, aber glaube nicht, dass [sie im Original eingebaut ist Borowski-Schale. Entfernen /bin/[wäre auf jeden Fall eine schlechte Idee.
Keith Thompson
Geringfügiger Streit: testund [sind fast gleich. [erfordert einen Abschluss ]; testerlaubt es nicht (oder behandelt ein Argument von eher nicht ]besonders).
Keith Thompson
2

Das [wird immer als Äquivalent zu test angegeben, aber ich hatte das] nicht explizit gesehen, obwohl es immer da ist. Ich habe dies gerade in http://ss64.com/bash/test.html gefunden :

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

das ist beruhigend - endlich habe ich die Vollendung, wie sie sagen.

Harry Weston
quelle