Quel est le programme `[` qui réside dans / bin de mon système?

32

Je parcourais récemment le /bindossier de mon Fedora et ai remarqué un binaire nommé [. J'ai essayé de chercher plus d'informations à ce sujet sur Internet, mais je n'ai rien trouvé d'utile. Son exécution stracene semble produire aucun élément utile pour une inspection plus minutieuse également.

Qu'est-ce que c'est? Devrais-je être alarmé? Serait-ce le résultat d'un compromis du système? Dois-je le lancer? Est-ce qu'il appartient à un paquet?

NlightNFotis
la source
4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
jasonwryan
@jasonwryan Ouais, il m'a fallu un certain temps pour le comprendre. Je n'ai pas pu trouver beaucoup d'informations à ce sujet sur le net et Google n'a pas beaucoup aidé. Je l'ai posté ici dans l'espoir que cela puisse aider le prochain qui est à ma place.
NlightNFotis
10
Exécuter man [pour voir quelle est la [commande!
Gilles 'SO- arrête d'être méchant'
@ Gilles Pour être honnête, je l'ai fait et il en a été question bash, et j'ai pensé que cela pourrait être autre chose. Ce n'est pas la première chose qui vous vient à l'esprit lorsque vous voyez un fichier binaire avec un nom que vous n'avez jamais vu auparavant dans votre système de fichiers. En d'autres termes, vous devez trouver quelque chose de plus concret pour dissiper les doutes qui se cachent dans votre tête. .
NlightNFotis
4
Faire un rpm -qif /bin/[pour savoir d'où ça vient ...
vonbrand

Réponses:

37

Le [binaire résidant sous l’ /binarborescence dans de nombreuses distributions GNU / Linux n’est pas une chose à alarmer. Au moins dans mon Fedora 19, il fait partie du paquet coreutils, comme illustré ci-dessous:

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

et est un synonyme pour testpermettre des expressions comme [ expression ]être écrites dans des scripts shell ou même une utilisation interactive.

NlightNFotis
la source
16
Notez que des coquilles comme bashun builtin testet [et ne pas invoquer le binaire externe.
Jordanie
1
@jordanm, de nos jours, la plupart des obus ont des fonctions intégrées (et beaucoup d'autres opérations simples et communes). Mais ce n'était pas toujours le cas (ou l'est dans tous les coquillages). Il pourrait même être mandaté par POSIX.
vonbrand
2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Vous avez raison. Une commande de test [est requise par cette spécification.
Yegle
@vonbrand, seuls les shells de type Bourne ont généralement une [commande intégrée . Non-Bourne comme ceux comme (t)csh, rc, en esgénéral ne le font pas ( fishune exception là).
Stéphane Chazelas
5

La [commande est la même que la testcommande.

Il vous permet d’écrire des instructions conditionnelles plutôt succinctes dans des scripts shell. À partir de la page de manuel SunOS:

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

Si vous le supprimez, les scripts vont casser!

Thorbjørn Ravn Andersen
la source
Les scripts écrits pour les shells qui n'ont pas [de commande intégrée vont se rompre. La plupart des coquillages font. Néanmoins, je ne recommanderais certainement pas de retirer /bin/[.
Keith Thompson
@ KeithThompson, tous les shells sont [intégrés, ce sont ses scripts qui ont des applications non-shell qui s'exécutent et [qui vont casser. Comme find ... -exec [ -f {} ] \;ouenv LC_ALL=C [ -f bar ]
Stéphane Chazelas
@ StephaneChazelas: Tous les obus? (csh et tcsh ne le font pas, mais c'est peut-être à côté du problème.) Je ne pense pas avoir vu une coque dérivée de sh qui ne soit pas [intégrée, mais ne pense pas qu'elle [était intégrée à l'original. Bourne shell. Dans tous les cas, supprimer /bin/[serait certainement une mauvaise idée.
Keith Thompson
Petit problème: testet [sont presque les mêmes. [nécessite une fermeture ]; testne le permet pas (ou plutôt ne traite pas un argument de ]spécialement).
Keith Thompson
2

Le [est toujours donné comme équivalent à tester, mais je n'avais pas vu le] mentionné explicitement, même s'il est toujours là. Je viens de trouver ceci dans http://ss64.com/bash/test.html :

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

ce qui est rassurant - j'ai enfin terminé comme on dit.

Harry Weston
la source