LabHub
배우기 러닝패스 코스

LFCS — Linux Foundation認定システム管理者

ファイルの扱いとfind式

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

셸이 언제 무엇을 확장하는지, find 가 왜 표현식 언어인지를 손으로 확인한다. 링크·아카이브·패치까지 LFCS 필수 명령 영역을 한 바퀴 돈다.

왜 중요한가

이 영역은 시험 시간의 대부분을 잡아먹는 구간이다. 문제 자체는 어렵지 않은데, -perm 644-perm -644 처럼 한 글자 차이로 결과가 달라지는 문법이 많아서 조용히 틀린다. 링크와 inode 를 이해하면 "지웠는데 용량이 안 줄어든다" 같은 운영 사고가 당연한 결과로 보이기 시작한다. 압축 형식 선택도 취향이 아니라 트레이드오프다 — xz 는 더 작게 만들지만 CPU 와 시간을 훨씬 많이 쓴다. 그래서 백업 주기와 복원 시간 요구가 형식을 결정한다.

단계

  1. /root/lfcs-ess/ 아래에 src, archive, report, patch 네 디렉터리를 만드세요.
  2. /root/lfcs-ess/src/data-01.txt 부터 data-06.txt 까지 여섯 파일을 만드세요. data-01 ~ data-03 은 각각 200000 바이트 이상, data-04 ~ data-06 은 각각 1 바이트 이상 1000 바이트 미만이어야 합니다.
  3. data-01.txt 의 하드 링크 src/data-01.hard 와 심볼릭 링크 src/data-01.sym 을 만드세요. 그리고 report/inode.txtinode=<data-01.txt 의 inode 번호>links=<링크 수> 두 줄을 적으세요.
  4. src/ 바로 아래에서 이름이 .txt 로 끝나면서 크기가 100k 를 넘는 일반 파일의 이름만 report/big.txt 에 한 줄씩 적으세요.
  5. data-05.txtdata-06.txt 의 권한을 600 으로 바꾸고, src/ 바로 아래에서 권한이 정확히 600 인 일반 파일의 이름을 report/perm600.txt 에 적으세요.
  6. data-06.txt 의 수정 시각을 30일보다 더 오래전으로 바꾸고, src/ 바로 아래에서 -mtime +30 에 걸리는 파일의 이름을 report/old.txt 에 적으세요.
  7. src/ 디렉터리를 archive/src.tar.gzarchive/src.tar.xz 두 아카이브로 만들고, report/compress.txtgzip=<바이트 크기>, xz=<바이트 크기>, smaller=<gzip 또는 xz> 세 줄을 적으세요.
  8. patch/conf-old.txtlisten=8080, workers=2, loglevel=info, timeout=30 네 줄을, patch/conf-new.txtlisten=9090, workers=4, loglevel=info, timeout=30 네 줄을 만드세요. 두 파일의 차이를 통합 형식으로 patch/conf.patch 에 저장한 다음, conf-old.txt사본patch/conf-target.txt 에 그 패치를 적용해 conf-new.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.txtinode=<data-01.txt 의 inode 번호>links=<링크 수> 두 줄을 적으세요.

하드 링크는 같은 inode 에 이름을 하나 더 붙이는 것이라 링크 수가 늘어납니다. inode 번호와 링크 수는 stat 의 서식 출력으로 한 번에 읽을 수 있습니다.

크기 조건으로 찾기

src/ 바로 아래에서 이름이 .txt 로 끝나면서 크기가 100k 를 넘는 일반 파일의 이름만 report/big.txt 에 한 줄씩 적으세요.

find 의 크기 조건은 접미사에 따라 단위가 달라집니다. 결과를 파일 이름만으로 뽑으려면 출력 서식을 지정하세요. 하위 디렉터리로 내려가지 않게 깊이도 제한합니다.

권한 조건으로 찾기

data-05.txtdata-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.gzarchive/src.tar.xz 두 아카이브로 만들고, report/compress.txtgzip=<바이트 크기>, xz=<바이트 크기>, smaller=<gzip 또는 xz> 세 줄을 적으세요.

tar 는 압축기를 옵션 문자로 고릅니다. 만든 뒤 각 아카이브의 바이트 크기를 읽어 어느 쪽이 작은지 직접 비교해 적으세요.

패치 만들고 사본에 적용하기

patch/conf-old.txtlisten=8080, workers=2, loglevel=info, timeout=30 네 줄을, patch/conf-new.txtlisten=9090, workers=4, loglevel=info, timeout=30 네 줄을 만드세요. 두 파일의 차이를 통합 형식으로 patch/conf.patch 에 저장한 다음, conf-old.txt사본patch/conf-target.txt 에 그 패치를 적용해 conf-new.txt 와 같아지게 하세요.

통합 형식 차이는 diff 에 옵션 하나를 더하면 나옵니다. 패치는 원본이 아니라 사본에 적용해야 합니다 — 원본이 바뀌면 앞 검증이 깨집니다.