Lệnh Linux đóng gói gần như tất cả các lệnh khác là gì?


23

Tôi nhớ rằng đối với Linux chạy trong các hệ thống nhúng, do giới hạn kích thước, nó không thể đóng gói nhiều lệnh như trong các máy trạm thông thường. Vì vậy, có một do-it-tất cả các lệnh có thể bắt chước hầu hết các lệnh (bao gồm ls, cd, time, vv), nhưng tôi không nhớ tên của nó.

Tôi chỉ mơ hồ nhớ một cái gì đó như "minibox" hoặc một cái gì đó, có vẻ như có một "hộp" trong tên của nó, có ai biết tên của nó là gì không?


12
Nó được gọi là busybox.
MariusMatutiae

6
Nó sẽ không bắt chước cdmặc dù, điều đó là không thể.
Ngừng làm hại Monica

4
@OrangeDog: ... nhưng nó sẽ bắt chước sh, có tích cdhợp sẵn.
Ilmari Karonen

Người cai trị tất cả !!!
Shokhet

5
D', tôi sẽ nói emacs...
R ..

Câu trả lời:


48

Phổ biến nhất có thể là BusyBox , nhưng cũng có hộp công cụ (được sử dụng bởi Android), toybox và có thể các loại khác.


Thật đáng để làm rõ rằng Busybox là một trình cài đặt, không phải là một nhị phân ma thuật duy nhất. Ít nhất là không dành cho Android. Busybox là trình cài đặt cho các công cụ không phải trên thiết bị. Nó nhìn vào các nhị phân đã có trên thiết bị và thêm chúng vào. Đối với tôi, nó đã đặt các nhị phân mới trong / system / xbin /.
Corey Ogburn

1
@Corey bạn có chắc không? trang giới thiệu của nó cho biết "BusyBox kết hợp các phiên bản nhỏ của nhiều tiện ích UNIX phổ biến thành một tệp thực thi nhỏ." .
RedGrittyBrick

Chắc chắn rồi. Tôi không chắc chắn về iOS, nhưng trong Android, bạn phải cài đặt BusyBox. Bản thân ứng dụng cho phép bạn chọn phiên bản nào của busybox và nơi cài đặt chúng. Mine hiện nói "BusyBox v1.22.1-Stericson đã được cài đặt. BusyBox được cài đặt vào / system / xbin". Bạn có thể xem danh sách các tệp nhị phân đã cài đặt và tìm chúng trong / system / xbin /. Nó không phải là một cái vỏ, nó không phải là một nhị phân tất cả trong một, nó là một gói nhị phân và một trình cài đặt dễ dàng.
Corey Ogburn

2
@CoreyOgburn: BusyBox ban đầu là chính ứng dụng. Ứng dụng Android, mặc dù có tên BusyBox, chỉ là một ứng dụng cài đặt BusyBox "thật". Bản thân BusyBox về cơ bản là giống nhau, có thể là trên Android, iOS, BSD hoặc bất kỳ hệ thống nào khác. Chỉ các trình cài đặt có thể khác nhau.
Michael Ehrenreich

3
Và "nhiều thực thi" cũng không đúng; busybox tạo ra một tấn các liên kết tượng trưng đến chính nó. Ví dụ, grepcó lẽ là một liên kết đến busybox. Một ngoại lệ sẽ là cdnhư vậy phải là một vỏ được tích hợp sẵn.
MSalters


3

BusyBox được thiết kế theo một cách khá mới lạ có thể khá khó hiểu khi bạn bắt đầu lục lọi trong thư mục / bin của mình.

Như MSalters đã chỉ ra, BusyBox chỉ là một tệp thực thi. Nhưng nó phụ thuộc vào một liên kết tượng trưng được tạo ra để thực thi cho mọi "lệnh" trong đó. Khi biết tên symlink đã được bắt đầu, nó biết chạy hàm C cho lệnh đó.

Do đó, sự khởi đầu của thư mục PuppyLinux 5.2.8 Lucid / bin của tôi trông giống như ...

sh-4.1# ls -l
total 4889
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 [ -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 [[ -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 addgroup -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 adduser -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 ash -> busybox
-rwxr-xr-x 1 root root   2844 2011-08-17 11:04 autologinroot
lrwxrwxrwx 1 root root      4 2011-08-17 10:49 awk -> gawk
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 basename -> busybox
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root   6835 2011-01-21 01:29 bashbug
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bbconfig -> busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bunzip2
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bunzip2-BB-NOTUSED -> busybox
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bzcat
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bzcat-BB-NOTUSED -> busybox

Lưu ý rằng hầu hết các lệnh là symlink đến busybox. Điều này bao gồm ashvỏ rất tối giản được sử dụng chủ yếu trong các hoạt động khởi động. Cũng lưu ý rằng tác giả phân phối đã chọn bao gồm các lệnh độc lập bunzip2bzcatthay vì sử dụng các phiên bản busybox. Các liên kết tượng trưng bunzip-BB-NOTUSEDbzcat-BB-NOTUSEDkhông thực sự cần thiết nhưng giúp ghi lại những gì đang diễn ra chỉ với chi phí của một liên kết tượng trưng.

Cũng lưu ý rằng một danh sách thư mục báo cáo kích thước cho mục tiêu của liên kết tượng trưng ( ls -lLhoặc ls -l --dereference) thay vì chính liên kết tượng trưng, ​​sẽ báo cáo kích thước của mỗi lệnh giống như của lệnh busybox. Do đó, cùng một danh sách với -Ltùy chọn hiển thị ...

sh-4.1# ls -lL
total 60402
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [[
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 addgroup
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 adduser
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 ash
-rwxr-xr-x 1 root root   2844 2011-08-17 11:04 autologinroot
-rwxr-xr-x 1 root root 317880 2011-08-17 11:04 awk
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 basename
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root   6835 2011-01-21 01:29 bashbug
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bbconfig
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bunzip2
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bunzip2-BB-NOTUSED
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bzcat
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bzcat-BB-NOTUSED

Mục tiêu của BusyBox là tái sử dụng tối đa mã trong chính nó để giảm thiểu bộ nhớ và dung lượng ổ đĩa cần thiết (tức là "dấu chân") cho một bộ lệnh chung ... mà không yêu cầu phải có vỏ.

Bash và các vỏ khác hoàn thành điều tương tự. Nhưng để làm như vậy, họ thực hiện môi trường dòng lệnh riêng của họ. Mục tiêu này cũng là một trong những lý do cho một số cú pháp rất cổ xưa cho nhiều chức năng shell.

Tôi hiện đang sử dụng "kỹ thuật BusyBox" này cho một thư viện các hàm Bash và dễ dàng hơn để sử dụng các hàm bao cho các bashism khác nhau . Nó đã cho phép tôi dễ dàng "mở rộng" các lệnh với --helpcác tùy chọn và tắt các phiên bản GUI khi khả dụng.

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.