====== find 연습 ======

mksock aaa.sock

mknod sda b 8 1

mknod sdb b 8 2

mkfifo bbb

mknod tty1 c 2 1


find -type f -exec rm -f {} \;

find -type b -exec rm -f {} \;

find -type c -exec rm -fv {} \;

find -type s -exec rm -fv {} \;

find -type p -exec rm -fv {} \;

find -type d -exec rm -rfv {} \;


-user 

-nouser

-group

-nogroup

-uid

-gid


# find /dev -group tty -ls | head

# find /dev -group disk -ls | head

# find /dev -user bin -ls | head

# find /dev -user root -ls | head

# find /dev -uid 0 -ls | head

# find /dev -gid 6 -ls | head



# for i in $(seq 5)

> do

>   touch $i.txt

> done

# ls -l

total 20

-rw-r--r-- 1 root root 0 Mar 31 18:25 1.txt

-rw-r--r-- 1 root root 0 Mar 31 18:25 2.txt

-rw-r--r-- 1 root root 0 Mar 31 18:25 3.txt

-rw-r--r-- 1 root root 0 Mar 31 18:25 4.txt

-rw-r--r-- 1 root root 0 Mar 31 18:25 5.txt

# chown 1000 1.txt 

# chown 2000 2.txt 

# chgrp 5000 3.txt 

# chgrp 4000 4.txt 

# ls -l

total 20

-rw-r--r-- 1 1000 root 0 Mar 31 18:25 1.txt

-rw-r--r-- 1 2000 root 0 Mar 31 18:25 2.txt

-rw-r--r-- 1 root 5000 0 Mar 31 18:25 3.txt

-rw-r--r-- 1 root 4000 0 Mar 31 18:25 4.txt

-rw-r--r-- 1 root root 0 Mar 31 18:25 5.txt

# find -nouser -ls

229378    4 -rw-r--r--   1 1000     root            0 Mar 31 18:25 ./1.txt

229379    4 -rw-r--r--   1 2000     root            0 Mar 31 18:25 ./2.txt


# find -nogroup -ls

229381    4 -rw-r--r--   1 root     4000            0 Mar 31 18:25 ./4.txt

229380    4 -rw-r--r--   1 root     5000            0 Mar 31 18:25 ./3.txt


# ls -n

total 20

-rw-r--r-- 1 1000    0 0 Mar 31 18:25 1.txt

-rw-r--r-- 1 2000    0 0 Mar 31 18:25 2.txt

-rw-r--r-- 1    0 5000 0 Mar 31 18:25 3.txt

-rw-r--r-- 1    0 4000 0 Mar 31 18:25 4.txt

-rw-r--r-- 1    0    0 0 Mar 31 18:25 5.txt



# echo "ABC" > 1.txt 

# echo "abc" >> 1.txt 

# echo "AbC" >> 1.txt 

# grep ABC 1.txt 

ABC

# grep abc 1.txt 

abc

# grep -i abc 1.txt 

ABC

abc

AbC


# cat << END > 2.txt 

> 1

> 2

> 3

> 4

> 5

> 6

> 7

> 8

> 9

> 10

> 11

> END


# grep 5 2.txt 

5


# grep -A 3 5 2.txt 

5

6

7

8


# grep -B 3 5 2.txt 

2

3

4

5


grep egrep fgrep 



파이프 


0 stdin

1 stdout

2 stderr


 # useradd unixuser

 # passwd unixuser

Changing password for user unixuser.

New UNIX password: 

BAD PASSWORD: it is too short

Retype new UNIX password: 

passwd: all authentication tokens updated successfully.

 # passwd --stdin unixuser

Changing password for user unixuser.

898099

passwd: all authentication tokens updated successfully.

 # echo 12345678 

12345678

 # echo 12345678 | passwd --stdin unixuser

Changing password for user unixuser.

passwd: all authentication tokens updated successfully.

 # 


리다이렉션


# 명령어 > 파일명

# 명령어 > 장치명



# ls > a.txt

# ls > /dev/null



# ls

1.txt  2.txt  3.txt  4.txt  5.txt

# ls > a.txt

# ls -l

total 36

-rw-r--r-- 1 1000 root 12 Mar 31 18:35 1.txt

-rw-r--r-- 1 2000 root 26 Mar 31 18:38 2.txt

-rw-r--r-- 1 root 5000  0 Mar 31 18:25 3.txt

-rw-r--r-- 1 root 4000  0 Mar 31 18:25 4.txt

-rw-r--r-- 1 root root  0 Mar 31 18:25 5.txt

-rw-r--r-- 1 root root 36 Mar 31 19:11 a.txt


# cat a.txt 

1.txt

2.txt

3.txt

4.txt

5.txt

a.txt

# pwd >> a.txt 

# cat a.txt 

1.txt

2.txt

3.txt

4.txt

5.txt

a.txt

/root


# pwd > a.txt 

# cat a.txt 

/root


# pwd >> b.txt 

# ls

1.txt  2.txt  3.txt  4.txt  5.txt  a.txt  b.txt





date 를 이용한 날짜구하기 

# mkdir $(date +%Y%m%d)

# ls -ld 20140408 

drwxr-xr-x 2 root root 4096 Apr  8 10:12 20140408

# rmdir -v `date +%Y%m%d`

rmdir: removing directory, 20140408

# echo $(date +%Y%m%d)

20140408


# rdate -s time.bora.net && clock -w 





crontab  -e    <-- 스케줄작업에 대한 수정 옵션 



확장된 파일접근 권한

acl <-- 확인 



부트로더 종류

LILO : old

grub : new 



/lib/iptables  <-- 방화벽의 모듈이 들어있는 디렉토리



/lib

/usr/lib

- 파일의 형식

- 라이브러리는 object 들을 묶어놓은 아카이브 파일이다.

lib<라이러리명>.a

lib<라이러리명>.so


넷필터 : 커널안에 들어있는 방화벽

iptables : 넷필터를 제어하는 도구


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

LAB> 방화벽을 사용해서 ping 을 막아보자.

# iptables -F

# ping -c 3 localhost

PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.

64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.156 ms

64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.337 ms

64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.157 ms


--- localhost.localdomain ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2004ms

rtt min/avg/max/mdev = 0.156/0.216/0.337/0.086 ms


# iptables -A INPUT -p icmp -j DROP

# ping -c 3 localhost

PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.


--- localhost.localdomain ping statistics ---

3 packets transmitted, 0 received, 100% packet loss, time 2002ms


다시 iptables -F (룰 설정 초기화) 입력하여 ping 막은거 풀어줌

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


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

LAB> 라이브러리를 만들어서 라이브러리가 무엇인지 이해해보자.

정적 라이브러리명 : libko.a


-- 작업순서 --

1. 소스파일 만들기

2. 소스파일 컴파일하기 

3. 실행파일 실행하기

-- 작업순서 --


1. 소스파일 만들기

# vi hello.c

-- hello.c --

#include <stdio.h>


int main()

{

  puts("Hello");    <-- puts c라이브러리 

  return 0;

}

-- hello.c --


2. 소스파일 컴파일하기 

- hello.c 를 컴파일해서 hello 실행파일 만들기

# gcc -o hello hello.c   

# ls -l hello

-rwxr-xr-x 1 root root 4937 Apr  8 10:36 hello*


3. 실행파일 실행하기

- 컴파일해서 나온 hello 를 실행하기

# ./hello 

Hello


4. ko.c 파일 만들기

# vi ko.c 

#include <stdio.h>



void myhello(void)

{

  puts("myhello");

}


- 컴파일하기

# gcc -c ko.c 

# ls -l ko.o 

-rw-r--r-- 1 root root 848 Apr  8 10:38 ko.o


- myhello() 추가하기

# vi hello.c 

-- hello.c --

#include <stdio.h>


void myhello(void); <-- 새로 추가된 함수


int main()

{

  puts("Hello");

  myhello();        <-- 새로 추가된 함수

  return 0;

}

-- hello.c --


- hello.c 는 컴파일은 잘된다.

# gcc -c  hello.c 

# ls -l hello.o 

-rw-r--r-- 1 root root 904 Apr  8 10:39 hello.o


- 하지만 myhello() 함수를 찾을 수 없어서 링킹과정에서 에러가 발생한다.

# gcc -o hello hello.o 

hello.o: In function `main':

hello.c:(.text+0x1e): undefined reference to `myhello'

collect2: ld returned 1 exit status


- 실행파일 컴파일 (ko.o 를 포함시킨다.)

# gcc -o hello hello.o ko.o 

# ./hello 

Hello

myhello


- ko2.c 작성

# vi ko2.c 

-- ko2.c --

#include <stdio.h>


void myhello2(void)

{

  puts("myhello2");

}

-- ko2.c --


- ko2.c 컴파일

# gcc -c ko2.c 

# ls -l ko2.o 

-rw-r--r-- 1 root root 852 Apr  8 10:41 ko2.o


# vi hello.c 

-- hello.c --

#include <stdio.h>


void myhello(void);

void myhello2(void);  <-- 새롭게 추가


int main()

{

  puts("Hello");

  myhello();

  myhello2();         <-- 새롭게 추가

  return 0;

}

-- hello.c --


- 라이브러리로 컴파일한 것이 아닌 것

# gcc -c hello.c 

# gcc -o hello hello.o ko.o ko2.o  

# ./hello 

Hello

myhello

myhello2


- 라이브러리 파일 만들기(libko.a)

- 라이브러리 파일은 오브젝트 파일들을 모아놓은 아카이브파일이다.

# ar r libko.a ko.o ko2.o 

ar: creating libko.a

# ls -l libko.a 

-rw-r--r-- 1 root root 1920 Apr  8 10:45 libko.a


# ar t libko.a 

ko.o

ko2.o


- 라이브러리를 이용한 컴파일하기

- -l<라이브러리명> -L<라이브러리의 위치>

# gcc -o hello2 hello.o -lko -L  .

# ./hello2

Hello

myhello

myhello2

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







/ (root) 

- 마운트 되는 리눅스 파일 시스템이 있는 최상위 디렉토리 

- 시스템의 근간을 이루는 가장 중요한 디렉토리 

- 파티션 설정 시 반드시 존재하여야 함 

- 절대경로의 기준이 되는 디렉토리 

※ 절대경로 - / 디렉토리 기준 예) /usr/local 

상대경로 - 현재 작업 디렉토리 기준 예) ./local



/bin 

- 리눅스의 기본 명령어(binary)들이 들어있는 디렉토리 

- 시스템을 운영하는데 기본적인 명령어들이 들어 있음.



/sbin 

- 시스템 관리에 관련된 실행 명령어들이 들어있는 디렉토리 

- 시스템 점검 및 복구 명령, 시스템 초기 및 종료 명령 등 시스템 관리에 관련된 실행파일들 존재.



/lib 

- 프로그램들이 의존하고 있는 라이브러리 파일들 존재. 

- /lib/modules : 커널 모듈 파일들 존재. 

- 대부분의 라이브러리들은 링크로 연결되어 있음.



/proc 

- 시스템에 대한 정보를 제공하는 가상 파일 시스템. 

- 커널의 어떤 기능을 제어할 수 있는 역할을 가지고 있음. 

- 대부분 읽기 전용이나, 일부 파일중에는 쓰기가 가능한 파일이 존재 하는데 이러한 파일들에 특정 값을 지정하면 커널 기능이 변하게 됨. 

- 이 디렉토리 내에 있는 파일을 cat 명령을 이용하여 보면 시스템 정보를 확인 할 수 있음. 

예) 인터럽트 정보 확인 ---> cat /proc/interrupts



/etc 

- 시스템 환경 설정 파일이 있는 디렉토리 

- 네트워크 관련 설정파일, 사용자 정보 및 암호정보, 파일 시스템 정보, 보안파일, 시스템 초기화 파일등 중요 설정 파일들의 위치한 디렉토리 

- /etc/CORBA : Common Object Request Broker Architecture (COBRA)에 관한 파일이 들어있음. 

- /etc/X11 : 엑스 윈도우 설정에 관련된 파일들이 있음. 

- /etc/cron.d : crontab 명령의 설정파일이 있음. 

- /etc/cron.daily : 매일 작동하게 하는 crontab 스크립트 파일이 존재. 

- /etc/gnome : GTK+ 정의파일들이 있음. 

- /etc/httpd : 아파치 웹 서버의 설정 및 로그파일이 있음. 

- /etc/logrotate.d : logrotate 설정 파일들이 있음. 

- /etc/mail : 센드메일과 관련된 파일이 있음. 

- /etc/ppp : ppp 설정에 관련된 파일들이 있음. 

- /etc/profile.d : 쉘 로그인 하여 프로파일의 실행되는 스크립트에 대한 정의가 있음. 

- /etc/rc.d : 시스템 초기화와 관련된 스크립트가 존재. 

- /etc/samba : 삼바에 관련된 파일들이 있음. 

- /etc/security : 터미널 보안에 관련된 설정이 있음. 

- /etc/skel : 새로운 사용자를 추가할 때 자동적으로 생성되는 디렉토리와 파일이 있음. 

- /etc/squid : squid 프록시 서버에 관련된 파일이 있음. 

- /etc/ssh : secure shell 설정 파일이 있음 

- /etc/sysconfig : 시스템과 네트워크 설정을 담고 있음. 

- /etc/xinetd.d : 슈퍼데몬 xinetd.d의 서비스 영역을 설정하는 디렉토리.



/var 

- 가변 자료 저장 디렉토리 

- 시스템 운영중에 시스템 자료 데이터가 변경될 때 변경된 자료들이 저장되는 곳. 

- 주로 시스템 작동기록(log)들을 저장. 

- /var/log : 시스템에 발생된 일들에 대한 기록 파일이 있음 

- /var/named : 네임서버 설정 파일들 존재 

- /var/spool/mail : 수신 메일을 사용자 명으로 기록하는 디렉토리



/usr 

- 일반 사용자들을 위한 대부분의 프로그램 라이브러리 파일들이 위치. 

- /usr/bin : 응용 프로그램의 실행 파일이 위치 

- /usr/sbin : 주로 네트워크 관련 실행 명령어와 실행 데몬들을 많이 포함하고 있음. 

- /usr/X11R6 : X-window 시스템에 관련된 파일 존재. 

- /usr/include : 기본 C 라이브러리 헤더 파일과 각종 라이브러리 헤더파일들이 있음. 

- /usr/lib : /usr/bin과 /usr/sbin에 있는 실행 바이너리를 실행하기 위한 라이브러리 존재. 

- /usr/src : 프로그램소스 및 커널 소스들이 보관되어 있는 곳. 

- /usr/man : 매뉴얼 페이지가 담겨있는곳. 

- /usr/local : 새로운 프로그램들이 설치되는 곳 (windows의 Program Files 와 유사)



/mnt 

- 다른 장치들을 마운트 할때 일반적으로 사용하는 디렉토리 

- 다른 디렉토리를 사용하여도 됨.



/home 

- 일반 사용자의 홈 디렉토리가 만들어 지는 디렉토리 

- 사용자 계정을 만들면 게정과 같은 이름으로 새로운 사용자 디렉토리가 /home 디렉토리의 하위 디렉토리로 생성됨.



/boot 

- 부팅에 핵심적인 커널 이미지와 부팅 정보 파일을 담고 있는 디렉토리 

- /etc/lilo.conf에서 지정한 커널 부팅 이미지 파일이 들어 있으며 부팅시 매우 중요한 디렉토리



/root 

- 슈퍼유저(root) 사용자의 홈 디렉토리. 

- / 와 /root 디렉토리는 부르는 이름은 같지만 서로 다름.




# mkdir A

# mount /dev/cdrom A

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   2190916   4546148  33% /

tmpfs                   127492         0    127492   0% /dev/shm

/dev/hdc               3831642   3831642         0 100% /root/A


# umount A


# dd if=/dev/zero of=test.dd bs=1024 count=100000

# mke2fs -j test.dd 

mke2fs 1.39 (29-May-2006)

test.dd is not a block special device.

Proceed anyway? (y,n) y


# mount -o loop test.dd A

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   2291020   4446044  35% /

tmpfs                   127492         0    127492   0% /dev/shm

/root/test.dd            96828      5664     86164   7% /root/A


- 장치를 사용하면 umount 가 안된다.

ex)

# cd A

# umount /root/A

umount: /root/A: device is busy

umount: /root/A: device is busy


# useradd linux

# su - linux

$ su -

Password: 

su: incorrect password

$ su -

Password: 

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   2291044   4446020  35% /

tmpfs                   127492         0    127492   0% /dev/shm

/root/test.dd            96828      5664     86164   7% /root/A

# umount /root/A

umount: /root/A: device is busy

umount: /root/A: device is busy



# su - linux

$ /sbin/ifconfig




# yum -y install mc > /dev/null  2>&1

# rpm -ql mc | grep bin

/usr/bin/mc

/usr/bin/mcedit

/usr/bin/mcmfmt

/usr/bin/mcview

  :

  :



- 가상터미널이 모여있는 디렉토리

!!! 사용자가 로그인을 하면 가상터미널이 하나씩 부여받는다. !!!


# ls /dev/pts -l

total 0

crw--w---- 1 root tty 136, 0 Apr  9 09:43 0


# ls /dev/pts -l (xshell로 로긴)

total 0

crw--w---- 1 root tty 136, 0 Apr  9 09:44 0

crw--w---- 1 root tty 136, 1 Apr  9 09:44 1


# ls /dev/pts -l (xshell로 하나 더 로긴)

total 0

crw--w---- 1 root tty 136, 0 Apr  9 09:44 0

crw--w---- 1 root tty 136, 1 Apr  9 09:44 1

crw--w---- 1 root tty 136, 2 Apr  9 09:44 2



- 가상콘솔의 권한으로 로그인여부 확인하기

!!! 리눅스는 기본적으로 6개의 가상콘솔을 제공한다. !!!


- 아무도 로그인하지 않았을때의 권한

# ls -l /dev/tty[1-6]

crw------- 1 root root 4, 1 Apr  9 09:50 /dev/tty1

crw------- 1 root root 4, 2 Apr  9 09:50 /dev/tty2

crw------- 1 root root 4, 3 Mar 31 09:08 /dev/tty3

crw------- 1 root root 4, 4 Mar 31 09:08 /dev/tty4

crw------- 1 root root 4, 5 Mar 31 09:08 /dev/tty5

crw------- 1 root root 4, 6 Mar 31 09:08 /dev/tty6


- 첫 번째 가상콘솔에 root 가 로그인했을때의 권한

# ls -l /dev/tty[1-6]

crw--w---- 1 root tty  4, 1 Apr  8 13:06 /dev/tty1

crw------- 1 root root 4, 2 Mar 31 09:08 /dev/tty2

crw------- 1 root root 4, 3 Mar 31 09:08 /dev/tty3

crw------- 1 root root 4, 4 Mar 31 09:08 /dev/tty4

crw------- 1 root root 4, 5 Mar 31 09:08 /dev/tty5

crw------- 1 root root 4, 6 Mar 31 09:08 /dev/tty6


- 첫 번째 가상콘솔에 root , 두 번째 가상콘솔에 testuser 가 로그인했을때의 권한

# ls -l /dev/tty[1-6]

crw--w---- 1 root tty  4, 1 Apr  9 09:49 /dev/tty1

crw--w---- 1 ksw  tty  4, 2 Apr  9 09:50 /dev/tty2

crw------- 1 root root 4, 3 Mar 31 09:08 /dev/tty3

crw------- 1 root root 4, 4 Mar 31 09:08 /dev/tty4

crw------- 1 root root 4, 5 Mar 31 09:08 /dev/tty5

crw------- 1 root root 4, 6 Mar 31 09:08 /dev/tty6


# ls /dev/pts

0  1  2  3

# ls -ld /dev/pts

drwx--x--x 2 root root 0 Mar 31 09:06 /dev/pts/

# su - linux

$ ls -l /dev/pts

ls: /dev/pts: Permission denied

$ ls -l /dev/pts/0

crw--w---- 1 root tty 136, 0 Apr  9 10:11 /dev/pts/0

$ ls -l /dev/pts/1

crw--w---- 1 root tty 136, 1 Apr  9 09:44 /dev/pts/1

$ ls -l /dev/pts/2

crw--w---- 1 root tty 136, 2 Apr  9 09:47 /dev/pts/2

$ ls -l /dev/pts/3

crw--w---- 1 ksw tty 136, 3 Apr  9 09:46 /dev/pts/3

$ ls -l /dev/pts/4

ls: /dev/pts/4: No such file or directory

$ ls -l /dev/pts/5

ls: /dev/pts/5: No such file or directory




/etc/fstab : 부팅시 마운트되는 정보가 들어있다.

/etc/inittab : /sbin/init(PID 1)이 참고하는 설정파일



/tmp sticky bit 권한이 들어있다. rwxrwxrwt


/usr/local : 사용자가 직접 소스로 설치하면 이 디렉토리에 설치된다.







ext -> ext2 -> ext3 -> ext4

               ~~~~    ~~~~

                4,5  CentOS 6



windows OS (일반유저)

dos -> windows 95 -> windows 98 -> windows me ->

windows xp -> windows vista -> windows 7 -> windows 8 


windows server (서버)

windows NT -> windows 2000 -> windows 2003

->windows 2008 -> windows 2012



- 순서 -

1. HDD 추가 (파일로 생성)

2. 파티션분할 (fdisk)

3. 포맷 (파일시스템 생성, mkfs.ext2, mke2fs ...)

4. 디렉토리를 생성 (mkdir)

5. 디렉토리에 마운트 (mount)

6. 확인 (df, mount, cat /etc/mtab)


# dd if=/dev/zero of=ext2.dd bs=1024 count=100000

# dd if=/dev/zero of=ext3.dd bs=1024 count=100000

# dd if=/dev/zero of=fat32.dd bs=1024 count=100000


# mke2fs ext2.dd 

# mke2fs -j ext3.dd 

# mkfs.vfat fat32.dd 


# mkdir A B C



# mount -o loop  ext2.dd A

# mount -o loop  ext3.dd B

# mount -o loop  fat32.dd C

# df

# mount


# dd if=/dev/zero of=ext2-2.dd bs=1024 count=100000

# dd if=/dev/zero of=ext3-2.dd bs=1024 count=100000


# mkfs.ext2 ext2-2.dd 

# yes | mkfs.ext3 ext3-2.dd 


# mkdir D E; mount -o loop ext2-2.dd D \

> ; mount -o loop ext3-2.dd E


마운트 정보 : ext2-2.dd <-> D

마운트 정보 : ext3-2.dd <-> E



/etc/fstab 

부팅시 자동으로 마운트하는 정보를 담고있는 파일


디         마파옵덤fs

디바이스명 마운트경로 파일시스템 옵션 덤프 파일시스템체크


- 시스템 재부팅

reboot

init 6

shutdown -r now

CTRL + ALT + DEL (콘솔에서 이용)

reset 버튼 누르기 X

magic sysrq 키를 이용 (구글에서 검색)


- 시스템 종료

halt

poweroff

init 0

shutdown -h now

전원버튼 누르기  X



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

LAB> /etc/fstab 에 자동으로 마운트할 수 있게 설정하기


!!! mount -o remount,rw / !!!


마운트 정보 :

/root/filesystem/ext2.dd   <-> /root/filesystem/A

/root/filesystem/ext2.dd ext3.dd   <-> /root/filesystem/B

/root/filesystem/ext2.dd fat32.dd  <-> /root/filesystem/C

/root/filesystem/ext2.dd ext2-2.dd <-> /root/filesystem/D

/root/filesystem/ext2.dd ext3-2.dd <-> /root/filesystem/E


-- 순서 --

1. /etc/fstab 에 마운트 정보를 넣는다.

2. 시스템 재부팅을 한다.

3. 자동마운트를 확인한다.

-- 순서 --


# vi /etc/fstab

-- /etc/fstab --

  :

  :

/root/filesystem/ext2.dd    /root/filesystem/A    ext2  defaults,loop   1 0

/root/filesystem/ext3.dd    /root/filesystem/B    ext3  defaults,loop   1 0

/root/filesystem/fat32.dd   /root/filesystem/C    vfat  defaults,loop   1 0 

/root/filesystem/ext2-2.dd  /root/filesystem/D    ext2  defaults,loop   1 0 

/root/filesystem/ext3-2.dd  /root/filesystem/E    ext3  defaults,loop   1 0 

-- /etc/fstab --


# reboot


  부팅 후 ...


# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   3319688   3417376  50% /

tmpfs                   127492         0    127492   0% /dev/shm

/root/filesystem/ext2.dd

                         96828      1550     90278   2% /root/filesystem/A

/root/filesystem/ext3.dd

                         96828      5664     86164   7% /root/filesystem/B

/root/filesystem/fat32.dd

                         99788         0     99788   0% /root/filesystem/C

/root/filesystem/ext2-2.dd

                         96828      1550     90278   2% /root/filesystem/D

/root/filesystem/ext3-2.dd

                         96828      5664     86164   7% /root/filesystem/E


# mount

/dev/sda1 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/root/filesystem/ext2.dd on /root/filesystem/A type ext2 (rw,loop=/dev/loop0)

/root/filesystem/ext3.dd on /root/filesystem/B type ext3 (rw,loop=/dev/loop1)

/root/filesystem/fat32.dd on /root/filesystem/C type vfat (rw,loop=/dev/loop2)

/root/filesystem/ext2-2.dd on /root/filesystem/D type ext2 (rw,loop=/dev/loop3)

/root/filesystem/ext3-2.dd on /root/filesystem/E type ext3 (rw,loop=/dev/loop4)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)


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



사용자가 rw 영역의 모든 공간을 파티션을 분할해서

그 장치에 대해서 noexec 을 해줘야 보안상 안전하다.

(설치시 귀찮아서 기본값으로 설치하는데 파티션을 나눠주자.)


1. 자신의 홈디렉토리 ( 파티션을 분할해서 아래와 같이 저장)

2. /var/tmp ( 파티션을 분할해서 아래와 같이 저장)

3. /tmp  ( 파티션을 분할해서 아래와 같이 저장)

4. /dev/shm <-- umount /dev/shm


예)

LABEL=/       /       ext3    defaults          1 1

LABEL=/home   /home   ext3    defaults,noexec   1 1

LABEL=/var    /var    ext3    defaults,noexec   1 1

LABEL=/tmp    /tmp    ext3    defaults,noexec   1 1


umount

!!! 주의사항은 umount 시 그 디렉토리에 들어가 있으면 

!!! 안된다.


# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   3308556   3428508  50% /

/root/filesystem/ext2.dd

                         96828      1550     90278   2% /root/filesystem/A

/root/filesystem/ext3.dd

                         96828      5664     86164   7% /root/filesystem/B

/root/filesystem/fat32.dd

                         99788         0     99788   0% /root/filesystem/C

/root/filesystem/ext2-2.dd

                         96828      1550     90278   2% /root/filesystem/D

/root/filesystem/ext3-2.dd

                         96828      5664     86164   7% /root/filesystem/E


# umount /root/filesystem/ext2.dd

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   3308556   3428508  50% /

/root/filesystem/ext3.dd

                         96828      5664     86164   7% /root/filesystem/B

/root/filesystem/fat32.dd

                         99788         0     99788   0% /root/filesystem/C

/root/filesystem/ext2-2.dd

                         96828      1550     90278   2% /root/filesystem/D

/root/filesystem/ext3-2.dd

                         96828      5664     86164   7% /root/filesystem/E

# umount /root/filesystem/B

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   3308556   3428508  50% /

/root/filesystem/fat32.dd

                         99788         0     99788   0% /root/filesystem/C

/root/filesystem/ext2-2.dd

                         96828      1550     90278   2% /root/filesystem/D

/root/filesystem/ext3-2.dd

                         96828      5664     86164   7% /root/filesystem/E


# umount /root/filesystem/fat32.dd

# umount /root/filesystem/D

# umount /root/filesystem/ext3-2.dd

# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1              7103744   3308556   3428508  50% /