상세 컨텐츠

본문 제목

Linux 주요 명령어

기술공부/Linux

by helpilsang 2025. 12. 3. 11:50

본문

모든 명령어를 설명하긴 힘드니까 내가 쭉 보고 중요하다 생각드는 명령어만 설명할게

1. exec 2.free 3.jobs 4.kill 5.crontab 6. logrotate 7.nohup 8. pgrep 9. ps  
                   
                   
                   

 

 

1. exec

주어진 명령어를 실행하는데 새로운 프로세스를 생성하지 않고, 쉘 프로세스를 대체한다

이렇게 말하면 뭔소린지 모르겠지
일반적으로 CLI에서 우리가 명령을 실행하면

bash (부모 프로세스)
  └── ls (자식 프로세스)

이런식으로 /bash하위에있는 명령어를 실행한단말이야?
그럼 여기에서 프로그램을 실행하면 프로그램실행이 마치면 bash로 돌아오겠지?
즉 쉘이 살아있다는말이야

exec로 실행하면? - bash가 사라지고 그 자리에 실행할 프로그램이 들어가
즉 새로운 프로세스를 만들지않고 현재쉘이 그 명령으로 변한다는말이야
명령 종료후엔 bash가 없기때문에 쉘로 돌아오지 않는거지

[root@masternode ~]# exec echo "aa"
aa

자 이걸 그래서 어디다 쓰냐

쉘이 남아있을 필요가 없을때
ex) Docker entrypoint에 많이씀
- 스크립트가 끝나고 그 프로그램만 돌면되는데 쉘이 살아있어서 애매하다? 그럼 exec를 하는거야

 

==================================================================================

2. free

메모리 사용량을 확인하는 명령어

주요옵션

옵션 내용
-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

 

=======================================================================================

3. jobs

현재 계정에서 실행중인 작업을 표시

주요 옵션

옵션 내용
-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

=========================================================================================

4. kill

프로세스를 종료
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

==========================================================================================

5. crontab

정기적으로 지정한 시간에 실행하고 싶은 명령어를 등록. 스크립트를 등록해도 된다.
등록한 계정의 사용자로 실행되며 다른 사용자의 크론탭을 등록하려면 -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

=========================================================================================

6. logrotate

시스템을 운영하다보면 로그가 쌓이게 되는데 
이 로그를 정리할 수 있는 명령어가 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

==========================================================================================

7. nohup

리눅스에서 프로그램을 실행할 때 사용자의 세션에서 끊어지면(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

===========================================================================================

8. pgrep

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

==========================================================================================

9. ps

 

관련글 더보기