bash script (backup)2020. 10. 16. 11:38

 

반달가면 이글루에서 백업 - bahndal.egloos.com/382770

 

리눅스 shell script에서 FTP 서버에 자동으로 접속해서 파일을 올리거나 가져오는 방법이다.

 

형식은 대략 아래와 같다.

 

ftp -n [서버 주소] << [구분자]

user [사용자id] [암호]

[ftp 명령어]

quit

[구분자]

 

예를 들어 사용자 이름 john, 암호 my_password, ftp 서버 192.168.0.10, my_data.dat 파일을 가져오는 경우라면 이렇게 만들면 되겠다.

 

ftp -n 192.168.0.10 << SCRIPT

  user john my_password

  binary

  get my_data.dat

  quit

SCRIPT

 

구분자로 사용한 SCRIPT는 들여쓰기(indentation)하면 안된다는 점에 주의하자. 구분자 위쪽의 ftp 명령어 부분은 들여쓰기해도 된다.

 

ftp에서 -n 옵션은 접속후 자동으로 계정과 암호를 묻지 않도록 하기 위한 것이다. 계정과 암호는 "SCRIPT"라는 구분자로 묶인 부분에서 수동으로 입력하므로 자동접속에서는 -n 옵션이 반드시 포함되어 있어야 한다.

 

만약 script 구성상 전체적으로 들여쓰기를 해야 보기가 좋다면 아래와 같이 해 보자. ("<<" 대신 "<<-" 사용)

 

  ftp -n 192.168.0.10 <<- SCRIPT

    user john my_password

    binary

    get my_data.dat

    quit

  SCRIPT

 

한가지 유의할 점은, 들여쓰기를 할 때 반드시 탭(tab)을 사용해야 한다는 것이다. 공백(space)으로 들여쓰기를 하면 안 된다.

 

FTP는 접속정보가 암호화되지 않으므로 보안에 유의하자! 되도록 anonymous 사용을 추천.

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 20:32

 

반달가면 이글루에서 백업 - bahndal.egloos.com/363294

 

find와 grep을 이용해서 특정 디렉토리와 그 하위 디렉토리에서 특정 문자열이 포함된 파일을 찾을 수 있다. find 명령에 -type f 옵션으로 파일을 출력한 후 grep으로 찾으면 되겠다. 검색 범위는 지정한 디렉토리와 그 하위 디렉토리가 된다.

 

현재 디렉토리와 그 하위 디렉토리에서 myfile이라는 문자열이 포함된 파일을 찾으려면

find ./ -type f | grep "myfile"

 

/etc 디렉토리에서 찾으려면

find /etc -type f | grep "myfile"

 

그렇게 찾은 파일을 rm 명령으로 지우고 싶으면

find /etc -type f | grep "myfile" | xargs rm

 

또는 역따옴표(`)를 이용해서

rm `find /etc -type f | grep "myfile"`

 

디렉토리를 찾고 싶으면 -type d라고 지정하면 된다.

find ./ -type d

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 20:28

 

반달가면 이글루에서 백업 - bahndal.egloos.com/339889

파일 생성 시점을 파일명에 넣어서 임시 파일을 만드는 경우다.  

 

shell script에서 임시로 파일을 만들어서 사용해야 할 경우, 파일명이 다른 파일과 겹치지 않게 하기 위해 date를 활용할 수 있다. 현재 시각을 임시 파일의 이름에 넣으면 된다. 

현재 시각을 "연월일_시분초" 형식으로, 예를 들어 2012년 11월 29일 17시 45분 23초를 20121129_174523 이런 식으로 얻어서 파일명에 사용하자. 

date "+%Y%m%d_%H%M%S"

 

아래의 예는 현재 시각을 time_stamp라는 변수에 할당하여 임시 파일명을 my_tmp_file.$time_stamp.tmp로 정하고 여기에 "this is my temp file" 문자열을 저장한 경우이다.

 

time_stamp=`date "+%Y%m%d_%H%M%S"`

tmp_file_name="my_tmp_file.$time_stamp.tmp"

echo "this is my temp file" > "$tmp_file_name"

 

시각이 2012년 11월 29일 17시 45분 23초라면 임시 파일은 my_tmp_file.20121129_174523.tmp가 될 것이다.

 

만약 이런 script를 거의 동시에 여러 개를 실행해야 하는 경우라면, 임시 파일 이름이 겹치지 않기 위해 초 단위보다 더 세밀하게 시각을 얻어야겠다. 이럴 때는 나노초(nanosecond)를 포함시키면 된다. time_stamp 변수의 값이 10억분의 1초 단위로 정해지니까 겹칠 일이 없을 것이다. 아래와 같이 하면 된다.

 

time_stamp=`date "+ %Y%m%d_%H%M%S_%N"`

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 20:21

 

반달가면 이글루에서 백업 - bahndal.egloos.com/356262

 

리눅스에서 date 명령에 추가 조건을 주면 오늘 날짜 말고도 갖가지 날짜를 편리하게 구할 수 있구나!

어제
date -d "yesterday"

내일
date -d "tomorrow"

3일후
date -d "+3 days"

4일전
date -d "-4 days"

지난 금요일
date -d "last friday"

다음주 월요일
date -d "next monday"

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 15:28

 

반달가면 이글루에서 백업 - bahndal.egloos.com/332093

 

파일을 지우려면 우선 해당 파일명을 찾아야 한다. ls -l 명령으로 timestamp가 표시되도록 한 후 awk로 파일명을 골라내자.

예를 들어 5월 24일이 찍힌 파일을 찾으려면 이렇게 할 수 있다.

ls -l | grep "^\-r" | grep "May 24" | awk '{print $9}'

퍼미션 표시에서 (디렉토리나 링크가 아닌) 파일은 -rwxr--r-- 이런 식으로 나올 테니 "-r"로 시작하는 항목만 grep으로 고른다.('-'가 grep에서 연산자로 해석되지 않도록 '\-' 이런식으로 쓰자)

거기서 원하는 timestamp가 있는 항목을 골라낸다.

거기서 파일명이 표시되는 위치인 9번째 항목(field)을 awk 명령으로 골라낸다.

자, 이제 지워야겠으니 위의 명령을 역따옴표(`)로 묶어서 rm 명령에 넘기자.

rm `ls -l | grep "^\-r" | grep "May 24" | awk '{print $9}'`

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 15:24

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/141751

 

초보자를 위한 리눅스 shell 명령 소개

An Introduction to the Linux Command Shell For Beginners

 

ShellIntro.pdf
0.12MB

 

13쪽 분량의 간단한 명령어 소개 자료

 

먼저 올렸던 "24시간에 배우는 셸 프로그래밍(https://freewin.tistory.com/186)"과 함께 활용.

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 10. 15. 15:18

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/101289

 

teach yourself shell programming in 24 hours

24시간만에 배우는 셸 프로그래밍

 

Shell_Programming_in_24_Hours.zip
1.64MB

 

영문 자료인데 아무리 봐도 24시간에 배우긴 무리인 것 같긴 하다 -_-;

 

기본적인 내용을 찾아보기 위한 간단한 사전 정도로 활용 가능.

 

Posted by 반달가면

댓글을 달아 주세요