Что за программа `[` находится в моей системе / bin?

32

Я недавно просматривал /binпапку моей Fedora и заметил двоичный файл с именем [. Я пытался найти в Интернете дополнительную информацию об этом, но не смог найти ничего полезного. Прохождение этого, straceкажется, не дает ничего полезного для более тщательного изучения.

Что это? Должен ли я быть встревожен? Может ли это быть результатом системного компромисса? Должен ли я запустить это? Это относится к какой-либо упаковке?

NlightNFotis
источник
4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
Джейсонвриан
@jasonwryan Да, мне понадобилось время, чтобы понять это. Я не мог найти много информации для этого в сети, и Google не сильно помог. Выложил это здесь в надежде, что это может помочь следующему, кто на моем месте.
NlightNFotis
10
Беги, man [чтобы увидеть, что это за [команда!
Жиль "ТАК - перестань быть злым"
@ Жиль Честно говоря, я сделал, и это упомянул кое-что о bash, и решил, что это может быть что-то еще. Это не первое, что приходит вам в голову, когда вы видите двоичный файл с именем, которого вы никогда не видели в своей файловой системе - или, другими словами, вам нужно найти что-то более конкретное, чтобы прояснить сомнения в вашей голове. ,
NlightNFotis
4
Сделайте, rpm -qif /bin/[чтобы выяснить, откуда он
взялся

Ответы:

37

[Двоичные проживания под /binдеревом во многих дистрибутивах GNU / Linux не то , чтобы быть встревожены прочь. По крайней мере, в моей Fedora 19 это часть пакета coreutils, как показано ниже:

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

и является синонимом для testразрешения выражений, подобных [ expression ]написанным в сценариях оболочки или даже интерактивного использования.

NlightNFotis
источник
16
Обратите внимание , что скорлупе нравится bashиметь встроенную команду testи [и не вызывает внешний двоичный файл.
Иордания
1
@jordanm, сегодня большинство оболочек имеют их (и многие другие простые общие операции) как встроенные. Но это было не всегда так (или так во всех оболочках). Это может быть даже предписано POSIX.
vonbrand
2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Вы правы. Тестовая команда [требуется этой спецификацией.
Yegle
@ vonbrand, только Bourne-подобные оболочки обычно имеют встроенную [команду. Non-Борна-как из них , как (t)csh, rc, как esправило , нет ( fishисключение там).
Стефан Шазелас
5

Команда [такая же, как testкоманда.

Это позволяет вам писать довольно краткие условные выражения в скриптах оболочки. Со страницы руководства SunOS:

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

Если вы удалите его, сценарии сломаются!

Турбьерн Равн Андерсен
источник
Скрипты, написанные для оболочек, которые не имеют [встроенной команды, сломаются. Большинство снарядов делают. Тем не менее, я, конечно, не рекомендовал бы удалять /bin/[.
Кит Томпсон
@KeithThompson, все оболочки имеют [встроенные функции, это скрипты, которые выполняются не-оболочечными приложениями [, которые сломаются. Нравится find ... -exec [ -f {} ] \;илиenv LC_ALL=C [ -f bar ]
Стефан Шазелас
@StephaneChazelas: все снаряды? (csh и tcsh нет, но, возможно, это не относится к делу.) Я не думаю, что видел оболочку, производную от sh, которая не имеет [встроенной функции, но не думаю, что она [была встроенной в оригинальной Оболочка Борна. В любом случае удаление /bin/[, безусловно, будет плохой идеей.
Кит Томпсон
Незначительный каламбур: testи [это почти то же самое. [требует закрытия ]; testне позволяет этого (или, скорее, не обрабатывает аргумент ]специально).
Кит Томпсон
2

[Всегда дается как эквивалент теста, но я не видел], упомянутого явно, хотя оно всегда там. Я только что нашел это в http://ss64.com/bash/test.html :

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

что обнадеживает - наконец, у меня есть завершение, как они говорят.

Гарри Уэстон
источник