예술적인 유닉스 유틸리티 : netcat 과 tar 을 이용한 리모트 백업

연구실에서 간간히 서버관리 역할도 하고 있는데, 최근 제가 관리하던 서버가 맛탱이가 가는 바람에 해당 서버의 데이터를 백업해야 할 일이 생겼습니다. 이번에 백업을 하면서 예전에 배워두었던 netcat 과 tar 의 조합으로 편리하게 했습니다. 이 조합은 다음과 같은 상황에서 빛을 냅니다.

  • 백업할 파티션이 대부분 차 있어 로컬 파티션에 백업할 수 없을 때
  • 퍼미션을 유지하며 리모트 머쉰으로 복사 할 때

tar 에서 f 를 빼고 다음과 같이 하면 stdout 으로 묶은 내용을 출력합니다. 이걸 netcat 로 리모트 머쉰에 쏘는 거지요. 그럼 netcat 를 listen mode 로 켜둔 리모트 머쉰에서는 이 데이터를 받아서 tar 에게 파이프(pipe)로 건내주어 파일로 저장되게 합니다. 그럼 명령어로 한번 볼까요?

우선 백업을 저장할 머쉰 아래 명령을 먼저 수행합니다.

nc -l -p ${PORT} | tar xvf

-l 은 listen mode 로 netcat 를 작동 한는 옵션이며 이렇게 해야 소켓을 열고 접속 요청을 대기 합니다. 다시 말해 서버 처럼 작동합니다. ${PORT} 에는 대기할 port 번호를 입력합니다.

그리고 백업할 데이터가 있는 머쉰, 즉 로컬머쉰에서 다음과 같이 합니다.

tar cvf ${DIR} | nc -q 0 ${HOSTNAME} ${PORT}

nc 에서 -q 명령은 EOF 를 만난후 몇초후에 nc 를 종료할 것인지를 나타냅니다. 위 명령에서는 -q 0 이므로 EOF 를
만나면 바로 종료됩니다. -q 명령을 안쓰면 tar 명령이 끝나도 프롬프트가 나오지 않고 대기하게 되므로 언제 종료되었는지
알기가 힘듭니다. ${HOSTNAME} 은 저 위에 백업을 저장할 머쉰의 주소 입니다.

tar 의 다양한 옵션들을 추가 하면 더욱 쓸만해 집니다. 저 같은 경우 홈 디렉토리를 그대로 백업하기 위해 다음과 같이 합니다.

백업 데이터를 저장하는 머쉰에서

nc -l -p ${PORT} tar xjvpf

백업할 데이터가 있는 머쉰에서

tar cjvpf /home | nc -q 0 ${HOSTNAME} ${PORT}

참고로 말씀드리면 j 는 bzip2 로 압축하는 옵션이며 p 는 퍼미션, 즉 uid와 gid 를 그대로 유지합니다. 아마 tar 옵션을 많이 아신다면 다양한 응용이 가능할 것 같습니다.

오늘도 이 글을 쓰면서 느끼는 거지만 파이프와 함께하는 유닉스 유틸리티들은 말 그대로 예술인 것 같습니다.


리눅스(Linux) 라이브시디(Live CD)로 하드웨어 정보 알아내기

이 글은 일종의 팁입니다.

컴퓨터를 잘 다룬다고 주변으로 인식 받는 사람들은 대부분주변인들에게 컴퓨터를 고쳐달라는 부탁을 받아 봅니다. 처음이나 어린나이에는 우쭐해서 잘 고쳐주다가도 사실 점차 반복되는 부탁과 나이가 들어감에 따라 대부분 귀찮아 하지요.

사용자 삽입 이미지

오죽하면 이런 티를 팔겠습니까?

귀찮아도 지인의 부탁에 고쳐줘야 하는 경우가 있습니다. 고치다 보면 해결책으로 종종 윈도우즈 재설치 처방을 내리게 됩니다. 그런데 문제는 이런 요구를 하는 사람들은 대부분 드라이버 시디를 가지고 있지 않거나 하드웨어 스펙을 잘 모릅니다(주로 랜카드와 비디오카드, 사운드).

그래서 저는 컴퓨터를 고치러 가는 경우 리눅스 라이브시디를 하나 가지고 갑니다(개인적으로 젠투 라이브를 선호 합니다). 하드웨어 스펙을 잘 모르는 경우 라이브시디로 부팅하여 터미널에서 lspci 한방이면 연결된 하드웨어 칩셋의 정보를 모델명까지 잘 보여줍니다.

저의 경우 아래와 같이 나오는 군요.

c0d3h4ck@c0d3h4ck:~$ lspci
00:00.0 Host bridge: Intel Corporation 82P965/G965 Memory Controller Hub (rev 02)
00:01.0 PCI bridge: Intel Corporation 82P965/G965 PCI Express Root Port (rev 02)
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Contoller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)
00:1c.4 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 5 (rev 02)
00:1c.5 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 6 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev f2)
00:1f.0 ISA bridge: Intel Corporation 82801HB/HR (ICH8/R) LPC Interface Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation G71 [GeForce 7900 GS] (rev a1)
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12)
03:00.0 SATA controller: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)
03:00.1 IDE interface: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)
05:02.0 Multimedia audio controller: Creative Labs SB Audigy LS
05:02.1 Input device controller: Creative Labs SB Audigy LS Game Port
05:03.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
05:04.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001 Gigabit Ethernet Controller (rev 14)


여러분도 애용해 보세요~


Tango 를 입은 OpenOffice

OpenOffice 가 2.2 버전 부터 드디어 Tango Icon 을 입었다. 마침 Gnome Journal 3월 판에서도 Tango Project 의 활발함을 담은 내용을 다뤘다.

사용자 삽입 이미지

Tango 를 입은 OOO 1


사용자 삽입 이미지

Tango 를 입은 OOO 3

사용자 삽입 이미지

Tango 를 입은 OOO 2


점점 멋져지는 Opensources 진영의 어플리케이션들의 행보가 기대된다!


Mplayer 를 버려도 될때가 왔다..

사용자 삽입 이미지

Totem 으로 재생한 환상의 커플



오늘 Gnome을 2.18 beta 로 올리며 이런 저런 프로그램들을 실행해 보았다. 그 중 나를 놀라게 한건 외형적으로는 전혀 변화 없어 보이는 Totem 이었다(gstreamer backend).

얼마 전까지 코덱문제, 자막문제 그리고 속도 문제 떄문에 mplayer 를 고집해 왔는데 이젠 mplayer 를 버려도 될떄가 온것 같다.

간만에 살펴본 Totem 은 ganadist 옹의 자막 패치로 자막이 깔끔히 나오며 ffmpeg 가 WMV9 를 지원하게 되면서 ffmpeg 플러그인을 사용하는 gstreamer 는 재생되지 않는 미디어 파일이 없게 되었다(win32codecs 를 쓰지 않고도 그리고 64비트에서도 잘 재생된다). 또한 최근판 totem 은 mplayer 수준의 탐색 속도를 보여준다.

mplayer 는 미디어 재생에 있어 훌륭하지만 부족한 GUI front-end, GnomeVFS 의 미지원 떄문에 아쉬웠는데 이제야 그놈도 제대로 된 미디어 플레이어를 가지게 된것 같다.


Linux 에서 DVICO FusionHDTV USB Gold 설치기

Beryl and HDTV

최근 HDTV 수신 카드를 구입했다. 제품명은 DVICO FusionHDTV USB Gold 이다.
인터넷 가입하고 난 후 받은 쇼핑몰 캐쉬로 요놈을 구입했다.

우선 구입전에 sangu 옹에게 Linux 에서 HDTV 볼 수 있 수 있는 놈을 추천해달라고 해 요놈을 추천받았다.
디자인이 나름대로 괜찮은데 사진이라도 찍어 올리고 싶지만 디카가 없는 관계로..(안습)

그럼 본론으로 들어가 위의 제품으로 Linux 에서 TV 를 보기 위해선 아래와 같이 한다..(How to install DVB 라는 문서를 바탕으로 설치했다.)

1.우선 /dev/dvb/adpater0 가 있는지 확인한다.

2.만약 없다면 firmware 를 설치 한다.

3.다음 링크 here 에서 자신의 TV 장비에 맞는 firmware 를 받아 배포판에 맞는 디렉토리 (/usr/lib/hotplug/firmware 혹은 /lib/firmware)에 복사해 넣자. 하지만 젠투에서는 다음과 같이 한다.

DVB_CARDS=”usb-bluebird” emerge linuxtv-dvb-firmware

DVB_CARDS 에다 emerge -vp 를 통해 확인한 적당한 이름을 넣어준다.

4. 그리고 mercurial 라는 버전 컨트롤러를 설치해 다음과 같이 소스를 다운 받는다.

hg clone http://linuxtv.org/hg/v4l-dvb

그리고

cd v4l-dvb
sudo make
sudo make install

젠투에서는 아래와 같이 한다.

emerge v4l-dvb-hg

5. 이제 TV 장비의 USB 를 다시 꽂아 보자. 그리고 /dev/dvb/adapter0 이 보인다면 성공!

6. 자 이제 서울에서의 HDTV 주파수는 sangu 옹의 위키에서 MPlayer 페이지를 참조하고 mplayer 통해 TV 를 볼 수 있다.

여러 도움을 준 sangu 옹에게 감사한다.


단축키를 마음대로 :: xbindkeys

멀티 부팅 없이 오직 Linux를 데스크탑을 쓴지 약 4년이 되어간다. Linux 를 쓰는 가장 큰 이유 중 하나는 재미있고 편리한 프로그램이 많다는것이다.

약 6개월 전쯤 우연히 kz 옹의 위키 를 둘러보다 보물을 발견했다. 그 보물은 다름 아닌 xbindkeys 였다. 이 프로그램은 단축키를 Linux의 command 와 매핑하게 해주었다. 예를 들면 alt 또는 control, 그리고 마우스의 조합등으로 만들어내는 단축키를 입력하면 Linux 의 command 가 실행되는 식이다. 또한 최근 많은 application 들이 지원하기 시작한 dbus(freedesktop 의 application 간 메시지 전달 시스템)를 같이 사용하면 command 만으로 불가능한 동작(예를 들면 beryl 에서 cube 를 왼쪽 혹은 오른쪽으로 돌리는 등) 이 가능했다.

우선 xbindkeys 의 사용을 위해선 너무 당연하지만 각 배포판에 맞는 패키지를 찾아 설치 한다. 그리고 첫 실행이라면 다음과 오류를 볼 수 있다.


c0d3h4ck@c0d3h4ck:~$ xbindkeys
Error : /home/c0d3h4ck/.xbindkeysrc not found or reading not allowed.
please, create one with ‘xbindkeys –defaults > /home/c0d3h4ck/.xbindkeysrc’.
or, if you want scheme configuration style,
with ‘xbindkeys –defaults-guile > /home/c0d3h4ck/.xbindkeysrc.scm’.

xbindkeys 는 실행 할떄 ~/.xbindkeysrc 의 찾는다. 하지만 첫 설치시에는 이 파일이 없으므로 위와 같은 에러를 출력한다. 따라서 에러문에서 보는 것 처럼 아래의 command 로 파일을 만든다.


$ xbindkeys –defaults > $HOME/.xbindkeysrc

그리고 $HOME/.xbindkeysrc 파일을 열어보면 매우 간단한 구조라는것을 알 수 있다.


“실행할 command”
단축키

단축키의 경우 키 코드를 넣어도 되지만 쉽게 넣을 수 도 있다.


“gnome-terminal”
control + alt + b:2

위의 예제는 내가 가장 먼저 추가한 설정으로써 control + alt 키와 함꼐 마우스 가운데 버튼을 누르면 터미널을 실행하는 내용이다.


“firefox”
control + alt + b:3

위의 내용은 control + alt 키와 함꼐 마우스 오른쪽 버튼을 누르면 firefox 의 새창을 띄우는 내용이다.
아마 다양한 단축키에 목말라 있던 사용자라면 지금 이 순간 수 많은 응용이 머리를 스칠 것이다.

참고로 나는 위의 예제에 보인 내용말고도 mp3 player 에서 다음 노래, 이전 노래 등으로 바꾸거나 메일 작성 창을 띄우는 용도 등으로 사용하고 있다.

참고로 beryl wiki에서는 dbus plugin을 이용한 다양한 팁을 위키에서 소개하고 있는데 약간의 여유가 있다면 쓸만한 단축키를 추가해보자.


Follow

Get every new post delivered to your Inbox.

Join 439 other followers