일반화하다

일반화하다

이 단어주문하다Linux에서는 두 가지 다른 개념을 나타냅니다.

  1. 다음과 같은 실행 가능한 프로그램grep(또는 내장 쉘, 예:CD). 사용 예: "여기에는 배워야 할 가장 중요한 10가지 Linux 명령이 있습니다."
  2. 실행을 위해 셸로 전송되는 전체 텍스트 문자열입니다.grep com /etc/hosts. 사용 예: "Linux 명령을 입력하고 Enter를 누르십시오."

Linux 명령에 대한 산문을 작성할 때 이러한 모호성을 피하기 위한 모범 사례가 있는 사람이 있습니까? 내가 거부한 몇 가지 시도는 다음과 같습니다.

  • 단어를 사용하다프로그램또는실행 가능 파일의미 #1. 이는 쉘 내장의 경우 정확하지 않습니다.
  • 문구를 사용하세요명령줄의미 #2. "명령줄"은 "쉘"과 동의어이기도 하기 때문에 이는 혼란스럽습니다.
  • 문구를 사용하세요명령 문자열의미 #2. #1과 #2가 모두 문자열이므로 정확하지 않습니다.

어떤 제안이라도 감사하겠습니다.

답변1

POSIX비슷한 것을 grep말하며 cd"유용", 그리고예약하다"주문하다"지침을 받아. 일관되게 사용된다면 이러한 용어는 모호하지 않습니다.


귀하의 사건을 차례로 처리하십시오.

  1. "grep(또는 cd와 같은 내장 셸)과 같은 실행 가능한 프로그램"유용:

    유용포함되지 않은 프로그램특수 내장 유틸리티셸 명령 언어의 일부로 제공되는 이 언어는 셸에서 이름으로 호출하여 특정 작업이나 관련 작업 집합을 수행할 수 있습니다.

    이것은추가 설명:

    시스템은 특정 유틸리티를 쉘 기능이나 내장 유틸리티로 구현할 수 있습니다.

    분명히 말하면 여기에는 true일반적으로 쉘 내장으로 발견되는 유틸리티와 같은 일반 유틸리티가 포함됩니다.

    공무상,"특수 내장 유틸리티" 더 이상 지정되지 않은 유틸리티와는 별개입니다 . 이들은 break, ., eval및 셸의 내부 상태에 영향을 미치지만settrap원하지 않는다include cd는 일반 내장 함수입니다. 사양의 미묘한 요구 사항(특정 변수 할당은 다르게 동작하고 사용할 수 없음 execvp) 외에도 "유틸리티"는 사용자 수준에서 두 범주를 모두 포괄하는 데 충분합니다. 및 와 같은 if쉘 구문 기사 while는 전혀 유틸리티가 아닙니다.

  2. "실행을 위해 쉘로 전송되는 완전한 텍스트 문자열입니다. 예: grep com /etc/hosts"주문하다:

    주문하다특정 작업을 수행하도록 셸에 지시하는 지침입니다.

    명령에는 간단한 명령(예 grep com /etc/hosts: 파이프) 및 복합 명령(예: if구성 및 그룹화 명령 사용) 이 포함되지만 ( ... )"명령"이라는 단어는 유틸리티 자체를 의미하지 않습니다. 명령에서는명령 이름식별 유틸리티 또는 기능이 나타날 수 있습니다. grep com /etc/hosts의 명령 이름은 grep다음을 나타냅니다.grep 유틸리티.


유틸리티나 기능을 의미하는 "명령"의 현지 사용은 문맥에 따라 명확해질 수 있지만 형식적인 의미는 단순히 지시입니다. 모호성을 완전히 피해야 하는 경우,유틸리티와 명령을 일관되게 사용할 수 있습니다두 캐릭터 모두에 대해.

하지만 사용자가 스스로 이러한 구별을 할 것이라고 기대할 수는 없으므로 SEO "상위 10개 Linux 명령" 기사는 사용자가 올바른 선택을 하도록 유도하는 역할을 할 수 있습니다.

답변2

일반화하다

여기서 언급한 인식된 모호함의 유형은 다음과 같은 것을 사용하여 가장 잘 달성됩니다.프로그램, 하나실행 가능 파일, 아니면 그냥실행 가능 파일For /는 경로입니다.쉘 명령심지어명령줄 입력한 내용을 모두 인용하고 싶을 때명령 해석기.


역사 배경

초기 인쇄물 색인C 프로그래밍 언어("K&R", Prentice-Hall)은 해당 단어를 한 번만 언급합니다.주문하다, 특별히 이 단어에 대한 것은 아니지만명령줄 매개변수. 이 작은 의미의 핵심은 이후의 모든 사용이 싹트게 되는 핵심 씨앗을 제공합니다. 1978년 인쇄본의 111페이지에서:

5.11 명령줄 매개변수

C를 지원하는 환경에서는 프로그램 실행이 시작될 때 명령줄 인수나 인수를 프로그램에 전달하는 방법이 있습니다.

즉, 이 단어는주문하다쉘의 컨텍스트에서만 사용됩니다(정의상 쉘은 다음과 같습니다.명령 해석기)(대화형 사용 또는 스크립팅용). 저자는 다음 예를 계속합니다.

필요한 선언과 가장 간단한 사용법 설명은 echo명령줄 인수를 공백으로 구분된 한 줄에 간단히 표시하는 프로그램입니다. 즉, 명령의 경우

echo hello, world

주어진 결과는 다음과 같습니다.

 hello, world

K&R이 프로그램과 명령줄에 대해 어떻게 말하는지 주목하세요. 즉, 이는 IEEE가POSIX 1003.2그것은 모든 것입니다아니요무엇POSIX 1003.1예. 일반적으로 Dot-1은 C 프로그래밍을 다루고 Dot-2는 쉘 프로그래밍을 다룹니다.

여기서 실제로 말하는 것은 C 프로그래밍이 아니라 쉘 프로그래밍입니다. 그렇기 때문에 소개를유닉스 프로그래머 매뉴얼 1부함수 호출 대신 명령을 언급하십시오.

이름

intro — 일반 명령(도구 및 유틸리티) 소개

설명하다

섹션 1의 매뉴얼 페이지에는 BSD 사용자 환경을 구성하는 대부분의 명령이 포함되어 있습니다. 섹션 1에 포함된 일부 명령에는 텍스트 편집기, 명령 쉘 해석기, 검색 및 정렬 도구, 파일 조작 명령, 시스템 상태 명령, 원격 파일 복사 명령, 메일 명령, 컴파일러 및 컴파일러 도구, 형식화된 출력 도구 및 라인 프린터 명령이 포함됩니다.

모든 명령은 종료 시 상태 값을 설정하며, 이를 통해 명령이 정상적으로 완료되었는지 테스트할 수 있습니다. 종료 값과 그 의미는 다양한 매뉴얼에 설명되어 있습니다. 일반적으로 값 0은 명령이 성공적으로 완료되었음을 나타냅니다.

1003.1 용어를 사용하는 경우 이를 문자열 매개변수라고 부를 수 있습니다.이것체계C 라이브러리의 함수. 시스템 호출 자체가 아니라, 내부적으로 다양한 시스템 호출을 사용하는 라이브러리 함수이기 때문인데, 그 중 하나가 execve. 이 시스템 호출은 char *파일 시스템의 실행 파일 경로인 첫 번째 인수로 상수 매개변수를 사용합니다 .

게시된 솔루션

게시된 솔루션은 항상 다음 정의를 사용합니다.

실행 가능 파일

문서특별히 알려주는 표시가 되어 있어요운영 체제이 파일은 프로그램으로 실행될 수 있습니다. 종종 "실행 가능"으로 축약됩니다.

주문하다

존재하다껍데기프로그래밍, 프로그램 이름과 해당 매개변수의 구문적 조합입니다. 좀 더 느슨하게 말하면, 쉘(명령 해석기)에 입력하는 것은 무엇이든 작업을 시작합니다. [...]

명령줄 매개변수

당신이 말할 때 프로그램 이름과 함께 제공하는 값 껍데기실행하다주문하다. [...]

명령 이름

이름프로그램현재 다음과 같이 실행 중입니다.명령줄. [...]

        제4판에서 발췌펄 프로그래밍(O'Reilly), 저자의 허가를 받아 여기에 사용되었습니다. :) .

운이 좋다면 이 간단한 명령줄을 셸에 입력하여 실행하면 이 모든 것을 직접 찾을 수 있습니다.남성귀하에게 제공되는 실행 파일/프로그램:

man perlglossary

하지만 운이 좋지 않다면여기서도 찾을 수 있습니다.

쉘 명령

이는 쉘 명령일 수 있습니다.

exec 2>errs.out

거기에는 아무것도 없습니다 exec. 파일 설명자를 다시 정렬했습니다.

여기도 마찬가지입니다:

exec 5<&0   # save old stdin
exec 0<&3   # read some_var
exec 0<&4   # read another_var
exec 0<&5   # restore it

execve따라서 스크립트의 모든 줄은 여기에서도 "명령"입니다(연습을 위해 전체 실행에서 생성된 실제 시스템 호출 수는 독자에게 맡깁니다).

#!/bin/sh
device=/dev/rmt8
dd_noise='^[0-9]+\+[0-9]+ records (in|out)$'
exec 3>&1
status=`((dd if=$device ibs=64k 2>&1 1>&3 3>&- 4>&-; echo $? >&4) | egrep -v "$dd_noise" 1>&2 3>&- 4>&-) 4>&1`
exit $status

존경하는 예레미아드에게서유해한 것으로 간주되는 Csh 프로그래밍, 친절한 허가 등을 받아 여기에서 다시 사용되었습니다. :)

답변3

상당히 간단한 솔루션(그리고 표준적인 철학적, 언어적 회피) 구별하는 것입니다사용이 단어주문하다, 그리고언급하다이 단어주문하다. 예를 들어 특정 단어는 동작을 수행하며 일반 영어에서도 해당 단어의 사용은 동작을 수행하는 방식입니다. 예를 들어, 적절한 상황에서 "I do"라고 말하면 결혼할 수도 있습니다. 하지만 다른 사람이 말했을 수도 있는 내용을 인용한다면 그렇지 않습니다. 인용된 내용은 언급이지 용도가 아닙니다.

따라서 첫 번째 명령 목록은 명령을 사용하는 것이 아닙니다. 그들은 순서를 언급했습니다.

두 번째 예는 제가 가장 좋아하는 것 같습니다.

  • $ rev wordlist | sort | rev > speculum
    (역알파벳 사본 생성 wordlist)

실제로 뭔가를 하므로 용도가 있어야 합니다.

답변4

나는 고려할 것이다필요 없음대답하자면, 설명된 모호성은 어쨌든 아무런 해를 끼치지 않기 때문입니다.

내가 본 모든 상황에서 "명령"이라는 단어가 실행 가능한 프로그램을 나타낼 때 최종 사용자는 항상 명령을 셸에 입력하여 실행합니다. 그런 표정 본 적 없어"init명령" 또는"ld-linux.so명령".

"명령"이 명령줄 프로그램을 참조할 때 실제로는 항상 "해당 프로그램으로 시작하는 일련의 명령"을 참조합니다. 예를 들어 "라고 말하면grep명령", 당신은 "일련의 명령"을 형성하는 프로그램으로 할 수 있는 모든 일에 대해 이야기하고 있습니다 grep. 속담처럼 부분 명령에도 적용됩니다."apt install명령은 패키지를 설치하는 데 사용됩니다" 전체 명령이 apt install일반적으로 효과가 없는 경우.

관련 정보