2011. 8. 7. 23:48

일시스템은 파일, 디렉토리, 디바이스, 그리고 리눅스 시스템을 구성하는 다른 요소들에

대한 구조적 체계를 제공한다. 리눅스는 다양한 파일시스템 유형을 지원할 뿐만 아니라,

이 파일시스템으로 구성되어 있는 다양한 미디어(하드디스크, CD, USB 디스크, ZIP 드라이브 등) 역시 지원.

 

디스크 파티션과 이들 파티션에 파일시스템을 생성하고 관리하는 작업은 리눅스 시스템 관리에 있어

가장 핵심적인 작업 가운데 하나이다. 파일시스템에 문제가 생길 경우, 컴퓨터 하드디스크 또는

usb 디스크 같은 이동식 저장장치에 저장되어 있는 중요한 데이터를 잃을 가능성이 아주 높기 때문이다.

 

▷ 리눅스에서 요구하는 기본적 파일시스템 환경을 위한 세 개의 파티션 구성

- 부트로더 및 리눅스커널을 저장하는 부트 파티션,

- 루트 파일시스템을 위한 파티션

- 스왑 파티션(RAM에 데이터를 저장할 공간이 부족할 경우 사용)

(3 개의 파티션으로 나누는 것은 항상 이상적인 형태는 아니고, 시스템의 사용목적과 조건에 따라 달라질 수 있음)

 

 

▶ 리눅스에서 지원하고 있는 대표적인 파일시스템 유형들

[ 파일시스템 유형 ]

[ 설 명 ]

ext2

ext3 파일시스템이 개발되기 이전 버전의 파일시스템으로,

(저널링 기능은 제공하지 않음)

ext3

리눅스에서 일반적으로 사용되고 있는 파일시스템으로, 안전한 데이터

관리와 비정상적인 종료 후에 신속하게 재부팅하기 위한 저널링 기능 지원

iso9660

High Sierra 파일시스템(CD-ROM의 초기 표준으로 사용)에 기초한

파일시스템으로, 로그 파일 이름과 다른 정보 (파일 퍼미션, 소유권, 링크)를

지원하기 위한 Rock Ridge 확장을 포함하고 있다.

현재 CD-ROM의 표준 파일 시스템.

jffs2

USB 디스크와 같은 플래시 드라이브를 효과적으로 이용할 수 있도록

고안된 저널링 플래시 파일시스템(JFS)의 두번째 버전(JFFS2).

jfs

IBS OS/2 워프 운영체제에 사용되었던 파일시스템으로,

대용량의 파일시스템과 고성능을 요하는 환경에 적합하도록 개량.

msdos

MS-DOS 파일시스템.

플로피디스크와 같이 오래된 MS-DOS 파일시스템을 마운트할 때 사용.

ntfs

윈도우에서 사용하는 파일시스템의 하나로, 윈도우 시스템

(다중 부팅 환경 또는 이동식 드라이브 등)과 파일을 공유해야 할 때 유용.

ReiserFS

SUSE, Slackware와 다른 리눅스 시스템에서 기본으로 사용하고 있는

저널링 파일시스템.

squashfs

압축되고, 읽기전용의 파일시스템으로 많은 리눅스 라이브CD에서 사용.

swap

데이터가 넘쳐 RAM에 여유가 없을 경우, 임시적으로 넘치는 데이터를

저장하는 목적의 SWAP 파티션에 사용되는 파일시스템.

ufs

썬마이크로시스템즈의 솔라리스와 SunOS 운영체제에서

사용하고 있는 파일시스템

vfat

확장 FAT(VFAT) 파일시스템. 윈도우 시스템 (듀얼 부팅 환경 또는

이동식 드라이브 등)과 파일을 공유해야 할 때 유용.

xfs

고성능을 요하는 환경을 위한 저널링 파일시스템으로, 시스템이 대용량

데이터를 관리할 수 있으며, 초당 수 기가 바이트를 전송할 수 있도록 해줌.

 

☞ 이 표에 소개된 파일시스템뿐 아니라, 네트워크상의 공유를 목적으로 사용되는 파일시스템도 있다.

로컬 시스템에서 보자면 이들 네트워크 공유 파일시스템 역시 ext3, ntfs 등과 같은 파일시스템일 것이다.

그렇지만 이 파일시스템은 모두 Samba(smbfs 또는 cifs 파일시스템 유형), NFS(nfs), NetWare(ncpfs)와

같은 프로토콜을 통해 네트워크에 공유될 수 있다.

 

모든 파일시스템 유형이 새로운 파일시스템에 적합하거나 모든 리눅스 버전에서 지원되는 것은 아니다.

예를 들어, minix(Minix 시스템용), befs(BeOS 시스템용), affs(Amiga 시스템용) 같은 파일시스템들은

이들 시스템에서 사용되었던 오래된 백업 미디어를 마운트하거나 접근해야 할 경우에만 유용하다.

물론 유명한 파일시스템이라고 해서 완전히 지원되는 것은 아니다.

reiserfs 파일시스템은 우분투 버전 중 Kubuntu에서 쓰기 기능이 지원되지 않는다.

 

Posted by devanix
2011. 8. 7. 21:25
[ Problem ]
OS :  Xubuntu 11.04 (Natty Narwhal)
tvtime 설치후 소리는 들리지만 키보드 좌,우로 볼륨 조절을 하려하면 숫자 0 에서 움직이지 않는다. 

[ Solution ]
 /* 해당 믹서 장치가 작동하는지 확인 */
 $  
tvtime --mixer=hw:0/Line

 /* 해당 위의 명령이 작동 하는 경우 구성 파일 편집 */  

 $  sudo vi /etc/tvtime/tvtime.xml
 ... 
 
<option name="MixerDevice" value="default/Line"/>
 /* 위의 라인을 찾아 아래와 같이 변경 (default/Line --> hw:0/Line) */

 <option name="MixerDevice" value="hw:0/Line"/> 


참조 페이지 : http://askubuntu.com/questions/33849/cannot-control-volume-in-tvtime


'Linux > 문제 해결' 카테고리의 다른 글

[Backtrack5] "Waiting for sound system to respond"  (0) 2011.05.28
Posted by devanix
2011. 8. 7. 19:42

♧ 소프트웨어 패키지나 CD 또는 DVD 이미지와 같은 파일을 인터넷을 통해 공유 하고자 할 때,

SHA1SUM 또는 MD5SUM 파일이 함께 배포되는 경우가 많다.

이러한 파일은 다운로드 받은 파일이 원본 파일과 정확히 동일한 파일인지 확인하는데

사용되는 파일로써, 체크섬(checksum) 정보가 포함되어 있다.

 

MD5 (128 비트) 체크섬을 확인

SHA1 (160 비트) 체크섬을 확인

 

md5sum [ OPTION ]... [ FILE ]...

sha1sum [ OPTION ]... [ FILE ]...

[ 옵션 ]

-b, --binary

바이너리 모드로 읽기

-c, --check

파일에 (md5, sha1) 합계를 읽고 체크.

-t, --text

텍스트 모드로 읽기 (기본값)

체크섬을 검증 하는 경우의 옵션

--quiet

체크섬 검증이 성공한 메시지는 출력 안함

 

 

▶ md5sum, sha1sum 명령어를 사용해 파일의 체크섬을 생성.

$ touch devanix

$ md5sum devanix

d41d8cd98f00b204e9800998ecf8427e devanix

$ sha1sum devanix

da39a3ee5e6b4b0d3255bfef95601890afd80709 devanix

☞ 파일의 유효성을 검증하기 위해 md5sum 또는 sha1sum 정보 중 무엇을 선택할지는 전적으로 배포자의 결정.

 

Xubuntu 11.04 (Natty Narwhal) 배포판 사이트에서 MD5SUMS 파일 검증.

/* Xubuntu 11.04(Natty Narwhal) 다운 */

$ wget http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/xubuntu-11.04-desktop-i386.iso

--2011-08-07 18:57:05-- http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/xubuntu-11.04-desktop-i386.iso

Resolving cdimage.ubuntu.com... 91.189.92.164

접속 cdimage.ubuntu.com|91.189.92.164|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 722745344 (689M) [application/x-iso9660-image]

Saving to: `xubuntu-11.04-desktop-i386.iso'

 

100%[==========================================>] 722,745,344 6.70M/s in 2m 51s

2011-08-07 18:59:57 (4.03 MB/s) - `xubuntu-11.04-desktop-i386.iso' saved [722745344/722745344]

 

/* 해당 사이트 MD5SUMS 파일 다운 */

$ wget http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/MD5SUMS

--2011-08-07 19:03:00-- http://cdimage.ubuntu.com/xubuntu/releases/11.04/release/MD5SUMS

Resolving cdimage.ubuntu.com... 91.189.92.174

접속 cdimage.ubuntu.com|91.189.92.174|:80... 접속됨.

HTTP request sent, awaiting response... 200 OK

Length: 266 [text/plain]

Saving to: `MD5SUMS'

 

100%[==========================================>] 266 --.-K/s in 0s

2011-08-07 19:03:01 (5.88 MB/s) - `MD5SUMS' saved [266/266]

 

/* 체크섬 파일(MD5SUMS) 내용 보기 */

$ cat MD5SUMS

ab4b5b18892afd8d4d3228fbc30061d9 *xubuntu-11.04-alternate-amd64.iso

d5b6d8595c44e9954ebc4f188cb9fb49 *xubuntu-11.04-alternate-i386.iso

f1b224166bea923042e53b0e9d5ff63f *xubuntu-11.04-desktop-amd64.iso

78719bfee11576729a62b4a241d40b19 *xubuntu-11.04-desktop-i386.iso

 

/* MD5SUMS 파일에 기록되어 있는 모든 파일을 한 번에 검증 */

$ md5sum -c MD5SUMS

md5sum: xubuntu-11.04-alternate-amd64.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-alternate-amd64.iso: 열기 또는 읽기 실패

md5sum: xubuntu-11.04-alternate-i386.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-alternate-i386.iso: 열기 또는 읽기 실패

md5sum: xubuntu-11.04-desktop-amd64.iso: 그런 파일이나 디렉터리가 없습니다

xubuntu-11.04-desktop-amd64.iso: 열기 또는 읽기 실패

xubuntu-11.04-desktop-i386.iso: 성공

md5sum: 경고: 3 중 4 개의 파일들을 읽을 수 없었음

 

/* 체크섬 파일에 있는 파일 목록 중 하나만을 검증 */

$ cat MD5SUMS | grep *desktop-i386* | md5sum -c

xubuntu-11.04-desktop-i386.iso: 성공

MD5SUMS 파일 대신 SHA1SUMS 파일을 가지고 있더라도, sha1sum 명령어와 동일

 

 

[ /etc 디렉토리의 모든 파일에 대한 체크섬 생성 & 검증 ]

♧ find 명령어와 md5sum 명령어를 함께 사용한다면 파일시스템의 어떠한 부분이라도 검증할 수 있다.

 

① /etc 디렉토리의 모든 파일에 대한 md5 체크섬 생성

$ sudo find /etc -type f -exec md5sum {} \; > /tmp/md5.list 2> /dev/null

128비트 체크섬이 기록된 /tmp/md5.list 파일 생성.

 

② 시간이 지난 뒤, 이들 중 어떤 것이 변경 되었는지 확인

$ sudo md5sum --quiet -c /tmp/md5.list

/etc/hosts.allow: 실패

md5sum: *경고*: 1588 중 1개가 서로 일치하지 않는 체크섬으로 계산됨match

☞ 결과에서 볼 수 있듯이, 하나의 파일(hosts.allow)만 변경 되었다.

☞ 필요 하다면 다음 단계로 변경된 파일을 조사하여 의도적인 것인지 살펴본다.

 

 

맨 페이지(manpage) 참조 : md5sum, sha1sum

Posted by devanix
2011. 8. 7. 17:33

♧ 리눅스 파일시스템의 모든 파일과 디렉토리는 사용자, 그룹,

그리고 타인에 대한 읽기, 쓰기 실행 퍼미션을 가지고 있다. 또한

파일과 디렉토리는 퍼미션 외에도 특정 파일시스템 유형과 관련된 다른 속성들도 가지고 있다.

 

ext2와 ext3 파일시스템에 있는 파일은 사용자가 선택할 수 있는 특별한 속성들을 가지고 있다.

lsattr 명령어를 사용하면 이들 속성 목록을 볼 수 있는데,

속성 대부분은 잘 알려져 있지 않으며 기본적으로 비활성화되어 있다.

 

[ 속성들 ]

[ 속 성 ]

[ 설 명 ]

대시(-)

ext2/ext3등 파일시스템에서 설정할 수 있는 13개의 속성을 의미

a

쓰기시에 오로지 추가모드로만 열 수 있다.

c

커널에 의해 디스크 상에 압축 상태로 저장.

d

dump(8)명령 수행시 백업 되지 않는다 (덤프 방지)

i

삭제,이름변경,링크등 어떤 자료도 변경 불가. (root 조차 변경 불가)

j

데이터 저널링

s

지워질 때 블록들이 모두 0으로 되고 다시 디스크상에에 씌여짐(안전한 삭제)

t

하단 결합 불가

u

삭제가 되었을 경우에는 그 내용이 저장 (데이터로 복구 가능)

A

접근시간(atime) 갱신 안함

D

동기화된 디렉토리 업데이트

S

수정될 때 그 변화가 디스크 상에 동기화 (동기화된 업데이트)

T

디렉토리 계층구조의 최상위

[ 읽기 전용 속성 ]

h

큰 파일(huge file)

E

압축 오류(compression error)

I

색인 디렉토리(indexed directory)

X

압축 로우 액세스(compression raw access)

Z

compressed dirty file

 

 

■ lsattr - 확장 파일시스템 상의 파일 속성 출력

lsattr [ -Radv ] [ files… ]

 

[ 옵션 ]

-R

디렉토리와 그 이하 모든 내용에 대해 재귀적으로 속성값 출력.

-a

' . '로 시작하는 파일을 포함한 디렉토리 내 모든 파일을 출력.

-d

디렉토리를 보여줄 때 안에든 파일을 보여주는 것이 아니라 일반 파일처럼 출력.

-v

파일 버전 출력.

 

▶ 일반적인 lsattr 명령어의 사용 예:

$ lsattr /etc/host*

-----------------e- /etc/host.conf

-----------------e- /etc/hostname

-----------------e- /etc/hosts

-----------------e- /etc/hosts.allow

-----------------e- /etc/hosts.deny

☞ 모든 /tmp 속성을 재귀적으로 나열 : $ lsattr -aR /tmp/ | less

 

 

■ chattr - 확장 파일시스템 상의 파일 속성 변경

chattr [ -RVf ] [ -v version ] [ mode ] files…

 

[ 옵션 ]

-R

디렉토리와 그 이하 모든 내용의 속성을 재귀적으로 변환.

-V

변화된속성에 대하여 자세히 출력.

-f

오류 메시지 표시.

-v version

파일에 버전을 설정

[ 속성 연산자 ]

'+'

파일의 속성에 추가

'-'

파일의 속성을 제거

'='

파일이 갖는 속성을 오로지 주어진 속성만 갖도록 설정.

 

 

▶ ' i ' 속성을 부여하여 이동,삭제,내용수정등 변경불가 (파일 보호)

$ touch test

$ sudo chattr +i test

$ lsattr test

----i------------e- test

/* 쓰기 불가 */

$ sudo echo "write" > test

-bash: test: 허가 거부

/* 이동 불가 */

$ sudo mv test xxxx

mv: `test'를 `xxxx'로 옮길 수 없음: 명령을 허용하지 않음

/* 삭제 불가 */

$ sudo rm -f test

rm: `test'를 지울 수 없음: 명령을 허용하지 않음

☞ root 조차 속성이 해제되기 전까지는 변경할 수 없다

☞ 다시 삭제하려면 기호(-)를 사용하여 속성을 제거후 삭제($ sudo chattr -i test)

 

▶ -R 옵션을 사용하여 +A 속성을 재귀적으로 한번에 설정하여 접근 시간(atime) 갱신 안함.

$ touch test_aaa test_bbb test_ccc

$ sudo chattr -R +A test_*

$ lsattr test_*

-------A---------e- test_aaa

-------A---------e- test_bbb

-------A---------e- test_ccc

test_* 파일들은 더 이상 접근 시간(atime) 수정 되지 않는다.

☞ A 속성은 노트북 또는 USB 디스크 등 비교적 느린 디스크 환경에서 디스크 I/O를 줄일 수 있다.

 

▶ ' d ' 속성이 부여된 파일은 dump명령에 의하여 백업되지 않도록 보호.

$ touch test

$ sudo chattr +d test

$ lsattr test

------d----------e- test

☞ dump 명령어를 사용하여 ext(n) 파일시스템을 백업하고 있다면 해당 파일은 백업되지 않도록 보호함.

이러한 특징을 적용해 크기가 큰 ISO 이미지 파일 등을 백업에서 제외시킬 수 있다.

 

 

 

맨 페이지(man page) 참조 : man lsattr, man chattr

Posted by devanix
2011. 8. 7. 06:38

■ cp 명령

♧ cp명령어는 파일을 새로운 이름으로 복사하거나, 새로운 디렉토리에 동일한 파일명

(복사된 파일은 새로운 시간정보를 가짐) 으로 복사할 수 있다.

cp 명령어에는 날짜 . 시간 정보를 유지하게 하거나,

재귀적으로 복사 하거나, 기존에 동일한 파일이 있는 경우 덮어 쓸지 여부를 사용자에게 확인

하도록하는 옵션들을 가지고 있다.

 

▶ cp명령을 사용한 몇 가지 예제:

$ cd ; touch index.html

$ mkdir /tmp/html

/* cp -i : 만약 /tmp/html 디렉토리에 index.html 파일이 존재하면 사용자에게 확인 */

$ cp -i index.html /tmp/html/

/* cp -l : index.html 파일이 /tmp/html디렉토리에 동일한 이름의 파일로 하드링크 됨 */

$ rm /tmp/html/index.html

$ cp -il index.html /tmp/html/

/* cp -a : /tmp/html 디렉토리에 있는 모든 파일의 소유권과 퍼미션 설정을 그대로 유지한 상태로 복사 */

$ mkdir /tmp/back

$ cp -a /tmp/html /tmp/back/

/* cp -R : 디렉토리 구조를 바탕으로 지정된 디렉토리 이하 모든 파일과 디렉토리를 재귀적으로 복사 */

$ cp -R /tmp/html /tmp/back/

 

■ dd 명령

♧ dd 명령어는 데이터를 복사하는 또 다른 방법.

리눅스 시스템은 하드웨어 디바이스를 포함해 모든 것을 파일로 간주하기 때문에

dd는 매우 강력한 명령어이다.

 

▶ null문자로 채워진 512 바이트크기의 파일을 만듬.

$ dd if=/dev/zero of=/tmp/mynullfile count=1

1+0 레코드 들어옴

1+0 레코드 나감

512 바이트 (512 B) 복사됨, 0.000108411 초, 4.7 MB/초

/dev/zeronull 문자를 만들어내는 특별한 파일.

dd 명령어는 /dev/zero파일을 입력파일로 하고, /tmp/mynullfile을 출력파일로 실행.

count는 출력파일의 블록 개수를 설정하는 옵션이고 기본적으로 하나의 블록은 512 바이트.

☞ 결과 확인 : $ od -vt x1 /tmp/mynullfile ( 파일을 8진수로 덤프하여 출력 )

 

▶ 블록사이즈를 2바이트로 설정하고 10블록(20 바이트)을 복사.

$ dd if=/dev/zero of=/tmp/mynullfile count=10 bs=2

10+0 레코드 들어옴

10+0 레코드 나감

20 바이트 (20 B) 복사됨, 0.000241805 초, 82.7 kB/초

 

▶ 마스터 IDE 드라이브의 첫 번째 파티션의 복사본을 만듬

$ sudo dd if=/dev/hda1 of=/dev/hdb2

☞ 이 명령은 하드드라이브의 일부를 덮어쓸 수 있으므로 매우 조심스럽게 사용

 

▶ 마스터 IDE 드라이브의 첫 번째 파티션에 대한 압축된 백업 파일을 만듬

$ sudo umount /dev/hda1

$ sudo dd if=/dev/hda1 | gzip > bootpart.gz

 

▶ 마스터 IDE 하드드라이브의 마스터 부트 레코드(MBR)를 mymbrfile파일로 복사

$ dd if=/dev/hda of=mymbrfile bs=512 count=1

 

▶ CD나 DVD로부터 ISO 이미지 복사본 생성

$ dd if=/dev/cdrom of=whatever.iso

☞ 우분투는 /dev/cdrom뿐만 아니라 /dev/cdrw/dev/dvd 디바이스 파일도 생성

 

▶ CD 또는 DVD로부터 생성한 ISO 이미지 파일을 USB 디스크로 복사

$ sudo dd if=whatever.iso of=/dev/sdb1

(USB 디스크는 /dev/sdb1과 같은 장치파일로 나타날 것이다)

☞ 이 명령은 파일 내에 있는 데이터를 바이너리 복사하기 때문에

의도와 다른 결과를 가져올 수 있으므로 주의

 

 

맨 페이지(man page) 참조 : man cp, man dd, man 4 null

Posted by devanix
2011. 8. 7. 05:25

♧ 파일시스템 이동에 사용되는(cd, pwd, pushd, popd ..등) 이러한 명령어가 가진 조금 덜 알려진 옵션에 초점.

 

▶ cd 명령을 사용한 몇 가지 예제:

$ cd

홈 디렉토리 이동

$ cd $HOME

홈 디렉토리 이동

$ cd ~

홈 디렉토리 이동

$ cd ~devanix devanix

유저의 홈 디렉토리로 이동

$ cd -

이전에 작업한 디렉토리로 이동

$ cd $OLDPWD

이전에 작업한 디렉토리로 이동

$ cd ~/public_html

홈 디렉토리의 public_html 디렉토리로 이동

$ cd ..

현재 디렉토리의 상위(부모) 디렉토리로 이동

$ /usr/bin

루트 디렉토리에서 usr/bin 디렉토리로 이동

$ cd usr/bin

현재 디렉토리 밑에 있는 usr/bin 디렉토리로 이동

 

▶ 심볼릭 링크를 생성하고, 링크된 디렉토리가 어떻게 표현되는지 보여주는 몇 가지 예제:

$ cd $HOME

/* 홈 디렉토리에서 /tmp 디렉토리를 향하는 심볼릭 링크 생성 */

$ ln -s /tmp tmp-link

/* ls -l 출력하여 심볼릭 링크가 가리키는 곳을 확인 */

$ ls -l tmp-link

lrwxrwxrwx 1 devanix devanix 4 2011-08-07 04:56 tmp-link -> /tmp

/* tmp-link/로 이동 */

$ cd tmp-link/

/* 현재 디렉토리 확인 */

$ pwd

/home/devanix/tmp-link

/* -P : 심볼릭 링크된 디렉토리에서 고정된 위치를 기준으로 pwd 출력 */

$ pwd -P

/tmp

/* -L : 링크된 위치를 기준으로 pwd 출력 */

$ pwd -L

/home/devanix/tmp-link

/* cd -L역시 pwd -L과 같이 링크된 기준에서 상위디렉토리(..) 이동 */

$ cd -L ..

$ pwd

/home/devanix

$ cd tmp-link

/* cd -P 역시 pwd -P와 같이 목적지의 고정된 위치를 기준으로 상위디렉토리(..) 이동 */

$ cd -P ..

$ pwd

/

 

 

♧ bash는 작업 디렉토리 목록을 기억할 수 있다.

이 목록은 이전에 방문했던 디렉토리로 돌아가려는 경우 유용 하다.

저장된 목록은 스택(stack)의 형태로 구성되어 있기 때문에

pushdpopd 명령어를 사용하여 디렉토리를 추가하거나 제거할 수 있다.

 

▶ pushd와 popd 명령어 사용 예제:

$ pwd

/home/devanix

$ pushd /usr/share/man/

/usr/share/man ~

$ pushd /var/log/

/var/log /usr/share/man ~

$ dirs

/var/log /usr/share/man ~

$ dirs -v

0 /var/log

1 /usr/share/man

2 ~

$ popd

/usr/share/man ~

$ pwd

/usr/share/man

$ popd

~

$ pwd

/home/devanix

dirs, pushd, popd 명령어는 스택에 저장된 디렉토리를 순서대로 저작하는데 사용될 수 있다.

pushd -0은 스택에 있는 마지막 디렉토리를 스택의 제일 위에 넣는다(현재 디렉토리로 만든다)

pushd -1은 스택에 있는 맨위의 디렉토리를 스택의 제일 마지막에 넣는다(pushd -0과 반대)

pushd -2 명령은 스택 밑에서 세 번째에 위치한 디렉토리를 스택 제일 위에 넣는다.

Posted by devanix
2011. 8. 7. 03:05

리다이렉션(Redirection)

♧ 명령이 실행되기에 앞서 쉘에 의해 특별하게 해석되는 표시를 사용하여

입력과 출력을 방향 전환 또는 리다이렉트 할 수 있다.

 

stdin

키보드 (표준입력, 0)

stdout

모니터 (표준출력, 1)

stderr

모니터 (에러출력, 2)

>

출력 리다이렉션 (stdout 만을 보냄)

<

입력 리다이렉션 (stdin 파일로부터 데이터를 받음)

>>

추가 출력 리다이렉션 (새로 덮어쓰지 않고 추가)

2>

표준에러 리다이렉션 (stderr 만을 보냄)

&>word

>& word

>word 2>&1

표준 출력과 표준에러를 동시에 리다이렉트 함

 

▷ 표준출력은 파일 output.txt로 리다이렉트

$ ls /tmp /tmmp > output.txt

ls: /tmmp에 접근할 수 없습니다.: 그런 파일이나 디렉터리가 없습니다

 

▷반대로 표준에러를 error.txt 파일에 리다이렉트.(표준출력은 그대로 화면 출력)

$ ls /tmp /tmmp 2> errors.txt

/tmp:

keyring-QC9vEx pulse-2L9K88eMlGn7 rsync_1007

orbit-devanix pulse-PKdhtXMmr18n ssh-jbzyRBjE1162

 

▷ 앞의 두 예제를 합쳐놓은 것.

$ ls /tmp /tmmp 2> errors.txt > output.txt

/* cat으로 errors.txt 와 output.txt 출력 */

$ cat errors.txt

ls: /tmmp에 접근할 수 없습니다.: 그런 파일이나 디렉터리가 없습니다

$ cat output.txt

/tmp:

keyring-QC9vEx

orbit-devanix

pulse-2L9K88eMlGn7

pulse-PKdhtXMmr18n

rsync_1007

ssh-jbzyRBjE1162

 

▷ 두 스트림(stdout, stderr) 출력을 모두 everything.txt 파일에 쓰도록 함.

$ ls /tmp /tmmp > everything.txt 2>&1

/* cat으로 everything.txt 출력 */

$ cat everything.txt

ls: /tmmp에 접근할 수 없습니다.: 그런 파일이나 디렉터리가 없습니다

/tmp:

keyring-QC9vEx

orbit-devanix

pulse-2L9K88eMlGn7

pulse-PKdhtXMmr18n

rsync_1007

ssh-jbzyRBjE1162

 

▷ 두 개의 그레이터 댄(>>) : 새로 덮어쓰지 않고 추가 되도록 하기

$ ls /tmp >> output.txt

 

▷ 에러 출력을 화면에 출력 하지 않기 (비트버킷 파일(/dev/null) 보내기)

$ ls /tmp /tmmp 2> /dev/null

/tmp:

keyring-QC9vEx pulse-2L9K88eMlGn7 rsync_1007

orbit-devanix pulse-PKdhtXMmr18n ssh-jbzyRBjE1162

 

/etc/hosts 파일을 mail 명령어의 표준 입력 스트림으로 보내기

$ mail chris < /etc/hosts

 

 

■ 파이프( | )를 사용

♧ 하나의 프로세스 출력을 파일이 아닌 다른 프로세스로 리다이렉트.

 

▷ ls명령의 표준출력이 파이프를 통해 sort 명령어로 보내져 실행결과가 정렬되어 출력.

$ ls /tmp | sort

▷ 파이프 리다이렉션을 조합하여 ls 명령어의 표준출력은 정렬되고 에러출력은 비트버킷(/dev/null)으로 비운다.

$ ls /tmp /tmmp 2> /dev/null | sort

▷ 그밖에 다양한 활용.

/* 설치되어 있는 모든 패키지 에서 sql 문자열이 포함되어 있는 패키지 개수 */

$ dpkg-query -l | grep -i sql | wc -l

/* Firefox 문자를 포함하고 있는 프로세스 출력 */

$ ps auwx | grep firefox

/* 프로세스 목록 한 화면씩 출력 */

$ ps auwx | less

/* 순수하게 맨 페이지 경로만을 출력 */

$ whereis -m bash | awk '{print $2}'

 

 

■ 작은 인용부호( ` )를 사용

♧ 인용부호로 묶인 명령어의 실행결과를 나머지 명령어의 입력으로 사용

/* ps 명령어의 전체경로를 찾은 후에 이 명령어를 포함하고 있는 패키지를 찾음 */

$ dpkg-query -S `which ps` → dpkg-query -S /bin/ps

/* bash 명령어의 전체경로를 찾아 해당 명령어의 상세 목록을 보여줌 */

$ ls -l `which bash` → ls -l /bin/bash

☞ 작은 인용부호( ` )는 키보드 느낌표(!) 왼쪽에 있음.

 

 

■ xargs명령을 이용

♧ 하나의 명령의 실행결과를 다른 명령어의 인자로 넘겨주기

 

▷ ls명령의 /bin/b*의 실행결과는 dpkg-qeury -S 명령어의 인자로 전달

$ ls /bin/b* | xargs -t dpkg-query -S

dpkg-query -S /bin/bash /bin/bunzip2 /bin/busybox /bin/bzcat /bin/bzcmp /bin/bzdiff /bin/bzegrep /bin/bzexe /bin/bzfgrep /bin/bzgrep /bin/bzip2 /bin/bzip2recover /bin/bzless /bin/bzmore

bash: /bin/bash

bzip2: /bin/bunzip2

busybox-static: /bin/busybox

bzip2: /bin/bzcat

bzip2: /bin/bzcmp

bzip2: /bin/bzdiff

bzip2: /bin/bzegrep

bzip2: /bin/bzexe

bzip2: /bin/bzfgrep

bzip2: /bin/bzgrep

bzip2: /bin/bzip2

bzip2: /bin/bzip2recover

bzip2: /bin/bzless

bzip2: /bin/bzmore

-t 옵션을 적용하면 명령어 실행시 화면에 좀 더 상세한 정보가 출력.

 

▷ -I{}를 이용하여 ls명령이 출력하는 각 문자열을 하나씩 dpkg-query 명령어의 입력으로 보냄.

$ ls /bin/b* | xargs -t -I{} dpkg-query -S {}

dpkg-query -S /bin/bash

bash: /bin/bash

dpkg-query -S /bin/bunzip2

bzip2: /bin/bunzip2

dpkg-query -S /bin/busybox

busybox-static: /bin/busybox

dpkg-query -S /bin/bzcat

…[중략]…

☞ 실행결과에서 볼 수 있듯이 dpkg-query -S 명령어는

ls로부터 인자로 전달된 각 개별 문자열을 사용해 반복적으로 실행.

 

 

※ 맨 페이지(man page) 참조 : man bash, man xargs

Posted by devanix
2011. 8. 6. 23:49

■ 명령어 감시

♧ 만약 명령어의 출력이 어떻게 변화 하는지 지켜봐야 한다면 watch 명령어를 사용.

 

▶ 시스템 평균 부하에 대한 정보를 감시해야 하는 경우

$ watch 'cat /proc/loadavg'

Every 2.0s: cat /proc/loadavg Sat Aug 6 23:18:58 2011

 

0.00 0.01 0.05 1/237 6626

watch 명령으 cat 명령어를 매 2초마다 실행. <Ctrl + c> = 종료

▷ -n <초> 옵션 : 재실행 간격을 10초로 변경

$ watch -n 10 'cat /proc/loadavg'

▷ -d 옵션 : 화면이 업데이트될 때 이전 결과와의 차이점을 강조

$ watch -d 'cat /proc/loadavg'

Every 2.0s: cat /proc/loadavg Sat Aug 6 23:18:58 2011

 

0.00 0.01 0.05 1/237 6739

 

 

■ 파일 감시

watch 명령어를 사용하여 파일의 크기를 지켜볼 수도 있다.

$ watch 'ls -l mydownload.iso'

tail 명령어를 사용하면 시간이 지남에 따라 변화하는 일반 텍스트 파일의 내용을 지켜볼 수 있다.

/var/log/messages 파일에 새로운 메시지가 추가되는 것을 관찰

$ tail -f /var/log/messages

 

자세한 내용은 man page 참조 : man watch, man tail

Posted by devanix