Các tùy chọn UNIX-, BSD-, GNU trong lệnh ps của Linux. Họ đến từ đâu?


7

Trong hướng dẫn sử dụng pslệnh trên Ubuntu có văn bản này:

Phiên bản ps này chấp nhận một số loại tùy chọn:

   1   UNIX options, which may be grouped and must be preceded by a
       dash.
   2   BSD options, which may be grouped and must not be used with
       a dash.
   3   GNU long options, which are preceded by two dashes.

Tại sao một lệnh được xây dựng trong Ubuntu có thể sử dụng các tùy chọn từ các hệ điều hành khác nhau? Tôi biết rằng nguồn gốc của Linux, UNIX và BSD là như nhau nhưng chúng là các nhánh khác nhau.


5
Tôi không hiểu những gì bạn đang hỏi, thực sự. Đó chỉ là "phong cách" lập luận khác nhau. Không có gì "thú vị" xảy ra ở đây ngoại trừ tập hợp các đối số có thể rất ấn tượng mà ps đưa ra.
Mat

1
Tôi đã đề cử điều này để mở lại vì lý do đóng cửa là sai. Nói như một người nào đó đã thực hiện các nghiên cứu : Đó khả năng để trả lời câu này với sự kiện. Câu trả lời hiện tại là phỏng đoán, là phỏng đoán sai ; nhưng một câu trả lời đúng không thể được thêm vào.
JdeBP

Câu trả lời:


10

Tôi chỉ có thể cung cấp cho bạn một câu trả lời tổng thể: Các tùy chọn dòng lệnh thường được phân tích cú pháp bằng cách sử dụng chức năng thư viện getopt . Ban đầu nó chỉ chấp nhận các đối số bao gồm một - theo sau là một biểu tượng. Điều này giới hạn hiệu quả số lượng tùy chọn bạn có, nhiều hơn hoặc ít hơn -A đến -Z, -a đến -z và -0 đến -9. Bạn có thể tưởng tượng rằng bạn sẽ không sử dụng một tùy chọn mà không có ít nhất một gợi ý cho việc sử dụng thực sự, như -h để được trợ giúp hoặc -v cho thông tin phiên bản hoặc đầu ra dài dòng.

Trong Linux và glibc thư viện C tiêu chuẩn thường được liên kết, có phần mở rộng để getopt cũng xử lý các tùy chọn - giống như. Đi kèm với điều này là nhiều lệnh được phát triển theo GNU (như glibc) đã sử dụng phần mở rộng này. Bây giờ đối với nhiều lệnh, bạn cũng có tùy chọn kiểu giống như GNU. -v và --verbose, -h và --help và như vậy. Tôi đoán điều tương tự đã xảy ra trong BSD (mặc dù tôi không phải là anh chàng BSD, xin vui lòng sửa lỗi cho tôi).

psLệnh của bạn xuất phát từ một bộ sưu tập phần mềm có tên là Procps và tôi đoán rằng họ muốn bắt chước kiểu tùy chọn cụ thể cho một nền tảng nhất định. Vì vậy, đối với những người UNIX, nó có - tùy chọn. Đối với BSD, nó cũng chấp nhận một cái gì đó tương tự ps auxvà như vậy.

pskhông phải là chương trình duy nhất hành xử như thế này. Nhiều chương trình tiêu chuẩn hiểu kiểu UNIX "cũ" (POSIX) và một số phần mở rộng hiện đại.


1
Chào mừng bạn đến với stackexchange Unix & Linux! Bạn đang có một khởi đầu tuyệt vời.

6

Tất cả là vì một người tên là Albert D. Cahalan. Xe không biết BSD.

Lệnh ban đầu pscho Linux được viết và xuất bản lần đầu vào tháng 3 năm 1992 bởi Branko Lankester . Sau này được gọi là "kmem-ps" để phân biệt với "Proc-ps" được xuất bản vào tháng 12 năm 1992 bởi Michael K. Johnson . M. Lankester đã pssử dụng kmemthiết bị để đọc bảng quy trình từ bộ nhớ kernel. M. Johnson đã pssử dụng prochệ thống tập tin để đọc bảng quy trình và có một số bản phát hành được thực hiện trong vài năm tới (ví dụ: tháng 1 năm 1993 , tháng 1 năm 1994 ).

Các pslệnh này cung cấp một cú pháp khá cũ, thậm chí sau đó, cho lệnh có kiểu ngày từ trước getopt()những năm 1980. Đây là từ bản phát hành kmem-ps tháng 11 năm 1993 :

cách sử dụng: ps 0acefhHjlmnprsStuUvwxXy [t tty] [pid [, pid] ...]

j - định dạng điều khiển công việc, định dạng l - dài, định dạng m - bộ nhớ,
s - định dạng tín hiệu, định dạng u - người dùng, v - định dạng bộ nhớ ảo,
X - định dạng đăng ký, định dạng y - s tòa nhà, mặc định - định dạng ngắn

0 - bao gồm nhiệm vụ 0, a - bao gồm các quy trình cho tất cả người dùng
c - chỉ in tên lệnh, e - show env vars, f - in rừng của procs
h - triệt tiêu tiêu đề, n - in các trường người dùng và wchan bằng số
p - số lượng in trong các trang, r - hạn chế liệt kê các quy trình có thể chạy
S - tóm tắt việc sử dụng cho trẻ em trong các trường lỗi thời gian và trang CPU
t tty - hiển thị tất cả các khoản xử lý với TTY là thiết bị đầu cuối kiểm soát của họ
w - wide: 132, ww - 264, www - không giới hạn, mặc định - chiều rộng màn hình hoặc 80
x - bao gồm các quy trình mà không có thiết bị đầu cuối kiểm soát
U [HỆ THỐNG-HỆ THỐNG [SWAP-PATH]] - cập nhật cơ sở dữ liệu ps

Như bạn có thể thấy, có một tính cách, một ý nghĩa duy nhất cho các chữ cái và không có ký tự dấu trừ hàng đầu.

Ý tưởng về một Ulá cờ (không phải là -Uthông báo) xuất phát từ bản vá năm 1986 cho BSDps bởi nó đã được đăng lên nhóm mod.sourcestin Usenet (như Tập 6 Số 83) của Michael A. Callahan.

Cùng đến với Albert D. Cahalan một vài năm sau đó, người đã viết lại Proc-ps. Xe đã đưa ra rất nhiều tuyên bố về nó. Thật không may, việc gỡ lỗi của rất nhiều trong số những tuyên bố đó đã bị lãng quên, và điều nổi bật trong tất cả những năm sau đó là pstuyên bố thủ công rằng điều này pscung cấp cú pháp tùy chọn Unix, BSD và GNU.

Nó không.

BSD psđã sử dụng getopt()xử lý tùy chọn kể từ khi Marc Teitelbaum thay đổi nó thành như vậy vào tháng 4 năm 1990 , nhiều năm trước cả phiên bản Linux của M. Lankester ps, chứ đừng nói đến A. Cahalan.

A. Cahalan đã pscung cấp cú pháp kmem-ps / Proc-ps cũ của Linux. Nó sau đó đã thêm một số cú pháp mà A. Cahalan tuyên bố là từ pslệnh AIX . A. Cahalan, người đã kiên quyết đưa ra quan điểm trên Usenet rằng "BSD hút và SysV không" rằng FreeBSD "hút" và xyr viết lại của Proc-ps là "tuân thủ tiêu chuẩn /bin/ps" hỗ trợ "cú pháp BSD lỗi thời của bạn" , trớ trêu thay đã không nhận ra rằng điều này thực tế không phải là cú pháp BSD trong gần một thập kỷ vào thời điểm đó. psbản thân nó chỉ mới được chuẩn hóa vào năm đó, hơn nữa. Các phân tích trong lý do tiêu chuẩn của BSD so với các tùy chọn dòng lệnh Unix của AT & T chu đáo hơn rất nhiều so với bất kỳ A. Cahalan nào từng có.

Điều này psnổi tiếng đã giới thiệu I_WANT_A_BROKEN_PSbiến môi trường, điều gây nhầm lẫn A. Cahalan đổ lỗi cho M. Johnson trong khi đồng thời tuyên bố xyrelf chịu trách nhiệm phân tích tùy chọn. Trong thực tế, twain đã duy trì pssong song hai triển khai .

Thật kỳ lạ, nếu một getopt()tùy chọn kiểu được sử dụng đi trước các dấu trừ, như trường hợp của BSD pstại thời điểm đó và như là tiêu chuẩn mới (sau đó) cho pstài liệu, Cahalan / Johnson pssẽ nêu:

cảnh báo: `- 'không dùng nữa; sử dụng `ps e ', không phải` ps -e'

Trên thực tế, nó đã không được sử dụng -mà đã bị phản đối. Thật vậy, tuyên bố của A. Cahalan là xyr pssẽ hoạt động theo cách tiêu chuẩn sử dụng -- giống như BSD psđã từng có. Điều này gây ra nhiều câu hỏi từ những người dùng bối rối vào cuối những năm 1990 và đầu những năm 2000, và nói chung khiến người quản trị hệ thống và người dùng bối rối khi sách bắt đầu nói những điều như:

Bạn có thể tự hỏi tại sao chúng ta không sử dụng dấu gạch ngang trước cờ ps. Bạn có thể sử dụng chúng, nhưng với pscách thức cũ và bạn sẽ nhận được cảnh báo về việc gắn bó với chương trình.
TiếtDeborah S. Ray và Eric J. Ray (1998). UNIX . Báo chí đào. ISBN YAM201353952. P. 174.

Bạn vẫn có thể thấy điều này được thảo luận trong các oldpsnhãn hiệu mà cuộc đàm phán bị "bắt nguồn từ phiên bản BSD của ps" mặc dù nó thực sự là không, nó được khá rõ ràng là có nguồn gốc từ Linux một; và nói rằng "các đối số dòng lệnh không nên được đặt trước bởi một ký tự` - ', bởi vì trong tương lai, một `-' sẽ được sử dụng để chỉ ra các đối số dòng lệnh tiêu chuẩn Unix98, trong khi không có` - 'sẽ chỉ ra kiểu `` BSD '' hiện tại của các đối số dòng lệnh ".

Một số trong số này đã được giảm bớt trong Procps-ng, một bản viết lại thứ ba được thực hiện ngay sau khi bước sang thế kỷ (khi "-ng" trong tên dự án là chế độ à la), đó là khi Cahalan / Johnson pstrở thành oldps. Như bạn có thể thấy, pshướng dẫn không còn nói "mở rộng". Nhưng phiên bản mới của ps( vẫn liên quan đến A. Cahalan ) đã đưa toàn bộ ý tưởng đa nhân cách trở nên cực đoan. Thật không may, hơn nữa, nó vẫn duy trì canard về các tùy chọn dòng lệnh BSD và cho đến ngày nay.

Trong khi đó, BSD độc thân vui vẻ psđã cung cấp getopt()phân tích tùy chọn dòng lệnh trong 29 năm qua và 7 ngày tại thời điểm viết câu trả lời này; FreeBSD đã đạt được một procstatlệnh; NetBSD và OpenBSD psđã theo dõi -Atùy chọn thỏa hiệp mới ; và Thông số kỹ thuật Unix đơn đã dành riêng (nhưng không bao gồm) -Otùy chọn BSD mới ps.

đọc thêm

  • Robert NM Watson (2017-01-14). procstat. Hướng dẫn sử dụng lệnh chung của FreeBSD .
  • ps. Hướng dẫn sử dụng lệnh chung của FreeBSD . 2018/03/13.
  • ps. Hướng dẫn sử dụng lệnh chung của NetBSD . 2016-12 / 02.
  • ps. Hướng dẫn sử dụng lệnh chung của OpenBSD . 2016-10-26.

1
Nghiên cứu ấn tượng. Tôi hy vọng điều này sẽ được bình chọn nhanh chóng để đứng đầu. Lưu ý bên lề, tôi thấy những đại từ lẻ bị ảnh hưởng và mất tập trung khi nói về Albert Cahalan; nghiên cứu của bạn có khai quật được rằng những đại từ đó được người đó đặc biệt ưa thích không? Nếu không, hãy sử dụng các đại từ tiếng Anh chuẩn.
tự đại diện

1
@Wildcard, Googling "JdeBP" "Xe"(với cả hai bộ dấu ngoặc kép) tạo ra khoảng 5000 lượt truy cập. Tôi nghĩ điều đó cho thấy rằng tác giả không tôn trọng đại từ nhân xưng ưa thích của Cahalan.
Ray Butterworth
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.