Shell
현재 우리가 사용하는 운영체제(Windows, Mac OS, Android, iOS 등)는 모두 그래픽 인터페이스가 있고 간단하고 직관적이며 손쉽기 쉬우며, 전문 사용자(프로그래머, 웹관 등)와 일반 사용자(주부, 노인 등) 모두에 대한 적용이 가능합니다.
그러나 컴퓨터 초기에는 그래픽 인터페이스가 없어 우리는 명령을 하나씩 밟아가며 통제할 수 밖에 없었고, 이런 명령들이 수백 대에 달했던 것을 기억하기에는 너무 어려웠고, 매일 아무런 색깔도 없는 '블랙스크린'에 직면하는 것 자체가 지루했다.전문 인력이 있어야 사용할 수 있습니다.
초기의 컴퓨터
그림 : 초기의 컴퓨터는, 모두 "흑지·백자"이다.
'시애틀 컴퓨터 박물관에 너를 데려가라'를 강타하면 초기 컴퓨터를 더 많이 감상할 수 있다.
그래픽 인터페이스의 경우 사용자는 어떤 아이콘을 클릭하면 프로그램이 작동하고, 명령행의 경우 사용자가 어떤 프로그램의 이름을 입력하면(명령을 하나 하는 것으로 볼 수 있음) 프로그램이 작동한다.이 둘 모두 기본 과정은 유사하며, 프로그램의 하드 디스크에 있는 설치 위치를 찾아 이들을 메모리에 추가하여 실행하는 것이 필요합니다.
프로그램의 작동 원리에 대해서는,<메모리에 탑재해, 프로그램이 동작하게 해 주세요>를 강타해 주세요.
다시 말해, 그래픽 인터페이스와 명령행이 달성해야 하는 목적은 같은 것으로, 모두 사용자가 컴퓨터를 제어하도록 하는 것이다.
그러나 정작 컴퓨터 하드웨어(CPU, 메모리, 모니터 등)를 제어할 수 있는 것은 운영체제인 케넬(Kernel)뿐이며 그래픽 인터페이스와 명령행은 사용자와 내핵 사이에 놓인 교량일 뿐이다.
운영체제의 역할을 잘 모르면 '운영체계가 뭐길래'로 넘어가세요.
안전, 복잡, 번거로움 등으로 인해 사용자가 내핵에 직접 접근할 수 없고(필요하지도 않음) 사용자가 이를 직접 사용할 수 있게 하는 별도의 프로그램을 개발해야 하며, 이 프로그램은 사용자의 조작(그림을 클릭하여 명령을 입력)하여 간단히 처리하도록 하는 역할을 한다.운영체제로 내핵을 했습니다.보세요, 사용자와 내핵 사이에 "대리"를 추가하면 사용자의 조작을 간소화할 수 있고 내핵의 안전을 보장할 수 있는데 왜 기꺼이 하지 않을까요?
사용자 인터페이스와 명령행은 이것과는 별도로 개발된 프로그램, 바로 이 층의 "대리"이다.Linux 아래에서 이 명령행 프로세스를 Shell이라고 합니다.
Shell은 하나의 응용프로그램으로서, 사용자와 Linux 내핵을 연결하여 사용자가 Linux 내핵을 보다 효율적이고 안전하며 낮은 비용으로 사용할 수 있도록 하는 것이 Shell의 본질입니다.
Shell 자체는 내핵의 일부가 아니며, 내핵의 기초 위에 서서 작성한 하나의 응용프로그램일 뿐 QQ, 천둥, Firefox와 같은 다른 소프트웨어와 다르지 않습니다.그러나 Shell에는 기기를 켜고 바로 작동시켜 사용자 앞에 나타나게 하고, 사용자는 Sh를 통해ell에서 Linux를 사용하고 Shell을 작동하지 않으면 사용자가 Linux를 사용할 수 없습니다.
Shell 사용자와 내핵을 어떻게 연결합니까?
Shell은 사용자가 입력한 명령을 수신하고 명령을 처리하고, 처리가 완료된 후 그 결과를 사용자에게 피드백할 수 있으며, 예를 들어 모니터에 출력하고, 파일에 쓰는 등 이것이 대부분의 독자가 셸을 인지하고 있는 것입니다.보세요, 저는 항상 Shell을 사용하는데 내핵을 사용하는 곳이 어디죠?나도 못 봤어 Shell 나하고 내핵을 연결해주는거야?!
사실 셸 프로그램 자체의 기능은 매우 약하며, 예를 들어 파일 조작, 입출력, 프로세스 관리 등은 모두 내핵에 의존해야 합니다.우리는 명령을 하나 실행하는데 대부분의 경우 Shell 은 내핵으로 노출된 인터페이스를 호출하는데, 이것이 바로 내핵을 사용하는 것이고, 단지 이 과정이 Shell 에 숨겨져 있기 때문에그것은 스스로 뒤에서 묵묵히 진행되어 우리는 볼 수 없을 뿐이다.
인터페이스는 사실 하나의 함수이며, 내핵을 사용하는 것이 이들 함수를 튜닝하는 것입니다.이게 바로 내핵을 사용하는 전부인가요?응, 그래! 함수 말고는 넌 내핵을 사용할 다른 길이 없어.
예를 들어 Shell 에서 cat log.txt 명령을 입력하면 log.txt 파일에 있는 내용을 볼 수 있다는 것을 알고 있지만 log.txt 디스크의 어느 위치에 놓입니까?몇 개의 데이터 블록으로 분할되었습니까?어디서 시작해요 어디서 중지하죠?어떻게 탐촉자를 조작하여 그것을 읽습니까?이 하위 세부 사항 셸은 모두 알지 못하는데, 가서 내핵으로 제공된 open()과 read() 함수를 읽어서 내핵에게 내가 log.txt 파일을 읽어야 한다고 말하고, 나를 도와주십시오.ell 사용자에게 노출(사실 모니터에 나타나려면 아직 의존해야 함)핵). 전체 과정에서 Shell 은 사용자와내핵간에 데이터를 '바꾸다'는 것은 단지 사용자가 모를 뿐이다.
Shell 다른 프로그램도 연결할 수 있음
Shell 에서 입력한 명령 중 일부는 Shell 자체를 가지고 있는 것으로, 이것을 내장 명령이라고 하며, 일부는 다른 응용 프로그램(하나의 프로그램이 하나의 명령인 경우), 이것을 외부 명령이라고 합니다.
Shell 자체에서 지원하는 명령은 많지 않고 기능도 제한적이지만 Shell은 다른 프로세스로 전환할 수 있으며, 각 프로세스는 하나의 명령이며, 이는 Shell 명령의 수를 무한대로 확장하고, 그 결과 Shell의 기능이 매우 강력하고 완전히 승리할 수 있도록 합니다.관리 작업, 예를 들어 텍스트 또는 문자열 검색, 파일 찾기 또는 만들기, 대규모 소프트웨어의 자동 배치, 시스템 설정 변경, 서버 성능 모니터링, 경보 메일 보내기, 웹 페이지 내용 가져오기, 파일 압축 등이 있습니다.
더욱 놀라운 것은 Shell 은 또한 여러 개의 외부 프로그램들을 연결시켜 그들 사이에서 데이터를 편리하게 전달할 수 있다는 것, 즉 한 프로그램의 출력 결과를 다른 프로그램에게 전달하여 입력으로 사용할 수 있다는 것입니다.
여러분이 말하는 Shell 강함은 Shell 자체의 기능이 풍부한 것이 아니라 다른 프로그램을 사용하고 조직하는 데 뛰어납니다.Shell이 바로 리더라는 점이 바로 Shell의 매력입니다.
Shell 전체 Linux 시스템에서의 위상을 다음 그림과 같이 묘사할 수 있습니다.주의 "사용자"와 "다른 응용프로그램"은 점선을 통해 연결되는데, 이는 사용자가 Linux 를 작동시킨 후 직접 대면하는 것이 Shell 을 통해서만 다른 응용프로그램을 실행할 수 있기 때문입니다.
Shell이 전체 리눅스 시스템에서의 위상 표시 의도
Shell에서도 프로그래밍이 지원됨
Shell은 간단한 스택 명령이 아니며, 우리는 또한 Shell에서 프로그래밍할 수 있는데, 이는 C++, C#, Java, Python과 같은 흔한 프로그래밍 언어를 사용하는 것과 다르지 않습니다.
Shell 은 C++, Java, Python 과 같은 강력하지는 않지만 기본적인 프로그래밍 요소, 예를 들어 다음과 같이 지원되었습니다.
if...else 선택 구조, case...in 스위치 어구, for,while,until 순환;
변수, 수 그룹, 문자열, 주석, 더하기, 빼기, 논리적 연산 등의 개념;
함수로서, 사용자가 스스로 정의한 함수와 내장 함수(예를 들어 printf, export, eval 등)를 포함한다.
이 시점에서 Shell 은 일종의 프로그래밍 언어이며, 그것의 컴파일러(해석기)는 Shell 이 프로그램입니다.우리가 평소 말하는 Shell은 사용자와 내핵을 연결하는 이 프로그램을 가리키는 경우도 있고, Shell 프로그래밍을 가리키는 경우도 있습니다.
Shell은 복잡한 업무 논리를 가진 중대형 소프트웨어를 개발하는 대신 주로 실용적이고 자동화된 작은 도구를 개발하는데, 예를 들어 컴퓨터의 하드웨어 파라미터를 검사하고 Web 운영 환경을 구축하는 것, 일지 분석 등을 수행하는 데 매우 적합합니다.
Shell 을 사용하는 숙련도는 Linux 에 대한 사용자의 파악 정도를 반영하며, 운송 엔지니어, 웹 관리자, 프로그래머 모두 Shell 을 배워야 합니다.
특히 Linux 운송 엔지니어는 Shell이 더욱 필수적으로 파악해야 하는 기능으로, 우리가 자동화하여 클러스터를 관리할 수 있도록 해야 하며, 그렇지 않으면 당신은 모든 서버에 하나씩 로그인해야 할 것이고, 아마도 각각의 서버에 대해 동일한 설정을 할 것입니다.많은 시간을 들여 반복적인 작업에 할애합니다.
Shell 은 일종의 스크립트 언어입니다
어떤 코드도 결국 이진법으로 '통역'되어야만 컴퓨터에서 실행될 수 있다.
어떤 프로그래밍 언어는, C/C++, Pascal, Go 언어, 어셈블리와 같이, 프로그램 실행 전에 모든 코드를 이진 형식으로 번역해야 하는, 즉 실행 가능한 파일을 생성하고 사용자가 입수한 것은 최종 실행 가능 파일을 볼 수 없습니다.
이 과정을 컴파일(Compile)이라고 하며, 이러한 프로그래밍 언어를 컴파일러(Compiler)라고 하며, 컴파일러(Compiler)라고 합니다.
어떤 프로그래밍 언어는 Shell, JavaScript, Python, PHP 등과 같이 실행하면서 번역해야 하며 실행 가능한 파일이 하나도 생성되지 않으며 사용자는 소스코드를 가져와야 프로그램을 실행할 수 있습니다.프로그램이 실행되면 즉시 번역하고, 번역을 마치고 일부를 수행하므로, 모든 코드가 번역될 때까지 기다릴 필요가 없습니다.다하다
이 과정을 해석이라고 하며, 이러한 프로그래밍 언어를 해석형 언어 또는 스크립트(스크립트)라고 하며, 해석 과정을 완료하는 소프트웨어를 해석기라고 합니다.
컴파일형 언어의 장점은 실행속도가 빠르고 하드웨어에 대한 요구가 낮으며 기밀성이 좋아 운영체제, 대형 애플리케이션, 데이터베이스 등을 개발하는 데 적합하다는 것이다.
스크립트 언어의 장점은 유연하고 배치가 용이하며 플랫폼성이 뛰어나 Web 개발 및 작은 도구 제작에 매우 적합합니다.
Shell 은 일종의 스크립트 언어이며, 우리는 소스코드를 작성한 후 컴파일하지 않고 소스코드를 실행하면 됩니다.