명령 대 프로그램?


19

나는 사이의 차이 찾는 한 adduser과를 useradd, 그리고 설명은useradd동안 명령입니다 adduser펄 스크립트입니다. 나는 펄 스크립트가 무엇인지 이해하지만, 내가 이해하지 못하는 것은 command그때 정확히 무엇 인지입니다.

난 항상 명령이 좋아 생각 ls, ln, cd단순히 하나의 일을하는 것이 어떤 언어로 작성된 모든 간단한 프로그램 등이다. 이 "간단한 프로그램"과 펄 스크립트의 차이점은 무엇입니까?

물론 (perl) 스크립트가 컴파일되지 않고 런타임에 해석된다는 것을 알고 있지만 이것이 유일한 차이점은 아니라고 생각합니까?


1
이 경우 컴파일 된 것보다 해석 된 것에 너무 집중하지 마십시오. 해석 된 쉘을 가질 수 있습니다 (왜 당신이 그것을 원하는지는 의심 스럽습니다). 대신 명령 동작을위한 코드는 쉘 소스 코드의 정적 부분 인 반면, 스크립트는 외부 적이거나 존재하지 않거나 약간 다른 두 시스템에서 동일하게 작동한다고 가정해서는 안됩니다. 모든 의존성이 반드시 충족되는 것은 아닙니다. 스크립트는 유연성이 뛰어나고 일반적으로 신뢰성이 떨어지는 반면 명령은 쉘의 어느 곳에서나 작동합니다.
Frank Thomas

간단히 말해 : commandprogram 이 실행할 수있는 바이너리 인 동안 실행할 수있는 것입니다.
Pithikos

답변:


32

간단히 말해서, 명령은 컴퓨터에 의해 수행되는 명령 (또는 일련의 명령)입니다.

독립형 명령

같은 기본 유닉스 유틸리티 ls, ln등 (보통) C로 작성 및 독립 실행 형 실행으로 컴파일 된 프로그램을 실행하는 인터프리터를 필요로하지 않는다; 일반적으로 시스템에 특정 라이브러리 파일을 설치 해야 하지만 다른 질문에 대한 답변입니다.

스크립트

스크립트는 명령 모음이며 실제로 스크립트 자체는 명령으로 간주됩니다.

펄 스크립트는 펄 문장의 순서이며, 필요 perl실행 파일 (독립형 및 컴파일 된) 프로그램 펄 문을 해석 할 수 있습니다.

때로는 크고 복잡한 해석 스크립트 (Perl, Python 및 Ruby와 같은 언어)는 해석 프로그램 이라고도 하며, 스크립트 라는 용어 는 더 짧고 간단한 스크립트를 위해 사용됩니다.

쉘 스크립트는 다른 일련의 명령 (명령의 모든 유형)이며 유닉스 스크립트를 해석하는 등 배쉬로 쉘이 필요합니다. Bash 매뉴얼 페이지에서 :

Bash는 표준 입력 또는 파일에서 읽은 명령을 실행하는 sh 호환 명령 언어 인터프리터입니다.

쉘 내장

쉘에는 일반적으로 독립형 프로그램이나 스크립트가 아닌 내장 명령이 있습니다. 대신 이들은 쉘 자체의 일부이며 쉘에 의해 직접 실행됩니다. cd이러한 내장 명령의 예입니다.

때때로 쉘 내장 및 독립형 명령으로 존재하는 명령이 있습니다 (예 : echo명령).

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

echo 자체적으로 쉘 내장을 실행하는 반면 독립형 명령은 전체 경로를 제공하여 실행될 수 있습니다.

내장 에코 버전을 실행하십시오.

$ echo --version
--version

독립형 echo프로그램을 실행하십시오 .

$ /usr/bin/echo --version
echo (GNU coreutils) 8.23
Packaged by Cygwin (8.23-4)
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

참고 : 위의 내용은 Unix 환경과 관련이 있지만 Windows 환경에도 동일한 원칙이 적용됩니다.


Windows에서 참조하는 에코는 Cygwin을 설치 한 경우에만 해당됩니다. Windows에서는 echo. *를 찾을 수 없습니다. 순전히 CMD 쉘 명령이기 때문입니다 (powershell의 에코는 쓰기 객체로 별칭이 지정됨)
Jim B

@JimB 사실입니다. 마지막 줄을 편집하여 내가 의미 한 바를 명확하게했습니다. 우연히도 이번 주에 PowerShell을 배우기 시작했습니다 (감사하게도 .bat, 수년 동안 파일 작업을 할 필요가 없었습니다 ).
Anthony G-Monica에 대한 정의

2

내장 명령은 쉘의 일부입니다. 프로그램은 쉘에 의해 실행됩니다.

내장 명령은 쉘 자체에 포함되어 있습니다. 내장 명령의 이름이 단순 명령의 첫 단어로 사용되면 ( 단순 명령 참조 ) 쉘은 다른 프로그램을 호출하지 않고 명령을 직접 실행합니다. 내장 된 명령은 별도의 유틸리티로는 얻을 수 없거나 불편한 기능을 구현하는 데 필요합니다.

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands


그러나 useradd쉘은 내장되어 있지 않습니다. 웹 사이트는 "내장 명령"이 아니라 "명령"이라고 말했습니다. 이 설명이이 질문과 어떤 관련이 있습니까?
Barmar

1

명령 은 응용 프로그램이나 시스템에 무언가를하도록 지시하는 방법을 의미합니다.

응용 프로그램은 일반적으로 GUI,에서 또는 다른 많은 명령을 받아들이지 stdin만 UNIX 소켓 또는 명명 된 파이프, 일종의 웹 API, RPC 연결 또는 다른 사용자 지정 프로토콜과 같은 다른 방법도 가능합니다.

하나의 작업 만 수행 한 다음 일반적으로 GUI없이 종료되는 응용 프로그램을 명령이라고도합니다.이 응용 프로그램에 의미있는 "명령"을 하나만 "주실"수 있기 때문입니다. 이것이 작은 프로그램들이 좋아하는 방식 ls이며 작동하는 이유입니다.

그러나 Photoshop을 명령이라고 부르지는 않지만 GUI를 통해 명령을 내릴 것입니다.

그러나이 용어는 사람들마다 다른 의미를 가질 수 있습니다. 예제에서 명령 은 스크립트 인터프리터가 작동해야하는 파일과 직접 실행되는 실행 파일을 설명하는 데 사용됩니다. Perl 스크립트를 실행할 때 /usr/bin/perl실제로 실행중인 바이너리 이기 때문에 구별이 중요 할 수 있습니다. 따라서 장기간 실행되는 Perl 스크립트를 종료하려면에서 찾아야합니다 ps. 그러나 대부분의 셸에는 셸 자체에 대한 명령 인 "내장"명령이 있으며 외부 실행 파일이 실행되지 않습니다. 예를 들어, 자체적 cd으로 처리되며 bash호출 /sbin/cd하거나 유사 하지 않습니다 .


재미있는 관점. 추상화 수준에서 이것을 '호출'또는 '제스처'라고 부르거나 안드로이드 용어를 '의도'라고 부르고 싶습니다. 그것은 컴파일 된 기준을 해석하는 아이디어를 좋아하는지 모르겠습니다. 예를 들어 Powershell은 하이브리드 해석 (, Net)이지만 쉘로서 코드베이스 내에 명령이 있습니다. 그러나 외부 컴파일 된 (머신 코드) 실행 파일이 스크립트와는 다르지만 명령도 다릅니다. 내가 말했듯이 흥미로운 관점.
Frank Thomas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.