CAB TA 4기 15일차의 기록

Urban Jungle·2025년 4월 1일

CAB TA 4기

목록 보기
15/28

cron 실습 2

1. 매월 1일 새벽 12시 30분 datefile1date 이어쓰기

30 0 1 * * date >> /home/vagrant/datefile1

2. 1분마다 datefile2date 이어쓰기

* * * * * date >> /home/vagrant/datefile2

3. 매년 1월 1일 오후 12시 datefile3date 덮어쓰기

0 12 1 1 * date > /home/vagrant/datefile3

4. vagrant 사용자가 크리스마스 자정 /tmp/christmas에 메시지 덮어쓰기

  • vagrant 사용자의 crontab (crontab -e)에서 설정

crontab -e -u vagrant
0 0 25 12 * echo "Merry Christmas" > /tmp/christmas

또는

su - vagrant
crontab -e
0 0 25 12 * echo "Merry Christmas" > /tmp/christmas

또는

vim /etc/crontab
G
0 0 25 12 * vagrant echo "Merry Christmas" > /tmp/christmas
:w /etc/cron.d/vagrantcron

5. 1월 1일, 11일, 21일 오후 3시~5시까지 15분마다 datefile4에 이어쓰기

*/15 15-17 1,11,21 1 * date >> /home/vagrant/datefile4

6. 매주 월요일, 목요일 새벽 1시에 재부팅

0 1 * * 1,4 /sbin/reboot

7. 매월 첫 번째 화요일 오후 3시에 재부팅 (crontab 미사용, 시스템 cron 방식)

  • 시스템 전용 크론 디렉토리 /etc/cron.d/에 스케줄 등록

vim /etc/crontab
G
0 15 1-7 * 2 root reboot
:w /etc/cron.d/reboot

예: /etc/cron.d/reboot_first_tue

sudo vim /etc/cron.d/reboot_first_tue

내용

0 15 1-7 * 2 root [ "$(date +\%a)" = "Tue" ] && /sbin/reboot

  • 1-7일 중에 요일이 화요일(2)이면 실행
  • date +%a는 요일 이름 (Tue, Wed 등) 반환
  • \%로 이스케이프 해야 함

전체 요약

매월 1일 00:30: 30 0 1 * *
매분 실행: * * * * *
1월 1일 12:00: 0 12 1 1 *
크리스마스 자정: 0 0 25 12 *
특정일 15~17시 15분 간격: */15 15-17 1,11,21 1 *
매주 월,목 1시 재부팅: 0 1 * * 1,4
첫 화요일 15시 재부팅: /etc/cron.d에 등록 (조건 포함)


통합 시스템 관리 연습

1. 디스크 초기화 및 파티션 생성

파티션 구성

fdisk /dev/sdb
# n → primary → +2G
# n → primary → +3G
# n → primary → +4G
# n → extended → Enter
# n → logical → +2G
# n → logical → +2G
w
partprobe /dev/sdb

2. 파일시스템 생성 및 마운트
mkfs.xfs /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.xfs /dev/sdb3

mkdir -p /ptest /stest /home1
mount /dev/sdb1 /ptest
mount /dev/sdb2 /stest
mount /dev/sdb3 /home1

3. /home1에 영구 마운트 설정

vim /etc/fstab

추가

/dev/sdb3 /home1 xfs defaults 0 0
mount -a

4. 사용자 생성

useradd -u 1001 -g 1001 -c "user1" -d /home1/user01 -s /bin/bash user01
useradd -u 2000 -g 1000 -d /home/user2 -s /bin/sh user02
useradd -u 3000 -g 3000 -c "user3" -d /home/user03 -s /bin/sh user03
useradd -u 3001 -g 1000 -d /home1/user04 -s /bin/bash user04

5. 사용자 정보 수정

usermod -d /home1/user01 -c "" user01
usermod -u 1002 -g 1002 -d /home1/user02 -s /bin/bash user02
usermod -u 1003 -g 1003 -s /bin/bash user03
usermod -u 1004 -g 1004 user04

6. 사용자 활성화

usermod -U user01
usermod -U user02
usermod -U user03
usermod -U user04

7. user03sudo 권한 추가

usermod -aG wheel user03

  • wheel 그룹이 /etc/sudoers에 있어야 함

8. 기본값 HOME/home으로 설정

vim /etc/default/useradd

  • # HOME=/home 로 변경

9. 그룹 생성 및 ACL 설정

groupadd aclgroup
usermod -aG aclgroup user02
usermod -aG aclgroup user04
getent group aclgroup

10. /ptest에 ACL 소유 설정

chmod 2777 /ptest
chown :aclgroup /ptest

확인

ls -ld /ptest

  • # drwxrwsrwx. root aclgroup ...

11. test 파일 vi 편집 가능하게 설정

touch /ptest/test
chmod 000 /ptest/test
setfacl -m u::rw /ptest/test
setfacl -m g::rw /ptest/test

  • vi 편집 허용: 쓰기 권한만 있으면 됨

12. user02의 크론 작업

조건

  • 1,3,5,9월
  • 둘째/셋째 금요일
  • 밤 11시 58분

crontab -e # (user02로 접속 후)

58 23 8-21 1,3,5,9 5 [ "$(date +\%U)" = "01" ] || [ "$(date +\%U)" = "02" ] && date >> /tmp/user02datefile

설명

  • +%U: 주차 계산 → 둘째, 셋째 금요일 = 2~3번째 주
  • 금요일 = 5

13. 마운트 해제 후 user01 테스트

umount /home1
su - user01

  • 이때 "로그인 실패" 또는 "No home directory" 오류 발생 → 정상
    /home1 마운트가 되어 있어야 로그인 가능

핵심 명령 정리표

파티션 생성: fdisk /dev/sdb
파일시스템 생성: mkfs.xfs mkfs.ext4
마운트: mount, fstab
사용자 추가: useradd
사용자 수정: usermod
그룹 생성: groupadd, usermod -aG
sudo 권한 부여: usermod -aG wheel user
ACL 설정: chmod 2777, chown, setfacl
cron 설정: crontab -e


swap 설정

1. /dev/sdb5, /dev/sdb6을 스왑 파일시스템으로 포맷

mkswap /dev/sdb5
mkswap /dev/sdb6

확인

blkid | grep sdb

2. /dev/sdb5를 수동 스왑 마운트

swapon /dev/sdb5

스왑 확인

free -h
swapon -s

3. /dev/sdb6를 영구 마운트 설정

① UUID 확인

blkid /dev/sdb6

예시 결과

/dev/sdb6: UUID="abcd-1234" TYPE="swap"

/etc/fstab에 등록

vim /etc/fstab

추가

UUID=abcd-1234 swap swap defaults 0 0

  • 실제 UUID 값으로 바꿔야 함

또는 장치명 방식

/dev/sdb6 swap swap defaults 0 0

③ 스왑 자동 마운트 실행

swapon -a

4. 최종 스왑 상태 확인

free -h
swapon -s
lsblk | grep swap

  • 스왑 포맷: mkswap /dev/sdbX
  • 수동 마운트: swapon /dev/sdbX
  • 자동 마운트: /etc/fstab + swapon -a
  • 확인: free -h, swapon -s, lsblk

LVM 실습

1. 파티션 준비

fdisk /dev/sdb # 4G, 6G, 4G, 6G 순으로 나누기

2. 물리 볼륨(PV) 생성

pvcreate /dev/sdb[1-4]

3. 볼륨 그룹(VG) 생성

vgcreate vg0 /dev/sdb[1,4] -s 16M

4. 논리 볼륨(LV) 생성

lvcreate -L 4G -n lv01 vg0
lvcreate -l 256 -n lv02 vg0
lvcreate -l 100%FREE -n lv03 vg0

5. 파일시스템 생성 및 마운트

mkfs.xfs /dev/vg0/lv01
mkfs.ext4 /dev/vg0/lv02
mkfs.xfs /dev/vg0/lv03

mkdir -p /mnt/disk{1..3}

mount /dev/vg0/lv01 /mnt/disk1
mount /dev/vg0/lv02 /mnt/disk2
mount /dev/vg0/lv03 /mnt/disk3


LVM 확장 및 축소

VG 확장

vgextend vg0 /dev/sdb3

LV 확장 + 파일시스템 확장 (수동)

  • XFS (lv01)

lvextend -L +1G /dev/vg0/lv01
xfs_growfs /mnt/disk1

  • EXT4 (lv02)

lvextend -L 6G /dev/vg0/lv02
resize2fs /dev/vg0/lv02


디스크 제거 처리 (/dev/sdb4 문제 발생 시)

1. 바로 제거 시도 → 실패

vgreduce vg0 /dev/sdb4 # 실패

2. 데이터 이동 (용량 부족 발생)

pvmove /dev/sdb4 # 실패

3. 용량 확보 → sdb2 추가

vgextend vg0 /dev/sdb2
pvmove /dev/sdb4
vgreduce vg0 /dev/sdb4

주의할 점

pvmove 실패 (용량 부족) -> 다른 PV 추가해서 용량 확보
vgreduce 실패 -> 해당 PV 안의 데이터가 아직 남아있음
-r 옵션 없이 FS 확장 시 -> xfs_growfs, resize2fs 수동 실행 필수
pvcreate 전에 파티션 꼭 설정 -> fdisk or parted로 GPT/MBR에 맞게 파티션 작성 필요

실전 팁

  • lvextend -r 옵션은 LV + 파일시스템 동시에 확장할 때 유용함
    (단, XFS/EXT4만 가능)
  • pvmove는 시간이 오래 걸릴 수 있고, 데이터 손실 위험 없도록 백업 권장
  • lsblk, df -Th, lvs, vgs, pvs는 항상 상태 확인용으로 반복 사용

systemctl status sshd 결과 이해

start: 서비스 실행 (PID 부여됨)
enable: 부팅 시 자동 실행 등록
stop: 서비스 중단 (PID 제거됨)
disable: 부팅 시 자동 실행 해제
mask: 완전 차단 (/dev/null로 symlink 연결됨)
unmask: 차단 해제
reload: 설정 파일만 다시 읽기 (PID 유지)
restart: 중지 후 다시 시작 (PID 바뀜)

reload vs restart

  • reload는 로그를 유지하거나, 무중단 서비스를 위해 사용 (ex: 웹서버)

마스크(mask) 상태란?

systemctl mask sshd

  • sshd.service 유닛이 /dev/null로 symlink 되어 절대 실행되지 않음
  • enable, start 명령도 작동 안 함 → 완전 차단

풀려면?

systemctl unmask sshd


전체 흐름

# 1. 중지 + 비활성화
systemctl disable sshd --now
systemctl status sshd

# 2. 시작
systemctl start sshd
systemctl status sshd

# 3. 부팅 자동 등록
systemctl enable sshd

# 4. 리로드 vs 재시작 비교
systemctl reload sshd    # pid 유지됨
systemctl restart sshd   # pid 바뀜

추가: 서비스 상태 한눈에 보기

systemctl is-active sshd # active/inactive
systemctl is-enabled sshd # enabled/disabled/masked

profile
똑똑해지고 싶은 공학도

0개의 댓글