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
- 현재 실행 중인 프로세스의 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 |
'Study > 리눅스' 카테고리의 다른 글
RHCSA 문제 (0) | 2025.03.10 |
---|---|
RHCSA 정리 (5) - SELinux, Storage, NFS, Samba (0) | 2025.02.27 |
RHCSA 정리 (3) - Security, Networking, File (0) | 2025.02.19 |
RHCSA 정리 (2) - File Permission, Monitoring (0) | 2025.02.19 |
RHCSA 정리 (1) - File System, File Editor, User Account (0) | 2025.02.11 |