POSIX 란 정확히 무엇입니까?


139

나는 POSIX가 자주 그리고 어디에서나 언급되는 것을 보았고, 그것을 표준 UNIX 표준으로 가정했다. 나는 Wikipedia 페이지에서 다음 발췌를 볼 때까지 : Open Group

오픈 그룹은 증명의 유닉스 상표에 대한 신체와의 출판 대부분의 유명 단일 UNIX 사양 기술 표준 , 는 POSIX 표준을 확장하고 UNIX 시스템의 공식 정의입니다 .

UNIX 시스템의 공식 정의가 POSIX의 확장 인 경우 POSIX 란 정확히 무엇입니까? 분명히 유닉스 세계의 초석 인 것 같지만 전반적인 상황에 어떻게 적용되는지 모르겠습니다.


2
SUS는 IEEE가 아닌 Open Group이 UNIX 상표를 소유하므로 UNIX의 공식 정의입니다. 아래 내 답변을 참조하십시오.
penguin359


답변:


125

POSIX는 1988 년 단일 UNIX 사양 이전의 표준이었습니다. 다양한 유닉스 포크와 유닉스 계열 시스템을 통합하려는 시도 중 하나였습니다. POSIX는 IEEE 표준이지만 IEEE가 UNIX® 상표를 소유하지 않기 때문에 표준은 당시 기존 UNIX API를 기반으로하지만 UNIX®가 아닙니다. 첫 번째 표준 POSIX.1은 공식적으로 IEEE std 1003.1-1988으로 알려져 있습니다. [ 1 ] IEEE는 표준의 사본을 얻기 위해 상당한 비용을 청구했습니다.

Open Group은 1997 년 IEEE의 POSIX 표준 작업을 기반으로 단일 UNIX 사양 (SUSv2)을 발표했습니다. SUSv3는 2001 년 IEEE와 오스틴 그룹으로 알려진 오픈 그룹 간의 공동 작업 그룹에서 발표되었습니다. SUSv3은 POSIX : 2001 [ 2 ] 라고도 합니다. 또한 SUSv4의 핵심 인 POSIX : 2004 및 POSIX : 2008도 있습니다. UNIX®에 관해서는, UNIX®는 현재 등록 상표 보유자가 말하는 것입니다. 1994 년부터는 Open Group입니다.

Novell은 UNIX®가 태어난 AT & T / USL에서 UNIX® 시스템 비즈니스를 인수했습니다. 1994 년에 UNIX® 상표권을 X / Open [ 3 ]에 판매했으며 현재는 Open Group이라고합니다. 그런 다음 UNIX® 소스 코드를 UNIXWARE®로 SCO에 판매했습니다. [ 3 ] UNIX® 자체는 AT & T의 라이센스 모델로 인해 여러 번 포크되었습니다 [ 4 ] [ 5 ]. UNIX®를 구매하면 운영 체제의 전체 소스와이를 구축 할 수있는 전체 툴 체인이 제공됩니다. AT & T의 UNIX® 라이센스를 소유 한 사람은 누구나 소스를 수정하여 배포하고 사용할 수 있습니다. 라이센스 비용은 수천이었습니다.

BSD는 Berkeley의 프로젝트로 UNIX® 운영 체제에 여러 가지 향상된 기능이 추가되었습니다. BSD 코드는 AT & T의 소스보다 훨씬 더 많은 자유 라이센스하에 릴리스되었으며 GNU 프로젝트 및 Linux에서 사용하는 GPL과 달리 라이센스 비용이나 소스와 함께 배포 할 필요가 없습니다. 이로 인해 BSD 코드의 상당 부분이 다양한 상용 UNIX 포크에 포함되었습니다. 4.3BSD 부근에서, 그들은 원래 AT & T UNIX® 소스 코드에 대한 요구를 거의 대체했습니다. FreeBSD / NetBSD / OpenBSD는 완전한 운영 체제이며 원래 AT & T 소스 코드가없는 4.3BSD의 모든 포크입니다. 또한 UNIX® 상표에 대한 권리는 없지만 상용 UNIX 운영 체제에서 해당 코드의 대부분을 사용합니다.

Linux는 1991 년에 개발되었지만 BSD와 달리 처음부터 개발되었으며 UNIX 사용자 공간의 대부분을 클린 룸으로 구현 한 기존 GNU 프로젝트를 사용합니다. 호환성을 위해 많은 POSIX를 구현하고 설계 상 UNIX와 유사하지만 BSD가 가지고있는 AT & T 또는 UNIX®와 밀접한 관련이 없습니다.


1
큰 답변 .. 모든 (3) 답변은 훌륭했지만이 정보는 매우 유익했습니다 (특히 다른 2 명이 준비한 후에). SUS에 대한 의견 (질문 본문 아래)에 감사드립니다. 지금은 충분히 이해하고 있습니다. 고마워요 ... 흥미있는 :)
Peter.O

2
@Mikel 잘만되면 나의 편집이 조금 도움이된다
penguin359

1
@ penguin359의 환상적인 답변입니다!
boehj

누구나 X의 약자에 대해 잘 알고 있습니까? 유닉스와의 관계를 나타내는 접미사 일 경우 소문자가 아니어야합니까?
Alex W

우수한. 감사합니다. 나는 그 역사의 많은 부분을 계산해 왔지만 일이 어떻게 일어 났는지에 대한 "가시적 인"세부 사항은 내가 집중 한 것이 아니었다. 트레일을 만나서 반갑습니다.
Ken Ingram

55

POSIX 7이 정의하는 가장 중요한 것

  1. C API

    다음 과 같이 ANSI C 를 크게 확장합니다 .

    • 더 많은 파일 작업 : mkdir, dirname, symlink, readlink, link(하드 링크), poll(), stat, sync,nftw()
    • 프로세스 및 스레드 : fork, execl, wait, pipe, semaphors sem_*, 공유 메모리 ( shm_*) kill, 스케줄링 매개 변수 ( nice, sched_*), sleep, mkfifo,setpgid()
    • 네트워킹 : socket()
    • 메모리 관리 : mmap, mlock, mprotect, madvise,brk()
    • 유틸리티 : 정규식 ( reg*)

    이러한 API는 또한 의존하는 기본 시스템 개념을 결정 fork합니다 ( 예 : 프로세스 개념 필요).

    대부분의 리눅스 시스템 호출 예를 들어, 특정 POSIX C API 함수를 구현하고 리눅스를 준수하기 위해 존재한다 sys_write, sys_read... 그 콜의 대부분은 그러나 리눅스 특정 확장자를 가지고있다.

    주요 Linux 데스크탑 구현 : glibc. 많은 경우 시스템 호출에 얕은 래퍼를 제공합니다.

  2. CLI 유틸리티

    예 : cd, ls, echo, ...

    많은 유틸리티는 해당 C API 함수에 대한 직접 쉘 프론트 엔드입니다 (예 :) mkdir.

    주요 리눅스 데스크톱 구현 : 작은 사람을위한 GNU로 coreutils, 큰 사람을위한 별도의 GNU 프로젝트 : sed, grep, awk, ... 일부 CLI 유틸리티가 강타에 의해 구현되는 기본 기능으로 .

  3. 쉘 언어

    예 : a=b; echo "$a"

    주요 리눅스 데스크톱 구현 : GNU 배쉬 .

  4. 환경 변수

    예 : HOME, PATH.

    PATH 슬래시가 PATH검색을 방지하는 방법을 포함하여 검색 의미가 지정됩니다 .

  5. 프로그램 종료 상태

    ANSI C는 성공 0또는 실패, 나머지 구현을 정의한 상태로 둡니다.EXIT_SUCCESSEXIT_FAILURE

    POSIX는 다음을 추가합니다.

    • 126: 명령을 찾았지만 실행할 수 없습니다.

    • 127: 명령어를 찾을수 없음.

    • > 128: 신호에 의해 종료됩니다.

      그러나 POSIX는 128 + SIGNAL_IDBash가 사용 하는 규칙 을 지정하지 않는 것 같습니다 : 프로세스가 종료 될 때 기본 종료 코드?

  6. 정규식

    BRE (기본) 및 ERE (확장)의 두 가지 유형이 있습니다. 기본은 더 이상 사용되지 않으며 API를 중단하지 않도록 유지되었습니다.

    이들은 C API 함수로 구현되며 CLI 유틸리티 전체에서 사용됩니다. 예를 들어 grep기본적으로 BRE를 허용하고 ERE를 사용 -E합니다.

    예 : echo 'a.1' | grep -E 'a.[[:digit:]]'

    주요 Linux 구현 : glibc는 regex.hgrep 에서 백엔드로 사용할 수 있는 프로그램을 구현합니다 .

  7. 디렉토리 구조

    예 : /dev/null,/tmp

    Linux FHS는 POSIX를 크게 확장합니다.

  8. 파일명

    • / 경로 구분자
    • NUL 쓸 수 없다
    • .이다 cwd, ..부모
    • 휴대용 파일 이름
      • 전체 경로에 최대 14 자, 256자를 사용하십시오.
      • 다음을 포함 할 수 있습니다 : a-zA-Z0-9._-

    참조 : https : //.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. 명령 행 유틸리티 API 규칙

    POSIX에서 사용하는 필수 사항은 아니지만 GNU에서는 거의 없습니다. 그러나 사실, 너무 제한적입니다 (예 : 단일 문자 플래그 만 (예 -a:), 이중 하이픈 긴 버전 (예 :) 없음 --all).

    널리 사용되는 몇 가지 규칙 :

    • - 파일이 예상되는 stdin을 의미
    • --플래그를 종료합니다. 예 ls -- -l를 들어 이름이 지정된 디렉토리를 나열합니다.-l

    참조 : https : //.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. 에 대한 백엔드로 사용 "POSIX ACL은"(액세스 제어 목록), 예 setfacl.

    이것은 철회 되었지만 Linux를setxattr 포함하여 여러 OS에서 구현되었습니다 .

POSIX는 누가 준수합니까?

많은 시스템이 POSIX를 엄격하게 따르지만 실제로 표준을 유지하는 Open Group에서 인증 한 시스템은 거의 없습니다. 주목할만한 인증 된 것들 :

대부분의 Linux 배포판은 규정을 준수하지만 규정 준수 검사 비용을 지불하지 않기 때문에 인증되지 않았습니다. Inspur의 K-UXHuawei의 EulerOS 는 인증 된 두 가지 예입니다.

인증 된 시스템의 공식 목록은 https://www.opengroup.org/openbrand/register/위키 페이지에서 확인할 수 있습니다.

윈도우

Windows는 일부 전문 배포판에 POSIX를 구현했습니다.

이 기능은 옵션 기능이므로 프로그래머는 대부분의 최종 사용자 응용 프로그램에이 기능을 사용할 수 없습니다.

Windows 8에서는 지원이 더 이상 사용되지 않습니다.

2016 년에는 "Linux 용 Windows 하위 시스템"이라는 새로운 공식 Linux 유사 API가 발표되었습니다. 그것은 리눅스 시스템 호출, ELF 실행,의 부품이 포함되어 /proc파일 시스템을, 강타, GCC는 (? TODO 가능성이 glibc가), apt-get및 더 많은 : https://channel9.msdn.com/Events/Build/2016/P488을 나는 믿습니다 있도록 Windows가 POSIX를 전부 또는 전부 실행하지 못하게합니다. 그러나 최종 사용자 대신 개발자 / 배포에 중점을 둡니다. 특히 Windows GUI에 대한 액세스를 허용 할 계획이 없었습니다.

공식 Microsoft POSIX 호환성에 대한 과거 개요 : http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin 은 Windows에 "실제 POSIX API 기능을 제공"하는 "GPL 타사 프로젝트"로 잘 알려져 있지만 "Windows에서 실행하려면 소스에서 응용 프로그램을 다시 작성해야합니다". MSYS2 는 Cygwin 위에 더 많은 기능을 추가하는 것으로 보이는 관련 프로젝트입니다.

기계적 인조 인간

Android에는 Android O 기준으로 POSIX를 완전히 지원하지 않는 자체 C 라이브러리 (Bionic)가 있습니다. https://stackoverflow.com/questions/27604455/is-android-posix-compatible

보너스 레벨

리눅스 표준 자료는 더 POSIX를 확장합니다.

비 프레임 색인을 사용하면 훨씬 더 읽기 쉽고 검색 할 수 있습니다. http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

grepping을 위해 HTML 페이지의 전체 압축 버전을 받으십시오. https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939


질문은 POSIX와 SUS에 관한 것이지만이 답변은 SUS를 전혀 언급하지 않습니다.
Kidburla

1
자신 만의 대답을 추가하고 일부 담당자 :-)를 얻을 수 (또는 광산으로 편집하고 나에게 담당자 도니는 다르게 줄) 수있는 좋은 기회 @Kidburla
치로 틸리가新疆改造中心法轮功六四事件


@ phuclv 감사합니다, 나는 그것을 대답에 추가했습니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

16

POSIX는 휴대용 운영 체제 표준입니다. 또한 호환되는 운영 체제가 소프트웨어 (예 : 소켓, 파일 I / O 및 스레딩)에 제공해야하는 특정 유틸리티, API 및 서비스에 대해 프로그램에서 호출하는 방법에 대한 규칙을 설명합니다.

하나의 POSIX 호환 OS 용으로 작성된 프로그램이 POSIX 호환이 아닌 OS 간을 포팅하는 것보다 다른 POSIX 호환 OS로 포팅하는 것이 더 쉽다는 아이디어가 있습니다. 그렇기 때문에 응용 프로그램을 FreeBSD에서 Linux로 포팅하는 것보다 FreeBSD에서 Windows로 포팅하는 것보다 훨씬 쉽습니다 (Windows는 POSIX의 하위 집합을 지원할 수 있음).


14

POSIX는 다른 운영 체제에 대한 다양한 Unix와 유사한 환경을 다루기위한 UNIX의 하위 집합입니다. 여기에는 VMS 용 Uniice, Windows NT의 POSIX 특성 및 Apollo Domain / OS와 같은 환경이 포함되었습니다. 유닉스와 비 유닉스간에 동작이 공통 인 운영 체제 서비스의 하위 집합에 대한 표준 이식성 API로 생각할 수 있습니다. 자세한 내용은 http://standards.ieee.org/develop/wg/POSIX.html 을 참조하십시오.


나는 지금 그것에 대해 더 많이 읽었고, 확실히 Uinx는 닭고기 였고 POSIX는 계란 인 것 같습니다. 그러나 유닉스가 여전히 휴식처를 지배하는지 궁금합니다. UNIX는 POSIX를 준수해야합니까? ... btw. 그것은 POSIX라는 이름이 Richard Stallman에 의해 만들어진 것 같습니다 ....
Peter.O

@ fred.bear : 짧은 대답 : UNIX (상표)는 POSIX를 준수해야합니다. 유닉스 (제품)는 POSIX의 기본이었습니다. 유니스 (OS 계열)는 대부분 일치하지만 공통점이 더 많습니다. Linux가 Unix입니까?를 참조하십시오 . 그리고 맥 OS X는 UNIX인가? 관련 토론.
Gilles

@ fred-bear 많은 사람들이 POSIX 표준이 요즘 리눅스 커널 개발 커뮤니티에 의해 안내되고 있다고 주장한다. 만약 사실이라면 IMHO는 좋지 않다.
sakisk

1
@faif이 말을들은 적이없고 가능성이 적다고 생각되면 참조를 게시 할 수 있습니까?
penguin359

2
@Gilles UNIX® 상표의 소유자 인 Open Group은 UNIX® 인증 및 단일 UNIX 사양 또는 SUS라고하는 사양을 담당합니다. POSIX는 UNIX®를 담당하지 않는 IEEE에 의해 개발되었습니다. 2001 년 이래로 이들은 크게 동기화되어 개발되었지만 기술적으로 SUS는 현재 UNIX®를 정의한 버전 4에 있습니다.
penguin359
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.