5 min read

리눅스 파일 관리

리눅스 파일 관리
Photo by Oleksandr Chumak / Unsplash

GPT 행님께 물어봐서 도커로 관리 하는 디렉토리 백업/삭제(관리) 스크립트를 요청했다.

소잃고 외양간 고친다고 하는데 2개의 사건이 있었다.

  1. 와이프 생일 선물로 만들어준 블로그의 글이 삭제되어 버렸다. 어째 어째 살렸는데 글을쓴 2개의 글이 없어져 버렸다. 그래서 DB랑 바인드된 볼륨을 매일 백업을 실행했다.
  2. 오라클 클라우드에 vm1에 traefik 부터 각종 yml 서비스가 저장되어 있는 호스트가 있는데 자주들어가는 경로로 접속경로를 바꾸면 되지 않을까? 해서 /docker 경로로 바꿨는데....나는 ID/PW 기반이 아니라 인증서 기반으로 접속을 해놔서 접속이 되질 않았다. ㅠㅠ

1의 경우를 보며 유명한 격언이 생각났다. "백업에 실패한 개발자는 용서할 수 없다" 는... 최소한 이중, 보통은 3중 백업까지가 기본인 것이다. 그래서 내가 운영하고 있는 노트북에 매일마다 증분, 매주마다 풀백업을 스크립트를 돌리고 있다.

그런데 그런 교훈을 얻었는데도 불구하고 메인으로 사용하고 있는 OCI 프리티어의 vm을 백업을 안하고 있다가....

photo of person reach out above the water
Photo by nikko macaspac / Unsplash

자주 사용하는 경로로 한번 바꿔볼까? 했는데 문제는 나는 인증서 기반이라 접속 디렉토리를 바꾸면 인증서 경로도 바뀐다는 생각을 못했다. /root/.ssh 에 있는 인증서 경로가 바뀌는 것이다. root에는 그 뿐만 아니라 alias등 각종 세팅값이 많으므로 안바꾸는게 좋다. 이래서...접속은 사용자 계정으로 하는구나...귀찮아도.

그래서 이 글을 쓴 메인 이유가 나온다. GPT 행님한테 얻은 스크립트를 공유하고자 한다. 다른 스크립트는 적용이 안되서 다시 물어봤다.

정리 스크립트

#!/bin/bash


BACKUP_DIR="/backup/tech_docker_bak"

LOG_FILE="/var/log/cleanup_backups.log"


exec >> "$LOG_FILE" 2>&1


echo "[$(date)] 🔍 백업 정리 시작"


cd "$BACKUP_DIR" || {

echo "❌ 디렉토리 이동 실패: $BACKUP_DIR"

exit 1

}


# 🧹 full 백업 정리

full_list=( $(ls -1tr full_backup_*.tar.gz 2>/dev/null) )

full_count=${#full_list[@]}


if [ "$full_count" -gt 3 ]; then

del_count=$((full_count - 3))

for ((i=0; i<del_count; i++)); do

echo "🗑️ full 삭제: ${full_list[$i]}"

rm -f "${full_list[$i]}"

done

else

echo "✅ full 백업 유지 개수 OK: $full_count"

fi


# 🧹 incr 백업 정리

incr_list=( $(ls -1tr incr_backup_*.tar.gz 2>/dev/null) )

incr_count=${#incr_list[@]}


if [ "$incr_count" -gt 5 ]; then

del_count=$((incr_count - 5))

for ((i=0; i<del_count; i++)); do

echo "🗑️ incr 삭제: ${incr_list[$i]}"

rm -f "${incr_list[$i]}"

done

else

echo "✅ incr 백업 유지 개수 OK: $incr_count"

fi


echo "[$(date)] ✅ 정리 완료"




1. blue <->gram 인증서 기반으로 접속해놓을 수 있게 세팅한다. 나는 좀 위험하지만 하나의 인증서로 모든 호스트를 통일했다. ID/PW보다는 좋.....을 수도 있다.

이건 다른 링크 참조

bruteforce로 하도 공격을 때려 특정 IP로만 접속할 수있게 했다. 22번 포트를 오픈하지 않고 특정 ip로만 접속할 수 있게 세팅했다.



그리고 노트북으로 외부에서 접속할때 귀찮았는데 zerotier로 vpn으로 해결했다. 그러면 공인 IP가 아니라 VPN IP로 접속하면 외부에서 wifi를 쓰던, 핫스팟을 쓰던 인증서로 접속이 가능하다. 간단하게 설명하면

zerotier로 외부에서 공인IP없이 접속하기(VPN)

  1. zerotier 가입
  2. vpn 생성
  3. 각각의 호스트에서 zerotier 클라이언트 설치, 연결
    -> 방화벽으로 호스트 간에는 모든 포트 오픈하면 가능
  4. zerotier간에 통신연결
  5. 노트북에서 클라이언트 설치
  6. 발급받은 zerotier 의 ip로 접속

    이렇게만 하면 외부에서 다른 공인IP를 쓰더라도 나의 노트북에서는 접속 가능하다.

    물론 다른 PC라면 또 얘기가 달라지겠지만.... 내 서버를 다른 PC로 들어갈 일은....자주 없을듯...하지만 정 필요하다면 OCI 콘솔이나 내 PC를 켜서 거기서 방화벽을 열어줘서 들어가기도 한다.