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
'TIL' 카테고리의 다른 글
TIL) @SqlResultSetMapping, Kotlin-Fold, Reduce (0) | 2022.02.05 |
---|---|
TIL) cherry-pick 외 git 각종 취소 명령어들, ORIG_HEAD (0) | 2022.02.03 |
TIL) pull or Merge 취소, SFTP 서버제공 사이트, CONTENT_DISPOSITION, @Async (0) | 2021.12.29 |
TIL) 객체의 커스텀 직렬화 (0) | 2021.11.21 |
TIL) 터미널에서 sftp 접속, Jackson2HttpMessageConverter (0) | 2021.11.20 |