Devin.KR
로그인

리눅스 wget 명령어 사용법 - 파일 다운로드 옵션 정리와 실전 예제

개발자 조회 3

이 명령어를 언제 쓰는가

서버에 패키지나 설치 스크립트를 내려받을 때, 회선이 불안정해 몇 시간짜리 다운로드를 중간부터 이어받아야 할 때 wget을 쓴다. curl 과 역할이 겹치지만, wget 은 처음부터 파일을 받아 디스크에 저장하는 것을 목적으로 만들어졌기 때문에 이어받기, 재시도, 재귀 내려받기가 기본으로 붙어 있다.

배포 서버에서 아티팩트를 받는 스크립트, 정적 사이트를 통째로 복사해 보관하는 작업, 링크가 살아 있는지 본문 없이 확인하는 점검에 특히 잘 맞는다.

기본 형식

wget [옵션] URL
  • URL — 여러 개를 나열할 수 있고, -i 목록파일 로 파일에서 읽을 수도 있다.
  • 옵션 없이 실행하면 현재 디렉터리에 URL 의 파일명 그대로 저장한다. 같은 이름이 있으면 파일.1, 파일.2 로 늘어난다.
  • 진행 상황은 표준에러로 나가므로, 로그로 남기려면 -o 또는 2> 를 쓴다.

자주 쓰는 옵션

옵션의미예시
-O 파일명저장할 파일명 지정(대문자 O)wget -O node.tar.xz https://.../node.tar.xz
-P 디렉터리저장할 디렉터리 지정wget -P /opt/pkg https://.../a.rpm
-c끊긴 다운로드를 이어받는다wget -c https://.../big.iso
-q출력 없음. 스크립트·cron 에서 사용wget -q -O - https://.../install.sh
--spider내려받지 않고 존재 여부만 확인wget --spider -q https://devin.kr/
-b백그라운드 실행. wget-log 에 기록wget -b https://.../big.iso
-T 초 / -t 횟수타임아웃 / 재시도 횟수(기본 20회)wget -T 10 -t 3 https://...
--limit-rate=속도대역폭 제한. 운영 회선 보호용--limit-rate=2m
-N서버 파일이 더 새로울 때만 받는다wget -N https://.../data.csv
-r -np -nH재귀 / 상위 디렉터리 제외 / 호스트명 디렉터리 생략wget -r -np -nH https://host/docs/
--user / --password기본 인증 자격 증명--user=deploy --password=***

실전 예제

1. 대용량 파일을 이어받는다. 새벽에 끊긴 다운로드를 처음부터 다시 받지 않는다. 같은 디렉터리에서 같은 명령을 다시 치면 된다.

wget -c --limit-rate=5m https://cdn.example.com/release/app-1.4.0.tar.gz

--limit-rate 를 같이 쓰는 이유는 운영 서버에서 회선을 다 먹지 않기 위해서다. 낮 시간대 다운로드에는 사실상 필수다.

2. 링크가 살아 있는지 본문 없이 확인한다. 사이트맵에 적힌 URL 들이 실제로 200 인지 점검할 때 쓴다.

wget --spider -q https://devin.kr/ && echo "OK" || echo "FAIL"

3. 문서 디렉터리를 통째로 내려받는다. 사내 위키나 정적 문서를 오프라인으로 보관할 때 쓰는 조합이다.

wget -r -np -nH --cut-dirs=1 -R 'index.html?*' https://host/docs/

-np 가 없으면 상위 디렉터리로 기어 올라가 사이트 전체를 긁는다. 재귀 다운로드에서 이 옵션은 안전장치다.

4. 백그라운드로 돌리고 로그로 확인한다. SSH 세션이 끊겨도 다운로드는 계속된다.

wget -b -o /var/log/wget-app.log -c https://cdn.example.com/release/app-1.4.0.tar.gz
tail -f /var/log/wget-app.log

5. 파일로 저장하지 않고 바로 다음 명령에 넘긴다. 디스크에 임시 파일을 만들고 싶지 않을 때 쓴다.

wget -q -O - https://host/data/list.csv | awk -F, 'NR>1 {print $2}' | sort -u

함정과 주의점

-O(대문자)와 -o(소문자)는 완전히 다르다. 대문자는 받은 내용을 저장할 파일이고, 소문자는 로그를 기록할 파일이다. wget -o app.tar.gz URL 이라고 잘못 치면 app.tar.gz 안에 다운로드 진행 로그가 들어가고, 정작 받은 파일은 원래 이름으로 따로 저장된다. 압축 해제가 안 된다며 헤매는 사고의 단골 원인이다.

-c는 대상 파일이 바뀌었는지 확인하지 않는다. 서버 쪽 파일이 교체된 뒤 이어받기를 하면 앞부분과 뒷부분이 다른 파일이 섞인 깨진 결과물이 나온다. 그런데도 명령은 성공으로 끝난다. 중요한 파일은 받은 뒤 반드시 sha256sum 으로 검증한다.

재귀 다운로드는 반드시 -np-l 깊이로 울타리를 친다. wget -r URL 만 치면 링크를 따라 끝없이 퍼져 나가 디스크를 채우고, 상대 서버에서는 크롤러로 보고 차단한다.

기본 설치가 아닌 환경이 있다. macOS 에는 wget 이 없고(brew install wget 필요), RHEL 8 이상 최소 설치 이미지에도 없는 경우가 많다. 반면 curl 은 거의 항상 있다. 배포 스크립트를 짤 때는 wget 존재를 전제하지 말고 command -v wget 으로 확인하거나 curl 로 대체 경로를 둔다.

함께 보면 좋은 명령어

  • curl — 헤더 조작과 API 호출은 curl 이 훨씬 편하다. 어느 환경에나 있다는 점도 장점이다.
  • sha256sum — 내려받은 파일이 온전한지 확인한다. 이어받기를 썼다면 필수다.
  • tar — 받은 압축 파일을 풀 때 바로 이어지는 명령이다.