터미널 명령의 모드는 무엇입니까?

터미널 명령의 모드는 무엇입니까?

재미있는 라즈베리파이 덕분에 이제 막 단말기에 파고들기 시작했습니다. 여전히 나를 혼란스럽게 만드는 한 가지가 있습니다.

나는 다른 데몬/서비스/프로세스/응용 프로그램/등(또 무엇이 빠졌습니까?)에 대해 다르게 호출된다는 것을 알았습니다.

이것이 내가 의미하는 바입니다:

(프로그램, 파일 이름)

nano mytextfile

(봉사, 행동, 계획)

service restart nginx

(행동 계획)

killall openvpn

이 시점에서는 기본적으로 기억력 연습입니다. 아직 문법을 이해하지 못합니다. 그런 게 있나요? :

"service" when it's a service, as opposed to...? >
action for program if applicable >
name of program >
additional parameters

이들 간의 차이점과 이에 액세스하는 다양한 방법을 간략하게 설명할 수 있습니까?

답변1

귀하가 나열한 잠재적 패턴 중 실제로 존재하는 유일한 패턴은 다음과 같습니다.

프로그램 이름 > 추가 매개변수

먼저, 몇 가지 단어의 정의는 다음과 같습니다.

  • 프로그램 또는 애플리케이션: 기본적으로 실행 파일
  • 프로세스: 현재 실행 중인 프로그램의 인스턴스
  • 데몬: 사용자 로그인 세션과 독립적으로 일부 작업을 수행하는 프로그램 또는 프로세스로, 일반적으로 부팅 시 자동으로 시작되고 시스템이 종료될 때까지 실행됩니다(예: 원격 액세스 프로토콜 서버 sshd). 웹 서버(Apache), 네트워크 연결 관리자( NetworkManager, ModemManager)...
  • 서비스: 일반적으로 부팅 시 시작되는 항목은 데몬일 수도 있고 무언가를 설정하고 종료하는 스크립트일 수도 있으며 시스템이 종료될 때 해당 해체를 수행할 수 있습니다. 일부 상황에서는 부팅 시 프로그램이 데몬으로 시작되는 배열을 의미할 수도 있습니다.

service이는 SysVinit 스타일 시작/종료 스크립트에 대한 간단한 래퍼로 시작되었습니다. Linux에서 기존 SysVinit이 init시스템(프로세스 #1, "모든 프로세스의 어머니")으로 사용되는 경우 이러한 스크립트는 일반적으로 /etc/init.d디렉터리에 있습니다. 이러한 스크립트에는 start서비스 시작, stop서비스 중지 또는 status서비스 상태 쿼리에 사용되는 표준화된 매개변수가 있습니다. 다른 것들도 있습니다.

하지만 작성하는 것이 지루했기 때문에 /etc/init.d/<service name> <action parameter>누군가 간단한 래퍼 스크립트를 만들었습니다. service <name> <action parameter>원래 의미는 just였습니다 /etc/init.d/<name> <action parameter>.

systemdSysVinit가 보다 현대적인 대체품(또는 다른 방법)으로 교체되면 친숙한 명령을 유지하고 해당 시스템 명령에 대한 래퍼로 사용하고 upstart싶을 것입니다 . 사용될 때 , 그것은 일반적으로 단지 포장입니다 . 매개변수 순서의 변경 사항에 유의하세요.serviceinitsystemdservice <name> <action parameter>systemctl <action parameter> <name>

답변2

"모드"는 쉘의 구문에 의해 지정됩니다. 간단한 경우에는주문하다(아니면,유용), 이어서논쟁. 매개변수는 다음과 같습니다.옵션, 옵션은 다음과 같습니다.옵션 매개변수. 옵션 뒤에 다른 옵션이 있을 수 있습니다.피연산자.

예:

ls -l dir

ls이는 명령, -l옵션(옵션 매개변수 없음) dir및 피연산자입니다. 요약 섹션에서 유틸리티가 호출되는 순서를 설명하는 설명서를 읽었기 때문에 이것이 dir옵션의 옵션 매개변수가 아니라는 것을 알고 있습니다 .-lls

예:

git commit -p

git명령 이름 뒤에 옵션이 없으므로 나머지는 피연산자로 처리됩니다. git이것을 설명하는 것은 명령에 달려 있습니다 . 원할 경우 commit피연산자를 "하위 명령", -p하위 명령을 "옵션"이라고 부를 수도 있습니다.

예:

cc -o code.o -Wall code.c

여기에 cc명령이 있고 옵션이 -o있습니다 -Wall. 이 -o옵션은 code.o옵션 매개변수로 사용됩니다. cc명령 에 따라 -Wall옵션은 실제로 구문 분석될 수 있습니다 -W all. 즉, 옵션 인수가 있는 옵션으로 구문 분석될 수 있습니다(단일 문자 옵션은 옵션 인수 앞에 공백이 필요하지 않습니다). code.c모든 옵션 뒤에 나타나기 때문에 피연산자입니다.

"매개변수", "옵션" 및 "옵션 매개변수"라는 단어는 다음과 같습니다.POSIX 표준. 명령은 단순, 목록, 복합, 파이프 등이 될 수 있으므로 표준에서는 "명령" 대신 "유틸리티"라는 단어를 사용합니다. 예 ls -l dir를 들어,하나의 (간단한) 명령이 유틸리티를 사용 ls하여{ head -n 20 | tail -n 5; } >file복합 명령파이프와 두 개의 간단한 명령이 포함되어 있습니다.


모든 유틸리티 호출은 말하자면 "작업"입니다. 이는 " killall myprog피연산자를 사용하여 유틸리티를 시작합니다"를 의미합니다. 이 경우 유틸리티가 프로세스에 신호를 보내는 효과가 있습니다.killallmyprog

마찬가지로 유틸리티는 및 두 개의 피연산자로 호출됩니다 service restart nginx. 그 결과 서비스가 다시 시작됩니다.servicerestartnginxnginx

마찬가지로 편집자를 호출하는 nano somedoc동작 등이 있습니다.nano

답변3

우선 유닉스 철학은 모든 것이 파일이라는 것이다. 모든 명령에서는 하드 디스크에 있는 파일만 처리 mytextfile하거나 nginxopenvpn다 처리합니다.

이제 파일이 나타내는 내용과 파일로 수행할 수 있는 작업은 관례에 의해서만 결정됩니다. 때때로 다른 운영 체제의 파일에는 해당 파일의 기능을 더 잘 설명하기 위한 확장자가 있습니다. 편집할 수 있는 텍스트 파일의 끝이 끝인 것처럼 .txt프로그램 .sh도 또는 .php.pl이 될 것입니다. 그러나 관례에 따라서만( x실행에 사용되는 유닉스 비트는 데이터가 무엇인지 실행 가능한 것이 무엇인지에 대한 또 다른 힌트입니다)

당신이 나열하는 것은 다른 객체/파일( , , )에 대한 작업( , , )입니다 nano.service restartkillallmytextfilenginxopenvpn

선택한 작업과 개체에 따라 결과가 달라집니다. 또한 "현재 위치"라는 파일을 nano openvpn편집하거나 생성하는 이 작업을 수행할 수도 있습니다 openvpn(이는 쓸모없고 방해가 될 수 있지만 도구에서는 이를 금지하지 않습니다).

이제 구체적인 행동에 대해 이야기해 보세요.

  • nano모든 파일의 내용을 수정하기 위한 텍스트 편집기입니다(물론 바이너리 파일인 경우 - 일부 실행 파일과 같지만 전부는 아님 - 유용한 작업을 수행하는 데 잘못된 도구가 됩니다)
  • service restart시스템의 현재 프레임워크를 사용하여 수명이 긴 프로세스(데몬이라고도 함) 시작/중지를 처리하는 다시 시작 "하위 작업"이 포함된 작업입니다. 이는 많은 경우 중 하나일 뿐이며 /etc/init.d/nginx restart다른 곳에서도 발생할 수 있습니다. , 또는 systemctl restart nginx.service; 하위 작업으로 존재한다는 사실은 restart해당 명령에만 해당됩니다 service. 모든 명령은 다른 스위치, 매개변수, 하위 작업 등을 사용하여 다른 구문을 가질 수 있습니다. 아무도 그것들을 모두 기억할 수는 없습니다.
  • 현재 실행 중인 모든 프로세스의 목록을 보고 주어진 이름과 일치하는 프로세스를 종료하는 명령 입니다 killall(약간의 경고: 이 명령은 모든 Unix 시스템에서 동일한 작업을 수행하지 않으므로 호스트에서 설명서를 읽으십시오). 사용하기 전에) 실제로 디스크에 파일로 존재하는 이름이 아닌 어떤 이름이라도 제공할 수 있습니다.

귀하의 용어 중 상당수는 동의어이며 느슨하게 정의되어 있습니다. 애플리케이션은 실행(실행)될 수 있는 모든 것이며, 실행될 때 다른 많은 프로세스 중에서 커널에 의해 처리되는 프로세스입니다. 웹 서버와 같은 네트워크 애플리케이션과 같이 일반적으로 직접 사용자 제어를 받지 않는 수명이 긴 애플리케이션은 과거에는 데몬이라고 불리며 현재는 서비스라고도 합니다( systemctl자세한 내용은 위의 예제 구문 참조).

이런 내용은 하나도 기억할 필요가 없습니다. nginx웹 서버를 사용하는 경우 웹 서버를 다시 시작하고 특정 플랫폼 등에서 다시 시작해야 하는 것처럼 이를 사용하여 학습하게 됩니다 service restart.

답변4

다음과 같은 표준 규칙이 있지만

개발자가 규칙을 깨고 어떤 이유로든 원하는 구문을 사용하는 것을 막을 수 있는 방법은 없습니다. 따라서 실제로는 당시 사용 중인 애플리케이션에 따라 다릅니다.

-v일반적으로 위에 링크된 GNU 표준은 매우 일반적이라는 것을 알게 될 것이며, 시간이 지나면서 많은 명령이 유사한 작업(예: 자세한 출력 인쇄) 에 유사한 매개변수를 사용한다는 것을 알게 될 것입니다.

이것들을 기억하는 것에 대해 걱정하지 마십시오. 정기적으로 사용하는 응용 프로그램의 경우 결국 구문을 익히게 되고 결국에는 제2의 천성이 될 것입니다. 익숙하지 않은 응용 프로그램에 대한 매뉴얼 페이지나 플래그가 항상 있습니다 --help.

기본 명령의 기능을 전반적으로 이해하고 매뉴얼 페이지를 열고 신속하게 구문 분석할 수 있는 것은 각 명령에 대한 플래그를 기억하는 것보다 훨씬 더 중요합니다.

관련 정보