자연 관찰 안내 웹사이트의 오프라인 사본 만들기

LinuxBeginner
지금 연습하기

소개

내일 열리는 지역 자연 관찰 모임에는 원본에 접속할 수 없어도 읽을 수 있는 안내서가 필요합니다. 페이지 다섯 개, 그림 세 개, 스타일시트와 인쇄 가능한 관찰 기록지를 별도 디렉터리로 가져갑니다. 홈페이지만 저장해서는 이 읽기 경로를 제공할 수 없습니다.

Source Guide로 원본을 살펴보고, Workstation에서 파일을 내려받고, Field Copy에서 자신의 파일을 읽습니다. 제공된 원본 서비스만 중지한 뒤 이동한 복사본에서 아직 읽지 않은 카드와 기록지를 엽니다. LabEx 연결은 계속 사용할 수 있습니다. 플랫폼 전체의 연결을 끊는 것이 아니라 콘텐츠 원본을 사용할 수 없는 상황을 재현합니다.

기본 터미널 사용 경험이면 충분합니다. URL, 다운로드 옵션과 상대 링크는 여기서 설명합니다. 모든 글과 그림은 독창적인 가상 교육 자료이며 실제 생물 식별, 채집·섭취 또는 안전 조언이 아닙니다. 어떤 문서 언어에서도 웹사이트와 명령 출력은 영어로 유지됩니다.

한 페이지를 저장하고 한계를 확인하기

이 단계에서는 실제 읽기 경로를 따라가고 비교를 위해 HTML 한 페이지만 저장합니다. 첫 저장은 의도적으로 불완전하며 완성된 안내서가 아닙니다.

원본의 경로 따라가기

Source Guide를 열어 Woodland를 선택한 다음 Start the route를 누릅니다. Silver leaf로 들어가 문단과 그림을 보고 Return to the route로 돌아옵니다. Open observation sheet를 엽니다. 스케치와 관찰 내용을 적는 칸이 있는 실제 SVG 문서입니다. 브라우저 뒤로 가기 버튼으로 돌아옵니다. Amber cap과 Reed fan은 나중에 원본을 중지한 상태에서 읽도록 남겨 두세요.

홈페이지, 경로 페이지와 카드 세 개는 서로 다른 HTML 파일 다섯 개입니다. 이미지, CSS 스타일과 SVG 기록지도 각각 별도 파일입니다. Harbor event — online only, outside this guide는 일부러 제외한 이웃 행사이며 오프라인 읽기 경로에 포함되지 않습니다.

URL을 읽고 홈페이지 저장하기

Workstation으로 전환합니다. pwd는 현재 디렉터리를 표시합니다. 준비된 터미널은 프로젝트 작업 공간에서 시작합니다.

pwd
/home/labex/project

필요하면 cd로 디렉터리를 바꿉니다.

cd /home/labex/project

터미널에서 원본에 접속하는 주소는 http://127.0.0.1:8081/woodland/index.html입니다. http://는 HTTP를 선택하고, 127.0.0.1은 이 실습의 같은 머신, 8081은 원본 포트, /woodland/index.html은 요청한 파일 경로를 뜻합니다. Source Guide 탭은 플랫폼의 브라우저 주소로 같은 서비스를 보여 줍니다. 터미널용 루프백 주소를 자신의 컴퓨터 브라우저에 입력하지 마세요.

wget은 URL을 가져옵니다. 대문자 O를 쓰는 -O 옵션은 출력 파일 하나의 이름을 지정하며 재실행하면 그 파일을 덮어씁니다. 다음 명령은 홈페이지의 HTML만 저장합니다.

wget -O first-save.html http://127.0.0.1:8081/woodland/index.html

200 OK와 파일 저장 메시지를 확인합니다. 전송 시간과 바이트 수는 달라질 수 있습니다. ls로 파일을 나열해 이름을 확인할 수 있습니다.

ls first-save.html

Field Copy를 열고 First single-page save로 들어갑니다. 제목과 글은 있지만 그림과 스타일은 없습니다. 경로 페이지를 다운로드하지 않았으므로 Start the route는 로컬 404: File not found를 반환합니다. Return to local files로 읽기 데스크에 돌아옵니다. 예상한 한계이며 원본의 고장이 아닙니다. 404는 서버가 응답했지만 해당 경로가 없다는 뜻이고, 연결 실패는 서비스 자체에 접속하지 못했다는 뜻입니다.

로컬 읽기 데스크는 포트 8082에서 /home/labex/project의 파일을 제공합니다. 없는 파일을 원본에서 대신 가져오지 않습니다.

허용된 범위 안에서 안내서 수집하기

이 단계에서는 이웃 행사를 다운로드하지 않고 연결된 페이지와 자산을 모읍니다. 먼저 안내서의 URL 경로와 머신의 저장 디렉터리를 구분합니다.

적절한 경계 정하기

원본의 구성은 다음과 같습니다.

/woodland/                 homepage, route, species cards
/shared/woodland/          CSS, three illustrations, observation sheet
/harbor/                   a different activity: exclude it

카드 세 개는 /woodland/species/ 안에 있습니다. 관찰 기록지와 스타일은 /woodland/ 바깥의 명시적으로 허용된 공유 디렉터리에 있습니다. 시작 디렉터리의 하위 항목만 허용하면 너무 좁고, 호스트 전체를 다운로드하면 너무 넓습니다.

Wget의 --recursive는 링크를 따라가며 --level=inf는 기본 다섯 단계 깊이 제한을 없앱니다. 이 사이트는 작고 통제된 자료입니다. 깊이를 무제한으로 해도 허용된 경로가 범위를 제한합니다. --page-requisites는 이미지와 스타일시트 같은 표시 의존 파일도 모읍니다. 재귀 수집으로 찾는 것은 링크된 파일이며, 서버에 있을 수 있는 모든 링크 없는 파일이 아닙니다.

--include-directories=/woodland,/shared/woodland는 이 두 트리를 허용합니다. 허용할 URL 접두사를 공백 없이 쉼표로 연결합니다. 더 깊은 종 카드 경로를 포함하면서 /harbor/는 제외합니다. --no-parent는 필요하지 않습니다. 이 옵션은 여기서 필요한 형제 공유 디렉터리를 막습니다.

--no-host-directories는 결과에 호스트 이름 디렉터리를 만들지 않습니다. --directory-prefix=raw-guide는 보존된 URL 계층을 로컬 raw-guide/ 아래에 둡니다. 디렉터리는 자동으로 생성됩니다. 다음은 하나의 명령입니다. 터미널 표시가 여러 줄로 접힐 수 있습니다.

wget --recursive --level=inf --page-requisites --no-host-directories --directory-prefix=raw-guide --include-directories=/woodland,/shared/woodland http://127.0.0.1:8081/woodland/index.html

Wget은 이 교육용 다운로드를 허용하는 원본의 robots.txt도 읽고 저장합니다. 추가 안내서 페이지가 아니라 크롤러 메타데이터입니다. HTML 페이지 다섯 개, 공유 자산 다섯 개와 메타데이터를 합해 총 11개 파일이 생깁니다.

find raw-guide -type f는 디렉터리 트리 전체의 일반 파일을 나열합니다. -type f는 디렉터리 대신 파일을 선택합니다.

find raw-guide -type f

예정한 두 트리와 robots.txt가 있고 harbor/ 디렉터리는 없는지 확인합니다. 나열 순서는 중요하지 않습니다.

파일이 완전해도 링크 수정이 필요한 이유

Field Copy에서 Raw collected guide를 엽니다. HTML은 아직 /shared/woodland/guide.css 같은 경로를 사용합니다. 맨 앞의 슬래시는 raw-guide/가 아닌 읽기 서버의 루트에서 시작한다는 뜻입니다. 실제 파일은 raw-guide/shared/woodland/에 있으므로 변환하지 않은 경로는 여전히 대상을 찾지 못합니다.

이 차이가 중요합니다. 올바른 파일을 수집하는 일과 탐색이 그 파일을 가리키게 하는 일은 별개입니다. 로컬 읽기 데스크로 돌아옵니다. 비교용 raw-guide/는 남겨 두고 다음에 깨끗한 이동 가능한 복사본을 만듭니다.

Wget이 연결 실패를 보고하면 Workstation에서 source-control start를 실행한 뒤 다시 시도합니다. 이 준비된 명령은 제공된 원본만 시작하며 복사본을 다운로드하거나 변경하지 않습니다. 빈 대상에서 다시 수집하려면 rm -r raw-guide로 다시 만들 수 있는 비교 디렉터리와 내용만 지울 수 있습니다. 이 선택적 복구 명령을 쓰기 전에 철자를 확인하세요.

탐색 링크가 복사본을 따라가게 하기

이 단계에서는 이동 가능한 field-guide/ 디렉터리를 만들고 실제 링크를 사용합니다. Wget은 수집이 끝난 뒤 다운로드한 링크를 다시 쓸 수 있습니다.

--convert-links는 다운로드한 파일을 향하는 링크를 상대 경로로 바꿉니다. 예를 들어 복사한 홈페이지는 ../shared/woodland/guide.css를 사용합니다. ..는 부모 디렉터리입니다. 더 깊은 카드는 같은 공유 자산에 도달하려면 ..가 하나 더 필요합니다. 이 경로는 읽기 서버 루트에 의존하지 않고 디렉터리와 함께 이동합니다.

원본은 아직 실행 중입니다. 링크 변환을 추가해 새 대상에 범위를 제한한 수집을 반복합니다.

wget --recursive --level=inf --page-requisites --convert-links --no-host-directories --directory-prefix=field-guide --include-directories=/woodland,/shared/woodland http://127.0.0.1:8081/woodland/index.html

마지막 Converted links 메시지를 기다립니다. Wget이 저장된 대상을 모두 파악해야 하므로 변환은 다운로드 후에 이루어집니다. 제외한 Harbor 행사 링크는 온라인 참조로 남습니다. 해당 레이블은 이 행사가 오프라인 안내서 범위 밖임을 분명히 밝힙니다.

grep은 일치하는 텍스트 줄을 표시합니다. 스타일시트 이름을 검색해 실제 HTML 안의 상대 참조를 봅니다.

grep 'guide.css' field-guide/woodland/index.html

출력은 긴 HTML 한 줄입니다. 그 안에서 ../shared/woodland/guide.css를 찾으면 됩니다. HTML을 이해하거나 편집할 필요는 없습니다. 'guide.css'의 따옴표는 검색 패턴을 하나의 인수로 전달합니다.

Field Copy에서 Downloaded guide를 선택합니다. 이제 레이아웃과 그림 세 개가 보여야 합니다. Start the route, Silver leaf, All field notes 순서로 엽니다. 브라우저 주소를 보면 링크가 Field Copy 서비스의 /field-guide/ 안에 머뭅니다. 다른 카드 두 개는 다음 단계까지 열지 마세요.

404가 나오면 요청 주소와 find field-guide -type f를 비교합니다. 파일이 없으면 수집이 필요하고 루트 경로가 틀리면 변환이 필요합니다. 깨끗이 다시 시작할 때 선택적 명령 rm -r field-guide는 이 생성된 이동용 디렉터리만 삭제합니다. 그다음 전체 명령을 다시 실행합니다. 기존 Wget 대상을 그대로 사용하면 번호가 붙은 중복 파일이 생길 수 있으므로 저장된 .1 파일을 의도한 결과로 간주하지 마세요.

원본을 중지하고 안내서 이동하기

이 단계에서는 복사본을 만드는 이유를 검증합니다. 원본이 중지되고 다운로드 디렉터리가 이동한 뒤에도 다른 독자가 사용할 수 있어야 합니다.

원본 의존성 제거하기

Workstation에서 준비된 중지 명령을 사용합니다. 포트 8081에만 영향을 주므로 터미널과 Field Copy는 계속 사용할 수 있습니다.

source-control stop
Source stopped; Field Copy is still running.

Source Guide를 새로고침합니다. 원본 프로세스가 멈췄으므로 연결 또는 플랫폼 게이트웨이 오류는 예상한 결과입니다. 캐시된 원본 페이지는 원본이 여전히 실행 중이라는 증거가 아닙니다. Workstation에서 curl은 주소를 요청하고 --max-time 3은 대기를 3초로 제한합니다. 접미사 || true는 의도적으로 실패하는 이 요청 뒤에도 셸이 계속 진행하게 합니다.

curl --max-time 3 http://127.0.0.1:8081/woodland/index.html || true

안내서 HTML이 아니라 연결 실패가 나와야 합니다. 실습 머신 내부에서도 원본을 사용할 수 없다는 뜻입니다. 이제 Field Copy에서 Downloaded guide, Start the route, 아직 읽지 않은 Amber cap을 엽니다. 실제 문단과 그림이 로드되어야 합니다. 그곳의 Observation sheet를 열면 실제 인쇄 가능한 SVG가 보여야 합니다. 이 로컬 주소는 원본 URL과 다릅니다.

실제 그림을 포함한 완전한 로컬 종 카드

이동할 수 있는 디렉터리 인계하기

빈 handover/ 디렉터리는 이미 제공되어 있습니다. mv는 하위 항목을 포함한 디렉터리 전체를 옮깁니다. handover/ 끝의 슬래시는 대상이 디렉터리임을 분명히 합니다.

mv field-guide handover/

이전 다운로드 위치는 없어졌습니다. 이동한 디렉터리를 나열합니다.

ls handover/field-guide
robots.txt  shared  woodland

새 비공개 브라우저 창에서 Field Copy를 열거나 새 탭에서 읽기 데스크를 거쳐 Moved handover guide로 들어갑니다. 비공개 창에서는 플랫폼의 일반 로그인이 필요할 수 있습니다. 학습 경로에는 새 Field Copy 탭이면 충분합니다. 이동한 URL은 /handover/field-guide/woodland/index.html이며 로컬 읽기 서비스가 제공합니다. 오래된 북마크로 원래 위치에 돌아가지 마세요.

Start the route를 따라 아직 읽지 않은 Reed fan을 열고 All field notes로 돌아간 뒤 Observation sheet를 엽니다. 브라우저 메뉴에서 기록지를 저장하거나 인쇄할 수 있습니다. 성공 애니메이션이 아니라 실제 파일을 사용하는 것입니다. Harbor event 링크는 오프라인 범위 밖이므로 원본을 제거한 후 작동할 필요가 없습니다.

필수 페이지가 이제 실패한다면 source-control start로 원본을 복구하고 이전 단계의 방법으로 깨끗한 다운로드를 수정합니다. 경로를 확인한 뒤 불완전한 인계 디렉터리를 교체하세요. 그다음 원본을 중지하고 이동한 읽기 경로를 다시 수행합니다. 실습 전체를 초기화할 필요는 없습니다. 완전한 인계 결과를 최종 산출물로 남깁니다.

최종 산출물은 내용과 공유 자산을 포함하는 handover/field-guide/입니다. 이 실습은 일반 정적 파일 서버를 통한 브라우저 읽기를 확인합니다. 모든 브라우저에서 동일한 file:// 동작이나 플랫폼에서 자신의 컴퓨터로 디렉터리를 한 번에 다운로드하는 기능은 약속하지 않습니다.

요약

저장한 HTML 한 페이지와 범위를 제한한 재귀 수집을 비교하고 공유 의존 파일을 포함한 뒤 링크를 상대 경로로 변환했습니다. 이어 직접 원본을 중지하고 독립 로컬 복사본의 아직 읽지 않은 내용을 사용했으며 디렉터리 전체를 인계 위치로 옮겼습니다.

유용한 결과는 안내서 자체입니다. 읽을 수 있는 페이지 다섯 개, 그림 세 개, 스타일시트와 실제 관찰 기록지에 크롤러 메타데이터가 더해집니다. 원본 가용성, 다운로드 범위, 정상 로컬 탐색은 서로 다른 속성이고, 각각을 검증했습니다.