mkdir -p release-1 release-2
echo "v1" > release-1/app.txt
echo "v2" > release-2/app.txt
ln -s release-1 current
ls -l | grep current
readlink current
readlink -f current
realpath current
ln -sfn release-2 current
readlink current
cat current/app.txt== 1. 심볼릭 링크: ln -s, readlink -f, realpath
[링크 권한 없음: 리눅스에서는 실행됨] ln -s release-1 current
[링크 권한 없음: 리눅스에서는 실행됨] ls -l | grep current
[링크 권한 없음: 리눅스에서는 실행됨] readlink current
[링크 권한 없음: 리눅스에서는 실행됨] readlink -f current
[링크 권한 없음: 리눅스에서는 실행됨] realpath current
== 2. 버전 전환: ln -sfn (기존 링크를 새 대상으로 덮어쓰기)
[링크 권한 없음: 리눅스에서는 실행됨] ln -sfn release-2 current
[링크 권한 없음: 리눅스에서는 실행됨] readlink current
[링크 권한 없음: 리눅스에서는 실행됨] cat current/app.txt이 검증 환경은 Windows Git Bash 이고 관리자 권한이 없어 심볼릭 링크 생성 자체가 막혀 있습니다. 스크립트가 ln -s 성공 여부를 먼저 검사해 안내 문구만 출력하도록 짰습니다. 실제 리눅스 서버라면 ls -l 에 current -> release-1 이 보이고 readlink 는 release-1, readlink -f 는 절대 경로를 돌려줍니다.
touch original.txt
ln original.txt hardlink.txt
ln -s original.txt symlink.txt
ls -i original.txt hardlink.txt
ln -s /no/such/file broken
find . -xtype l== 3. 하드 링크 vs 심볼릭 링크
[링크 권한 없음: 리눅스에서는 실행됨] ln -s original.txt symlink.txt
5066549581880185 hardlink.txt
5066549581880185 original.txt
[링크 권한 없음: 리눅스에서는 실행됨] ls -l symlink.txt
== 4. 끊어진 링크 찾기: find -xtype l
[링크 권한 없음: 리눅스에서는 실행됨] ln -s /no/such/file broken하드 링크는 NTFS 에서도 권한 없이 만들어지므로 ls -i 결과가 실제로 같은 inode 번호(위 숫자)를 보여줍니다. 원본과 하드 링크가 같은 데이터를 공유한다는 증거입니다. symlink.txt·broken 은 앞서와 같은 이유로 안내 문구만 나왔습니다.
lsblk
blkid
df -hT
findmnt /
df -i
lvs
lvextend -r -L +10G /dev/mapper/vg-lv== 6. 블록 장치·디스크 사용량: lsblk, blkid, df, mount, findmnt
[dry-run] lsblk
[dry-run] blkid
[dry-run] df -hT
[dry-run] findmnt /
[dry-run] df -i
== 8. LVM 한 소절
[dry-run] lvs
[dry-run] sudo lvextend -r -L +10G /dev/mapper/vg-lv이 명령들은 RHEL 전용이라 Git Bash 에서는 실행하지 않고 DRY_RUN 으로 명령만 출력했습니다. 실제 서버에서는 df -hT 가 마운트별 용량과 파일시스템 종류를 표로 보여줍니다.
crontab -l
# */5 * * * * /opt/app/check.sh >> /var/log/check.log 2>&1
# 0 2 * * * /opt/app/backup.sh
# @daily /opt/app/cleanup.sh
cat /etc/cron.d/myapp
run-parts /etc/cron.daily
echo /opt/app/once.sh | at now + 5 minutes
atq== 9. crontab: -e/-l/-r 와 5개 필드
[dry-run] crontab -l
*/5 * * * * /opt/app/check.sh >> /var/log/check.log 2>&1
0 2 * * * /opt/app/backup.sh
0 9 * * 1-5 /opt/app/report.sh
@daily /opt/app/cleanup.sh
== 10. /etc/cron.d 와 run-parts
[dry-run] cat /etc/cron.d/myapp
[dry-run] run-parts /etc/cron.daily
== 11. at 일회성 작업
[dry-run] echo /opt/app/once.sh | at now + 5 minutes
[dry-run] atqcrontab -l 은 현재 사용자의 예약 작업을 출력합니다. 아래 heredoc 네 줄은 실제로 등록할 때 쓰는 형식 예시입니다. /etc/cron.d/myapp 처럼 시스템 전역 crontab에는 실행 사용자 필드가 하나 더 들어갑니다.