我系统的/ bin中的`[`程序是什么?


32

最近,我在浏览Fedora的/bin文件夹时,发现一个名为的二进制文件[。我确实尝试在互联网上搜索有关此信息的更多信息,但是找不到任何有用的信息。运行它strace似乎也不会产生任何有用的东西来进行仔细检查。

那是什么?我应该惊慌吗?难道是系统妥协的结果?我应该运行它吗?它属于任何包装吗?


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

@jasonwryan是的,我花了一段时间才弄清楚。我在网上找不到太多信息,而Google也帮不上什么忙。将其张贴在这里,希望对下一个穿着我的鞋子的人有所帮助。
NlightNFotis 2014年

10
运行man [以查看[命令是什么!
吉尔(Gilles)'所以

@Gilles说实话,我做了,它提到了有关的内容bash,并认为可能还有其他内容。当您在文件系统中看到一个从未有过的名称的二进制文件时,这并不是您要想到的第一件事;或者换句话说,您必须找到更具体的东西来消除您的疑惑。 。
NlightNFotis 2014年

4
做一个rpm -qif /bin/[来找出它的来源...
vonbrand 2014年

Answers:


37

[/bin在许多GNU / Linux发行版中,驻留在树下二进制文件不会引起警告。至少在我的Fedora 19中,它是coreutils软件包的一部分,如下所示:

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

并且是test允许[ expression ]使用shell脚本甚至交互式用法编写表达式的同义词。


16
请注意,像这样的外壳bash具有内置功能test[并且不会调用外部二进制文件。
jordanm 2014年

1
@jordanm,今天大多数shell将它们(以及许多其他简单的常用操作)作为内置函数使用。但这并非总是如此(或在所有shell中都是如此)。POSIX甚至可能要求它。
vonbrand 2014年

2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html你是正确的。[该规范要求测试命令。
yegle 2014年

@vonbrand,通常只有类似Bourne的shell具有内置[命令。非类似Bourne的像(t)cshrces一般不(fish是个例外存在)。
斯特凡Chazelas

5

[命令与test命令相同。

它使您可以在Shell脚本中编写简洁的条件语句。从SunOS手册页:

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

如果删除它,脚本将中断!


为没有[内置命令的shell编写的脚本将中断。大多数贝壳都可以。不过,我当然不建议删除/bin/[
基思·汤普森

@KeithThompson,所有shell都[内置了,执行非shell应用程序的脚本[会中断。像find ... -exec [ -f {} ] \;env LC_ALL=C [ -f bar ]
斯特凡Chazelas

@StephaneChazelas:所有贝壳?(csh和tcsh没有,但是也许这是重点。)我不认为我曾见过sh派生的shell,它没有[作为内建函数,但不认为它[是原始的内建函数。伯恩壳。无论如何,删除/bin/[无疑是一个坏主意。
基思·汤普森

小问题:test[几乎一样的。[需要关闭]; test不允许(或者不]特别对待参数)。
基思·汤普森

2

[总是等同于测试,但我一直没有看到明确提到的],尽管它总是存在。我刚刚在http://ss64.com/bash/test.html中找到了它:

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

令人放心的是-正如他们所说,我终于完成了任务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.