모든 명령어를 설명하긴 힘드니까 내가 쭉 보고 중요하다 생각드는 명령어만 설명할게
| 1. exec | 2.free | 3.jobs | 4.kill | 5.crontab | 6. logrotate | 7.nohup | 8. pgrep | 9. ps | |
주어진 명령어를 실행하는데 새로운 프로세스를 생성하지 않고, 쉘 프로세스를 대체한다
이렇게 말하면 뭔소린지 모르겠지
일반적으로 CLI에서 우리가 명령을 실행하면
bash (부모 프로세스)
└── ls (자식 프로세스)
이런식으로 /bash하위에있는 명령어를 실행한단말이야?
그럼 여기에서 프로그램을 실행하면 프로그램실행이 마치면 bash로 돌아오겠지?
즉 쉘이 살아있다는말이야
exec로 실행하면? - bash가 사라지고 그 자리에 실행할 프로그램이 들어가
즉 새로운 프로세스를 만들지않고 현재쉘이 그 명령으로 변한다는말이야
명령 종료후엔 bash가 없기때문에 쉘로 돌아오지 않는거지
[root@masternode ~]# exec echo "aa"
aa
자 이걸 그래서 어디다 쓰냐
쉘이 남아있을 필요가 없을때
ex) Docker entrypoint에 많이씀
- 스크립트가 끝나고 그 프로그램만 돌면되는데 쉘이 살아있어서 애매하다? 그럼 exec를 하는거야
==================================================================================
메모리 사용량을 확인하는 명령어
주요옵션
| 옵션 | 내용 |
| -h | 사람이 읽을 수 있는 GB, MB, KB 형태로 변경하여 출력 |
| -s (second) | 지정한 초(second)마다 이용량 출력 |
메모리 사용량 확인
| 이름 | 내용 |
| total | 전체 메모리 용량 |
| used | 사용중이 메모리 용량 |
| free | 유휴 메모리 용량 |
| shared | 공유 메모리 용량, 프로세서, 스레드간 통신을 위해 사용 |
| buffers | 버퍼 메모리 용량. 파일 저장을 위한 임시 저장 공간 등 |
| cached | 캐쉬 메모리 용량. 자주사용하는 데이터를 메모리에 캐싱하여 io 속도 증가 |
$ free
total used free shared buffers cached
Mem: 3921016 1925576 1995440 144 159096 999700
-/+ buffers/cache: 766780 3154236
Swap: 0 0 0
$ free -h
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 748M 3.0G
Swap: 0B 0B 0B
-s 옵션으로 주기적인 메모리 사용량 확인
# 1초에 한번씩 메모리 사용량 출력
$ free -h -s 1
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 748M 3.0G
Swap: 0B 0B 0B
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 748M 3.0G
Swap: 0B 0B 0B
$ watch free -h
Every 2.0s: free -h Wed May 8 01:32:49 2019
total used free shared buffers cached
Mem: 3.7G 1.8G 1.9G 144K 155M 976M
-/+ buffers/cache: 750M 3.0G
Swap: 0B 0B 0B
=======================================================================================
현재 계정에서 실행중인 작업을 표시
주요 옵션
| 옵션 | 내용 |
| -l | 프로세스ID를 표시 |
프로세스 상태
| 상태 | 내용 |
| Running | 실행 중 |
| Stopped | 일시중단 (Ctrl + Z ) |
| Terminated | 강제 종료 (kill 명령 종료) |
| Done | 정상 종료 |
# 실행중인 프로세스를 표시
$ jobs
[1] Stopped watch date
[2] Stopped watch date
[3] Stopped watch date
[4]- Stopped watch date
[5]+ Stopped watch date
# 실행 중인 프로세스의 PID 확인
$ jobs -l
[1] 18129 Stopped watch date
[2] 18188 Stopped watch date
[3] 19726 Stopped watch date
[4]- 19741 Stopped watch date
[5]+ 19751 Stopped watch date
=========================================================================================
프로세스를 종료
kill은 프로세스에 시그널을 전송함.
시그널을 생략하면 TERM 시그널을 전송하여 프로세스를 종료한다
-9 옵션을 이용하여 프로세스를 강제 종료하는 경우도 많음
시그널 없이 프로세스를 종료하면 프로세스에게 종료를 통지하기 때문에 프로세스가 종료에 따른 후속처리를 진행하고 종료한다.
-9 옵션을 이용하면 프로세스가 종료에 따른 후속처리 없이 종료된다.
예를 들어 프로세스의 종료에 따라 pid 파일, lock 파일을 삭제하는 후속 처리가 있다면 -9 옵션을 이용하면 해당 파일을 삭제하지 않고 종료
주요옵션
| 시그널 | 번호 | 설명 |
| HUP | 1 | 프로세스에 재기동을 통지 |
| INT | 2 | 프로세스에 인터럽트를 통지 |
| QUIT | 3 | 프로세스에 종료를 통지 |
| KILL | 9 | 프로세스에 강제 종료를 통지 |
| TERM | 15 | 프로세스에 종료를 통지 |
| STOP | 17 | 프로세스에 중단을 통지 |
| CONT | 19 | 프로세스에 재개를 통지 |
# 잡아이디를 이용한 종료
$ jobs
[1]+ Stopped hive
$ kill -9 %1
# 프로세스 아이디를 이용한 종료
$ ps
PID TTY TIME CMD
15302 pts/0 00:00:00 bash
16357 pts/0 00:00:00 ps
$ kill -9 15302
==========================================================================================
정기적으로 지정한 시간에 실행하고 싶은 명령어를 등록. 스크립트를 등록해도 된다.
등록한 계정의 사용자로 실행되며 다른 사용자의 크론탭을 등록하려면 -u 옵션을 이용
주요옵션
| 옵션 | 설명 |
| -l | 등록된 명령어 리스트 확인 |
| -e | 등록된 명령어를 수정 |
| -r | 등록퇸 크론탭을 삭제 |
| -u | 크론탭을 등록할 사용자 지정 |
크론탭 등록
-e 옵션으로 실행하면 크론탭을 등록하기 위한 파일이 열리고 vi에디터와 동일한 명령으로 필요한 명령어를 등록할 수 있음
# 크론탭을 등록
$ crontab -e
# 등록된 크론탭을 확인
$ crontab -l
크론탭 주기
- 크론탭을 등록할 때는 실행하고자 하는 주기와명령어를 입력
- 주기는 분,시,일,월,요일의 형태로 입력하며 *는 모두를 의미
| 주기 | 비고 |
| 분 | 0 ~ 59 |
| 시 | 0 ~ 23 |
| 일 | 1 ~ 31 |
| 월 | 1 ~ 12 |
| 요일 | 0 ~ 7 (0, 7이 일요일) |
# 입력 형태
분 시 일 월 요일 명령어
# 매 50분에 time.sh 실행
50 * * * * /mnt/usr/time.sh
# 매일 1시에 log 로 끝나는 파일을 찾아서 find.log 파일로 저장
0 1 * * * find -name '*.log' ./ >> /test/log/fin.log
# 5분 마다 program.sh 실행
*/5 * * * * /home/user/program.sh
# 4-10 시 사이에 1시간마다 program.sh 실행
0 4-10/1 * * * /home/user/program.sh
# 매일 1시, 3시에 program.sh 를 실행하고 로그를 저장
# 크론탭에 입력할 때 %는 오류가 발생하기 때문에 역슬래쉬(\)로 감싸 주어야 함
0 1,3 * * /home/user/program.sh >> /home/user/logs/`date -u +\%Y\%m\%d.\%H\%M.log` 2>&1
=========================================================================================
시스템을 운영하다보면 로그가 쌓이게 되는데
이 로그를 정리할 수 있는 명령어가 logrotate임
이 명령어는 데몬이 아니여서 크론탭을 이용하여 주기적으로 로그를 정리하는 명령을 추가해야함
주요옵션
| 옵션 | 내용 |
| -s | 상태 파일 위치 |
| -f | 로그 포맷 옵션 지정 |
로그 포맷
| daily, weekly, monthly, yearly | 처리 주기 |
| rotate | 정리 주기 |
| dateext | 일자로 파일 정리 (백엉ㅂ파일에 날짜붙임) |
| compress | 압축 |
| notifempty | 파일사이즈가 0이면 처리 안함 |
| create | 정리한 로그파일의 권한설정 |
| copytruncate | 로그를 정리하고 파일 사이즈를 0으로 변경 |
| olddir | 정리한 로그를 저장할 위치 |
/home/deploy/tomcat/logs/weblog.log
{
daily
dateext
compress
rotate 14
notifempty
create 644 deploy deploy
copytruncate
olddir /home/deploy/tmocat/backup
}
# 실행
logrotate -s /home/deploy/logstatus -f /home/deploy/logconf.conf
# 실행 후
# 다음과 같이 로그 처리 압축파일이 생성 됨
total 6000
-rw-r--r-- 1 deploy deploy 4350 Dec 3 17:51 airflow-scheduler.err
-rw-r--r-- 1 deploy deploy 480 Dec 1 11:35 airflow-scheduler.err-20211201.gz
-rw-r--r-- 1 deploy deploy 457 Dec 2 01:00 airflow-scheduler.err-20211202.gz
-rw-r--r-- 1 deploy deploy 97415 Dec 3 22:58 airflow-scheduler.log
-rw-r--r-- 1 deploy deploy 235222 Dec 1 12:27 airflow-scheduler.log-20211201.gz
-rw-r--r-- 1 deploy deploy 6187 Dec 1 23:57 airflow-scheduler.log-20211202.gz
-rw-r--r-- 1 deploy deploy 142176 Dec 3 22:58 airflow-scheduler.out
-rw-r--r-- 1 deploy deploy 8345 Dec 1 12:27 airflow-scheduler.out-20211201.gz
-rw-r--r-- 1 deploy deploy 6875 Dec 1 23:57 airflow-scheduler.out-20211202.gz
==========================================================================================
리눅스에서 프로그램을 실행할 때 사용자의 세션에서 끊어지면(hangup) 프로그램도 함께 종료
처리에 오랜 시간이 걸리는 프로그램을 실행 할 때 nohup을 이용하여 사용자의 세션이 끊어져도 프로그램은 계쏙 실행되도록 할 수 있음
사용예제
nohup 명령을 이용할 때 포어그라운드로 실행하게 되면 다른 작업을 처리할 수 없기 때문에 &를 이용하여 백그라운드로 실행하는 것이 좋다
# test.sh 실행, 표준 출력이 nohup.out 으로 저장
$ nohup test.sh &
# test.sh를 실행하고 표준 출력을 test.log에 저장
$ nohup test.sh > test.log &
nohup.out 파일 정리
nohup 명령을 이용해서 작업을 진행하면 stdout 로그가 기본적으로 nohupo.out 파일로 저장이 된다
실행시간이 오래되면 이 파일의 용량이 커져서 정리가 필요하다
이때는
※ /dev/null을 이용하여 파일 내용을 삭제할 수 있다
cat /dev/null > nohup.out
===========================================================================================
ps와 grep 명령을 동시에 실행하는것과 같은 명령어 - 지정한 형식에 맞는 프로세스 번호를 반환함
주요 옵션
| 옵션 | 설명 |
| -f | 풀 커맨드라인으로 검색 ( 긴 명령어 포함 ) |
| -l | 프로세스 이름까지 출력 |
| -u user | 특정 사용자 프로세스만 검색 |
| -x | 완전히 일치하는 이름만 검색 |
| -t try | 특정 터미널에서 실행된 프로세스 검색 |
pgrep -l ssh
출력
1024 sshd
2048 ssh-agent
# java 클래스 명으로 찾을 때
# 플링크 프로세스를 찾을 때 -f옵션 이 없으면 결과가 나타나지 않음 org.apache.flink.runtime.taskexecutor.TaskManagerRunner
$ pgrep org.apache.flink.runtime.taskexecutor.TaskManagerRunner
$ pgrep -f org.apache.flink.runtime.taskexecutor.TaskManagerRunner
24065
==========================================================================================
| Linux 기초 (주요 디렉토리 및 언어설정) (0) | 2025.12.03 |
|---|---|
| Linux 기초 (패키지 설치, {rpm, deb} 파일) (0) | 2025.12.03 |
| Linux 기초 ( 운영체제, 커널, 쉘, 프로세스) (0) | 2025.12.03 |