2025-09-17 09:24:21
반응형

1. 디렉토리 & 파일 관리

  1. 홈 디렉토리에 prac_final 디렉토리를 만들고 그 안에서 실습하세요.
  2. prac_final 안에 alpha, beta, gamma 세 디렉토리를 동시에 생성하세요.
  3. alpha 안에 src/config/log 디렉토리를 만들되 p 옵션을 사용하세요.
  4. /etc/passwd 파일을 alpha 로 복사하고, 이름을 passwd.txt 로 변경하세요.
  5. /etc/services 와 /etc/hosts 파일을 beta 디렉토리로 한꺼번에 복사하세요.
  6. passwd.txt 를 gamma 로 이동하면서 파일명을 passwd_backup.txt 로 변경하세요.
  7. alpha/src 디렉토리 전체를 beta 밑으로 복사하세요. (재귀 옵션 사용)
  8. gamma 디렉토리를 삭제하려고 시도한 후 실패 원인을 확인하세요.
  9. rm -r 옵션을 사용하여 gamma 디렉토리를 삭제하세요.
  10. 현재 디렉토리 구조를 확인하세요.
mkdir ~/prac_final                           # 1. prac_final 디렉토리 생성
cd ~/prac_final

mkdir alpha beta gamma                       # 2. alpha, beta, gamma 동시 생성

mkdir -p alpha/src/config/log                # 3. -p 옵션으로 중간 경로까지 생성

cp /etc/passwd alpha/passwd.txt              # 4. passwd 파일 복사 & 이름 변경

cp /etc/services /etc/hosts beta/            # 5. services, hosts 동시 복사

mv alpha/passwd.txt gamma/passwd_backup.txt  # 6. 이동하면서 이름 변경

cp -r alpha/src beta/                        # 7. 재귀 옵션으로 src 전체 복사

rmdir gamma                                  # 8. 실패 (디렉토리 비어있지 않음)

rm -r gamma                                  # 9. -r 옵션으로 디렉토리 삭제

tree                                         # 10. 디렉토리 구조 확인


2. vi + 권한 관리

  1. 홈 디렉토리에 project_final 디렉토리를 만들고 그 안으로 이동하세요.
  2. doc, src, backup 세 개의 하위 디렉토리를 만드세요.
  3. doc/guide.txt 파일을 생성한 후, vi 편집기를 이용해 다음 내용을 입력, 저장 후 종료하세요.
Linux Practice Project This is a final practice for vi editor and permission Only the owner can edit this file Team members can only read

     4. guide.txt 내용을 확인하세요.

     5. 다시 vi로 guide.txt를 열어,

  • 줄 번호 표시
  • 3번째 줄로 이동 후 해당 줄을 삭제
  • Project 라는 단어 검색
  • 저장 후 종료하세요.

 

       6.guide.txt 파일 권한을 다음과 같이 설정하세요.

  • 소유자(user): 읽기/쓰기 가능
  • 그룹(group), 기타(other): 읽기만 가능

       7. src 디렉토리에 run.sh 파일을 만든 뒤, vi로 열어 아래 내용을 입력, 저장 후 종료하세요.

#!/bin/bash echo
"Project script executed"

     8. run.sh 파일에 실행 권한을 부여하세요.

  • 소유자만 실행할 수 있도록

     9. backup 디렉토리에 guide.txt 파일을 복사하세요. 파일명은 guide.bak 으로 하세요.

    10. project_final 전체 디렉토리 구조와 권한을 확인하세요.

 

mkdir ~/project_final && cd ~/project_final    # 1. 디렉토리 생성 후 이동
mkdir doc src backup                           # 2. 하위 디렉토리 생성

vi doc/guide.txt                               # 3. 파일 작성 (vi 편집기)
# 내용 입력 후 저장:
# Linux Practice Project
# This is a final practice for vi editor and permission
# Only the owner can edit this file
# Team members can only read

cat doc/guide.txt                              # 4. 내용 확인

vi doc/guide.txt                               # 5. vi에서:
# :set nu        (줄 번호 표시)
# :3             (3번째 줄로 이동)
# dd             (줄 삭제)
# /Project       (단어 검색)
# :wq            (저장 후 종료)

chmod 644 doc/guide.txt                        # 6. 권한 설정 (u=rw, g=r, o=r)

vi src/run.sh                                  # 7. 실행 스크립트 작성
# 내용:
# !/bin/bash
# echo "Project script executed"

chmod 700 src/run.sh                           # 8. 소유자만 실행 가능

cp doc/guide.txt backup/guide.bak              # 9. guide.txt → guide.bak 복사

ls -lR                                         # 10. 전체 구조와 권한 확인


3. 프로세스 관리

  1. 현재 로그인한 셸(bash)의 프로세스 ID(PID)를 확인하세요.
  2. sleep 500 프로세스를 백그라운드로 실행하고, ps 명령으로 PID를 확인하세요.
  3. jobs 명령으로 현재 작업 목록을 확인하세요.
  4. 백그라운드에서 실행 중인 sleep 500 프로세스를 fg 명령으로 포그라운드로 전환해 보세요. (종료하지 말 것)
  5. 포그라운드에 있는 sleep 500 프로세스를 Ctrl+Z로 중지한 뒤, 다시 bg로 백그라운드에서 실행해 보세요.
  6. pgrep을 이용해서 실행 중인 sleep 프로세스의 PID를 출력하세요.
  7. kill -15 명령으로 해당 sleep 프로세스를 정상 종료하세요. 종료됐는지 ps 로 확인하세요.
  8. sleep 1000 프로세스를 실행한 뒤, kill -9 옵션으로 강제 종료하세요.
  9. top 명령을 실행해서 CPU 사용량 기준으로 정렬하세요. (P 키)
  10. top 안에서 PID를 직접 입력해 프로세스를 종료하는 방법을 실습해 보세요.


4. 사용자 관리

  1. 현재 시스템에 존재하는 사용자 계정 중 UID가 1000 이상인 일반 사용자 계정을 찾아보세요.
  2. projectx 라는 새 사용자를 홈 디렉토리와 함께 생성하고 암호를 설정하세요.
  3. projectx 의 기본 셸을 /bin/sh 로 변경하세요.
  4. devops 라는 그룹을 만들고, projectx를 해당 그룹에 추가하세요.
  5. projectx 의 UID를 2500 으로 변경하세요.
  6. devops 그룹에 임시로 암호를 설정한 뒤, 다시 해제하세요.
  7. who, w 명령으로 현재 로그인한 사용자 세션을 확인하세요.
  8. id projectx 를 실행하여 UID, GID, 소속 그룹을 확인하세요.
  9. /etc/passwd 와 /etc/shadow 파일을 열어 projectx 계정 항목이 어떻게 기록되는지 확인하세요.
  10. 마지막으로 projectx 계정을 홈 디렉토리와 함께 삭제하세요.
awk -F: '$3 >= 1000 {print $1,$3}' /etc/passwd   # 1. UID>=1000 사용자 확인

sudo useradd -m projectx                         # 2. 사용자 생성
sudo passwd projectx

sudo chsh -s /bin/sh projectx                    # 3. 기본 셸 변경

sudo groupadd devops                             # 4. 그룹 생성
sudo usermod -aG devops projectx

sudo usermod -u 2500 projectx                    # 5. UID 변경

sudo gpasswd devops                              # 6. 그룹 암호 설정
sudo gpasswd -r devops                           # 해제

who                                              # 7. 로그인 사용자 확인
w

id projectx                                      # 8. UID/GID 확인

grep projectx /etc/passwd /etc/shadow            # 9. 계정 정보 확인

sudo userdel -r projectx                         # 10. 사용자 삭제 (홈 포함)


5. 셸 사용

  1. 현재 로그인한 사용자의 셸이 무엇인지 /etc/passwd 파일에서 확인하세요.
  2. subshell_test 디렉토리를 만들고 그 안으로 이동한 뒤, ( cd /tmp; pwd ) 를 실행하고 다시 pwd 를 실행했을 때 결과 차이를 확인하세요.
  3. printf 를 이용해서 3 x 5 = 15 라는 문장을 출력하세요.
  4. 변수 COURSE 에 "Linux Practice" 라는 값을 넣고, 작은따옴표와 큰따옴표로 출력했을 때 차이를 확인하세요.
  5. 현재 디렉토리에 a1.txt, a2.txt, b1.txt 파일을 만들고, ls a* 와 ls ?1.txt 실행 결과의 차이를 확인하세요.
  6. /etc/passwd 파일을 passwd_copy.txt 로 복사하고, cat 과 리다이렉션(<) 을 이용해 파일 내용을 출력하세요.
  7. 존재하지 않는 파일을 ls 해서, 오류 메시지를 err.log 로 저장하고, 표준 출력과 오류를 합쳐서 all.log 로 저장해 보세요.
  8. 환경 변수 TESTVAR=hello 를 export 해서 서브셸에서도 보이게 한 뒤, export -n 으로 환경 변수 속성을 해제하세요.
  9. alias ll='ls -l' 을 설정하고 실행해 본 뒤, unalias ll 로 해제하세요.
  10. 현재 프롬프트(PS1)를 [사용자명:디렉토리]$ 형태로 변경해 보세요.
grep $USER /etc/passwd                 # 1. 내 로그인 셸 확인

mkdir subshell_test && cd subshell_test
( cd /tmp; pwd )                       # 2. 서브셸 → /tmp 출력
pwd                                    # 원래 디렉토리 그대로

printf "3 x 5 = %d\n" $((3*5))         # 3. printf 사용

COURSE="Linux Practice"                # 4. 변수 설정
echo '$COURSE'                         # 작은따옴표: 그대로 출력
echo "$COURSE"                         # 큰따옴표: 값 출력

touch a1.txt a2.txt b1.txt             # 5. 샘플 파일
ls a*                                  # a로 시작하는 파일
ls ?1.txt                              # 두 번째 글자 1인 파일

cp /etc/passwd passwd_copy.txt         # 6. 복사
cat < passwd_copy.txt                  # 리다이렉션으로 출력

ls nofile 2> err.log                   # 7. 오류 메시지만 저장
ls nofile > all.log 2>&1               # 표준+에러 합쳐 저장

export TESTVAR=hello                   # 8. 환경 변수 등록
bash -c 'echo $TESTVAR'                # 서브셸 확인
export -n TESTVAR                      # 환경 변수 속성 해제

alias ll='ls -l'                       # 9. alias 등록
ll
unalias ll                             # alias 해제

PS1='[\u:\w]\$ '                       # 10. 프롬프트 변경

프롬프트 원복 방법 : 터미널 껐다가 키거나 아래와 같이 설정
PS1='\u@\h:\w\$ '

👉 기본 프롬프트(예: user@hostname:/home/user$)로 복구됩니다.


6. 쉘 스크립트

1. 사용자 입력 & 조건문

  • login.sh 라는 스크립트를 작성하세요.
  • 기능:
    1. 사용자에게 이름을 입력받는다.
    2. 입력값이 "admin" 이면 "Welcome Administrator" 출력
    3. 그렇지 않으면 "Welcome $이름" 출력

login.sh: 6: [: admin: unexpected operator
https://deeprun.tistory.com/256

2. 반복문 & 합계

  • sum.sh 라는 스크립트를 작성하세요.
  • 기능:
    1. while 문을 사용한다.
    2. 1부터 100까지 합을 계산하고 "The sum is: 5050" 형태로 출력한다.

👉 출력: The sum is: 5050


3. 함수 & 파일 조건

  • checkfile.sh 라는 스크립트를 작성하세요.
  • 기능:
    1. 함수 check_file() 을 정의한다.
    2. 매개변수로 파일명을 받는다.
    3. 해당 파일이 존재하고 크기가 0보다 크면 "File exists and not empty" 출력
    4. 그렇지 않으면 "File missing or empty" 출력
    5. 스크립트 실행 시, check_file /etc/passwd 와 같이 호출해 본다.

 

반응형

'Cloud Engineering Bootcamp > 5. Linux' 카테고리의 다른 글

09. Linux Shell Script Programming  (0) 2025.09.16
08. 리눅스 쉘 사용하기  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15