본문 바로가기
DevOps/LINUX

[Linux] Linux 명령어와 쉘 스크립트 완벽 정리

by 개발이 체질인 나그네 2025. 3. 12.
반응형

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 환경에 익숙해지고자 하는 분들에게 큰 도움이 되길 바랍니다.

반응형