본문 바로가기

TIL

TIL) 쉘 스크립트, linux screen 명령어

1. 쉘

 

컴퓨터를 이용해서 개발할 때에는 소프트웨어와 하드웨어가 존재한다.

리눅스의 커널 이란 것은 하드웨어의 통제권을 가지며 소프트웨어 에플리케이션과 상호작용하며, 하드웨어 자원을 할당하고 사용하게 해준다.

뭐 쉽게말해서, 자바 서버 하나 띄우면, 결국에 그 컴퓨터의 CPU 와 메모리 등등 하드웨어 자원을 사용하게 될 텐데, 커널에게 가서

자바 에플리케이션 : 좀 사용하게 해줘 !
커널 : 자 여기 너가 쓸 CPU 랑 메모리.

라고 하는 것이다.

 

이 커널이란 것은, 컴퓨터 외계인이라 사람말을 알아듣지 못한다. 우리가 하드웨어 자원이 필요해서 커널에게 말을 걸고 싶으면, 커널이 알아들을 수 있는 말로 통역해주는 통역사가 필요하다.

이를 쉘 이라고 한다.

 

쉘 : 유닉스 계열의 시스템에서 사용하는 대화형 인터페이스. 사용자와 커널 사이에서 사용자의 입력을 받아서 명령을 해석하여 커널에 전달하고 결과를 사용자에게 반환.

 

 

이 쉘이라 하는 대화형 인터페이스의 종류 중에  리눅스의 표준으로 정해저 가장 잘 알려져 있는 쉘이

Bash 쉘 이다.

(나는 Z 쉘을 사용한다. Bash 쉘보다 편리한 점이 많다.)

 

 

리눅스 쉘이라 하면 공부할 것이 책으로 산을 쌓겠지만, 오늘 이야기 할 것은,

쉘에서 bash 명령어와 source 명령어의 차이이다.

 

 

 

 

 

1-1. bash vs source

이 두 명령어는 모두 .sh 파일 (쉘 스크립트) 를 실행하는 역할을 한다.

$ bash hello.sh
$ source hello.sh

 

차이 1 : 쉘 생성

bash :: 해당 쉘에 종속된 다른 자식 쉘을 새로 만들어서 실행한다. 부모 쉘이 종료되면 자식 쉘도 모두 종료된다.

source :: 새로운 쉘을 만들지 않고 해당 쉘에서 스크립트를 실행한다. (쉘이 총 하나로 돌아가는 것.)

 

 

차이 2 : 환경변수 접근 범위

source :: 스크립트 안에서 선언한 환경 변수를 스크립트 밖에서 사용 가능하다. 어짜피 하나의 쉘이기 때문.

bash :: 스크립트 안에서 선언한 환경 변수는 스크립트 밖에서 접근할 수 없다. 다른 자식 쉘을 새로 생성했기 때문에, 다른 쉘에 접근 못한다고 생각하면 되겠다. export 명령어를 통해 접근을 설정해줘야 한다. 

 

 

차이 3 : cd 명령

source :: 안쪽 스크립트에서 cd 하면 밖의 스크립트에서도 적용 유지된다.

bash :: 안쪽 스크립트에서 cd 해도 밖의 스크립트에는 영향이 없다. 다른 쉘이기 때문에.

 

 

결국에 새로은 쉘을 생성하냐, 기존의 쉘에서 스크립트를 사용하냐의 차이인 듯 하다.

 

기억할 점은,

1. source 는 기존의 쉘을 사용한다. 이는 bash 안의 명령이라는 것이며, 따로 쉘을 생성하는 명령어가 아니기 때문에, bash 로 실행할 스크립트 내부에서  사용해야 한다는 것이다.

2. source hello.sh 는 . hello.sh 와 같다. 온점 = source 이다. 

 

 

 

 

 

2. screen 명령어

서비스를 백그라운드에서 돌리면서, 필요할 때 마다 포어그라운드로 가지고 오는 명령어.

 

오래 걸리거나 하는 서비스라, 세션이 종료되어 프로그램이 종료되면 안되는 작업을 할 때.

그렇다고, 완전히 백그라운드로 돌리기에는 진행상황이나 로그를 봐야하는 상황에서 쓰기 좋은 명령어이다.

 

서비스를 백 그라운드에서 실행하고, 해당 서비스를 실행하고 있는 창을 screen 이 백 그라운드에서 잡고 보고 있다가, 우리가 필요할 때 다시 켜서 보는 느낌 ? 이라 하면 될 듯 하다.

 

 

screen -S [스크린 이름] : screen에 세션 이름을 지정하며 진입.

 

screen -R [스크린 이름] : screen이 존재한다면 다시 진입(Reattach)하고, screen이 없다면 해당 세션 이름을 만들며 진입.

 

screen -ls (screen -list) : 현재 존재하는 스크린 리스트 출력

 

screen -x [스크린 이름] : 실행 중인 스크린에 다시 진입(Reattach). (-R 옵션은 Single display mode, -x 옵션은 Multi display mode이다. 즉, -R옵션은 해당 스크린에 여러 명이 들어가도 서로 무슨 명령을 치는지 모르지만, -x 옵션은 해당 스크린에 여러명이 들어가도 마치 한 화면처럼 움직여, 상대방이 무슨 명령어를 치는지까지 다 볼 수 있다.)

 

screen -S [스크린 이름] -X quit : 해당 스크린 종료 (해당 스크린 삭제됨). [스크린이름] 대신 스크린 번호를 써도 된다.

또는 사용하고 있는 스크린에서 모든 창을 exit으로 꺼버려도 해당 스크린은 종료됩니다.

 

https://bio-info.tistory.com/42

 

[리눅스] screen(스크린) 사용법, screenrc

Screen이란? Screen이란 Linux에서 독립적으로 동작하는 가상 터미널을 띄워주는 것을 의미합니다. 즉, 백그라운드로 동작하는 가상 터미널입니다. 장점: 스크린에서 명령어를 실행시키고 터미널을

bio-info.tistory.com