시작/종료 시 실행되는 프로그램을 스크립트로 작성해야 하는 이유는 무엇입니까 bash
?
컴파일된 언어(또는 Python과 같이 더 빠르게 해석되는 언어)를 사용하면 실행 시간이 더 짧아집니다.
답변1
이는 대체로 역사적 문제이고 부분적으로는 시스템 관리의 제어 문제이고 부분적으로는 이식성 문제이며 부분적으로는 디버깅 문제입니다.
"옛날에는" autoconf, dpkg, rpm이 없었습니다. 소프트웨어를 다운로드하고(때때로 UUCP에서) 제품을 컴파일한 후 자신의 규칙에 따라 설치할 위치를 결정합니다. 제품을 시작/종료 시스템에 연결하는 것은 시스템 관리자의 책임으로 간주됩니다. 시스템 관리자는 rc
스크립트를 작성하여 시스템의 적절한 위치( /etc/inittab
, /etc/rcN.d/
, /etc/rc.local
, /etc/inetd.conf
)에 배치합니다. 최첨단 비 Linux 시스템이 점점 더 적어짐에 따라 rpm
Linux 및 Linux의 출현으로 인해 dpkg
이러한 기본 옵션 중 일부가 덜 중요해졌습니다.
시스템 관리자는 또한 시스템에 대한 어느 정도 제어권을 갖고 싶어하며 C 프로그램이 아닌 쉘 스크립트가 작성, 디버그 및 나중에 수정하기 가장 쉽습니다.
앞서 언급했듯이 UNIX 운영 체제마다 부팅 방법이 다릅니다. 개발자가 가능한 모든 UNIX 유형에 대한 스크립트를 작성하는 것보다 자신의 시스템에 대한 짧은 쉘 스크립트를 작성하는 것이 훨씬 쉽습니다(그리고 이는 autoconf 이전에도 마찬가지였습니다): SysV, Ultrix, Irix, HP-UX, SunOS, Solaris, 넥스트스텝, 논스톱 등 대부분의 경우 두세 가지 메커니즘으로 구분되지만 각 메커니즘에는 고유한 특성이 있습니다.
시스템 부팅은 쉽게 복잡해질 수 있습니다. 디버깅 정보를 인쇄하고, 흐름을 변경하고, 프로그램 작성자가 예상하지 못한 상호 작용을 처리할 수 있는 쉘 스크립트가 있으면 좋을 것입니다. 이것이 컴파일된 프로그램이라면 그러한 오류를 찾는 것이 훨씬 더 어려워집니다.
최신 시스템에는 새로운 메커니즘이 있지만 대부분의 시스템은 위에서 언급한 이유로 인해 여전히 셸 스크립트를 호출합니다.
답변2
대부분의 부팅 프로세스는 IO 집약적입니다. 즉, 파일이 디스크에서 로드되거나 장치가 초기화될 때까지 기다립니다. 컴파일된 언어를 사용해도 큰 이점이 없습니다.
사용금연 건강 증진 협회bash를 교체하면 시작 프로세스 속도가 다소 빨라집니다. Ash는 bash보다 더 빠르고 더 작게 설계되었으며, 이는 더 적은 기능(POSIX 등)을 사용하여 달성됩니다. 결정적으로 Ash는 더 빠르게 시작됩니다. 이는 시작 프로세스가 여러 스크립트로 분할되기 때문에 측정 가능한 이점을 제공합니다. 더 많은 Python을 사용하면 Python 인터프리터가 더 크고 각 프로세스를 시작하는 데 더 많은 시간이 걸리기 때문에 시작 프로세스가 느려질 수 있습니다.
Unix 시스템에는 일반적으로 초기화해야 하는 각 하위 시스템이나 데몬에 대해 하나 이상의 스크립트가 있습니다. 이러한 스크립트는 시스템 관리자가 조정하는 경우가 많습니다. 작업은 다양한 소스의 여러 작은 프로그램(각 하위 시스템당 하나씩)으로 나뉩니다. 많은 작고 간단한 프로그램의 경우 셸은 매우 빠릅니다. 컴파일된 언어를 사용하면 많은 이점을 얻을 수 없지만 유연성 측면에서 엄청난 대가를 치르게 됩니다.
답변3
bash 스크립트를 수정하는 것은 실행 파일의 소스를 찾는 것보다 쉽습니다.
시작 스크립트는 배포판별로 작성되는 경우가 많으므로 수정하기 쉬운 것이 중요합니다.
Bash 스크립트가 느리다고 생각한다면 dash를 살펴보고 dash에서 실행되는 POSIX 호환 sh 스크립트를 작성하는 것이 좋습니다.