LFCS — Linux Foundation認定システム管理者
ファイルの扱いとfind式
한국어 원문으로 표시합니다.
목표
셸이 언제 무엇을 확장하는지, find 가 왜 표현식 언어인지를 손으로 확인한다. 링크·아카이브·패치까지 LFCS 필수 명령 영역을 한 바퀴 돈다.
왜 중요한가
이 영역은 시험 시간의 대부분을 잡아먹는 구간이다. 문제 자체는 어렵지 않은데, -perm 644 와 -perm -644 처럼 한 글자 차이로 결과가 달라지는 문법이 많아서 조용히 틀린다. 링크와 inode 를 이해하면 "지웠는데 용량이 안 줄어든다" 같은 운영 사고가 당연한 결과로 보이기 시작한다. 압축 형식 선택도 취향이 아니라 트레이드오프다 — xz 는 더 작게 만들지만 CPU 와 시간을 훨씬 많이 쓴다. 그래서 백업 주기와 복원 시간 요구가 형식을 결정한다.
단계
/root/lfcs-ess/아래에src,archive,report,patch네 디렉터리를 만드세요./root/lfcs-ess/src/에data-01.txt부터data-06.txt까지 여섯 파일을 만드세요.data-01~data-03은 각각 200000 바이트 이상,data-04~data-06은 각각 1 바이트 이상 1000 바이트 미만이어야 합니다.data-01.txt의 하드 링크src/data-01.hard와 심볼릭 링크src/data-01.sym을 만드세요. 그리고report/inode.txt에inode=<data-01.txt 의 inode 번호>와links=<링크 수>두 줄을 적으세요.src/바로 아래에서 이름이.txt로 끝나면서 크기가 100k 를 넘는 일반 파일의 이름만report/big.txt에 한 줄씩 적으세요.data-05.txt와data-06.txt의 권한을 600 으로 바꾸고,src/바로 아래에서 권한이 정확히 600 인 일반 파일의 이름을report/perm600.txt에 적으세요.data-06.txt의 수정 시각을 30일보다 더 오래전으로 바꾸고,src/바로 아래에서-mtime +30에 걸리는 파일의 이름을report/old.txt에 적으세요.src/디렉터리를archive/src.tar.gz와archive/src.tar.xz두 아카이브로 만들고,report/compress.txt에gzip=<바이트 크기>,xz=<바이트 크기>,smaller=<gzip 또는 xz>세 줄을 적으세요.patch/conf-old.txt에listen=8080,workers=2,loglevel=info,timeout=30네 줄을,patch/conf-new.txt에listen=9090,workers=4,loglevel=info,timeout=30네 줄을 만드세요. 두 파일의 차이를 통합 형식으로patch/conf.patch에 저장한 다음,conf-old.txt의 사본인patch/conf-target.txt에 그 패치를 적용해conf-new.txt와 같아지게 하세요.
참고
- 정해진 크기의 파일은
head -c 200000 /dev/urandom처럼 앞부분만 잘라 만들면 빠릅니다. find의-printf에%f를 쓰면 경로가 아니라 파일 이름만 나옵니다.-size +100k와-size +100은 단위가 다릅니다. 뒤쪽은 512바이트 블록 수입니다.- 흔한 실수: 8단계에서 패치를 원본에 걸어 버리면
conf-old.txt검증이 깨집니다. 반드시 사본에 적용하세요.
작업 디렉터리 네 개 만들기
/root/lfcs-ess/ 아래에 src, archive, report, patch 네 디렉터리를 만드세요.
상위 경로가 없어도 한 번에 만들어 주는 옵션이 있습니다. 네 디렉터리를 한 줄에 나열해도 됩니다.
크기가 다른 파일 여섯 개 준비
/root/lfcs-ess/src/ 에 data-01.txt 부터 data-06.txt 까지 여섯 파일을 만드세요. data-01 ~ data-03 은 각각 200000 바이트 이상, data-04 ~ data-06 은 각각 1 바이트 이상 1000 바이트 미만이어야 합니다.
정해진 바이트 수만큼 뽑아내려면 입력 장치에서 앞부분만 잘라 오면 됩니다. 큰 파일 세 개는 200000 바이트를 넘겨야 하고, 작은 파일 세 개는 1000 바이트 미만이어야 합니다.
하드 링크·심볼릭 링크와 inode
data-01.txt 의 하드 링크 src/data-01.hard 와 심볼릭 링크 src/data-01.sym 을 만드세요. 그리고 report/inode.txt 에 inode=<data-01.txt 의 inode 번호> 와 links=<링크 수> 두 줄을 적으세요.
하드 링크는 같은 inode 에 이름을 하나 더 붙이는 것이라 링크 수가 늘어납니다. inode 번호와 링크 수는 stat 의 서식 출력으로 한 번에 읽을 수 있습니다.
크기 조건으로 찾기
src/ 바로 아래에서 이름이 .txt 로 끝나면서 크기가 100k 를 넘는 일반 파일의 이름만 report/big.txt 에 한 줄씩 적으세요.
find 의 크기 조건은 접미사에 따라 단위가 달라집니다. 결과를 파일 이름만으로 뽑으려면 출력 서식을 지정하세요. 하위 디렉터리로 내려가지 않게 깊이도 제한합니다.
권한 조건으로 찾기
data-05.txt 와 data-06.txt 의 권한을 600 으로 바꾸고, src/ 바로 아래에서 권한이 정확히 600 인 일반 파일의 이름을 report/perm600.txt 에 적으세요.
권한 조건은 '정확히 일치' 와 '이 비트를 포함' 이 다른 문법입니다. 이번에는 정확히 일치하는 쪽을 써야 결과가 맞습니다.
수정 시각 조건으로 찾기
data-06.txt 의 수정 시각을 30일보다 더 오래전으로 바꾸고, src/ 바로 아래에서 -mtime +30 에 걸리는 파일의 이름을 report/old.txt 에 적으세요.
파일의 시각은 touch 에 시각을 직접 지정해 바꿀 수 있습니다. -mtime 의 플러스 부호는 '그보다 더 오래된' 을 뜻합니다.
gzip 과 xz 압축률 비교
src/ 디렉터리를 archive/src.tar.gz 와 archive/src.tar.xz 두 아카이브로 만들고, report/compress.txt 에 gzip=<바이트 크기>, xz=<바이트 크기>, smaller=<gzip 또는 xz> 세 줄을 적으세요.
tar 는 압축기를 옵션 문자로 고릅니다. 만든 뒤 각 아카이브의 바이트 크기를 읽어 어느 쪽이 작은지 직접 비교해 적으세요.
패치 만들고 사본에 적용하기
patch/conf-old.txt 에 listen=8080, workers=2, loglevel=info, timeout=30 네 줄을, patch/conf-new.txt 에 listen=9090, workers=4, loglevel=info, timeout=30 네 줄을 만드세요. 두 파일의 차이를 통합 형식으로 patch/conf.patch 에 저장한 다음, conf-old.txt 의 사본인 patch/conf-target.txt 에 그 패치를 적용해 conf-new.txt 와 같아지게 하세요.
통합 형식 차이는 diff 에 옵션 하나를 더하면 나옵니다. 패치는 원본이 아니라 사본에 적용해야 합니다 — 원본이 바뀌면 앞 검증이 깨집니다.