포스팅은 모두의 리눅스에 기반하여 작성되었습니다. 실습 환경 Oracle VM 7.0, Linux/Ubuntu 20.04 입니다.
리눅스를 공부하기 앞서 Q&A
Q. 리눅스를 배우는 이유가 무엇인가요?
A. 프로젝트를 진행하다보면 서버에 직접들어가 파일을 확인해야하는 경우도 있고 외부에서 리눅스 명령어 기반의 스크립트를 작성해야 하는 경우가 있었어요. 그럴때마다 구글링을 해서 사용했는데요. 리눅스를 잘 모른채로 사용하다보니 이게 어떤 의미인지 정확히 파악하지 않고 사용하는 경우가 많았습니다. 리눅스 공부를 통해 효율적으로 명령어를 입력하고 셸 스크립트르 잘 작성하는 것이 제가 리눅스를 공부하는 이유입니다.
셸의 역할과 리눅스 커널
위와 같이 date 명령어를 실행하면 리눅스 내부에서는 다음과 같은 일이 일어납니다.
1. 키보드로 입력한 date 문자열을 받아들입니다.
2. date 명령어를 찾습니다.
3. 발견한 명령어를 실행합니다.
4. 실행한 결과로 얻은 문자열을 화면에 표시합니다.
이 중에서 3번 과정은 리눅스의 커널이 수행합니다. 커널은 운영 체제의 중심에서 CPU, 메모리와 같은 하드웨어를 관리하면서 명령어를 실행하고 프로세스를 관리합니다.
리눅스에서 사용자는 커널을 직접 조작할 수 없습니다. 그렇기 때문에 사용자와 커널이 의사소통 할 수 있도록 만드는 소프트웨어가 필요하고 이것이 바로 셸입니다. 즉, 셸은 커널의 인터페이스에 해당합니다.
위 과정을 예로 들면 우리가 date를 셸에 입력하면(1번 과정)
셸은 date 명령어를 찾아(2번 과정) 커널에 실행을 요청합니다.
이후 결과를 커널에서 전달받아 셸이 사용자가 볼 수 있도록 화면에 띄워줍니다.(4번 과정)
참고) 셸과 커널이 나뉘어진 이유
셸과 커널을 분리하면 다음과 같은 이점이 있습니다 .(뭔가 객체 지향의 장점과 비슷하다.)
1. 커널을 바꾸지 않고 셸만 바꿀 수 있습니다.
2. 다른 OS를 사용할 때도 셸만 이식하면 똑같이 사용할 수 있습니다.
3. 셸을 사용할 때 에러가 발생하거나 지나치게 높은 부하가 발생해도 커널에 미치는 영향을 최소화 할 수 있습니다.
프롬프트
이를 셸의 프롬프트라고 부릅니다. 프롬프트는 사용자에게 어떤 결정을 내리도록 한다는 의미이다. 즉 프롬프트가 보이면 사용자의 명령어를 받아들일 준비가 되었음을 나타냅니다.
프롬프트 앞에 있는 $를 프롬프트 기호라고 부릅니다. 사용자(root 권한을 가진), 배포판마다 프롬프트 기호가 달라질 수 있습니다.
셸 스크립트
이처럼 명령어를 직접 입력하고 그 결과를 확인하는 조작 방식을 대화형(인터렉티브) 방식이라고 부릅니다.
이에 반해 실행하고 싶은 명령어들을 미리 파일에 기록하고 그 파일을 셸에 넘겨주는 방식으로 명령을 수행할 수도 있습니다. 애플리케이션 개발을 할 때도 서버 내 프록시 서버나 CI/CD 환경을 구축하기 위해서 스크립트를 작성하는 일이 종종있습니다.
'Linux' 카테고리의 다른 글
모두의 리눅스 (5) 잡/프로세스 종료 (0) | 2023.05.27 |
---|---|
Linux ps 명령어 정리 (1) | 2023.05.27 |
모두의 리눅스 (4) 프로세스와 잡 (0) | 2023.05.27 |
모두의 리눅스 (3) 파일 검색 및 명령어 find, man (0) | 2023.05.24 |
모두의 리눅스 (2) 파일 조작 기본 명령어 mkdir, touch, rm, rmdir, cat, cp, mv, ln (0) | 2023.05.24 |