
안녕하십니까, 갓생을 살고 싶지만 몸이 말을 안듣는 웅쓰입니다.
잠만 자고싶은 몸뚱아리로 오늘은 평소 자주 볼 수 있는 쉘 스크립트 문법을 정리해 보겠습니다.
목차
- >, >>, &
- nohup
1. >, >>, &
개발을 직무로 일 하시는 분들이라면 log의 중요성을 알 것이라 생각한다. 필자는 log의 중요성을 유지보수 프로젝트를 하며 정말 뼈저리게 느꼈다. 실무에서는 다양한 log 파일들이 존재한다. 그리고 필요한 log는 스크립트를 통해 만들어야 한다. 이 때, 이번에 정리할 >, >>, &가 많이 사용된다고 느꼈다. 자, 그럼 log 파일 작성하는데 위 문법이 왜 필요할까? 용도를 알아보자.
1) >
'>'는 표준 출력을 파일로 리다이렉트한다. 기존 파일 내용을 지우고 새로운 내용을 덮어쓴다. 말 그대로 덮어쓰기를 하는 문자다. 기호의 왼쪽에 있는 내용을 오른쪽에 덮어쓴다고 생각하면 된다.
2) >>
'>>'는 표준 출력을 파일로 리다이렉트하되, 기존 내용 끝에 추가한다. 즉, 이건 이어쓰기라고 생각하면 된다. 그리고 파일이 존재하지 않을 경우 새 파일을 생성한다
3) &
'&'는 백그라운드 실행 표시이다. 뒤에 나올 nohup과도 같이 사용이 되는데, 필자는 그런 다른 상황에서 사용되는 내용을 정리하려 한다. 바로 다음과 같은 상황이다.
start.sh >> start.log 2>&1
자, 위와 같은 스크립트가 있다며 어떻게 해석해야 하나? 우선 배운대로면 start.sh의 실행 내용을 start.log라는 파일에 이어쓴다는 뜻이고....... 그 뒤에 있는 내용은 과연 무엇일까? 놀랍게도 start.sh의 정상적인 출력 내용과 에러 내용 모두 start.log에 이어쓰기 한다는 의미다. 즉, 2>&1을 사용하지 않으면 에러 내용은 start.log에 작성되지 않는다...! that's why the contents start with log story(영어 한 번 써보고 싶었습니다. 문법 이상하면 말씀해주십쇼.)
위 코드에서 1은 표준 출력을 가리키고 2는 표준 에러를 가리킨다. 이 때, 그럼 2>1 이렇게 하면 되지 않나? 라는 의문점을 가질 수 있는데, 그렇게 하면 위에서 말한 2라는 내용을 1이라는 파일에 덮어쓰기 하라는 말이 된다.
여기서 &는 쉘에게 바로 뒤에 오는 숫자를 파일 이름이 아닌 파일 디스크립터로 해석하라고 지시한다. 그래서 1은 표준 출력이라고 했으니 &1은 표준 출력의 파일 디스크립터를 나타내고 결과적으로 2>&1은 2(표준 에러)가 &1(표준 출력)과 같은 목적지에 작성된다고 해석하면 된다.
원래 >는 덮어쓰기의 의미를 가진다고 했지만 파일 이름이 아닌 파일 디스크립터와 함께 사용하면 해당 디스크립터의 목적지와 같은 곳을 바라보겠다!라고 생각하면 된다.(사실 이 부분은 공부를 조금 더 해야될 것 같다...애매하다..) 그래서 표준 에러가 표준 출력이 바라보고 있는 start.log 목적지에 기록된다고 보면 된다.
굉장히 복잡하게 작성했지만 한 마디로 표현하면 그냥 정상적인 내용, 에러 내용들을 모두 start.log에 담겠다!라는 의미로 사용된다 이해하면 된다.
2. nohup
nohup 명령어는 "no hangup"의 약자로, 터미널 세션이 종료되거나 로그아웃한 후에도 프로세스가 계속 실행되도록 하는 유닉스와 유닉스 계열 시스템에서 사용하는 명령어다. 이 명령어를 사용하면 백그라운드에서 독립적으로 작업을 계속 수행할 수 있다. 만약 내가 batch_script.sh라는 이름을 가진 배치 프로세스를 계속 실행해야 된다면 다음과 같이 명령어를 실행하면 된다.
nohup ./batch_script.sh &
위 명령어를 실행하고 ps -ef | grep batch_script로 검색하면 프로세스가 수행되고 있다는 것을 확인할 수 있다.
'인프라' 카테고리의 다른 글
리눅스 user 생성 및 UID, GID 설정 (0) | 2025.03.14 |
---|---|
맥북 m2 가상머신(UTM) 설치(실패부터 성공까지..) (0) | 2025.03.10 |
Linux 기본 명령어 last, lastlog (2) | 2024.11.25 |
Linux 기본 명령어 df, du (0) | 2024.11.24 |
Hosts 파일을 수정하여 도메인 등록하기 (3) | 2024.11.19 |