시스템 호출과 쉘 명령/유틸리티 간의 관계

시스템 호출과 쉘 명령/유틸리티 간의 관계

POSIX에서는

  1. 시스템 호출이 쉘에서 자주 실행되지만 항상 명령이나 유틸리티가 있는 것은 아닙니까?

  2. 어떤 유형의 시스템 호출에 해당 명령이나 유틸리티가 셸에 있고 어떤 유형의 명령이나 유틸리티에 해당 시스템 호출이 셸에 있는지에 대한 몇 가지 경험 법칙이 있습니까?

  3. 시스템 호출 및 해당 쉘 명령 또는 유틸리티와 관련하여 명령 또는 유틸리티는 항상 시스템 호출과 동일한 방식으로 구현됩니까? 구현이 시스템 호출을 기반으로 합니까?

답변1

  1. 시스템 호출이 쉘에서 자주 실행되지만 항상 명령이나 유틸리티가 있는 것은 아닙니까?

때때로. 대중에게 유용한 시스템 호출은 일반적으로 노출됩니다. 디렉토리를 변경할 수 없는 쉘은 그다지 유용한 쉘이 아닙니다. 그 중 일부(예: chdir)는 이를 호출하는 프로세스에만 영향을 미칠 수 있기 때문에 쉘 내장으로 구현됩니다. 다른 것들은 작은 프로그램의 형태로 구현됩니다. 그리고 일부는 전혀 노출되지 않습니다.매우쉘에서 직접 호출할 이유가 없으므로 mmap래퍼를 직접 작성하지 않는 한 그렇게 할 수 없습니다(어쨌든 쓸모가 없습니다).

  1. 어떤 유형의 시스템 호출에 해당 명령이나 유틸리티가 셸에 있고 어떤 유형의 명령이나 유틸리티에 해당 시스템 호출이 셸에 있는지에 대한 몇 가지 경험 법칙이 있습니까?

표준 서신이나 경험 법칙이 없습니다. 이름은 무엇이든 가능합니다. 예를 들어 rm시스템 호출로 구현될 수도 있습니다 unlink.unlink반품이 작업을 수행하지만 대부분의 명령줄 옵션이 부족하고 기본적으로 래퍼일 뿐입니다. 시스템 pipe호출과 해당 reads 및 writes는 구문을 통해 노출됩니다 |.

man syscalls시스템 호출 목록을 제공해야 합니다.

  1. 시스템 호출 및 해당 쉘 명령 또는 유틸리티와 관련하여 명령 또는 유틸리티는 항상 시스템 호출과 동일한 방식으로 구현됩니까? 구현이 시스템 호출을 기반으로 합니까?

이러한 유틸리티는 실제로 유틸리티가 이러한 작업을 수행할 수 있는 유일한 방법인 시스템 호출만 사용합니다. 예를 들어 파일을 삭제하거나 권한을 변경할 수 없습니다.아니요시스템 호출 메커니즘을 통해 직접적으로 또는 간접적으로.

(그렇지 않다면 어떨지 상상해 보십시오. 파일을 삭제하려는 모든 프로그램은 자체 파일 시스템 드라이버와 하드 드라이브 드라이버를 구현해야 합니다. 또한 모든 프로그램이 검사를 담당하므로 보안도 없습니다. 대신 시스템 호출만 사용하면 커널이 모든 것을 파악합니다.

관련 정보