
단어명령Linux에서 두 가지 다른 개념을 나타냅니다.
- 다음과 같은 실행 가능한 프로그램grep(또는 다음과 같은 내장 쉘CD). 사용 예: "당신이 배워야 할 상위 10가지 Linux 명령은 다음과 같습니다."
- 실행을 위해 셸로 전송되는 전체 텍스트 문자열입니다.grep com /etc/hosts. 사용 예: "Linux 명령을 입력하고 Enter를 누르십시오."
Linux 명령에 대한 산문을 작성할 때 이러한 모호성을 피하기 위한 모범 사례가 있는 사람이 있습니까? 이미 거부한 몇 가지 시도는 다음과 같습니다.
- 단어를 사용하여프로그램또는실행 가능의미 #1. 쉘 내장에서는 정확하지 않습니다.
- 문구 사용하기명령줄의미 #2. "명령줄"은 "셸"과 동의어이기도 하기 때문에 혼란스럽습니다.
- 문구 사용하기명령 문자열의미 #2. #1과 #2가 모두 문자열이기 때문에 부정확합니다.
어떤 조언이라도 감사하겠습니다.
답변1
POSIX" grep
와 같은 것을 말합니다 .cd
유용", 그리고예약하다 "명령" 지시사항에 대해. 일관되게 사용되는 이 용어는 모호하지 않습니다.
귀하의 사건을 차례로 해결하기 위해
"grep과 같은 실행 프로그램(또는 cd와 같은 내장 쉘)"는공익사업:
공익사업제외되는 프로그램특수 내장 유틸리티특정 작업 또는 관련 작업 세트를 수행하기 위해 셸에서 이름으로 호출할 수 있는 셸 명령 언어의 일부로 제공됩니다.
어느 것이더 명확하게:
시스템은 특정 유틸리티를 쉘 기능이나 내장 유틸리티로 구현할 수 있습니다.
true
이는 일반적으로 쉘 내장으로 발견되는 것과 같은 일반 유틸리티를 통합한다는 점을 명시합니다 .공식적으로는 "특수 내장 유틸리티"는 더 이상 지정되지 않은 유틸리티와 구분됩니다. 이들은
break
,.
,eval
,set
및 와 같은 것으로trap
쉘의 내부 상태에 영향을 주지만하지 마라includecd
, 이는 일반 내장입니다. 사양의 미묘한 요구 사항(특정 변수 할당 동작이 다르며 에서는 사용할 수 없음execvp
)을 제외하면 "유틸리티"는 사용자 수준에서 두 범주를 모두 포괄하는 데 충분합니다.if
및 와 같은 쉘 구문 기사는while
전혀 유틸리티가 아닙니다."실행을 위해 쉘로 전송되는 전체 텍스트 문자열입니다.
grep com /etc/hosts
"는명령:명령특정 작업을 수행하기 위한 쉘에 대한 지시문입니다.
명령에는 , 파이프라인과 같은 간단한 명령과 을 사용한 구문 및 그룹화 명령
grep com /etc/hosts
과 같은 복합 명령이 포함되지만 "명령"이라는 단어는 유틸리티 자체를 의미하지 않습니다. 명령 내에서if
( ... )
명령 이름유틸리티나 기능을 식별하는 표시가 나타날 수 있습니다. 의 명령 이름grep com /etc/hosts
은grep
다음을 참조합니다.grep 유틸리티.
유틸리티나 기능을 의미하는 "명령"의 현지어 사용은 문맥에 따라 명확해질 수 있지만 형식적인 의미는 단지 지시에 관한 것입니다. 모호함을 완전히 방지해야 하는 경우"유틸리티"와 "명령"을 일관되게 사용할 수 있습니다그 두 역할에 대해서요.
하지만 사용자가 스스로 그러한 구별을 할 것이라고 기대할 수는 없으므로 검색 엔진에 최적화된 "상위 10개 Linux 명령" 기사는 아마도 인센티브를 위해 올바른 선택을 하고 있을 것입니다.
답변2
요약
여기서 언급한 모호함의 유형은 다음과 같은 용어를 사용하여 가장 잘 해결됩니다.프로그램,실행 가능 파일또는 단순히실행 가능경로가 있는 경로와 경로가 있는 경로의 경우쉘 명령또는명령줄 입력한 모든 내용을 참조하고 싶을 때명령 해석기.
역사적 맥락
초기 인쇄본에 대한 색인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 라이브러리의 함수. 그 이유는 syscall 자체가 아니라 내부적으로 다양한 syscall을 사용하는 라이브러리 함수이기 때문입니다. 그 중 하나는 다음과 같습니다.
execve
. 해당 syscall은 첫 번째 인수로 상수
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
)
실제로 뭔가를 할 것이므로 확실히 Uses입니다.
답변4
나는 고려할 것이다그럴 필요는 없어대답으로서 설명된 모호함은 어쨌든 아무런 해를 끼치지 않기 때문입니다.
내가 본 모든 상황에서 "명령"이라는 단어가 실행 가능한 프로그램을 지칭할 때 이는 항상 최종 사용자가 이를 실행하기 위해 셸에 입력하는 내용입니다. "라는 표현을 본 적이 없다.명령init
" 또는 "명령ld-linux.so
".
"명령"이 명령줄 프로그램을 참조할 때 실제로는 항상 "해당 프로그램으로 시작하는 명령 계열"을 참조합니다. 예를 들어 "라고 말하면명령grep
grep
", 당신은 "명령군"을 형성하는 프로그램 으로 할 수 있는 모든 일에 대해 이야기하고 있습니다 . 이것은 "라는 말과 같은 부분 명령에도 적용됩니다.apt install
패키지 설치 명령 입니다" 전체 명령이 apt install
일반적으로 유용하지 않은 경우.