Category: Linux

  • 쉘 스크립트

    그 동안 리눅스에서 반복 작업을 수행할 경우에는 컴퓨터를 2개 사용하더라도 R에서 해당 과정을 수행할 수 있는 스크립트를 작성하여 실행하였다. 이제는 그런 방법보다는 쉘 스크립트를 이용하는 것이 좋을 것 같아서 이번 기회에 배워 보기로 했다.

    #! /bin/bash
    file_list=`ls ~/work/*.svs`
    for file in $file_list; do
    file=`basename $file .svs`
    ~/bftools/bfconvert ${file}.svs converted/${file}_converted_%x_%y.tif
    done

    첫 줄에는 #! /bin/bash.

    두 번째 줄부터 내용이다. 변수 사용에 있어 따옴표 종류가 중요하다. 작은 따옴표는 내부에 묶인 것이 글자 그대로 인식해야 할 때 사용한다. 큰 따옴표는 변수를 사용해야 할 때에 이용하면 된다. 벡틱이라고 불리는 1왼쪽에 있는 기호는 터미널에서 명령어를 실행하고 결과를 받아올 때 이용한다. 그리고 확실하지 않은데 변수 받을 때 띄어쓰기 않으며, 변수명에 .을 넣지는 않는다. 따라서 2번째 줄의 등호 오른쪽은 벡틱을 이용했다.

    스크립트를 사용하는 주된 이유는 반복 실행과 관련된 것이다. for [ ] in { }은 R과 문법 자체는 동일하다. 따라서 어렵지 않다. {   } 쪽에 변수 를 받아서 사용할 것이기 때문에 $를 붙여준다. 그리고 실행할 때에는 do를 붙여주면 된다. 아랫줄에 넣어도 되고, 새미콜론으로 오른쪽에 넣어줄 수도 있다.

    4번째 줄에서 basename은 파일 경로에서 파일 이름만 이용할 때 사용하는 것이다. 나는 확장자를 제외한 파일 이름이 필요하기 때문에 추가 옵션을 이용한다. 한 칸 띄우고 .svs 를 붙이면 해당 단어는 빼고 결과를 출력한 다. 상세 사용은 basename –help를 참고하면 된다.

    5번째 줄에서 변수를 이용하여 명령어를 실행할 경우 ${변수} 요런 식으로 이용하는 것 같다.

    마지막에 6번째 줄에 done을 입력한다.

    들여쓰기가 있는데, 보기 편하라고 한 것이지 실행에 영향을 주는 것은 아니다.

  • md5sum

    MD5는 해시 충돌이 쉽기 때문에 자료를 암호화하여 보관하기에는 더 이상 안전하지 않다. 파일의 무결성을 확인하는 수준이라면 여전히 유효한 수단이다. Linux 의 경우에는 /usr/bin 폴더에 md5sum 이라는 명령어로 기본 설치가 되어 있는 것 같다. 사용은 다음과 같다.

    md5sum 파일이름
  • scp 파일 전송

    업무 시간에는 항상 켜져 있는 라즈베리파이. 평소에 파이가 하는 일은 현재 시간 보여주기와 D-day 알려주기. 여기에 R로 작업한 파일을 백업하기로 했다.

    분석에 사용하는 리눅스 PC가 항상 백업 시간에 맞추어 켜져 있지도 않고, 여러 군데에 흩어져 있어 모으는 것도 일이다. R에서 커맨드로 쉽게 보낼 수 있도록 한 줄로 작성이 가능해야 한다. 비밀번호 문제도 해결해야 한다. FTP를 이용한 방법은 비밀번호 단계를 지정해야 하는 문제가 있어서 패스. scp 명령어를 이용하기로 하였다. 이를 위해서는 ssh 에서 개인키/공개키를 생성하는 과정이 필요하다.

    파일 보내는 컴퓨터에서는 다음과 같이 작업해 준다.

    ssh-keygen -t rsa

    이렇게 키 생성.

    통상적으로 ~/.ssh 폴더에 파일이 저장된다. 이 중 id_rsa.pub 파일을 받고자 하는 컴퓨터로 전송해준다.

    scp ~/.ssh/id_rsa.pub pi@pi.work:/home/pi/

    받는 컴퓨터에서는 이 공개키를 등록한다.

    cat id_rsa.pub >> /home/pi/.ssh/authorized_keys

    이제 원래 작업 컴퓨터에서 다음과 같은 방법으로 파일을 전송한다.

    scp -i ~/.ssh/id_rsa 파일이름 pi@pi.work:/home/pi/downloads
  • xargs

    하위 폴더의 특정 파일에서 특정 작업을 해야하는 방법으로 xargs를 이용하는 방법이 있다. 옵션으로 -I과 {} 혹은 FILENAME 등의 함수 같은 것을 설정해주면 뒤에 따라오는 명령어의 원하는 위치에 입력해 줄 수 있다.

    find . -iname "*.*" -type f | xargs -I{} mv {} ~/R/CD8_CD39/work2