거의 모든 다른 명령을 캡슐화하는 Linux 명령은 무엇입니까?


23

임베디드 시스템에서 실행되는 Linux의 경우 크기 제한으로 인해 일반 워크 스테이션 에서처럼 많은 명령을 압축 할 수 없습니다. 그래서 거기에 거의 모든 명령 (를 포함하여 모방 할 수있는 할 - 그것 - 모든 명령입니다 ls, cd, time, 등),하지만 난 그 이름을 기억하지 않습니다.

방금 "미니 박스"나 그와 비슷한 것을 기억했습니다. 이름에 "박스"가있는 것 같습니다. 누구나 그 이름이 무엇인지 아십니까?


12
이것을 busybox라고합니다.
MariusMatutiae

6
그러나 모방 cd하지는 않지만 불가능합니다.
중지 해 모니카

4
...하지만 모방 : @OrangeDog sh가, cdA가 내장되어있다.
Ilmari Karonen 2016 년

그들 모두를 지배하는 사람 !!!
Shokhet

5
D' oh, 나는 말하려고했다 emacs...
R ..

답변:


48

가장 인기있는 것은 BusyBox 일 수 있지만 도구 상자 (Android에서 사용), toybox 및 기타 도구 도 있습니다.


Busybox는 하나의 매직 바이너리가 아닌 설치 프로그램임을 분명히 밝힐 가치가 있습니다. 적어도 안드로이드는 아닙니다. Busybox는 기본적으로 장치에없는 도구 용 설치 프로그램입니다. 장치에 이미있는 바이너리를보고 추가합니다. 나를 위해 새 바이너리를 / system / xbin /에 넣었습니다.
Corey Ogburn

1
@Corey 확실합니까? 자사 에 대한 페이지가 말한다 "비지 박스는 하나의 작은 실행 파일로 많은 일반적인 UNIX 유틸리티의 작은 버전을 결합한 제품입니다." .
RedGrittyBrick 2016 년

전혀. iOS에 대해서는 잘 모르겠지만 Android에서는 BusyBox를 설치해야합니다. 응용 프로그램 자체에서 busybox의 버전과 설치 위치를 선택할 수 있습니다. 광산은 현재 "BusyBox v1.22.1-Stericson이 설치되었습니다. BusyBox가 / system / xbin에 설치되었습니다"라고 말합니다. 설치된 바이너리 목록을보고 / system / xbin /에서 찾을 수 있습니다. 쉘이 아니며 올인원 바이너리가 아니며 바이너리 번들과 쉬운 설치 프로그램입니다.
Corey Ogburn

2
@CoreyOgburn : 원래 BusyBox는 응용 프로그램 자체입니다. BusyBox라는 이름의 Android 앱은 "실제"BusyBox를 설치하는 앱일뿐입니다. BusyBox 자체는 Android, iOS, BSD 또는 다른 시스템에서 기본적으로 동일합니다. 설치 프로그램 만 다를 수 있습니다.
Michael Ehrenreich 2016 년

3
"많은 실행 파일"도 마찬가지입니다. busybox는 자체에 대한 수많은 심볼릭 링크를 만듭니다. 예를 들어 grepbusybox에 대한 링크 일 것입니다. 하나의 예외는 cd쉘 내장이어야한다는 것 입니다.
MSalters


3

BusyBox 는 / bin 디렉토리에서 rummaging을 시작할 때 매우 혼란 스러울 수있는 매우 새로운 방식으로 설계되었습니다.

MSalters가 지적 했듯이 BusyBox는 하나의 실행 파일입니다. 그러나 그것은 모든 "명령"에 대해 해당 실행 파일에 생성되는 심볼릭 링크에 달려 있습니다. 시작된 심볼릭 링크 이름을 알면 해당 명령에 대해 C 함수를 실행하는 것을 알게됩니다.

따라서 내 PuppyLinux 5.2.8 Lucid / bin 디렉토리 의 시작은 다음과 같습니다.

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

대부분의 명령은에 대한 심볼릭 링크 busybox입니다. 여기에는 ash부팅 작업 중에 주로 사용되는 매우 미니멀 한 셸 이 포함 됩니다. 또한 유통 작성자가 독립형 명령을 포함하도록 선택한 점에 유의 bunzip2하고 bzcat대신 비지 박스 버전을 사용. 심볼릭 링크 bunzip-BB-NOTUSED와는 bzcat-BB-NOTUSED정말 필요하지만 심볼릭 링크의 단지 비용에 무슨 일이 일어나고 있는지 도움말 문서 없습니다.

또한 심볼릭 링크 자체 대신 심볼릭 링크 대상 ( ls -lL또는 ls -l --dereference) 의 크기를보고하는 디렉토리 목록 은 각 명령의 크기와 동일하게보고합니다 busybox. 따라서 -L옵션이 있는 동일한 목록이 표시됩니다 ...

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

BusyBox의 목적은 쉘 자체를 요구하지 않고 공통 명령 세트에 필요한 메모리 및 디스크 공간 (예 : "풋 프린트")을 최소화하기 위해 코드 자체를 최대한 재사용하는 것입니다.

배쉬와 다른 쉘은 같은 것을 수행합니다. 그러나 그렇게하기 위해 자체 명령 줄 환경을 구현합니다. 이 목표는 또한 많은 쉘 기능에 대한 매우 구식 구문의 일부 이유 중 하나입니다.

저는 현재이 "BusyBox 기술"을 Bash 함수 라이브러리에 사용하고 있으며 다양한 bashism에 랩퍼를 사용하기가 더 쉽습니다 . --help옵션을 사용하여 명령을 쉽게 "확장" 하고 GUI 버전을 사용할 수있게합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.