본문 바로가기
Study/리눅스

RHCSA 정리 (4) - Shell, 작업 스케쥴링, 시스템 성능 튜닝, ACL

by yingtao 2025. 2. 27.

Command Line Productivity

Shell

커널과 OS간 인터페이스 역할
사용자가 명령을 입력하면 이를 해석하여 커널에 전달하고, 결과를 반환한다.
일종의 "명령어 인터프리터"

  • 쉘 종류 확인
cat /etc/shells
  • 현재 사용 중인 쉘 확인
echo $0cec

쉘 스크립트 (Shell Script)

여러 개의 명령어를 하나의 파일에 저장하고 실행할 수 있는 프로그램.
반복적인 작업을 자동화 할 때 사용한다.

  • 스크립트 기본 구조
#!/bin/bash
echo "Hello, World!"

# ! /bin/bash 로 시작
echo 명령어를 통해 터미널에 출력한다.

  • 스크립트 실행
chmod +x script.sh
./script.sh

실행하려면 실행 권한이 필요하다.

  • 변수 사용
# 변수 선언 후 출력
name = "John"
echo "Hello, $name"

# 공백 포함 값 할당 시
greeting = "Hello World"

변수는 $ 기호를 통해 참조한다.
공백이 포함된 값은 반드시 " "(큰 따옴표) 혹은 ' '(작은 따옴표)로 감싸준다.

  • 사용자 입력 & 출력
# 입력
read username

# 출력
echo "Welcome, $username"

read 명령어를 사용하면 사용자가 직접 입력한 값을 변수에 저장한다.

  • 조건문 (If-Then)
# 숫자 비교
count = 100
if [ $count -eq 100 ]; then
  echo "Count is 100"
else 
  echo "Count is not 100"
fi

# 파일 존재 여부 확인
if [ -e /home/user/error.txt ]; then
  echo "File Exists"
fi

[ $변수 -eq 값 ]
숫자 비교 시 -eq, -ne, -gt, -lt 등의 연산자를 사용한다

옵션
-e : 파일이 존재하는지 확인
-f : 파일이 일반 파일인지 확인
-d : 디렉토리인지 확인

  • 반복문 (For Loop)
    쉘 스크립트에서 for 루프는 리스트의 각 요소를 순회할 때 유용하다.
# 일반적인 for 루프
for i in {1..5}
do
  echo "Welcome $i times"
done

# 리스트 요소 반복
for name in Allice Bob Charlie
do 
  echo "Hello, $name!"
done

{1..5} : 1부터 5까지 반복

grep & egrep (텍스트 검색)

  • grep 기본 사용
grep "error" log.txt

파일에서 error 단어가 포함된 줄을 출력한다.

옵션
-c : 검색 결과 개수 출력
-i : 대소문자 구분 없이 검색
-n : 줄 번호와 함께 출력
-v : 검색어가 포함되지 않은 줄 출력

  • grep & egrep 활용
# 특정 단어 검색 - 대소문자 구분 없이 error 포함된 줄 검색
grep -i "error" log.txt

# 검색된 단어 개수 확인 - 파일 내 error 등장 횟수 출력
grep -c "error" log.txt

# 여러 개의 단어 검색 (egrep)
egrep "fatal | error" log.txt

# awk와 함께 사용 - 검색된 줄의 첫번째 단어만 출력
grep "검색어" file.txt | awk '{print $1}'

#cut과 함께 사용 - 검색 된 결과의 앞 3글자만 출력
grep "검색어" file.txt | awk '{print $1}' | cut -c1-3

 

작업 스케쥴링

crontab 

반복 작업을 예약한다.

옵션
-e : 크론 작업 편집
-l : 크론 작업 목록 확인

crontab -e
crontab -l
  • cron 예제
0 2 * * * /home/user/backup.sh

매일 새벽 2시에 /home/user/backup.sh 실행

at

일회성 작업을 예약한다.

  • at 예제
echo "echo Hello World" | at now + 1 minute

1분 후 Hello World 출력됨

 

System Performance Tuning

tuned 

리눅스 시스템 성능을 자동으로 조정하는 데몬이다.
CPU, 메모리, 디스크, 네트워크 등의 성능을 최적화하는 프로필(Profile) 기반 관리를 제공한다.

  • tuned 실행
# tuned 설치 확인
rpm -qa | grep tuned    

# (미설치시) tuned 패키지 설치
sudo yum install tuned

# tuned 상태 확인 및 실행
systemctl status tuned
systemctl start tuned
systemctl enable tuned

# tuned 프로필 확인 및 변경 - 각 프로필은 특정 환경에 맞게 cpu, 네트워크 디스크 등 설정 최적홧
tuned-adm list

# 현재 적용된 tuned 프로필 확인
tuned-adm active

# tuned 추천 프로필 확인 - 시스템 환경을 분석해서 가장 적합한 프로필 추천
tuned-adm recommned

# tuned 비활성화 
tuned-adm off

 

nice & renice

CPU 사용 프로세스 우선순위를 조정한다.

  • nice 값이란?
    프로세스가 CPU를 얼마나 적극적으로 사용할지를 결정
    값 범위: -20 (가장 높은 우선순위) ~ 19 (가장 낮은 우선순위)
    기본적으로 새 프로세스는 nice 값 0으로 시작된다.

  • 전체 프로세스의 nice 값 확인
top

NI 가 nice 값에 해당한다.

  • 현재 실행 중인 프로세스의 nice 값 확인
ps axo pid, comm, nice, cls --sort=-nice

  • nice 활용 예제
# 실행 시 nice 값 조정 - top 명령어를 nice 값 10으로 실행시켜 우선순위를 낮춘다.
nice -n 10 top

# 실행 중인 프로세스의 nice 값 변경 - PID 1234의 nice 값을 -5로 변경
renice -5 -p 1234

 

CPU 및 메모리 모니터링

  • top 
    실시간 프로세스 및 실시간 성능 확인
top

주요 단축키
q : 종료
P : CPU 사용량 기준 정렬
M : 메모리 사용량 기준 정렬
k : 특정 프로세스 종료 (PID 입력)

  • htop 
    더 보기 쉬운 top 대체 명령어 
    컬러 인터페이스와 마우스를 제공한다.

  • free 
    메모리 사용량 확인
free -h

항목
total : 총 메모리 용량
used : 사용 중인 메모리
free : 사용 가능한 메모리
available : 실제 사용 가능한 메모리

 

네트워크 성능 튜닝

  • 네트워크 대기시간 최적화 (network-latency 프로필)
    이 프로필은 네트워크 패킷 처리 속도를 빠르게 설정한다.
sudo tuned-adm profile network-latency

 

  • TCP 설정 조정 (큰 파일 다운로드 시 유용)
    이 설정을 적용하면 대용량 파일 전송 시 네트워크 속도가 증가한다.
sudo sysctl -w net.core.rmem_max=2614400
sudo sysctl -w net.core.wmem_max=26214400

rmem_max : 수신 버퍼 크기 증가
wmem_max : 송신 버퍼 크기 증가

 

I/O (디스크 성능) 튜닝

  • 디스크 성능 확인 (iostat)
iostat -x 1

# 명령어 설치
yum install sysstat

%iowait : 평균 디스크 요청 대기 시간(낮을수록 좋음)
%util : 디스크 사용률 (100%에 가까우면 병목 가능성 있음)

  • 디스크 스케쥴러 변경 (성능 최적화)
cat /sys/block/sda/queue/scheduler

 

ACL (Access Control List) - 리눅스 파일 액세스 제어

리눅스의 기본적인 파일/디렉토리 권한(chmod, chown, chgrp)을 넘어 특정 사용자가 그룹에 대한 세부적인 접근 제어를 가능하게 하는 기능

특정 사용자(userA) 만 읽기가능, 특정 그룹(groupB)만 실행 가능 등 세밀한 권한 설정이 필요할떄 ACL이 유용하다.

 

ACL 활성화 여부 확인

일반적으로 최신 리눅스 배포판에서는 기본적으로 ACL이 활성화 되어 있다.

  • 현재 파일 시스템이 ACL을 지원하는지 확인
mount | grep acl

acl 옵션 포함 시 ACL 사용 가능

  • 특정 디렉토리의 ACL 활성화 여부 확인
tune2fs -l /dev/sda1 | grep "Default mount options"
  • ACL 비활성화 된 경우 활성화
# /etc/fstab 파일을 수정
sudo vi /etc/fstab 

# 기존 마운트 옵션(defaults)에 acl 추가
/dev/sd1 / ex4 defaults,acl 0 1

# 변경 사항 적용
sudo mount -o remount /

 

ACL 설정 방법

setfacl 명령어를 사용해 특정 사용자 또는 그룹에게 파일 및 디렉토리 권한을 추가할 수 있다

  • 권한 부여
# 특정 사용자(user1)에게 /home/shared 디렉토리에 대한 읽기, 쓰기, 실행 권한 부여
setfacl -m u:user1:rwx /home/shared

# 특정 그룹에게
setfacl -m g:group1:rw /home/shared

# 여러 사용자에게 동시에 권한 부여
setfacl -m u:user1:rwx, u:user2:rw /home/shared
  • ACL 권한 확인
getfacl /home/shared

 

기본 권한 설정

해당 디렉토리에 새로 생성되는 파일/디렉토리에도 자동으로 같은 ACL 권한이 적용됨

# 디렉토리에 기본 ACL 적용
setfacl -dm u:user1:rwx /home/shared

# 특정 그룹에 기본 ACL 적용
setfacl -dm g:group1:r /home/shared

 

ACL 제거

# 특정 사용자 ACL 제거
setfacl -x u:user1 /home/shared

# 특정 그룹 ACL 제거
setfacl -x g:group1 /home/shared

# 모든 ACL 제거 (기본 권한만 남김)
setfacl -b /home/shared

 

ACL과 기본 파일 권한(chmod)의 차이

  • chmod
    적용 대상 : 소유자(user), 그룹(group), 기타(others)
    세밀한 설정은 제한적
    디렉토리 내 새 파일 권한 유지 불가능
    확인 방법: ls -l
  • ACL (setfacl)
    적용 대상 : 특정 사용자(user), 특정 그룹(group)
    세밀한 설정 가능 - 개별 사용자 및 그룹 단위로 권한 설정 가능
    디렉토리 내 새 파일 권한 유지 가능 - -d옵션 통해
    확인 방법: getfacl /path

시스템 성능 관련 정리

기능 명령어
성능 최적화 (tuned) tuned-adm profile [프로필명]
CPU 우선순위 조정 (nice) nice -n 10 top
실행 중 프로세스 우선순위 변경 (renice) renice -5 -p 1234
CPU/메모리 사용량 확인 (top) top, htop
메모리 사용량 확인 (free) free -h
네트워크 최적화 (sysctl) sysctl -w net.core.rmem_max=26214400
디스크 성능 확인 (iostat) iostat -x 1
디스크 스케쥴러 변경 echo deadline > /sys/block/sda/queue/scheduler