Cloud Engineering Bootcamp/5. Linux (10)
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
2025-09-16 14:52:51
반응형

🐚 9. 셸 스크립트 프로그래밍

 

1️⃣ 스크립트 작성 & 실행 방법

  • 스크립트 시작은 항상 #!/bin/bash
  • 실행 방법
 
sh script.sh # sh로 실행
chmod +x script.sh && ./script.sh # 실행 권한 주고 직접 실행 
 
flowchart LR A[사용자 입력] --> B[Shell Script] B --> C[리눅스 커널 실행] C --> D[결과 출력]

2️⃣ 자주 사용하는 셸 스크립트

📌 로그 백업 & 정리 스크립트

#!/bin/bash
# log_backup.sh

LOG_DIR=
"/var/log/myapp"# 로그가 있는 폴더
BACKUP_DIR=
"/var/backups/myapp"# 백업 저장 폴더
DATE=$(
date +%Y%m%d) # 오늘 날짜 (예: 20250916)
mkdir -p "$BACKUP_DIR" # 백업 폴더 없으면 생성

# 7일 지난 .log 파일 찾아서 백업하고 내용 비움 find "$LOG_DIR" -type f -name "*.log" -mtime +7 | whileread file; do       tar -czf "$BACKUP_DIR/$(basename $file).$DATE.tar.gz" "$file" # 압축 백업
      >
"$file" # 원본 로그는 지우지 않고 내용만 삭제done

👉 현업에서 매우 많이 씀 (로그 용량이 차서 서버가 죽는 걸 방지)


📌 프로세스 모니터링 & 재시작

 
#!/bin/bash
# monitor.sh

PROCESS="myapp"                                           # 감시할 프로세스 이름
if ! pgrep -x "$PROCESS" > /dev/null; then                # 실행 중인지 확인
    echo "$(date): $PROCESS not running. Restarting..." >> /var/log/monitor.log
    systemctl start "$PROCESS"                            # 안 돌아가면 재시작
fi

👉 운영팀 필수 (서비스가 죽었을 때 자동 복구)


📌 서버 헬스체크

 
#!/bin/bash
# healthcheck.sh

echo "===== $(hostname) ====="      # 서버 이름
echo "Uptime:"                     # 서버 켜진 시간
uptime
echo

echo "Disk usage:"                 # 디스크 사용량
df -h | grep -v tmpfs
echo

echo "Top 5 memory-consuming processes:" # 메모리 많이 쓰는 상위 5개
ps aux --sort=-%mem | head -n 6

👉 운영팀 기본 (서버 상태를 빠르게 확인할 때)


📌 대량 파일 이름 변경

 
#!/bin/bash# rename.shfor file in *.txt; do# 모든 .txt 파일에 대해mv"$file" "${file%.txt}.bak" # 확장자 .txt → .bak 로 변경done

👉 파일 대량 처리할 때 개발자들이 자주 활용


📌 배포 자동화 (단순 버전)


#!/bin/bash
 
# deploy.sh
 APP_DIR=
"/opt/myapp"
 
# 앱 코드 경로
 BACKUP_DIR=
"/opt/backup"
 
# 백업 저장 경로
 DATE=$(
date
 +%Y%m%d%H%M) 
# 현재 시간
 tar -czf 
"$BACKUP_DIR
/myapp_
$DATE
.tar.gz" 
"$APP_DIR

# 현재 버전 백업
 git -C 
"$APP_DIR
" pull origin main 
# 최신 코드 받기
 systemctl restart myapp.service 
# 서비스 재시작
 

👉 스타트업/중소기업에서 직접 서버 운영 시 자주 사용


3️⃣ 실습 예제: .txt → .bak 변환하기

① 연습 디렉토리 만들기

 
mkdir ~/rename-test # 테스트용 폴더 만들기 cd ~/rename-test

② 샘플 파일 생성

 
touch file1.txt file2.txt file3.txt # 빈 텍스트 파일 3개 생성 ls

③ 스크립트 작성

 
vi rename.sh

내용:


#!/bin/bash
 
for
 file 
in
 *.txt; 
do
 
# 모든 .txt 파일에 대해
 
mv
 
"$file

"${file%.txt}
.bak" 
# 확장자를 .bak으로 변경
 
done
 

④ 실행 권한 부여

chmod +x rename.sh

⑤ 실행

 
./rename.sh ls

👉 결과: file1.bak file2.bak file3.bak


❓ Quiz : 되돌리기

.bak → .txt 로 다시 복원하려면?

 
#!/bin/bashfor
file
in *.bak;
do# 모든 .bak 파일에 대해
mv"$file" "${file%.bak}.txt" # 확장자를 .txt로 변경
done

⊡ 기본if문

if1.sh
if [ 조건]
then
   참일경우실행
fi
#!/bin/bash
if [ "KIM" = "KIM" ]
then
        echo "It's true."
fi
exit 0


⊡ if-else문

if2.sh
if [ 조건]
then
    참일경우실행
else
    거짓일경우실행
fi
#!/bin/bash
if [ "KIM" = "LEE" ]
then
       echo "It's true."
else
       echo "It's false."
fi
exit 0

⊡ 조건문에들어가는비교연산자

if3.sh
#!/bin/bash
if [ 100 -eq 200 ]
then
       echo "100 and 200 are the same."
else
       echo "100 and 200 are different"
fi
exit 0

⊡ 파일과 관련된 조건

if4.sh
#!/bin/bash
fname=/lib/systemd/system/httpd.service
if [ -f $fname]
then
        head -5 $fname
else
        echo "Web server is not installed."
fi
exit 0


⊡ case~esac문

case1.sh
#!/bin/bash
case "$1" in
            start)
                   echo "Start~";;
            stop)
                   echo "Stop~";;
         restart)
                   echo "Restart~";;
                  *)
                    echo "I don't know what it is~~";;
esac
exit 0

 

case2.sh
#!/bin/bash
echo "Is Linux fun? (yes / no)"
read answer
case $answer in yes |y |Y | Yes |YES)
         echo "That's good."
         echo "Cheer up~ ^^";;
    [nN]*)
         echo "That's too bad.. ㅠㅠ";;
      *)
         echo "You should have just typed YES or NO" exit 1;;

esac
exit 0


⊡ AND, OR 관계연산자

andor.sh
#!/bin/bash

echo "Please enter the file name you want to view."
read fname
if [ -f $fname] && [ -s $fname] ;
then
       head -5 $fname
else
       echo "The file does not exist or its size is 0."
fi
exit 0


⊡ for~in문

forin.sh
#!/bin/bash
hap=0
for i in 1 2 3 4 5 6 7 8 9 10
do
     hap=`expr $hap + $i`
done
echo "The sum of 1 to 10 is " $hap
exit 0

forin2.sh
#!/bin/bash
for fnamein $(ls *.sh)
do
     echo "---$fname---"
     head -3 $fname
done
exit 0


⊡ while문

while.sh
#!/bin/bash
while true
do
     echo "Ubuntu"
done
exit 0
#!/bin/bash
while :
do
     echo "Ubuntu"
done
exit 0

while2.sh
` -> 햅틱보다는 요즘 $로 많이 사용
#!/bin/bash
hap=0 i=1
while [ $i-le 10 ]
do
     hap=`expr $hap + $i`
     i=`expr $i+ 1`
done
echo "The sum of 1 to 10 is: $hap"
exit 0
#!/bin/bash
hap=0 i=1
while [ $i-le 10 ]
do
     hap=$((hap + i))
     i=$((i+ 1))
done
echo "The sum of 1 to 10 is: $hap"
exit 0

while3.sh
#!/bin/bash

echo "Please enter your password."
read mypass
while [ "$mypass" != "1234" ]
do
     echo "Incorrect. Please re-enter."
     read mypass
done
echo "Success~"
exit 0


until문

조건식이참일때까지(=거짓인동안) 계속반복
until.sh
#!/bin/bash

hap=0
i=1
while [ $i-le 10 ]
do
    hap=`expr $hap + $i`
    i=`expr $i + 1`
done
echo "The sum of 1 to 10 is: $hap"
exit 0

#!/bin/bash

hap=0
i=1
until [ $i-gt 10 ]
do
    hap=`expr $hap + $i`
    i=`expr $i + 1`
done
echo "The sum of 1 to 10 is: $hap"
exit 0


break, continue, exit, return

bce.sh
#!/bin/bash

echo "Starts infinite loop input. (b : break, c : continue, e : exit)"
while true; do
         read input
         case $input in
                 b | B)
                          break
                          ;;
                 c | C)
                         echo "If you press continue, it will return to the while condition" continue
                         ;;
                e | E)
                         echo "If you press exit, the program (function) will be completely terminated."
                         exit 1
                         ;;
                *)
                        echo "Unknown input. Please press b, c, or e."
                        ;;
          esac
done
echo "If you press break, it will exit while and print this sentence."
exit 0

 

 


🎯 정리 

  • 셸 스크립트 = 반복되는 일을 자동으로 해주는 “작은 프로그램”
  • 현업에서 많이 쓰는 것
    • 로그 정리 (서버 터짐 방지)
    • 프로세스 모니터링 (서비스 다운되면 자동 복구)
    • 서버 헬스체크 (운영팀 점검)
    • 대량 파일 이름/텍스트 처리
    • 배포 자동화
  • 중학생 수준 비유: 집에서 매일 하는 일(청소, 정리, 확인)을 사람이 직접 하지 않고 자동 로봇이 대신 해주는 것 🚀
반응형

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

10. 리눅스 종합 실습  (0) 2025.09.17
08. 리눅스 쉘 사용하기  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
2025-09-16 13:38:01
반응형

🐚 리눅스 셸 사용하기 정리

1️⃣ 셸 기본

  • 셸(Shell): 사용자가 입력한 명령을 해석해서 운영체제(OS)에게 전달하는 번역기 같은 프로그램
  • 종류: sh, bash, csh, ksh 등
  • 기본 프롬프트 기호:
    • $ → 일반 사용자
    • # → 관리자(root)
    • % → csh 같은 셸

👉 기본 셸 바꾸기

 
chsh -s /bin/bash # 기본 셸을 bash로 변경

2️⃣ 셸 사용법

📌 출력 명령

 
echo"Hello"# 화면에 글자 출력printf"Hi\n"# 줄바꿈 포함해서 출력

📌 특수문자

  • * : 모든 파일
  • ? : 한 글자 대체
  • [] : 특정 문자 집합
  • ~ : 홈 디렉토리
  • ; : 여러 명령 연속 실행
  • | : 앞 결과 → 뒤 명령 입력

📌 리다이렉션

 
ls > file.txt # 명령어 결과를 file.txt에 저장 (덮어쓰기)
ls >> file.txt # 명령어 결과를 file.txt 끝에 추가
cat < file.txt # file.txt 내용을 입력으로 사용
ls not_exist 2> error.log # 에러 메시지만 error.log에 저장
 

3️⃣ 셸 환경

🧩 환경 변수

SOME=testecho$SOME# 변수 값 출력 → test bash -c 'echo "child:$SOME"'# 전파 안 됨
export SOME # 환경 변수로 등록 bash -c 'echo "child:$SOME"'# 전파 됨

🧹 환경 변수 해제

 
export SOME1=hello env | grep SOME1 # 환경 변수 확인 export -n SOME1 # 환경 변수 속성만 제거 unset SOME1 # 변수 완전히 삭제

4️⃣ alias (자주 쓰는 명령어 단축키)

alias ll='ls -lF --color=auto'# 파일 목록 자세히 보기
alias la='ls -A'# 숨김 파일까지 보기
alias ..='cd ..'# 상위 폴더로 이동
aliasrm='rm -i'# 삭제할 때 확인 질문
alias grep='grep --color=auto'# grep 결과 색상 강조
aliasdf='df -h'# 디스크 용량 보기
alias myip='curl ifconfig.me'# 외부 IP 확인

👉 현업에서 가장 자주 쓰는 것

  • ll, la → 파일 확인
  • .., ... → 디렉토리 이동
  • rm -i, cp -i, mv -i → 실수 방지 (중요 파일 날리지 않도록)
  • grep --color → 로그 분석할 때 필수
  • df -h, du -h → 서버 디스크 용량 확인
  • myip → 서버 외부 IP 확인

5️⃣ 함수(Function)

 
function cdpwd { if [ -z "$1" ]; then# 인자가 없으면echo"Usage: cdpwd <dir>"# 사용법 출력return 1 # 에러 코드 반환ficd"$1" && pwd# 해당 폴더로 이동하고 현재 경로 출력 }

👉 cdpwd /tmp → /tmp로 이동하면서 경로까지 확인


6️⃣ 히스토리 활용

 
history | tail# 최근 사용한 명령어 보기 !! # 마지막 명령어 다시 실행 !5 # 히스토리에서 5번 명령어 실행

👉 현업에서는 history | grep ssh 같은 식으로, 과거에 쓴 명령어 찾는 경우가 많음


7️⃣ 프롬프트 (PS1) 꾸미기

 
echo"$PS1" # 현재 프롬프트 확인
PS1=
'[${USER} ${PWD}] $ '# 사용자 + 경로 표시
PS1=
'\u@\h \w\$ '# 사용자@호스트 경로 $
PS1=
"\e[34;1m\u@\h \w \$ \e[0m"# 파란색, 볼드체

👉 서버가 여러 개일 때 프롬프트 색상 다르게 해두면 실수 줄일 수 있음 (예: 운영서버 빨간색, 테스트서버 초록색)


📊 전체 흐름 (Mermaid 다이어그램)

 

 


🎯 정리

  • = "컴퓨터에게 명령 내리는 번역기"
  • 환경 변수 = "컴퓨터에 메모해둔 값"
  • alias = "명령어 단축키"
  • 리다이렉션/파이프 = "결과를 저장하거나, 다른 명령어에 전달"
  • PS1 = "프롬프트 꾸미기"
  • 현업에서 필수 = alias rm='rm -i', grep --color, df -h, myip
반응형

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

10. 리눅스 종합 실습  (0) 2025.09.17
09. Linux Shell Script Programming  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
2025-09-15 15:46:20
반응형

👤 리눅스 사용자 관리 정리

리눅스는 여러 사용자가 동시에 접속할 수 있는 멀티유저 시스템이에요.
그래서 "누가 로그인했는지, 어떤 권한을 갖는지"를 사용자 계정 관리로 철저히 통제해야 합니다. 🔑


1️⃣ 사용자 계정 관련 파일

리눅스에서는 사용자 정보를 파일에 저장해요.

파일설명
/etc/passwd 계정 기본 정보 (ID, UID, GID, 홈 디렉토리, 로그인 셸)
/etc/shadow 암호화된 비밀번호와 패스워드 만료 정보
/etc/login.defs UID/GID 범위, 비밀번호 정책 기본값
/etc/group 그룹 정보
/etc/gshadow 그룹 암호 및 멤버 정보
 
flowchart TD A[/etc/passwd] -->|계정| U[사용자 ID, 홈 디렉토리] B[/etc/shadow] -->|보안| P[비밀번호 해시, 만료일] C[/etc/group] -->|그룹| G[그룹 정보] D[/etc/login.defs] -->|정책| L[UID/GID 범위, 정책]

2️⃣ 사용자 계정 관리 명령어


명령어 설명
useradd 사용자 추가
usermod 사용자 정보 수정
userdel 사용자 삭제
passwd 암호 설정 및 계정 잠금
chage 비밀번호 만료 정책 관리

🧑‍💻 실습 예시

```
# 1. 사용자 생성 및
홈 디렉토리 생성(-m 옵션)
sudo useradd -m user1
 
# 2. 암호 설정
sudo passwd user1 # 비밀번호 입력 후 Enter
 
# 3. UID 변경
sudo usermod -u 2001 user1
 
# user1 계정의 UID를 2001로 변경
# 4. 사용자 삭제 (-r 옵션: 홈 디렉토리도 같이 삭제)
sudo userdel -r user1
```

3️⃣ 그룹 관리 명령어

명령어설명
groupadd 그룹 생성
groupmod 그룹 수정
groupdel 그룹 삭제
gpasswd 그룹 암호 설정, 멤버 추가/삭제
```
# 그룹 생성
sudo groupadd devteam
 
# 그룹 이름 변경
sudo groupmod -n devops devteam
 
# 그룹 삭제
sudo groupdel devops
 
# 그룹에 사용자 추가
sudo gpasswd -a user1 devops
 
# 그룹에서 사용자 제거
sudo gpasswd -d user1 devops
```

4️⃣ 사용자 정보 관리 명령어

명령어설명
who / w 로그인 사용자 확인
last 최근 로그인 기록 확인
id UID, GID, 그룹 확인
groups 속한 그룹 확인
sudo 특정 권한 위임
chown 파일 소유자 변경
chgrp 파일 그룹 변경

🧑‍💻 실습 예시

 
# 현재 로그인 사용자 확인 who w last | head
# 최근 로그인 기록 상위 10줄
# 사용자 UID, GID 확인 id user1 groups user1
# 파일 소유자 변경 sudo chown user1 test.txt
# 파일 그룹 변경 sudo chgrp devops test.txt
# sudo 권한 부여 (visudo 실행) sudo visudo
# user2 ALL=/sbin/useradd,/sbin/usermod


5️⃣ 현업에서 자주 쓰는 것들 🔑

  • id, groups → 계정 권한 및 그룹 확인
  • passwd -l user → 계정 잠금 (보안 사고 방지)
  • sudo visudo → 특정 사용자에게 제한된 권한 부여
  • chown, chgrp → 파일 접근 권한 관리
  • /etc/shadow → 보안 관련 문제(비번 만료) 확인

✅ 정리

  • 리눅스는 계정과 그룹으로 사용자 권한을 관리함
  • /etc/passwd, /etc/shadow 가 핵심 파일
  • useradd/userdel/usermod, groupadd/groupdel 로 계정/그룹 관리
  • 현업에서는 권한 위임(sudo), 계정 잠금(passwd -l), 로그인 기록 확인(last) 이 많이 쓰임

👉 이렇게 정리하면,  "리눅스에서 사용자/그룹 관리 = 신분증 만들기, 지갑 관리하기" 정도로 이해할 수 있어요 😊

반응형

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

09. Linux Shell Script Programming  (0) 2025.09.16
08. 리눅스 쉘 사용하기  (0) 2025.09.16
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12
2025-09-15 13:50:55
반응형

🖥️ 리눅스 프로세스 관리 완벽 정리

"프로세스"는 실행 중인 프로그램이에요.
서버 관리나 개발 환경에서는 프로세스를 확인하고, 멈추고, 모니터링 하는 일이 아주 중요합니다.
오늘은 리눅스에서 프로세스 관리하는 방법을 초보자도 쉽게 이해할 수 있도록 정리해봤습니다. 🚀


📌 1. 프로세스 개념

  • 프로세스(Process) = 실행 중인 프로그램
  • PID(Process ID): 프로세스를 구분하는 고유 번호
  • 부모/자식 관계: 부모가 프로그램을 실행하면 자식 프로세스가 만들어짐

flowchart TD P[👩 부모 프로세스] --> C1[🧒 자식 프로세스 1] P --> C2[🧒 자식 프로세스 2] C2 --> G[👶 손자 프로세스]


📌 2. 프로세스의 종류

종류설명예시

🛠️ 데몬(daemon) 백그라운드에서 서비스 제공 sshd, cron
👻 고아 프로세스 부모가 종료 → systemd가 관리  
☠️ 좀비 프로세스 종료됐지만 부모가 회수 안 함 로 표시

📌 3. 자주 쓰는 프로세스 명령어

명령어설명

ps 현재 실행 중인 프로세스 목록 확인
top 실시간 모니터링
jobs 현재 쉘에서 실행 중/중지된 작업 목록
fg / bg 작업을 포그라운드/백그라운드로 전환
kill PID로 종료 (-15 정상, -9 강제)
pgrep 이름으로 PID 검색
pkill 이름으로 직접 종료

📌 4. 프로세스 관리 실습 🧑‍💻

(1) 전체 프로세스 확인

ps -ef | head \# -e : 모든 프로세스 \# -f : 자세히 표시 \# head : 위에서 10줄만 출력

ps aux | head \# a : 모든 사용자 프로세스 \# u : CPU/메모리 사용량 표시 \# x : 터미널 없는 프로세스도 표시

(2) 특정 프로세스 검색

ps -ef | grep bash \# bash 프로세스 검색 pgrep -l bash \# PID와 함께 출력

(3) 포그라운드 ↔ 백그라운드

sleep 100 \# 실행 중 Ctrl+Z → 중지 bg %+ \# 중지된 작업을 백그라운드 실행 jobs \# 작업 목록 확인

(4) 포그라운드로 전환

fg %1 \# 1번 작업을 포그라운드 실행 \# Ctrl+C 로 종료

(5) 백그라운드 작업 강제 종료

sleep 200 & \# 백그라운드 실행 jobs \# 작업 번호 확인 kill %1 \# 1번 작업 종료

(6) 이름으로 종료

sleep 300 & \# 실행 pgrep -l sleep \# PID 확인 pkill -x sleep \# 이름으로 바로 종료

(7) 실시간 모니터링

top \# q : 종료 \# P : CPU 사용량 기준 정렬 \# M : 메모리 사용량 기준 정렬 \# k : 프로세스 종료 (PID 입력)

flowchart LR PS[📋 ps -ef] -->|스냅샷| User[👨 사용자] TOP[📊 top] -->|실시간| User JOBS[📂 jobs] -->|작업 목록| FGFG[🔄 fg/bg 전환] KILL[⛔ kill] -->|PID| ProcessX[❌ 프로세스 종료] PKILL[⚡ pkill] -->|이름| ProcessX


📌 5. 현업에서 자주 쓰는 것들

  • 🔍 ps -ef | grep ... → 특정 서비스 실행 여부 확인
  • 📊 top → 서버 CPU/메모리 사용량 체크
  • kill -9 PID → 먹통된 프로세스 강제 종료
  • pkill -x name → 이름으로 한 번에 종료
  • 🛠️ 데몬 프로세스 관리 → systemctl status sshd 등으로 서비스 확인

✅ 정리

  • 프로세스 = 실행 중인 프로그램 (PID로 관리)
  • ps, top, jobs, fg/bg, kill, pgrep/pkill 은 필수 명령어
  • 현업에서는 주로 모니터링(top), 검색(ps/grep), 강제 종료(kill -9) 가 핵심

👉 이제 ps, top, kill 정도만 잘 써도 서버에서 살아남을 수 있습니다 😉

 

반응형

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

08. 리눅스 쉘 사용하기  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12
03. Linux 명령어 정리  (0) 2025.09.12
2025-09-15 10:45:32
반응형

🗂️ 파일 접근 권한 관리하기

1️⃣ 파일 속성 이해하기

$ ls -l
-rw-r--r--  1 user group  120 Sep 15 10:00 test.txt
# -          → 파일 종류(-=일반 파일, d=디렉토리)
# rw-        → 소유자(user)는 읽기/쓰기 가능
# r--        → 그룹(group)은 읽기만 가능
# r--        → 기타(other)는 읽기만 가능
# user       → 소유자 이름
# group      → 그룹 이름
# 120        → 파일 크기(바이트)
# Sep 15 ... → 최종 수정 시간
# test.txt   → 파일 이름

👉 즉, rw-r--r-- 는 소유자는 읽기/쓰기, 그룹과 기타는 읽기만 가능하다는 의미예요.


2️⃣ 권한 변경 방법

(1) 문자 모드 (기호 방식)

chmod u-w test.txt     # 소유자(user) 쓰기 권한 제거
chmod g+wx test.txt    # 그룹(group)에 쓰기/실행 권한 추가
chmod o-r test.txt     # 기타(other) 읽기 권한 제거

u = 소유자 (user)

g = 그룹 (group)

o = 기타 (other)

a = 모두 (all)

(2) 숫자 모드 (8진수 방식)

권한 점수: r=4, w=2, x=1

합산 결과:

rwx = 7

rw- = 6

r-- = 4

chmod 755 test.txt  
# u=rwx (7), g=rx (5), o=rx (5)
chmod 700 test.txt  
# u=rwx (7), g=--- (0), o=--- (0)

📊 시각화:

flowchart TD
    A[소유자 user] -->|r=4| R1[읽기]
    A -->|w=2| W1[쓰기]
    A -->|x=1| X1[실행]

    B[그룹 group] --> R2[읽기]
    B --> W2[쓰기]
    B --> X2[실행]

    C[기타 other] --> R3[읽기]
    C --> W3[쓰기]
    C --> X3[실행]

3️⃣ 기본 권한과 umask

파일 생성 시 기본 권한:

일반 파일: 664 → rw-rw-r--

디렉토리: 775 → rwxrwxr-x

umask: “빠지는 권한”을 의미
(즉, 허용하지 않을 권한을 지정)

umask           # 현재 값 확인 (보통 0002)
umask -S        # 문자 방식으로 확인 (u=rwx,g=rwx,o=rx)

umask 077       # 다른 사용자 권한 모두 차단
touch private.txt
ls -l private.txt
# 결과: -rw-------  (소유자만 접근 가능)

4️⃣ 특수 권한 (SetUID, SetGID, Sticky Bit)

권한을 4자리로 표기할 때 앞자리가 특수 권한

4xxx → SetUID

2xxx → SetGID

1xxx → Sticky Bit

chmod 4755 program   # SetUID 적용 (소유자 권한으로 실행)
chmod 2755 project   # SetGID 적용 (그룹 권한 상속)
chmod 1777 /tmp      # Sticky Bit 적용 (본인만 삭제 가능)

예시:

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root  ... passwd
# s → root 권한으로 실행됨 (SetUID)
ls -ld /tmp
drwxrwxrwt 14 root root ... tmp
# t → sticky bit (다른 사람 파일은 못 지움)

5️⃣ 실습 순서

ls -l test.txt → 권한 확인

chmod g+x test.txt → 그룹 실행 권한 추가

chmod u-w test.txt → 소유자 쓰기 제거

chmod 700 test.txt → 결과 -rwx------

umask → 현재 값 확인

ls -l test.txt → 변경 확인

umask 077 → 보안 강화

touch private.txt && ls -l private.txt → -rw------- 생성 확인


6️⃣ 현업에서 자주 쓰는 권한 설정 🔑

웹 서버 로그 디렉토리: chmod 750 /var/log/httpd
→ 관리자와 웹서버 그룹만 접근 가능

/tmp 디렉토리: 항상 1777 (rwxrwxrwt)
→ 누구나 파일 만들 수 있지만 자기 것만 삭제 가능

개인 키 파일 (~/.ssh/id_rsa): chmod 600
→ 오너만 읽고 쓸 수 있어야 함 (보안 필수)

공유 프로젝트 디렉토리: chmod 2775 project
→ 새 파일이 자동으로 그룹 소유 상속(SetGID)


✅ 정리하면,

ls -l 로 권한 확인

chmod 로 권한 수정 (문자/숫자 모드)

umask 로 기본 권한 제어

특수 비트 (SetUID, SetGID, Sticky) 로 현업 제어

반응형

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

07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12
03. Linux 명령어 정리  (0) 2025.09.12
02. Linux 기초  (0) 2025.09.12
2025-09-12 15:32:13
반응형

📝 리눅스 문서 편집기 — vi

1. vi 모드 구조

```mermaid
graph TD
    A[명령 모드 (Command mode)] --> B[입력 모드 (Insert mode)]
    A --> C[마지막 행 모드 (Last line mode)]
    B --> A
    C --> A
```
 
 
  • 명령 모드: vi 실행 시 기본 모드 (복사, 삭제, 이동 등 명령어 실행)
  • 입력 모드: 글자를 입력하는 모드 (i, a, o 로 진입)
  • 마지막 행 모드: 저장·종료·검색 같은 명령 입력 (:wq, :q!)

2. 자주 쓰는 기본 명령어

동작명령
입력 시작 i (커서 앞), a (커서 뒤), o (새 줄)
저장 & 종료 :wq
강제 종료 (저장 안 함) :q!
이동 h(왼쪽), l(오른쪽), j(아래), k(위), :10(10번 줄 이동), G(파일 끝)
삭제 dd (한 줄 잘라내기)
복사 & 붙여넣기 yy (복사), p (붙여넣기)
검색 /문자열

3. 문서 편집기 실습

① 연습용 파일 생성

 
cd$HOME/proc # 실습 디렉토리로 이동 vi test.txt # vi 편집기 실행

입력 예시 (입력 모드에서 붙여넣기):

 
Welcome to vi editor practice This is a sample text file You can edit this file using vi Let's learn some basic commands The /etc/hosts file is important Try searching for the word hosts Delete this line and paste it below End of the practice file

② 파일 내용 확인

 
cat test.txt # 파일 전체 내용 출력

👉 cat은 파일 내용을 한 번에 보여줍니다.


③ 줄 번호 표시 & 특정 줄로 이동

 
:5 # vi에서 5번째 줄로 이동

👉 .exrc 설정에서 set nu를 추가하면 항상 줄 번호가 표시됩니다.


④ 삭제 & 붙여넣기

 
dd # 현재 줄 삭제 (잘라내기) p # 바로 아래 줄에 붙여넣기

⑤ 문자열 검색

 
/file # "file" 이라는 단어 검색

👉 / 입력 후 검색어 입력 → 해당 단어로 커서 이동


⑥ 저장 & 종료

 
:wq # 저장 후 종료 :q! # 저장하지 않고 강제 종료

⑦ .exrc 설정 파일 다루기

 
ls -a | grep exrc # .exrc 파일 존재 여부 확인mv .exrc .exrc.bak 2>/dev/null # 있으면 백업 vi .exrc # 새 설정 파일 생성

입력할 내용 (vi 설정):

 
set nu " 줄 번호 표시 set ignorecase " 검색 시 대소문자 무시 set autoindent " 자동 들여쓰기 set showmode " 현재 모드 표시 (--INSERT-- 등)

👉 저장 후 종료 (:wq)


⑧ 설정 적용 & 확인

 
vi ~/prac/test.txt
  • 줄 번호 확인 (set nu)
  • /hosts 검색 시 대소문자 무시되는지 확인 (set ignorecase)
  • 새 줄 입력 시 자동 들여쓰기 되는지 확인 (set autoindent)
  • 모드 표시 확인 (--INSERT-- 뜨는지 확인, set showmode)

4. 한 줄 한 줄 주석 설명

 
cat test.txt # 파일 내용을 터미널에 출력 :5 # vi 안에서 5번째 줄로 이동 dd # 현재 줄 잘라내기 p # 잘라낸 줄을 현재 커서 아래에 붙여넣기 /file # "file" 문자열 검색 :wq # 저장 후 종료

5. 현업에서 자주 쓰는 vi 활용 ✨

  • 서버 설정 파일 편집: /etc/nginx/nginx.conf, /etc/hosts 같은 시스템 설정
  • 로그 파일 빠른 수정: 긴 로그 파일에서 특정 키워드 검색 (/error)
  • 빠른 줄 이동: 에러 로그에서 특정 줄 번호 확인 후 :숫자로 이동
  • 복사/붙여넣기: 설정 블록을 잘라내어 다른 위치에 붙여넣을 때 yy, p 자주 사용
  • .exrc 자동 설정: 항상 줄 번호 표시, 검색 시 대소문자 무시, 자동 들여쓰기 → 현업 엔지니어들이 꼭 켜두는 옵션

 

.exrc 자동 설정 방법

vi ~/.exrc

set nu " 줄 번호 표시
set ignorecase " 검색 시 대소문자 구분 안 함
set autoindent " 자동 들여쓰기
set showmode " 현재 모드 표시 (--INSERT-- 같은 상태 표시)
ECS Key 눌러서 편집모드 종료
:wq! 로 저장 후 종료

반응형

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

06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
03. Linux 명령어 정리  (0) 2025.09.12
02. Linux 기초  (0) 2025.09.12
01. 가상 서버 구축  (0) 2025.09.11
2025-09-12 14:19:29
반응형

📂 1 디렉토리와 파일 사용하기 — 실습 명령어 정리

1. 홈으로 이동 후 현재 위치 확인

 
cd ~ pwd

2. 실습용 폴더 만들고 이동

 
mkdir -p prac && cd prac pwd

3. 하위 디렉토리 만들기

 
mkdir one two three ls -F

4. 깊은 경로 한 번에 생성 (-p)

 
mkdir -p one/tmp/test

5. 디렉토리 삭제 (비어 있어야 rmdir 가능)

 
rmdir two three ls -F

6. 홈으로 돌아가기

 
cd ~ pwd

🔌 종료 명령어 정리

명령어설명

 

shutdown -h now 즉시 시스템 종료 (전원 끔)
shutdown -r now 즉시 재부팅
shutdown -h +10 10분 후 종료
shutdown -c 예약된 종료 취소

 


✅ 이렇게 하면 디렉토리 이동/생성/삭제 → 종료 명령까지 한 번에 연습할 수 있어요.

📂 파일 다루기2 — 파일 보기 실습 명령어

1. /etc/hosts 파일 내용 확인

 
cat /etc/hosts cat -n /etc/hosts

2. /etc/services 파일 탐색

 
more /etc/services less /etc/services
 

3. /etc/services 마지막 10행 출력

 
tail /etc/services

👉 10행보다 많이 보고 싶으면 예: tail -n 20 /etc/services

4. /var/log/syslog 로그 변화 실시간 관찰

 
tail -f /var/log/syslog

👉 종료할 때: Ctrl + C


✅ 이렇게 하면 cat, more, less, tail 명령어를 모두 연습할 수 있어요.

 

 

 


🗂️ 파일 다루기 3 — 파일 복사/이동/삭제 실습 명령어

1. /etc/hosts → 현재 디렉토리에 hosts.bak으로 복사

cp /etc/hosts ./hosts.bak

2. backup 디렉토리 생성 후 hosts.bak 복사

mkdir backup cp hosts.bak backup/

3. hosts.bak 파일명을 hosts.txt로 변경

mv hosts.bak hosts.txt

4. hosts.txt → tmp1 디렉토리 생성 후 이동

mkdir tmp1 mv hosts.txt tmp1/

5. tmp1 안의 파일 삭제

rm tmp1/hosts.txt

6. tmp1 디렉토리 삭제

rm -r tmp1

✅ 이렇게 하면 복사 → 디렉토리 이동 → 이름 변경 → 삭제 순서를 모두 연습할 수 있어요.


🗂️ 파일 다루기 4 — 링크, 빈 파일, 시간 변경 실습 명령어

  • 하드 링크 (ln), 심볼릭 링크 (ln -s)
  • touch: 빈 파일 생성, 수정 시간 변경

링크, 빈 파일, 시간 변경 실습

  1. 원본 복사해서 /etc/hosts 파일 복사해 $HOME/proc/data1 파일 생성
  2. 하드 링크 data1.ln 생성, inode 확인 (ls -i)
    • inode 번호가 어떻게 되나요?
  3. ln data1 data1.ln ls -li data1 data1.ln
  4. 심볼릭 링크 data1.sl 생성, ls -l로 원본 확인
  5. ln -s data1 data1.sl ls -l data1*
  6. touch test1로 빈 파일 생성
  7. touch -t 01011200 test1 → 시간 변경 확인
  8. touch -t 01011200 test1 ls -l test1

🔗 파일 다루기 5 - 링크, 빈 파일, 시간 변경 실습 정리

1. 원본 파일 준비

/etc/hosts 파일을 $HOME/proc/data1 으로 복사

 
cp /etc/hosts $HOME/proc/data1

2. 하드 링크 생성 & inode 확인

하드 링크 data1.ln 생성 후 inode 번호 확인

 
ln data1 data1.ln ls -li data1 data1.ln

👉 inode 번호 동일해야 함

3. 심볼릭 링크 생성 & 원본 확인

심볼릭 링크 data1.sl 생성 후 링크 정보 확인

 
ln -s data1 data1.sl ls -l data1*

👉 심볼릭 링크는 다른 inode 번호 가지며, 원본 파일을 가리킴

4. 빈 파일 생성

 
touch test1

👉 ls -l test1 로 확인 가능

5. 파일 시간 변경 (예: 01월 01일 12:00)

 
touch -t 01011200 test1 ls -l test1

👉 ls -l 결과에서 수정 시간(MTime)이 바뀐 것을 확인


🔍 파일 다루기 6 — 검색 실습 명령어

1. 특정 문자열 검색 (grep)

 
grep udp /etc/services

👉 /etc/services 파일에서 udp라는 단어가 포함된 줄을 찾아 출력


2. 특정 파일 이름 찾기 (find)

 
find /usr -name ls

👉 /usr 디렉토리 아래에서 이름이 ls인 파일 검색


3. 사용자 소유 파일 찾기 (find)

 
find ~ -user $USER

👉 내 홈 디렉토리(~)에서 현재 사용자($USER)가 소유한 파일 검색


4. 명령 위치 확인 (whereis, which)

 
whereis mvwhichmv

👉 mv 명령이 어디에 설치되어 있는지 확인

  • whereis: 실행 파일, 매뉴얼 페이지 위치까지 표시
  • which: 실행될 실제 명령 경로(우선순위 반영) 표시

✅ 이렇게 하면 문자열 검색 → 파일 검색 → 소유자 기준 검색 → 명령 위치 확인까지 한 번에 연습할 수 있어요.


 

반응형

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

06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12
02. Linux 기초  (0) 2025.09.12
01. 가상 서버 구축  (0) 2025.09.11
2025-09-12 10:49:47
반응형

🐧 리눅스 기초

1. 리눅스의 특징

  • 리눅스는 공개 소프트웨어이며 무료로 사용할 수 있다.
  • 유닉스와의 완벽한 호환성을 유지한다.
  • 서버용 운영체제로 많이 사용된다.
  • 편리한 GUI 환경을 제공한다.

2. 리눅스의 구조

 
```mermaid
graph TD
    A[Hardware] --> B[Kernel]
    B --> C[Shell]
    C --> D[Application]
```
 
 
  • 커널 (Kernel)
    • 리눅스의 핵심
    • 프로세스, 메모리, 파일시스템, 장치 관리
    • 컴퓨터 자원 초기화 및 제어
  • 셸 (Shell)
    • 사용자가 명령어 입력하는 인터페이스
    • 명령 해석, 간단한 프로그램 기능 제공
    • 기본 셸: bash
  • 응용 프로그램 (Application)
    • 개발 도구, 문서 편집기, 네트워크 도구 등

3. 리눅스 명령 사용

(1) 프롬프트 기호와 홈 디렉토리

  • 프롬프트: 명령 입력 대기 표시
    • $ → 일반 사용자
    • # → root(관리자)
  • 홈 디렉토리: 기본 위치
    • 예: user1@localhost:~ → ~는 홈 디렉토리

(2) 명령행 편집

  • Backspace/Delete → 글자 삭제
  • Ctrl + w → 단어 삭제
  • Ctrl + u → 줄 전체 삭제

(3) 명령 구조

 
명령 [옵션] [인자...]
  • 명령: 동작 (예: ls, cp, mv)
  • 옵션: 기능 선택 (예: ls -a)
  • 인자: 대상(파일/디렉토리 이름)

4. 기초 명령어

  • 날짜 보기
date# Fri Jul 4 07:10:42 AM UTC 2025
  • 화면 지우기
clear
  • 명령어 도움말
man clear
  • 비밀번호 변경
passwd
  • 터미널 종료
exit# 또는 Ctrl + d
반응형

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

06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12
03. Linux 명령어 정리  (0) 2025.09.12
01. 가상 서버 구축  (0) 2025.09.11
2025-09-11 14:37:32
반응형

1. Oracle Virtual Box 설치

더보기

1-1. Oracle Virtual Box 설치 - Windows hosts 마우스로 클릭

https://www.virtualbox.org/wiki/Downloads

1-2. 지정한 경로로 설정 후 다운로드

1-3. 다운받은 경로로 이동하여 VirtualBox 프로그램 선택 후 마우스 우클릭 -> 관리자 권한으로 실행

1-4. Oracle Virtual Box 설치 로딩 화면

1-5. Microsoft Visual C++ 2015-2022 Redistributable (x64 / x86) 설치 먼저 하라는 팝업창

1-6. Microsoft 공식 다운로드 센터에서 Microsoft Visual C++ 2015-2022 Redistributable (x64 / x86) 설치 진행

https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170

1-7. 스크롤 조금 내려서 각자 환경에 맞는 설치파일 다운로드

Windows 환경 - x64로 설치 진행

1-8. VC_redist_x64 다운로드한 경로로 이동

1-9. VC_redist.x64 파일 선택 후 마우스로 우클릭 -> 관리자 권한으로 실행

1-10. 동의함 체크 후 설치 버튼 마우스로 클릭

1-11. Microsoft Visual C++ 2015-2022 Redistributable (x64 / x86) 14.44.35211 버전 설치 진행중 화면

1-12. Microsoft Visual C++ 2015-2022 Redistributable (x64 / x86) 14.44.35211 버전 설치 완료

다시 시작 버튼 마우스로 클릭 - Window 재부팅하는 거임

1-13. Window 재부팅 후  VirtualBox 프로그램 선택 후 마우스 우클릭 -> 관리자 권한으로 실행

1-14. Oracle Virtual Box 설치 로딩 화면

1-15. Oracle Virtual Box 설치 정상적으로 진행 가능 -> Next 버튼 마우스로 클릭

1-16. 동의 후  Next 버튼 마우스로 클릭  

I accept the terms of the license agreement 체크 후 Next 버튼 마우스로 클릭

1-16.  Next 버튼 마우스로 클릭

1-17. Yes 버튼 마우스로 클릭

1-18. Yes 버튼 마우스로 클릭

1-19. Next 버튼 마우스로 클릭

1-20. Install 버튼 마우스로 클릭

1-21. Oracle Virtual Box 설치 진행 중 화면

1-22. Oracle Virtual Box 설치 완료 -> Finish 버튼 마우스로 클릭

1-23. Oracle Virtual Box 실행 화면

 

2. 가상머신 생성하기

더보기

2-1. ubuntu linux 다운로드 링크 접속 -> Accept all and visit site 버튼 마우스로 클릭

https://ubuntu.com/download/server

2-2. Download 24.04.3 LTS 버튼 마우스로 클릭

2-3. ubuntu  24.04.3 iso 파일 다운로드 

용량이 3GB 넘어서 3~5분 정도 걸림

2-4. ISO 파일 보관할 경로 지정 후 저장

예) 바탕화면\실습\OS ISO

2-5. Oracle Virtual Box 관리자 프로그램 실행 - 새로 만들기 아이콘 마우스로 클릭

2-6. VM Name 입력 후 다음 버튼 마우스로 클릭

VM Name : ubuntu-server01

2-7. Virtual Hardware Setting 후 다음 버튼 마우스로 클릭

Base Memory : 8192 MB
Number of CPUs : 4
Disk Size : 100.00 GB

2-8. 완료 버튼 마우스로 클릭

2-9. VM 생성 완료

 

 

3. 가상머신에 우분투 리눅스 설치

더보기

3-1. 설정 아이콘 마우스로 클릭

3-2. 디스플레이 - Video Memory 128MB 설정

3-3. 저장소 → 컨트롤러: IDE / 비어 있음 선택 → 속성 - Optical Drive - 디스크 모양 마우스로 클릭

3-4. Choose a Disk File... 클릭

3-5. ubuntu iso 파일 선택 후 열기 버튼 마우스로 클릭

3-6. ubuntu iso 적용 여부 체크 후 확인 버튼 마우스로 클릭

3-7. 설정 적용 후 시작 아이콘 마우스로 클릭

3-8. *Try or Install Ubuntu Server 선택 후 Enter Key 입력하여 ubuntu linux 설치 진행

3-9. English 선택 후 Enter Key 입력

3-10. 키보드 언어 선택   Layout: Korean을 선택 → Done 선택 후 Enter Key 입력

3-11. 설치 유형 변경하지 말고  Ubuntu Server →  Done 선택 후 Enter Key 입력

3-12. 네트워크를 설정 변경하지 말고  Done 선택 후 Enter Key 입력

3-13. 프록시 설정도 초기 설정 그대로 진행 →  Done 선택 후 Enter Key 입력

3-14. Mirror Server 설정 변경 없이 Done 선택 후 Enter Key 입력

3-15. 저장소 레이아웃을 설정 변경 없이 Done 선택 후 Enter Key 입력

3-16. 파일 시스템 설정 변경 없이 Done 선택 후 Enter Key 입력

3-17. Continue 선택 후 Enter Key 입력

3-18. 사용자 프로필 설정 - 사용자 이름, 서버 이름, 계정 아이디, 패스워드를 정의  → Done 선택 후 Enter Key 입력

Your name : kim
Your servers name : myserver01
Pick a username : nice
Choose a password : 12345
Confirm your password : 12345

 

3-19. 우분투를 업그레이드 여부 설정 없이 skip for now 체크 → Continue 선택 후 Enter Key 입력

3-20. OpenSSH server 설치 여부 체크  →  Done 선택 후 Enter Key 입력

putty, mobaxterm 등 ssh 접속을 위해 설치 필요

3-21. 추가적으로 설치할 소프트웨어 리스트 별도로 선택하지 않고  Done 선택 후 Enter Key 입력

3-22. Ubuntu 설치 진행 화면

3-23. Reboot Now 선택 후 Enter Key 입력

3-24. 에러 발생

[FAILED] Failed unmounting cdrom.mount - /cdrom.
Please remove the installation medium, then press ENTER:
[FAILED] Failed unmounting cdrom.mount - /cdrom.

3-25. 설치를 잘못한 건가 했는데, 가상 머신 껐다가 키면 됨

가상 머신 창 X 표시 눌러서 닫기 → 가상 머신 닫기 팝업창에서 시스템 전원 끄기 선택 후 확인 버튼 마우스로 클릭

3-26. 전원 꺼짐 확인 후 시작 아이콘 마우스로 클릭

3-27. 설치 시 설정한 계정 정보 입력 후 로그인 확인

4. 초기 로그인 및 네트워크 도구

더보기

4-1. 네트워크 도구 설치

기본적으로 제공되지 않는 네트워크 도구를 설치하기 위해 "sudo apt install net-tools" 명령어를 실행하며 관리자 권한 인증 과정이 필요
sudo apt install net-tools

4-2. IP 주소 확인

가상 머신의 네트워크 상태를 확인하고 IP 주소를 얻기 위해 "ifconfig" 명령어를 활용합니다.
네트워크 환경이 정상적으로 설정되어 있는지 확인 가능합니다.
ifconfig

4-3. "sudo systemctl status ssh" 명령어로 SSH 서버가 활성화(active 상태)인지 확인

sudo systemctl status ssh

4-4. 가상머신 종료

sudo shutdown -h now

4-5. 좌측 5번째 네트워크 아이콘 마우스로 클릭

4-6. 네트워크 → NAT 네트워크 탭 선택 →  만들기 버튼 마우스로 클릭

 

4-7. ubuntu-server01 서버 선택 후 시작 버튼 마우스로 클릭

※ 서버를 종료하지 않은 채 그대로 둔다.
* PuTTY를 활용한 가상머신에 접속하기 위해서는 버추얼박스에서 가상머신이 가동 중이어야 하기 때문이다.

4-8. ubuntu 계정 접속 후 ifconfig 명령어 실행하여 IP 확인

ifconfig

4-9. 설정 버튼 마우스로 클릭

4-10. 네트워크  → 포트 포워딩 버튼 마우스로 클릭

4-11. 포트 포워딩 규칙 팝업창에서 우측 + 버튼 마우스로 클릭

4-12. 포트 포워딩 규칙 설정 후 확인 버튼 마우스로 클릭

호스트 포트 : 22
게스트 IP : 10.0.2.15
게스트 포트 : 22

4-13. 네트워크 설정 완료 - 확인 버튼 마우스로 클릭

4-14. Windows 보안 경고 팝업창 - 액세스 허용 버튼 마우스로 클릭

4-15. 가상머신 종료

sudo shutdown -h now

4-16. ubuntu-server01 서버 선택 후 시작 버튼 마우스로 클릭

※ 서버를 종료하지 않은 채 그대로 둔다.
* PuTTY를 활용한 가상머신에 접속하기 위해서는 버추얼박스에서 가상머신이 가동 중이어야 하기 때문이다.

 

5. PuTTY를 설치하고 가상 서버에 접속하기(for Windows)

더보기

5-1. PuTTY 다운로드

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
 

Download PuTTY: latest release (0.83)

This page contains download links for the latest released version of PuTTY. Currently this is 0.83, released on 2025-02-08. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

5-2. Next 버튼 마우스로 클릭

5-3. Next 버튼 마우스로 클릭

5-4. Install 버튼 마우스로 클릭

5-5. PuTTY  설치 진행중 화면

5-6. PuTTY  설치 완료되면 Finish 버튼 마우스로 클릭

5-7. PuTTY 실행 후 서버 정보 입력 후 Save 버튼 마우스로 클릭

Host Name (or IP address) : 127.0.0.1
Port : 22
Saved Sessions : ubuntu-server01

5-8. 저장된 세션 선택 후 Load 버튼 마우스로 클릭 → Open 버튼 마우스로 클릭

5-9. PuTTY Security Alert 팝업창 뜨면 Accpet 버튼 마우스로 클릭

5-10. PuTTY Fatal Error - Network error: Connection refused 발생 시 가상머신 재부팅 진행

5-11. 계정 로그인 진행

5-12. 정상 접속 여부 확인

 

반응형

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

06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12
03. Linux 명령어 정리  (0) 2025.09.12
02. Linux 기초  (0) 2025.09.12