리눅스를 사용하다보면 다양한 이유로 다른 서버의 파일들을 가져와야 할 경우가 발생한다. 리눅스에서는 어떻게 파일을 다운로드하는지에 대해 알아보자.
인터넷의 파일을 다운로드받는 리눅스 명령어
사용법은 간단하다.
wget [파일 주소]
한 예로 이미지 파일을 다운로드 받아보자.
필자의 블로그에 이미지 사진이 하나 있다(127.0.0.1 부분이 빨간색으로 되어 있는데 이는 다른 포스팅 내용이므로 신경 안 쓰시면 됩니다). 이 이미지를 리눅스로 wget을 사용하여 다운받아보려고 한다. 이미지가 있는 주소를 [파일 주소]에 입력해주면 끝이다. 이미지의 주소는 해당 이미지에서 마우스로 오른쪽 클릭 후 ‘이미지 주소 복사’를 클릭해주면 주소가 복사된다. 그 다음 wget을 이용하면
이렇게 해당 이미지가 saved, 즉, 다운받아서 저장이 되었다는 메시지가 뜬다. ls -al로 확인해보면
이미지가 잘 받아졌음을 확인할 수 있다.
[파일 주소]는 실제 해당 [파일 주소]를 입력했을 때 파일이 있는 위치를 말한다. 방금 필자가 다운로드받은 [파일 주소]를 URL창에 입력해보면
이렇게 해당 파일이 있다. 이렇게 파일이 있는 주소여야만 wget으로 다운로드가 가능하다. 방금은 그냥 wget만 사용했지만 wget에는 여러 옵션들이 많다. wget –help 명령어를 입력하면 해당 옵션에 대한 설명들을 확인할 수 있다.
이에 대한 옵션을 한글로 정리해 준 분이 계셔서 링크를 공유한다(https://hooeni.tistory.com/166).
필자는 이 중에서 몇 가지 유용하게 쓰일 수 있는 옵션에 대해서만 다루고자 한다.
(1) 다운로드 받은 파일을 다른 이름으로 저장
위처럼 아무 옵션없이 wget으로만 다운받다보니 해당 서버에 저장된 이름으로 다운로드된다. 이러면 나중에 이게 어떤 파일인지 구분하기 어려워질 수 있기 때문에 나만의 방식으로 구분하기 위해 이름을 짓고 싶다. 그런 경우는 -O 옵션을 이용해주면 된다.
wget -O [내가 지을 파일 이름][파일 주소]
-O는 반드시 대문자여야 한다. 소문자 -o 옵션은 다운로드 받은 파일의 로그를 남겨주는 옵션이기 때문이다. 방금 받았던 파일을 -O 옵션으로 다시 받아보자.
필자는 pooh.jpg라는 이름으로 이미지를 다운받으려고 저렇게 이름을 지어줬다. ‘pooh.jpg’ saved라는 메시지가 뜬 것으로 보아 잘 다운받아졌음을 알 수 있다. 또한 ls -al로 확인해보면
pooh.jpg라는 이름의 이미지로 이미지가 잘 다운받아졌음을 확인할 수 있다. 위의 14.JPG?raw=true 는 아까 wget으로 받고 나서 삭제를 하지 않았기 때문에 남아있는 것이다.
서버를 운영하다 보면 대역폭 관리가 중요하다. 만약 한 계정의 이용자가 큰 파일을 다운로드하면서 서버 회선의 대역을 다 써버리면 다른 계정의 이용자들은 서버 응답이 느려진다던지 전송속도가 느려지는 불편함을 겪을 수 밖에 없다. 왜냐하면 보통 wget으로 파일을 다운받을 때 따로 옵션을 주지 않으면 가능한 최대 속도로 다운을 받기 때문이다. 이러한 경우를 대비해 wget은 다운로드를 제한하는 옵션을 제공하고 있다.
wget –limit-rate=[지정할 속도] [파일 주소]
[지정할 속도]의 단위는 Bps(Byte per second = B/s)이고, 예를 들어, wget –limit-rate=5k [파일 주소]라고 하면 해당 서버의 전체 대역 중 5KBps(5KB/s)만을 사용해서 데이터를 다운받는 것이다. 좀 더 쉽게 말하면, 다운로드 속도가 5KB/s로 제한된다는 얘기다.
–limit-rate를 5k로 지정했더니 5.00KB/s로 파일을 다운로드 받는 것을 확인할 수 있다.
wget으로 다운을 받으면 백그라운드(back ground)가 아닌 포그라운드(fore ground)로 실행이 되기 때문에 다른 작업을 할 수가 없다. 다른 작업을 하려면 터미널을 하나 더 켜거나 다운이 끝날 때까지 기다려야만 한다. 이러한 문제점을 해결해주기 위해 wget은 백그라운드에서 다운받을 수 있는 옵션을 제공하고 있다.
wget -b [파일 주소]
-b는 back ground를 의미한다. 이렇게 해주면 다운은 백그라운드에서 받고 나는 다른 작업을 할 수 있다.
Continuing in background, 백그라운드에서 진행한다는 메시지와 함께 Output(출력화면)이 wget-log에 쓰여진다는 메시지가 있다. 쉽게 말하면 아까 포그라운드에서 다운받을 때 나오는 출력화면이 wget-log에 기록된다는 뜻이다. 또한 아까와는 다르게 이렇게 백그라운드에서 다운로드받게 하고 필자는 다른 작업한다는 것을 가정해서 txt 파일 만드는 작업을 진행했다. 그러고 나서, ls -al로 확인해보면 다운로드 받은 14.JPG?raw=true가 있고 방금 만든 pooh.txt도 있으며 wget-log도 있다. wget-log 파일을 열어보면
포그라운드로 다운받을 때 나왔던 메시지들이다. 이 말은 백그라운드로 다운로드 중인 내역이 다 wget-log 파일에 기록된다는 말이고 파일의 용량이 큰 경우 다운로드가 오래 걸릴 때 wget-log 파일을 통해 현재 어느 정도 다운로드 받아졌는지도 확인할 수 있다. 이 때 명령어는
tail -f wget-log
를 사용하면 된다.
| 그럼 만약에 백그라운드로 파일을 다운로드 받다가 취소해야 하는 경우는 어떻게 해야할까? 포그라운드는 Ctrl + C 로 취소할 수 있지만 백그라운드는 Ctrl + C 가 먹히지 않는다. 백그라운드의 경우는 아까 wget에 -b 옵션을 줄 때 pid를 알려주는데, 이 pid는 wget 프로세스를 의미한다(필자의 경우 pid가 39401이었기 때문에 “ps -e | grep 39401” 이라고 입력하면 wget 프로세스가 나온다). 즉, 저 wget 프로세스를 죽이면 된다. |
pkill -9 wget
이렇게 명령을 주면 백그라운드에서 wget으로 다운받더라도 다운로드를 중간에 종료할 수 있다.
파일을 다운로드받다가 갑자기 오류 혹은 실수로 Ctrl + C 를 눌러 종료시켜버린 경우 다시 wget으로 파일을 다운받으면 처음부터 다시 받아야 한다. 이러한 경우를 대비해 wget은 이어받기 옵션을 제공한다.
wget -c [파일 주소]
이렇게 다운로드받다가 실수로 Ctrl + C를 눌러 종료를 시켜버렸다. 다시 wget으로 다운받으면 0%부터 다시 시작하게 된다. 하지만 -c 옵션을 주게 되면 25%부터 이어서 다운로드받는다.
그래서 25%까지가 ++++++(파란색)로 표시되어 있고 ===>(초록색)가 현재 이어서 다운로드 되고 있는 부분이다. 이 역시 용량이 큰 파일이어서 오래 걸릴 때 실수했을 경우 유용하게 쓰일 수 있다. 처음부터 -c 옵션을 주는 게 아니라 실수로 종료되고 다운로드를 이어받고자 할 때 -c 옵션을 주면 된다.
여태 배운 옵션들을 한 번에 적용시킬 수도 있다. 필자는 (1), (2), (4)를 한 번에 적용시켜보겠다.
다운로드 속도는 5KB/s이고 다운받은 파일의 이름은 pooh.jpg로 지정했으며 -c 옵션을 통해 실수로 다운로드 중에 종료시키더라도 이어받을 수 있도록 할 것이다(물론 처음에 다운로드받을때는 -c 옵션 사용 X). 그 다음 실수했다고 가정하고 종료를 시켰다(Ctrl + C = 화면의 ^C).
이전 명령어에다가 -c 옵션만 추가해서 다시 입력해주게 되면 pooh.jpg라는 이름으로 5KB/s 속도로 이어서 받는다. 아까 (4) 이어받기 에서 봤지만 이전까지 다운로드된 것들은 ++++++로 표시된다. 다운로드가 잘 됐는지 ls -al로 확인해보면
pooh.jpg라는 이름으로 잘 다운로드 된 것을 확인할 수 있다.
참고 블로그 :