Ubuntu의 명령 매뉴얼에는 ps
다음 텍스트가 있습니다.
이 ps 버전은 다양한 옵션을 허용합니다:
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.
Ubuntu의 내장 명령이 다른 운영 체제의 옵션을 사용할 수 있는 이유는 무엇입니까? Linux, UNIX, BSD는 기원은 같지만 가지가 다르다는 것을 알고 있습니다.
답변1
이 모든 일은 Albert D. Cahalan이라는 사람 때문에 일어났습니다. Xe는 BSD를 이해하지 못합니다.
ps
원래 Linux 명령은 다음과 같이 작성되었습니다.브랑코 랭케스터(Branko Lankester) 1992년 3월 초판 출판. 나중에 "proc-ps"와 구별하기 위해 "kmem-ps"라고 불렸습니다.1992년 12월 Michael K. Johnson 출판. M. Lankester는 ps
이 kmem
장치를 사용하여 커널 메모리에서 프로세스 테이블을 읽습니다. M. Johnson은 파일 시스템을 ps
사용하여 proc
프로세스 테이블을 읽었으며 향후 몇 년에 걸쳐 여러 버전이 출시되었습니다(예:1993년 1월,1994년 1월).
당시에도 이러한 명령은 1980년대 초반 ps
스타일의 상당히 오래된 명령 구문을 제공했습니다 . getopt()
이것은에서 온 것입니다kmem-ps는 1993년 11월에 출시되었습니다.:
사용법: ps 0acefhHjlmnprsStuUvwxXy [t tty] [pid[,pid]...] j -- 작업 제어 형식, l -- 긴 형식, m -- 메모리 형식, s -- 신호 형식, u -- 사용자 형식, v -- 가상 메모리 형식, X -- 레지스터 형식, y -- 시스템 호출 형식, 기본값 -- 짧은 형식 0 - 작업 0을 포함하고, a - 모든 사용자에 대한 프로세스를 포함합니다. c -- 명령 이름만 인쇄, e -- 환경 변수 표시, f -- 프로세스 포리스트 인쇄 h - 헤더를 억제합니다. n - 사용자 및 wchan 필드를 숫자로 인쇄합니다. p - 페이지 수를 인쇄합니다. r - 실행 가능한 프로세스로 목록을 제한합니다. S - CPU 시간 및 페이지 오류 필드의 하위 프로세스 사용량을 요약합니다. t tty - TTY를 제어 터미널로 사용하는 모든 프로세스를 표시합니다. w -- 너비: 132, ww -- 264, www -- 제한 없음, 기본값 -- 화면 너비 또는 80 x - 제어 터미널이 없는 프로세스를 포함합니다. U [SYSTEM-PATH [SWAP-PATH]] - ps 데이터베이스 업데이트
보시다시피, 문자에는 개성이 있고 단일한 의미가 있으며 앞에 빼기 문자가 없습니다.
U
로고(알림 아님)에 대한 아이디어는 -U
다음에서 나왔습니다.1986년 BSD 패치ps
Michael A. Callahan은 이것을 Usenet mod.sources
News Group(제6권, 제83호)에 게시했습니다.
몇 년 후 Albert D. Cahalan이 등장하여 proc-ps를 다시 작성했습니다. Xe는 이에 대해 많은 주장을 합니다. 불행하게도 이러한 주장 중 많은 부분이 사실이 아니라는 사실은 잊혀졌고, ps
몇 년이 지난 후에도 여전히 존재하는 매뉴얼에서는 ps
Unix, BSD 및 GNU 옵션 구문을 제공한다고 주장합니다.
그렇지 않습니다.
BSD는 옵션 처리를 ps
사용합니다 .getopt()
Marc Teitelbaum이 1990년 4월에 이를 변경한 이후,년도ps
M. Cahalan 버전은 말할 것도 없고 M. Lankester의 Linux 버전보다 훨씬 오래되었습니다 .
M. Cahalan은 ps
이전 Linux kmem-ps/proc-ps 구문을 제공했습니다. 나중에 ps
M. Cahalan이 AIX 명령에서 나왔다고 주장하는 일부 구문을 추가했습니다 . 유즈넷에서 이 점을 확고하게 밝힌 M. Cahalan:"BSD는 형편없지만 SysV는 그렇지 않습니다."저것FreeBSD는 "짜증나"proc-ps의 xyr 재작성은 다음과 같습니다."표준 준수 /bin/ps
", "구식 BSD 구문" 지원아이러니하게도 이것이 실제로 거의 10년 동안 BSD 구문이 아니었다는 사실이 당시에는 인식되지 않았습니다. ps
그 자체가방금 거기 있었어게다가 그 해에 표준화되었습니다. 표준원리분석BSD와 AT&T Unix 명령줄 옵션의 비교는 M. Cahalan의 기사에 있는 어떤 것보다 훨씬 더 사려 깊습니다.
이것은 ps
유명한 I_WANT_A_BROKEN_PS
환경 변수를 소개하는데, 혼란스럽게도 M. Cahalan은 xyrself가 옵션 해결을 담당한다고 주장하면서 M. Johnson의 속성을 지정합니다. 실제로,twain은 두 가지 ps
구현을 병렬로 유지합니다..
이상하게 도 당시 BSD의 경우 getopt()
처럼 마이너스 기호 앞에 -style 옵션을 사용하고 (당시) 새로운 기록 표준으로 Cahalan/Johnson은 다음과 같이 지적합니다.ps
ps
ps
경고: '-'는 더 이상 사용되지 않습니다. 'ps -e' 대신 'ps e'를 사용하세요.
사실 원래 그랬어요아니요더 이상 사용 -
되지 않습니다. 사실, M. Cahalan은 xyr이 ps
표준 방식으로 작동할 것이라고 주장합니다 - BSD가 이미 하고 있는 -
것처럼 말이죠 . ps
이로 인해 1990년대 후반과 2000년대 초반에 혼란스러워했던 많은 사용자들로부터 질문이 제기되었으며, 책에서 다음과 같은 내용이 언급되기 시작하자 일반적으로 시스템 관리자와 사용자도 혼란스러워졌습니다.
왜 기호 앞에 대시를 사용하지 않는지 궁금할 것입니다——Deborah S. Ray 및 Eric J. Ray(1998).유닉스 시스템. 피치스킨프레스. ISBN 9780201353952. 피. 174.ps
. 사용할 수는 있지만 이는ps
구식 방식이므로 프로그램을 계속 사용하면 경고 메시지가 표시됩니다.
이 토론을 계속 볼 수 있습니다.oldps
수동이는 "BSD 버전에서 파생됨 ps
"에 대해 설명합니다. 이는 사실은 아니지만 Linux 버전에서 파생된 것임이 분명합니다. "명령줄 인수 앞에는 '-' 문자가 있어서는 안 됩니다. 현재 명령줄 인수의 "확장 BSD" 스타일"을 나타내기 위해 '-'를 사용하는 대신 앞으로 Unix98 표준 명령줄 인수를 나타내기 위해 사용될 것입니다.
이들 중 일부는 procps-ng에서 완화되었습니다.제삼재작성은 세기가 바뀌자마자(프로젝트 이름의 "-ng"가 à la 모드였을 때) 이루어졌는데, 이때 Cahalan/Johnson이 ps
. oldps
보시다시피 ps
매뉴얼에는 더 이상 "확장"이라고 표시되지 않습니다. 하지만 새 버전 ps
(여전히 M. Cahalan이 관련되어 있습니다.) 실제로 여러 성격에 대한 전체 아이디어를 극단적으로 받아들입니다. 안타깝게도 그 외에도아직이로 인해 오늘날까지 계속되는 BSD 명령줄 옵션에 대한 소문이 계속되었습니다.
동시에, 행복한하나의-personality BSD는 이 답변을 작성하는 시점에서 ps
지난 29년 7일 동안 명령줄 옵션을 제공했습니다 . getopt()
NetBSD procstat
와 OpenBSD는 단일 Unix 사양이 유지하는 ps
새로운 타협 옵션을 추적했습니다 . -A
새로운 BSD -O
옵션 ps
.
추가 읽기
답변2
일반적인 대답만 드릴 수 있습니다. 명령줄 옵션은 일반적으로 라이브러리 함수를 사용하여 구문 분석됩니다 getopt
. 처음에는 - 뒤에 기호가 오는 인수만 허용됩니다. 이는 -A에서 -Z, -a에서 -z, -0에서 -9까지 사용 가능한 옵션 수를 효과적으로 제한합니다. 실제 사용에 대한 최소한의 힌트도 없이 도움말의 경우 -h, 버전 정보 또는 자세한 출력의 경우 -v와 같은 옵션을 사용하지 않을 것이라고 상상할 수 있습니다.
Linux에는 종종 표준 C 라이브러리 glibc와 관련되어 있으며 유사한 옵션을 처리하는 getopt 확장이 있습니다. 결과적으로 GNU에서 개발된 많은 명령(예: glibc)은 이 확장을 사용합니다. 이제 많은 명령에 대해 GNU와 유사한 스타일 옵션을 사용할 수도 있습니다. -v 및 --verbose, -h 및 --help 등. BSD에서도 같은 일이 일어나는 것 같습니다(비록 저는 BSD 전문가는 아니지만 정정해 주십시오).
귀하의 ps
명령은 procps라는 소프트웨어 모음에서 나옵니다.추측하다그들은 특정 플랫폼의 옵션 스타일을 모방하고 싶어합니다. 따라서 UNIX 사용자의 경우 - 옵션이 있습니다. BSD의 경우 이와 같은 내용도 허용됩니다 ps aux
.
ps
이런 식으로 동작하는 유일한 프로그램은 아닙니다. 많은 표준 프로그램은 "이전" UNIX 버전(POSIX)과 일부 최신 확장 기능을 지원합니다.