Skip to main content

02A. 관리명령어

About 5 minCLILinuxcrashcoursewikidocs.netclishshelllinux

02A. 관리명령어 관련

Bash 쉘스크립트 개발 시작하기

Bash 쉘스크립트 개발 시작하기

2. 명령어 - 1. 관리명령어

점프 투 스프링부트 - WikiDocs

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


1.시스템관리

2. 명령어 - 1. 관리명령어 - 1. 시스템관리

점프 투 스프링부트 - WikiDocs

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

crontab

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - crontab

점프 투 스프링부트 - WikiDocs

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

등록한 계정의 사용자로 실행됩니다. 다른 사용자의 크론탭을 등록하려면 -u옵션을 이용합니다.

주요 옵션

옵션설명
-l등록된 명령어 리스트 확인
-e등록된 명령어를 수정
-r등록된 크론탭을 삭제
-u크론탭을 등록할 사용자 지정

사용 예제

크론탭 등록

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

# 크론탭을 등록
crontab -e

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

크론탭 위치

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

  • .CentOS: /var/spool/cron/유저명
  • .Ubuntu: /var/spool/cron/crontab/유저명

exec

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - exec

점프 투 스프링부트 - WikiDocs

주어진 명령어를 실행하는데 새로운 프로세스를 생성하지 않고, 쉘 프로세스를 대체합니다. 예를 들어 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번째 인수로 이름을 전달
-l0번째 인수로 대쉬를 전달

사용예제

exec echo "aa"
# aa
#
exec java -cp '/etc/hadoop/conf' org.apache.hadoop.hdfs.server.datanode.SecureDataNodeStarter

findmnt

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - findmnt

점프 투 스프링부트 - WikiDocs

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

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - free

점프 투 스프링부트 - WikiDocs

history

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - history

점프 투 스프링부트 - WikiDocs

htop

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - htop

점프 투 스프링부트 - WikiDocs

jobs

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - jobs

점프 투 스프링부트 - WikiDocs

journalctl

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - journalctl

점프 투 스프링부트 - WikiDocs

kill

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - kill

점프 투 스프링부트 - WikiDocs

logrotate

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - logrotate

점프 투 스프링부트 - WikiDocs

man

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - man

점프 투 스프링부트 - WikiDocs

mount

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - mount

점프 투 스프링부트 - WikiDocs

nohup

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - nohup

점프 투 스프링부트 - WikiDocs

ntp

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - ntp

점프 투 스프링부트 - WikiDocs

openssl

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - openssl

점프 투 스프링부트 - WikiDocs

pgrep

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - pgrep

점프 투 스프링부트 - WikiDocs

ps

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - ps

점프 투 스프링부트 - WikiDocs

sar

2. 명령어 - 1. 관리명령어 - 1. 시스템관리 - sar

점프 투 스프링부트 - WikiDocs

2. 사용자관리

2. 명령어 - 1. 관리명령어 - 2. 사용자관리

점프 투 스프링부트 - WikiDocs

사용자, 그룹 관리를 위한 명령어 입니다.

groupadd

그룹을 추가 하는 명령어입니다. 그룹 정보는 /etc/group에서 확인할 수 있습니다.

주요 옵션

옵션설명
-ggid 할당

/etc/group

시스템의 그룹정보를 확인할 수 있습니다.

# 그룹명:비밀번호:그룹ID:그룹사용자
cat /etc/group
#
# root:x:0:
# daemon:x:1:
# groupa:x:10001:usera,userb

사용예제

그룹 추가
# 그룹 groupa 추가 
groupadd groupa

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

3. 파일 시스템

2. 명령어 - 1. 관리명령어 - 3. 파일 시스템

점프 투 스프링부트 - WikiDocs

파일 시스템 관리를 위한 명령어입니다.


4. 압축

2. 명령어 - 1. 관리명령어 - 4. 압축

점프 투 스프링부트 - WikiDocs

파일의 압축을 위한 명령어입니다.

gzip, gunzip, zcat

gizp은 파일을 압축할 때, gunzip은 파일의 압축을 해제할 때 사용합니다. 압축한 파일은 .gz 이 붙고 기존 파일은 삭제됩니다. 파일, 디렉토리 단위로 압축되므로 여러개의 파일을 압축하기 위해서는 tar 명령을 이용해야 합니다.

주요 옵션

옵션설명
-r디렉토리를 압축
-d압축을 해제. gunzip과 같은 동작
-l압축 정보를 표시
-cgzip 파일을 읽어서 표준 출력으로 출력. zcat과 동일하게 동작

사용예제

파일 압축
# sample.txt 파일을 압축하면 sample.txt.gz 파일이 생성 
ls
#
# sample.txt
gzip sample.txt
ls
#
#sample.txt.gz

tar

여러개의 파일을 모아서 하나의 파일(tar 형식)로 만들어 줍니다.

주요 옵션

옵션설명
-c파일 묶음을 생성
-x파일 묶음을 해제
-z파일을 gzip 압축하면서 묶음을 생성
-v처리 상황을 출력
-t파일 묶음에 들어있는 파일 목록을 출력
-P절대 경로 처리
--exclude파일 제외. excludetar 버전에 따라 커맨드의 제일 앞에 사용되어야 하는 경우도 있음.
--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

경고: 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폴더 압축
-qquite 옵션
-d삭제
-x제외
-o덮어쓰기

예제

압축
# 파일 압축 
zip sample.zip sample.txt abc.txt

# 폴더 압축 
zip -r folder.zip abc/

이찬희 (MarkiiimarK)
Never Stop Learning.