Linux - 관리 명령어 (명령어)

hoegon kim·2022년 10월 25일
0

Linux

목록 보기
6/6
post-thumbnail

1. 관리명령어

프로세스, 메모리, 파일시스템 관리를 위한 명령어 입니다. 시스템 운영을 위해 필요한 명령어 입니다.

1) 시스템 관리

프로세스, 메모리 관리를 위한 명령어 입니다.

crontab

정기적으로 지정한 시간에 실행하고 싶은 명령어를 등록합니다. 스크립트를 등록해도 됩니다.

주요 옵션

옵션 설명
-l 등록된 명령어 리스트 확인
-e 등록된 명령어를 수정

사용예제


크론탭 등록


-e 옵션으로 실행하면 크론탭을 등록하기 위한 파일이 열립니다. vi 에디터와 동일한 명령으로 필요한 명령어를 등록할 수 있습니다.

# 크론탭을 등록
$ crontab -e

# 등록된 크론탭을 확인
$ crontab -1

크론탭 주기


크론탭을 등록할 때는 실행하고자 하는 주기와 명령어를 입력합니다. 주기는 분, 시, 일, 월, 요일 형태로 입력합니다. *는 모두를 의미합니다. 매분, 매시, 매일, 모든 요일에 실행하고 싶을 때 사용하면 됩니다.

주기 비고
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' ./ >> /text/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

echo 로 크론탭 등록

크론탭을 일괄로 등록하고 싶을 때 echo명령을 이용하여 처리할 수 있습니다. /var/spool/cron/유저명 에 유저별 크론탭이 있습니다 여기에 넣어주면 crontab -e와 동일한 효과를 얻을 수 있습니다.

sudo bash -c 'echo \"
# hadoop log cleansing
0 1 * * * find /var/log/hadoop -not -name \"*.gz\" -type f -mtime +2 -exec gzip {} \;
0 1 * * * find /var/log/hadoop -name \"*.gz\" -mtime +14 -delete \" >> /var/spool/cron/user_name'

크론탭 위치


크론탭 파일은 OS에 따라 위치가 다를 수 있습니다.

  • CentOs
    - /var/spool/cron/유저명
  • Ubuntu
    - /var/spool/cron/crontab/유저명

exec

주어진 명령어를 실행하는데 새로운 프로세스를 생성하지 않고, 셀 프로세스를 대체합니다. 예를 들어 bash쉘에서 자바 프로그램을 실행하면 자바 프로그램의 ppid가 bash쉘이 되고, 자바 프로그램이 bash쉘의 하위 프로세스로 실행됩니다. exec 커맨드로 실행하면 bash쉘의 프로세스가 자바 프로그램이 됩니다. ppid가 따로 업습니다. 그리고 자바 프로그램이 종료되면 프로세스가 종료됩니다. bash쉘로 돌아오지 않습니다.

다음의 상황을 살펴보면 macbook에서 masternode로 접근하여 echo를 실행하면 masternode의 bash쉘 입니다. exec로 명령을 실행하면 bash쉘이 echo 명령으로 대체되고, 종료되면 bash쉘이 없기 때문에 다시 macbook으로 돌아옵니다.

➜  macbook ✗ ssh root@masternode
[root@masternode ~]# echo "aa"
aa
[root@masternode ~]# exec echo "aa"
aa
➜  macbook ✗

주요옵션


옵션 내용
-c 환경 변수가 없는 상태로 실행
-a [name] 0번째 인수로 이름을 전달
-l 0번째 인수로 대쉬를 전달

사용예제

$ exec echo "aa"
aa

$ exec java -cp '/etc/hadoop/conf' org.apache.hadoop.hdfs.server.datanode.SecureDataNodeStarter

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 옵션을 이용하는 방법과 watch 명령을 이용하는 방법이 있습니다.

# 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

htop


htop은 top보다 사에하게 운영체제의 상태를 모니터링할 수 있는 도구입니다. 설치되어 있지 않은 경우 따로 설치를 하셔야합니다.

설치


# centos
yum install htop

# ubuntu
apt install htop

실행


펑션키를 이용하여 트리구조로 프로세스를 확인하거나 목록으로 확인할 수 있습니다. 메모리, CPU 사용률로 프로세스를 정렬할 수 도 있습니다.

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

journalctl


systemctl 로 실행한 systemd의 로그를 확인할 수 있는 명령어 입니다.

주요옵션


옵션 내용
-u 로그를 출력할 유닛을 지정
-o 출력 형식을 지정. (short, short-iso)
-f 신규로 추가 되는 로그를 출력

출력형식


옵션 내용
short 기본값. 한 행에 하나의 Log만 출력
short-iso 기본값에 ISO 8601의 시간 형식으로 출력
short-precise 기본값에 마이크로 초 단위로 시간 출력
short-monotonic 기본값에 단조로운 시간 형식으로 출력
verbose 전체 Log를 모두 자세하게 출력
json json 형식
json-pretty json 형식을 보기 편하게 출력
json-see json 형식을 Server-Sent Events에 적합한 형식으로 출력
cat 간결하게 출력

사용예제


# 시스템 데몬 로그 출력 
$ sudo journalctl -u zookeeper.service -o short-iso
-- Logs begin at Thu 2021-12-30 10:19:49 KST, end at Sun 2022-01-30 08:20:43 KST. --
2021-12-30T13:10:02+0900 hadoop-master-1 systemd[1]: Starting Zookeeper...
2021-12-30T13:10:02+0900 hadoop-master-1 zkServer.sh[10186]: ZooKeeper JMX enabled by default
2021-12-30T13:10:02+0900 hadoop-master-1 zkServer.sh[10186]: Using config: /opt/zookeeper/bin/../conf/zoo.cfg
2021-12-30T13:10:03+0900 hadoop-master-1 zkServer.sh[10186]: Starting zookeeper ... STARTED

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

logrotate


시스템을 운영하다 보면 로그가 쌓이게 됩니다. 이 로그를 정리할 수 있는 명령어가 logrotate입니다. 이 명령어는 데몬이 아니라서 크론탭을 이용하여 주기적으로 로그를 정리하는 명령을 추가해야 합니다.

주요옵션


옵션 내용
-s 상태 파일 위치
-f 로그 포맷 옵션 지정

로그 포맷


로그를 정리하는 포맷은 다음과 같습니다. 정리할 로그의 위치를 지정하고 중괄호를 이용하여 로그를 저장합니다.

  • daily, weekly, monthly, yearly
    - 일별로 처리

  • rotate
    - 정리 주기

  • dateext
    - 일자로 파일 정리

  • compress
    - 압축

  • rotate
    - aa

  • 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

man


명령어의 매뉴얼을 출력합니다

사용예제



# cp 명령어의 메뉴얼을 확인
$ man cp

nohup


리눅스에서 프로그램을 실행할 때 사용자의 세션이 끊어지면(hangup)프로그램도 함께 종료됩니다. 처리에 오랜 시간이 걸리는 프로그램을 실행 할때 nohup 을 이용하여 사용자의 세션이 끊어져도 프로그램은 계속 실행되도록 할 수 있습니다.

사용예제


nohup 명령을 이용할 때 포어그라운드로 실행하게 되면 다른 작업을 처리할수 없기 때문에 & 를 이용하여 백그라운드로 실행하는 것이 좋습니다.

#text.sh 실행, 표준 출력이 nohup.out 으로 저장
$ nohup  test.sh &

# test.sh를 실행하고 표준 출력을 test.log에 저장 
$ nohup test.sh > test.log &

openssl


OpenSSL은 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈소스 구현판이다.

사용예제


slf signed 인증서 생성


0개의 댓글