RHEL 에서 Bash 스크립트 생성 및 실행

Red Hat Enterprise LinuxBeginner
지금 연습하기

소개

이 랩에서는 RHEL 시스템 관리를 위한 Bash 스크립트를 생성하고 실행하는 방법을 배우게 됩니다. 먼저 간단한 스크립트를 작성한 다음, 시스템 명령어를 추가하여 실행 가능하게 만들 것입니다. 이 랩은 시스템 정보 수집과 같은 작업을 자동화하기 위해 for 루프를 사용하고, grep 및 정규 표현식을 사용하여 명령 출력 결과를 필터링하는 방식으로 진행됩니다. 마지막으로, 포괄적인 RHEL 시스템 정보 스크립트를 구축하여 관리 작업을 자동화하고 강력한 셸 기능을 활용하는 실질적인 기술을 습득하게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 82%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

간단한 Bash 스크립트 생성 및 실행

이 단계에서는 기본적인 Bash 스크립트를 생성하고 실행하는 방법을 배우게 됩니다. Bash 스크립트는 Bash 셸이 실행할 수 있는 일련의 명령어를 포함하는 일반 텍스트 파일입니다. 이는 반복적인 작업을 자동화하고 여러 명령어를 단일 실행 가능한 단위로 결합하는 강력한 도구입니다.

먼저, 스크립트를 저장할 새 디렉토리를 생성합니다. 파일을 정리하는 것은 좋은 습관이며, 스크립트를 전용 디렉토리에 배치하면 홈 디렉토리를 깔끔하게 유지하는 데 도움이 됩니다.

  1. 스크립트용 디렉토리 생성.
    mkdir 명령어를 사용하여 ~/project 디렉토리 내에 scripts라는 디렉토리를 생성합니다. 여기에 Bash 스크립트를 저장합니다.

    mkdir ~/project/scripts

    성공적으로 실행되면 이 명령어의 직접적인 출력은 없습니다.

  2. 첫 번째 Bash 스크립트 파일 생성.
    새로 생성된 scripts 디렉토리로 이동하여 nano 텍스트 편집기를 사용하여 firstscript.sh라는 파일을 생성합니다. .sh 확장자는 셸 스크립트에 대한 일반적인 규칙이지만, 엄격하게 요구되는 것은 아닙니다.

    cd ~/project/scripts
    nano firstscript.sh

    nano 편집기 내에서 빈 화면을 보게 됩니다.

  3. 스크립트에 내용 추가.
    모든 Bash 스크립트는 "shebang" 라인인 #!/usr/bin/bash로 시작해야 합니다. 이 라인은 운영 체제에 스크립트를 실행하는 데 사용할 인터프리터 (이 경우 Bash) 를 알려줍니다. shebang 다음에 터미널에 메시지를 출력하는 간단한 echo 명령어를 추가합니다.

    nano 편집기에 다음 줄을 입력합니다.

    #!/usr/bin/bash
    echo "Hello, LabEx! This is my first Bash script."

    내용을 입력한 후 Ctrl+O를 누르고 Enter를 눌러 파일 이름을 확인하고, Ctrl+X를 눌러 nano를 종료하여 파일을 저장합니다.

    터미널이 명령 프롬프트로 돌아갑니다.

  4. bash 인터프리터를 사용하여 스크립트 실행.
    bash 인터프리터에 스크립트를 실행하도록 명시적으로 지시하여 Bash 스크립트를 실행할 수 있습니다. 이 방법은 스크립트에 실행 권한이 필요하지 않습니다.

    bash firstscript.sh

    스크립트의 출력을 볼 수 있습니다.

    Hello, LabEx! This is my first Bash script.

    이는 스크립트가 올바르게 생성되고 성공적으로 실행되었음을 확인합니다.

시스템 명령어를 사용하여 Bash 스크립트 개선 및 실행 가능하게 만들기

이 단계에서는 Bash 스크립트에 더 많은 시스템 명령어를 추가하고 스크립트를 직접 실행 가능하게 만드는 방법을 배우게 됩니다. 스크립트를 실행 가능하게 만들면 bash 인터프리터를 명시적으로 호출하지 않고 다른 명령어처럼 실행할 수 있습니다.

  1. 스크립트 디렉토리로 이동.
    이전 단계에서 firstscript.sh를 생성한 ~/project/scripts 디렉토리에 있는지 확인합니다.

    cd ~/project/scripts
  2. firstscript.sh를 편집하여 더 많은 시스템 명령어 포함.
    이제 블록 장치 및 파일 시스템 여유 공간과 같은 시스템 정보를 표시하는 명령어를 스크립트에 추가합니다. 이는 스크립트가 시스템 데이터 수집을 자동화할 수 있는 방법을 보여줍니다.

    nano를 사용하여 firstscript.sh를 엽니다.

    nano firstscript.sh

    파일의 내용을 다음과 같이 수정합니다. 이 스크립트는 이제 다음을 수행합니다.

    • 블록 장치 정보에 대한 헤더를 출력합니다.
    • lsblk를 실행하여 블록 장치를 나열합니다.
    • 파일 시스템 여유 공간에 대한 헤더를 출력합니다.
    • df -h를 실행하여 디스크 공간 사용량을 사람이 읽을 수 있는 형식으로 표시합니다.
    #!/usr/bin/bash
    echo "Hello, LabEx! This is my first Bash script."
    echo "#####################################################"
    echo "LIST BLOCK DEVICES"
    echo "#####################################################"
    lsblk
    echo "#####################################################"
    echo "FILESYSTEM FREE SPACE STATUS"
    echo "#####################################################"
    df -h

    Ctrl+O를 누르고 Enter를 누른 다음 Ctrl+X를 눌러 nano를 종료하여 파일을 저장합니다.

  3. 스크립트를 실행 가능하게 만들기.
    스크립트를 직접 실행하려면 (예: ./firstscript.sh) 실행 권한을 부여해야 합니다. chmod 명령어는 파일 권한을 변경하는 데 사용됩니다. +x는 모든 사용자에 대해 실행 권한을 추가합니다.

    chmod +x firstscript.sh

    성공적으로 실행되면 이 명령어의 직접적인 출력은 없습니다.

  4. 스크립트를 직접 실행.
    이제 스크립트가 실행 가능하므로 경로를 지정하여 실행할 수 있습니다. 현재 디렉토리에 있으므로 ./ 다음에 스크립트 이름을 사용합니다.

    ./firstscript.sh

    초기 메시지와 lsblkdf -h의 출력을 결합한 다음과 유사한 출력을 볼 수 있습니다.

    Hello, LabEx! This is my first Bash script.
    #####################################################
    LIST BLOCK DEVICES
    #####################################################
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    loop0         7:0    0 10.2G  1 loop /
    loop1         7:1    0  200M  1 loop /usr/local/bin
    loop2         7:2    0  200M  1 loop /usr/local/go
    loop3         7:3    0  200M  1 loop /usr/local/java
    loop4         7:4    0  200M  1 loop /usr/local/node
    loop5         7:5    0  200M  1 loop /usr/local/python
    #####################################################
    FILESYSTEM FREE SPACE STATUS
    #####################################################
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          10G  4.0G  6.1G  40% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/loop0       10G  4.0G  6.1G  40% /
    tmpfs           7.8G     0  7.8G   0% /proc/asound
    tmpfs           7.8G     0  7.8G   0% /proc/acpi
    tmpfs           7.8G     0  7.8G   0% /proc/scsi
    tmpfs           7.8G     0  7.8G   0% /sys/firmware

    lsblkdf -h의 정확한 출력은 특정 환경에 따라 약간 다를 수 있지만, 명령어의 구조와 출력의 존재는 유사해야 합니다.

RHEL 서버에서 For 루프를 사용하여 호스트 이름 자동 검색

이 단계에서는 Bash 의 for 루프에 대해 배우고 이를 사용하여 여러 서버에서 작업을 자동화하는 방법을 배우게 됩니다. for 루프는 목록의 각 항목에 대해 코드 블록을 반복적으로 실행할 수 있도록 하는 기본적인 제어 흐름 문입니다. 이는 여러 시스템을 효율적으로 관리하는 데 특히 유용합니다.

이 연습에서는 여러 서버로 작업하는 것을 시뮬레이션하기 위해 다양한 접근 방식을 사용하여 localhost 를 통해 개념을 시연합니다.

  1. 로컬 명령어를 사용하여 호스트 이름 검색.
    루프를 사용하기 전에 일반적으로 로컬 시스템에서 호스트 이름을 가져오는 방법을 살펴보겠습니다. 개념을 시연하기 위해 다양한 방법을 사용합니다.

    hostname
    hostname -f

    다음과 유사한 출력을 볼 수 있습니다.

    684791f71c0e35fea6cc1243
    684791f71c0e35fea6cc1243

    이는 다양한 옵션을 사용하여 호스트 이름 정보를 성공적으로 검색할 수 있음을 보여줍니다. 이 컨테이너 환경에서는 모든 호스트 이름 옵션이 동일한 컨테이너 ID 를 반환한다는 점에 유의하십시오.

  2. 다양한 옵션으로 호스트 이름 검색을 자동화하기 위한 for 루프 생성.
    이제 for 루프를 사용하여 다양한 호스트 이름 명령어를 보다 효율적으로 수행해 보겠습니다. for 루프는 호스트 이름 옵션 목록을 반복하여 각 옵션으로 hostname 명령어를 실행합니다.

    for OPTION in "" "-f" "-s"; do
      echo "hostname ${OPTION}:"
      hostname ${OPTION}
      echo ""
    done

    이 명령어를 분석해 보겠습니다.

    • for OPTION in "" "-f" "-s";: 이 부분은 루프를 초기화합니다. OPTION은 각 반복 동안 목록의 각 항목 (빈 문자열, -f, -s) 의 값을 갖는 변수입니다.
    • do: 루프에서 실행할 명령어의 시작을 표시합니다.
    • echo "hostname ${OPTION}:";: 사용 중인 옵션을 표시합니다.
    • hostname ${OPTION};: 각 반복에서 실행되는 명령어입니다. ${OPTION}OPTION 변수의 현재 값으로 확장됩니다.
    • echo "";: 가독성을 높이기 위해 빈 줄을 추가합니다.
    • done: 루프의 끝을 표시합니다.

    다음과 유사한 출력을 볼 수 있습니다.

    hostname :
    684791f71c0e35fea6cc1243
    
    hostname -f:
    684791f71c0e35fea6cc1243
    
    hostname -s:
    684791f71c0e35fea6cc1243

    이는 다양한 매개변수를 사용하여 반복적인 작업을 자동화하는 for 루프의 강력함을 보여줍니다.

RHEL 서버에서 For 루프를 사용하여 Bash 스크립트 생성 및 실행

이 단계에서는 이전 단계에서 배운 for 루프를 Bash 스크립트에 캡슐화합니다. 이를 통해 자동화 로직을 저장하고 쉽게 재사용할 수 있습니다. 또한 PATH 환경 변수와 스크립트를 모든 디렉토리에서 액세스할 수 있도록 하는 방법에 대해서도 배우게 됩니다.

  1. 스크립트 디렉토리로 이동.
    ~/project/scripts 디렉토리에 있는지 확인합니다.

    cd ~/project/scripts
  2. 호스트 이름 검색을 위한 새 스크립트 생성.
    다양한 옵션을 사용하여 호스트 이름 정보를 검색하는 for 루프를 포함하는 get_hostnames.sh라는 스크립트를 생성합니다.

    nano를 사용하여 get_hostnames.sh를 엽니다.

    nano get_hostnames.sh

    다음 내용을 파일에 추가합니다.

    #!/usr/bin/bash
    ## This script retrieves hostname information using different options.
    
    for OPTION in "" "-f" "-s"; do
      echo "Getting hostname with option: ${OPTION}"
      hostname ${OPTION}
      echo "------------------------"
    done
    
    exit 0

    Ctrl+O를 누르고 Enter를 누른 다음 Ctrl+X를 눌러 nano를 종료하여 파일을 저장합니다.

    새로운 요소를 분석해 보겠습니다.

    • ## This script...: #로 시작하는 줄은 주석입니다. 셸에서 무시되지만 스크립트를 문서화하는 데 유용합니다.
    • echo "Getting hostname with option: ${OPTION}": 이 줄은 스크립트 실행 중에 현재 사용 중인 옵션을 나타내는 피드백을 제공합니다.
    • exit 0: 이 명령어는 성공을 일반적으로 나타내는 상태 코드 0으로 스크립트를 명시적으로 종료합니다.
  3. 스크립트를 실행 가능하게 만들기.
    이전 단계와 마찬가지로 새 스크립트에 실행 권한을 부여해야 합니다.

    chmod +x get_hostnames.sh

    성공적으로 실행되면 이 명령어의 직접적인 출력은 없습니다.

  4. 현재 디렉토리에서 스크립트 실행.
    스크립트를 실행하여 기능을 확인합니다.

    ./get_hostnames.sh

    다음과 유사한 출력을 볼 수 있습니다.

    Getting hostname with option:
    684791f71c0e35fea6cc1243
    ------------------------
    Getting hostname with option: -f
    684791f71c0e35fea6cc1243
    ------------------------
    Getting hostname with option: -s
    684791f71c0e35fea6cc1243
    ------------------------
  5. PATH 환경 변수 이해.
    PATH 환경 변수는 셸이 실행 가능한 명령어를 검색하는 디렉토리 목록입니다. ls 또는 grep과 같은 명령어를 입력하면 셸은 PATH에 나열된 디렉토리에서 해당 실행 파일을 찾습니다.

    현재 PATH 변수를 표시합니다.

    echo $PATH

    콜론으로 구분된 디렉토리 목록이 표시됩니다. 예를 들어:

    /home/labex/.local/bin:/home/labex/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

    ~/project/scripts (또는 /home/labex/project/scripts) 는 일반적으로 기본 PATH에 포함되지 않습니다. 이것이 스크립트를 실행하기 위해 ./get_hostnames.sh를 사용해야 했던 이유입니다.

  6. 스크립트 디렉토리를 PATH에 추가 (선택 사항, 향후 참조용).
    이 랩 단계에서는 엄격하게 필요하지 않지만, 사용자 지정 스크립트를 모든 위치에서 실행할 수 있도록 개인 bin 또는 scripts 디렉토리를 PATH에 추가하는 것이 일반적인 관행입니다. ~/.bashrc 또는 ~/.zshrc 파일에 export PATH=$PATH:~/project/scripts와 같은 줄을 추가하여 이 작업을 수행할 수 있습니다. 이 랩에서는 경로를 지정하여 스크립트를 계속 실행합니다.

RHEL 에서 Grep 및 정규 표현식을 사용하여 명령 출력 필터링

이 단계에서는 grep 명령어를 정규 표현식과 함께 사용하여 명령 출력 및 파일에서 특정 정보를 효율적으로 필터링하고 추출하는 방법을 배우게 됩니다. grep은 일반 텍스트 데이터 세트에서 정규 표현식과 일치하는 줄을 검색하는 강력한 유틸리티입니다. 정규 표현식 (regex) 은 검색 패턴을 정의하는 일련의 문자입니다.

  1. 시스템 파일에서 특정 사용자 및 그룹 정보 검색.
    grep을 사용하여 /etc/passwd/etc/group 파일에서 labex 사용자 및 그룹에 대한 정보를 찾습니다. 이러한 파일은 각각 사용자 및 그룹 계정 정보를 저장합니다.

    먼저 /etc/passwd에서 labex 사용자 항목을 찾아보겠습니다.

    grep "labex" /etc/passwd

    예상 출력:

    labex:x:1000:1000::/home/labex:/bin/bash

    다음으로 /etc/group에서 labex 그룹 항목을 찾습니다.

    grep "labex" /etc/group

    예상 출력:

    labex:x:1000:

    이러한 명령어는 정확한 문자열 일치를 찾는 기본적인 grep 사용법을 보여줍니다.

  2. grep 및 정규 표현식을 사용하여 lscpu 출력 필터링.
    lscpu 명령어는 CPU 아키텍처 정보를 표시합니다. 종종 광범위한 출력에서 특정 줄만 필요합니다. 정규 표현식과 함께 grep을 사용하여 "CPU"로 시작하는 줄을 필터링할 수 있습니다.

    lscpu | grep '^CPU'

    이 명령어를 분석해 보겠습니다.

    • lscpu: CPU 정보를 생성합니다.
    • |: 파이프는 lscpu의 표준 출력을 가져와 grep 명령어에 표준 입력으로 제공합니다.
    • grep '^CPU': 리터럴 문자열 "CPU"로 시작하는 줄을 검색합니다. ^(캐럿) 은 줄의 시작 부분과 일치하는 정규 표현식 앵커입니다.

    예상 출력 (환경에 따라 약간 다를 수 있음):

    CPU op-mode(s):                     32-bit, 64-bit
    CPU(s):                             4
    CPU family:                         6
  3. 주석 및 빈 줄을 무시하고 구성 파일 필터링.
    구성 파일에는 실제 구성과 관련이 없는 주석 (문자 #로 시작하는 줄) 과 빈 줄이 포함되는 경우가 많습니다. 여러 패턴으로 grep을 사용하여 이러한 줄을 제외할 수 있습니다. /etc/passwd 파일을 사용하여 이를 시연해 보겠습니다.

    grep -v '^#' /etc/passwd | head -5

    이 명령어를 분석해 보겠습니다.

    • grep -v '^#' /etc/passwd: -v 옵션은 일치를 반전시킵니다. 즉, 패턴과 일치하지 않는 줄을 선택합니다. ^##로 시작하는 줄과 일치합니다. 따라서 이 부분은 주석 줄을 필터링합니다.
    • |: 첫 번째 grep 명령어의 출력을 다음 명령어에 파이프합니다.
    • head -5: 출력의 처음 5 줄만 표시합니다.

    예상 출력 (주석이 없는 사용자 계정 항목 표시):

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  4. 시스템 파일에서 특정 패턴 검색.
    grep을 사용하여 다양한 시스템 파일에서 특정 패턴을 검색할 수 있습니다. /etc/passwd 파일에서 셸 관련 항목을 검색해 보겠습니다.

    grep "bash" /etc/passwd

    예상 출력 (bash 셸을 가진 사용자 표시):

    root:x:0:0:root:/root:/bin/bash
    labex:x:1000:1000::/home/labex:/bin/bash

    이 명령어는 bash 를 기본 셸로 사용하는 사용자를 식별하는 데 도움이 됩니다.

RHEL 시스템 정보 스크립트 구축

이 마지막 단계에서는 지금까지 배운 모든 개념, 즉 Bash 스크립팅, for 루프, 원격 실행을 위한 ssh, 필터링을 위한 정규 표현식을 사용한 grep을 결합하여 여러 RHEL 서버에서 시스템 정보를 수집하는 포괄적인 스크립트를 구축합니다. 스크립트는 수집된 데이터를 각 서버에 대한 별도의 출력 파일에 저장합니다.

  1. 스크립트 디렉토리로 이동.
    ~/project/scripts 디렉토리에 있는지 확인합니다.

    cd ~/project/scripts
  2. system_info.sh라는 새 스크립트 생성.
    이 스크립트는 개념을 시연하기 위해 다양한 접근 방식을 사용하여 시스템 정보를 수집하고 출력을 ~/project 디렉토리의 별도 파일로 리디렉션합니다.

    nano를 사용하여 system_info.sh를 엽니다.

    nano system_info.sh

    다음 내용을 파일에 추가합니다.

    #!/usr/bin/bash
    
    ## Define variables for output directory
    OUT_DIR='/home/labex/project'
    
    ## Loop through different information gathering approaches
    for APPROACH in "basic" "detailed"; do
      OUTPUT_FILE="${OUT_DIR}/output-${APPROACH}.txt"
    
      echo "Gathering ${APPROACH} system information..."
      ## Clear previous output file or create a new one
      > "${OUTPUT_FILE}"
    
      ## Get hostname information
      echo "#### Hostname Information ###" >> "${OUTPUT_FILE}"
      if [ "${APPROACH}" = "basic" ]; then
        hostname >> "${OUTPUT_FILE}"
      else
        hostname -f >> "${OUTPUT_FILE}"
      fi
      echo "" >> "${OUTPUT_FILE}" ## Add a blank line for readability
    
      ## Get CPU information (only lines starting with CPU)
      echo "#### CPU Information ###" >> "${OUTPUT_FILE}"
      lscpu | grep '^CPU' >> "${OUTPUT_FILE}"
      echo "" >> "${OUTPUT_FILE}"
    
      ## Get system users with bash shell
      echo "#### Users with Bash Shell ###" >> "${OUTPUT_FILE}"
      grep "bash" /etc/passwd >> "${OUTPUT_FILE}"
      echo "" >> "${OUTPUT_FILE}"
    
      ## Get system information based on approach
      if [ "${APPROACH}" = "basic" ]; then
        echo "#### Basic System Info ###" >> "${OUTPUT_FILE}"
        uname -r >> "${OUTPUT_FILE}"
      else
        echo "#### Detailed System Info ###" >> "${OUTPUT_FILE}"
        uname -a >> "${OUTPUT_FILE}"
      fi
      echo "" >> "${OUTPUT_FILE}"
    
      echo "Information saved to ${OUTPUT_FILE}"
      echo "-----------------------------------------------------"
    done
    
    echo "Script execution complete."

    Ctrl+O를 누르고 Enter를 누른 다음 Ctrl+X를 눌러 nano를 종료하여 파일을 저장합니다.

    이 스크립트의 주요 요소:

    • OUT_DIR='/home/labex/project': 스크립트를 더 유연하고 읽기 쉽게 만들기 위해 사용되는 변수입니다.
    • OUTPUT_FILE="${OUT_DIR}/output-${APPROACH}.txt": 각 접근 방식에 대해 동적으로 출력 파일 이름을 구성합니다.
    • > "${OUTPUT_FILE}": 빈 명령의 출력을 파일로 리디렉션하여 파일이 있으면 내용을 효과적으로 지우고, 없으면 생성합니다. 이렇게 하면 각 실행에 대해 새 파일이 보장됩니다.
    • >> "${OUTPUT_FILE}": 명령의 출력을 지정된 파일에 추가합니다.
    • if [ "${APPROACH}" = "basic" ]; then ... else ... fi: 사용 중인 접근 방식에 따라 다른 명령을 실행하는 조건문입니다.
    • echo "#### Section Header ###": 더 나은 구성을 위해 출력 파일에 명확한 헤더를 추가합니다.
  3. 스크립트를 실행 가능하게 만들기.

    chmod +x system_info.sh

    성공적으로 실행되면 이 명령어의 직접적인 출력은 없습니다.

  4. system_info.sh 스크립트 실행.
    포괄적인 스크립트를 실행합니다. 다양한 접근 방식을 사용하여 시스템 정보를 수집하고 결과를 별도의 파일에 저장합니다.

    ./system_info.sh

    터미널에서 스크립트의 진행 상황을 나타내는 출력을 볼 수 있습니다.

    Gathering basic system information...
    Information saved to /home/labex/project/output-basic.txt
    -----------------------------------------------------
    Gathering detailed system information...
    Information saved to /home/labex/project/output-detailed.txt
    -----------------------------------------------------
    Script execution complete.
  5. 생성된 출력 파일 검토.
    ~/project 디렉토리에서 output-basic.txtoutput-detailed.txt 파일의 내용을 확인하여 스크립트가 예상대로 정보를 수집했는지 확인합니다.

    cat ~/project/output-basic.txt
    cat ~/project/output-detailed.txt

    각 파일의 내용은 다음과 유사해야 합니다 (실제 값은 다름).

    output-basic.txt:

    #### Hostname Information ###
    684791f71c0e35fea6cc1243
    
    #### CPU Information ###
    CPU op-mode(s):                     32-bit, 64-bit
    CPU(s):                             4
    CPU family:                         6
    
    #### Users with Bash Shell ###
    root:x:0:0:root:/root:/bin/bash
    labex:x:1000:1000::/home/labex:/bin/bash
    
    #### Basic System Info ###
    5.4.0-162-generic

    output-detailed.txt:

    #### Hostname Information ###
    684791f71c0e35fea6cc1243
    
    #### CPU Information ###
    CPU op-mode(s):                     32-bit, 64-bit
    CPU(s):                             4
    CPU family:                         6
    
    #### Users with Bash Shell ###
    root:x:0:0:root:/root:/bin/bash
    labex:x:1000:1000::/home/labex:/bin/bash
    
    #### Detailed System Info ###
    Linux 684791f71c0e35fea6cc1243 5.4.0-162-generic #179-Ubuntu SMP Mon Aug 14 08:51:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

    이 최종 스크립트는 시스템 관리 작업에 강력한 자동화 도구를 만들기 위해 다양한 Bash 기능과 Linux 명령어를 결합하는 방법을 보여줍니다.

요약

이 실습에서는 RHEL 시스템 관리를 위한 Bash 스크립트를 생성하고 실행하는 기본적인 단계를 배웠습니다. 스크립트 전용 디렉토리를 설정하는 것으로 시작하여 shebang 라인의 중요성과 echo 명령어를 이해하면서 간단한 Bash 스크립트를 만들었습니다. bash 인터프리터를 사용하여 직접 실행하는 방법과 실행 가능하게 만드는 방법을 포함하여 스크립트를 실행하는 다양한 방법을 살펴보았습니다.

또한, 다양한 접근 방식을 사용하여 시스템 정보를 수집하기 위해 for 루프를 사용하여 시스템 명령어를 통합하고 작업을 자동화하여 스크립팅 기술을 향상시켰습니다. 시스템 정보를 구문 분석하는 데 중요한 기술인 grep 및 정규 표현식을 사용하여 명령 출력을 효과적으로 필터링하는 방법도 배웠습니다. 마지막으로, 이러한 개념을 적용하여 포괄적인 RHEL 시스템 정보 스크립트를 구축하여 다양한 명령어와 스크립팅 구문을 결합하여 귀중한 시스템 데이터를 수집하고 제시하는 방법을 시연했습니다.