Linux에서 `ash`와 `sh` 쉘의 차이점은 무엇입니까?

Linux에서 `ash`와 `sh` 쉘의 차이점은 무엇입니까?

저는 Linux의 많은 도구를 처음 접했습니다. 빠른 검색은 도움이 되지 않았습니다. 단지 bash또는에 대한 더 많은 정보를 얻었고 그것을 검색하는 것이 어떻게든 검색 결과에 sh나타나는 경향이 있었습니다 . bash제가 본 것 외에는 다양한 쉘 유형이 있으므로 zsh모두 그 소스에서 나온 포크일 것이라고 추측합니다 sh.

이미 질문이 있습니다.bash와 sh를 사용하여 스크립트를 실행하는 것의 차이점은 무엇입니까?이는 다음과 유사합니다.

  • 하지만 쉘에서 "a"가 무엇을 의미하는지 찾을 수 없습니다.
  • 이 질문은 단지 스크립트 실행에 관한 것이 아니라 쉘 자체에 관한 것입니다. 왜냐하면 도커 컨테이너를 사용 ash하거나 사용할 수 있는 옵션이 있기 때문입니다.sh

ash더 편안했지만 여전히 슬림했던 기억이 나네요 . 왜인지는 기억이 나지 않습니다.

ash와 의 주요 차이점은 무엇인가요 sh? 크기, 핸들링...?

기본 이미지는 python:3-alpine최신 태그(2022-07)가 붙은 이미지에도 /bin/ash과 가 모두 있다는 것입니다 /bin/sh. 이 두 가지가 알파인 이미지에 나타나는 데에는 이유가 있을 것입니다. 이 이미지는 그 중 가장 컴팩트합니다. 나는 그것을 부르곤 했다 docker-compose -f docker-compose-develop.yaml run --rm MY_CONTAINER ash.

답변1

역사적으로 ash그것은 Almquist 껍질이었습니다."sh 호환"이란 무엇을 의미합니까?-style 쉘의 전반적인 맥락에서 그 역사를 제공합니다 sh.Almquist Shell의 소스 코드는 어디에서 찾을 수 있나요?어디서 찾을 수 있는지 설명하세요.

오늘날 Almquist Shell ash또는 dashBusybox 라는 셸을 제공하는 Linux 시스템에서는 ash둘 다 Almquist Shell에서 파생되지만 상당한 차이점이 있습니다.

컨테이너를 포함한 현재 Linux 시스템에는 세 가지 일반적인 시나리오가 있습니다.

  • shBash ( sh모드)입니다. 항상 것보다 낫습니다.ash
  • shis dash(Debian 파생물) — 이러한 시스템에서 설치는 에서 까지 의 심볼릭 링크를 ash생성하여 과 의 크기가 동일합니다.ashdashashsh
  • shBusybox입니다. 세부 사항은 Busybox를 구축할 때 사용되는 옵션에 따라 다르지만 이제 기본적으로 Busybox는 sh크기 가 동일합니다 ash.ashsh

(Android(또한 Linux)에서는 shyes 이며 mkshBash에도 동일한 설명이 적용됩니다.)

셸은 호출 방법에 따라 동작을 변경할 수 있으므로 셸을 시작하면 ash다른 sh경험이 발생할 수 있습니다. 그러나 내가 아는 한 기본적으로 shBusybox에서는 그렇지 않습니다 ash(컨테이너 이미지의 경우와 마찬가지로).

답변2

막연하게 생각하는 차이점은 어떤 것이 ash더 편한지 묻게 만드는데, 일부 컨테이너에서는 sh자동 완성 기능이 없을 수도 있다는 것입니다. 주어진 예제 컨테이너는 이를 표시하지 못합니다.

자동 완성은 항목의 시작 부분을 쓴 다음 <Tab>이를 눌러 전체 이름을 입력할 수 있음을 의미합니다. 예를 들어 를 대상으로 하는 경우 cd MY_FOLDER+ cd M<Tab>충분하거나, 다른 폴더에 있는 파일을 열고 하위 경로를 단계별로 추가하는 경우 등이 있습니다.

일화적으로 어떤 컨테이너에서 이런 일이 발생했는지는 확실하지 않습니다. 나는 또한 쓸모없는 팁일 수도 있지만, 오래된 버전에는 일부 오래된 이미지가 여전히 존재해야 합니다.

관련 정보