Chính xác thì POSIX là gì?


139

Tôi thấy POSIX được đề cập thường xuyên và ở mọi nơi và tôi đã cho rằng đó là tiêu chuẩn UNIX cơ bản .. cho đến khi tôi nhận thấy đoạn trích sau trên trang Wikipedia: Nhóm mở

Nhóm mở nổi tiếng nhất là tổ chức chứng nhận cho nhãn hiệu UNIX và xuất bản tiêu chuẩn kỹ thuật của Thông số kỹ thuật UNIX đơn , mở rộng các tiêu chuẩn POSIX và là định nghĩa chính thức của hệ thống UNIX .

Nếu định nghĩa chính thức của hệ thống UNIX là phần mở rộng của POSIX, thì chính xác POSIX là gì? ,,, Nó dường như là một hòn đá tảng trong thế giới UNIX, nhưng tôi không biết làm thế nào nó phù hợp với bức tranh tổng thể.


2
SUS là định nghĩa chính thức của UNIX kể từ Nhóm mở, không phải là IEEE, sở hữu nhãn hiệu UNIX. Se câu trả lời của tôi dưới đây.
chim cánh cụt359


Câu trả lời:


125

POSIX đầu tiên là một tiêu chuẩn vào năm 1988 trước khi Đặc tả UNIX đơn. Đó là một trong những nỗ lực thống nhất tất cả các nhánh UNIX và các hệ thống giống như UNIX. POSIX là một Tiêu chuẩn của IEEE, nhưng vì IEEE không sở hữu nhãn hiệu UNIX®, nên tiêu chuẩn này không phải là UNIX® mặc dù nó dựa trên API UNIX hiện có tại thời điểm đó. POSIX.1 tiêu chuẩn đầu tiên được chính thức gọi là IEEE std 1003.1-1988. [ 1 ] IEEE đã tính một khoản phí đáng kể để có được bản sao của tiêu chuẩn.

Nhóm mở đã phát hành Thông số kỹ thuật UNIX đơn (SUSv2) vào năm 1997 dựa trên công việc của tiêu chuẩn POSIX của IEEE. SUSv3 được phát hành năm 2001 từ một nhóm làm việc chung giữa IEEE và Nhóm mở được gọi là Tập đoàn Austin. SUSv3 còn được gọi là POSIX: 2001 [ 2 ]. Hiện tại cũng có POSIX: 2004 và POSIX: 2008 là cốt lõi của SUSv4. Đối với UNIX® là gì, UNIX® là bất cứ điều gì mà chủ sở hữu nhãn hiệu đã đăng ký hiện tại nói. Từ năm 1994, đó là Nhóm mở.

Novell mua lại doanh nghiệp hệ thống UNIX® từ AT & T / USL, nơi UNIX® ra đời. Năm 1994, họ đã bán quyền thương hiệu UNIX® cho X / Open [ 3 ] bây giờ được gọi là Nhóm mở. Sau đó, họ đã bán mã nguồn UNIX® cho SCO dưới dạng UNIXWARE®. [ 3 ] Bản thân UNIX® đã rẽ nhánh nhiều lần [ 4 ] [ 5 ] một phần do mô hình cấp phép của AT & T. Việc mua UNIX® đã cung cấp cho bạn nguồn hoàn chỉnh của hệ điều hành và chuỗi công cụ đầy đủ để xây dựng nó. Những sửa đổi đối với nguồn có thể được phân phối và sử dụng bởi bất kỳ ai sở hữu giấy phép cho UNIX® từ AT & T. Lệ phí giấy phép là hàng ngàn.

BSD là một dự án tại Berkeley, đã bổ sung một số cải tiến cho hệ điều hành UNIX®. Mã BSD được phát hành theo giấy phép tự do hơn nhiều so với nguồn của AT & T và không yêu cầu phí giấy phép hoặc thậm chí yêu cầu được phân phối với nguồn, không giống như GPL mà Dự án GNU và Linux sử dụng. Điều này đã khiến một phần tốt của mã BSD được bao gồm trong các nhánh UNIX thương mại khác nhau. Vào khoảng 4.3BSD, họ đã gần như thay thế mọi nhu cầu về mã nguồn AT & T UNIX® ban đầu. FreeBSD / NetBSD / OpenBSD là tất cả các nhánh của 4.3BSD là một hệ điều hành hoàn chỉnh và không có mã nguồn AT & T gốc. Họ cũng không có quyền đối với nhãn hiệu UNIX®, nhưng phần lớn mã của họ được sử dụng bởi các hệ điều hành UNIX thương mại.

Linux được phát triển vào năm 1991, nhưng được phát triển từ đầu không giống như BSD và sử dụng Dự án GNU hiện có, đây là một triển khai phòng sạch của phần lớn không gian người dùng UNIX. Nó triển khai phần lớn POSIX để tương thích và có thiết kế giống UNIX, nhưng nó không có kết nối chặt chẽ với AT & T hoặc UNIX® mà BSD có.


1
Một câu trả lời tuyệt vời .. tất cả (3) câu trả lời đều tốt, nhưng câu trả lời này rất nhiều thông tin (đặc biệt là sau khi được 2 người kia đứng đầu); chỉ là những gì tôi cần ... và cảm ơn vì nhận xét (bên dưới thân câu hỏi) về SUS, tôi hiểu nó đủ rõ rồi, cảm ơn ... (và tôi không nhận thấy đó chỉ là một đoạn ... Nó cũng vậy thú vị :)
Peter.O

2
@Mikel hy vọng bản chỉnh sửa của tôi sẽ giúp một chút
penguin359

1
Đó là một câu trả lời tuyệt vời đó @ penguin359!
boehj

Có ai có một ý tưởng tốt về những gì X đại diện cho? Nếu nó chỉ là một hậu tố để chỉ mối quan hệ với Unix, thì nó có nên là chữ thường không?
Alex W

Xuất sắc. Cảm ơn bạn. Tôi đã tính toán trong phần lớn lịch sử đó, nhưng các chi tiết "tầm phào" về cách mọi thứ xảy ra không phải là thứ mà tôi tập trung vào. Tốt để xem đường mòn.
Ken Ingram

55

Những điều quan trọng nhất POSIX 7 định nghĩa

  1. API C

    Mở rộng rất nhiều ANSI C với những thứ như:

    • nhiều hoạt động tập tin: mkdir, dirname, symlink, readlink, link(liên kết cứng), poll(), stat, sync,nftw()
    • quy trình và chủ đề: fork, execl, wait, pipe, semaphors sem_*, bộ nhớ chia sẻ ( shm_*), kill, các thông số lập kế hoạch ( nice, sched_*), sleep, mkfifo,setpgid()
    • mạng: socket()
    • quản lý bộ nhớ: mmap, mlock, mprotect, madvise,brk()
    • tiện ích: biểu thức chính quy ( reg*)

    Các API đó cũng xác định các khái niệm hệ thống cơ bản mà chúng phụ thuộc vào, ví dụ: forkyêu cầu khái niệm về một quy trình.

    Nhiều hệ thống Linux cuộc gọi tồn tại để thực hiện một chức năng POSIX C API cụ thể và làm cho Linux phù hợp, ví dụ như sys_write, sys_read, ... Nhiều người trong số những syscalls cũng có phần mở rộng Linux cụ thể tuy nhiên.

    Triển khai máy tính để bàn Linux chính: glibc, trong nhiều trường hợp chỉ cung cấp trình bao bọc nông cho các cuộc gọi hệ thống.

  2. Tiện ích CLI

    Ví dụ như: cd, ls, echo, ...

    Nhiều tiện ích này là phía trước vỏ trực tiếp kết thúc cho một hàm C API tương ứng, ví dụ mkdir.

    Major Linux thực hiện máy tính để bàn: GNU coreutils cho những cái nhỏ, các dự án GNU riêng biệt cho các công trình lớn: sed, grep, awk, ... Một số tiện ích CLI được thực hiện bởi Bash như built-in .

  3. Ngôn ngữ vỏ

    Ví dụ, a=b; echo "$a"

    Triển khai máy tính để bàn Linux chính: GNU Bash .

  4. Biến môi trường

    Ví dụ như: HOME, PATH.

    PATH ngữ nghĩa tìm kiếm được chỉ định , bao gồm cả cách gạch chéo ngăn PATHtìm kiếm .

  5. Trạng thái thoát chương trình

    ANSI C nói 0hoặc EXIT_SUCCESSđể thành công, EXIT_FAILUREcho sự thất bại và để lại phần thực hiện còn lại được xác định.

    POSIX cho biết thêm:

    • 126: lệnh tìm thấy nhưng không thể thực thi.

    • 127: lệnh không tìm thấy.

    • > 128: chấm dứt bởi một tín hiệu.

      Nhưng POSIX dường như không chỉ định 128 + SIGNAL_IDquy tắc được sử dụng bởi Bash: Mã thoát mặc định khi quá trình kết thúc?

  6. Biểu hiện thông thường

    Có hai loại: BRE (Cơ bản) và ERE (Mở rộng). Basic không được dùng nữa và chỉ được giữ để không phá vỡ API.

    Các hàm này được triển khai bởi các hàm C API và được sử dụng trong các tiện ích CLI, ví dụ như grepchấp nhận BRE theo mặc định và ERE với -E.

    Ví dụ: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Triển khai Linux chính: glibc thực hiện các chức năng theo regex.h mà các chương trình như grepcó thể sử dụng làm phụ trợ.

  7. Cấu trúc thư mục

    Ví dụ như: /dev/null,/tmp

    Linux FHS mở rộng đáng kể POSIX.

  8. Tên tập tin

    • / là dải phân cách
    • NUL không thể được sử dụng
    • .cwd, ..cha mẹ
    • tên tập tin di động
      • sử dụng tối đa 14 ký tự và 256 cho đường dẫn đầy đủ
      • chỉ có thể chứa: a-zA-Z0-9._-

    Xem thêm: https://stackoverflow.com/questions/18550253/what-is-poseix-compliance-for-filesystem

  9. Các quy ước API tiện ích dòng lệnh

    Không bắt buộc, được sử dụng bởi POSIX, nhưng hầu như không ở đâu khác, đáng chú ý là không có trong GNU. Nhưng sự thật, nó quá hạn chế, ví dụ: chỉ các lá thư đơn (ví dụ -a), không có phiên bản dài gạch nối kép (ví dụ --all).

    Một vài quy ước được sử dụng rộng rãi:

    • - có nghĩa là stdin nơi một tập tin được mong đợi
    • --chấm dứt cờ, ví dụ ls -- -lđể liệt kê một thư mục có tên-l

    Xem thêm: https://stackoverflow.com/questions/8957222/are-there-stiterias-for-linux-command-line-switches-and-argument

  10. "POSIX ACLs" (Danh sách điều khiển truy cập), ví dụ như được sử dụng làm phụ trợ cho setfacl.

    Điều này đã được rút nhưng nó đã được thực hiện trong một số HĐH, kể cả trong Linux vớisetxattr .

Ai phù hợp với POSIX?

Nhiều hệ thống theo sát POSIX, nhưng một số ít thực sự được chứng nhận bởi Open Group duy trì tiêu chuẩn. Những người được chứng nhận đáng chú ý bao gồm:

Hầu hết các bản phân phối Linux đều rất tuân thủ, nhưng không được chứng nhận vì họ không muốn trả tiền kiểm tra tuân thủ. K-UX Inspur củaEulerOS của Huawei là hai ví dụ chứng nhận.

Danh sách chính thức của các hệ thống được chứng nhận được tìm thấy tại: https://www.opengroup.org/openbrand/register/ và cũng tại trang wiki .

các cửa sổ

Windows triển khai POSIX trên một số bản phân phối chuyên nghiệp.

Vì nó là một tính năng tùy chọn, các lập trình viên không thể dựa vào nó cho hầu hết các ứng dụng người dùng cuối.

Hỗ trợ không được dùng trong Windows 8:

Vào năm 2016, một API giống như Linux chính thức mới có tên là "Hệ thống con Windows cho Linux" đã được công bố. Nó bao gồm các cuộc gọi hệ thống Linux, ELF đang chạy, các bộ phận của /prochệ thống tệp, Bash, GCC, (TODO có thể là glibc?) apt-getVà hơn thế nữa: https://channel9.msdn.com/Events/Build/2016/P488 vì vậy tôi tin rằng nó sẽ cho phép Windows chạy nhiều, nếu không phải tất cả, của POSIX. Tuy nhiên, nó tập trung vào các nhà phát triển / triển khai thay vì người dùng cuối. Cụ thể, không có kế hoạch cho phép truy cập vào GUI Windows.

Tổng quan lịch sử về khả năng tương thích chính thức của Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-poseix-subystem/

Cygwin là một dự án bên thứ ba GPL nổi tiếng với mục đích "cung cấp chức năng API POSIX đáng kể" cho Windows, nhưng yêu cầu bạn "xây dựng lại ứng dụng của mình từ nguồn nếu bạn muốn nó chạy trên Windows". MSYS2 là một dự án liên quan dường như bổ sung thêm nhiều chức năng trên đầu trang của Cygwin.

Android

Android có thư viện C (Bionic) riêng không hỗ trợ đầy đủ POSIX kể từ Android O: https://stackoverflow.com/questions/27604455/is-android-poseix-comp Tương thích

Mức thưởng

Các Linux Standard Base mở rộng hơn nữa POSIX.

Sử dụng các chỉ mục không có khung, chúng dễ đọc và dễ tìm kiếm hơn nhiều: http://pub.opengroup.org/onlinepub/9699919799/nfindex.html

Nhận phiên bản nén đầy đủ của các trang HTML để grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-poseix-api-fiances/45832939#45832939


Câu hỏi là về POSIX và SUS, nhưng câu trả lời này hoàn toàn không đề cập đến SUS ...
Kidburla

1
@Kidburla một cơ hội tuyệt vời để thêm câu trả lời của riêng bạn và nhận một số đại diện :-) (hoặc chỉnh sửa nó thành của tôi và đưa tôi đại diện hehe)
Ciro Santilli 改造 心 心 事件


@phuclv cảm ơn, tôi đã thêm nó vào câu trả lời.
Ciro Santilli 心 心

16

POSIX là tiêu chuẩn Hệ điều hành di động. Nó mô tả một số tiện ích, API và dịch vụ nhất định mà hệ điều hành tuân thủ phải cung cấp cho phần mềm (ví dụ: ổ cắm, I / O và luồng) cùng với các quy ước về cách gọi chúng từ chương trình.

Ý tưởng là một chương trình được viết cho một HĐH tuân thủ POSIX sẽ dễ dàng chuyển sang một HĐH tuân thủ POSIX khác hơn là chuyển giữa các HĐH không tuân thủ POSIX. Đây là lý do tại sao việc chuyển một ứng dụng từ FreeBSD sang Linux dễ dàng hơn nhiều so với việc chuyển nó từ FreeBSD sang Windows (mặc dù Windows có thể hỗ trợ một tập hợp con của POSIX.)


14

POSIX là một tập hợp con của UNIX nhằm bao quát nhiều môi trường giống như Unix cho các hệ điều hành khác; điều này ban đầu bao gồm các môi trường như Eunice cho VMS, tính cách POSIX của Windows NT và Apollo Domain / OS. Bạn có thể nghĩ về nó như một API khả năng di động tiêu chuẩn cho tập hợp con của các dịch vụ hệ điều hành có hành vi giống nhau giữa Unix và không Unix. Xem http://stiterias.ieee.org/develop/wg/POSIX.html để biết thêm thông tin.


Tôi đã đọc thêm về nó bây giờ và có vẻ như Uinx là con gà và POSIX là quả trứng .. nhưng tôi tự hỏi liệu UNIX có còn cai trị con gà trống không .. tức là ... POSIX có một cuộc sống của riêng nó bây giờ, và UNIX phải tuân thủ POSIX? ... btw. có vẻ như cái tên POSIX đã bị Richard Stallman
ép buộc

@ fred.bear: Câu trả lời ngắn: UNIX (nhãn hiệu thương mại) phải phù hợp với POSIX; Unix (sản phẩm) là cơ sở chính cho POSIX; unice (họ hệ điều hành) hầu hết phù hợp nhưng có nhiều điểm chung. Xem Linux có phải là Unix không? Mac OS X, UNIX? cho các cuộc thảo luận liên quan.
Gilles

@ fred-bear Nhiều người cho rằng tiêu chuẩn POSIX ngày nay được hướng dẫn bởi cộng đồng phát triển nhân Linux, điều này (nếu đúng) IMHO không phải là một điều tốt ...
sakisk

1
@faif Tôi chưa bao giờ nghe điều này và thấy nó không có khả năng, bạn có thể đăng một tài liệu tham khảo không?
chim cánh cụt359

2
@Gilles Nhóm mở, chủ sở hữu nhãn hiệu UNIX® cũng chịu trách nhiệm về chứng nhận và đặc tả UNIX® mà họ gọi là Đặc tả UNIX đơn hoặc SUS. POSIX được phát triển bởi IEEE, người không phụ trách UNIX®. Từ năm 2001, chúng đã được phát triển phần lớn đồng bộ hóa, nhưng về mặt kỹ thuật, hiện tại phiên bản 4 đã xác định UNIX®.
chim cánh cụt359
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.