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 버전을 사용할 수있게합니다.