영원한사랑

LINUX의 여러 가지 설정을 도와주는 프로그램과 파일들.

※ 모두 root로 Log-in 해서 실행하여야 함.


X-Window에 관한 설정.


setup           :    마우스, 키보드, 그래픽카드와 모니터, 시간대, 사운드카드 등을 설정. 사용이 간단함.



XF86Setup      :    마우스, 키보드, 그래픽카드와 모니터, 사용할 해상도 등을 설정할 수 있음.

                   GUI(Graphic User Interface)형태로 설정이 쉬움.



XF86Config     :    마우스, 키보드, 그래픽카드와 모니터 등을 설정할 수 있음..

                   text기반으로 사용하기가 조금 힘듬.



Xconfigurator   :   X-Window의 설정을 설치할 때의 설정 과정을 다시 실행시켜줌.




/etc/X11/XF86Config : X-Window의 색상과 해상도가 기록되어 있는 파일. vi편집기 등으로 몇 부분을 고치면 실행 시에 원하는 색상과 해상도로 option 없이 실행할 수 있음.



 Section "Screen"

 Driver  "....l"              - .... 부분에는 컴퓨터 사양마다 다른 이름이 들어가 있음.

 Device  "...."

 Monitor " ......"



DefaultColorDepth 16     - 이렇게 해 주면 16Bit 하이 컬러로 부팅 할 수 있음. 트루 컬러는 32.



이 파일에 보면 엄청나게 많은 해상도와 컬러에 대한 설정 비슷한 게 있는데 자신이 사용하는 것 이외의 것은 다 지워버려도 상관이 없는 것 같음.  혹시 모르니 지우기 전에 이 파일을 다른 곳에 복사해 두고 할 것.




/etc/inittab : 부팅 할 때 바로 X-Window로 부팅 하게 하는 방법.



부팅을 할 때 그냥 콘솔로 부팅을 할 것인지 부팅을 하면서 바로 X-Window로 부팅을 할 것인지 정해 줄 수 있음.

vi등의 편집기로 고치면 됨..



        # Default runlevel. The runlevels used by RHS are:

        #   0 - halt  (Do NOT set initdefault to this)

        #   1 - Single user mode

        #   2 - Multiuser, without NFS  (The same as 3,  if you do  #  networking)

        #   3 - Full multiuser mode

        #   4 - unused

        #   5 - X11

        #   6 - reboot  (Do NOT set initdefault to this)

        #



        id : 3 : initdefault :



이 부분에서 아랫쪽에 있는 id: 다음에 숫자를 바꿔 주면 됨. 설치 시에 X-Window로 부팅이 되게 해 뒀으면 5가 되어 있고 그렇게 해 주지 않았다면 3이 되어 있음. 3으로 하면 그냥 콘솔로 부팅이 되고 5로 하면 X-Window로 부팅이 됨.



Network에 관한 설정



modemtool    :    modem에 관한 설정을 할 수 있음. 모뎀이 사용하는 포트 등을 설정해 줄 수 있음.

netconf       :    Network의 전반에 관한 설정을 할 수 있음. 일반 모뎀으로 Internet에 접속하는 사람은 여기서                       ppp의 설정을 해 주어야 함.

netcfg        :    Network에 관한 설정을 할 수 있음. ppp로 접속할 때 접속하는 서버의 IP Address와 ID,                            Password등을 설정할 수 있음.



LINUX에서 DOS와 Windows를 넘보는 방법.



mount : LINUX에서 CD-ROM이나 다른 하드디스크(LINUX 이외의 다른 파티션이나 다른 하드디스크)를 사용하려면 수동으로 디렉토리를 할당하고 그 디렉토리 아래로 사용할 장치를 붙여줘야 하는데 이를 mount라고 함.

*mount는 root만 가능.



CD-ROM mount하기.

CD-ROM으로 LINUX를 설치하면 /mnt 아래에 cdrom이라는 디렉토리가 있음.

mount /mnt/cdrom ������     자신의 위치가 /mnt 라면 그냥 cdrom만 넣어도 됨.

이렇게만 하면 CD-ROM이 mount됨.

CD-ROM으로 설치하지 않은 경우.

mount /dev/hdc /mnt/cdrom ������

앞에 /dev/hdc는 장치명. 이 경우는 CD-ROM이 세컨더리 마스터로 설치된 경우.

* hda : 프라이머리 마스터,  hdb : 프라이머리 슬레이브, hdc : 세컨더리 마스터, hdd : 세컨더리 슬레이브.



다른 하드디스크의 경우도 같음.

만약 하나의 하드디스크를 파티션해서 WINDOWS와 LINUX를 같이 쓰고 있다면 /sbin/cfdisk /dev/hda 명령으로 자신의 파티션(프라이머리 마스터)을 볼 수 있음.

프라이머리 마스터에 달려있는 하드디스크가 Windows, LINUX swap, LINUX native로 나눠진 경우에는 모두 프라이머리 마스터이므로 hda뒤에 순서대로 번호가 붙음.

보통 Windows가 설치된 C드라이브가 hda1. 그러므로 이것을 mount 하려면 일단 /mnt디렉토리 아래에 Windows 부분을 mount할 디렉토리를 만들어 줌. (여기서는 win이라는 이름의 디렉토리를 만들겠습니다.)

mkdir /mny/win ������

mount /dev/hda1 /mnt/win ������

이렇게 mount해 주면 /mnt/win에 Windows가 설치된 부분이 들어감.



DOS로 포맷한 플로피디스크 사용방법.

이 경우에는 도스 명령 앞에 'm'을 붙여서 사용하면 됨.

mdir : 파일 리스트 표시.                mtype : 파일 내용 보기.         mcopy : 파일 카피.

mmove : 파일 이동.                     mdel : 파일 지우기.             mmk : 디렉토리 만들기.

mrm : 디렉토리 지우기.         mcd : 디렉토리간의 이동 ( 상위 디렉토리는 cd..   cd와 ..사이를 붙임)

mren : 파일이나 디렉ㅌ리 이름 바꾸기.   mformat : 포맷하기.



DOS의 개행 문자(^M) 없애기.

DOS나 Windows에서 작성한 txt파일 등의 경우 행이 끝나는 부분에 ^M이라는 표시가 있음.

이는 LINUX와 DOS의 캐리지 리턴값이 틀리기 때문에 DOS의 개행 문자(새로운 행의 시작을 알리는 문자)가 ^M으로 표시되는 것.

없애는 방법.

변환 프로그램 사용하기.

dos2unix   -n   DOS파일명   새로 만들어질 LINUX파일명

fromdos    DOS파일명    새로 만들어질 LINUX파일명

tr -d '\015' < DOS파일명 > 새로 만들어질 LINUX파일명

perl -pi -e 's/\r//' DOS파일명

sed 's/^M//g' DOS파일명 > 새로 만들어질 LINUX파일명    ( ^M은 ������+������를 누른 다음 ������+������ )

vi에서 사용하기 : vi 명령모드에서 %s/^M//g   ( ^M은 ������+������를 누른 다음 ������+������ )



LINUX에서 작성한 txt파일을 DOS나 Windows에서 사용하기 위해서..

LINUX에서 작성한 파일을 DOS나 Windows로 보면 개행 문자가 들어갈 자리에  모양이 들어가 있고 개행이 되지 않음. 이런 것을 DOS용으로 바꿔 주는 방법.

unix2dos    -n     LINUX파일명    새로 만들어질 DOS파일명

todos    LINUX파일명    새로 만들어질 DOS파일명



LINUX에서 DOS와 Windows의 응용프로그램을 실행시키려면 각각 DOSEmu 과 Wine 이라는 에뮬레이터가 필요합니다.  에뮬레이터의 설치 방법과 사용 방법을 다른 것을 참고하기 바람.



LINUX에서 여러 프로그램을 연계해서 실행하기.



명령이나 프로그램명 사이에 ‘|’기호를 넣어 주면 됨.

ex> 파일이 많은 디렉토리 등에서 l명령으로 파일의 리스트를 보면 한 화면에 모두 표시되지 않고 그냥 지나간다.

    이럴 때 l | more ������해 주면 more에서 파일의 내용을 보는 방법으로 파일의 리스트를 볼 수 있다.



여러 가지 도움말들.



man : 매뉴얼을 보여줌. ex> man ls ������ 하면 ls에 대한 매뉴얼을 보여줌.

info : GNU 의 info 문서를 보여줌. ex> info ls ������ 하면 ls에 대한 GNU info를 보여줌.

whatis : 간단한 설명을 보여줌. ex> whatis ls ������ 하면 ls에 대한 간단한 설명을 보여줌.



LINUX의 여러 편집기.



vi.

UNIX에서 가장 널리 쓰이는 편집기. Syntex hilighting기능이 있음. 사용이 조금 까다로움.

콘솔에서    vi   편집할 파일명(새로 만들 파일명) ������ 이렇게 입력을 하면 사용할 수 있음.

파일의 확장자에 따라서 Syntex hilighting(키워드나 변수 명 등의 색을 다르게 보여주는 기능)기능이 있음. 예를 들어 sori.cpp라는 파일을 만들면 자동으로 C++에 사용되는 키워드 등이 다른 색으로 나타남.

사용방법.

세 가지 모드로 작동이 됨.

명령모드 : 처음 vi편집기를 실행시키면 명령모드. 여기서 ‘i’를 입력하면 입력모드로 들어 감.

  명령모드에서 쓰이는 명령들 : de-한 단어 정도를 지움, d-한 글자 혹은 한 줄을 지움. 명령모드에서 'd'를 누른 후

  화살표로 지울 대상을 정함. ������의 경우 커서 오른쪽에 있는 한 글자를 지움. ������의 경우 커서가 위치한 줄을 지움.

입력모드 : 명령모드에서 ‘i’를 누르면 화면 아래에 -- INSERT -- 라는 문구가 생기고 입력모드로 들어감. 입력

          모드에서 다시 명령 모드로 나가려면 ������를 누르면 됨.

최하위행 모드 : 저장, 종료 등의 명령을 하는 부분. 명령모드에서 ‘:’를 누르면 화면 아래에 콜론(:)이 생기고 그 뒤에

               명령어를 입력. w-저장, q-종료, wq-저장 후 종료..



emacs.

emacs  편집할 파일명(새로 만들 파일명) ������ 하면 사용할 수 있음. vi에 비해 사용이 간단함.

������+������를 누른 다음 ������+������  :  파일 저장

������+������를 누른 다음 ������+������  :  emacs종료

������+������를 누른 다음 ������+������  :  다른 파일 불러오기



pico.

pico  편집할 파일명(새로 만들 파일명) ������ 하면 사용할 수 있음. 사용이 간단. 화면 하단에 사용 방법이 나와 있음.



프로그래밍.



리눅스 배포판 안에 여러 컴파일러가 들어 있음. 편집기로 소스파일을 작성 후 컴파일 하면 됨.



C 컴파일러 : gcc  소스파일명 ������ 하면 컴파일이 됨

     Option : -l  특정 라이브러리 사용. gcc  소스파일명 -l라이브러리명



C++ 컴파일러 : c++  소스파일명 ������ 하면 컴파일이 됨



Fortran 컴파일러 : g77  소스파일명 ������ 하면 컴파일이 됨

     Fortran 소스를 C로 변환해 주는 프로그램 : f2c  포트란의 소스파일명 ������ 하면 변환됨. 이렇게 변경해준

     소스를 컴파일 하려면 gcc  f2c로 변경한 소스파일명  -lp2c 라고 붙여줌.



그 외에 Pascal(컴파일러 : gpc, C로 변환 : p2c), Perl(컴파일러 필요 없음), Java(컴파일러 : javac), Tck/tk등이 있음.




 
addbib - 도서목록 형식의 데이터베이스를 만들거나, 확장

apropos - 사용설명서의 키워드 검색

ar - 라이브러리 만들기, 관리

at, batch - 원하는 시간에 원하는 명령을 실해하게 하는 명령

awk - 패턴 검색과 언어 처리

banner - 큰 글자(배너) 만들기

basename - 경로 이름에서 마지막에 있는 이름만 출력

biff - 자신에게 편지가 배달되면 알려주는 명령

bin-mail, binmail - 예전에 사용한 전자우편 프로그램

cal - 달력보기

calendar - 간단한 일정표

cat - 파일 병합과 내용 보기

cb - 간단한 C 프로그램 beautifier(?)

cc - C 컴파일러

cd - 작업 디렉토리 바꾸기

checknr - nroff 또는 troff 입력 파일 검사; 오류를 보여준다

chgrp - 파일의 사용자 그룹 바꾸기

chmod - 파일의 접근 권한 바꾸기

clear - 터미날 화면 깨끗이 하기

cmp - 두 파일을 바이트 단위로 비교

colcrt - troff 파일의 밑줄 속성 문자 처리

comm - 지정 두파일의 줄 단위 비교와 그 처리

compress, uncompress, zcat - 파일 압축관련 유틸리티들

cp - 파일 복사

cpio - copy file archives in and out

cpp - C 언어 전처리기

csh - C 문법과 비슷한 쉘 스크립트 문법과 기타 여러 기능이 내장된 쉘

ctags - ex 나 vi 편집기에서 사용될 tag 파일을 만드는 명령

date - 시스템 시간 보기나 지정하기

dbx - 소스 수준의 디버거

deroff - nroff, troff, tbl, eqn 관련 내용 지움

df - disk free: 디스크의 남은 용량 보기

diff - 두 파일의 차이점 비교

du - disk used : 디스크 사용량 보기

echo - 인자를 표준 출력으로 출력

ed, red - 기본 줄 편집기

eqn, neqn, checkeq - 수식 표현 포멧 도구

error - 컴파일러 오류 메시지 목록

ex, edit, e - 줄 편집기

expand, unexpand - TAB 문자를 공백문자로 바꿈, 또는 그 반대로

expr - 인자를 수식으로 처리

file - 파일 형식 알아보기

find - 파일 찾기

finger - 사용자 정보 알아보기

fmt, fmt_mail - 간단한 문서나, 편지 포멧 도구

fold - 긴 줄 출력 방법 지정

ftp - 파일 전송 프로그램

gcore - 실행 중인 프로세스의 core 이미지를 구한다.

gprof - call-graph profile data(?)를 보여줌

grep - 문자열 찾기

groups - 사용자의 그룹을 보여줌

history - 이전 명령 보기

hostname - 현재 시스템 이름을 보여줌

imake - makefile 만드는 프로그램

indent - C 프로그램 소스 파일을 들여쓰기 하는 포멧 도구

install - 파일 설치

join - 관계형 데이터베이스 연산자

kill - 프로세스 죽이기 - "마누라 죽이기"와 상관없음 :-)

last - 사용자가 마지막 접속 상태를 보여줌

ld, ld.so - 링크 편집기, 동적 링크 편집기

leave - 자신의 접속 종료 시간을 알려줌

less - more 명령의 확장

lex - 어휘 분석 프로그램 생성기

lint - C 프로그램 verifier

ln - 파일의 하드, 심벌릭 링크 명령

login - 시스템 접속 명령

look - 시스템 디렉토리나, 정열된 목록에서 단어 찾기

lookbib - 도서목록형 데이타베이스에서 찾기

lorder - 오브젝트 라이브러리의 관계 찾기

lp, cancel - 인쇄 시작, 취소

lpq - 인쇄 작업 상황 보기

lpr - 인쇄

lprm - 인쇄 작업 지우기

ls - 디렉토리 내용 보기

mail, Mail - 전자 우편 프로그램

make - 실행 파일을 만들거나, 특정 작업 파일을 만들 때 사용하는 도구

man - 온라인 사용자 설명서를 보는 명령

mesg - 메시지 수신 상태를 보거나 지정

mkdir - 디렉토리 만들기

mkstr - C 소스 파일을 참조로 오류 메시지 파일을 만듬.

more, page - 텍스트 파일 보기 명령

mv - 파일 이동이나, 이름 바꾸기

nawk - 패턴 검색과 언어 처리

nice - 낮은 우선권에서 명령 실행

nm - 심블 이름 목록 보기

nroff - 문서 포멧 도구

od - 8진수, 10진수, 16진수, ascii 덤프

passwd, chfn, chsh - 비밀번호, 핑거정보, 쉘 바꾸기

paste - 여러파일의 서로 관련 있는 줄 연결시키기

pr - 문서 파일 양식화 도구

printenv - 현재 환경 변수들의 내용과 그 값 알아보기

prof - profile 자료 보기

ps - 현재 프로세스 정보 보기

ptx - permuted(순열화된?, 교환된?) 색인 만들기

pwd - 현재 작업 디렉토리 보기

quota - 한 사용자에게 지정된 디스크 할당량보기

ranlib - archive를 random 라이브러리로 변화

rcp - 리모트 카피

rcs - RCS 파일 속성 바꾸기

rcsdiff - RCS revisions 비교

rev - 한 줄의 문자열 꺼꾸로

rlogin - 리모트 로그인

rm, rmdir - 파일, 디렉토리 지우기

roffbib - 도서목록형 데이터베이스 보기 또는 양식화

rsh - 리모트 쉘

rup - 로칼 머쉰의 호스트 상태 보기(RPC version)

ruptime - 로칼 머쉰의 호스트 상태 보기

rusers - 현재 접속자 보기 (RPC version)

rwall - 모든 사용자에게 알림(RPC)

rwho - 현재 접속자 보기

sccs - Source Code Control System (SCCS)

sccs-admin, admin - SCCS 사용 내역 파일을 만들고, 관리

sccs-cdc, cdc - SCCS 델타의 델파 주석을 바꿈

sccs-comb, comb - SCCS 델타 조합

sccs-delta, delta - SCCS 파일에 데해 델타를 만듬

sccs-get, get - SCCS 파일 버전확인

sccs-help, help - SCCS 오류나 경고 메시지 검색

sccs-prs, prs - SCCS 사용내역의 선택된 부분 보기

sccs-prt, prt - SCCS 파일에서 델타 테이블 정보를 봄

sccs-rmdel, rmdel - SCCS 파일에서 델타를 지움

sccs-sact, sact - SCCS 파일의 편집 상태를 봄

sccs-sccsdiff, sccsdiff - SCCS 파일들의 버전 비교

sccs-unget, unget - SCCS 파일의 미리 얻은 것(?)을 취소한다.

sccs-val, val - SCCS 파일 유요화

script - 화면 갈무리

sed - stream editor

sh - 유닉스 표준 쉘

size - 오브젝트 파일의 크기들을 보여줌

sleep - 지정한 시간 만큼 실행 보류

sort - 줄 정열과 검색

sortbib - 도서목록형 데이터베이스 정열

spell, hashmake, spellin, hashcheck - 맞춤범 검사(물론 영어겠지요)

split - 파일 나누기

strings - 오브젝트 파일이나, 실행 파일에서 문자열 찾기

strip - 오브젝트 파일에서 심벌 테이블과 중복된 비트 삭제

stty - 터미날 설정

su - super-user, 임시적으로 새 ID로 바꿈

symorder - 심벌 순서 바꿈

tabs - 터미날 tab 크기 지정

tail - 파일의 끝 부분 보기

talk - 다른 사용자와 이야기하기

tar - 여러 파일 묶기 또는 묶긴 파일 풀기

tbl - nroff 또는 troff의 도표 작성 도구

tee - 표준 출력으로 방향 전환

telnet - TELNET 프로토콜을 이용한 원격 리모트 호스트 접속

test - 주워진 환경이 참인지, 거짓인지를 돌려줌

tftp - 간단한 ftp.

time - 명령 실행 시간 계산

touch - 파일 날짜 관련 부분을 바꿈

troff - 문서 양식화 도구

true, false - 쉘 스크립트에서 사용되는 참/거짓을 리턴하는 명령

tsort - topological sort

tty - 현재 터미날 이름 보기

ue - MICROemacs

ul - 밑줄 속성 문자 표현

unifdef - cpp 입력 줄에서 ifdef 부분 바꾸거나 지움

uniq - 중복되는 빈줄 지우기

units - 프로그램 변환도구

uptime - 시스템 부팅 기간 보기

users - 현재 접속 사용자 보기

uucp, uulog, uuname - 시스템 간의 복사

uuencode, uudecode - 이진 파일을 아스키파일로 인코딩, 반대로 디코딩

uusend - 리모트 호스트에 파일 보내기

uux - 리모트 시스템 명령 실행

vacation - 자동으로 편지 답장하기

vgrind - grind nice program listings

vi, view, vedit - ex 바탕의 편집기

vtroff - 문서 양식화 도구

w - 현재 누가 접속해 있으며, 무엇을 하고있는지

wait - 프로세스가 마치기를 기다림

wall - 모든 사용자에게 알림

wc - 단어, 줄, 바이트 계산

what - 파일에서 SCCS 버전 정보 알아냄

whatis - 명령의 간단한 설명 보여줌

whereis - 찾는 명령의 실행파일, 소스, 맨페이지가 어디 있는지 경로를 보여

which - 명령만 찾음.

who - 시스템에 접속되어 있는 사람만 보여줌

whoami - 현재 사용하고 있는 자신이 누군지 보여줌

write - 다른 사용자의 화면에 특정 내용을 알림

xargs - 명령행 인자 처리 명령

xstr - extract strings from C programs to implement shared strings

yacc - yet another compiler-compiler: 파싱(형태소분석) 프로그램 생성기

yes - 항상 yes만 응답하는 명령

zcat - 압축 파일 내용보기

시스템의 정보를 /proc 화일들을 통해 간략하게 알 수 있습니다.

/proc/cmdline : 현재 사용중인 부트 이미지( 명령행줄 )

/proc/cpuinfo : cpu의 상세정보

/proc/devices : 커널에 로드된 device들

/proc/dma : DMA 채널

/proc/filesystems : 현재 사용가능한 화일시스템

/proc/interrupts : 사용중인 IRG 정보

/proc/ioports : 사용중인 i/o 포트 정보

/proc/meminfo : 현재 사용중인 메모리

/proc/pci : pci 정보

/proc/partitions : 파티션 정보

/proc/swaps : 스왑파티션정보

/proc/version : 커널 버전




Unix 기본 명령어

ls [-option][file/directory] : 디렉토리의 내용을 화면에 출력

cd : 현재 디렉토리를 바꿈

cp file1 [file2] target : 지정된 파일을 다른 이름으로 복사

mv <현재 이름><변경될 이름> : 디렉토리 또는 파일의 이름을 변경

rm [-f][i]file : 파일 혹은 디렉토리를 삭제

mkdir [-m]mode[-p]<경로><디렉토리 이름> : 새로운 디렉토리를 만듬

rmdir [-ps]<디렉토리이름> : 지정된 디렉토리를 제거

pwd : 현재의 작업디렉토리를 화면에 출력

cat : 파일의 내용을 표준 출력 장치로 내보내는 명령어

df [-lt][-f][{}] : 슈퍼블록에서 카운트하고 있는 마운트된 파일 시스템, 디렉토리에서 사용가능한 디스크블록과 freeinode수를 알려줌

chmod mode file : 지정된 파일에 대한 사용 권한을 변경하고자 할 때 사용

du : 사용자 자신의 디스크 사용 상황을 블록 단위로 출력해줌

grep [option] limited regular expression [file] : 파일에서 특정한 패턴을 찾는데 사용되며, 그 패턴을 포함하고 있는 모든 행을 출력함

kill [-sihno] PID  : 지정한 프로세서에게 종료신호를 보내는 명령어

ps : 컴퓨터 시스템에서 활동중인 프로세서의 상태를 알려주는 명령

ln [-f][-n][-s]file1[file2] target : 두개의 파일을 연결하여 사용

sort [option]files : 파일을 정렬 혹은 병합

tail : 지정된 파일의 끝 부분을 출력

tar [-]{txruc}[vwfblm][0-7[lmh]][tapefile][blocksize]file1 file2  : 파일들을 자기 테이프에 저장 또는 불러오기 위한 명령어

wc file : 텍스트 파일에 담겨져 있는 문자 수, 단어 수 및 라인 수를 화면에 출력하는 명령

passwd : 자신의 암호를 등록하거나 변경할 때 사용

chgrp group file : 지정된 파일의 소유권자 그룹을 바꾸는 명령

chown owner file : 지정된 파일에 대한 소유 권한을 변경하고자 할 때 사용






아파치 서버 접속자수 netstat -anp | grep :80 | wc -l

현재 시스템 사용량 top

사용중인 프로세스 보기 ps -ax or ps -aux | grep ~

프로세스 중단 kill -9 번호

메일 삭제법 /var/spool/mail 폴더 아래에 자신의 아이디를 지우면 된다.

http 데몬 설정확인 /usr/local/apache/bin/httpd -t

http 데몬 다시시작 /usr/local/apache/bin/httpd restart

Apache 서버 다시시작 /usr/local/apache/bin/apachectl restart

ProFTP 서버 다시시작 /etc/rc.d/init.d/proftpd restart

파일, 디렉토리 소유권 바꾸기 chmod * ID

FTP 현제 접속자 확인 ftpwho (or ftpcount)

mail 이동(옮기기) cat /var/spool/mail/ID | formail -s sendmail 보낼-이메일주소

http 방문자 히트수표시 grep "GET / HTTP" /var/log/httpd/access_log | wc -l

Log 파일 삭제 /var/log 디렉토리에 있는 파일중(filename.number) 숫자부분이 있는 파일만 삭제하면 된다




=============================================


시스템 관리시 알아두면 편리한 명령어들을 위주로 상세 설명한 글(첫번째)



chown, chgrp



chown 명령어는 파일의 소유권을 바꿔줍니다. root가 특정 사용자가 소유한 파일을 다른 사용자용으로 바꾸려고 할 때 유용하게 쓰입니다. 하지만, 일반 사용자는 자신이 소유한 파일조차도 소유권을 바꿀 수 없습니다.

 root# chown bozo *.txt
 


chgrp 명령어는 파일의 그룹 소유권을 바꿔줍니다. 이 명령어를 쓰려면 그 파일의 소유자이고 바꾸려는 그룹의 멤버여야 합니다(혹은 root이거나).


chgrp --recursive dunderheads *.data

# $PWD 디렉토리의 모든 하위 디렉토리("recursive"에 의해)의

# 모든 "*.data" 파일들은 "dunderheads" 그룹이 그 소유권을 갖습니다.


 


useradd, userdel



관리자용 명령어인 useradd는 시스템에 사용자 계정을 추가해 주고 그 사용자용으로 지정된 홈 디렉토리를 만들어 줍니다. useradd와 쌍을 이루는 userdel는 시스템에서 사용자 계정을 삭제해 주고 해당 파일들도 삭제해 줍니다.



참고: adduser 명령어는 useradd의 동의어로서, 보통 useradd를 가르키는 심볼릭 링크 파일입니다.



id



id 명령어는 현재 사용자의 실제 ID와 유효 사용자 ID, 그룹 ID를 보여줍니다. 내부 bash 변수인 $UID, $EUID, $GROUPS와 짝을 이룹니다.


bash$ id

uid=501(bozo) gid=501(bozo) groups=501(bozo),22(cdrom),80(cdwriter),81(audio)


bash$ echo $UID

501


 


who



시스템에 현재 로그인해 있는 모든 사용자를 보여줍니다.



 

bash$ who

bozo tty1 Apr 27 17:45

bozo pts/0 Apr 27 17:46

bozo pts/1 Apr 27 17:47

bozo pts/2 Apr 27 17:49


 


-m을 주면 오직 현재 사용자에 대한 자세한 정보만을 보여줍니다. who am i나 who The Man처럼 who에 아무 인자나 두 개 넘겨주면 who -m 이라고 한 것과 같습니다.



 

bash$ who -m

localhost.localdomain!bozo pts/2 Apr 27 17:49


 


whoami는 who -m 과 비슷하지만 사용자 이름만 보여줍니다.



 

bash$ whoami

bozo


 


w



로그인 되어 있는 사용자와 그 사용자와 관련된 모든 프로세스를 보여 줍니다. 이는 who의 확장 버전인데, w의 출력에 grep으로 파이프를 걸어서 특정한 사용자나 프로세스를 찾을 수 있습니다.

아래는 bozo가 startx 라는 명령어를 실행하고 있다는 것을 알수 있습니다.



 

bash$ w | grep startx

bozo tty1 - 4:22pm 6:41 4.47s 0.45s startx


 


logname



현재 사용자의 로그인 이름을 /var/run/utmp에서 찾아서 보여줍니다. 위에서 설명한 whoami와 거의 동일한 명령어입니다.



 

bash$ logname

bozo


bash$ whoami

bozo

그렇지만...
 


 

bash$ su

Password: ......


bash# whoami

root

bash# logname

bozo


 


즉 로그인 할 당시의 계정을 알수 있는 명령어입니다..



su



다른 사용자(substitute user)로 프로그램이나 스크립트를 실행 시킵니다. rjones란 사용자로 쉘을 새롭게 시작하고 싶으면 su rjones라고 하면 됩니다. 옵션 없이 su만 실행시키면 기본적으로 root 로 받아들입니다.



users



로그인 하고 있는 모든 사용자를 보여줍니다. 이 명령어는 who -q 와 거의 비슷한 명령어입니다.



ac



사용자가 로그인 해 있던 시간을 /var/log/wtmp 에서 읽어서 보여줍니다. 이 명령어는 GNU 계정 유틸리티(accounting utility) 중 하나입니다.



 

bash$ ac

total 68.08


 


last



사용자가 마지막으로 로그인 한 시간을 /var/log/wtmp에서 읽어서 보여줍니다. 이 명령어는 외부에서 로그인 한 정보도 보여줄 수 있습니다.



groups



현재 사용자가 속해 있는 그룹을 보여줍니다. 내부 변수인 $GROUPS에 해당하는 명령어이지만 숫자가 아닌 그룹 이름으로 보여줍니다.



 

bash$ groups

bozita cdrom cdwriter audio xgrp


bash$ echo $GROUPS

501


 





newgrp



로그아웃 없이 사용자의 그룹 ID를 변경하기. 이 명령어를 쓰면 새 그룹의 파일에 접근할 수 있게 됩니다. 사용자는 보통 동시에 여러 그룹의 멤버이기 때문에 이 명령어를 쓸 일은 별로 없습니다



uname

시스템 사양(OS, 커널 버전등)을 표준출력으로 보여줍니다. -a 옵션을 주면 시스템 정보를 아주 자세하게 보여주고(예 12-4 참고), -s 옵션을 주면 OS 종류만 보여줍니다.



 

bash$ uname -a

Linux localhost.localdomain 2.2.15-2.5.0 #1 Sat Feb 5 00:13:43 EST 2000 i686 unknown


bash$ uname -s

Linux


 



arch

시스템 아키텍쳐를 보여줍니다. uname -m 과 동일한 명령어입니다. 예 10-24를 참고하세요.



 

bash$ arch

i686


bash$ uname -m

i686


 



lastcomm

/var/account/pacct 파일에 저장돼 있는 이전 명령어들에 대한 정보를 알려줍니다. 옵션으로 명령어와 사용자 이름을 지정해 줄 수 있습니다. 이 명령어는 GNU 계정 유틸리티(accounting utility)중의 하나입니다.



lastlog

시스템의 모든 사용자가 마지막으로 로그인한 시간을 보여줍니다. 이 명령어는 /var/log/lastlog 파일을 참조합니다.



 

bash$ lastlog

root tty1 Fri Dec 7 18:43:21 -0700 2001

bin **Never logged in**

daemon **Never logged in**

...

bozo tty1 Sat Dec 8 21:14:29 -0700 2001


bash$ lastlog | grep root

root tty1 Fri Dec 7 18:43:21 -0700 2001


 



경고 : /var/log/lastlog 파일에 읽기 퍼미션이 없는 사용자가 이 명령어를 실행시키면 실패합니다.



lsof

현재 열려 있는 파일들을 보여줍니다. 이 명령어는 현재 열려 있는 모든 파일들에 대한 자세한 표와 각각의 파일에 대한 소유자, 크기, 관련 프로세스등의 정보를 보여 줍니다. 당연히, lsof의 출력은 파이프를 통해 grep나 awk로 넘겨서 파싱해서 분석할 수 있습니다.



 

bash$ lsof

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

init 1 root mem REG 3,5 30748 30303 /sbin/init

init 1 root mem REG 3,5 73120 8069 /lib/ld-2.1.3.so

init 1 root mem REG 3,5 931668 8075 /lib/libc-2.1.3.so

cardmgr 213 root mem REG 3,5 36956 30357 /sbin/cardmgr

...


 



strace

시스템 콜과 시그널을 추적해서 진단하고 디버깅해 주는 도구입니다. 가장 간단하게 실행시키는 방법은 strace COMMAND라고 치는 것입니다.



 

bash$ strace df

execve("/bin/df", ["df"], [/* 45 vars */]) = 0

uname({sys="Linux", node="bozo.localdomain", ...}) = 0

brk(0) = 0x804f5e4

...


이 명령어는 리눅스에서의 truss 입니다.


 



free

메모리와 캐쉬 사용량을 탭이 들어간 형태로 보여줍니다. 이 명령어의 출력은 grep이나, awk, Perl을 써서 파싱하기에 알맞은 형태입니다. procinfo 명령어는 free가 보여주는 정보 이외에 더 많은 정보도 보여줍니다.



 

bash$ free

total used free shared buffers cached

Mem: 30504 28624 1880 15820 1608 16376

-/ buffers/cache: 10640 19864

Swap: 68540 3128 65412


 



사용하지 않는 램 용량을 보려면:



 

bash$ free | grep Mem | awk '{ print $4 }'

1880


 





procinfo

/proc 가상 파일시스템에서 여러 정보와 통계를 뽑아내서 광범위하고 자세하게 보여 줍니다.



 

bash$ procinfo | grep Bootup

Bootup: Wed Mar 21 15:15:50 2001 Load average: 0.04 0.21 0.34 3/47 6829


 



lsdev

설치된 하드웨어 디바이스의 목록을 보여줍니다.



 

bash$ lsdev

Device DMA IRQ I/O Ports

------------------------------------------------

cascade 4 2

dma 0080-008f

dma1 0000-001f

dma2 00c0-00df

fpu 00f0-00ff

ide0 14 01f0-01f7 03f6-03f6

...


 



du

디스크의 파일 사용량을 재귀적으로 보여줍니다. 특별히 지정하지 않으면 현재 디렉토리에 대해서 동작합니다.



 

bash$ du -ach

1.0k ./wi.sh

1.0k ./tst.sh

1.0k ./random.file

6.0k .

6.0k total


 



df

파일시스템 사용량을 탭이 들어간 형태로 보여 줍니다.



 

bash$ df

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/hda5 273262 92607 166547 36% /

/dev/hda8 222525 123951 87085 59% /home

/dev/hda7 1408796 1075744 261488 80% /usr


 



stat

주어진 파일(디렉토리나 디바이스 파일도)에 대해서 자세한 통계(statistics)를 알려줍니다.



 

bash$ stat test.cru

File: "test.cru"

Size: 49970 Allocated Blocks: 100 Filetype: Regular File

Mode: (0664/-rw-rw-r--) Uid: ( 501/ bozo) Gid: ( 501/ bozo)

Device: 3,8 Inode: 18185 Links: 1

Access: Sat Jun 2 16:40:24 2001

Modify: Sat Jun 2 16:40:24 2001

Change: Sat Jun 2 16:40:24 2001


 



존재하지 않는 파일에 대해서 stat을 실행시키면 에러 메세지를 냅니다.



 

bash$ stat nonexistent-file

nonexistent-file: No such file or directory


 



vmstat

가상 메모리(virtual memory) 통계(statistics)를 보여줌.



 

bash$ vmstat

procs memory swap io system cpu

r b w swpd free buff cache si so bi bo in cs us sy id

0 0 0 0 11040 2636 38952 0 0 33 7 271 88 8 3 89


 



netstat

라우팅 테이블이나 활성화되어 있는 네트워크 연결같은 네트워크 통계와 정보를 보여 줍니다. 이 유틸리티는 /proc/net(28장)에서 정보를 얻어 옵니다. 예 28-2을 참고하세요.



uptime

시스템이 얼마나 오랫동안 돌고 있었는지 관련 통계와 함께 보여줍니다.



 

bash$ uptime

10:28pm up 1:57, 3 users, load average: 0.17, 0.34, 0.27


 



hostname

시스템의 호스트명을 보여줍니다. 이 명령어는 /etc/rc.d 에 들어 있는 셋업 스크립트에서 호스트명을 설정해 줍니다(/etc/rc.d/rc.sysinit이나 비슷한 스크립트). uname -n과 동일한 명령어이고 내부 변수인 $HOSTNAME과 연관이 있습니다.



 

bash$ hostname

localhost.localdomain


bash$ echo $HOSTNAME

localhost.localdomain


 



hostid

호스트 머신에 대한 32비트 16진수 구분자를 에코해 줍니다.



 

bash$ hostid

7f0100


 



참고: 이 명령어는 특정 시스템에 대해 "유일한"(unique) 시리얼 숫자를 구해줍니다. 몇몇 상업용 제품의 등록 과정에서 이 숫자를 이용해 사용자 라이센스를 만들어 냅니다. 하지만 불행하게도 hostid는 오직 네트워크 주소를 두 바이트 단위로 뒤집어 16진수로 리턴해 줍니다.

네트워크에 물리지 않은 리눅스 머신의 전형적인 네트워크 주소는 /etc/hosts에서 알아낼 수 있습니다.



 

bash$ cat /etc/hosts

127.0.0.1 localhost.localdomain localhost


 



공교롭게도 127.0.0.1을 두 바이트 단위로 뒤집으면 0.127.1.0이 되고 이를 16진수로 변환하면 007f0100이 되는데 이는 위에서 살펴본 hostid가 리턴하는 값과 정확히 일치합니다. 결국 동일한 hostid를 갖는 리눅스 머신이 수 백만 개가 존재하게 되는 것입니다.



logger



 

사용자가 만들어낸 메세지를 시스템 로그(/var/log/messages)에 추가 시킵니다. 이 명령어는 일반 사용자도 쓸 수 있습니다.

logger Experiencing instability in network connection at 23:10, 05/21.

# 자, 이제 'tail /var/log/messages' 라고 해 보세요.


 





 

스크립트에 logger 명령어를 넣어서 디버깅 정보를 /var/log/messages에 쓸 수 있습니다.

logger -t $0 -i Logging at line "$LINENO".

# "-t" 옵션은 logger 엔트리용 태그를 지정합니다.

# "-i" 옵션은 프로세스 ID를 지정합니다.

# tail /var/log/message

# ...

# Jul 7 20:48:58 localhost ./test.sh[1712]: Logging at line 3.


 



logrotate

이 유틸리티는 시스템 로그 파일들을 적당하게 로테이트 시키고, 압축하고, 지우고, 메일을 보내는 일들을 처리해 줍니다. 보통 crond은 logrotate를 가장 기본적인 하루 일과로 삼습니다.

/etc/logrotate.conf에 적당한 내용을 적어주면 시스템 전체 로그뿐만 아니라 개인용 로그 파일을 관리할 수 있습니다.



ps

프로세스 통계(Process Statistics): 현재 실행중인 프로세스들을 사용자와 PID(프로세스 아이디)에 의해서 보여줌. 보통은 ax 옵션을 줘서 부르고, grep이나 sed로 파이프를 걸어서 특정 프로세스를 찾습니다(예 11-8와 예 28-1 참고).



 

bash$ ps ax | grep sendmail

295 ? S 0:00 sendmail: accepting connections on port 25


 



pstree

현재 실행중인 프로세스를 "나무"(tree) 형태로 보여 줍니다. -p 옵션을 주면 프로세스 이름뿐만 아니라 PID까지 보여 줍니다.



top

cpu를 집중적으로 사용하는 프로세스를 중심으로 최신 정보를 계속 보여줍니다. -b 옵션은 결과를 텍스트 모드로 보여주기 때문에 파싱을 하거나 스크립트에서 접근할 수가 있습니다.



 

bash$ top -b

8:30pm up 3 min, 3 users, load average: 0.49, 0.32, 0.13

45 processes: 44 sleeping, 1 running, 0 zombie, 0 stopped

CPU states: 13.6% user, 7.3% system, 0.0% nice, 78.9% idle

Mem: 78396K av, 65468K used, 12928K free, 0K shrd, 2352K buff

Swap: 157208K av, 0K used, 157208K free 37244K cached


PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND

848 bozo 17 0 996 996 800 R 5.6 1.2 0:00 top

1 root 8 0 512 512 444 S 0.0 0.6 0:04 init

2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd

...


 



nice

백그라운드 작업의 우선순위를 바꿔줍니다. 우선순위는 19(제일 낮음)에서 -20(제일 높음)까지 인데, 오직 root만이 음수(높은) 우선순위를 줄 수 있습니다. 관련 명령어로는 renice, snice, skill이 있습니다.



nohup

사용자가 로그 아웃을 하더라고 명령어가 계속 돌게 해 줍니다. 명령어에 &를 붙여 실행하지 않으면 포그라운드로 실행이 될 것입니다. nohup을 스크립트에서 쓸 때는, 고아 프로세스나 좀비 프로세스가 생기지 않도록 wait과 같이 써야 합니다.



pidof

실행중인 작업의 프로세스 ID(pid)를 식별해 줍니다. kill이나 renice같은 작업 제어 명령어들은 프로세스 이름이 아니라 pid에 대해 동작하기 때문에 종종 pid로 구분할 필요가 생깁니다. pidof 명령어는 내부 변수인 $PPID와 거의 쌍을 이룹니다.



 

bash$ pidof xclock

880


 





 

예 13-4. pidof 로 프로세스를 죽이기


#!/bin/bash

# kill-process.sh


NOPROCESS=2


process=xxxyyyzzz # 존재하지 않는 프로세스를 가지고,

# 그냥 데모용임...

# ... 실제로 돌고 있는 어떤 프로세스도 죽이려고 하는게 아니니까.

#

# 하지만, 예를 들어 인터넷에서 로그오프하고 싶다면

# process=pppd

# 됩니다.


t=`pidof $process` # $process의 pid(프로세스 ID)를 찾고,

# 'kill'은 프로그램 이름이 아니라 pid를 쓰기 때문에


if [ -z "$t" ] # 해당 프로세스가 없다면 'pidof'는 널을 리턴함.

then

echo "$process 는 현재 실행중이 아니므로 그냥 종료합니다."

exit $NOPROCESS

fi


kill $t # 잘 죽지 않는 프로세스라면 'kill -9'라고 해야 할지도 모릅니다.


# 죽지 않게 돼 있는 프로세스일수도 있기 때문에

# 다시 한 번 " t=`pidof $process` " 로 확인해 볼 필요가 있습니다.


# 위 전체 스크립트는

# kill $(pidof -x process_name)

# 이라고 할 수도 있겠으나 그러면 교육적이지는 않은것 같군요.


exit 0


 



fuser

어떤 파일이나, 파일 집합, 디렉토리에 접근하고 있는 프로세스를 PID로 식별해 줍니다. -k 옵션을 쓰면 해당 프로세스를 죽일 수 있습니다. 이 명령어는 시스템 보안 차원에서 아주 흥미로운 구현인데 주로 스크립트에서 쓰여 시스템 서비스에 대해 허가 받지 않은 사용자의 접근을 막는 용도로 쓰입니다.



crond

시스템 관리용 스케쥴러 프로그램으로서, 시스템 로그 파일을 정리하고 지운다거나 slocate 데이타 베이스를 업데이트 하는 등의 일을 해 줍니다. at의 루트 사용자 버전용 명령어입니다(물론, 각 사용자는 crontab 명령어를 써서 자신만의 crontab 파일을 가질수도 있습니다). 데몬으로 돌면서 /etc/crontab의 내용들을 스케쥴에 따라 실행시켜 줍니다.



init

init 명령어는 모든 프로세스의 부모 프로세스로서, 시스템 부팅 과정의 제일 마지막에 불리면서 /etc/inittab을 읽어서 시스템의 런레벨을 결정합니다. 오직 루트만이 별명인 telinit으로 부를 수 있습니다.



telinit

init를 가르키는 심볼릭링크로서, 시스템 런레벨을 바꿀 때 쓰는데 보통은 시스템 관리나 긴급하게 파일시스템을 수리해야 할 때 씁니다. 오직 루트만 이 명령어를 쓸 수 있습니다. 이 명령어는 아주 위험하기 때문에 쓰기 전에 이 명령어를 잘 이해하고 있어야 합니다!



runlevel

현재와 바로 전의 런레벨을, 시스템이 정지 상태인지(런레벨 0), 단일 사용자 모드인지(1), 다중 사용자 모드인지(2나 3), X 윈도우 모드인지(5), 리부팅 중인지(6)등으로 보여 줍니다. 이 명령어는 /var/run/utmp 파일을 통해 정보를 얻어 옵니다.



halt, shutdown, reboot

보통 시스템 전원을 끄기 전에 시스템을 정지시키는 명령어들.



ifconfig

네트워크 인터페이스 설정및 튜닝 유틸리티. 이 명령어는 부팅시 인터페이스를 설정할 때나 리부팅때 인터페이스를 내리기 위해 쓰입니다.



 

# /etc/rc.d/init.d/network 의 일부분

# ...

# 네트워킹이 가능한지 확인.

[ ${NETWORKING} = "no" ] && exit 0


[ -x /sbin/ifconfig ] || exit 0


# ...


for i in $interfaces ; do

if ifconfig $i 2>/dev/null | grep -q "UP" >/dev/null 2>&1 ; then

action "Shutting down interface $i: " ./ifdown $i boot

fi

# "grep"의 GNU 전용인 "-q" 옵션은 "quiet"를 뜻하고, 어떤 출력도 하지 않게 합니다.

# 따라서 출력을 /dev/null 로 재지향 하는 것이 꼭 필요하지 않습니다.


# ...


echo "현재 동작중인 디바이스:"

echo `/sbin/ifconfig | grep ^[a-z] | awk '{print $1}'`

# ^^^^^ globbing 을 막기 위해 쿼우트 시켜야 합니다.

# 다음도 역시 동작합니다.

# echo $(/sbin/ifconfig | awk '/^[a-z]/ { print $1 })'

# echo $(/sbin/ifconfig | sed -e 's/ .*//')


 



route

커널 라우팅 테이블 정보를 보거나 바꿀 수 있게 해 줍니다.



 

bash$ route

Destination Gateway Genmask Flags MSS Window irtt Iface

pm3-67.bozosisp * 255.255.255.255 UH 40 0 0 ppp0

127.0.0.0 * 255.0.0.0 U 40 0 0 lo

default pm3-67.bozosisp 0.0.0.0 UG 40 0 0 ppp0


 



chkconfig

네트워크 설정을 체크해줌. 이 명령어는 /etc/rc?.d 디렉토리에 들어있고 부팅시 시작되는 네트워크 서비스들을 보여주고 관리해 줍니다.



원래는 IRIX에 있던 것을 레드햇 리눅스가 포팅한 것으로 다른 리눅스 배포판에서는 기본 설치에 속하지 않을 수도 있습니다.



 

bash$ chkconfig --list

atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

rwhod 0:off 1:off 2:off 3:off 4:off 5:off 6:off

...


 



tcpdump

네트워크 패킷 "스니퍼". 주어진 기준에 맞는 패킷 헤더의 덤프를 떠서 네트워크 트래픽을 분석하고 문제점을 해결할 수 있게 해 줍니다.



bozoville 와 caduceus 두 호스트간의 IP 패킷 트래픽을 덤프:



 

bash$ tcpdump ip host bozoville and caduceus


 



당연히 tcpdump의 출력은 앞에서 논의했던 텍스트 처리 유틸리티들을 이용해서 파싱할 수가 있습니다.




mount

파일시스템을 마운트해 줍니다. 보통은 플로피나 시디롬 같은 외부 디바이스에 대해서 쓰입니다. /etc/fstab에 가능한 파일시스템이나 파티션, 디바이스, 옵션등을 적어 놓으면 자동이나 수동으로 마운트를 편하게 할 수 있습니다. /etc/mtab 파일은 /proc 같은 가상 파일시스템도 포함해서 현재 마운트 되어 있는 파일 시스템을 보여 줍니다.



mount -a 는 /etc/fstab에 들어 있는 파일 시스템과 파티션중에 noauto 옵션이 있는 항목만 빼고 모두 마운트 해 줍니다. 부팅될 때, 모든 파티션이 마운트 되도록 /etc/rc.d 디렉토리에 들어 있는 시스템 구동 스크립트(rc.sysinit이나 비슷한 것)에서 이 명령어를 부릅니다.



 

mount -t iso9660 /dev/cdrom /mnt/cdrom

# CDROM 마운트

mount /mnt/cdrom

# /mnt/cdrom 이 /etc/fstab 에 들어 있을 경우 짧게 부르기


 



이 다재다능한 명령어는 보통 파일을 블럭 디바이스에 존재하는 파일 시스템처럼 마운트 할 수도 있습니다. 이런 능력은 루프백 디바이스(loopback device)라고 하는 파일을 이용해서 가능해 집니다. 이 루프백 디바이스를 적용한 예로서, ISO9660 이미지를 CDR로 굽기 전에 마운트해서 테스트 해보는 것이 있습니다. [3]



 

예 13-5. CD 이미지 확인하기


# 루트로...


mkdir /mnt/cdtest # 마운트 포인트가 없다면 준비함.


mount -r -t iso9660 -o loop cd-image.iso /mnt/cdtest # 이미지 마운트.

# "-o loop" 옵션은 "losetup /dev/loop0" 와 같음.

cd /mnt/cdtest # 이제 이미지를 확인.

ls -alR # 이미지에 들어있는 디렉토리 트리에 들어 있는 파일들을 나열.

# 기타 등등...


 



umount

현재 마운트 되어 있는 파일 시스템을 언마운트 해 줍니다. 이미 마운트 되어 있는 플로피나 시디롬 디스크를 빼기 전에 꼭 umount를 해 줘야 합니다. 안 그러면 파일 시스템이 깨질 수도 있습니다.



 

umount /mnt/cdrom


 



# 이제 이젝트 버튼을 눌러 디스크를 안전하게 뺄 수 있습니다.



참고: automount 유틸리티가 적절하게 설치되어 있다면 플로피나 시디롬 디스크에 접근시나 제거시에 자동으로 마운트와 언마운트를 할 수 있습니다. 플로피나 시디롬 드라이브를 꼈다 뺐다 할 수 있는 랩탑에서는 문제를 일으킬 수도 있습니다.



sync

버퍼에 들어 있는 최신 데이타를 하드 드라이브로 즉시 쓰게 합니다(버퍼와 드라이브를 동기화). 이 명령어가 꼭 필요한 것은 아니지만 시스템 관리자나 사용자에게 자신들이 변경한 데이타가 갑작스런 전원 이상에도 살아남을 수 있게 해 줍니다. 예전에는 sync; sync(아주 확실히 하기 위해서 두 번 내림)라고 해서 시스템을 리부팅하기 전의 유용한 예방책으로 쓰였습니다.



파일을 안전하게 지우거나(예 12-33) 천장의 전등이 깜빡이기 시작했을 때 버퍼를 즉시 플러쉬시키고 싶을 때가 있을지도 모릅니다.



losetup

루프백 디바이스를 설정해 줍니다.



 

예 13-6. 한 파일에서 한번에 파일 시스템 만들기


SIZE=1000000 # 1 meg


head -c $SIZE < /dev/zero > file # 지정된 크기로 파일을 설정.

losetup /dev/loop0 file # 루프백 디바이스로 설정.

mke2fs /dev/loop0 # 파일 시스템 만들기.

mount -o loop /dev/loop0 /mnt # 마운트.


 



mkswap

스왑 파티션이나 스왑 파일을 만들어 줍니다. 이 명령어 다음에는 꼭 swapon으로 활성화를 시켜줘야 합니다.



swapon, swapoff

스왑 파티션이나 스왑 파일을 활성화/비활성화 시켜 줍니다. 이 명령어는 보통 부팅시나 셧다운시에 효력을 갖습니다.



mke2fs

리눅스 ext2 파일시스템을 만들어 줍니다. 이 명령어는 루트로 실행 시켜야 합니다.



 

예 13-7. 새 하드 드라이브 추가하기


#!/bin/bash


# 시스템에 두 번째 하드 드라이브 추가하기.

# 소프트웨어 설정. 하드웨어가 이미 마운트돼 있다고 가정함.

# 본 문서의 저자가 "Linux Gazett", http://www.linuxgazette.com, 38호에

# 쓴 기사에서 발췌.


ROOT_UID=0 # 이 스크립트는 루트로 실행 시켜야 됩니다.

E_NOTROOT=67 # root 가 아닌 경우의 종료 에러.


if [ "$UID" -ne "$ROOT_UID" ]

then

echo "이 스크립트는 루트만 실행시킬 수 있습니다."

exit $E_NOTROOT

fi


# 이 스크립트는 정말 주의해서 쓰기 바랍니다!

# 만약 무언가가 잘못된다면 여러분의 파일 시스템을 홀라당 날려먹을 수 있습니다.



NEWDISK=/dev/hdb # /dev/hdb 가 비어 있다고 가정함. 꼭 확인해 볼 것!

MOUNTPOINT=/mnt/newdisk # 아니면 다른 마운트 포인트 지정.



fdisk $NEWDISK

mke2fs -cv $NEWDISK1 # 배드 블럭 확인및 자세한 출력.

# 주의: /dev/hdb 가 *아니라* /dev/hdb1 입니다!

mkdir $MOUNTPOINT

chmod 777 $MOUNTPOINT # 새 드라이브는 모든 사용자가 접근할 수 있도록 함.



# 자, 테스트를 해 보죠.

# mount -t ext2 /dev/hdb1 /mnt/newdisk

# 디렉토리를 만들어 보고 잘 된다면 umount 한 다음 하던 일을 계속하면 됩니다.


# 마지막 단계:

# 다음을 /etc/fstab 에 추가해 주세요.

# /dev/hdb1 /mnt/newdisk ext2 defaults 1 1


exit 0


 



tune2fs

ext2 파일 시스템을 튜닝해 줍니다. 최대 마운트 숫자같은 파일 시스템 매개변수를 바꾸는데 쓰일 수 있습니다. 루트로 실행해야 됩니다.



주의 : 이 명령어는 굉장히 위험합니다. 부주의하게 쓴다면 여러분 파일 시스템을 박살낼 수도 있기 때문에 여러분 스스로 책임을 지고 써야 합니다.



dumpe2fs

아주 자세한 파일 시스템 정보를 표준출력으로 덤프해 줍니다. 루트로 실행되야 합니다.



 

root# dumpe2fs /dev/hda7 | grep 'ount count'

dumpe2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09

Mount count: 6

Maximum mount count: 20


 



hdparm

하드 디스크 매개변수를 보여주거나 바꿀 수 있습니다. 루트로 실행시켜야 되고 잘못 쓸 경우 위험할 수 있습니다.



fdisk

보통은 하드 드라이브일, 저장용 디바이스에 대해서 파티션 테이블을 만들고 변경할 수 있게 해 줍니다. 루트로 실행해야 됩니다.



주의 : 이 명령어는 아주 조심해서 써야 됩니다. 만약에 뭔가가 잘못되면 여러분의 파일 시스템을 망가트릴 수도 있습니다.



fsck, e2fsck, debugfs

파일 시스템 체크, 치료, 디버그용 명령어들.



fsck: 유닉스 파일 시스템을 체크해 주는 프론트 엔드(front end)로서 다른 유틸리티가 이 명령어를 부름. 실제로 체크할 파일 시스템 타입은 ext2가 기본으로 잡혀 있습니다.

e2fsck: ext2 파일 시스템 체커.

debugfs: ext2 파일 시스템 디버거.



경고 : 이 명령어들은 루트로 실행시켜야 합니다. 잘못 쓰면 파일 시스템이 손상되거나 망가질 수도 있습니다.



badblocks

저장용 디바이스에 대해 배드 블럭(미디어의 물리적인 결함)을 체크해 줍니다. 새 하드 드라이브를 설치하고 포맷할 때나 백업 미디어의 무결성을 테스트 해보려고 할 때 쓸 수 있습니다. [4] 예를 들어 badblocks /dev/fd0 라고 하면 플로피 디스크를 테스트해 줍니다.



badblocks 명령어는 모든 데이타를 다 덮어써버리도록 불릴 수도 있고 읽기 전용 모드로 안전하게 불릴 수도 있습니다. 루트 사용자가 테스트할 디바이스를 소유하고 있다면, 보통 그런 상황일테지만, 루트가 이 명령어를 실행시켜야 합니다.



mkbootdisk

예를 들어 MBR(master boot record)이 깨진 상황등에서 시스템을 다시 살릴 수 있도록 부팅 디스켓을 만들어 줍니다. mkbootdisk는 실제로는 Erik Troan이 만든 Bash 스크립트로 /sbin 디렉토리에 들어 있습니다.



chroot

루트 디렉토리를 바꿔줍니다(CHange ROOT directory). 명령어들은 보통 기본 루트 디렉토리인 /를 기준으로 $PATH에 따라 해석됩니다. 이 명령어는 이 루트 디렉토리를 다른 곳으로 바꾼다음 작업 디렉토리도 그 쪽으로 바꿔줍니다. 보안용으로 아주 유용한데, 예를 들면 시스템 관리자가 텔넷으로 접속중인 사용자를 보안과 관련된 파일 시스템에 접근시키지 않으려 할 때에 사용할 수 있습니다(가끔 guest 사용자를 "chroot 감옥"(chroot jail)에 가둔다라고도 합니다). chroot후에는 시스템 바이너리에 대한 실행 경로가 더 이상 맞지 않는 것에 주의하기 바랍니다.



chroot /opt 라고 하면 /usr/bin을 /opt/usr/bin이라고 해석합니다. 비슷하게, 보통의 상황에서는 /를 기본 디렉토리로 삼지만 chroot /aaa/bbb /bin/ls 라고 하면 그 후로 실행되는 ls는 /aaa/bbb을 기본 디렉토리로 인식합니다. 사용자의 ~/.bashrc에 alias XX 'chroot /aaa/bbb ls' 라는 줄을 넣으면 그 사용자가 "XX"를 실행 시키는 파일 시스템을 효과적으로 제한할 수 있습니다.



chroot는 비상용 부트 플로피로 부팅했을 때 편하게 쓸 수 있고(/dev/fd0에 chroot 걸기), 시스템이 박살나서 고치려고 할 때 lilo에 옵션으로 줄 수도 있습니다. 또한 다른 파일 시스템을 통해서 설치를 할 경우나(rpm 옵션), CDROM 같은 읽기 전용 파일 시스템에서 실행할 때 쓸 수 있습니다. 오직 루트 사용자로 실행할 수 있으며, 조심해서 써야 합니다.



경고 : 몇 개의 시스템 파일들은 chroot된 디렉토리에 복사해 놓아야 $PATH가 그들을 제대로 인식할 수 있습니다.



lockfile

이 유틸리티는 procmail 패키지 중의 하나입니다(www.procmail.org ). 이 명령어는 잠금 파일을 만들어 주는데, 잠금 파일이란 특정 파일이나 디바이스, 리소스에 대해서 접근 제어를 해주는 세마포어 파일입니다. 잠금 파일은 이 특정한 파일, 디바이스, 리소스를 특정 프로세스가 쓰고 있다("busy")는 플래그로 쓰여, 다른 프로세스에게 제한된 접근만을 허용하거나 아예 접근을 못하도록 만들어 줍니다.



잠금 파일은 여러 사용자에 의해 시스템 메일 폴더가 동시에 변경되는 것을 막아주고, 모뎀 포트가 사용중이라는 것을 알려주며, 넷스케이프가 캐쉬를 사용중이라는 것을 보여주는데 쓰일 수 있습니다. 스크립트에서 특정 프로세스가 만들어 놓은 잠금 파일이 있는지 확인해서 그 프로세스가 이미 떠 있는지 알아낼 수도 있습니다. 만약에 스크립트에서 이미 존재하는 잠금 파일을 다시 만들려고 한다면 그 스크립트는 멈춰 버릴 수도 있으니 조심하기 바랍니다.



보통의 어플리케이션들은 잠금 파일을 만들고 체크하는 기본 디렉토리를 /var/lock 으로 삼습니다. 다음 스크립트처럼 해서 잠금 파일이 있는지 없는지를 확인할 수 있습니다.



 

appname=xyzip

# "xyzip" 어플리케이션은 "/var/lock/xyzip.lock" 란 잠금 파일을 만듭니다.


if [ -e "/var/lock/$appname.lock ]

then

...


 



mknod

블럭 디바이스나 문자 디바이스 파일을 만들어 줍니다(예를 들면 하드웨어를 새로 설치할 경우에 필요하겠죠?).



tmpwatch

특정 기간동안 접근이 없는 파일을 자동으로 지워줍니다. 보통은 오래된 로그 파일을 지우기 위해 crond에 걸어 놓고 씁니다.



MAKEDEV

디바이스 파일을 만들어 주는 유틸리티로서, 루트로 실행시켜야 합니다. 이 명령어는 /dev 디렉토리에 있습니다. root# ./MAKEDEV



이 명령어는 일종의 mknod의 향상된 버전입니다.



dump, restore

dump 명령어는 복잡한 파일 시스템 백업 유틸리티로서 보통은 규모가 큰 설치와 네트워크에서 쓰입니다. [5] 디스크 파티션을 있는 그대로(raw) 읽고 바이너리 형태로 백업 파일을 만들어 냅니다. 백업 되는 파일들은 디스크나 테입 드라이브같은 다양한 저장 미디어로 저장됩니다. restore 명령어는 dump로 백업된 파일들을 복구시켜 줍니다.



fdformat

플로피 디스크에 대해서 로우레벨 포맷을 해 줍니다.



ulimit

시스템 리소스에 대해서 최대 한계(upper limit)를 지정해 줍니다. 보통 -f 옵션을 써서 쉘이 만들 수 있는 파일 크기를 제한 시킵니다(ulimit -f 1000 이라고 하면 파일 크기를 1 메가로 잡아 줍니다). -t 옵션은 코어덤프 파일의 크기를 제한 시킵니다(ulimit -c 0 이라고 하면 코어덤프를 생성시키지 않습니다). ulimit 값은 보통, /etc/profile이나 ~/.bash_profile에서 지정해 줍니다(27장 참고).



umask

사용자(User) 파일 생성 마스크(MASK). 사용자 각자의 기본 파일 속성을 제한해 줍니다. 사용자가 생성하는 모든 파일은 umask로 지정된 속성의 영향을 받습니다. umask로 넘겨준 값은 해당 파일 소유권을 꺼버립니다. 예를 들어, umask 022 는 새로 만들어 지는 파일이 최소한 755 소유권을 갖도록 해 줍니다(777 NAND 022). [6] 사용자는 당연히 나중에 그 파일의 속성을 chmod로 바꿀 수 있습니다. 보통 umask 값을 설정할 때는 /etc/profile이나 ~/.bash_profile에서 합니다(27장 참고).



rdev

루트 디바이스, 스왑 영역, 비디오 모드에 대한 정보를 얻거나 변경. rdev의 기능은 lilo로 넘어갔지만 아직 램 디스크를 설정할 때는 유용합니다. 역시 잘못 쓰면 위험한 명령어입니다.



lsmod

설치된 커널 모듈을 보여줍니다.


bash$ lsmod

Module Size Used by

autofs 9456 2 (autoclean)

opl3 11376 0

serial_cs 5456 0 (unused)

sb 34752 0

uart401 6384 0 [sb]

sound 58368 0 [opl3 sb uart401]

soundlow 464 0 [sound]

soundcore 2800 6 [sb sound]

ds 6448 2 [serial_cs]

i82365 22928 2

pcmcia_core 45984 0 [serial_cs ds i82365]


 


insmod

커널 모듈을 강제로 올립니다. 루트로 실행해야 합니다.



modprobe

보통 시스템 구동 스크립트에서 자동으로 불리는 모듈 로더.



depmod

모듈간 의존 파일을 만들어 줍니다. 보통 시스템 구동 스크립트에서 불립니다.



env

현재의 환경 변수, 혹은 그 값을 바꿔 프로그램이나 스크립트를 실행 시킵니다(시스템 전체 환경은 건드리지 않습니다). [varname=xxx] 옵션을 주면 스크립트가 실행될 동안에만 환경 변수 varname의 값을 바꿔줍니다. 아무 옵션도 안 주면 현재 세팅되어 있는 모든 환경 변수를 보여줍니다.


참고: Bash나 본쉘에서 파생된 다른 쉘들에서는 단일 명령어 환경에서 변수를 설정하는 것이 가능합니다.

var1=value1 var2=value2 commandXXX

# 'commandXXX' 의 환경에서만 $var1 과 $var2 를 설정.


 


작은 정보: 스크립트의 첫번째 줄("#!"가 있는 줄)에 env를 써서 경로를 모르는 쉘이나 명령어 해석기를 지정해 줄 수도 있습니다.


#! /usr/bin/env perl


print "펄이 어디에 있는지 몰라도\n";

print "이 펄 스크립트는 잘 동작할 것입니다.\n";


# 펄 실행 파일이 원하는 곳에 없을 수도 있기 때문에

# 이식성 있는 크로스 플랫폼용 스크립트에 아주 좋습니다.


 


ldd

실행 파일에 필요한 공유 라이브러리를 보여줍니다.


bash$ ldd /bin/ls[/color][/b]

libc.so.6 => /lib/libc.so.6 (0x4000c000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)


 


strip

실행 가능한 바이너리 파일에서 디버깅용 심볼릭 참조 정보를 제거해 줍니다. 이 명령어를 쓰면 실행 파일의 크기는 작아지지만 디버깅은 할 수가 없습니다.



주로 Makefile에서나 나오고 쉘 스크립트에서는 잘 쓰이지 않습니다.



nm

strip 되지 않은 컴파일된 바이너리에 들어 있는 심볼들을 보여줍니다.



rdist

리모트 분산 클라이언트: 리모트 서버에 있는 파일 시스템으로 동기화, 복사, 백업을 해 줍니다.



지금까지 배운 관리자용 명령어들에 대한 지식을 가지고 시스템 스크립트를 살펴 보도록 하겠습니다. killall은 시스템 셧다운시에, 돌고 있는 프로세스를 멈추게 해 주는 프로세스로서, 짧으면서도 이해하기 쉬운 스크립트중의 하나입니다.

예 13-8. killall, /etc/rc .d/init.d 에서 인용


#!/bin/sh


# --> "# -->" 표시는 본 문서의 저자가 붙인 주석입니다.


# --> 여기서 소개하는 부분은

# --> Miquel van Smoorenburg(<miquels@drinkel.nl.mugnet.org>)의

# --> 'rc' 스크립트 패키지중의 일부입니다.


# --> 이 스크립트는 레드햇 전용 스크립트인 것처럼 보이기 때문에

# --> 다른 배포판에는 없을 수도 있습니다.


# 쓰이지 않으면서 실행중인 모든 서비스를 죽입니다(실제로 실행중인지를

# 확실히 확인하기 때문에 아무 서비스도 안 죽일 수 있습니다).


for i in /var/lock/subsys/*; do

# --> 표준 for/in 루프이나 "do" 가 같은 줄에 있기 때문에

# --> ";" 를 붙여줘야 됩니다.

# 스크립트가 실제로 있는지 확인.

[ ! -f $i ] && continue

# --> "and list"를 아주 잘 썼습니다. 다음처럼 해도 똑같습니다.

# --> if [ ! -f "$i" ]; then continue


# 서브시스템 이름을 알아냅니다.

subsys=${i#/var/lock/subsys/}

# --> 변수 이름 매칭인데 여기서는 파일 이름이 되겠죠.

# --> subsys=`basename $i` 와 완전히 똑같은 표현입니다.


# --> 잠금 파일의 이름을 알아내는데, 잠금 파일이 있다면

# --> 해당 프로세스가 실행중이라는 증거입니다.

# --> 앞에서 설명했던 "lockfile" 을 참고하세요.



# 그 서브시스템을 내립니다.

if [ -f /etc/rc.d/init.d/$subsys.init ]; then

/etc/rc.d/init.d/$subsys.init stop

else

/etc/rc.d/init.d/$subsys stop

# --> 쉘 내장명령인 'stop'을 써서 돌고 있는 작업과 데몬을 중지시킵니다.

fi

done