2011. 8. 13. 07:22

lspic 명령어를 사용하여 컴퓨터의 PIC 디바이스 정보 나열

$ lspic

PIC 하드웨어 항목나열

00:00.0 Host bridge: Intel Corporation 82865G/PE/P DRAM Controller/Host-Hub Interface (rev 02)

00:01.0 PCI bridge: Intel Corporation 82865G/PE/P PCI to AGP Controller (rev 02)

00:06.0 System peripheral: Intel Corporation 82865G/PE/P Processor to I/O Memory Interface (rev 02)

00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02)

$ lspci -v

더 자세한 정보화 함께 PCI 하드웨어 항목 나열

$ lspci -vv

더욱 자세한 정보와 함께 PCI 하드웨어 항목 나열

 

dmidecode 명령어를 사용하여 컴퓨터 하드웨어 컴포넌트 정보 표시.

$ sudo dmidecode | less

하드웨어 컴포넌트 나열

$ sudo dmidecode 2.7

SMBIOS 2.3 present.

50 structures occupying 1851 bytes.

Table at 0x000F9D30.

 

Handle 0x0000, DMI type 0, 20 bytes

BIOS Information

Vendor: American Megatrends Inc.

Version: 0EAS.4002

Release Date: 07/05/2005

Address: 0xF0000

Runtime Size: 64 kB

 

hdparm 명령어를 사용하여 하드웨어 정보와 연관된 정보를 변경 및 보기.

$ sudo hdparm /dev/sda

하드디스크 설정 표시(SATA or SCSI drive)

/dev/sda:

  multcount        = 16 (on)

  IO_support     =  1 (32-bit)

  readonly         =  0 (off)

  readahead     = 256 (on)

  geometry        = 9733/255/63, sectors = 156368016, start = 0


☞ 하드디스크의 기능 정보를 보는 것은 안전하지만, 일부러 설정을 변경하는 것은 하드디스크에 잠재적 위험.

Posted by devanix
2011. 8. 13. 07:04

♧ 현재 시스템에서 실행중인 커널이 무엇인지 확인.

$ uname -r                                                 /* 커널 릴리즈 이름 표시 */

2.6.38-10-generic

$ uname -a                                                 /* 가능한 모든 커널 정보 표시 */

Linux Xubun11 2.6.38-10-generic #46-Ubuntu SMP Tue Jun 28 15:05:41 UTC 2011 i686 i686 i386 GNU/Linux

 

♧ dmesg 명령어를 사용하여 커널 ring buffer 내용 표시.

~$ dmesg | less

[ 0.000000] Initializing cgroup subsys cpuset

[ 0.000000] Initializing cgroup subsys cpu

[ 0.000000] Linux version 2.6.38-10-generic (buildd@vernadsky) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) ) #46-Ubuntu SMP Tue Jun 28 15:05:41 UTC 2011 (Ubuntu 2.6.38-10.46-generic 2.6.38.7)

[ 0.000000] BIOS-provided physical RAM map:

[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)

…[중략]…

☞ 커널프로세스에 대한 다른 정보는 특히 /var/log 파일, 메시지 파일에서 찾을 수 있다.

 

♧ lsmod 명령어를 사용하여 로드된 모듈의 이름, 크기, 기타 모듈들이 어떻게 사용 되는지 출력.

$ lsmod

…[중략]…

snd_intel8x0 33213 3

snd_ac97_codec 105614 1 snd_intel8x0

ac97_bus 12642 1 snd_ac97_codec

snd_pcm 80042 2 snd_intel8x0,snd_ac97_codec

nouveau 621970 2

…[중략]…

tvaudio 32495 0

snd_seq_midi_event 14475 1 snd_seq_midi

tda7432 13042 0

msp3400 31504 0

snd_seq 51291 2 snd_seq_midi,snd_seq_midi_event

bttv 112771 0

…[중략]…

 

♧ modinfo 명령어를 사용하여 특정 모듈에 관한 더 많은 정보 찾기.

$ modinfo snd

filename: /lib/modules/2.6.38-10-generic/kernel/sound/core/snd.ko

alias: char-major-116-*

license: GPL

description: Advanced Linux Sound Architecture driver for soundcards.

author: Jaroslav Kysela <perex@perex.cz>

license: GPL

description: Jack detection support for ALSA

author: Mark Brown <broonie@opensource.wolfsonmicro.com>

srcversion: 01A2250C004B4DB5F156B0C

depends: soundcore

vermagic: 2.6.38-10-generic SMP mod_unload modversions 686

parm: slots:Module names assigned to the slots. (array of charp)

parm: major:Major # for sound driver. (int)

parm: cards_limit:Count of auto-loadable soundcards. (int)

 

♧ modprobe 명령어를 사용하여 적재 모듈을 추가하거나 제거.

$ modprobe -l | grep c-qcam

kernel/drivers/media/video/c-qcam.ko

c-qcam을 찾아서, 모든 모듈 나열

$ sudo modprobe c-qcam

QuickCam 컬라 QuickCam 모듈 로드

$ sudo modprobe -r c-qcam

QuickCam 컬라 QuickCam 모듈 제거

 

♧ sysctl 명령어를 사용하여 실행중인 시스템의 커널 파라미터를 제어.

$ sudo sysctl -a | less

kernel.sched_time_avg = 1000

kernel.sched_shares_window = 10000000

kernel.timer_migration = 1

모든 커널 파라미터 나열

$ sudo sysctl kernel.hostname

특정 파라미터 값 나열

$sudo sysctl -p

Load parms from /etc/sysctl.conf

$sudo sysctl -w kernel.hostname=joe

kernel.hostname 값 설정

/etc/sysctl.conf파일에 영구적으로 파라미터를 추가할 수 있다.

그래서 그룹이나 각 재부팅시 로드할 수 있다.

Posted by devanix
2011. 8. 13. 06:19

♧ 커널이 시작된후에, init 프로세스를 시스템에서 제어한다.

init 프로세스는 시스템에서 처음으로 실행하는 프로세스(PID 1), /etc/inittab 파일 내용을

기반으로 직접 다른 프로세스를 시작, 기본 런 레벨, init 스크립트의 런 레벨 싱행 설정을 한다.

 

기본 런 레벨은 일반적으로 데스크탑 시스템은 5, 서버시스템은 3으로 설정.

대부분 리눅스 관리자는 기본적인 기능을 혼자하고 서비스가 선택된 레벨에서 켜져있는지

꺼져있는지 초점을 맞춘다. 우분투(Ubuntu)에서 런 레벨 스크립트를 시작하는 메커니즘과

비슷한 시스템은 System V Init 기능, AT&T의 유닉스 System V 시스템을 기반으로 한다.

우분투(Ubuntu)는 init 시스템보다 upstart 시스템을 사용하지만

init 혹은 telinit 명령어로 런 레벨을 여전히 변경한다.

 

▶ 시스템 초기화 스크립트 및 런 레벨 변경 작업:

$ runlevel

N 2

현재와 이전 런 레벨 표시

$ sudo init 5

현재 런 레벨 5(X 데스크탑)로 변경

$ sudo init q

파일의 변경 프로세스 시작 혹은 중지

$ sudo /etc/init.d/ntp start

Starting NTP server ntpd

즉시 Samba 서비스 시작

 

◎ 각각의 서비스가 /etc/init.d 디렉토리에 있는 쉘 스크립트가 함께 제공 되며,

각각의 서비스는 시작 혹은 정지 옵션을 지원한다.

 

▶ service의 시작과 중시 서비스 사용법

$ /etc/init.d/ntp

Usage: /etc/init.d/ntp {start|stop|restart|try-restart|…}

옵션이 없으면 사용법 출력.

$ sudo /etc/init.d/ntp restart Restart

* Stopping NTP server ntpd

* Starting NTP server ntpd

NTP 서비스 재시작(처음에 정지, 그다 음 시작)

[OK]

[OK]

$ sudo /etc/init.d/ntp try-restart Restart

* Stopping NTP server ntpd

* Starting NTP server ntpd

NTP 서비스 재시작(이미 실행중)

[OK]

[OK]

$ sudo /etc/init.d/ntp force-reload

* Stopping NTP server ntpd

* Starting NTP server ntpd

설정파일 설정 다시 읽어들임

[OK]

[OK]

$ sudo /etc/init.d/ntp status

* NTP server is running.

NTP 서비스가 실행중인 검사(smbd)

$ sudo /etc/init.d/ntp stop

* Stopping NTP server ntpd

NTP 서비스 정지

[OK]

/etc/init.d 안에 포함된 init 스크립트가 이러한 방법으로 시작하지만

모든 스크립트가 보여주는 것처럼 지원하지 않는다.

 

 

init 0(셧다운), init 6(재부팅)을 포함하여, 언제든지 런 레벨을 변경하기 위해 init 명령어를 사용할 수 있지만,

리눅스 정지를 위한 구체적인 명령어를 사용.

halt, reboot, poweroff, shutdown 같은 명령어의 이점은 셧다운 하기 전에 일부 기능을 멈추도록 하는 옵션이 포함.

$ sudo reboot

컴퓨터 재부팅

$ sudo halt -n

셧다운 하기 전에 하드드라이브에서 동기화를 하지 마라.

$ sudo halt -h

중단하기 전에 대기 모드에서 하드드라이브를 써라.

$ sudo shutdown 10

유저에게 경고 후 10분 있다가 셧다운

$ sudo shutdown -r 10

유저에게 경고 후 10분 있다가 재부팅

$ sudo shutdown 10 'Bye!'

셧다운 전에 유저에게 사용자 정의메시지를 보냄

 

Posted by devanix
2011. 8. 13. 04:07

[ pgrep으로 실행중인 프로세스 찾기 ]

pgrep을 사용하여 가장 기본적인 형태로, 이름을(또는 일부) 검색.

 

▶ 기본적인 사용 예제:

$ pgrep init

1

2689

프로세스 ID를 보여줌

$ pgrep -l init

1          init

2689   xinit

-l 옵션 : 프로세스 이름을 보여줌

$ pgrep -lu devanix

2551    sshd

2552    bash

2803    vim

-u 옵션 : 유저와 관련된 프로세스 찾기

 

▶ ps 와 pgrep 결합 사용 예:

/* sshd 및 실행에 대한 검색의 ps(간단하게) */

$ ps -p `pgrep sshd`

  PID     TTY      STAT   TIME    COMMAND

  626    ?           Ss        0:00     /usr/sbin/sshd -D

 4000   ?          Ss        0:00     sshd: devanix [priv]

 4110   ?          S           0:01     sshd: devanix@pts/1

 

/* sshd 및 실행에 대한 검색의 ps(전체) */

$ ps -fp $(pgrep sshd)

UID         PID      PPID   C    STIME  TTY      STAT   TIME    CMD

root         626      1         0     Aug12   ?           Ss       0:00     /usr/sbin/sshd -D

root         4000    626    0    01:59     ?           Ss       0:00     sshd: devanix [priv]

devanix   4110   4000  0    01:59     ?           S         0:01     sshd: devanix@pts/1


 

/* firefox 검색, 우선순위 향상 */

# sudo renice -5 $(pgrep firefox)

20522:  old  priority 0, new priority -5

20527:  old  priority 0, new priority -5

☞ 이러한 방법으로 입력한 프로세스 IDpgrep을 결합할 수 있다.

 

 

 

 

[ fuser로 실행중인 프로세스 찾기 ]

fuser명령은 프로세스의 파일 혹은 socket을 찾는데 사용.

fuser 명령은 마운트된 파일시스템의(로컬 하드디스크 혹은 삼바 공유와 같은)프로세스를 찾는데 유용.

 

▶ /boot와 연관 되서 실행중인 프로세스 ID 출력

/* boot를 열고 프로세스의 자세한 정보 출력 */

$ fuser -mauv /boot

                        USER          PID        ACCESS    COMMAND

/boot:               root            kernel     mount         (root)/

                       devanix       990          Frce.           (devanix)sh

                       devanix      1092        Frce.            (devanix)ibus-daemon

                       devanix      1105        Frce.            (devanix)ibus-gconf

…[중략]…

 

/* boot 프로세스의 부모 ID를 보여줌 */

$ fuser /boot

/boot:       19760c 29396c

/* boot 프로세스의 모든 ID를 보여줌 */

$ fuser -m /boot

/boot:        3853c 19760c 28171c 29396c 29252c 29255c

/* boot 프로세스의 ID/유저를 보여줌 */

$ fuser -u /boot

/boot:         19760c(root) 29396c(root) 29252c(root) 29255c(root)

☞ 파일 오픈, 쉘 오픈 혹은 /boot안의 현재 디렉토리와 자식 프로세스의 쉘을 오픈할 수 있다.

(-m 옵션) : 파일시스템 또는 블록장치를 사용하는 모든 프로세스 출력.

(-a 옵션) : 모든 프로세스 출력.

(-u 옵션) : 각 유저의 프로세스를 표시.

(-v 옵션) : 정보 출력.

 

▶ 파일시스템의 파일을 오픈한 모든 프로세스에 시그널을 보냄(kill)

/* boot 파일 오픈의 모든 프로세스를 kill(SIGKILL) */

$ sudo fuser -k /boot

/* 사용 가능한 시그널 목록 */

$ fuser -l

HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM

STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS

UNUSED

/* boot 오픈된 모든 프로세스에 HUP 시그널을 보냄 */

$ sudo fuser -k -HUP /boot

 

 

 

 

Posted by devanix
2011. 8. 13. 03:00

▣ ps의 칼럼 출력 선택과 보기

[ 옵 션 ]

[ 칼럼 헤드 ]

[ 설 명 ]

%cpu 

%CPU 

프로세스가 사용하는 CPU 점유율

%mem 

%MEM 

프로세스가 사용하는 메모리 점유율

args 

COMMAND 

명령어와 모든 인수를 문자열로 출력

bsdstart 

START 

시작된 시간 : HH:MM or Mon Day

bsdtime 

TIME 

총 CPU 시간 (사용자 및 시스템)

comm

COMMAND 

사용자가 실행한 명령어

cp

CP 

10분1 CPU 사용률

cputime 

TIME 

총 CPU시간 [DD-]HH:MM:SS 형식

egid 

EGID 

이펙티브 그룹ID 프로세스(정수)

egroup 

EGROUP 

이펙티브 그룹ID 프로세스(이름)

etime 

ELAPSED 

프로세스가 실행된 소요시간 출력 [[DD-]HH:]MM:SS 형식

euid 

EUID 

이펙티브 유저ID 프로세스(정수)

euser 

EUSER 

이펙티브 유저ID 프로세스(이름)

fgid 

FGID 

파일시스템 액세스 그룹ID(정수)

fgroup 

FGRUOP 

파일시스템 액세스 그룹ID(이름)

fname 

COMMAND 

명령어의 처음 8문자

fuid 

FUID 

파일시스템 액세스 유저ID(정수)

fuser 

FUSER 

파일시스템 액세스 유저ID(이름)

lstart 

STARTED 

날짜 및 시간 명령을 시작

nice 

NI 

우선순위, 19부터 0까지

pgid 

PGID 

프로세스의 프로세스 그룹ID

pid 

PID 

프로세스의 프로세스 ID 넘버

ppid 

PPID 

프로세스의 부모프로세스 ID

psr

PSR

할당된 프로세스

rgid 

RGID 

실제 그룹ID(정수)

rgourp 

RGOURP 

실제 그룹(이름)

rss 

RSS 

실제 메모리 사용량

rtprio 

RTPRIO 

리얼타임 우선순위

ruid 

RUID 

실제 유저ID(정수)

ruser 

RUSER 

실제 유저(이름)

s 

S 

수면, no interrupt 인터럽트, R:running 실행중, S:sleep

수면, can interrupt 인터럽트, T:stopped 정지, W:paping

sess 

SESS 

세션 지도자의 세션ID

sgio_p

P 

현재 실행중의 프로세스의 프로세서

size 

SZ 

프로세스가 사용하는 자료와 스택크기

start 

STARTED 

프로세스가 시작된 시간 : HH:MM:SS 혹은 Month Day

start_time

START 

프로세스가 시작된 시간 : HH:MM:SS 혹은 Month Day

stat

STAT 

실행되고 있는 프로세스 상태

sz 

SZ 

프로세스의 이미지 크기(물리적 페이지)

tname 

TTY 

tty(터미널) 제어

user 

USER 

이펙티브 유저ID 프로세스(이름)

vsize 

VSZ 

프로세스 가상 메모리(1024 바이트)

 

 

[ ps를 사용하여 활성화 프로세스 보기 ]

♧ 리눅스 시스템은(Unix 계열 시스템뿐만 아니라, BSD, Mac OS X, 여러 가지 리눅스) ps 명령어가 포함.

세월이 흐르면서 많은 다른 버전 및 약간 다른 옵션을 제공하는 ps가 나왔다.

처음에는 Unix 시스템의 ps 날짜 때문에 몇 가지 옵션들을 비표준 방식으로 지원했다.

 

▶ 현재 사용자를 위해 프로세스 실행을 표시할 수 있는 몇 가지 예:

$ ps

현재 쉘에서 현재 프로세스 리스트

$ ps -u devanix

devanix의 모든 프로세스 보여줌 (간단 출력)

$ ps -u devanix u

devanix의 모든 프로세스 보여줌 (CPU/MEM)

$ ps -fu devanix

devanix의 모든 프로세스 보여줌 (PPID)

$ ps -Fu devanix

devanix의 모든 프로세스 보여줌 (SZ/PSR)

 

▶ 현재 시스템에서 실행중인 모든 프로세스에 대한 출력 예:

$ ps -e

모든 실행 프로세스를 보여줌

$ ps -el

긴 목록으로 모든 실행 프로세스를 보여줌

$ ps -ef

전체 형식 목록으로 모든 실행 프로세스를 보여줌

$ ps -eF

전체 형식 목록을 추가하여 모든 실행 프로세스를 보여줌

$ ps ax

간단하게 모든 실행 프로세스를 보여줌 [BSD 스타일]

$ ps aux

긴 목록으로 모든 실행 프로세스를 보여줌 [BSD 스타일]

$ ps auwx

다양한 형식의 긴 목록으로 모든 실행 프로세스를 보여줌 [BSD 스타일]

 

▶ 계층적 프로세스 (tree 형식) :

$ ps -ejH

프로세스/세션 ID를 계층적으로 보여줌

$ ps axjf

BSD 스타일 출력하여 계층적 프로세스를 보여줌

$ ps -ef --forest

forest 형식에서 계층적 프로세스를 보여줌

$ pstree

tree 형식으로 알파벳순으로 프로세스를 보여줌

 

▶ 사용자 칼럼 지정 보기의 몇 가지 예: (-o 옵션 : 사용자 포맷 지정)

$ ps -eo ppid,user,%mem,size,vsize,comm --sort=-size

정렬

$ ps -eo ppid,user,bsdstart,bsdtime,%cpu,args --sort=-%cpu

사용자 CPU 정렬

$ ps -eo ppid,user,nice,cputime,args --sort=-nice

낮은 우선순위 정렬

$ ps -eo ppid,user,stat,tname,sess,cputime,args --sort=user

유저 정렬

☞ --sort 옵션 : 데이터 정렬

 

▷ ps 명령의 몇 가지 다른 예:

$ ps -C httpd

실행중인 httpd 프로세스 표시

$ ps -p 5413 -o pid,ppid,bsdtime,args 

정보 표시

$ ps -U devanix, chris -o pid,ruser,tty,stat,args 

두 명 유저 정보 보여줌

 

 

 

 

[ top을 사용하여 활성화 프로세스 보기 ]

♧ top 명령어는 시스템에서 지속적으로 업데이트하여 실행중인 프로세스를 보여준다.

 

▶ 실행중인 프로세스를 지속적으로 표시하는데 사용할 수 있는 다른 옵션 예:

$ top -d 5

5초마다 지연하여 업데이트(기본 3초)

$ top -u devanix

단지 devanix 유저만 볼 수 있음

$ top -p 192,2690

190과 2690 프로세스만 디스플레이

$ top -n 10

종료하기 전보다 10배 화면 리프레시

$ top -b

결과를 텍스트 모드로 보여주기 때문에 파싱을 하거나 스크립트에서 접근

 

▶ 실행될 때 다른 방법으로 프로세스를 업데이트 및 정렬:

<space> or <Enter>

즉시 프로세스 목록 업데이트

<Shift+n>

PID로 정렬

<Shift+p>

CPU usage로 정렬

<Shift+m>

메모리 usage로 정렬

<Shift+t>

CPU 시간별로 정렬

<

왼쪽으로 정렬

>

오른쪽으로 정렬

f

원하는 칼럼 목록을 선택

d , s

리프레시 설정

u

유저 지정 (선택한 유저 소유의 프로세스만 표시)

k

실행중인 프로세스에 시그널(kill) 보냄.

n , #

프로세스 우선순위 높게 혹은 낮게(음수:높게, 양수: 낮게) 설정

 

 

Posted by devanix
2011. 8. 12. 23:58

[ ssh를 사용하여 tar아카이브 백업 ]

♧ OpenSSH(www.ppenssh.org)는 안전한 원격 로그인, 원격 실행, 그리고 네트워크 인터페이스를 통해

원격지로 파일을 복사할 수 있는 툴들을 제공.

 

▶ 원격 시스템의 파일을 → 로컬 시스템으로 복사.

$ ssh devanix@server1 'tar cf - myfile*' | tar xvf -

devanix@server1's password: ******

myfile1

myfile2

☞ 원격지 시스템에서 실행한 tar 명령어(파일을 압축된 아카이브로 생성)의 표준출력 스트림을

파이프로 보내고 ssh 명령어를 통해 로컬시스템으로 전달한 뒤 로컬의 tar 명령어로 풀어냄.

(로컬 디렉토리에 동일한 파일이 있을 경우 덮어쓰기 함)

 

▷ 로컬 시스템의 파일을 → 원격 시스템으로 복사.

$ tar cf - myfile* | ssh devanix@server1 'cd /data; tar xvf -'

devanix@server1's password: ******

myfile1

myfile2

☞ 원격지 시스템에 있는 특정 디렉토리로 이동하기 위해 cd명령 추가.

 

▶ 원격 시스템에서 전송받은 압축 파일을 풀어내지 않고 tgz 파일로 저장.

$ ssh devanix@server1 'tar czf - myfile*' | cat > myfiles.tgz

server1devanix사용자의 홈 디렉토리에서 myfile로 시작하는 모든 파일을 압축한 뒤

로컬 시스템에 myfiles.tgz로 저장.

 

▷ 로컬 시스템의 압축한 파일을 원격 시스템에 tgz파일로 전송.

$ tar czf - myfile* | ssh devanix@server1 'cat > myfiles.tgz'

 

 

 

 

[ rsync를 사용하여 파일 백업]

rsync는 체크섬을 사용하여 원격지 파일과 로컬 파일을 작은 블록 단위로 비교해 백업을 수행.

 

rsync 명령어는 원격 쉘 프로그램인 ssh를 이용하거나

원격 서버에서 실행되는 rsyncd데몬을 통해 동작할 수 있다.

 

▶ ssh를 통해 원격 디렉토리와 동일한 로컬 디렉토리(미러)를 만드는 rsync 예제 :

$ rsync -avz --delete devanix@server1:/home/devanix/data devadata/

(-a 옵션) : 원격지 디렉토리 이하의 모든 파일을 재귀적으로 복사.

(-v옵션) : 명령어가 실행되는 동안 보다 상세한 정보 출력.

(-z 옵션) : 압축 옵션.

(--delete) : rsync 원격 시스템에 존재하지 않은 파일은 로컬에서도 삭제.

(rsync는 기본적으로 변경된 파일만 백업하기 때문에, 원격지에서 파일이 삭제된 경우, 아무런 조치를

취하지 않는다. 따라서 --delete 옵션을 사용해 더 이상 백업할 필요가 없는 파일을 삭제해 준다)

 

▶ 매주 rsync를 이용하여 백업.

# mkdir /var/backups

# rsync --delete --backup \

--backup-dir=/var/backups/backup-`date +%A` \

-avz devanix@server1:/home/devanix/data/ \

/var/backups/current-backup/

☞ 원격시스템 server1/home/devanix/data 디렉토리의 모든 파일이

로컬 디렉토리 /var/backups/current-backup으로 복사.

☞ 당일 변경된 모든 파일은 /var/backups/backup-Monday와 같은 형태로 복사.

☞ 한 주 동안, 과거 7일간의 변경사항이 반영된 7개의 디렉토리가 생성 된다.

 

▶ 하드링크를 이용해 백업.

# rm -rf /var/backups/backup-old/

# mv /var/backups/backup-current/ /var/backups/backup-old/

# rsync --delete --link-dest=/var/backups/backup-old -avz \

devanix@server1:/home/devanix/data/ /var/backups/backup-current/

☞ 지난 backup-old 디렉토리 내용을 지우고,

☞ 기존의 backup-current 디렉토리 백업내용을 backup-old 디렉토리로 이동.

☞ 이렇게 2주가 지난 backup-old 디렉토리는 지난주 백업된 backup-current로 대체될 것이다.

☞ 새로운 백업은 rsync--link-dest 옵션과 함께 실행해 만든다.

원격시스템 server1data/ 디렉토리에서 새로 백업한 파일이 이전 백업(이제는 backup-old에 저장)과

동일한 경우, 해당 파일을 backup-currentbackup-old 디렉토리 간에 하드링크를 생성.

 

▷ 두 디렉토리간 하드링크를 통해 많은 디스크 공간을 절약할 수 있다.

만약 양쪽 디렉토리에 file1.txt 파일을 가지고 있다면, 다음 명령어를 통해 해당 파일의 inode가

하나의 동일한 물리적 파일을 향하는 것을 확인할 수 있다.

$ ls -I /var/backups/backup*/file1.txt

260761 /var/backups/backup-current/file1.txt

260761 /var/backups/backup-old/file1.txt

 

 

Posted by devanix
2011. 8. 11. 02:27

 

 

 

 

 

 

 

 

 

 

tar(tape archiver)는 초기 유닉스 시스템에서부터 사용.

지금은 마그네틱 테이프가 일반적이지 않지만, tar는 여전히

아카이브 파일을 생성하고 여러 미디어를 통해 배포하는데

선호되는 명령어이다.

 

 

◈ [ 기능 옵션 ] - 반드시 아래 옵션들 중 하나가 들어가야 함

옵 션 [ ,긴 옵션 ]

설 명

-c, --create

새로운 아카이브를 만든다

-x, --extract

아카이브 파일을 풀어준다

-d, --diff

아카이브 파일을 비교하여 다른 점을 찾는다

-u, --update

아카이브 파일에 저장된 사본보다 새로운 파일만 덧붙여 업데이트

-A, --catenate

하나의 tar 파일에 다른 파일을 병합

-r, --append

아카이브 파일 끝에 파일을 덧붙여 추가

-t, --list

아카이브 파일 내용목록을 보여준다

--delete

기존 아카이브 파일에서 삭제 (자기 테이프에 쓰면 안됨X)

 

[ 부가적인 옵션 ]

옵 션 [ ,긴 옵션 ]

설 명

-f, --file ARCHIVE

지정한 아카이브파일에 읽기 ∙ 쓰기를 실행. (필수)

" - " 는 표준입력에서 데이터를 받거나 표준출력으로 데이터를 쓴다.

-v, --verbose

처리중인 과정을 자세히 출력

-p

모든 퍼미션 정보를 유지.

-j, --bzip2

bzip2 사용하여 파일 압축/풀기

-z, --[un]gzip

gzip 사용하여 파일 압축/풀기

-Z, --[un]compress

compress 사용하여 파일 압축/풀기

--use-compress-program PROG

PROG 로 지정된 압축툴로 아카이브 파일을 다시 처리

( PROG는 반드시 -d(압축 해제)를 처리해야 함)

 

 

tar는 명령어에 옵션을 넣어주는 표준적인 방법이 정해지기 전에 만들어진 명령이다.

지금은 tar에서도 대시(-)로 시작하는 옵션을 사용할 수 있지만 항상 필요한 것은 아니다.

때문에 옵션을 의미하는 문자가 없는 tar xvf와 같은 명령어도 볼 수 있다.

 

 

tar [ .tar ] - 기본 사용 예

tar는 기본적으로 압축은 하지 않고 단순히 하나의 파일(.tar)로 묶음.

 

▶ tar 아카이브 파일 생성(묶기) : (c옵션)

$ tar cvf archive.tar *.txt

aaa.txt

bbb.txt

ccc.txt

 

▶ tar 아카이브 파일 풀기 : (x옵션)

$ tar xvf archive.tar

aaa.txt

bbb.txt

ccc.txt

 

▶ tar 아카이브 파일 목록 보기 : (t옵션)

$ tar tvf archive.tar

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 aaa.txt

-rw-r--r-- devanix/devanix 16 2011-08-10 22:42 bbb.txt

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 ccc.txt

 

▶ tar 아카이브 파일에 다른 파일을 병합 : (A 옵션)

$ tar -Af archive1.tar archive2.tar

$ tar tvf archive1.tar

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 aaa.txt

-rw-r--r-- devanix/devanix 16 2011-08-10 22:42 bbb.txt

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 ccc.txt

-rw-r--r-- devanix/devanix 40 2011-08-10 23:55 ddd.txt

-rw-r--r-- devanix/devanix 35 2011-08-10 23:55 eee.txt

archive2.tar 파일이 archive1.tar 아카이브에 추가된다.

 

▶ tar 아카이브에서 파일 삭제 : (--delete)

$ tar --delete ddd.txt eee.txt -f archive1.tar

$ tar tvf archive1.tar

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 aaa.txt

-rw-r--r-- devanix/devanix 16 2011-08-10 22:42 bbb.txt

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 ccc.txt

 

▶ tar 아카이브에 하나 이상의 파일 추가 : (r 옵션)

$ tar rvf archive1.tar ddd.txt eee.txt

ddd.txt

eee.txt

ddd.txt, eee.txtarchive1.tar 아카이브 파일에 추가 된다.

 

 

 

 

tar + 타 압축 필터(gzip, bzip2, ...)

♧ tar + gzip (z 옵션)

tar로 하나의 파일로 묶고 gzip으로 압축하는 과정을 한번에 수행.

tar+gzip확장자 : [ .tar.gz | .tar.z | .tgz ]

 

▶ tar + gzip 아카이브 파일 압축 생성 : (.tar.gz)

$ tar czvf archive.tar.gz *.txt

aaa.txt

bbb.txt

ccc.txt

▷ z옵션이 지원하지 않는 경우 :

$ tar cvf - *.txt | gzip -c > archive.tar.gz

tar로 하나의 아카이브 파일로 묶고(.tar) gzip로 압축(.gz) 한다.

 

▶ tar + gzip 아카이브 압축 파일 풀기 : (.tar.gz)

$ tar xzvf archive.tar.gz

aaa.txt

bbb.txt

ccc.txt

▷ z옵션이 지원하지 않는 경우 :

$ gunzip -c archive.tar.gz | tar xvf -

gunzip으로 압축 파일을 풀고(.gz) tar로 나머지 아카이브 파일 풀기(.tar)

 

 

♧ tar + bzip2 (j 옵션)

tar로 하나의 파일로 묶고 bzip2으로 압축하는 과정을 한번에 수행.

tar+bzip2확장자 : [ .tar.bz2 ]

 

▶ 압축 생성 & 해제 역시 위의 예와 동일하나 해당 압축 필터 사용 옵션으로 변경 한다.

/* 아카이브 압축 생성 */

$ tar cjvf archive.tar.bz2 *.txt

/* 아카이브 압축 풀기 */

$ tar xjvf archive.tar.bz2

 

♧ tar + lzop (--use-compress-progarm 옵션)

--use-compress-program옵션 사용하여 lzop 압축 툴 사용.

⇒ 해당 lzop 압축 유틸은 조금 덜 통합된 tar이다.

lzop를 사용하기 전에 lzop 패키지를 먼저 인스톨 해야 한다.

tar+lzop확장자 : [ .tar.lzo ]

 

▶ tar+lzop 압축 & 해제 사용

/* 아카이브 압축 생성 */

$ tar --use-compress-program=lzop -cf archive.tar.lzo *.txt

/* 아카이브 압축 풀기 */

$ tar --use-compress-program=lzop -xf archive.tar.lzo

 

 

※ 다른 압축 파일 역시 사용 방법은 다 비슷하므로 file 명령을 사용하여 압축 파일의 종류를 먼저 구분한다.

$ file archive.tgz

archive.tgz: gzip compressed data, from Unix, …

$ file archive.tar.bz2

archi.tar.bz2: bzip2 compressed data, block size = 900k

$ file archive.tar.lzo

archive.tar.lzo: lzop compressed data - version 1.020, LZO1X-1, os: Unix

 

 

 

Posted by devanix
2011. 8. 10. 02:52

♧ 리눅스에서는 윈도우에서 사용하는 scandisk 유틸리티와 같은

물리적인 수준에서 배드블록을 검사하기 위해 badblocks 명령어를 사용한다.

그리고 fsck 명령어를 사용해 논리적인 수준에서 파일시스템의 오류를 검사할 수도 있다.

 

■ badblocks - 장치의 배드블럭을 검색

badblocks [ -b 블록크기 ] [ -o 출력파일 ] [ -v ] [ -w ]

 

◈ [ 옵션 ]

옵 션

설 명

-b 블록크기

블록크기를 바이트 수로 나타냄 (기본값 : 1024 bytes)

-o 파일명

지정한 파일에 배드 블록의 리스트 기록

-v

자세한 출력 모드

-e 최대블록개수

점검을 멈출 최대 블록 개수 (0이면 지정된 범위 까지 점검)

-p num_passes

지정된 숫자 만큼 디스크 스캔 반복.

-w

읽기/쓰기 모드 에서 배드블록을 검사 (-n 옵션과 함께 사용 X, 상호 배타적임)

-n

비-파괴 읽고/쓰기 모드 ( -w옵션과 함께 사용 X, 상호 배타적임)

-s

검사 진행 과정 표시

 

 

badblocks 명령의 일반적인 사용 예:

 

▶ -v 옵션 : 자세한 정보 출력과 함께 기본적인 사용

$ sudo badblocks -v /dev/sdb1

Checking blocks 0 to 1044192

Checking for bad blocks (read-only test): done

Pass completed, 0 bad blocks found.

 

▶ 비-파괴 모드로 배드블록을 검사.

$ sudo badblocks -vsn /dev/sdb1

Checking for bad blocks in non-destructive read-write mode

From block 0 to 1044192

Checking for bad blocks (non-destructive read-write test)

Testing with random pattern: 12.88% done, 0:05 elapsed

☞ 기본적으로, 배드블록 검사는 읽기전용 모드에서 수행하는 것이 안전하다.

비-파괴(non-destructive) 읽고/쓰기 검사는 매우 느리지만

디바이스에 저장된 데이터의 손실 없이 검사할 수 있는 가장 좋은 방법이다.

 

▶ 읽기/쓰기 모드 검사. ( 경고 : 데이터가 파괴될 수 있음 )

$ sudo badblocks -vsw /dev/sdb1

Checking for bad blocks in read-write mode

From block 0 to 1044192

Testing with pattern 0xaa: done

Reading and comparing: done

Testing with pattern 0x55: done

Reading and comparing: done

Testing with pattern 0xff: done

Reading and comparing: done

Testing with pattern 0x00: done

Reading and comparing: done

Pass completed, 0 bad blocks found.

☞ 읽기/쓰기 모드에서 배드블록을 검사하는 것으로 빠르게 검사할 수는 있지만 데이터가 파괴 된다.

 

▶ 다수의 배드블록 검사 수행

$ sudo badblocks -vsnp 2 /dev/sdb1

☞ 디스크 품질을 검사하고, 초기 고장률을 낮추기 위한 테스트용으로 사용.

 

 

■ fcsk - 리눅스 파일시스템을 검사

fsck 명령어는 특정 파일시스템 유형에 사용되는 검사 유틸리티의 프론트엔드 역할을 수행.

 

fsck [ -AVRTNP ] [ -s ] [ -t 파일시스템유형 ] [ 파일시스템옵션 ] 파일시스템 [ ... ]

 

◈ [ 옵션 ]

옵 션

설 명

-A

/etc/fstab 파일에 표시된 모든 파일시스템을 한 번 씩 모두 점검.

-R

-A 플래그와 같이 사용될 때 루트 파일시스템은 제외

-T

시작할 때 버전정보를 출력하지 않음

-V

자세한 출력 수행

-N

실행하지는 말고 어떤 작업을 할 것인지만 보여줌.

 

 

fsck 명령의 일반적인 사용 예:

 

▶ 파일시스템 검사 (-TV : 자세한 출력 및 버전 출력 방지 옵션)

$ sudo fsck -TV /dev/sdb1

[/sbin/fsck.ext4 (1) -- /dev/sdb1] fsck.ext4 /dev/sdb1

e2fsck 1.41.14 (22-Dec-2010)

/dev/sdb1 is mounted.

 

WARNING!!! The filesystem is mounted. If you continue you ***WILL***

cause ***SEVERE*** filesystem damage.

 

Do you really want to continue (y/n)? yes

 

/dev/sdb1: 저널 복구중

/dev/sdb1: clean, 11/65280 files, 8523/261048 blocks

 

▷ 검사 수행 도중 문제가 발생하면, 문제를 수정할 것인지 사용자에게 물어보는데

-y옵션을 추가하여 모든 질문에 대해 yes로 답변하도록 할 수 있다.

$ sudo fsck -TVy /dev/sdb1

 

 

Posted by devanix