1. Linux 기본 개념
셸과 명령어 구조
- 셸(Shell): 사용자의 명령어를 해석하고 실행하는 프로그램 (예: Bash, Zsh)
- 명령어 구조:
- 명령어 이름: 실행할 프로그램 또는 내장 명령어
- 옵션: 명령어 동작을 세분화 (예: -l, -a)
- 인자(Arguments): 처리 대상 파일, 디렉터리 등
표준 입출력, 파이프, 리다이렉션
- 표준 입출력: 모든 명령어는 기본적으로 표준 입력(stdin), 표준 출력(stdout), 표준 오류(stderr)를 사용합니다.
- 파이프와 리다이렉션: 여러 명령어를 연결하거나 결과를 파일로 저장하는 등, 데이터를 유연하게 처리할 수 있도록 지원합니다.
2. 리다이렉션과 파이프
리다이렉션
리다이렉션은 명령어의 입력 또는 출력을 다른 파일이나 명령어로 전환하는 기능입니다.
1. 출력 리다이렉션 `>` : 기존 파일을 덮어쓰며 저장
2. 출력 리다이렉션 `>>` : 기존 파일 끝에 내용을 추가
3. 입력 리다이렉션 `<` : 파일의 내용을 명령어의 입력으로 사용
파이프
파이프는 한 명령어의 출력을 다른 명령어의 입력으로 연결하여 복잡한 작업을 수행할 수 있게 합니다.
- 기본 개념:
- A | B : 명령어 A의 출력을 명령어 B의 입력으로 사용
- A > tmp.txt, B < tmp.txt와 비슷하지만, A가 완전히 종료되지 않아도 B가 실행될 수 있음
- 실습 예제:
# data.txt 파일 생성
vim data.txt
# 파일 내용 정렬 후 중복 제거하여 새 파일로 저장
cat data.txt | sort | uniq > unique_sorted_data.txt
# 파일 내용 정렬 후 중복 제거하여 새 파일로 저장
cat data.txt | sort | uniq > unique_sorted_data.txt
# 디렉터리 내 파일 개수 세기
ls | wc -l > file_count.txt
# 로그 파일에서 특정 키워드 추출 후 내림차순 정렬하여 저장
grep "systemd" /var/log/syslog | sort -r > sorted_syslog.txt
# 특정 확장자 파일 찾아 압축하기
find . -name "*.jpg" | xargs tar -cvzf images.tar.gz
# 압축된 대용량 파일에서 특정 패턴 검색 후 결과 요약
zcat large_file.gz | grep "pattern" | wc -l > result_summary.txt
3. 주요 명령어 카테고리별 정리
아래 표는 주요 명령어들을 카테고리별로 나눈 후, 기능과 예시를 정리한 내용입니다.
카테고리명령어설명주요 옵션/예시
파일 및 디렉터리 관리 | ls | 디렉터리 내 파일과 폴더를 나열 (파일의 종류, 권한, 크기 등 정보 확인 가능) | ls -al |
cd | 현재 작업 디렉터리 변경 | cd /home/user | |
mkdir | 새로운 디렉터리 생성 | mkdir new_folder | |
cp | 파일 또는 디렉터리를 복사 | cp source.txt destination.txt | |
mv | 파일 또는 디렉터리 이동 및 이름 변경 | mv oldname.txt newname.txt | |
rm | 파일이나 디렉터리 삭제 (디렉터리 삭제 시 -r 옵션 주의) | rm file.txt rm -r folder |
|
파일 내용 확인 및 조작 | cat | 파일의 전체 내용을 출력 | cat file.txt |
head | 파일의 처음 몇 줄을 출력 (기본 10줄) | head -n 10 file.txt | |
tail | 파일의 마지막 몇 줄을 출력 (기본 10줄) | tail -n 10 file.txt | |
less, more | 페이지 단위로 파일 내용을 확인, 스크롤하며 읽기 용이 | less file.txt | |
grep | 파일 내 특정 문자열 패턴 검색 및 해당 줄 출력 | grep "pattern" file.txt | |
파일 권한 및 소유권 관리 | chmod | 파일 및 디렉터리의 접근 권한 변경 | chmod 755 script.sh |
chown | 파일 및 디렉터리의 소유자/그룹 변경 | chown user:group file.txt | |
chgrp | 파일 또는 디렉터리의 그룹 소유 변경 | chgrp group file.txt | |
프로세스 및 시스템 관리 | ps | 현재 실행 중인 프로세스 목록 확인 | ps aux |
top | 실시간으로 시스템 프로세스 및 자원 사용 현황 모니터링 | top | |
kill | 지정한 프로세스 종료 (PID 필요) | kill [PID] | |
nice, renice | 프로세스 우선순위 설정 또는 변경 | nice -n 10 command | |
네트워크 관련 | ping | 네트워크 연결 및 응답 속도 테스트 | ping google.com |
ifconfig 또는 ip | 네트워크 인터페이스 상태 확인 및 설정 (최신 시스템에서는 ip 권장) | ip addr show 또는 ifconfig | |
netstat | 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 확인 | netstat -tuln | |
traceroute | 목적지까지의 네트워크 경로(홉) 추적 및 분석 | traceroute google.com | |
시스템 정보 확인 | uname | 커널 및 시스템 기본 정보 출력 | uname -a |
df | 파일 시스템 전체 및 개별 디스크 사용량 확인 | df -h | |
du | 특정 디렉터리/파일의 디스크 사용량 확인 | du -sh folder | |
free | 메모리 및 스왑 사용량 확인 | free -m | |
vmstat | 시스템의 프로세스, 메모리, CPU 활동 통계 확인 | vmstat 1 |
4. 쉘 스크립트 기본
쉘 스크립트는 여러 명령어를 하나의 파일에 저장하여 자동으로 실행할 수 있게 하며, 반복 작업이나 복잡한 로직을 쉽게 처리할 수 있게 해줍니다.
스크립트 작성법
- 첫 줄: #!/bin/bash (Bash에서 실행)
- 명령어 작성: 두 번째 줄부터 실행할 명령어를 순차적으로 작성
- 실행 권한 부여: chmod +x script.sh
예시 스크립트:
#!/bin/bash
echo "Hello World" echo "Bye World"
5. 조건문
조건문은 스크립트 실행 중 특정 조건을 평가하여, 조건에 따라 서로 다른 작업을 수행할 수 있도록 하는 제어 구조입니다. Bash에서는 주로 if, elif, else 구문을 사용하며, 조건 테스트는 대괄호([ ]) 안에 표현됩니다.
조건문에서는 숫자, 문자열, 파일 존재 여부 등 다양한 비교를 수행할 수 있도록 여러 비교 연산자(예: 숫자 비교: -eq, -ne, -gt 등; 문자열 비교: =, !=, -z, -n; 파일 테스트: -e, -f, -d 등)를 제공합니다. 이러한 기능을 통해 스크립트 내에서 논리적 판단과 흐름 제어가 가능해집니다.
6. 반복문
반복문은 특정 조건이 만족될 때까지 또는 지정된 범위의 값을 순회하며 동일한 작업을 반복 실행할 수 있도록 도와줍니다. Bash에서는 주로 두 가지 반복문 형태가 사용됩니다.
- for 반복문: 정해진 목록이나 범위 내의 각 항목에 대해 반복 작업을 수행합니다. 파일 목록 처리나 배열의 각 요소에 접근할 때 유용합니다.
- while 반복문: 주어진 조건이 참인 동안 계속해서 작업을 반복 실행합니다. 주로 사용자 입력 처리나 파일의 끝까지 읽는 작업 등, 조건 기반 반복에 적합합니다.
두 반복문 모두 스크립트 내에서 반복적인 작업을 자동화하고, 복잡한 데이터 처리를 간결하게 구현하는 데 큰 역할을 합니다.
7. 배열
배열은 여러 개의 값을 하나의 변수에 저장하여 관련 데이터를 그룹화할 수 있는 자료 구조입니다. Bash 스크립트에서는 배열을 사용하여 여러 항목을 관리하고, 반복문과 결합해 전체 요소를 순회하는 등의 작업을 수행할 수 있습니다.
배열 선언, 특정 인덱스의 값 접근, 배열 전체 요소 확인 및 배열의 길이 구하기 등의 기본 문법을 제공하며, 이를 통해 데이터의 효율적인 저장과 처리가 가능합니다.
8. 함수
함수는 반복적으로 사용되는 명령어 집합을 하나의 모듈로 묶어 재사용할 수 있도록 하는 코드 블록입니다. Bash에서는 함수를 정의하여 코드의 중복을 줄이고, 스크립트의 구조를 보다 명확하게 만들 수 있습니다.
함수는 매개변수를 받아 내부에서 사용하거나, 결과를 출력 혹은 반환할 수 있으며, 지역 변수 선언을 통해 함수 내에서만 유효한 변수를 사용할 수도 있습니다. 이러한 특성 덕분에 복잡한 작업을 보다 체계적으로 관리하고, 스크립트의 유지 보수성을 높일 수 있습니다.
이와 같이 조건문, 반복문, 배열, 함수는 Bash 스크립트를 구성하는 핵심 요소로, 스크립트 작성 시 각각의 역할과 사용법을 잘 이해하면 보다 유연하고 효율적인 자동화 작업이 가능해집니다.
9. 결론
이 글에서는 실습 예제까지 모두 포함하여 Linux 명령어와 쉘 스크립트의 이론 및 실습 내용을 상세히 정리했습니다.
- 핵심 포인트:
- 각 명령어는 기본적인 파일/디렉터리 관리부터 프로세스, 네트워크, 시스템 정보 확인까지 다양한 용도로 사용됩니다.
- 리다이렉션과 파이프를 활용하면 명령어 간 데이터 전달이 유연해지고, 복잡한 작업도 간결하게 처리할 수 있습니다.
- 조건문, 반복문, 배열, 함수 등 쉘 스크립트 문법을 익혀 자동화 및 효율적인 시스템 관리를 구현할 수 있습니다.
실제 환경에서 man 페이지나 공식 문서를 참고하며 다양한 옵션과 응용법을 실습해보시길 권장합니다. 이 글이 Linux 환경에 익숙해지고자 하는 분들에게 큰 도움이 되길 바랍니다.
'DevOps > LINUX' 카테고리의 다른 글
[LINUX] 리눅스 터미널과 쉘 – 기본 개념 및 명령어 총정리 (0) | 2025.03.11 |
---|---|
[LINUX] 리눅스 OS 버젼 및 정보 확인 명령어 (0) | 2023.06.19 |
[LINUX] 리눅스 폴더 & 파일 생성 / 삭제 (0) | 2023.04.22 |
댓글