리눅스 wget 명령어 사용법 - 파일 다운로드 옵션 정리와 실전 예제
이 명령어를 언제 쓰는가
서버에 패키지나 설치 스크립트를 내려받을 때, 회선이 불안정해 몇 시간짜리 다운로드를 중간부터 이어받아야 할 때 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— 받은 압축 파일을 풀 때 바로 이어지는 명령이다.