02A. 관리명령어
02A. 관리명령어 관련
프로세스, 메모리, 파일시스템 관리를 위한 명령어 입니다. 시스템 운영을 위해 필요한 명령어 입니다.
1.시스템관리
프로세스, 메모리 관리를 위한 명령어 입니다.
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
크론탭을 일괄로 등록하고 싶을 때 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
echo "aa"
#
# aa
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
findmnt
findmnt
는 마운트된 파일 시스템 목록을 확인합니다.
주요 옵션
옵션 | 설명 |
---|---|
-l | 정보를 목록 형식으로 출력 |
-t | 파일 시스템 유형을 측정 |
사용 예제
findmnt
#
# **TARGET SOURCE FSTYPE OPTIONS**
# / /dev/sda3 ext4 rw,relatime,errors=remo
# ├─/sys sysfs sysfs rw,nosuid,nodev,noexec,
# │ ├─/sys/kernel/security securityfs securit rw,nosuid,nodev,noexec,
# │ ├─/sys/fs/cgroup tmpfs tmpfs ro,nosuid,nodev,noexec,
findmnt -l
#
# **TARGET SOURCE FSTYPE OPTIONS**
# /sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
# /proc proc proc rw,nosuid,nodev,noexec,relatime
# /dev udev devtmpfs rw,nosuid,relatime,size=3996916k,nr_inodes=999229,mode=755
findmnt -t ext4
#
# **TARGET SOURCE FSTYPE OPTIONS**
# / /dev/sda3 **ext4** rw,relatime,errors=remount-ro,data=ordered
# └─/media/tecmint/Data_Storage /dev/sda5 **ext4** rw,nosuid,nodev,relatime,data=ordered
free
history
htop
jobs
journalctl
kill
logrotate
man
mount
nohup
ntp
openssl
pgrep
ps
sar
2. 사용자관리
사용자, 그룹 관리를 위한 명령어 입니다.
groupadd
그룹을 추가 하는 명령어입니다. 그룹 정보는 /etc/group
에서 확인할 수 있습니다.
주요 옵션
옵션 | 설명 |
---|---|
-g | gid 할당 |
/etc/group
시스템의 그룹정보를 확인할 수 있습니다.
# 그룹명:비밀번호:그룹ID:그룹사용자
cat /etc/group
#
# root:x:0:
# daemon:x:1:
# groupa:x:10001:usera,userb
사용예제
# 그룹 groupa 추가
groupadd groupa
groups
명령으로 현재 사용자, 특정 사용자의의 그룹을 확인할 수 있습니다.
# 현재 사용자의 그룹 확인
groups
#
# groupa
# 특정 사용자의 그룹 확인
groups usera
#
# usera : groupa, groupb
useradd
사용자 추가를 하는 명령어입니다. 사용자 정보는 /etc/passwd
에서 확인할 수 있습니다.
- 사용자는 특정 그룹에 반드시 속해야 함
주요 옵션
옵션 | 설명 |
---|---|
-g | 사용자 그룹을 추가 |
-d | 사용자 디렉토리 지정 |
-s | 쉘 지정 |
-p | 패스워드 지정 |
-m | 사용자의 홈디렉토리 생성 |
/etc/passwd
/sbin/nologin
으로 기본쉘이 설정된 계정은 로그인은 안되지만,su
명령으로 계정을 변경하여 명령을 실행할 수 있음
# 사용자이름:비밀번호:사용자ID:그룹ID:사용자설명:홈디렉토리:기본쉘
cat /etc/passwd
#
# root:x:0:0:root:/root:/bin/bash
# bin:x:1:1:bin:/bin:/sbin/nologin
사용예제
# 사용자 aa를 추가하면서 그룹은 gg로 설정
useradd aa -g gg
# deploy 계정을 생성하면, /home/deploy 디렉토리도 함께 생성
useradd -m deploy
# user1을 grp1그룹에 추가
usermod -G grp1 -a user1
# user1을 grp1, grp2에 등록
usermod -a -G grp1,grp2 user1
3. 파일 시스템
파일 시스템 관리를 위한 명령어입니다.
4. 압축
파일의 압축을 위한 명령어입니다.
gzip
, gunzip
, zcat
gizp
은 파일을 압축할 때, gunzip은 파일의 압축을 해제할 때 사용합니다. 압축한 파일은 .gz
이 붙고 기존 파일은 삭제됩니다. 파일, 디렉토리 단위로 압축되므로 여러개의 파일을 압축하기 위해서는 tar 명령을 이용해야 합니다.
주요 옵션
옵션 | 설명 |
---|---|
-r | 디렉토리를 압축 |
-d | 압축을 해제. gunzip 과 같은 동작 |
-l | 압축 정보를 표시 |
-c | gzip 파일을 읽어서 표준 출력으로 출력. zcat 과 동일하게 동작 |
사용예제
# sample.txt 파일을 압축하면 sample.txt.gz 파일이 생성
ls
#
# sample.txt
gzip sample.txt
ls
#
#sample.txt.gz
gzip -l sample.txt.gz
#
# compressed uncompressed ratio uncompressed_name
# 278 412 38.1% work
# sample.txt.gz 파일의 압축을 해재하면 sample.txt 파일 생성
ls
#
# sample.txt.gz
# 다음의 두개의 명령은 동일한 결과를 나타냅니다.
gunzip sample.txt.gz
gzip -d sample.txt.gz
ls
#
# sample.txt
압축파일을 읽어서 표준 입력으로 받아 들여서 압축을 해제할 수도 있습니다.
cat sample.txt.gz | gzip -d
압축파일을 읽어서 표준 출력으로 출력합니다. gzip -c
, zcat
은 동일하게 동작합니다.
gunzip -c sample.txt.gz
#
# a, b, c
zcat sample.txt.gz
#
# a, b, c
tar
여러개의 파일을 모아서 하나의 파일(tar
형식)로 만들어 줍니다.
주요 옵션
옵션 | 설명 |
---|---|
-c | 파일 묶음을 생성 |
-x | 파일 묶음을 해제 |
-z | 파일을 gzip 압축하면서 묶음을 생성 |
-v | 처리 상황을 출력 |
-t | 파일 묶음에 들어있는 파일 목록을 출력 |
-P | 절대 경로 처리 |
--exclude | 파일 제외. exclude 는 tar 버전에 따라 커맨드의 제일 앞에 사용되어야 하는 경우도 있음. |
--delete | 파일 삭제 |
사용예제
# foo, bar를 archive.tar로 만듬
tar -cf archive.tar foo bar
# archive.tar 파일 안에 묶여 있는 내용을 확인
tar -tf archive.tar
# foo, bar를 gzip 압축하여 archive.tar.gz 으로 만듬
tar -zcvf archive.tar.gz foo bar
# source_dir의 .log, .attatch 로 끝나는 파일, folder_name 디렉토리 제외하고 file.tar.gz 으로 압축
tar -zcvf file.tar.gz source_dir --exclude="*.log" --exclude="*.attach*" --exclude="./folder_name"
# source_dir의 logs 폴더는 제외하고 압축. exclude 옵션을 제일 앞에 사용해야 하는 경우가 있음
tar --exclude="source_dir/logs" -zcvf file.tar.gz source_dir
# archive.tar 파일 묶음 해제
tar -xf archive.tar
# archive.tar.gz 압축 파일의 묶을 해제
tar -zxvf archive.tar.gz
압추 파일안에 파일을 삭제 합니다. --file
옵션과 함께 사용해야 합니다.
tar -tf txt.tar
#
# a.txt
# b.txt
tar --delete --file=txt.tar a.txt
tar -tf txt.tar
#
# b.txt
경고: tar: Removing leading `/' from member names
tar
로 압축을 진행할 때 절대 경로로 설정되어 있으면 발생하는 경고입니다. 절대 경로를 제거하고 압축을 진행합니다. 경고 이기 때문에 참고만 하면 됩니다.# 다음과 같은 경우 실제 압축은 etc/sample/conf 로 진행
tar -zcf sample.tgz /etc/sample/conf
# 파일 압축 상태 확인
tar -tf sample.tgz
#
# etc/sample/conf/file_a
# etc/sample/conf/file_b
tar -zcfP sample2.tgz /etc/sample/conf
# 파일 압축 상태 확인
# / 를 기준으로 압축이 진행 됨
tar -tf sample2.tgz
#
# /etc/sample/conf/file_a
# /etc/sample/conf/file_b
GNU-tar / BSD-tar
tar
실행 파일은 GNU 버전과 BSD 버전이 있습니다. 맥북 Ventura 버전에서는 BSD tar 이 설치 되었고, 우분투 20에는 GNU tar 이 설치 되었습니다. 이로 인해 맥북에서 압축한 tar
파일을 우분투에서 압축 해제할 때 오류가 발생하였습니다.이때는 맥북에 GNU 버전 tar
을 설치하여 오류를 확인할 수 있습니다.
# 맥북 기본 tar
tar --version
#
# bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8
# gnu tar 설치 후 확인
brew install gnu-tar
gtar --version
#
# tar (GNU tar) 1.34
# Copyright (C) 2021 Free Software Foundation, Inc.
# License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
# This is free software: you are free to change and redistribute it.
# There is NO WARRANTY, to the extent permitted by law.
#
# Written by John Gilmore and Jay Fenlason.
zip
, unzip
zip
, unzip
형식의 파일 압축을 지원합니다.
주요 옵션
옵션 | 설명 |
---|---|
-r | 폴더 압축 |
-q | quite 옵션 |
-d | 삭제 |
-x | 제외 |
-o | 덮어쓰기 |
예제
# 파일 압축
zip sample.zip sample.txt abc.txt
# 폴더 압축
zip -r folder.zip abc/
zip
압축 파일에서 특정 파일을 삭제할 수 있습니다.zip -q -d log4j-core-2.6.2.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
특정 파일, 폴더를 제외할 때 사용할 수 있습니다.
# 폴더 제외시에 *를 \와 함께 사용
zip -r sample.zip dir1 -x \*__pycache__\* -x dir1/tmp/\*
# 압축을 해제하면서 동일한 파일을 덮어쓴다.
unzip -o sample.zip