반응형
1. 디렉토리 & 파일 관리
- 홈 디렉토리에 prac_final 디렉토리를 만들고 그 안에서 실습하세요.
- prac_final 안에 alpha, beta, gamma 세 디렉토리를 동시에 생성하세요.
- alpha 안에 src/config/log 디렉토리를 만들되 p 옵션을 사용하세요.
- /etc/passwd 파일을 alpha 로 복사하고, 이름을 passwd.txt 로 변경하세요.
- /etc/services 와 /etc/hosts 파일을 beta 디렉토리로 한꺼번에 복사하세요.
- passwd.txt 를 gamma 로 이동하면서 파일명을 passwd_backup.txt 로 변경하세요.
- alpha/src 디렉토리 전체를 beta 밑으로 복사하세요. (재귀 옵션 사용)
- gamma 디렉토리를 삭제하려고 시도한 후 실패 원인을 확인하세요.
- rm -r 옵션을 사용하여 gamma 디렉토리를 삭제하세요.
- 현재 디렉토리 구조를 확인하세요.
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 + 권한 관리
- 홈 디렉토리에 project_final 디렉토리를 만들고 그 안으로 이동하세요.
- doc, src, backup 세 개의 하위 디렉토리를 만드세요.
- 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. 프로세스 관리
- 현재 로그인한 셸(bash)의 프로세스 ID(PID)를 확인하세요.
- sleep 500 프로세스를 백그라운드로 실행하고, ps 명령으로 PID를 확인하세요.
- jobs 명령으로 현재 작업 목록을 확인하세요.
- 백그라운드에서 실행 중인 sleep 500 프로세스를 fg 명령으로 포그라운드로 전환해 보세요. (종료하지 말 것)
- 포그라운드에 있는 sleep 500 프로세스를 Ctrl+Z로 중지한 뒤, 다시 bg로 백그라운드에서 실행해 보세요.
- pgrep을 이용해서 실행 중인 sleep 프로세스의 PID를 출력하세요.
- kill -15 명령으로 해당 sleep 프로세스를 정상 종료하세요. 종료됐는지 ps 로 확인하세요.
- sleep 1000 프로세스를 실행한 뒤, kill -9 옵션으로 강제 종료하세요.
- top 명령을 실행해서 CPU 사용량 기준으로 정렬하세요. (P 키)
- top 안에서 PID를 직접 입력해 프로세스를 종료하는 방법을 실습해 보세요.
4. 사용자 관리
- 현재 시스템에 존재하는 사용자 계정 중 UID가 1000 이상인 일반 사용자 계정을 찾아보세요.
- projectx 라는 새 사용자를 홈 디렉토리와 함께 생성하고 암호를 설정하세요.
- projectx 의 기본 셸을 /bin/sh 로 변경하세요.
- devops 라는 그룹을 만들고, projectx를 해당 그룹에 추가하세요.
- projectx 의 UID를 2500 으로 변경하세요.
- devops 그룹에 임시로 암호를 설정한 뒤, 다시 해제하세요.
- who, w 명령으로 현재 로그인한 사용자 세션을 확인하세요.
- id projectx 를 실행하여 UID, GID, 소속 그룹을 확인하세요.
- /etc/passwd 와 /etc/shadow 파일을 열어 projectx 계정 항목이 어떻게 기록되는지 확인하세요.
- 마지막으로 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. 셸 사용
- 현재 로그인한 사용자의 셸이 무엇인지 /etc/passwd 파일에서 확인하세요.
- subshell_test 디렉토리를 만들고 그 안으로 이동한 뒤, ( cd /tmp; pwd ) 를 실행하고 다시 pwd 를 실행했을 때 결과 차이를 확인하세요.
- printf 를 이용해서 3 x 5 = 15 라는 문장을 출력하세요.
- 변수 COURSE 에 "Linux Practice" 라는 값을 넣고, 작은따옴표와 큰따옴표로 출력했을 때 차이를 확인하세요.
- 현재 디렉토리에 a1.txt, a2.txt, b1.txt 파일을 만들고, ls a* 와 ls ?1.txt 실행 결과의 차이를 확인하세요.
- /etc/passwd 파일을 passwd_copy.txt 로 복사하고, cat 과 리다이렉션(<) 을 이용해 파일 내용을 출력하세요.
- 존재하지 않는 파일을 ls 해서, 오류 메시지를 err.log 로 저장하고, 표준 출력과 오류를 합쳐서 all.log 로 저장해 보세요.
- 환경 변수 TESTVAR=hello 를 export 해서 서브셸에서도 보이게 한 뒤, export -n 으로 환경 변수 속성을 해제하세요.
- alias ll='ls -l' 을 설정하고 실행해 본 뒤, unalias ll 로 해제하세요.
- 현재 프롬프트(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 라는 스크립트를 작성하세요.
- 기능:
- 사용자에게 이름을 입력받는다.
- 입력값이 "admin" 이면 "Welcome Administrator" 출력
- 그렇지 않으면 "Welcome $이름" 출력
login.sh: 6: [: admin: unexpected operator
https://deeprun.tistory.com/256
2. 반복문 & 합계
- sum.sh 라는 스크립트를 작성하세요.
- 기능:
- while 문을 사용한다.
- 1부터 100까지 합을 계산하고 "The sum is: 5050" 형태로 출력한다.
👉 출력: The sum is: 5050
3. 함수 & 파일 조건
- checkfile.sh 라는 스크립트를 작성하세요.
- 기능:
- 함수 check_file() 을 정의한다.
- 매개변수로 파일명을 받는다.
- 해당 파일이 존재하고 크기가 0보다 크면 "File exists and not empty" 출력
- 그렇지 않으면 "File missing or empty" 출력
- 스크립트 실행 시, 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 |