Chương trình `[` nằm trong / bin của hệ thống của tôi là gì?


32

Gần đây tôi đã duyệt /binthư mục Fedora của tôi và nhận thấy một nhị phân có tên [. Tôi đã cố gắng tìm kiếm trên internet để biết thêm thông tin về điều đó, nhưng tôi không thể tìm thấy bất cứ điều gì hữu ích. Chạy nó qua stracedường như không tạo ra bất cứ điều gì hữu ích để kiểm tra chặt chẽ hơn.

Đó là gì? Tôi có nên hoảng hốt? Nó có thể là kết quả của một thỏa hiệp hệ thống? Tôi có nên chạy nó? Nó thuộc về gói nào?


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

@jasonwryan Vâng, tôi phải mất một lúc để tìm ra nó. Tôi không thể tìm thấy nhiều thông tin cho nó trên mạng và Google đã không giúp được gì nhiều. Đăng nó ở đây với hy vọng nó có thể giúp người tiếp theo trong đôi giày của tôi.
NlightNFotis

10
Chạy man [để xem [lệnh là gì!
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Thành thật mà nói, tôi đã làm và nó đã đề cập đến một cái gì đó về bash, và hình dung đó có thể là một cái gì đó khác. Đây không phải là điều đầu tiên bạn nghĩ đến khi bạn nhìn thấy một nhị phân có tên mà bạn chưa từng thấy trước đây trong hệ thống tệp của mình - hoặc nói cách khác, bạn phải tìm một cái gì đó cụ thể hơn để xóa tan nghi ngờ trong đầu .
NlightNFotis

4
Làm một rpm -qif /bin/[để tìm hiểu nó đến từ đâu ...
vonbrand

Câu trả lời:


37

Các [nhị phân trú dưới /bincây trong nhiều bản phân phối GNU / Linux không phải là một cái gì đó để lo lắng đi. Ít nhất trong Fedora 19 của tôi, nó là một phần của gói coreutils, như được minh họa dưới đây:

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

và là một từ đồng nghĩa testđể cho phép các biểu thức muốn [ expression ]được viết bằng shell script hoặc thậm chí sử dụng tương tác.


16
Lưu ý rằng các shell như bashcó một nội trang test[không gọi nhị phân bên ngoài.
jordanm

1
@jordanm, ngày nay hầu hết các shell đều có chúng (và nhiều hoạt động đơn giản, phổ biến khác) dưới dạng nội dung. Nhưng đó không phải là tất cả (hoặc là như vậy trong tất cả các vỏ). Nó thậm chí có thể được ủy quyền bởi POSIX.
vonbrand

2
@vonbrand pubs.opengroup.org/onlinepub/009695399/utilities/test.html Bạn đã đúng. Một lệnh kiểm tra [được yêu cầu bởi đặc điểm kỹ thuật này.
yegle

@vonbrand, chỉ các shell giống Bourne thường có [lệnh dựng sẵn . Non-Bourne giống như những người như (t)csh, rc, esnói chung là không ( fishlà một ngoại lệ đó).
Stéphane Chazelas

5

Các [lệnh là giống như các testlệnh.

Nó cho phép bạn viết các câu điều kiện khá ngắn gọn trong các kịch bản shell. Từ trang hướng dẫn SunOS:

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

Nếu bạn loại bỏ nó, các kịch bản sẽ phá vỡ!


Các tập lệnh được viết cho các shell không có [lệnh tích hợp sẽ bị hỏng. Hầu hết các vỏ làm. Tuy nhiên, tôi chắc chắn sẽ không khuyên bạn nên gỡ bỏ /bin/[.
Keith Thompson

@KeithThndry, tất cả các trình bao đều được [dựng sẵn, các tập lệnh có các ứng dụng không phải trình bao thực thi [sẽ bị hỏng . Thích find ... -exec [ -f {} ] \;hoặcenv LC_ALL=C [ -f bar ]
Stéphane Chazelas

@StephaneChazelas: Tất cả vỏ? (csh và tcsh không, nhưng có lẽ đó của bên cạnh điểm.) Tôi không nghĩ rằng tôi đã nhìn thấy một vỏ sh có nguồn gốc từ mà không có [như một dựng sẵn, nhưng không nghĩ [là một dựng sẵn trong bản gốc Vỏ Bourne. Trong mọi trường hợp, loại bỏ /bin/[chắc chắn sẽ là một ý tưởng tồi.
Keith Thompson

Phân minh nhỏ: test[gần như giống nhau. [yêu cầu đóng cửa ]; testkhông cho phép nó (hay đúng hơn là không đối xử ]đặc biệt).
Keith Thompson

2

[Luôn luôn được đưa ra tương đương với thử nghiệm, nhưng tôi đã không thấy] được đề cập rõ ràng, mặc dù nó luôn ở đó. Tôi vừa tìm thấy điều này trong http://ss64.com/bash/test.html :

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

đó là yên tâm - cuối cùng tôi đã hoàn thành như họ nói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.