제2부. 유닉스 파일시스템

1. 유닉스의 파일시스템

(1) 홈 디렉토리와 작업 디렉토리

□ 홈 디렉토리	...	사용자가 로그인 했을 때의 디렉토리.

사용자는 홈 디렉토리로부터 다른 디렉토리로 자유롭게 이동할 수 있다.

□ 작업 디렉토리	...	현재 이동된 디렉토리

(2) 디렉토리 구조

/ (root)	bin			유닉스 명령, 실행 가능한 프로그램, 유틸리티들 (예) date cal 등
	dev			터미널과 프린터 같은 주변장치를 작동시키는데 필요한 소프트웨어들 (예) console tty00 tty01 등
	etc			시스템 관리를 위한 파일들
	home	cs011001		사용자 cs011001의 홈 디렉토리
		…		…
		cs011160		사용자 cs011160의 홈 디렉토리
	lib			프로그래밍 언어와 프로그램을 위한 라이브러리들
	tmp			임시 파일들
	usr	include		cc를 위한 헤더 파일들
		mail		이메일을 저장하기 위한 파일들
		news		Files for storing newsworthy items
	var			내용이 자주 바뀌는 파일들

□ 유닉스 시스템에 따라서는, 사용자의 홈 데렉토리나 메일 디렉토리 등의 위치가 다를 수도 있다.

□ 부모 디렉토리, 자식 디렉토리

(예) nice의 경우 (SunOS 5.0)

□ 디렉토리 이동

□ 사용자는 홈 디렉토리로부터 다른 디렉토리로 자유롭게 이동할 수 있다. cd 명령

□ 사용자는 현재의 작업 디렉토리가 어디인지 알 수 있다. pwd 명령

(3) 파일과 디렉토리의 이름

□ 14글자까지? , 대문자, 소문자, 숫자, 마침표, 밑줄, 쉼표

(4) 절대 경로

□ 파일이나 디렉토리를 기술할 때, 루트 디렉토리에서부터 시작하여 기술하는 방법

□ 예,  /home/cs011001  /home/cs011001/test.c  /usr/include/stdio.h

□ ~	...	홈 디렉토리

~cs011045	...	사용자 cs011045의 홈 디렉토리, 즉 /home/cs011045

(5) 상대 경로

□ 파일이나 디렉토리를 기술할 때, 현재의 작업 디렉토리에서부터 시작하여 기술하는 방법

□ '점□은 현재 작업 디렉토리

□점점□은 현재 작업 디렉토리의 부모 디렉토리를 의미한다.

□ 예, 현재의 작업 디렉토리가 /home/cs011022 일때,

../cs011001  ../cs011001/test.c   ../../usr/include/stdio.h

(6) 파일 확인 , ls 명령

$ cd □

$ pwd □

/home/hskang

$ ls □

□	(파일 목록)

$ ls -al □

□	(상세한 파일 목록)

$

(7) 숨겨진 파일

□ 숨겨진 파일의 이름은 □점□으로 시작된다

□

$ ls □

로는 보이지 않으나,

$ ls -a □

로는 보인다

(8) 파일 이동, mv 명령

$ pwd □

/usr/hskang

$ mv test.c test01.c □

$

□ test.c 파일의 이름이 test01.c로 바뀌었다.

$ mv test01.c ../cs010001/test01.c □

$

□ test01.c 파일이 /usr/cs010001  디렉토리로 이동하였다.

(9) 새로운 파일을 만들는 방법들

□ 하나, 현재 존재하는 파일을 복사

□ 두울, 표준 출력을 리디렉션

□ 세엣, 문서 편집기 이용

(10) 파일 복사,  cp 명령

$ pwd □

/home/cs010001

$ cp test01.c testt02.c □

$

□ test01.c 파일과 똑같은 내용을 갖는 test02.c 파일이 새로 만들어진다.

$ cp test01.c ../cs010002/test02.c □

$

□ test01.c 파일과 똑같은 내용을 갖는 test02.c 파일이 /home/cs010002 디렉토리에 새로 만들어진다.

(11) 리디렉션(Redirection),   > 와 >>

$ ls -al > filelist □

$

□ 화면에 출력할 것이 filelist 파일에 출력한다. 이때 filelist가 새로 만들어진다.

$ ls -al > filelist □

$ ls >> filelist □

$

□ 화면에 출력할 것이 filelist의 뒷부분에 덧붙여진다. 이때 filelist는 이미 존재하는 파일이다.

(12) 접근 권한

$ ls -al □

total 3

1 drwxr□xr□x	3	glass	cs	512	Jan 30 22:52	./

1 drwxr□xr□x	12	root	cs	1024	Jan 30 19:45	../

1 □rw□r□□r□□	1	glass	cs	106	Jan 30 22:52	heart

$

□ heart 파일의 경우에, owner는 Read Write 가능하며, group과 other는 Read 만 할수있다.

□ 접근 권한을 수정될 수 있다.  chmod 명령

2. 연습1 ... 파일 작업

(1) 달력 출력 , cal 명령

$ cal 9 2001 □

□	(2001년 9월 달력)

$

$ cal 2001 □

□	(2001년 달력)

$

(2) 리디렉션에 의한 달력 출력

$ cal 2001 > aa □

$ ls -al  □

□   (aa가 있다)

$

(3) 파일의 내용 보기,  cat 명령

$ cat aa □

□	(2001년 달력)

$

(4) 파일의 내용을 천천히 보기,  more 명령

$ more aa □

□	(2001년 달력)

--- More ---

□ 더 보려면 스페이스바를, 그만 보려면 q 또는 ^C를 누른다

(5) 파일의 내용을 천천히 보기,  pg 명령

$ pg aa □

□	(2001년 달력)

:

□ 더 보려면 엔터를, 그만 보려면 q 또는 ^C를 누른다

(6) cat 명령을 통한 파일의 연결

$ cal 9 2001 > aa1 □

$ cal 10 2001 > aa2 □

$ cat aa1 aa2 > aaa □

$ cat aaa □

□	(2001년 9월 10월 달력)

$

(7) 파일 첨가

$ cal 9 2001 > bb □

$ cal 10 2001 >> bb □

$ cat bb □

□	(2001년 9월 10월 달력)

$

(8) 파일 복사 , cp 명령

$ cp bb calendar_2001_9,10 □

$ ls

□	(bb도 있고 calendar_2001_9,10도 있다)

$

(9) 파일 이름 바꾸기 , mv 명령

$ mv aa1 calendar_2001_9 □

$ mv aa2 calendar_2001_10 □

$ ls

□	(aa1과 aa2는 없고 calendar_2001_9와 calendar_2001_10이 있다)

$

(10) 기본 프린터로 출력, lpr 또는 lp 명령

$ lpr calendar_2001_9,10 □

$

□ 유닉스의 종류에 따라서는, lpr 명령 대신에 lp 명령일 수도 있다.

(11) 다른 프린터로 출력

$ lpr -P프린터코드 calendar_2001_9,10 □

$

□ 유닉스의 종류에 따라서는, lpr -P 명령 대신에 lp -d 명령일 수도 있다.

(12) 파일의 삭제 , rm 명령

$ rm aaa aa bb □

$

□ 유닉스의 종류에 따라서는, lpr -P 명령 대신에 lp -d 명령일 수도 있다.

3. 연습2 ... 디렉토리 작업

(1) 디렉토리 구조

$ cd □

$ pwd □

/home/cs010001

$

(2) 서브 디렉토리 생성

$ mkdir Cal □

$

(3) 파일 이동

$ mv calendar_2001_9,10 Cal □

$

(4) 경로명을 이용한 디렉토리 생성

$ mkdir Cal/Months □

$

(5) 경로명을 통한 파일 이동

$ mv calendar_2001_9 Cal/Months □

$

(6) 경로명을 통한 파일 이동과 이름 바꾸기

$ mv calendar_2001 Cal/Months/calen_2001 □

$

(7) 다른 디렉토리에서의 작업

$ ls Cal/Months □

□	(calendar_2001_9 과 calen_2001이 있다)

$

(8) 작업 디렉토리 변경

$ cd Cal/Months □

$ pwd

/home/cs010001/Cal/Months

$

(9) 작업 디렉토리 변경

$ cd □

$ pwd

/home/cs010001

$

(10) 디렉토리 삭제

$ rmdir Cal

rmdir : Cal : Directory not empty □

$

4. 정리 ... 파일과 디렉토리 관련 명령들

(1) 디렉토리 관련 명령

ls		ls -adglsFR [디렉토리] □ 지정된 디렉토리의 내용을 보여준다. 디렉토리를 생략하면 현재의 디렉토리의 내용을 보여준다. □ -a 모든파일, -d 디렉토리자체의상세정보, -g 그룹, -l 상세정보, -s 크기, -R 서브디렉토리재귀적, -F 특성 (예) $ ls -algFs total 3 1 drwxr□xr□x 3 glass cs 512 Jan 30 22:52 ./ 1 drwxr□xr□x 12 root cs 1024 Jan 30 19:45 ../ 1 □rw□r□□r□□ 1 glass cs 106 Jan 30 22:52 heart □ 현재의 디렉토리가 차지하는 전체 블록수는 3개 heart의 경우에, 차지한 블록 수는 1개, 정규파일(-정규파일 d디렉토리 b디스크드라이브 c터미널 l심볼릭링크 p파이프 s소켓), 하드링크는 1개, 소유자는 glass, 그룹은 cs, 정확한 크기는 106바이트, 갱신된 때는 Jan 30 22:52, 일반 텍스트 파일(*실행가능파일 /디렉토리파일 @심볼릭링크 =소켓)
pwd		pwd □ 현재의 디렉토리 위치를 표시한다 □ 로긴했을 때의 디렉토리 위치를 홈디렉토리(예, "/home/hskang")라 한다.
cd		cd [디렉토리] □ 디렉토리간 이동, [디렉토리]를 생략하면 홈디렉토리로 이동
mkdir		mkdir [-p] 디렉토리 □ 디렉토리 만들기 □ -p 지정한 디렉토리를 부모디렉토리로 하여 새로운 디렉토리를 생성한다?

rmdir		rmdir 디렉토리 □ 디렉토리 없애기, 빈 디렉토리여야 한다
rm		rm -r 디렉토리 □ 디렉토리를 재귀적으로 없애기. 빈 디렉토리가 아니어도 몽땅 지워진다.

(2) 파일 속성

ls		ls -adglsFR [파일들] □ 지정된 파일들의 속성을 보여준다. (예) $ ls -algFs heart 1 □rw□r□□r□□ 1 glass cs 106 Jan 30 22:52 heart □ 상세한 사항은 □위의 (2) 디렉토리□를 참고한다.
file		file -L 파일들 □ 파일의 속성(텍스트인지 바이너리인지 등)을 보여준다. □ -L 링크된파일의속성을보여준다

(3) 파일의 내용 보기

cat		cat -n [파일들] □ 파일 내용 보기 표준입력으로 입력받고 표준출력으로 출력, 입력과 출력에 리다이렉션이 가능 □ -n 출력에줄번호붙임 cat > 파일 □ 표준 입력으로 파일의 생성. 표준 입력은 Ctrl-D로 마친다.
more page		more -f [+줄번호] 파일들 page -f [+줄번호] 파일들 □ 화면을 지우고나서 파일 내용을 조금씩 보기 □ -f 긴줄을연속적으로 , [+줄번호] 지정한줄부터보기 □ 다음페이지 <SPACE>, 다음줄 <ENTER>, 끝내기 <q>, 도움말 <h>, <$>, <-5>

head tail		head [-줄수] 파일들 tail [-줄수] 파일들 □ 파일 내용을 앞부분 또는 끝부분 10줄만 보기 □ [-줄수] 볼 줄수를 지정

(4) 파일의 처리 (복사/이동/삭제)

cp		cp 파일1 파일2 □ 파일1을 파일2에 복사. 파일2가 이미 존재한다면 파일2의 내용은 파괴된다. cp -i 파일1 파일2 □ -i 만들어질 파일이 이미 존재하는지확인 cp -i 파일 디렉토리 □ 파일을 지정한 디렉토리에 복사 cp -ir 디렉토리1 디렉토리2 □ 디렉토리1을 디렉토리2에 재귀적으로 복사

mv		mv [-] -i 파일1 파일2 □ 파일1의 이름을 파일2로 바꾼다. 파일2가 이미 존재한다면 파일2의 내용은 파괴된다. □ -i 파일2가이미존재하는지확인, [-] -로시작하는파일이름을제대로인식 mv [-] -i [파일] 디렉토리 □ 지정한 파일을 지정한 디렉토리로 옮긴다. mv [-] -i 디렉토리1 디렉토리2 □ 디렉토리1을 디렉토리2로 통째로 옮긴다.
rm		rm [-] -fir 파일들 □ 파일 삭제 □ -i 삭제시 확인, -r 지울 파일이 디렉토리이며 재귀적으로 모두 삭제한다, -f 어떤 지시사항이나 에러메시지도 뜨지 않게 한다.

(5) 파일 내용

wc		wc -lwc 파일들 □ 파일내의 줄 단어 문자의 갯수를 센다. 단어의 구분은 <tab> <space> <CR> □ -l 줄의 수만을, -w 단어의 수 만을, -c 문자의 수만을 센다

(6) 프린터

lp lpstat		lp -d프린터 [-n출력횟수] [파일들] □ 지정한 프린터에 파일의 내용을 출력한다. □ [파일들]을 생략하면 표준입력이 출력, [-n출력횟수]를 생략하면 1부 lpstat [프린터] □ lp 명령에 의해 프린터로 전송된 작업들 중 대기 정보만을 보여준다. □ [프린터]를 생략하면 좀더 상세한 내용(사용자, 작업의 이름과 크기, 출력요청ID)을 보여준다
cancel		cancel 출력요청ID □ 지정한 출력 작업을 취소한다

lpr		lpr -m [-P프린터] [-#부수] [파일들] □ 프린터로 파일을 부수만큼 출력한다. □ [-P프린터]가 생략되었으면 $PRINTER에 정의된 프린터가 사용되고, [파일]이 생략되었으면 표준입력이 출력된다 □ -m 출력이끝나면이메일발송
lpq		lpq -l [-P프린터] [작업번호들] [사용자ID들] □ 프린터 작업을 확인한다. □ [작업번호]와 [사용자ID]가 생략되었으면 모든 작업이 보여진다.
lprm		lprm -l [-P프린터] [-] [작업번호들] [사용자ID들] □ 프린터 작업을 취소한다. □ [작업번호]가 생략되었으면 모든 작업이 취소되며, 슈퍼유저는 [사용자ID]를 지정하여 특정 사용자의 작업만을 취소할 수 있다.

□과제□

다음의 모든 과정을 완성한다.

1. 홈 디렉토리 밑에 Calendar 디렉토리를 만들고, Calendar 디렉토리 밑에 Calendar_2001과 Filelist_2001 디렉토리를 만든다.

2. Calendar 디렉토리에는 calendar_2000_all 과 calendar_2001_all 과 calendar_2002_all 파일을 만들며, 이들의 내용은...

3. Calendar_2001 디렉토리에는 calendar_2001_1,2,3 과 calendar_2001_4,5,6 과 calendar_2001_7,8,9 와 calendar_2001_10,11,12 파일을 만들며, 이들의 내용은...

4. Filelist 디렉토리에는 filelist_home_ls 와 filelist_home_lsal을 만든다. 이들의 내용은..

5. Filelist 디렉토리에 filelist_hskang 파일을 만든다. 이 파일의 내용은..

평가를 위해 보여주는 방법은

1. 홈 디렉토리에서

(1) 홈 디렉토리의 파일 목록을 보이고

(2) Calendar 디렉토리의 파일 목록과 어느 한 파일의 내용을 보이고

(3) Calendar_2001 디렉토리의 파일 목록과 어느 한 파일의 내용을 보인다.

2. Filelist_2001 디렉토리에서

파일 목록과 어느 한 파일의 내용을 보인다.

※ 쉘 히스토리 기능을 사용하면, 능숙해 보인다.