추가 읽기

추가 읽기

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는 pskmem장치를 사용하여 커널 메모리에서 프로세스 테이블을 읽습니다. 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 패치psMichael A. Callahan은 이것을 Usenet mod.sourcesNews Group(제6권, 제83호)에 게시했습니다.

몇 년 후 Albert D. Cahalan이 등장하여 proc-ps를 다시 작성했습니다. Xe는 이에 대해 많은 주장을 합니다. 불행하게도 이러한 주장 중 많은 부분이 사실이 아니라는 사실은 잊혀졌고, ps몇 년이 지난 후에도 여전히 존재하는 매뉴얼에서는 psUnix, BSD 및 GNU 옵션 구문을 제공한다고 주장합니다.

그렇지 않습니다.

BSD는 옵션 처리를 ps사용합니다 .getopt()Marc Teitelbaum이 1990년 4월에 이를 변경한 이후,년도psM. Cahalan 버전은 말할 것도 없고 M. Lankester의 Linux 버전보다 훨씬 오래되었습니다 .

M. Cahalan은 ps이전 Linux kmem-ps/proc-ps 구문을 제공했습니다. 나중에 psM. 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은 다음과 같이 지적합니다.pspsps

경고: '-'는 더 이상 사용되지 않습니다. 'ps -e' 대신 'ps e'를 사용하세요.

사실 원래 그랬어요아니요더 이상 사용 -되지 않습니다. 사실, M. Cahalan은 xyr이 ps표준 방식으로 작동할 것이라고 주장합니다 - BSD가 이미 하고 있는 -것처럼 말이죠 . ps이로 인해 1990년대 후반과 2000년대 초반에 혼란스러워했던 많은 사용자들로부터 질문이 제기되었으며, 책에서 다음과 같은 내용이 언급되기 시작하자 일반적으로 시스템 관리자와 사용자도 혼란스러워졌습니다.

왜 기호 앞에 대시를 사용하지 않는지 궁금할 것입니다 ps. 사용할 수는 있지만 이는 ps구식 방식이므로 프로그램을 계속 사용하면 경고 메시지가 표시됩니다.
——Deborah S. Ray 및 Eric J. Ray(1998).유닉스 시스템. 피치스킨프레스. ISBN 9780201353952. 피. 174.

이 토론을 계속 볼 수 있습니다.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.

추가 읽기

  • 로버트 N. M. 왓슨(2017-01-14).procstat. FreeBSD 공통 명령 매뉴얼.
  • ps. FreeBSD 공통 명령 매뉴얼. 2018년 3월 13일.
  • ps.NetBSD 공통 명령 매뉴얼. 2016년 12월 2일.
  • ps. OpenBSD 공통 명령 매뉴얼. 2016년 10월 26일.

답변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)과 일부 최신 확장 기능을 지원합니다.

관련 정보