검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : How to back up hard drives for disaster recovery with Clonezilla

  Clonezilla는 GPL 라이선스의 디스크 복제 및 백업 소프트웨어입니다. 디스크/파티션을 다른 로컬 디바이스로 복제하거나 복제 이미지를 외부 SSH/Samba/NFS 서버로 보낼 수 있습니다. 또한 DRBL(Diskless Remote Boot in Linux)에서 실행하여 거대 규모의 네트워크로 묶인 컴퓨터들을 동시에 복제할 수 있습니다.

  이 글에서는 엔드 유저 환경에서 하드 드라이브를 복제/백업하고 복구하는 방법을 설명합니다.

  Clonezilla는 Clonezilla live의 ISO 이미지를 통해 사용할 수 있으며 데비안 기반 ISO 이미지와 우분투 기반 ISO 이미지가 있습니다. 후자는 좀 더 최신 커널을 사용하며 비자유(non-free) 컴포넌트도 사용합니다. Clonezilla로 하드 드라이브를 백업하려면 Clonezilla ISO 이미지로 라이브 CD/USB를 만들어야 합니다.

Clonezilla로 하드 드라이브 백업하기
  전체 하드 드라이브를 백업할 컴퓨터에 Clonezilla 라이브 CD/USB를 넣고 부팅하여 BIOS에서 부팅 우선 순위를 조절 후 부팅하여 초기 화면에 진입합니다. 거기서 Clonezilla live 옵션을 선택합니다.

출처 : http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  그러면 이제부터 부팅 옵션을 정하기 위한 선택화면으로 들어가게 됩니다. 먼저 Clonezilla를 시작할 것인지, 아니면 로그인 쉘로 빠질 것인지 선택하는 화면이 나오는데 여기서 Clonezilla를 선택합니다. 물론 쉘로 빠지는 걸 선택하면 fsck 실행, 루트 패스워드 재설정 등 여러 긴급 작업을 할 수 있겠죠.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  다음으로 "device-image" 모드와 "device-device" 모드 중 하나를 선택합니다. 전자는 디스크/파티션 이미지를 생성하고, 후자는 디스크를 직접 다른 디스크에 복제합니다. 지금은 "device-image" 모드를 선택했다고 가정하고 설명합니다.

  다음으로 이미지가 저장될 곳을 선택합니다. 지금은 "ssh_server"를 선택했다고 가정하겠습니다.

  그 다음에는 네트워크 인터페이스를 설정하는 화면이 나옵니다. IP와 기본 네트워크 정보를 입력한 후 SSH 서버에 접속할 때 사용할 계정명을 적습니다. 이때 이미지 파일을 저장할 SSH 서버의 절대 경로도 지정합니다. Clonezilla는 입력한 SSH 서버 정보를 기반으로 sshfs를 사용하여 원격 SSH 서버의 대상 디렉토리를 로컬에 마운트하는데 이 과정은 직접 화면으로 볼 수 있습니다. 확인이 끝나면 엔터를 눌러 계속 진행합니다.

  이제 복제 모드를 선택하는 화면이 나옵니다. "Beginner"와 "Expert"가 있는데 지금은 "Beginner"를 기준으로 설명합니다.

  다음 화면에서는 디스크 전체를 백업할 것인가, 아니면 디스크의 특정 파티션만 백업할 것인가를 선택합니다. 지금은 디스크 전체를 백업하기 위해 savedisk 옵션을 선택했다고 가정하겠습니다.

  그 다음에는 생성할 이미지 파일의 이름을 설정합니다. 그 후 스페이스 키로 백업할 디스크를 고릅니다.

  다음으로 이미지를 생성하기 전에 원본 파일 시스템에 대한 검사 및 교정을 실시할지를 정합니다. 검사 및 교정을 하려면 해당 파일 시스템이 fsck 명령어로 검사할 수 있는 파일 시스템이어야 합니다.

  다음으로 생성한 이미지에 대한 검사 여부를 정합니다.

  이제 모든 선택이 끝났으며 선택한 디스크 드라이브의 압축된 이미지 파일을 생성하여 원격 SSH 서버에 전송하게 됩니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  이미지가 성공적으로 생성되고 확인까지 끝나면 아래와 같은 화면을 볼 수 있습니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  엔터를 눌러 계속 진행합니다. 그러면 아래와 같은 화면을 통해 컴퓨터 종료, 리붓, 다른 디스크 드라이브/파티션을 대상으로 같은 백업 절차 진행 등을 할 수 있습니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html


Clonezilla로 하드 드라이브 복구하기
  방법은 매우 쉽습니다. Clonezilla CD/USB로 부팅 후 아래 화면이 나올 때까지 위와 동일하게 진행합니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  위 화면에서 "restoredisk"를 선택하면 복구에 사용할 이미지를 선택하는 화면이 나오며, 그 다음에는 대상 로컬 디스크를 선택하는 화면이 나옵니다. 선택이 끝나면 복구가 진행됩니다.

2013/08/09 09:25 2013/08/09 09:25
Posted
Filed under 프로그램과 명령어/기타 프로그램
참조 원문 : How to install HotShots on Fedora 19 and Ubuntu 13.04

  리눅스용 캡쳐 프로그램을 찾던 중 아주 마음에 들진 않지만 그나마 좀 쓸만해 보이는 Hotshots라는 유틸리티를 발견하여 소개합니다. 눈에 띄는 특징은 아래와 같습니다.
  • 전체화면 캡쳐, 멀티 모니터 캡쳐, 창 캡쳐, 사각형 캡쳐, 자유 캡쳐 지원
  • 엄청나게 다양한 이미지 포맷으로 저장 가능
  • 이미지를 FTP 서버나 네 종류의 클라우드 이미지 호스팅 서비스로 전송 가능
  • 내장 이미지 편집기
  • 편집기에서 캡쳐한 이미지 안에 다른 이미지 불러오기 가능

우분투에서 설치하는 방법
  1. sudo add-apt-repository ppa:dhor/myway
  2. sudo apt-get update
  3. sudo apt-get install hotshots
  4. /usr/bin/hotshots 파일을 실행하거나 대시보드에서 실행

페도라에서 설치하는 방법
  1. 이곳에서 최신 버전의 소스 코드 다운로드
  2. unzip 명령어로 압축 해제
  3. yum install libqxt-devel
  4. cd HotShots-버전/build
  5. cmake .(cmake 후 한 칸 띄고 점(.) 입력)
  6. make
  7. make install(root 권한 필요)
  8. /usr/local/bin/hotshots 파일을 실행하거나 메뉴에 직접 추가 후 실행

메인 화면

설정 화면

편집기



웹 페이지 전체를 캡쳐할 수 있는 파이어폭스 플러그인 Awesome Screenshot
  사실 저는 스크롤링 윈도우 캡쳐가 지원되는 프로그램을 찾고 있었던 터라 위 프로그램이 그렇게 마음에 들진 않았습니다. 그래서 계속 다른 프로그램을 계속 찾고 있던 도중 뜻밖의 해결 방법을 찾을 수 있었습니다. 바로 Awesome Screenshot라는 파이어폭스 플러그인을 사용하는 겁니다. 생각해보면 캡쳐 대상이 웹 페이지니 웹 브라우저를 이용하는 것이 최적의 방법인 것 같습니다. 캡쳐 속도도 당연하다면 당연히 최고입니다. 강력히 추천해 드립니다. 아래는 Awesome Screenshot가 제공하는 기능입니다.
  • 현재 웹 브라우저에 보이는 부분만 캡쳐, 페이지 전체 캡쳐 지원
  • 현재 사이트와 역할이 유사한 사이트 검색(캡쳐 기능과 무관)
  • 캡쳐한 그림에서 원하는 부분만 남기기(Crop)
  • 사각형, 원, 화살표, 직선, 자유곡선 그리기, 텍스트 삽입
  • 캡쳐 결과에서 ID 등 민감한 정보를 가리는데 사용할 수 있는 블러(blur) 기능
  • 온라인 임시 저장(1달) 기능과 Diigo.com과 연동을 통한 저장(영구) 기능
2013/07/26 16:26 2013/07/26 16:26
Posted
Filed under 시스템
참조 원문 : LXC vs. OpenVZ

  LXC(Linux Containers)는 리눅스의 컨테이너 기반 기상화의 새로운 주력 솔루션입니다. 아직 기능이 완벽하지 않고, 여전히 많은 사람들이 기존의 메인이던 OpenVZ을 사용하고 있지만 OpenVZ은 사실상 3.x 커널이 더 이상 지원하지 않기 때문에 지금 상태로는 그 생명이 끝나가고 있다고 할 수 있습니다. 이 글에서는 컨테이너 기반 가상화 솔루션의 차이를 비교해보겠습니다. 약간 옛날 데이터라 우분투 12.04가 기준입니다. 참고로 LXC를 가장 잘 지원하는 배포판이 우분투입니다.

                                                                                     OpenVZ                     LXC

리눅스 커널에 포함                                                        X                              O

메모리 사용률 제한 기능                                               O                              O

커널 메모리 제한 기능                                                   O                              X

CPU 사용률 제한 기능                                                  O                              O

디스크 공간 사용량 제한 기능                                      O                        부분/꼼수

디스크 IO 제한 기능                                                       X                              O

체크포인팅                                                                      O                              X

라이브 마이그레이션                                                     O                          X/꼼수

컨테이너 락다운(보안)                                                  O                            부분


리눅스 커널에 포함
  OpenVZ와 달리 LXC는 리눅스 커널에 포함되어 있습니다. 다만 OpenVZ도 커널의 많은 기능을 사용하긴 합니다. LXC는 커스텀 커널을 빌드할 필요가 없기 때문에 설치가 훨씬 쉽습니다. 단, 레드햇이나 수세 계열의 경우 미리 만들어진 OpenVZ 커널 이미지를 다운로드하여 사용할 수 있습니다. 주의할 점은 상당히 오래된 커널을 이용해 만든 OpenVZ 커널 이미지만 있다는 것입니다. 앞서 나왔던 설명처럼 최신 커널을 지원하지 않습니다.

  참고로 OpenVZ는 현재 대부분의 유저스페이스 유틸리티들을 LXC 기반으로 포팅하고 있기 때문에 향후에는 성능이 향상될 것입니다. vzctl 4.3은 OpenVZ가 아닌 컨테이너도 지원하며 CRIU를 통해 라이브 마이그레이션도 가능할 것이라고 합니다.


메모리 사용률 제한 기능
  둘 다 가능합니다. LXC에선 게스트의 사용 메모리를 조정하기 위해 VM-s 설정 파일에서 2개의 cgroup 설정을 사용합니다. 가장 중요한 설정은 메모리를 위한 lxc.cgroup.memory.limit_in_bytes과 스왑을 위한 lxc.cgroup.memory.memsw.limit_in_bytes입니다. 사용하는 커널 버전에 따라 다른 설정이 있을 수도 있습니다. /sys/fs/cgroup/memory/lxc/your-vm-name을 통해 설정 상태를 확인할 수 있습니다.


커널 메모리 제한
  애플리케이션이 커널을 이용하는 동안 커널 메모리를 사용할 수 있습니다. OpenVZ를 사용할 때는 VE 당 이 메모리의 사용을 제한할 수 있습니다.


CPU 사용률 제한
  둘 모두 자신의 CPU 사용률을 제한할 수 있습니다. CPU 대역폭은 지정한 한도 내에서 공유하여 사용하도록 제한됩니다. lxc.cgroup.cpu.shares 설정 값을 조정하여 VM의 CPU 사용량을 설정할 수 있으며, lxc.cgroup.cpuset.cpus로 CPU 코어를 제한할 수 있습니다.


디스크 공간 사용량 제한
  리눅스에서는 디스크 쿼터를 핵심기능으로 두고 있지 않기 때문에 LXC에선 디스크 쿼터를 지원하지 않습니다. VM을 LVM 볼륨에 넣어서 제한을 둘 수 있지만 IO 성능에 제한을 받게 됩니다.


디스크 IO 제한
  IO가 많이 필요한 애플리케이션을 다수 사용할 때는 디스크 IO를 제한하는 기능이 매우 중요합니다. OpenVZ에는 이 기능이 없지만 그것의 상용 버전인 Virtuzzo에는 있습니다. LXC는 lxc.cgroup.blkio이라는 cgroup을 통해 이 기능을 사용할 수 있으며 자세한 건 /sys/fs/cgroup/blkio/lxc에서 볼 수 있습니다.


체크포인팅
  전통적인 최대 절전 모드와 유사한 기능입니다. VM의 상태가 파일로 저장되며 다시 불러올 수 있습니다. 이 기능은 lxc-checkpoint라는 명령어를 통해 사용할 수 있게 될 예정이지만 원문이 작성된 시점(2013년 1월)에서는 구현되지 않았었습니다.


라이브 마이그레이션
  VM을 중단하지 않고 물리적으로 다른 호스트에 넘기는 기능입니다. 그러므로 메모리 내용도 새로운 호스트로 옮길 수 있어야 합니다. OpenVZ는 이미 꽤 오래 전부터 이 기능을 가지고 있었지만 LXC는 아직도 지원하고 있지 않습니다. 정식으로 지원되는 방법은 아니지만 유저스페이스를 이용한 라이브 마이그레이션을 구현하기 위한 프로젝트인 CRIU를 사용하면 가능하긴 합니다.


컨테이너 락다운(보안)
  가상화에서 격리는 중요한 요소입니다. OpenVZ는 이 기능이 잘 구현되어 있지만 LXC는 아직 완벽하지 않습니다. 심지어 우분투에서 AppArmor가 활성화되어 있는 상황에서도 게스트에서 dmesg에 접근할 수 있으며 /proc/kcore와 /proc/sysrq-trigger에도 접근할 수 있어 게스트 VM의 root 사용자가 호스트 머신을 쉽게 리스타트할 수 있습니다. 원문이 작성된 시점에서는 우분투 13.04에서 이 문제가 개선될 계획이었는데 위키에 관련 내용이 업데이트되지 않아서 어떻게 됐는지 모르겠습니다.



결론
  LXC가 유동성에 있어선 좋은 선택이 될 수 있을지 몰라도 위에서 볼 수 있듯이 외부 VM을 호스팅하기엔 아직 부적절한 점이 많습니다. 따라서 그런 종류의 사업에 사용하기엔 좀 더 기다려야 할 필요가 있습니다.


2013/07/25 21:25 2013/07/25 21:25
Posted
Filed under 취미 및 잡담
크라우드펀딩 페이지 : http://www.indiegogo.com/projects/ubuntu-edge/x/4073326
모금 현황 : http://ubuntu-edge.info/

  셔틀워스가 뭔가 꾸미고 있다더니 그게 이거였군요. 캐노니컬에서 직접 우분투 폰을 만들기 위해 크라우드펀딩을 시작했습니다. 목표액이 무려 $3200만(대충 한화로 320억원)이라는 엽기적인 수치입니다. 좀 무리같은데...그래도 일단은 참여했습니다. 5000명 한정 $600를 하고 싶었는데 정보가 늦어서 실패하고 그냥 $830(+배송비 $30)로 참여했습니다. 일찍 받아보는 거 말곤 딱히 특전도 없는데 좀 비싼 거 아닌가 싶었는데 하드웨어가 심히 빵빵하고 또 그래야 하는 이유가 있는 제품이더군요. 아래는 이 제품의 특징입니다.
  • 출시는 2014년 5월을 목표로 하고 있다.
  • 우분투와 안드로이드를 모두 담고 있으며 두 OS 사이에서 파일의 사용이 자유롭다.
  • 부팅 시 두 OS 중 원하는 것을 선택해서 부팅할 수 있다.
  • 도킹하면 데스크탑 우분투(!)를 사용할 수 있다.(모니터와 키보드 추가 연결) 기본 프로그램이 폰OS와 완벽히 통합되어 있기 때문에 데스크탑을 사용하면서도 전화를 받을 수 있다.
  • 해상도는 1,280x720이며 한 손으로 모든 화면을 커버할 수 있는 크기인 4.5인치. 이것은 OS가 별도의 버튼 없이 터치 동작만으로 조작하도록 되어있기 때문에 결정한 사항으로 보인다.
  • 출시일이 많이 남았기 때문에 사양이 정확히 정해지진 않았지만 최신 쿼드코어CPU, 최소 4기가 이상의 램, 128GB의 스토리지를 담을 것이라 약속하고 있다.
  • 8mp 후면 카메라와 2mp 전면 카메라를 장착.
  • 메탈 케이스에 액정은 다이아몬드 다음 급으로 단단한 사파이어 크리스탈 소재를 사용하고, 하며, 듀얼 LTE 칩, 듀얼밴드 802.11n Wi-Fi, 블루투스4.0, NFC, MHL 커넥터, 3.5mm 잭
  • 전체 크기는 64 x 9 x 124mm
  여러모로 흥미가 갈 수밖에 없군요. 허나 중요한 건 이게 크라우드펀딩 프로젝트이기에 목표 모금액에 도달해야 제품 생산이 결정된다는 건데...모금 현황을 보자니 암울하군요. 어제는 첫날 버프를 받고 $600짜리 5000개가 번개처럼 나갔지만 그걸 본 사람이 $830을 주고 사려니 배가 아플 수밖에 없겠지.(나도 그렇고) 어쨌든 프로젝트가 성공했으면 좋겠네요.

업데이트1: 결국 버틸 수 없었는지 $625, $675, $725, $775를 각각 1250개 한정으로 풀고 $780을 4500개 한정으로 풀었군요. 그러면서 기존 구매자들은 기존가와 새로운 최저가의 차액인 $205를 환급해주기로 약속하는 메일이 발송했습니다. 근데 여기에 꼼수를 부려 프로젝트가 끝날 때 돌려주기로 해서 기부총액이 줄어들지 않게 만들었네요. 탁월한 선택인 것 같습니다. 어쨌든 덕분에 또 순간적으로 모금액이 폭증하는 효과를 누렸으나 앞으로 남은 금액을 어떻게 채울지 깜깜하네요.


2013/07/24 17:42 2013/07/24 17:42
Posted
Filed under 프로그램과 명령어/기타 프로그램
참조 원문 : Meld : Graphical diff To Compare Files & Directories On Linux

  Meld는 파일이나 디렉토리를 비교할 수 있는 유틸리티입니다.
  • 2~3개의 파일/디렉토리 비교
  • 자동 병합(개발 버전)
  • 입력에 따른 비교 업데이트
  • 차이점이 있는 부분에 대한 쉬운 병합
  • Arch, Bazaar, Codeville, CVS, Darcs, Git, Mercurial, Mono-tone, RCS 등 버전 컨트롤 지원
  패키지 이름은 프로그램 이름과 일치하는 meld로 통상적인 배포판에서 yum이나 apt-get을 통해 설치할 수 있습니다.
2013/07/21 16:33 2013/07/21 16:33
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : phpvirtualbox - Running Virtual Machines With VirtualBox 4.2 and phpvirtualbox On A Headless Ubuntu 12.04 Server

  phpvirtualbox는 PHP로 만들어진 웹 기반의 VirtualBox 프론트엔드로 원격에서 VirtualBox 인스턴스에 접근 및 제어를 할 수 있게 해줍니다. VirtualBox의 GUI와 비슷하게 구현하여 사용하기가 쉽습니다. 원격에서 웹을 통해 접속하여 GUI로 인스턴스를 제어할 수 있다는 점 때문에 서버에서 설치하여 사용하기 매우 좋습니다. 이 글에서는 VirtualBox와 phpvirtualbox를 설치하여 원격에서 VirtualBox를 제어할 수 있게 연동하는 방법을 소개합니다. 기본적으로 우분투 12.04 서버 버전을 기준으로 설명하고 있지만 13.04 서버 버전 등 다른 버전에서도 가능하며, 몇몇 경로명이나 패키지 설치 명령어 정도만 바꾸면 레드햇 계열의 배포판에서도 충분히 따라 해볼 수 있습니다.

1. 선결조건
  호스트는 우분투 12.04 서버로 가정합니다. 거의 모든 명령어는 root 권한을 필요로 하므로 명령어를 사용할 때마다 sudo를 사용하거나 sudo su 명령어를 통해 root로 로그인해야 합니다.

2. VirtualBox 설치
  /etc/apt/sources.list 파일에 아래 내용을 추가합니다.
deb http://download.virtualbox.org/virtualbox/debian precise contrib
  VirtualBox 공개 키를 받습니다.
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add -
  패키지 DB를 업데이트하고 VirtualBox 4.2를 설치합니다. dkms 패키지는 리눅스 커널 버전이 바뀔 때 VirtualBox 호스트 커널 모듈도 그에 맞춰 업데이트시키는 역할을 합니다.
# apt-get update
# apt-get install linux-headers-$(uname -r) build-essential virtualbox-4.2 dkms
  VirtualBox는 4.0부터 Remote Desktop Connection Support(VRDP) 등 일부 기능을 "확장팩(extension packs)"이란 이름의 별도 패키지로 제공하고 있습니다. 원격 제어를 하려면 VRDP가 필요하기 때문에 확장팩을 설치해야 합니다. http://www.virtualbox.org/wiki/Downloads에서 두 번째 항목에 있는 'All supported platforms' 링크의 주소를 파악하여 서버에서 다운로드를 합니다. 아래와 버전이 다를 확률이 높기 때문에 반드시 직접 확인하고 다운로드하시기 바랍니다.
# cd /tmp
# wget http://download.virtualbox.org/virtualbox/4.2.16/Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack
# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack
  이제 VirtualBox를 실행할 계정을 만들어 패스워드를 설정하고 vboxusers라는 그룹에 넣습니다. 계정명은 vbox로 만들겠습니다.
# useradd –d /home/vbox –m vbox
# passwd vbox
# adduser vbox vboxusers
  위에서 만든 계정을 VirtualBox가 사용하도록 /etc/default/virtualbox 파일을 생성하여 아래 내용을 넣습니다.
VBOXWEB_USER=vbox
  부팅 시 서비스를 실행하도록 만들고 서비스를 실행합니다.
# update-rc.d vboxweb-service defaults
# /etc/init.d/vboxweb-service start

3. Apache, PHP, phpvirtualbox 설치
  아파치와 PHP를 설치합니다.
# apt-get install apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common apache2 apache2-doc apache2-suexec libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libapr1 php5-common php5-mysql php-pear
  phpvirtualbox를 다운로드하여 압축을 풀고 documentroot에 복사합니다. phpvirtualbox는 홈페이지에서 최신 버전을 확인하고 다운로드해야 합니다.
# cd /tmp
# wget https://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.2-5.zip
# unzip phpvirtualbox-4.2-5.zip
# mv phpvirtualbox-4.2-5 /var/www/phpvirtualbox/
  템플릿 설정 파일을 일반 설정 파일명으로 복사한 후 계정명과 패스워드를 아까 생성한 계정의 것으로 수정합니다.
# cd /var/www/phpvirtualbox/
# cp config.php-example config.php
# vi config.php
...생략...
var $username = 'vbox';
var $password = '아까 설정한 패스워드';
...생략...
  이것으로 모든 설정이 끝났으며 네트워크상 해당 서버에 접근할 수 있는 컴퓨터의 웹 브라우저에서 http://IP주소/phpvirtualbox를 입력하여 설치했던 phpvirtualbox에 접근할 수 있습니다. 접근하면 로그인 화면이 나오는데 기본 계정명과 패스워드는 admin입니다.
2013/07/17 22:59 2013/07/17 22:59
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Groping through big data with grep

1. 숫자 4개로 시작하는 줄 뽑아내기
grep ^[0-9][0-9][0-9][0-9] textfile
grep -E "^[0-9]{4}" textfile
  하지만 이 조건만으로는 4자리로 시작하기만 하면 무조건 걸려나옵니다. } 문자 뒤에 공백을 하나 넣어서 처리할 수 있지만 좀 더   좋은 방법은 "단어 단위" 기능(<와 >)을 사용하는 것입니다.
$ grep '\<[0-9]\{4\}\>' textfile
2010
2013 is turning out to be a better year
  다만 이 방법을 사용할 때 주의할 점이 있습니다. 아래를 보시죠.
$ grep '\<[0-9]\{3,5\}\>' textfile
2010
2013 is turning out to be a better year
12345 Taylor Avenue
127.0.0.1
  다른 건 괜찮았는데 마지막에 IP 주소가 걸려 나왔습니다. 숫자 뒤에 문자가 나오는 경우도 "단어의 끝"으로 취급하기 때문입니다. 단어 단위로 걸러낼 때는 이런 사항도 고려해야 합니다.

2. IP 주소 뽑아내기
  IP 주소를 검출하는 게 은근히 생각보다 까다롭습니다. 먼저 특정 IP를 찾는 것부터 시작하겠습니다. 생각없이 그냥 지르면 이런 모습이 나옵니다.
$ grep 12.45.78.0 text
1234567890
12.45.78.0
  정규 표현식에서 점(.)은 하나의 문자를 뜻하니까요. 이럴 땐 -F 옵션(fixed string)을 사용하거나, fgrep 명령어를 사용하거나, 이스케이프 문자를 사용해야 합니다. 처음 두 방법은 사실상 같은 거나 다름없습니다.
$ grep -F 12.45.78.0 text
12.45.78.0
$ fgrep 12.45.78.0 text
12.45.78.0
$ grep "10\.20\.30\.40" textfile
Don't use the 10.20.30.40 address unless you first talk to Pete.
  이제 IPv4 주소 형식을 띈 문자열을 잡아내는 패턴의 예를 보겠습니다.
$ grep -w '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' textfile
127.0.0.1
Don't use the 10.20.30.40 address unless you first talk to Pete.
Refer to Section 11.2.3.4.20 for the process guidelines.
  마지막에 엉뚱한 게 나왔듯이 위의 방법도 완벽하진 않습니다만 여기서 더 발전시켰다간 필요 이상으로 복잡해지기 때문에 이 정도로 끝내는 게 적절할 것 같습니다.

2013/07/17 16:33 2013/07/17 16:33
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : 20 interesting and extremely helpful Linux command line tricks

1. 두 디렉토리 사이를 효율적으로 반복해서 이동하는 방법
  A 디렉토리에서 B 디렉토리로 이동한 후 다시 A 디렉토리로 이동할 때 A 디렉토리의 경로를 쓰는 대신 'cd -'를 사용하여 같은 효과를 볼 수 있습니다.
/home$ cd /var/log
/var/log$ cd -
/home
/home$

2. 콤마(,) 연산자
  첫 번째 글자나 문자열 전체를 소문자로 변환 방법
$ string="Example of comma OPERATOR"

$ echo ${string,}
example of comma OPERATOR

$ echo ${string,,}
example of comma operator
  파일명 확장(extension)에 사용
$ touch new_file{1,2,3}
$ ls new_file*
new_file1  new_file2  new_file3

파일명을 my_filename.old에서 my_filename.new로 변경
$ mv my_filename.{old,new}

3. 파일명에 공백이 있을 때 제어하는 방법
  파일명 전체를 큰 따옴표로 감싸거나 공백 앞에 역슬래쉬(\)를 넣습니다.
$ rm "temp File"
$ rm temp\ File

4. 하이픈(-)으로 시작하는 파일명 삭제 또는 생성 방법
$ rm -1mpFile.out
rm: invalid option -- '1'
Try `rm ./-1mpFile.out' to remove the file `-1mpFile.out'.
Try `rm --help' for more information.

$ rm -- -1mpFile.out
$ touch -- -1mpFile.out

5. 디렉토리 안에 있는 파일 중 특정 확장자가 아닌 모든 파일 삭제 방법
$ rm !(*.c|*.py)

6. touch와 find를 이용해 특정 시간 사이에 생성되거나 수정된 파일 복사
  어떤 디렉토리 안에 있고 09~17시 사이에 생성되거나 수정된 파일만 골라 복사하고 싶다고 가정했을 때 먼저 원하는 두 시간에 맞춰 타임스탬프 값을 가진 두 파일을 생성합니다.
$ touch -d "9am" temp1
$ touch -d "5pm" temp2
  이제 대상 파일이 있는 디렉토리로 이동해서 아래 명령어를 사용합니다.(또는 find에서 대상 디렉토리를 지정)
$ find . -newer ../temp1 ! -newer ../temp2 -exec cp '{}' ./target/ ';'
  실행하면 대상 파일이 target이라는 하위 디렉토리 안에 복사됩니다. 물론 target 디렉토리를 먼저 만들어야 합니다.

7. 대상 파일이 너무 많아서 삭제가 안 될 때
  디렉토리 안에 파일이 너무 많을 때 삭제를 시도하면 아래의 에러 메시지와 함께 삭제가 안 될 수 있습니다.
-bash: /bin/rm: Argument list too long
  이럴 땐 아래의 방법을 사용합니다. 사용하기 전에 현재 디렉토리를 다시 한 번 확인하는 것이 좋습니다.
find * -xdev -exec rm -f '{}' ';'

8. 특정 문자열을 포함한 파일 찾는 방법
$ grep -l "printf" *.c
  하위 디렉토리에 있는 파일들까지 포함하여 문자열이 포함된 파일과 그 문자열이 있는 줄을 보고 싶다면 find, xargs, grep 명령어를 활용합니다.
$ find . -name "*.c" | xargs grep -H "buff"
./bfrovrflw.c:    char buff[15];
./bfrovrflw.c:    gets(buff);
./bfrovrflw.c:    if(strcmp(buff, "MyLinuxBook"))

9. 파일 안의 내용을 모두 지우는 방법
$ > ./logfile

10. man 페이지에서 특정 문자열 검색 방법
$ man -k login
access.conf (5)      - the login access control table file
add-shell (8)        - add shells to the list of valid login shells
chsh (1)             - change login shell
faillog (5)          - login failure logging file
faillog (8)          - display faillog records or set login failure limits
getlogin (3)         - get username
getlogin_r (3)       - get username
gnome-session-properties (1) - Configure applications to start on login
hotot (7)            - lightweight & opensource microbloging client
issue (5)            - prelogin message and identification file
lastlog (8)          - reports the most recent login of all users or of a given user
login (1)            - begin session on the system
login (3)            - write utmp and wtmp entries
login.defs (5)       - shadow password suite configuration
login_tty (3)        - tty utility functions
logname (1)          - print user's login name
...
...
...

11. 표준 에러 출력 메시지를 파일로 리다이렉트시키는 방법
  일반 리다이렉트로는 표준 에러로 출력되는 메시지를 담을 수 없습니다.
$ touch new > /home/himanshu/practice/logfile
touch: cannot touch `new': Permission denied
$ cat /home/himanshu/practice/logfile
$
$ touch new > /home/himanshu/practice/logfile 2>&1
$ cat /home/himanshu/practice/logfile
touch: cannot touch `new': Permission denied
  2>&1은 표준 에러도 표준 출력으로 보내라는 뜻입니다.

12. history에 남기지 않고 명령어 사용
  앞에 공백을 넣고 명령어를 사용합니다.
$ a
a: command not found
$  vi
$ b
b: command not found
$ history | tail -3
 1055  a
 1056  b
 1057  history | tail -3

13. 영화처럼 같은 속도로 텍스트 출력
$ echo "You can simulate on-screen typing just like in the movies" | pv -qL 10

14. alias와 같은 이름을 가진 명령어가 있을 때 alias가 아닌 그 명령어 실행
  앞에 역슬래쉬(\)를 넣고 명령어를 사용합니다.
mirashi@mirashi-virtual-machine:~/test$ alias ls='ls -al'

mirashi@mirashi-virtual-machine:~/test$ ls
합계 8
drwxrwxr-x  2 mirashi mirashi 4096  7월 17 14:33 .
drwxr-xr-x 34 mirashi mirashi 4096  7월 17 14:33 ..
-rw-rw-r--  1 mirashi mirashi    0  7월 17 14:33 test

mirashi@mirashi-virtual-machine:~/test$ \ls
test

15. 특정 파일을 사용하고 있는 프로세스 찾아내기
  파일을 지우려고 하는데 어떤 프로세스가 그 파일을 사용 중이라 지울 수 없을 때가 있습니다. 이럴 땐 fuser 명령어로 그 파일을 사용하고 있는 프로세스들의 PID를 알아낼 수 있습니다.
# fuser /var/log/httpd/access_log
/var/log/httpd/access_log: 24273 24277 24278 24279 24280 24281 24282 24283 24284 24305 24306 24307 34994 35370 35371 35372 35373 35374 35375 35376
  또한 -k 옵션을 사용하면 해당 프로세스들을 죽일 수 있습니다.

16. 복사와 붙여넣기 단축키
  먼저 복사하고 싶은 부분을 마우스로 드래그해서 선택한 후 Ctrl+Shift+C를 누르면 복사가 되고 Ctrl+Shift+V를 누르면 붙여넣기가 됩니다.





2013/07/17 14:47 2013/07/17 14:47
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Ubuntu 13.04

1. 선결조건
  호스트명은 server1.example.com, IP 주소는 192.168.0.100인 것으로 가정합니다. 거의 모든 명령어는 root 권한을 필요로 하므로 명령어를 사용할 때마다 sudo를 사용하거나 sudo su 명령어를 통해 root로 로그인해야 합니다.

2. MySQL5 설치
apt-get install mysql-server mysql-client
  설치 중 MySQL root 계정의 패스워드를 설정하게 됩니다.

3. Nginx 설치
apt-get install nginx
/etc/init.d/nginx start
  웹 브라우저로 접속 가능 여부를 확인합니다. 우분투 13.04에서 Nginx의 디폴트 document root는 /usr/share/nginx/html 입니다.

4. PHP5 설치
  PHP-FPM(FastCGI Process Manager. PHP FastCGI 구현물로 특히 방문자가 많은 사이트에 유용한 기능을 가지고 있음)로 Nginx에서 PHP5를 사용할 수 있습니다.
apt-get install php5-fpm
  PHP-FPM은 /var/run/php5-fpm.sock 소켓에서 FastCGI 서버를 실행하는 데몬 프로세스입니다. init 스크립트의 위치는 /etc/init.d/php5-fpm 입니다.

5. Nginx 설정
  Nginx의 설정 파일은 /etc/nginx/nginx.conf 입니다. 설정 파일은 이해하기 쉬운 구조로 되어 있습니다.(이곳이곳에서 배울 수 있습니다.)

  (선택사항으로)먼저 워커 프로세스의 개수를 조정하고 keepalive_timeout 값을 적절히 설정합니다.
[...]
worker_processes  4;
[...]
    keepalive_timeout   2;
[...]
  가상 호스트는 server {} 컨테이너에서 정의합니다. 디폴트 vhost는 /etc/nginx/sites-available/default 파일에 정의되어 있습니다. 파일의 내용을 아래처럼 바꾸겠습니다.
[...]
server {
        listen 80;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                allow ::1;
                deny all;
        }

        # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
        #location /RequestDenied {
        #       proxy_pass http://127.0.0.1:8080;
        #}

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
[...]
  IPv4와 IPv6의 80번 포트를 모두 열기 위해 두 listen 줄의 주석을 모두 제거합니다.

  server_name _; 는 모든 vhost의 server_name을 포괄한다는 의미입니다.(물론 www.example.com처럼 호스트명을 지정할 수도 있습니다.)

  index 줄에는 index.php를 추가했습니다. root /usr/share/nginx/html;은 document root 디렉토리를 지정하는 항목입니다.

  PHP에 있어서 중요한 부분은 location ~ \.php$ {} 로서 이 부분의 주석을 제거해야 합니다.

  Nginx를 리로드합니다.
/etc/init.d/nginx reload
  /etc/php5/fpm/php.ini 파일을 열어 cgi.fix_pathinfo=0; 으로 설정합니다.
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]
  PHP-FPM을 리로드합니다.
/etc/init.d/php5-fpm reload
  Document root 디렉토리인 /usr/share/nginx/html 안에 연동확인용 PHP 파일을 만듭니다.
# vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
  웹 브라우저에서 위 파일을 열어 PHP가 작동하는지와 Server API 항목이 FPM/FastCGI인지를 확인합니다. MySQL과 연동하지 않았으므로 MySQL과 관련된 항목은 아직 나오지 않습니다.

6. MySQL과 PHP5 연동
  MySQL과 PHP5를 연동하기 위해 php5-mysql 패키지를 설치합니다. 또한 자주 사용하는 PHP5 모듈도 함께 설치합니다. 설치할 수 있는 PHP5 모듈은 아래 명령어로 검색할 수 있습니다.
apt-cache search php5
  아래처럼 php5-mysql과 함께 원하는 모듈들을 설치합니다.
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
  APC는 eAccelerator나 Xcache처럼 PHP의 중간 코드를 캐싱하고 최적화하는 opcode 캐셔로서 PHP 페이지의 속도를 높이는데 큰 도움이 됩니다.
apt-get install php-apc
  이제 PHP-FPM을 리로드합니다.
/etc/init.d/php5-fpm reload

7. PHP-FPM이 TCP 연결을 사용하도록 설정
  PHP-FPM은 기본적으로 /var/run/php5-fpm.sock 소켓을 열고 있지만 TCP 연결을 사용하도록 만드는 것도 가능합니다. /etc/php5/fpm/pool.d/www.conf 파일을 열어서 listen 줄을 아래처럼 수정합니다.
[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]
  이것으로 PHP-FPM은 127.0.0.1(localhost)의 9000번 포트를 열게 됩니다. 해당 포트가 미사용 포트인지 확인 후 PHP-FPM을 리로드합니다.
/etc/init.d/php5-fpm reload
  Nginx의 설정 파일인 /etc/nginx/sites-available/default를 열어서 fastcgi_pass unix:/var/run/php5-fpm.sock; 줄을 fastcgi_pass 127.0.0.1:9000;로 바꿉니다.
[...]
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                #fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
[...]
  마지막으로 Nginx를 리로드합니다.
/etc/init.d/nginx reload

8. CGI/Perl 스크립트
  Nginx로 CGI/Perl 스크립트를 사용해야 한다면 이 글을 참고하시기 바랍니다. fcgiwrap 사용을 추천합니다.(챕터4)

2013/07/17 11:37 2013/07/17 11:37
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : 5 Tips To Speed Up Linux Software Raid Rebuilding And Re-syncing

  원문 작성자가 기본 상태로 2TB 디스크 5개를 사용해 RAID 6를 구성했을 때 처리 속도가 초당 약 4000K로 완성까지 걸리는 시간이 대략 22시간이었다는 실제 사례를 들면서 이 속도를 더 빠르게 만드는 팁을 공개했기에 소개합니다.

1. /proc/sys/dev/raid/{speed_limit_max,speed_limit_min} 커널 변수
  /proc/sys/dev/raid/speed_limit_min 은 리빌드가 아닌 활동이 어레이에 있을 때의 "목표" 리빌드 속도를 나타내는 설정 파일입니다. 속도는 초당 킬로바이트(kibibyte=1024)이며 어레이 당 속도가 아닌 디바이스 당 속도입니다. 디폴트 값은 1000입니다.

  /proc/sys/dev/raid/speed_limit_max 는 리빌드가 아닌 활동이 어레이에 없을 때의 "목표" 리빌드 속도를 나타내는 설정 파일입니다. 디폴트 값은 200000입니다.

  현재 한계 값은 아래 명령어로 볼 수 있습니다.
# sysctl dev.raid.speed_limit_min
# sysctl dev.raid.speed_limit_max
  주의: 아래 내용은 리눅스 소프트웨어 레이드의 리빌딩 속도를 높여주지만 전체적인 시스템 부하, CPU 및 메모리의 사용률을 증가시킵니다.

  속도를 높이기 위해 아래 명령어를 입력합니다.
echo 값 > /proc/sys/dev/raid/speed_limit_min
또는
sysctl -w dev.raid.speed_limit_min=값
예:
# sysctl -w dev.raid.speed_limit_min=50000
  디폴트 자체를 변경하려면 /etc/sysctl.conf 파일에 아래처럼 두 옵션을 추가합니다. 참고로 CPU와 메모리로 인해 제한을 받을 수도 있습니다.
dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 2000000 (어레이의 구성 디스크가 4~5개인 경우)
dev.raid.speed_limit_max = 5000000 (어레이의 구성 디스크가 6~12개인 경우)

2. read-ahead 옵션 설정
  레이드 디바이스 당 readahead(단위는 512바이트 섹터) 값을 설정합니다. 방법은 아래와 같습니다.
# blockdev --setra 65536 /dev/mdX (장치명을 알맞게 변경)
## 아래는 read-ahead를 32 MiB로 설정하는 예 ##
# blockdev --setra 65536 /dev/md0
# blockdev --setra 65536 /dev/md1

3. RAID 5와 RAID 6의 stripe-cache_size 설정
  RAID 5와 RAID 6일 때만 가능한 설정으로 싱크 성능을 3~6배 높여줍니다. 어레이의 모든 쓰기 작업에 대한 동기화와 어레이에 문제가 발생했을 때 실시하는 모든 읽기 작업에 사용하는 stripe cache의 크기(디바이스 당 페이지 수)를 변경합니다. 디폴트 값은 256입니다. 가능한 값은 17~32768입니다. 이 값을 높이면 특정 상황에서 시스템 메모리를 더 사용하여 속도를 높일 수 있습니다. 이 값을 너무 높이면 시스템을 메모리 부족 상태로 만들 수 있습니다. 아래 공식을 사용합니다.
메모리 사용량 = 시스템_페이지_크기 * 구성 디스크의 개수 * stripe_cache_size
  아래는 /dev/md0의 stripe_cache_size 값을 16MiB로 설정하는 예입니다.
# echo 16384 > /sys/block/md0/md/stripe_cache_size
  아래는 /dev/md3의 stripe_cache_size 값을 32MiB로 설정하는 예입니다.
# echo 32768 > /sys/block/md3/md/stripe_cache_size

4. 모든 디스크의 NCQ 비활성화
  아래는 bash로 반복문을 사용하여 /dev/sda부터 /dev/sde까지의 NCQ를 비활성화하는 예입니다.
for i in sd[abcde]
do
  echo 1 > /sys/block/$i/device/queue_depth
done

5. 비트맵 옵션
  비트맵은 crash가 발생하거나 디바이스 제거 후 다시 추가했을 때의 리빌드 시간을 최적화시켜줍니다. 아래의 명령어로 사용할 수 있습니다.
# mdadm --grow --bitmap=internal /dev/md0
  어레이 리빌드나 싱크가 끝나면 다시 비활성화합니다.
# mdadm --grow --bitmap=none /dev/md0

결과
  작성자의 경우 속도가 4000K에서 51000K로 높아졌다고 합니다.
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md5 : active raid1 sde2[2](S) sdd2[3](S) sdc2[4](S) sdb2[1] sda2[0]
      530048 blocks [2/2] [UU]
md0 : active raid6 sde3[4] sdd3[3] sdc3[2] sdb3[1] sda3[0]
      5855836800 blocks level 6, 64k chunk, algorithm 2 [5/5] [UUUUU]
      [============>........]  resync = 61.7% (1205475036/1951945600) finish=242.9min speed=51204K/sec

RAID 리빌딩/복구 작업을 모니터링하는 방법
  현재 사용 중인 어레이에 대한 정보를 담고 있는 /proc/mdstat 파일을 보면 됩니다. 이때 watch 명령어를 활용하면 진행상황을 실시간으로 볼 수 있습니다.
# watch -n1 cat /proc/mdstat
  mdadm 명령어로 특정 어레이에 대한 자세한 정보를 볼 수 있습니다.
# mdadm --detail /dev/md2
  iostat 명령어로 디스크 사용현황을 볼 수 있습니다.
# watch -n1 iostat -k 1 2
2013/07/17 00:54 2013/07/17 00:54