Cos'è il programma `[` che risiede nel mio bin / sistema?


32

Recentemente stavo sfogliando la mia /bincartella di Fedora e ho notato un nome binario [. Ho provato a cercare su Internet ulteriori informazioni a riguardo, ma non sono riuscito a trovare nulla di utile. Eseguirlo stracenon sembra produrre nulla di utile anche per un'ispezione più ravvicinata.

Cos'è quello? Dovrei essere allarmato? Potrebbe essere il risultato di un compromesso del sistema? Dovrei eseguirlo? Appartiene a qualsiasi pacchetto?


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

@jasonwryan Sì, mi ci è voluto un po 'per capirlo. Non sono riuscito a trovare molte informazioni in rete e Google non ha aiutato molto. Inserito qui nella speranza che possa aiutare il prossimo che è nei miei panni.
NlightNFotis

10
Corri man [per vedere qual è il [comando!
Gilles 'SO- smetti di essere malvagio' il

@Gilles Ad essere sincero, l'ho fatto e ha parlato di qualcosa bash, e ho pensato che potesse essere qualcos'altro. Non è la prima cosa che ti viene in mente quando vedi un file binario con un nome che non hai mai visto prima nel tuo file system - o per dirla in altro modo, devi trovare qualcosa di più concreto per chiarire i dubbi nella tua testa .
NlightNFotis

4
Fai uno rpm -qif /bin/[per scoprire da dove viene ...
vonbrand,

Risposte:


37

Il [binario che risiede sotto l' /binalbero in molte distribuzioni GNU / Linux non è qualcosa di cui allarmarsi. Almeno nel mio Fedora 19 fa parte del pacchetto coreutils, come dimostrato di seguito:

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

ed è sinonimo testdi consentire espressioni come quelle [ expression ]scritte negli script della shell o persino l'uso interattivo.


16
Si noti che le shell come bashhanno un builtin teste [non invocano il binario esterno.
Giordania,

1
@jordanm, oggi la maggior parte delle shell li ha (e molte altre operazioni semplici e comuni) come builtin. Ma non era sempre così (o lo è in tutte le shell). Potrebbe anche essere richiesto da POSIX.
vonbrand,

2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Hai ragione. Un comando di prova [è richiesto da questa specifica.
yegle,

@vonbrand, solo le shell tipo Bourne hanno generalmente un [comando incorporato . Non-Bourne-come quelli come (t)csh, rc, esgeneralmente non ( fishè un'eccezione lì).
Stéphane Chazelas,

5

Il [comando è uguale al testcomando.

Ti permette di scrivere istruzioni condizionali piuttosto concise negli script di shell. Dalla pagina del manuale di SunOS:

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

Se lo rimuovi, gli script si romperanno!


Gli script scritti per shell che non dispongono [di un comando integrato si interromperanno. La maggior parte delle conchiglie lo fanno. Tuttavia, certamente non consiglierei di rimuoverlo /bin/[.
Keith Thompson,

@KeithThompson, tutte le shell sono integrate, sono [gli script che eseguono applicazioni non shell [che si romperanno. Come find ... -exec [ -f {} ] \;oenv LC_ALL=C [ -f bar ]
Stéphane Chazelas,

@StephaneChazelas: tutte le conchiglie? (csh e tcsh no, ma forse non è questo il punto.) Non credo di aver visto una shell derivata da sh che non ha [come builtin, ma non credo [fosse un builtin nell'originale Conchiglia Bourne. In ogni caso, rimuovere /bin/[sarebbe sicuramente una cattiva idea.
Keith Thompson,

Piccoli cavilli: teste [sono quasi gli stessi. [richiede una chiusura ]; testnon lo consente (o meglio non tratta un argomento di ]appositamente).
Keith Thompson,

2

Il [è sempre dato come equivalente a test, ma non avevo visto esplicitamente] menzionato, anche se è sempre lì. Ho appena trovato questo in http://ss64.com/bash/test.html :

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

il che è rassicurante - finalmente ho il completamento come si suol dire.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.