개요
오늘은 터미널에서 자주 쓰이는 두 가지 도구, curl
과 wget
에 대해 기록해보려고 합니다!
둘 다 웹에서 데이터를 가져오는 데 유용하지만, 용도와 특징이 조금 달라서 상황에 따라 골라 쓰면 좋아요!
curl: 데이터 전송의 만능 도구
curl
은 Client URL
의 줄임말로, HTTP, HTTPS, FTP등 다양한 프로토콜을 지원하는 강력한 도구예요.
주로 웹에서 데이터를 가져오거나 API 요청을 테스트할 때 많이 사용됩니다!
기본적으로 요청 결과를 터미널에 출력해주니까, 바로 확인하고 싶을 때 편리하죠.
파일로 저장하려면 옵션을 추가하면 되구요.
강점
GET
,POST
같은 HTTP 메서드를 자유롭게 사용 가능해요.- 헤더 설정, 인증 처리 등 복잡한 요청도 쉽게 처리 가능합니다.
- 다목적 도구라 많은 개발자들이 사용합니다 ~
자주 사용하는 옵션
옵션 | 설명 | 예제 |
---|---|---|
-o <파일명> |
응답을 파일로 저장 | curl -o page.html https://example.com |
-O |
원격 파일명으로 저장 | curl -O https://example.com/file.txt |
-X <메서드> |
HTTP 메서드 지정 (GET, POST 등) | curl -X POST https://api.example.com |
--d <데이터> |
POST 요청에 데이터 전송 | curl -d "key=value" https://api.example.com |
``-H <헤더>` | 커스텀 헤더 추가 | curl -H "Authorization: Bearer token" https://api.example.com |
``-u <사용자:비번>` | 기본 인증 (Basic Auth) | curl -u user:pass https://example.com |
-L |
리다이렉션 따라가기 | curl -L https://example.com |
-s |
Silent 모드 (진행률 출력 안 함) | curl -s https://example.com |
사용 예제
1. 웹 페이지 내용 확인하기
curl https://example.com
2. 파일로 저장하기
curl -o example.html https://example.com
-> 응답을 example.html
파일로 저장
3. API에 POST 요청 보내기
curl -X POST -d "key=value" https://api.example.com
데이터를 실어서 POST 요청을 보냅니다.
wget: 다운로드의 달인
wget
은 Web Get
의 약자로, 파일이나 웹사이트를 다운로드하는 데 특화된 도구예요.
요청한 데이터를 터미널에 띄우지 않고 바로 파일로 저장해주니까, "다운로드"가 주 목적일 때 딱이죠!
심지어 웹사이트 전체를 재귀적으로 내려받을 수도 있답니다.
강점
- 파일 다운로드가 기본 동작이라 사용법이 직관적
- 재귀 다운로드로 사이트 콘텐츠를 통째로 가져올 수 있음.
- 단순하고 빠름.
자주 사용하는 옵션
옵션 | 설명 | 예제 |
---|---|---|
-O <파일명> |
지정한 파일명으로 저장 | wget -O custom.txt https://example.com/file.txt |
-P <경로> |
다운로드 경로 지정 | wget -P /home/user/downloads https://example.com/file.txt |
-r |
재귀적으로 다운로드 (하위 링크까지) | wget -r https://example.com |
-R |
지정한 패턴에 맞는 파일을 다운로드에서 제외 | wget -R "index.html*" |
-np (No Parent) |
상위 디렉토리로 올라가지 않음 (no-parent) | wget -r -np https://example.com/subdir/ |
-nH (No Host Directories) |
호스트 이름(도메인 이름)으로 디렉토리를 만들지 않도록 설정. | wget -nH https://example.com/subdir |
--cut-dirs=<count> |
URL 경로에서 지정한 수만큼 디렉토리 단계 생략. | wget --cut-dirs=1 |
-A <패턴> |
지정한 파일 형식만 다운로드 (accept) | wget -r -A "*.jpg,*.png" https://example.com |
-c |
중단된 다운로드 이어서 진행 | wget -c https://example.com/bigfile.zip |
-q |
Quiet 모드 (출력 안 함) | wget -q https://example.com/file.txt |
-t <횟수> |
재시도 횟수 지정 | wget -t 5 https://example.com |
사용 예제
1. 파일 다운로드
wget https://example.com/file.txt
2. 이름 바꿔서 저장
wget -O custom_name.txt https://example.com/file.txt
3. 웹 사이트 전체 다운로드
wget -r -l 2 https://example.com
example.com
을 2단계 깊이까지 재귀적으로 다운로드.
4. 조건을 붙여서 재귀적으로 다운로드하기.
wget -r -np -nH --cut-dirs=1 -P "$target_dir" -R "index.html*" "$SyncBase/$folder/"
-r
(Recursive)
- 설명: 재귀적으로 다운로드하라는 뜻이야. 지정한 URL에서 링크를 따라가며 하위 파일과 디렉토리까지 모두 가져와.
- 여기서 역할: $SyncBase/$folder/ 아래에 있는 모든 파일과 폴더를 다운로드하려고 설정된 거야.
- 예시: wget -r https://example.com → example.com 아래 모든 콘텐츠를 가져옴.
-np
(No Parent)
- 설명: 상위 디렉토리로 올라가지 않도록 제한해. 재귀 다운로드(-r)를 할 때, 부모 디렉토리로 올라가서 불필요한 데이터를 가져오는 걸 막아줘.
- 여기서 역할: $SyncBase/$folder/ 이하만 다운로드하고, 그 위로는 올라가지 않도록 보장해.
- 예시:
wget -r -np https://example.com/sub/
→ sub/ 이하만 다운로드.
-nH
(No Host Directories)
- 설명: 호스트 이름(도메인 이름)으로 디렉토리를 만들지 않도록 설정해. 기본적으로 wget은 URL의 호스트명(예: example.com)을 기반으로 로컬에 디렉토리를 만들지만, 이 옵션을 쓰면 그걸 생략해.
- 여기서 역할: 다운로드된 파일이 $target_dir에 바로 저장되도록 하고, $SyncBase의 호스트명 디렉토리(예: example.com/)가 추가되지 않게 함.
- 예시:
wget -nH https://example.com/file.txt
→ file.txt가 바로 저장됨(호스트 디렉토리 없이).
--cut-dirs=1
- 설명: URL 경로에서 지정한 수만큼 디렉토리 단계를 생략해. 기본적으로 wget은 URL의 디렉토리 구조를 그대로 로컬에 반영하는데, 이 옵션으로 일부를 잘라낼 수 있어.
- 여기서 역할: $SyncBase/$folder/에서 디렉토리 하나를 생략하고 저장해. 예를 들어, URL이 https://example.com/base/folder/file.txt라면, base/를 건너뛰고 folder/file.txt만 저장.
- 예시:
wget --cut-dirs=1 https://example.com/dir1/dir2/file.txt
→ dir2/file.txt로 저장.
-P "$target_dir"
(Prefix)
- 설명: 다운로드한 파일을 저장할 로컬 디렉토리를 지정해. $target_dir는 변수로, 실제 경로(예: /home/user/downloads)가 들어갈 거야.
- 여기서 역할: 모든 파일을 $target_dir에 저장하도록 설정.
- 예시:
wget -P /tmp https://example.com/file.txt
→ /tmp/file.txt에 저장.
-R "index.html*"
(Reject)
- 설명: 지정한 패턴에 맞는 파일을 다운로드에서 제외해. 여기선 index.html로 시작하는 모든 파일(예: index.html, index.html.bak)을 무시하라는 뜻.
- 여기서 역할: $SyncBase/$folder/에서 index.html 파일들이 필요 없어서 제외한 거야. 불필요한 기본 페이지를 건너뛰고 싶을 때 유용해.
- 예시:
wget -R "*.txt" https://example.com
→ .txt 파일은 다운로드 안 함.