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


32

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

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


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 ]написанным в сценариях оболочки или даже интерактивного использования.


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 ]

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.