리눅스를 사용하다 보면, tar 혹은 tar.gz로 압축을 하거나 압축을 풀어야 할 경우가 자주 생긴다.


이를 처리하기 위해 리눅스에서는 tar 라는 명령어를 사용하게 되는데,


tar 명령어도 여러가지 옵션이 있지만 각 옵션에 대해서 알아보기 보단, 자주 사용하는 명령어 패턴만 정리한다.



1. tar로 압축하기

> tar -cvf [파일명.tar] [폴더명]


ex) abc라는 폴더를 aaa.tar로 압축하고자 한다면

     > tar -cvf aaa.tar abc



2. tar 압축 풀기

> tar -xvf [파일명.tar]


ex) aaa.tar라는 tar파일 압축을 풀고자 한다면

     > tar -xvf aaa.tar



3. tar.gz로 압축하기

> tar -zcvf [파일명.tar.gz] [폴더명]


ex) abc라는 폴더를 aaa.tar.gz로 압축하고자 한다면

     > tar -zcvf aaa.tar.gz abc



4. tar.gz 압축 풀기

> tar -zxvf [파일명.tar.gz]


ex) aaa.tar.gz라는 tar.gz파일 압축을 풀고자 한다면

     > tar -zxvf aaa.tar.gz




참고로, 위의 옵션들을 포함한 그나마 자주 사용되는 tar 명령어의 옵션들은 아래와 같다.



 옵션

 설명

 -c

 파일을 tar로 묶음

 -p

 파일 권한을 저장

 -v

 묶거나 파일을 풀 때 과정을 화면으로 출력

 -f

 파일 이름을 지정

 -C

 경로를 지정

 -x

 tar 압축을 풂

 -z

 gzip으로 압축하거나 해제함

 

 

출처 : http://nota.tistory.com/53

500 OOPS: priv_sock_get_cmd or 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

500 OOPS: priv_sock_get_cmd

macbook:~ PJunior$ <strong>ftp username@example.com</strong>
Connected to <strong>example.com</strong>.
<strong>500 OOPS: priv_sock_get_cmd</strong>
ftp: Can't connect or login to host `example.com'

Open /etc/vsftpd.conf and at the end  add

seccomp_sandbox=NO

and restart the Server:

sudo service vsftpd restart

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

macbook:~ PJunior$ <strong>ftp username@example.com</strong>
Connected to <strong>example.com</strong>.
<strong>500 OOPS: vsftpd: refusing to run with writable root inside chroot()</strong>
ftp: Can't connect or login to host `example.com'

Open /etc/vsftpd.conf and at the end  add

 allow_writeable_chroot=YES

and restart the Server:

sudo service vsftpd restart

출처 : http://my.dude.kr/wp/?p=240

SSH 접속 후 로그인 정보까지 보낸 이후 Shell이 뜨는 속도가 느린 경우가 있습니다.

일반적으로 SSH에 접속을 시도할 때 SSH 데몬에서 DNS를 통해 접속하는 호스트를 확인하는 절차를 거치기 때문입니다.

이 과정을 생략하면 SSH 접속 속도를 향상시킬 수 있습니다.

텍스트 에디터로 /etc/ssh/sshd_config 파일을 열고, 다음 옵션을 수정해 줍니다.

 
/etc/ssh/sshd_config
UseDNS no

저장한 다음 SSH 데몬을 재시작해줍니다.

 
sudo service ssh restart

이렇게 하면 기본적으로 DNS 체크를 생략하게 됩니다.

특정 IP에서 접속하는 경우에만 DNS 검사를 생략하려면 /etc/hosts 파일에 접속하는 IP를 기술해주면 됩니다.

 

 

출처 : http://tuwlab.com/ece/9399

가끔 가다가 잘 접속되던 서버가 아래와 같은 메세지를 띄우는 경우가 있다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
-생략-
Please contact your system administrator.
Add correct host key in /home/warren/.ssh/known_hosts to get rid of this message.
Offending key in /home/warren/.ssh/known_hosts:1
RSA host key for -생략(ip)- has changed and you have requested strict checking.
Host key verification failed.

참... 당황 스럽다... 
욱긴건 다른 컴퓨터에서는 될때다...이러면 더 아리까리 해진다.

일단 해결법은 이렇다.

ssh-keygen -R [ IP or DomainName]


ex) ssh-keygen -R 110.110.110.110


그후에 다시 접속하면 이번엔 메시지가 바뀐다.
Are you sure you want to continue connecting (yes/no)?
대략 이런 메시지를 띄운다. 그럼 그냥 yes 하면 끝이다.


위에 상황을 예를 들면...
A host 가 있고 B server가 있다. 
A는 항상 B 서버에 ssh접속하고 있었는데 B서버에 ssh나 os를 새로 설치 하는 작업을 했다.
그런후에 A는 똑같이 B에 접속을 한다. 이때 B에 IP는 똑같다면...
위와 같은 메시지가 뜬다!!

이렇게 되는 이유는 단순하다.
ssh 최초접속시에 A와 B에서 서로간에 인증 과정을 하는데.. B는 새로 설치되었으니 B는 상관없지만..
A는 예전B에  IP로 인증이 되어있는 상태에서 B로 로그인을 하면
로그인시에 예전에 IP로 인증했던 정보를 가지고 B로 로그인을 하려고 하지만 B는 인증정보가 없기때문에
위와 같은 현상이 나타난다.


만약 위에 명령어가 먹히지 않는다... 아직도 똑같다...
그러면 find / -name known_hosts 을 통해 해당파일을 찾아 지우면 된다.
보통 /root/.ssh/known_hosts 에 있다.
나니면 /home/username/.ssh/known_hosts 

자신의 root면 root에 있는 것을 지워야 되고 일반 유저 이면 /home/username에 있는 걸 지워야겠죠?


# tar zxvf /etc/file.tar.gz -C /etc

-C 옵션을 사용해서 압축풀 디렉토리를 지정할 수 있습니다.

-C, --directory=DIR
change to directory DIR

-bash: ./test.sh: /bin/bash^M: bad interpreter: 그런 파일이나 디렉토리가 없음


실제로 리눅스에서 웹호스팅을 사용하시다 보면,  윈도우에서 에디터플러스와 같은 편집기를
사용해서 파일을 업로드 한뒤, 리눅스로 SSH 나 Telnet 으로 접근을 해서 vi 같은 편집기로 열어
보시면 라인의 마지막에 항상 ^M 가 붙어 나오는 현상을 보실수 있을겁니다. 이는 리눅스와 윈도우
의 파일을 저장하는 형식이 달라서 생기는 현상입니다.

물론, 실제로 웹서비스를 하는데 큰 영향은 가지는 않는경우가 대부분입니다.

하지만, 예를 들어, 윈도우에서 작성을 한 Perl, Bash, Python 등의 스크립트인 경우 쉘에서 직접
실행할 경우도 존재합니다. 이때에는 파일형식이 윈도우이기때문에 실행이 되지 않습니다.

아래의 예처럼 ^M 문자 때문에 bad interpreter 라는 오류가 나오게 됩니다.
-bash: ./test.sh: /bin/bash^M: bad interpreter: 그런 파일이나 디렉토리가 없음

이때에 이 문제를 해결하실수 있는 몇가지 방법을 제시하도록 하겠습니다.


ㅁ 텍스트문에서 ^M자 없애기    

  1. vi 에서 ( vim 아닙니다. )
     명령어 모드
     :%s/^M//g

     %s는 치환명령 입니다
     %s///mode

     위에서 mode에 g를 썼는데, 이것은 global의 약자로 파일 전체에 모두 적용하는 mode 입니다.

     :%s/^M 만 해도 됩니다.
     ^M 은 Ctrl+V+M or Ctrl+V+Enter

  2. vim 에서
     vim에서는 dos mode의 화일을 읽어도 화면에 ^M을 표시하지 않습니다.
     대신 밑에 [dos] 라고 나타납니다.
     다음과 같이 해서 unix mode로.. 즉 ^M을 빼는것입니다.

     :set fileformat=unix

     반대로 unix mode에서 dos mode로 바꾸고 싶다면

     :set fileformat=dos


  3. cat과 tr 사용
     cat은 파일의 내용을 stdout 으로 출력하고, tr은 특정 캐릭터를 바꾸거나 없애는것입니다.
    
     예를 들어 file1.txt 가 dos mode 라면

     # cat file1.txt | tr -d ^M > file2.txt

     이렇게 하면 ^M만 제거된 새로운 file2.txt가 생깁니다.
     이때 주의할 것은 절대로 위의 두 화일명을 같게 하면 안된다는 것입니다.

  4. dos2unix
      dos2unix 명령어는 위의 1,2,3 과 동일한 역할을 하지만, 단순한 명령도구 입니다.

      아래는 윈도우 파일 형식을 유닉스(리눅스) 형식으로 변환하는 명령입니다.
      [root@www ~]# dos2unix file1.txt
      dos2unix: converting file file1.txt to UNIX format ...

      반대로 아래와 같이 유닉스(리눅스) 형식의 파일을 윈도우 형식으로 변환 또한 가능합니다.
      [root@www ~]# unix2dos file1.txt
      unix2dos: converting file file1.txt to DOS format ...

 

출처:http://mydoc.digimoon.net/board/skin/ggambo7002_board/print.php?id=board&no=228

리눅스 시스템에서 주기적으로 파일과 데이터베이스 백업을 하는 방법에 대하여 설명하겠다.

 

1. 정책 세우기

언제마다 백업을 할 것인가? 백업 방식은 어떤것인가? 백업 유지 기간은? 백업 저장소는 어떤 것인가?

 

1) 백업 주기 정책

대부분의 서버에서 접속자가 가장 낮을때는 4:00 AM ~ 4:30 AM 입니다.

그래서 많은 사람들이 새벽 4:00 에 백업이 이루어지게 설정합니다.

 

하루에 2번 백업하고 싶으면 오전/오후 4:00 에 백업을 하도록 합시다.

 

2) 백업 방식 정책

백업이라는 것이 데이터를 복사해 두는 것이기 때문에 하드디스크의 여유공간이 많아야 합니다.

# df -h

명령어를 통해서 저장할 디스크의 여유공간이 충분한지 파악해 봅시다.

 

또 백업에는 CPU의 연산이 이루어집니다. (파일을 읽어서 새로운 곳에 기록)

압축 백업 : (tar -czpf 백업) 일반적으로 많이 쓰이는 백업입니다. 이 작업에는 CPU 가 많이 사용됩니다.

10GB 미만 압축이면 상관없는데 그 이상의 대용량의 압축 백업은 주의가 필요합니다. 백업 시켜놓고 CPU 사용량을 확인하세요.

복사 백업 : (cp -R 백업) 압축하지 않고 복사만 합니다. 사용 용량을 많이 차지하지만 (압축하지 않는다는 뜻) 백업할 때 CPU 사용량이 크게 증가하지는 않습니다.

증분 백업 : (rsync 백업) 변동사항만 비교하여 백업합니다. 비교를 위해서 파일은 항상 압축되지 않은 상태로 보관됩니다.

 

3) 백업 유지기간 정책

– 몇일치를 보관할 것인가? 또는 몇개의 백업 파일을 보관할 것인가?

 

4) 백업 저장소 정책

– 백업 파티션을 나누어서 저장?

– 디스크를 새로 장착하여 저장?

– FTP 등을 사용해서 원격 저장?

http://blog.lael.be/post/1387 글을 참조하여 별도의 백업서버의 폴더를 연결(mount)하여 백업을 해보도록 하자.

 


 

2. 설정된 정책을 바탕으로 백업 세팅하기

백업 정책 예시 :

– 하루 2회 오전/오후 4시에 백업.

– 파일과 디비(MYSQL or MariaDB) 백업.

– 백업 저장소는 동일 디스크의 /backup 폴더.

– 백업 파일은 10일치를 보관한다.

 

작업은 root 권한에서 실행한다.

# su -l root    나   # sudo su    등의 명령어로 root 권한으로 상승하여라.

 

1) 백업이 저장될 폴더 만들기.
# mkdir /backup

 

2) 퍼미션 조정
# chmod 700 /backup

 

3) 백업 스크립트 작성
# cd /root
# vi backup.sh

 

tar 명령어는 파일 압축 백업을 실시합니다.

mysqldump 명령어는 데이터베이스 백업을 실시합니다.

find 관련 명령어는 10일이 지난 파일을 삭제합니다.

 

— tar 와 mysqldump 는 여러 줄 쓰셔도 됩니다.

— 설정을 바꿀 수 있는 부분은 파란색빨간색으로 표시하였습니다.

 

#!/bin/bash
tar -czpf /backup/myuser.`date +%Y%m%d%H%M%S`.tgz /home/myuser/www 1>/dev/null 2>/dev/null
mysqldump --extended-insert=FALSE -uroot -pmypassword mydbname > /backup/mydbname.`date +%Y%m%d%H%M%S`.sql
find /backup/ -type f -mtime +10 | sort | xargs rm -f

 

아래 내용을 더블클릭해서 복사한 후 사용하여라.

1
2
3
4
#!/bin/bash
tar -czpf /backup/jingjing.`date +%Y%m%d%H%M%S`.tgz /home/minecraft3s/jingjing 1>/dev/null 2>/dev/null
mysqldump --extended-insert=FALSE -uroot -pjingjing.kr sir_doc > /backup/sir_doc.`date +%Y%m%d%H%M%S`.sql
find /backup/ -type f -mtime +10 | sort | xargs rm -f

스크린샷 2015-06-14 오후 10.38.04

4) 백업 스크립트 실행권한 설정
# chmod 700 backup.sh

 

5) 연습삼아 실행
# ./backup.sh

 

6) 확인

# cd /backup

# ll -h

스크린샷 2015-06-14 오후 10.11.03

이 때 total 에 나온 용량과 df -h 명령어에 나온 여유공간을 비교하여 백업 정책이 적합한지 판단한다. (디스크 여유공간 비교)

backup.sh 의 find 관련 명령어에서 10 이라는 숫자를 변경하면 된다. (디스크 용량이 부족할 경우 5일치만 저장하도록 바꾸셔야겠죠?)

 

7) 주기적인 실행

cron (예약관리자 실행 프로그램)에 매일 오전/오후 4시 0분에 실행되도록 설정한다.

# crontab -e
0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null
0 16 * * * /root/backup.sh 1>/dev/null 2>/dev/null

 

 

스크린샷 2015-06-15 오후 2.17.41

 

 

8) 확인

잠자고 일어나서 /backup 폴더에 백업이 잘 되었나 확인해 본다.

 

  1. bodanaeun.egloos.com 2015.10.15 12:08

    tar 백업은 다른 파티션에 풀어서 fstab uuid만 수정하면 시스템 복구가 잘 되는데
    cp -a 로 시스템 복사를 하면 복구 파티션이 정상 실행 안 되는 이유가 뭘까요?

$ ls -li        //파일의 inode 번호를 확인 하는 명령어다

 1976 -rwxrwxr--    1 guda  guda          738  4월 29일 2005  洹??띻꼍?뺤껌援ъ옄猷?TXT
   53 -rw-rw-r--    1 guda  guda            0  1월 25일 2010  20100122

$ find ./ -inum 1976 -ls   //삭제하고자 하는 파일이 맞는지 확인해본다
 1976    1 -rwxrwxr--  1 guda   guda         738 Apr 29  2005 洹??띻꼍?뺤껌援ъ옄猷?TXT

$ find ./ -inum 1976 -ls -exec rm {} \;     //해당 파일을 삭제하는 명령어
 1976    1 -rwxrwxr--  1 guda   guda         738 Apr 29  2005 洹??띻꼍?뺤껌援ъ옄猷?TXT

$ ls   //정상적으로 삭제 되었는지 확인해보자..

이런식으로 파일명이 깨졌다든지 삭제가 안되는 파일을 inode 번호를 이용하여 삭제하면 된다. 

+ Recent posts