Що таке програма `[`, яка знаходиться у моїй системі / bin?


32

Нещодавно я переглядав /binпапку Fedora і помічав двійкове ім’я [. Я намагався шукати в Інтернеті докладнішу інформацію, але нічого корисного не знайшов. Виконання його через strace, здається, не дає нічого корисного для більш детального огляду.

Що це? Чи варто мене тривожити? Чи може це бути результатом системного компромісу? Чи слід його запускати? Чи належить він до якогось пакету?


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

@jasonwryan Так, це знадобилося мені певний час. Я не зміг знайти багато інформації в мережі, і Google не дуже допомог. Опублікував це тут, сподіваючись, що це може допомогти наступному, хто в моїх черевиках.
NlightNFotis

10
Біжи, man [щоб побачити, що це за [команда!
Жил 'ТАК - перестань бути злим'

@Gilles Чесно кажучи, я це робив, і це щось згадувало bash, і я вважав, що це може бути щось інше. Це не перше, що спадає вам на думку, коли ви бачите бінарний файл з іменем, якого ви ніколи не бачили у вашій файловій системі - або, кажучи про це, вам доведеться знайти щось більш конкретне, щоб усунути сумніви в голові. .
NlightNFotis

4
Зробіть це, rpm -qif /bin/[щоб дізнатися, звідки воно походить ...
vonbrand

Відповіді:


37

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

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

і є синонімом для того, testщоб дозволити вирази, як [ expression ]вони записуються в сценарії оболонки, або навіть інтерактивне використання.


16
Зверніть увагу , що шкаралупі подобається bashмати вбудовану команду testі [та не викликає зовнішній двійковий файл.
jordanm

1
@jordanm, сьогодні більшість оболонок мають їх (і багато інших простих, звичайних операцій) як вбудовані. Але це було не завжди так (або так є у всіх оболонках). Це навіть може бути доручено POSIX.
vonbrand

2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Ви праві. Ця [характеристика вимагає тестової команди .
yegle

@vonbrand, тільки оболонки, подібні до Борна, зазвичай мають вбудовану [команду. Non-Борна-як з них , як (t)csh, rc, як esправило , немає ( fishвиняток там).
Стефан Шазелас

5

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

Це дозволяє писати досить термінові умовні заяви у скриптах оболонки. На сторінці керівництва SunOS:

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

Якщо ви видалите його, скрипти будуть порушені!


Сценарії, написані для оболонок, які не мають [вбудованої команди, зламаються. Більшість снарядів. Проте я точно не рекомендував би видаляти /bin/[.
Кіт Томпсон

@KeithThompson, всі оболонки [вбудовані, це сценарії, які виконують додатки без оболонок, [які зламаються. Like find ... -exec [ -f {} ] \;orenv LC_ALL=C [ -f bar ]
Stéphane Chazelas

@StephaneChazelas: Усі оболонки? (csh та tcsh - ні, але, мабуть, це не в цьому.) Я не думаю, що я бачив оболонку з похідними, яка не має [вбудованого, але не думаю, [що в оригіналі була вбудована Оболонка Борна. У будь-якому випадку видалення /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.