====== lftp ======
===== 소개/특징 =====
- commandline interface 기반의 강력한 ftp client
- ftp, http, sftp, https, ftps 의 다양한 프로토콜 지원
- 심각한 에러에 대한 예외 처리가 잘 되어있고, 실패했을시 자동으로 다시 시도
- ftp서버가 REST명령어를 지원하지 않더라도 lftp는 성공적으로 전송을 끝내기 위해서 재시도 한다
- 백그라운드 모드를 지원하다 [/summary]
- lftp는 ipv6를 지원한다. 물론 ftp proxy , http proxy 등 라우레벨 까지 지원한다.
- lftp는 ssl 지원가능하다.
===== 환경설정 =====
- lftp의 기본 환경 설정파일은 /etc/lftp.conf 입니다.
- 명령어 line에서도 설정을 할수있습니다. \\ 스크립트 사용시 필요한 옵션에 대해 기술합니다.
- 사용예 : 환경설정 사이의 구분은 ; 로 합니다.
lftp -c "set ftp:passive-mode off;set net:max-retries 1;set net:timeout 5; mget -c ftp://id:pass@sysdba.net/*.tgz"
^ ftp:passive-mode off | 방화벽이 설치되어있는 서버에 접속할때 유용합니다. |
^ net:max-retries 1 | 접속이 실패하고 재 시도하는 횟수를 적습니다. \\ cron등으로 백업 스크립트를 돌릴 경우 기본으로 설정되어있는 0(unlimited)일 경우 \\ 무한정 재시도를 하게되어 \\ 이후의 cron job에 영향을 주게 됩니다. \\ 따라서 cron등을 사용한 자동화 프로그램에서는 꼭 설정해 주는것이 좋습니다. |
^ set net:timeout 5 | 접속시도 시간이 timeout시간을 초과할 경우 재 접속을 시도합니다.(초 단위) |
^ net:limit-rate 1000000 | 초당 전송되는 byte를 제한하는데 쓰입니다. |
^ set file:charset cp949 | 로컬 시스템의 캐릭터셋을 정의한다. |
^ set ftp:charset cp949 | 원격 시스템의 캐릭터셋을 정의한다. |
===== 명령어 =====
* 스크립트를 통해 파일을 업로드 하거나 다운로드 할 때 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에 대한 옵션입니다.
==== du ====
- 전체의 용량 확인
==== gzip ====
- gzip으로 압축된 파일을 전송하지 않고 볼 수 있는 zcat 과 zmore 명령어를 지원한다.
lftp starlits@10.71.73.109:~> help zcat
Usage: zcat
Same as cat, but filter each file through zcat
lftp starlits@10.71.73.109:~> help zmore
Usage: zmore
Same as more, but filter each file through zcat
==== sftp ====
- sftp프로토콜을 이용하여 보안 접속을 할 수 있다.
- lftp는 이런 보안 프로토콜을 제공하기 때문에 더욱 다양한 환경에서 파일전송을 쉽게 할 수 있다.
- 예
$ lftp -u starlits sftp://10.1.1.10
password:
lftp starlits@10.1.1.10:~>
==== http ====
- http를 지원한다.
- 자체 파서로 링크를 분석하여 디렉토리 구조로 나타낸다.
- 웹기반 ftp서버에 쉽게 접근하여 원하는 자료를 다운 받을 수 있는 강력한 기능을 내장하고 있다.
oracle@eagle:~/install$ lftp http://www.adminschool.net
cd ok, cwd=/
lftp www.adminschool.net:/>
==== backgroud jobs ====
- 만약 모든 작업이 끝나지 않은 상태에서 lftp를 정지해야 한다면, 작업 내용을을 백그라운드로 돌릴 수 있다.
- lftp는 쉘과 비슷한 명령어 문법을 제공한다. background(&), () 묶여진 명령어 그룹,
- 하던 작업을 백그라운드로 돌리고 싶으면 Ctrl+z키를 누르고, 다시 wait명령어로 포그라운드로 돌릴 수 있다.
- 돌고 있는 작업들을 보려면 jobs명령으로 볼 수 있다. 어떤 명령어(cat, ls ...)는 리다이렉트를 지원한다.
- 이런 명령어들은 논리연산자(&&, ||)등을 사용할 수 있다.
- 첫번째 명령어는 file내용을 리다이렉트를 이용하여 gzip으로 압축하여 file.gz으로 저장하는 방법을 보여주는 것이며, \\ 다음 라인은 백그라운드 모드로 file을 내려 받는 것을 보여 주며, \\ 마지막 라인은 명령어들을 묶고, && 조건 연산을 사용하여 백그라운드 모드로 돌리는 것을 보여준다.
lftp> cat file | gzip > file.gz
lftp> get file &
lftp> (cd /path && get file) &
==== at / queue ====
- at 명령어를 사용하여 정해진 시간에 작업을 실행할수도 있며, \\ queue명령어를 사용하여 명령어를 차례대로 실행시킬수 있다.
- 물론 진행상황을 보려면 jobs명령으로 가능하다.
===== 예제 =====
- lftp에 접속한다. $ lftp -u {username} {ftp_url}
- passive mode를 설정한다. lftp> set ftp:passive-mode off
- 원격 ftp 서버에 있는 데이타를 가지고 온다. lftp> mirror {directory|filename}
- 로컬에 있는 파일을 ftp 서버로 전송한다. lftp> mirror -R {directory|filename}