리눅스 시스템을 보다 효율적으로 관리하고 복잡한 작업을 자동화하려면 기초 명령어를 넘어선 중급 명령어들을 익혀야 합니다. 특히 여러 작업을 동시에 처리하여 시간을 절약하는 병렬 실행 기술은 시스템 관리자나 개발자에게 필수적입니다.
다음은 리눅스 중급 사용자에게 유용한 명령어들과 병렬 처리에 대한 가이드입니다.
1. 스트림 편집 및 처리
파이프(|)와 리다이렉션(>, <)을 활용하여 명령어를 연결하고 텍스트를 처리하는 데 사용됩니다.
명령어 | 설명 | 예시 |
grep | 파일 내용에서 특정 패턴을 포함하는 줄을 찾아 출력합니다. <br/> -v: 패턴을 포함하지 않는 줄만 출력 <br/> -r: 하위 디렉토리까지 재귀적으로 검색 | grep 'error' access.log <br/> grep -v '200 OK' access.log |
sed | 텍스트 스트림을 편집하는 스트림 에디터. 파일 내용을 수정하지 않고 출력만 변경합니다. <br/> s/old/new/g: 'old'를 'new'로 전역 치환 | sed 's/old_text/new_text/g' file.txt |
awk | 텍스트 파일의 데이터를 열(컬럼) 단위로 처리합니다. <br/> { print $1, $3 }: 첫 번째와 세 번째 열 출력 | awk '{print $2}' access.log |
cut | 파일에서 지정된 컬럼을 잘라냅니다. <br/> -d [구분자]: 구분자 지정 <br/> -f [필드]: 잘라낼 필드 지정 | cut -d',' -f1,3 data.csv |
tr | 문자를 변환하거나 삭제합니다. | `cat file.txt |
sort | 텍스트 파일의 내용을 정렬합니다. <br/> -r: 역순 정렬 <br/> -k [컬럼]: 특정 컬럼 기준으로 정렬 | sort -r numbers.txt <br/> `ls -l |
uniq | 연속적으로 중복되는 줄을 제거합니다. (사용 전 sort로 정렬해야 효과적) | `sort numbers.txt |
xargs | 표준 입력으로 받은 데이터를 명령어의 인자로 넘겨줍니다. <br/> 파이프와 함께 사용되어 병렬 처리에 유용합니다. | `find . -name "*.log" |
2. 사용자 및 권한 관리
여러 사용자와 그룹의 권한을 관리할 때 사용됩니다.
명령어 | 설명 | 예시 |
chown | 파일 또는 디렉터리의 소유자(User)와 그룹(Group)을 변경합니다. <br/> -R: 하위 파일/디렉터리까지 재귀적으로 변경 | chown -R newuser:newgroup /var/www/ |
chmod | 파일 또는 디렉터리의 권한을 변경합니다. <br/> -R: 하위 파일/디렉터리까지 재귀적으로 변경 | chmod 755 script.sh <br/> chmod -R 644 /var/www/ |
sudo | 다른 사용자의 권한으로 명령어를 실행합니다. 주로 root 권한이 필요할 때 사용합니다. | sudo apt update |
su | 현재 사용자를 다른 사용자로 전환합니다. | su root |
useradd, userdel | 새로운 사용자를 생성하거나 삭제합니다. | useradd newuser |
groupadd, groupdel | 새로운 그룹을 생성하거나 삭제합니다. | groupadd newgroup |
3. 네트워크 및 시스템 관리
네트워크 상태를 확인하고, 시스템 자원을 효율적으로 관리합니다.
명령어 | 설명 | 예시 |
netstat | 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등을 출력합니다. <br/> -antp: 모든 TCP 연결과 포트, 프로세스 정보 출력 | netstat -antp |
ss | netstat을 대체하는 더 빠르고 강력한 도구. 소켓 통계 정보를 출력합니다. | ss -antp |
ps | 현재 실행 중인 프로세스 목록을 출력합니다. <br/> ps -aux: 모든 사용자의 프로세스 상세 정보 출력 | `ps -aux |
top, htop | 시스템의 실시간 CPU, 메모리, 프로세스 정보를 보여줍니다. | top |
lsof | 열려 있는 파일(파일, 소켓, 파이프 등)을 출력합니다. 특정 포트를 사용하는 프로세스를 찾을 때 유용합니다. | lsof -i :8080 |
df | 디스크 파티션의 사용량을 보여줍니다. | df -h |
du | 파일이나 디렉터리의 용량을 계산합니다. | du -sh /var/log |
4. 병렬 실행 (Parallel Execution)
여러 개의 작업을 동시에 실행하여 작업 시간을 단축하는 기술입니다.
1) & 기호로 백그라운드 실행
가장 간단한 병렬 실행 방법입니다. 명령어 뒤에 &를 붙이면 해당 명령어가 백그라운드에서 실행되고, 터미널은 다음 명령어를 바로 입력할 수 있는 상태가 됩니다.
# task1, task2, task3를 동시에 실행
./task1.sh &
./task2.sh &
./task3.sh &
# 모든 백그라운드 작업이 완료될 때까지 대기
wait
2) xargs를 이용한 병렬 실행
xargs는 표준 입력으로 받은 데이터를 명령어의 인자로 전달하는 역할을 합니다. 여기에 -P 옵션을 사용하면 여러 프로세스를 동시에 실행하여 병렬 처리가 가능합니다.
- -P [프로세스 수]: 동시에 실행할 최대 프로세스 수를 지정합니다. 0은 시스템의 코어 수만큼 사용합니다.
- -n 1: 인자를 한 번에 하나씩만 넘겨주도록 지정합니다.
예시: 100개의 파일을 4개의 프로세스로 동시에 압축
# 파일 목록을 xargs로 넘겨서 gzip 명령어를 병렬 실행
ls *.log | xargs -P 4 -n 1 gzip
3) parallel 명령어를 이용한 병렬 실행
parallel은 병렬 처리를 위해 특별히 설계된 강력한 도구입니다. xargs보다 더 유연하고 다양한 옵션을 제공합니다. GNU parallel 패키지를 설치해야 사용할 수 있습니다.
# Debian/Ubuntu
sudo apt install parallel
# CentOS/RHEL
sudo yum install parallel
예시: 100개의 파일을 4개의 프로세스로 동시에 압축
# {}는 입력받은 파일명을 의미
find . -name "*.log" | parallel -j 4 gzip {}
- -j [프로세스 수]: xargs의 -P와 동일하게 병렬 실행할 프로세스 수를 지정합니다.
예시: 여러 명령어 병렬 실행
parallel ::: "command1" "command2" "command3"
- ::: 기호 뒤에 병렬로 실행할 명령어를 나열합니다.
5. 스케줄링 및 작업 관리
반복적인 작업을 자동으로 수행하거나, 시스템 부하가 적은 시간에 작업을 실행하도록 예약할 수 있습니다.
명령어 | 설명 | 예시 |
crontab | 주기적으로 반복되는 작업을 예약합니다. | crontab -e (크론탭 편집) |
at | 특정 시점에 단 한 번만 실행되는 작업을 예약합니다. | at now + 1 hour |
tmux, screen | 터미널 세션을 여러 개로 나누거나, 터미널을 닫아도 세션이 유지되도록 합니다. 장시간 작업을 백그라운드에서 돌릴 때 유용합니다. | tmux new -s my_session |
이러한 중급 명령어들과 병렬 실행 기술을 숙달하면 리눅스 시스템을 훨씬 더 효율적으로 제어하고 관리할 수 있습니다. 각 명령어의 자세한 사용법은 man 페이지를 통해 확인하는 것이 좋습니다.
'개발' 카테고리의 다른 글
아스트로노머(Astronomer): 에어플로우를 서비스(SaaS)로 경험하는 가장 쉬운 방법 (3) | 2025.08.01 |
---|---|
스노우플레이크(Snowflake) vs. 데이터브릭스(Databricks) 심층 비교: 최적의 데이터 플랫폼은? (0) | 2025.08.01 |
YAML 문법 기초: YAML 파일 작성 가이드 (1) | 2025.07.31 |
리눅스 기초 명령어 정리 (초보자용) (1) | 2025.07.31 |
전통 RDB → 레이크하우스(Lakehouse)로의 전환 시 고려할 점 (1) | 2025.07.30 |