[기본] 리눅스의 퍼미션(권한)을 조정하기 (chmod, chown)

리눅스 2019. 1. 30. 15:04

출처 : https://conory.com/blog/19194

리눅스는 여러사용자가 들어와 사용하는 멀티유저 시스템이지요.. 왜냐면 리눅스는 서버용으로 만들어진 운영체제이기때문입니다..

그런데 한가지 문제가 발생합니다.

여러 사용자가 들어오면 서버에 올려진 비밀자료 열람과 그것을 변조,수정,삭제를 할 우려가 높아집니다..

그리고 그 비밀자료는 일부 사용자에게만 공개하는 것이였습니다. 하지만 모든사용자들이 다 볼 수 있겠죠.. 왜냐면 여러사람들이 사용하는 컴퓨터이기때문이지요..


이 문제가 극복하기위해 리눅스에 한가지 기능을 추가합니다.

바로 퍼미션(권한)이라는 기능을 추가했습니다.. 퍼미션은 말그대로 시스템에서 유지되는 권한기능입니다..

참고로 윈도우도 퍼미션기능이 있긴하지만, 여러사용자들이 들어오는 서버용이 아니기에 리눅스처럼 활성화되어있지않습니다.. 


이 기능으로 사용자들은 자신한테 읽기퍼미션이 부여된 파일만 읽을 수 있고,쓰기퍼미션이 부여된 파일만 쓰기와 수정이 가능하고, 실행퍼미션이 부여된 파일만 실행이 가능하게 됩니다.

이로써 비밀자료는 퍼미션이 부여된 사용자들에게만 공개할 수 있게 되었습니다..


그리고 "이 파일은 누구꺼지?"라는 문제에서 소유자 개념도 생겨납니다. 

앞에서 리눅스는 여러사용자들이 공동으로 사용하는 운영체제라고 말했습니다..

그러면 "이 파일은 내가 만들었어.. 그래서 내꺼야.. , 아니! 니가 만들었지만, 내가 대부분 수정했어.. 그래서 내꺼야 "라는 분쟁이 발생합니다.. 왜냐면 혼자쓰는 게 아니라 여러사람들이 같이 사용하는 컴퓨터이잖아요.

그래서 리눅스에서 "이건 니꺼다"라고 정해줍니다.. 리눅스 曰 "이 파일은 니가 만들었으니, 니가 소유자, 즉 이 파일의 주인이야!!"



1) 파일정보 보기

일단, 퍼미션 조정하려면 파일에 부여된 퍼미션부터 봐야겠지요?


1.png 


먼저 "ls -al" 명령어는 다들 아시죠? 앞에서 배웠습니다. 현재위치에 있는 파일들을 자세히보여주는 명령입니다.

그리고 자세히 보면 맨 뒤부분은 파일이름이 표시된다는 건 아시겠나요?

그치만, 앞부분에 있는 "drwxr-xr ~~ 머시기" 이건 도대체 뭔지 모르겠네요..;;


차근차근 봅시다..

drwxr-xr-x  2  root  root  4096 Apr 22 16:59 conory

파일Type 퍼미션정보 링크수 소유자 소유그룹 용량 생성날짜 파일이름
  • 파일 Type : "d" -> 디렉토리 , "l" -> 링크파일 , "-" -> 일반파일 등등..
  • 퍼미션정보 : 해당 파일에 어떠한 퍼미션이 부여되어있는 지 표시!
  • 링크수 : 해당 파일이 링크된 수! 링크는 윈도우의 "바로가기"와 같습니다. "in [대상파일] [링크파일]" 명령으로 링크파일을 만듭니다.
  • 소유자 : 해당 파일의 소유자이름! (누구껀지?)
  • 소유그룹 : 해당 파일을 소유한 그룹이름! 특별한 변경이 없을 경우 소유자가 속한 그룹이 소유그룹으로 지정됩니다.
  • 용량 : 파일의 용량!
  • 생성날짜 : 파일이 생성된 날짜! 
  • 파일이름 : 파일이름이죠!

이제 퍼미션정보를 봐야겠지요.. 윗부분에서 보셔서 아시겠지만, 앞에서 두번째부터 아홉번째까지가 바로 퍼미션정보입니다.
rwxr-xr-x
"근데 이게 퍼미션 정보라고요??.. 와이리 못생겨노?"

일단은 알아두어야 할게 있는 데요.. 퍼미션 종류에는 3가지가 있습니다.. 그리고 퍼미션의 사용자 지정에도 3가지가 구요..

* 퍼미션 종류 , () 괄호에 있는 것이 해당 퍼미션 기호
  • 읽기 ( r ) : 파일의 읽기권한
  • 쓰기 ( w ) : 파일의 쓰기권한
  • 실행 ( x ) : 파일의 실행권한

* 퍼미션의 사용자지정
  • 소유자 : 소유자에 대한 퍼미션지정
  • 그룹 : 소유그룹에 대한 퍼미션지정
  • 공개 : 모든사용자들에 대한 퍼미션지정

그럼 퍼미션 정보를 볼까요?
rwxr-xr-x

"r  w  x가 왠지 낮익어요.." 하는 분 계신가요?? 
네.. 맞아요.. 위에서 봤던 퍼미션 기호이지요..

그런데 기호의 종류는 ( r  w  x )  3개인데.. 퍼미션정보에는 총9개가 표시되네요.. 뭔지?
일단 세자리씩 끊어봅시다.. ( rwx  r-x  r-x ) 이제 감이오나요?
바로!! "소유자 : rwx , 그룹 : r-x , 공개 : r-x"  이런 얘기지요.. ㅎㅎ (이때 '-' 기호는 그 퍼미션은 없다는 기호입니다.)
해석해보면 " 이 파일에 대해서 소유자는 읽기(r),쓰기(w),실행(x)을 허용하고, 
파일의 소유그룹에 속하고 있는 사용자들은 읽기(r),실행(x)만 허용하고,
이외에 나머지 모든 사용자들도 읽기(r),실행(x)만 허용한다. "


2) 퍼미션 변경하기
파일이 생성될때 기본적인 퍼미션이 부여됩니다.
하지만, 퍼미션을 변경하고 싶을 때가 있습니다. (가령 이 파일을 모두에게 공개한다거나 하는...)

퍼미션 변경에는 여러가지 방법이 있지만, 여기서는 가장 쉬운방법으로 배워보도록 합시다.
바로 "chmod" 명령을 사용하면 아주 손쉽게 퍼미션을 변경할 수 있습니다.

chmod [변경될 퍼미션값] [변경할 파일]

여기서 [퍼미션값]을 지정해 줘야하는 데요..
퍼미션값을 구하는 방법은 다음과 같습니다.

  • 각 퍼미션 기호를 숫자로 변환 합니다. ( r = 4 , w = 2 , x = 1 )
예) r  -  x 인 경우 4  0  1

  • 변환한 숫자를 합산합니다.
예) 4  0  1 인 경우  4+0+1 = 5

이런식으로 하나의 퍼미션을 숫자값으로 변환하면 됩니다..
예) rwxr-xr-x 이면 rwx  r-x  r-x 세자리씩 끊고, 4+2+1  | 4+0+1 | 4+0+1  숫자변환 뒤 합산하면 "755" 라는 퍼미션값이 나옵니다.

그래서 " chmod 755 conory.text " 명령을 실행하면 conory.text 파일이 755에 해당되는 퍼미션으로 변경됩니다.
그리고 디렉토리도 이 방법으로 퍼미션을 변경할 수 있습니다.

디렉토리의 경우 "-R" 옵션을 사용하면 하위 디렉토리의 모든 디렉토리및 파일의 퍼미션이 변경됩니다.
예) " chmod -R 777 conory " conory 디렉토리의 하위에 위치한 모든 파일및 디렉토리 퍼미션이 777로 변경됩니다.


3) 소유자 변경하기
파일의 소유자 양도를 해야 될 경우 소유자 변경을 할 수 있습니다.
아래 명령으로 손쉽게 변경할 수 있습니다.

chown [변경할 소유자] [변경할 파일]

이 명령으로 소유자뿐만 아니라 소유그룹도 변경할 수 있습니다.
[변경할 소유자]란에 ".그룹이름" 형식으로 입력하면 됩니다. " .conory "
예를 들어 conory.text의 소유자를 "conory"로, 소유그룹을 "conory2"로 동시에 변경할 경우 " chown conory.conory2 conory.text "


* 실습
conroy.text이란 파일을 만들어 퍼미션을 rwxrwxrwx(777)로 변경하고, 소유자및 소유그룹을 "conory"로 변경해봅시다.
단, conory라는 사용자계정이 생성되어 있어야겠지요..

2.png 


리눅스 로그 분석

리눅스 2019. 1. 25. 11:51

리눅스 콘솔의 정의는 아래와 같습니다.

출처 : http://www.logcenter.net/itcenter/?q=YToyOntzOjEyOiJrZXl3b3JkX3R5cGUiO3M6MzoiYWxsIjtzOjQ6InBhZ2UiO2k6Mzt9&bmode=view&idx=1236937&t=board

리눅스 콘솔은 리눅스 커널에 내부적으로 동작하는 시스템 콘솔입니다. 커널과 다른 프로세스들이 텍스트를 사용자에게 출력하고 사용자로부터 텍스트 입력을 받을 수 있는 방법을 제공합니다. 사용자는 일반적으로 컴퓨터 키보드로 텍스트를 입력하고 컴퓨터 모니터로 텍스트를 출력합니다. 또한 가상 콘솔을 지원하며, 이 콘솔은 논리적으로 분리되어있지만 동일한 물리적 키보드와 디스플레이어로 접근할 수 있습니다.


오늘 설명할 콘솔 로그는 위 정의와 같이 리눅스 커널에 내부적으로 동작하는 시스템 콘솔에 뿌려지는 메시지입니다.

즉, 커널에 관련된 내용을 나타내는 로그입니다.

시스템에 관련된 중요 내용들에 대한 로그를 관리자에게 알리고자 함이 목적이기에 파일에 저장하는 것이 아닌 장치명을 사용하여 콘솔로 로그를 뿌려줍니다.


콘솔로그는 아래의 경로에서 확인할 수 있습니다.

/dev/console



시스템 관리에 있어서 무엇보다 중요한 것이 로그파일분석과 관리입니다. 시스템에 이상징후가 발생하였을 때, 가장 먼저 살펴봐야할 파일이 로그파일이기 때문에 관리해야할 로그 파일의 수와 경로를 알고 있는 것이 중요합니다.


이 밖에 중요 커널로그는 다음과 같습니다.



① 부팅로그

시스템의 데몬들이 실행되거나 재시작되었을 때 기록되는 로그파일입니다.

부팅시의 에러나 조치사항을 확인할 때 활용이 가능하며, timestamp/호스트명/데몬명(PID)/메시지 내용이 기록됩니다.

리눅스가 부팅될 때 나타나는 메시지를 기록하고 있으므로 에러 발생시 아래 경로를 이용하여 해당 파일을 확인합니다.


/var/log/boot.log


부팅될 당시의 각종 메시지들을 저장하는 커널 부트 메시지 로그가 있습니다.

/var/log/dmesg


시스템이 부팅될 때 출력되었던 메시지 로그를 기록한 것으로 아래의 명령어를 이용하여 확인할 수 있습니다.

dmesg


보통 more, tail, less, grep과 같은 표준 텍스트 제어 도구를 이용하여 검토합니다.

또한, 부팅이 완료한 후에도 커널이 가끔 진단 메시지를 추가로 출력하는 경우도 있습니다. I/O장치에서 오류가 발생하거나 USB가 핫 프로그될 때와 같이 이후에도 이러한 메시지를 검토할 수 있으니 이 점 참고바랍니다.



② 시스템 로그

주로 접속시 인증에 관한 것과 메일에 관한 내용, 시스템에 관한 변경사항 등 시스템에 관한 전반적인 로그를 기록하는 파일입니다.

커널에서 보내주는 실시간 메시지의 로그를 관리합니다.

 timestamp/호스트명/데몬명(PID)/메시지 내용이 기록되며, 보안사고 발생시 가장 먼저 분석해야하는 파일입니다.

/etc/syslog.conf의 설정에 따라 보여지는 정보의 종류가 달라집니다.


/var/log/message

#dmesg 명령어로 확인할 수 있습니다.



③ 커널로그

- wtmp

접속했던 모든 사용자의 로그인과 로그아웃 정보를 가지고 있습니다. 정보를 누적해서 저장하기 때문에 정기적으로 백업 후 삭제가 필요합니다.

아래의 경로로 저장되며, 해킹 피해로 시스템 분석시 비중있게 분석해야하는 파일입니다.

/var/log/wtmp


바이너리 파일 형태이므로 다음의 명령어를 이용하여 해당 로그를 확인합니다.

명령어
설명
last [계정명]
해당 계정의 접속기록 출력
last -R
IP를 제외한 로그 정보 출력
last -a
로그 정보 출력시 IP 뒤로 배치해서 출력
last -d
외부에서 접속한 정보와 reboot 정보 출력



- utmp

시스템에 현재 로그인한 사용자들에 대한 현재 상태를 기록한 로그입니다.

사용자 접속시 먼저 이 파일에 해당 정보가 기록되며 로그아웃시 기록된 정보가 삭제됩니다.

사용자 이름, 터미널 장치 이름, 원격 로그인시 원격 호스트 이름, 로그인한 시간 등을 기록합니다.

아래의 경로로 저장되며, 해킹 피해로 시스템 분석시 비중있게 분석해야하는 파일입니다.

/var/log/utmp


바이너리 파일 형태이므로 다음의 명령어를 이용하여 해당 로그를 확인합니다.

# w


리눅스의 이벤트 로그인 콘솔 및 커널로그에 대해 알아보았습니다.

아래 링크를 통해 다양한 로그 분석을 확인하세요~

db 백업하기

리눅스 2019. 1. 23. 16:22

출처: http://www.happyjung.com/lecture/50?sca=MySQL&page=3&device=mobile


Linux 서버에서 mysqldump 받기 +++++++++++++++++++

mysql DB를 백업하시려면 우선, 텔넷으로 웹서버에 접속을 한 다음 아래와 같이 명령을 넣어주시면 됩니다.

명령어 : mysqldump -h DB서버주소 -u 계정 -p DB명 > 저장할 파일명
(부등호의 방향에 주의합니다.)
위와 같은 명령을 실행하면 Database 안에 있는 모든 자료가 입력한 "파일명"을 가진 파일로 저장됩니다.


1.1 데이타베이스 전체
$> mysqldump -u[사용자아이디] -p 데이터베이스명 > 저장될 파일명
예1) mysqldump -uhappy -p db_happy > db.sql
예2) mysqldump --default-character-set=utf8 --set-charset --extended-insert=FALSE -uhappy -p db_happy > db.sql

1.2 테이블 전체
$> mysqldump -u[사용자아이디] -p 데이터베이스명 테이블명 > 저장될 파일명
예) mysqldump -uhappy -p db_happy tbl_happy > db_table.sql

1.3 특정 DB의 특정 테이블만 덤프
mysqldump -u mysql_admin -p edu a -w'no=>7 and no=<10' > edu_a_cond.sql

1.4. 디비 스키마(Schema)만 백업받기 (DDL)
mysqldump -u mysql_admin -p -d edu > edu_db.sql

1.5 특정DB의 틎정 테이블 스키마만 백업받기(DDL)
mysqldump -u mysql_admin -p -d edu a> edu_a_table.sql

[환경옵션]은 백업시에 어떤환경으로 백업을 할것인가에 대한 옵션이다.
--default-character-set=utf8 # 지정된 캐릭터셋을 기본으로함
--set-charset # 기본지정된 캐릭터셋(default-character-set)을 SET NAMES default-character-set로 설정
--opt # 메모리에 로드하지 않고 바로 화일로 덤프
--create-options # create문 백업시에 테이블 설정을 포함함.
--compatible=DB # 백업sql이 특정 db에 호환되도록 함 예) mysql40, mysql41, oracle, mssql
--extended-insert=FALSE # insert 문을 한줄씩 만든다
--result-file=file # 지정된 file 로 바로 넣음.. "> /BackUp/Mysql/Backup.sql" 과 같은 의미
--triggers # 트리거 덤프
--no-create-db # DB 생성정보를 뺌
--no-create-info # 테이블 생성정보를 뺌
--no-data # 테이블의 데이터를 뺌


2. mysqldump를 이용한 Backup

가장 널리 이용하는 방법이고 가장 확실한 방법이다.
다만 DB 데이터가 큰 경우 Backup 시간이 많이 걸릴수 있기 때문에
보통 크론등을 이용하여 주기적으로 새벽시간을 이용하여 백업받는다.

사용방법은 다음과 같다.
/usr/local/mysql/bin/mysqldump -uroot -pPassword [백업옵션] [환경옵션] > /BackUp/Mysql/Backup.sql
/BackUp/Mysql/ <== 임의로 정한 백업화일 위치이다.

[백업옵션] 의 내용은 아래의 4가지 형태만 알아도 될듯하다.
옵션들에 주의 해주면 다양한 형태로 백업을 받을수 있다.
--all-databases # mysql DB 전체를 백업다는것을 의미한다.
--databases DB1 DB2 DB3 # mysql 에서 특정 DB만 백업받는 것을 의미한다.
DB1 # DB1 이라는 DB 만 백업받을때 사용한다.
DB1 table1 # DB1 이라는 DB의 table1 이라는 테이블만 백업받을때 사용한다.

[환경옵션]은 백업시에 어떤환경으로 백업을 할것인가에 대한 옵션이다.
--default-character-set=utf8 # 지정된 캐릭터셋을 기본으로함
--set-charset # 기본지정된 캐릭터셋(default-character-set)을 SET NAMES default-character-set로 설정
--opt # 메모리에 로드하지 않고 바로 화일로 덤프
--create-options # create문 백업시에 테이블 설정을 포함함.
--compatible=DB # 백업sql이 특정 db에 호환되도록 함 예) mysql40, mysql41, oracle, mssql
--extended-insert=FALSE # insert 문을 한줄씩 만든다
--result-file=file # 지정된 file 로 바로 넣음.. "> /BackUp/Mysql/Backup.sql" 과 같은 의미
--triggers # 트리거 덤프
--no-create-db # DB 생성정보를 뺌
--no-create-info # 테이블 생성정보를 뺌
--no-data # 테이블의 데이터를 뺌
------------------------------------------------------------------------------------------

2.1 MySQL에 등록된 모든 DB 백업 받기.
# mysqldump --all-databases > mysql_all_db.dump

2.2 MySQL에 등록된 moffice21 과 sms DB 백업 받기.
# mysqldump --databases moffice21 sms > mysql_moffice21_sms_db.dump

2.3 MySQL에 등록된 moffice21 DB 백업 받기.
# mysqldump moffice21 > mysql_moffice21_db.dump

2.4 MySQL에 등록된 moffice21 DB의 approval table 백업 받기.
# mysqldump moffice21 approval > mysql_moffice21_approval_table.dump

2.5 MySQL에 등록된 moffice21 DB의 스키마만 백업 받기.
# mysqldump -d moffice21 > mysql_moffice21_schema.dump

2.6 MySQL에 등록된 moffice21 DB의 데이터만 백업 받기.
# mysqldump -t moffice21 > mysql_moffice21_data.dump

글구 옵션[Option] 설명.
--quick : C API의 mysql_use_result() 함수를 사용하므로 속도가 빠르다.
--add-drop-table : 덤프 결과에서 create table 앞에 drop table 절을 추가합니다.
--add-locks : 덤프하기 전에 LOCK table을 이용하여 테이블을 잠그고 덤프후 UNLOCK table을 실행합니다.
--extended-insert : insert 문 하나에서 모든 레코드를 삽입하는 insert 문을 생성합니다.
※ --opt : 위에 나온 옵션을 동시에 사용한 것과 같은 결과를 가져옵니다.
--no-date or -d : 테이블의 스키마만 덤프합니다.
--no-create-info or -t : create table을 출력하지 않고 데이터만 덤프합니다.
--opt 옵션을 주어서 백업하면 나중에 원복을 할때 기존 DB와 TABLE, DATA를 삭제하고 백업한 내용으로 Update를 합니다.
★ --opt 옵션과 -d or -t는 같이 사용할 수 있습니다.

----------------------------------------------------------------------------------
mysqldump -uID -p (TABLE명 혹은 DB명) > 백업할 파일이름.sql
// local 호스트가 아닌경우 호스트를 지정
mysqldump -h192.168.11.10 -uID -p (TABLE명 혹은 DB명) > 백업할 파일이름.sql
// 일반 port가 아닌 포트를 지정한 경우 socket 옵션
mysqldump --socket=(소켓모듈) -uID -p (TABLE명 혹은 DB명) > 백업할 파일이름.sql
// 테이블 구조만 백업받기
mysqldump -h host -u user -ppassword -d database > script.sql
----------------------------------------------------------------------------------



Windows 서버에서 mysqldump 받기 +++++++++++++++++++

1. 원격접속으로 서버에 접속

2. 시작 > 실행 > cmd (windows98 인경우 command)

3. 실행된 도스창에서 mysql > bin 폴더로 이동

4. mysqldump -udbID -p dbName > 백업파일.sql (엔터)
Enter password: dbPass (엔터)

5. 파일 생성을 확인


###### 데이타를 특정 캐릭터셋으로 백업받고자 할때 ###### (2007-06-01 추가)
## euc-kr 백업
$ mysqldump --default-character-set=euckr -hdb.com -udbID -p dbName > backup.sql
Enter password: dbPass (엔터)

$ mysqldump --default-character-set=euckr --extended-insert=FALSE -h주소 -u아이디 -p비밀번호 디비명 > db20101101.sql

## utf8 백업
$ mysqldump --default-character-set=utf8 -hdb.com -udbID -p dbName > backup.sql
Enter password: dbPass (엔터)

$ mysqldump --default-character-set=utf8 --extended-insert=FALSE -h주소 -u아이디 -p비밀번호 디비명 > db20101101.sql


<< 참조 >>
http://cafe.naver.com/bioms/3037
http://tong.nate.com/delusion/33780281
http://blog.naver.com/owner71?Redirect=Log&logNo=20045354948

crontab 재시작

리눅스 2019. 1. 9. 19:48

/etc/init.d/crond restart

리눅스 vi editor line(행) 이동 관련 명령 키

리눅스 2019. 1. 4. 14:47

출처 : https://www.leafcats.com/115


리눅스 대표적 텍스트 편집기인 vi 에디터는 GUI가 아닌 순수 텍스트 명령어 기반으로 작동한다. 따라서 MS 윈도우의 GUI 기반 환경에 익숙한 리눅스 입문자들이 처음 사용하기에는 다소 어려울 수 있다.


[ vi 에디터 기초 사용법 : http://www.leafcats.com/111 ]


vi editor는 텍스트 명령어 기반의 에디터 이지만, 편리한 사용을 돕는 다양한 키가 존재한다.

이 중에서 알아두면 편리하게 사용할 수 있는 가장 많이 사용하는 명령 키가 Line관련한 키이다.

vi editor에서 편집을 할 때에는 마우스로 위치를 이동할 수 없고, 방향키로 이동해야 하기 때문이다. 이 때 원하는 곳으로 빠르게 커서를 이동할 수 있게끔 도와주는 명령 키이다.



vi 에디터를 실행해서 line number를 표시하기 위해서는, 콜론(:) 키를 눌러 라인명령모드로 전환한 다음 set number를 입력한다. 그러면 아래와 같이 행번호가 표시된 모습을 볼 수 있다.



이 상황에서 원하는 라인으로 가고자 한다면, 아래 화면처럼 라인명령모드에서 이동을 원하는 행을 입력하고 엔터키를 누르면 된다.



기본적으로 vi 에디터에서 커서를 이동할 때에는 방향키 4 개와 Page up, Page down키 , Home, End키를 사용하게 된다.


이 밖에 유용하게 사용되는 라인 이동 관련 명령키는 아래와 같다.

gg : 첫 행으로 이동.

G (Shift + g) : 마지막 행으로 이동.

^ / Home / Shift + 6 : 현재 행의 첫 문자로 이동.

$ / End / Shift + 4 : 현재 행의 마지막 문자로 이동.

숫자 타이핑하고 Shift + G : 타이핑한 숫자에 해당하는 행으로 이동.

자동 백업을 위한 간단한 쉘(Shell) 스크립트 - 메일발송까지

리눅스 2019. 1. 3. 13:15

출처 : http://blog.nooree.com/post.cfm/shell


오랜만에 crontab에서 사용할 백업용 쉘 스크립트를 정리했습니다. 이런건 대부분 웹에서 찾아서 쓰는데 덤프기능외에 메일발송도 되면 좋을 거 같아서 추가했습니다. 잘 짜여진 건 아니지만 그럭저럭 쓸 만 하네요. 참고로 Ubuntu 시스템에서만 테스트해봐서 다른 배포판에서는 될련지 모르겠습니다. 아래 쉘을 적당히 backup.sh라고 만들고 crontab에 등록하여 사용하세요. 

여기서 사용된 백업경로, DB명, DB아이디/패스워드, 메일주소 등은 예시로 든 것이니 환경에 맞춰 변경하세요.

다운로드 : backup.sh.zip


01#!/bin/sh
02 
03#실행시각
04NOW_DATE=`date`
05 
06#백업날짜
07BACKUP_DATE=`date +"%Y%m%d"`
08 
09#웹루트
10WWWROOT_DIR=/home/sample/public_html
11 
12#백업파일을 저장할 경로
13BACKUP_DIR=/home/sample/backup
14 
15#MySQL백업
16mysqldump -usampledb -psampledbpass sampledb > ${BACKUP_DIR}/${BACKUP_DATE}.sql
17 
18#웹소스백업
19tar zcvf ${BACKUP_DIR}/${BACKUP_DATE}.tar.gz ${WWWROOT_DIR} --exclude=${WWWROOT_DIR}/WEB-INF
20 
21#소유주 및 권한변경(타 계정의 접근 차단용)
22chown -R root.root ${BACKUP_DIR}
23chmod -R 700 ${BACKUP_DIR}
24 
25# 오래된 백업데이터 삭제(3일 이상 된 것)
26find ${BACKUP_DIR}/ -mtime +3 -exec rm -f {} \;
27 
28#메일 발송 (수신메일추가는 공백으로 구분하여 마지막에 열거)
29echo "백업시각: ${NOW_DATE}\n백업경로: ${BACKUP_DIR}\n\n위와 같이 DB와 웹파일이 백업되었습니다." | mail -a "From:서버관리자 <noreply@sample.com>" -a "Content-Type: text/plain; charset='UTF-8'" -s "자동서버백업안내" manager@sample.com
30 
31exit 0


리눅스 백업스크립트

리눅스 2019. 1. 3. 13:03

개인 웹 서버를 운용하는 상황에서는 백업이 굉장히 중요한 요소입니다. 
대형 블로그 서비스들은 다 내부적으로 수행하고 있지만, 저는 수행하고 있지 않았는데 수행하는 방법에 대하여 알아보았습니다. 

Lael's World 님의 블로그 포스팅을 참조하여 수행하였습니다.


저는 일단 파일만 압축하여 디비도 함께 압축하여 저장하는 방식을 사용했습니다.
db 까지 따로 백업하려면, 경우에는 아래의 참조에서 링크를 타고 가시면 좋은 설명이 되어 있습니다.

저는 내장 DB sqlite3를 사용해서 해당 명령어는 필요 없다고 판단했습니다. 
저는 블로그를 호스팅 하여 사용하기 때문에, 백업이 필요하다고 판단하여 백업을 미루다 미루다 오늘 포스팅 하게 됩니다. 


- 백업할 디렉토리 및 저장 기간, 저장 방식 설정 

저 같은 경우에는 블록 스토리지가 있어서 해당 스토리지에 저장하는 방식을 사용합니다.
백업의 경우에 해당 방식을 많이 사용하겠지만, 같은 디스크의 다른 폴더에 그냥 백업을 할 수도 있을 겁니다. 

$df -Th

위의 명령어를 통해서 디스크의 여유 공간을 확인합니다. 


저는 10GB의 스토리지를 보유하고 있고, 현재 한 번 압축하면 해당 파일이 차지하는 용량은 500MB 정도로 보여집니다. 
따라서, 어느 정도 된 파일은 지속적으로 지워줘야 됩니다. 
DB가 지속적으로 증가할 것을 고려하면 대략 하루에 한 번씩 백업하면, 14~15일 정도가 지금으로써는 적당한 것 같습니다. 

블록 스토리지가 상대적으로 저렴하기 때문에, 비용을 2000원(제 호스팅 서비스) 정도 추가하면 보름 정도는 더 저장할 수 있는 것 같습니다. 
스토리지 용량에 기간을 맞추는 것이 아니라, 원하는 기간에 맞춰서 알맞게 스토리지를 맞추는 것도 좋을 것 같습니다. 



백업 방식의 종류로는 아래와 같은 방식이 있습니다. 
저는 증분을 사용하고 싶지만, 지식이 부족하여 압축을 사용하기로 했습니다.

압축 백업 : (tar -czpf 백업) 일반적으로 많이 쓰이는 백업입니다. 이 작업에는 CPU 가 많이 사용됩니다.
10GB 미만 압축이면 상관없는데 그 이상의 대용량의 압축 백업은 주의가 필요합니다. 백업 시켜놓고 CPU 사용량을 확인하세요.
복사 백업 : (cp -R 백업) 압축하지 않고 복사만 합니다. 사용 용량을 많이 차지하지만 (압축하지 않는다는 뜻) 백업할 때 CPU 사용량이 크게 증가하지는 않습니다.
증분 백업 : (rsync 백업) 변동사항만 비교하여 백업합니다. 비교를 위해서 파일은 항상 압축되지 않은 상태로 보관됩니다.

어짜피 개인 블로그 목적의 백업이고, 새벽 시간을 이용하면 CPU 자원이 충분하기 때문이라고 생각해서입니다. 



아래와 같이 정리해보았습니다. 

@ 백업 정책 @
보관 기간 : 14일
백업 방식 : 압축 백업
백업 시간 : 새벽 4시
백업 횟수 : 하루 1회





아래의 명령어에서 () 는 빼고 사용하셔야 합니다. 

1) 백업할 폴더 생성 후 퍼미션 설정

$ mkdir (백업하고 싶은 위치)
$ chmod 700 (백업하고 싶은 위치)


2) 백업 스크립트 작성 

$ cd /root
$ vim backup.sh


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

find 관련 명령어는 10일이 지난 파일을 삭제합니다. 
find 명령어 뒤에 파이프라인을 보면 rm 명령어를 확인하실 수 있습니다. 
리눅스 명령어를 배우고, 활용을 안해봐서 직접 작성은 쉽지 않네요. 

역시 명령어에서 괄호는 모두 제거하고 넣어주세요 

  #!/bin/bash

  tar -czpf (백업할 디렉토리명)/(자신이 사용할 파일명).`date +%Y%m%d%H%M%S`.tgz (백업을 원하는 원하는 파일, 폴더) 1>/dev/null 2>/dev/null
  3 find (백업할 디렉토리명) -type f -mtime +14 | sort | xargs rm -f



3) 백업 스크립트 퍼미션 설정 및 수행 확인 

$ chmod 700 backup.sh
$ ./backup.sh
저는 테스트 결과 아래와 같이 파일이 잘 생성되었습니다. 




4) 주기적인 실행 

crontab -e

위와 같은 명령어를 실행해서, 아래와 같이 명령어를 추가해줍니다. 
4가 시간입니다.  24시간 기준이고 가령 오후 4시에 하고 싶으면 12를 더한 16을 사용하면 됩니다. 

0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null

#

# For more information see the manual pages of crontab(5) and cron(8)

#

# m h  dom mon dow   command
0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null



5) 확인해보자!

자고 일어나서 확인해보세요~ 



- 출처 - 

https://blog.lael.be/post/1449 

씹어 먹는 C 언어 - <8. 우분투 리눅스에서 C 프로그래밍 하기>

리눅스 2013. 9. 9. 09:07

출처 :  http://itguru.tistory.com/14

이번 강좌에서는...

  • 우분투에서 GCC 설치
  • 기초적인 VIM 사용법
  • GCC 로 컴파일 한 후 실행하기. 

우분투 리눅스의 로고 입니다.


   안녕하세요, 여러분. 이번 강좌에서는 우분투 리눅스 상에서 C 프로그래밍을 하는 법에 대해서 알아 봅시다. 일단, 우분투 리눅스 상에서 C 프로그래밍을 하는 법을 안다면, 다른 배포판에서도 비슷한 방법으로 따라 할 수 있으므로 도움이 될 것입니다. 

  일단, C 프로그래밍을 하려면 컴파일러가 있어야 되는데, 아시다 시피 리눅스 상에서는 Visual Studio 계열을 사용할 수 없습니다. 왜냐하면 그것들은 모두 Microsoft 사의 제품이기 때문이죠. 하지만, 훌륭한 오픈 소스 개발자들이 리눅스 용 컴파일러를 개발하였는데, 그 이름하여 유명한 GCC (GNU Compiler Collection) 입니다. 사실, 초기의 GCC 는 GNU C Compiler 의 약자로, C 언어 컴파일만 지원하였으나, 후에 Ada, C++, JAVA, Fotran, Objective-C 와 같은 언어들도 컴파일 할 수 있게 되여 현재의 이름으로 바뀌었습니다. 

   대부분의 우분투 배포판에는 기본적으로 GCC 가 설치되어 있습니다. 터미널을 열어서 gcc 를 쳐보세요

gcc : no input files 라고 화면에 나옵니다.


   아마, 십중팔구 위 그림과 같이 나올 것입니다. 하지만 간혹 가다 gcc 가 설치되어 있지 않아 아래와 같은 결과가 나타나는 사람들도 있습니다. 

화면에 The program 'gcc' can be found in the following packages 가 나오며 apt-get 을 통해 설치하라고 나올 것입니다.


   이럴 때 에는 다음과 같이 입력합니다. 

sudo su


   그리고 비밀번호를 요구하면, 자신이 처음에 설정한 root 의 비밀번호를 입력합니다. 만약 자신이 설정한 root 의 비밀번호가 무엇인지 모른다면 현재 사용자의 비밀번호를 입력해 보세요. 대부분 현재 사용자의 비밀번호와 root 의 비밀번호가 일치 할 것입니다. 만약 입력했다면 아래와 같이 

sudo su 를 입력합니다.


   (사용자 이름)@(컴퓨터이름): 에서 root@(컴퓨터이름): 으로 바뀐 것을 볼 수 있습니다. 이제, 여러분은 아래의 명령어를 입력해서 gcc 를 설치하시면 됩니다. 

apt-get install gcc


   입력하면 아래와 같이 나옵니다. 

뭐가뭐가 주르륵 나오게 됩니다.


  만약 Y/N 을 요구한다면 Y 를 눌러주시면 되고 저처럼 물어보지 않는다면 그냥 기다리세요. 조금만 기다리다가 위 처럼 다시 명령어 입력을 기다리는 상태가 되었다면 설치가 완료 된 것입니다. 이제, gcc 를 쳐보세요. 그렇다면 'gcc: no input files' 가 출력되게 되죠.   

  이제, 한번 gcc 를 통해 C 프로그램을 컴파일 해봅시다. 일단 가장 쉬운 Hello, World 를 출력하는 프로그램으로 하기로 하죠. 일단 'vim helloworld.c' 를 입력하여 helloworld.c 라는 파일을 만듭니다. (간혹 가다 vim 이 설치되지 않은 경우가 종종 있는데 이는 위에서 gcc 를 설치했던 방법처럼 apt-get install vim 이라 쳐서 vim 을 설치하시면 됩니다. ) 


실행하면 아래 화면을 볼 수 있습니다. 

물결 무늬가 쭉 나와있는 빈 화면이 나옵니다.


   vim 은 우리가 흔히 아는 에디터와 다르게 글을 입력하면 바로 내용이 써지는 것이 아닙니다. 일단, 를 눌러서 입력모드(insert mode) 에 들어가야 합니다. i 를 누른다면 아래에 INSERT 라고 뜨게 되죠. 


   이제, 드디어 글을 입력할 수 있습니다.  그냥 보통 편집기 처럼 프로그램을 작성하면 됩니다. 한가지 유의해야 할 점은 Visual Stdio 처럼 자동으로 indentation 을 해주는 것이 아닙니다. (물론 vim 설정파일에서 autoindent 로 설정하면 가능하지만 여기서는 짧은 프로그램이므로 손으로 직접 해도 상관 없습니다. 자세한 내용은 다음 사이트를 참조하세요 : http://kevin0960.tistory.com/entry/VIM-Vi-iMproved-%EC%9D%98-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C 

다 입력한다면 아래와 같은 모습이 됩니다. 

화면에 #include 로 쭉 해서 Hello, World 를 출력하는 소스를 짜세요!


   이제, Esc 키를 눌러서 명령 모드(Command Mode) 로 들어간 후, :wq 를 입력하세요. 이는 저장(w) 하고 종료(q) 하라는 뜻 입니다. 입력한다면 프로그램을 빠져나가게 되죠. 

프로그램을 빠져 나갔다면 이제 gcc 를 통해 프로그램을 컴파일 + 링크 해야 겠군요. 

gcc -o helloworld helloworld.c


라고 입력하세요. 여기서 -o 는 출력파일의 이름을 지정하는 것입니다. 즉 -o helloworld 는 출력파일의 이름을 helloworld 로 하라는 뜻이지요. 만약 그냥 -o (출력파일 이름) 을 통해 출력파일 이름을 지정하지 않고 그냥 gcc helloworld.c 로 하게 되면 출력파일 이름이 a.out 으로 만들어 지게 됩니다. 


위 명령어를 입력 한 후 , 아무 내용이 뜨지 않는다면 애러없이 성공적으로 컴파일 된 것입니다.  이제,

./helloworld


를 입력해서 만든 프로그램을 실행시켜 보세요. 


위 처럼 Hello, World! 가 출력되었다면 대 성공 입니다. 축하합니다. 

참고해서 읽어 볼 만한 자료

VIM 설정 및 명령어 모음 
http://kevin0960.tistory.com/entry/VIM-Vi-iMproved-의-명령어-모음
http://www.linuxconfig.org/Vim_Tutorial
http://blog.interlinked.org/tutorials/vim_tutorial.html

gcc 및 Makefile 강좌 
http://wiki.kldp.org/KoreanDoc/html/gcc_and_make/gcc_and_make-2.html

redhat 9 인터넷 문제

리눅스/문제점 2013. 7. 7. 05:34

/etc/sysconfig/network-scripts/ifcfg-eth0 파일에

다음 부분 추가:

check_link_down() {
return 1;
}


" Determining IP information for eth0... failed; no link present. Check cable? "

리눅스 2013. 6. 28. 05:50

 

::::    문제    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 

VMware 에 Redhat9.0 을 설치하여, 인터넷을 잘 사용하고 있었다.

어느날 갑자기 인터넷이 안되더라.

 

# ifconfig 명령어를 치면, eth0 이 안뜬다.

# service network restart 명령어를 치면,

  " ip 정보를 얻고 있습니다. 실패 연결이 존재 , 케이블 확인 " 대략 이런 메세지가...

 

  영어로는

  " Determining IP information for eth0... failed; no link present. Check cable? "

  다음과 같은 메세지가 뜬다.

 

::::  해결방법  ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 

1) 슈퍼유저 로그인

2) vi 편집기를 이용하여, 다음 파일들의 마지막줄에 check_link_down () { return 1; } 을 추가한다.

 

   /etc/sysconfig/network-scripts/ifcfg-eth0

   /etc/sysconfig/networking/devices/ifcfg-eth0             <- 이 파일이 없을 경우, 생성해준다.

   /etc/sysconfig/networking/profiles/default/ifcfg-eth0   <- 이 파일이 없을 경우, 안만들어도 된다.

 

3) # ifup eth0 명령어를 사용하거나, 리눅스를 재시작 하면 제대로 인터넷이 동작 할 것이다.