lftp 사용법
lftp는 수많은 ftp클라이언트중 ‘디렉토리 구조이동’까지 수행해주는
쓸모있는 클라이언트다.
수많은 기본기능 외에 내가 주목하는 특수기능
1. 디렉토리 구조이동
– 윈도우 GUI환경에서의 클라이언트는 당연히 되는게,
리눅스 터미널에서의 ftp는 구현이 안돼있다.
바보같은 개발자는 이게 안되서 우는 경우가 있다.
ftp로는 디렉토리구조복사가 안되니, rcp를 쓸게있게 열어달라는거다.
이런 바보들에게는 이 기능을 추천해주자.
(몰라서 바보가 아니다.. rcp의 오픈으로 얼마나 위험한지 개념이 없는게 바보인거다.
아니면, 그런 위험을 나한테 감수하라는 비겁자이거나..–)
이 기능은 아래와 같은 syntax를 따른다.
이해하기 힘들면, 당분간 외워서 치자.
lftp -c ‘open -e “mirror [REMOTE_DIR] [LOCAL_DIR]” [URL]’
– 아래와 같은 커맨드는 c (command)옵션과
interactive모드에서의 e (execute)옵션의 용례를 보여준다.
lftp -c ‘open -e “mirror /A/B /A/B” ftp://myftpid:myftppw@mysite.com’
각론 : “mirror /A/B /A/B” 사용시
리모트의 /A/B 디렉토리 하단의 파일및 디렉토리를
로컬의 /A/B 디렉토리 하단으로 전송한다.
B디렉토리가 아님을 유의할것.
“mirror /A/B /A/B/” 로사용해야만
리모트의 /A/B 디렉토리 자체를
로컬의 /A/B 디렉토리 하단으로 전송한다.
로컬측의 디렉토리구조는 /A/B/B로 변경된다.
개선 : 1행의 명령으로 디렉토리복사를 수행하므로 상당히 쓸모있다.
그러나, lftp에서는 기본적으로 binary 모드를 지원하므로,
다운로드된 모든 텍스트파일에는 “^M” 문자가 붙는다.
그러므로, 다운로드된 스크립트파일은 실행시 에러를 발생하게된다.
sed -i ‘s/^M//’ [FILE_NAME] 으로 아쉬운대로 문자제거를 하면된다.
커맨드 내에 ascii모드를 포함시킬 순 없을까?
2. 동기화 기능
3. 멀티 큐 기능
– 특정사이트 내에서의 작업단위를 큐로 지정하여 별도관리 할수 있다.
4. 멀티 슬롯 기능
– 여러 개의 사이트로의 접속을 슬롯으로 지정하여 별도관리 할 수 있다.
5. 스크립팅 기능
======================================================
스크립트를 통해 파일을 업로드 하거나 다운로드 할 때 ncftpget등을 사용하게 되는데 2G이상의 파일을 받지 못하는 경우가 있습니다.
이러한 문제를 해결하고 rsync를 통해 동기화를 하는 듯한 기능까지 가지고 있는 lftp를 소개 합니다.
## mget : 여러개의 파일을 다운 받을때
– 기본 사용법
lftp -c “mget ftp://id:pass@sysdba.net/*.tgz”
– 이어받기(이미 동일한 파일이 있으면 받지 않습니다.)
lftp -c “mget -c ftp://id:pass@sysdba.net/*.tgz”
## mirror : 동기화(rsync와 유사한 기능이라고 보심됩니다.)
– 기본 사용법
lftp -c “mirror ftp://id:pass@sysdba.net/ /target”
remote site의 id의 home디렉토리와 접속서버의 /target 디렉초리를 동기화 시킵니다.
– 유용한 옵션
-c : mget과 마찬가지로 이어받기를 합니다.
-e : rsync의 –delete와 같은 기능으로 remote site에 파일이 삭제되었을 경우 current site에서도 제거를 합니다.
-R : 일반적으로 remote site가 기준이되어 이를 동기화 하는데 -R옵션을 주게되면 current site를 기준으로 remote site에 변경을 가하게됩니다.(reverse mirror)
– 사용예
lftp -c “mirror -c -e ftp://id:pass@sysdba.net/ /target”
* lftp 다음의 -c 와 mirror 다음의 -c는 서로 다른 옵션입니다.
즉 전자는 lftp프로그램에 대한 옵션이고 후자는 mirror에 대한 옵션입니다.
## 환경설정 변경하기
lftp의 기본 환경 설정파일은 /etc/lftp.conf 인데 명령어 line에서도 설정을 할수있습니다. 이와같은 옵션중에 스크립트 사용시 필요한 옵션에 대해 간단히 설명하죠.
ftp:passive-mode off : 방화벽이 설치되어있는 서버에 접속할때 유용합니다.
net:max-retries 1 : 접속이 실패하고 재 시도하는 횟수를 적습니다. cron등으로 백업 스크립트를 돌릴 경우 기본으로 설정되어있는 0(unlimited)일 경우 무한정 재시도를 하게되어 이후의 cron job에 영향을 주게 됩니다. 따라서 cron등을 사용한 자동화 프로그램에서는 꼭 설정해 주는것이 좋습니다.
set net:timeout 5 : 접속시도 시간이 timeout시간을 초과할 경우 재 접속을 시도합니다.(초 단위)
net:limit-rate 1000000: 초당 전송되는 byte를 제한하는데 쓰입니다.
– 사용예 : 환경설정 사이의 구분은 ; 로 합니다.
lftp -c “set ftp:passive-mode off;set net:max-retries 1;set net:timeout 5; mget -c ftp://id:pass@sysdba.net/*.tgz”