하면 된다!!!

File Transfer - scp, rsync

프로그래밍/기타

 

서버 작업을 하다보면 서버와 서버 사이에 파일 전송 이슈가 있는 경우가 있다.

개인적으로 주로 SFTP나 FTP를 이용해서 파일을 전송했었는데... 요즘은 rsync 를 이용해서 파일 전송을 주로 하고 있습니다.

그중 많이 쓰이는 scp, rsync 에 대해서... 간단히 커맨드 정리 해둔다.

 

SCP (Secure Copy) 

ssh를 통해서 파일을 전송하는 도구로 서버에서 서버로 쌍방향 전송이 가능하다.

 

다른 장비로 파일 복사하기
scp -rp sourcedirectory user@dest:/path
-r means recursive
-p preserves modification times, access times, and modes from the original file.
scp *.pdf sean@123.12.1.123:/home/sean/download/
>> 모든 PDF 파일을 123.12.1.123 서버의 /home/sean/download 폴더로 복사
scp -rp ~/files sean@123.12.1.123:/home/sean/download/
>> files 폴더 이하에 있는 모든 파일을 123.12.1.123 서버의 /home/sean/download 폴더로 복사

 

다른 장비에서 파일 복사해오기
scp -rp user@dest:/path sourcedirectory
scp sean@123.12.1.123:/home/sean/download/*.pdf ./download
>> 123.12.1.123 서버의 /home/sean/download 폴더의 모든 PDF 파일을 ./download 폴더로 복사
scp -rp sean@123.12.1.123:/home/sean/download/ ~/files 
>> 123.12.1.123 서버의 /home/sean/download 폴더 하위의 모든 파일을 ~/files 폴더로 복사

참고로 파일명에 공백 등이 들어간 경우 " " 로 둘러싸주면 된다. ex) "abc file.txt" 

 

 

rsync

서버간에 파일을 동기화하는 도구이다. 이 또한 쌍방향 전송이 가능하다.

필자는 AWS에서 서버 관리를 주로 하고 있는데 인증 파일(.pem)을 이용해서 서버에 파일을 싱크할때 자주 사용하고 있다.

파일 싱크하기 (일반)
rsync -a -e ssh user@source-server:/source/ /dest/
rsync -a -e ssh /source/ user@source-server:/dest/

-a : archive mode (include a lot of default common options, including preserving symlinks)
-z : compress
-v : verbose : show files
-P : show progess as files done/remaining files
-e ssh : do rsync in ssh protocol
--delete : delete files in the destination that are not anymore in the source
rsync -avz -e ssh pi@123.12.1.123:download/ files/
>> 123.12.1.123 서버의 download 폴더의 파일을 ./files 폴더로 복사
rsync -avz -e ssh files/ pi@123.12.1.123:download/
>> ~/files 의 파일들을 123.12.1.123 서버의 /home/sean/download 폴더로 복사
인증서 파일 (.pem) 파일을 이용해서 싱크하기
sudo rsync -avzP -e "ssh -i /root/.ssh/my_certificate.pem" /source/ user@source-server:/dest/
sudo rsync -avzP -e "ssh -i /root/.ssh/my_certificate.pem" user@source-server:/source/ /dest/

 

root 유저로 ssh 접근 제어 해야할 때

프로그래밍/기타

ssh를 이용해서 외부 접근을 하는 경우에 root 유저로 붙을 수 있게 되면 아무래도 보안상 위험하겠지요.

원격으로 해킹 시도가 상당히 발생할 수 있습니다.


이에 따라서 root 유저는 통상적으로 ssh 접근을 못하도록 하고, 일반 유저로 접근해서 su 또는 sudo를 이용해서 접근하도록 제어합니다.


$ sudo vi /etc/ssh/sshd_config

PermitRootLogin yes    << yes : 접근, no : 접근 안됨


$ sudo systemctl restart sshd  << sshd 서비스 재기동 (centos의 경우)


접속을 시도해보시면... 로그인이 안되도록 변경됩니다.



CentOS - SVN 설치시 에러

프로그래밍/기타

CentOS에 svnserve를 설치하다가...


이 사이트 참고 했음 : http://b1ix.net/290


설명이 매우 잘 되어있어서 따라하면 땡...


다만 중간 부분에 나와있는 이 부분!!!


[root@localhost checkout1]# svn checkout svn://localhost/svn_repos svn: E000013: Unable to connect to a repository at URL 'svn://localhost/svn_repos' svn: E000013: file '/home/svn/svn_repos/format' 를 열 수 없습니다: 허가 거부


이에 대한 해결책이 필요했다.

위의 에러는 selinux가 보안상 막고 있어서 발생하는 것이 맞다.


이를 해결 하기 위해서는... repository 타깃이 되는 폴더명을 뒤에 써준다.


$ chcon -R -t svnserve_content_t /home/svn/svn_repos


이렇게 해주면 된다.

selinux를 그냥 disabled 시켜 버리면 보안에 구멍이~!!!


Linux 프로세스 관리 쉘

프로그래밍/기타

###################################


1. 특정 프로세스를 찾아서 죽이기


#!/bin/bash

ps -ef | grep -v grep | grep 프로세스명 | awk '{print $2}' | xargs --no-run-if-empty kill -9 $1



###################################


2. 특정 프로세스가 살아있는지 체크해서 죽어있으면 살리는 쉘


$ vi /var/test/run.sh


#!/bin/bash

PROCESS_CNT=`ps -ef | grep 프로세스명 | grep -v grep | awk '{print $2}' | wc -l`

if [ "$PROCESS_CNT" == 0 ];

then

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Dead!!"

    실행시킬_프로세스명

else

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Alive!!"

    exit 0

fi


위와 같은 쉘을 하나 만들어두고 crontab 에 1분에 한번씩 돌게 해주면 1분에 1회씩 프로세스가 살아있는지 체크하고 죽어있으면 실행 시키도록 할 수 있다.


$ crontab -e

* * * * * /var/test/run.sh >> /var/test/proc_mon.log


$ tail -f /var/test/proc_mon.log

1분에 1회씩 로그가 쌓이는 것을 확인할 수 있습니다.



SSH 접속 세션 시간 조정

프로그래밍/기타

SSH 접속이 자주 끊겨서 고생하는 경우들이 있는데... 그에 대한 해결책을 간단히 노트해둔다.

  1. SSH 클라이언트 접속 시간 조정
    • sudo vi /etc/ssh/ssh_config
    • # otehr configs 부분에 아래 내용을 주석 해제하고 숫자값을 정해준다.
      ServerAliveInterval 100

  2.  SSHD 서버에서의 접속 시간 조정
    • sudo vi /etc/ssh/sshd_config
    • 아래와 같이 주석 해제하고 값을 지정해주시면 됩니다.
      ClientAliveInterval 600
      TCPKeepAlive yes
      ClientAliveCountMax 10
    • SSHD 서버 재기동이 필요합니다.
      $ sudo service ssh restart


NginX 최적화를 위한 설정 외부 링크 공유

프로그래밍/기타

How to Configure nginx for Optimized Performance


https://www.linode.com/docs/web-servers/nginx/configure-nginx-for-optimized-performance


참고하세요~

NGINX - Module ngx_stream_geoip_module

프로그래밍/기타

NGinX 서버에 GeoIP 를 이용해서... 즉 사용자의 아이피를 체크해서 해당 아이피에 지역을 파악하고 해당 지역의 언어나 내용으로 서비스를 구성할 수 있도록 할 수 있는 모듈이 탑재되었군요.

1.11.3 (2016년 7월 26일 출시) 버전부터 지원한다고 합니다.


내용을 보면 MaxMind 데이터베이스를 선컴파일 해서 사용한다고 되어있고, 디폴트로 들어가지 않고 파라메터 설정에서 --with-stream_geoip_module 을 enabled 시켜야 한다고 합니다.


http://nginx.org/en/docs/stream/ngx_stream_geoip_module.html




윈도우 파일 소유권 / 사용 권한 관리

프로그래밍/기타

얼떨결에 PC에 윈도우 10을 설치하고 나서...

맥북에서 카피한 파일들이 파일 권한 등이 꼬이는 경우들을 자주 겪고 있어서 알아보았습니다.


우선 윈도우상에서 간단하게 파일의 소유권과 사용권에 대한 관리를 할 방법이 없는지 검색을 하다가 다음과 같은 방법을 발견하여 공유합니다.


1. 윈도우의 명령 프롬프트 창 열기 - 관리자 권한으로 여셔야 합니다.
    명령 프롬프트 메뉴에서 우클릭 하셔야 우측에 메뉴가 뜹니다.




2. takeown 명령어를 이용하여 파일의 소유권 가져오기

명령 프롬프트에서 작업을 원하는 폴더로 이동하시구요... 이동하지 않고 풀 경로를 입력하셔도 무방합니다.

>> takeown /F "파일명 또는 적용할 경로" /R /D Y

/R : 리커시브 입니다. 해당 경로 하위의 모든 파일 이나 폴더에 함께 적용시켜줍니다.

/D Y : 적용시 적용할꺼냐고 묻는 프롬프트가 뜨게 되는데 이걸 자동으로 Y로 대답해줘서 따로 Y 를 누르지 않아도 일괄 반영해줍니다.


3. icacls 명령어를 이용하여 파일의 사용권한 가져오기

명령 프롬프트에서

>> icacls "파일명 또는 적용할 경로" /GRANT 유저명:F /T /Q

/GRANT : 권한

유저명 : 윈도우 유저명으로... Everyone 으로 하면 누구나로 지정됨

:F : 모든 권한

/T : 리커시브 입니다. 해당 경로 하위의 모든 파일 이나 폴더에 함께 적용시켜줍니다.

/Q : 성공 메시지를 화면에 표시하지 않도록 지정합니다.


이렇게 하면 끝~~~ 입니다.


파일이 권한이 없다는 둥하면서 나오는 메시지는 안뇽~


더 자세한 옵션을 알고 싶으시면... /? 옵션을 이용하시면 모든 옵션에 대해서 설명이 나옵니다.


>> takeown /?

>> icacls /?




[External Link] 25 Great Resources For App Developers

프로그래밍/기타

앱 개발자들을 위한 25가지 좋은 리소스들이라는... 일부는 동의~


25 Great Resources For App Developers

원문 : http://www.business2community.com/mobile-apps/25-great-resources-for-app-developers-01267620


Development & Prototyping

CodeRunner 

Parse 

UsabilityHub 

Corona Labs 

Fluid UI 

mParticle 

Iubenda 

MacRumors Forums 

XDA Forums 


Pre-Launch

Stripe 

Envato 

Product Hunt 

PressFriendly 

25 Creative Ways to Promote Your App For Free 

11 Pre and Post Launch Mobile App Marketing Pitfalls to Avoid 


Post-Launch

Decisive 

Decisive API 

Mixpanel 

appFigures 

Kochava 

Apsalar 

Heatmaps.io 

Appbot 

App Developer Alliance 

The Mobileys 


이클립스에서 대소문자 변경하기 위한 방법

프로그래밍/기타

Eclipse Text Case change key


이클립스에서 대소문자 변경하기 위한 방법


Lower case: CTRL+SHIFT+Y (CMD+SHIFT+Y on Mac OS X)
Upper case: CTRL+SHIFT+X (CMD+SHIFT+X on Mac OS X)