Apa program `[` yang berada di sistem / bin saya?

32

Saya baru-baru ini browsing /binfolder Fedora saya dan melihat biner bernama [. Saya memang mencoba mencari di internet untuk informasi lebih lanjut tentang itu, tetapi saya tidak menemukan sesuatu yang berguna. Menjalankannya stracesepertinya tidak menghasilkan sesuatu yang berguna untuk pemeriksaan lebih dekat juga.

Apa itu? Haruskah saya khawatir? Mungkinkah itu hasil dari kompromi sistem? Haruskah saya menjalankannya? Apakah itu milik paket apa pun?

NlightNFotis
sumber
4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
jasonwryan
@jasonwryan Ya, butuh beberapa saat untuk mengetahuinya. Saya tidak dapat menemukan banyak informasi untuk itu di internet, dan Google tidak banyak membantu. Diposting di sini dengan harapan dapat membantu yang berikutnya yang ada di sepatu saya.
NlightNFotis
10
Jalankan man [untuk melihat apa [perintahnya!
Gilles 'SO- stop being evil'
@Gilles Sejujurnya, saya lakukan dan itu menyebutkan sesuatu tentang bash, dan berpikir itu mungkin sesuatu yang lain. Ini bukan hal pertama yang terlintas dalam pikiran Anda ketika Anda melihat biner dengan nama yang belum pernah Anda lihat di sistem file Anda - atau dengan kata lain, Anda harus menemukan sesuatu yang lebih konkret untuk menghapus keraguan di kepala Anda. .
NlightNFotis
4
Lakukan rpm -qif /bin/[untuk mencari tahu dari mana asalnya ...
vonbrand

Jawaban:

37

The [biner yang berada di bawah /binpohon di banyak distribusi GNU / Linux bukanlah sesuatu yang khawatir off. Setidaknya dalam Fedora 19 saya, ini adalah bagian dari paket coreutils, seperti yang ditunjukkan di bawah ini:

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

dan merupakan sinonim untuk testmemungkinkan ekspresi ingin [ expression ]ditulis dalam skrip shell atau bahkan penggunaan interaktif.

NlightNFotis
sumber
16
Perhatikan bahwa cangkang seperti bashmemiliki builtin testdan [dan tidak memanggil biner eksternal.
jordanm
1
@jordanm, hari ini sebagian besar shell memilikinya (dan banyak operasi sederhana dan umum lainnya) sebagai builtin. Tapi itu tidak selalu demikian (atau memang demikian halnya). Bahkan mungkin diamanatkan oleh POSIX.
vonbrand
2
@vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Anda benar. Perintah uji [diperlukan oleh spesifikasi ini.
yegle
@vonbrand, hanya shell Bourne-like yang umumnya memiliki [perintah builtin . Non-Bourne-seperti yang seperti (t)csh, rc, esumumnya tidak ( fishadalah pengecualian di sana).
Stéphane Chazelas
5

The [perintah sama dengan testperintah.

Ini memungkinkan Anda untuk menulis pernyataan kondisional yang agak singkat dalam skrip shell. Dari halaman manual SunOS:

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

Jika Anda menghapusnya, skrip akan rusak!

Thorbjørn Ravn Andersen
sumber
Skrip yang ditulis untuk cangkang yang tidak memiliki [perintah bawaan akan pecah. Kebanyakan kerang melakukannya. Tetap saja, saya pasti tidak akan merekomendasikan menghapus /bin/[.
Keith Thompson
@KeithThompson, semua shell telah dibangun, [skrip-skripnya yang menjalankan aplikasi non-shell [yang akan rusak. Suka find ... -exec [ -f {} ] \;atauenv LC_ALL=C [ -f bar ]
Stéphane Chazelas
@StephaneChazelas: Semua kerang? (csh dan tcsh tidak, tapi mungkin itu intinya.) Saya tidak berpikir saya telah melihat shell turunan sh yang tidak memiliki [sebagai builtin, tapi jangan berpikir [itu builtin pada aslinya Shell Bourne. Bagaimanapun, menghapus /bin/[tentu saja merupakan ide yang buruk.
Keith Thompson
Berdalih: testdan [yang hampir sama. [membutuhkan penutupan ]; testtidak mengizinkannya (atau lebih tepatnya tidak memperlakukan argumen ]secara khusus).
Keith Thompson
2

[Selalu diberikan sebagai setara dengan tes, tetapi saya belum pernah melihat] yang disebutkan secara eksplisit, meskipun selalu ada. Saya baru saja menemukan ini di http://ss64.com/bash/test.html :

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

yang meyakinkan - akhirnya saya memiliki penyelesaian seperti yang mereka katakan.

Harry Weston
sumber