블로그 이미지
인터넷 해외선교를 기본으로 하는 개인적 내용과 학점은행제 관련한 것을 한꺼번에 남겨볼께요. 항상 행.복.하시길~ 주문처럼 외우는 엠토리가 운영하는 블로그입니다
엠토리

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31


엠토리가 초대장을 나누어 드리려고 합니다 ^^

왼쪽 이미지는 제가 처음 받았던 초대장입니다.
잘할꺼야 라는 설레는 맘, 잘 할 수 있을까 싶은 맘이 교차되던 그날을 잊기 쉽지 않네요 ^^
아직도 허접하게 블로깅을 하고 있습니다.

제가 지향하는 블로그의 성격이 저의 미래를 꿈꾸는 것과 연관짓기 희망하기에 아래와 같이 제한적으로 초대장을 배포하는 것을 양해해 주시기 부탁드립니다.

무슨 말이냐..
기독교 및 선교에 대한 블로깅을 희망하는 분들께만 드릴 생각합니다. (주인장 맘 ^^;)

이번에는 5장의 초대장을 배부하려고 합니다.
초대장도 취소가 가능한 것 아시지요?


하나. 희망자는 비밀댓글을 활용해서 이메일을 남겨주세요.
이때 댓글에 아래 세가지를 꼭 남겨주시길 부탁드립니다.

1. 출석하는 교회 및 담임목사님 성함
2. 개설하려는 블로그 방향 => 30글자 이상
3. 초대장 받을 이메일 주소 => 이 이메일이 티스토리의 아이디가 되니까 신중하게..

둘. 초대장을 받으시면 실제로 포스팅을 하지 않더라고 블로그 개설이 가능합니다.
그럼에도 불구하고 개설하지 않는다면 초대장의 의미가 많이 퇴색되겠지요?
그러니 초대장을 받으셨으면 하루 이내로 개설하시길 부탁드립니다.
그렇지 않으면 부득이 다른 분들에게 기회를 드림이 맞기에 회수할 수 밖에 없습니다.
이 부분은 꼭 기억해 주시구요.

셋. 엠토리의 블로그 내 여러가지 플러그인을 통해서 무료문자도 가능하고,
몇몇 키워드 검색에 대한 링크나, 추천하는 것이 있습니다.
약간의 여유를 갖고 한번씩 눌러주시는 센스도 갖고 계심 감솨하겠습니다~ ㅎ

엠토리를 통해 티스토리, 블로그의 시작이 행복하게 이루어지길 기대합니다 ^^

[디스크 관리]

1. 마운트에 대해서 이해한다.
2. 리눅스에서 cdrom, 하드디스크 사용법을 익힌다.

<마운트 와 언마운트>
리눅스는 모든 것을 파일로 간주한다. 하드디스크, CDROM 드라이브도 하나의 장치파일(Device File)로 간주한다.
사용자 입장에서는 하드디스크 장치파일을 통해서 데이타를 접근할 수 없고 장치파일을 디렉토리에 연결하는 작업(마운트)을 통해서 데이타에 접근할 수 있다.

마운트   : 파일시스템(장치)을 디렉토리에 연결하는 작업
           명령어 - mount
언마운트 : 파일시스템(장치)을 디렉토리와 연결해제 하는 작업
           명령어 - umount(unmount 가 아님)

//////////////////////////////////////////////////////////////////////////
eject  :  cdrom 을 마운트해제후 배출해 준다.

#man  eject

EJECT(1)                              User Commands                             EJECT(1)

NAME
       eject - eject removable media

SYNOPSIS
       eject -h
       eject [-vnrsfqp] [<name>]
       eject [-vn] -d
       eject [-vn] -a on|off|1|0 [<name>]
       eject [-vn] -c slot [<name>]
       eject [-vn] -t [<name>]
       eject [-vn] -x <speed> [<name>]
       eject -V

DESCRIPTION
       Eject  allows  removable  media (typically a CD-ROM, floppy disk, tape, or JAZ or
       ZIP disk) to be ejected under software control.

//////////////////////////////////////////////////////////////////////////

▲마운트 및 언마운트 형식

mount  -t 파일시스템타입  장치파일  마운트디렉토리
(마운트 디렉토리는 임의로 지정 가능하다.)

umount  마운트디렉토리 또는 umount  장치명(/dev/hdc)

1) cd 마운트
mount  -t iso9660  /dev/cdrom  /mnt/cdrom
또는
mount  /dev/cdrom  /mnt/cdrom

cd 마운트 해제
umount  /mnt/cdrom 또는 umount /dev/hdc

2) floppy
mount  -t  vfat  /dev/fd0  /mnt/floppy

3) FAT(windows 98) or  NTFS
mount  -t vfat  -o  iocharset=cp949  /dev/hda1  /mnt/win98
mount  -t ntfs  -o  iocharset=cp949  /dev/hda1  /mnt/winnt

-o 는 옵션, cp949 는 한글 코드 설정

▲하드디스크(또는 CD-ROM Drive) 장치명

(E-IDE 또는 PATA)
primary     master   : /dev/hda (첫번째 IDE 하드디스크 또는 CD-ROM)
primary     slave     : /dev/hdb (두번째 IDE 하드디스크 또는 CD-ROM)
secondary  master   : /dev/hdc
secondary  slave     : /dev/hdd

(SCSI)
/dev/sda (첫번째 스카시 하드디스크)
/dev/sdb (두번째 스카시 하드디스크)
/dev/sdc
.....

SATA 방식의 하드디스크는 SCSI 로 리눅스에서 인식된다.

IDE,E-IDE : ATA, PATA
SATA      : Serial ATA
 
▲전송 인터페이스 
1. SASI: SCSI의 모태이다.
2. SCSI (스커지): 병행연산 버스의 원형이다.
3. ST-506(시게이트 인터페이스): 현재의 플로피 디스크를 제어하는 것과 동일한 MFM 방식이다.
4. ST-412(시게이트 인터페이스): MFM 방식에 RLL 압축 기술을 적용하여 용량을 늘렸다. ST-506를 개량한 것이다.
ESDI: ST-412/506에 비해 동작 속도가 급격히 빨라졌지만, 이전의 규격들과 호환되지 않는다.
5. ATA: 초기의 병렬 방식인 ATA와 2003년에 개발된 직렬방식인 SATA가 있다.
 
출처 : http://ko.wikipedia.org

//////////////////////////////////////////////////////////////////////////
참조)
http://ko.wikipedia.org/wiki/%ED%95%98%EB%93%9C_%EB%94%94%EC%8A%A4%ED%81%AC
http://wiki.kldp.org/Translations/html/SysAdminGuide-KLDP/x798.html

//////////////////////////////////////////////////////////////////////////

▲자동 마운트 설정파일
#cat  /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/home             /home                   ext3    defaults        1 2
LABEL=SWAP-sda2         swap                    swap    defaults        0 0
/dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0
/dev/hdc                /media/cdrom       auto    pamconsole,exec,noauto,managed 0 0

---> cdrom 의 경우  리눅스 종류 또는 vmware 버전에 따라서 /media/cdrecorder 로 나타나는 경우도 있다.

▲/etc/fstab : 자동마운트 설정파일의 형식

1)장치명 또는 파티션 레이블(LABEL)
2)마운트할 디렉토리
3)파일 시스템 형식
4)옵션
5)덤프값 : dump 라는 프로그램으로 덤프여부, ext3 는 1, 다른 파티션은 0
6)파일시스템점검순서 : 루트파티션(ext3)은 1, 다른 파티션(ext3)은 2, 그 외 파티션은 0

[cent]
//////////////////////////////////////////////////////
#df -h 했을 때
/dev/hdc              636M  636M     0 100% /media/cdrom
라인이 출력되면
#eject
명령 실행후 실습하기
//////////////////////////////////////////////////////

df : Disk Free, 하드디스크 파티션별 사용량 출력 명령
     -h 옵션을 주면 메가바이트, 기가바이트로 출력되고
     옵션을 주지 않으면 킬로바이트 단위로 출력된다.

▲cd 자동 마운트
가상머신 오른쪽 하단 cdrom 아이콘에 마우스 커서를 위치시키고 회색으로 되어 있으면 왼쪽마우스를 누른후 "connect" 를 누른다.(녹색 LED 표시가 나오도록 설정)
cdrom 아이콘을 더블클릭한 후 use iso image 선택하고 browse 버튼 눌러서 centos 1번 cd 파일(확장자 iso) 을 지정해 준다.
질문 창이 나오면 yes 를 선택한다.
실제 컴퓨터에서 데이타 cd 를 cdrom 드라이브에 넣는 것과 같다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  52% /
/dev/shm              125M     0  125M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hdc              630M  630M     0 100% /media/cdrom ---> 자동 마운트된 cd
/media/cdrecorder 에 마운트 되는 경우도 있는데 이 때는
/media/cdrecorder 디렉토리를 찾아가야 cd 의 내용이 보인다.

//////////////////////////////////////////////////////
프로그램 오동작으로 인하여 자동마운트 안 되는 경우도 있는데 이 때는

1)가상머신 cdrom 아이콘 클릭해서 Use physical drive 선택후 OK 한 후 다시 iso 파일을 선택해서 해 본다.
2)리부팅 해서 다시 해 본다.
3)
#eject
#mount  /media/cdrom 또는 mount /media/cdrecorder
해 본다.
//////////////////////////////////////////////////////

#cd  /media/cdrom 또는 #cd /media/cdrecorder
#pwd
/media/cdrom
#ls
CentOS  RELEASE-NOTES-en.html  centosdocs-man.css  isolinux
GPL     RPM-GPG-KEY            headers             repodata
NOTES   RPM-GPG-KEY-centos4    images              yumgroups.xml
---> cd 의 내용이 출력 된 것.

#cp  RELEASE*  /work
---> cd 에 있는 파일을 하드디스크 /work 디렉토리로 복사
#cd  /work
#ls
#cat  RELEASE*

#umount   /media/cdrom 또는 #umount /media/cdrecorder
---> 마운트 해제(cd 를 꺼내려면 마운트 해제를 해야 한다.)
busy 라고 나오면 다른 디렉토리로 이동후 해제하면 된다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  52% /
/dev/shm              125M     0  125M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home

<cd 수동 마운트>
[cent]
▲자동마운트 해제하기
(리눅스 가상머신에서 작업하기)
위쪽 메뉴표시줄-프로그램-환경설정-이동식 저장장치

이동식 디스크 항목
[ ]"(cdrom 같은)꺼낼수 있는 미디어가 들어오면 마운트" 체크해제 - 닫기 버튼 클릭
--->위에서 두번째 항목

#df -h
cdrom(/dev/hdc) 이 출력되지 않아야 한다.

리눅스 가상머신 cdrom 아이콘 더블 클릭해서 centos 2번 cd 입력하고 자동마운트 되는지 확인

#df  -h
---> 자동마운트되지 않는다.


#ls  /mnt
#mkdir  /mnt/mycd (cd 를 수동 마운트할 디렉토리 생성)
#ls  /mnt

#mount  -t iso9660  /dev/cdrom  /mnt/mycd
mount: block device /dev/cdrom is write-protected, mounting read-only
또는
#mount  /dev/cdrom  /mnt/mycd

#ls /dev/h*
/dev/hdc (---> cdrom 드라이브 장치파일)
#ll /dev/cdrom
lrwxrwxrwx  1 root root 3  2월 12  2009 /dev/cdrom -> hdc
---> /dev/cdrom 은 심볼릭 링크 파일이다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
/dev/shm               98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hdc              630M  630M     0 100% /mnt/mycd

#cd /mnt/mycd
#pwd
/mnt/mycd

#ls
CentOS  GPL  RPM-GPG-KEY
---> 2번 cd 의 내용이 출력된다.

#ls  /media/cdrom
---> 자동 마운트에 사용된 디렉토리는 비어 있음

▲마운트 해제 하기
리눅스에서는 cdrom 이 마운트되면 cdrom 드라이브의 "꺼내기(Eject)" 버튼을 눌러도 CD 가 배출되지 않으며 마운트해제를 해야 배출된다.

#pwd
(/mnt/mycd)
#ls
CentOS  GPL  RPM-GPG-KEY

#umount   /mnt/mycd (마운트 해제하기)
umount: /mnt/mycd: device is busy
umount: /mnt/mycd: device is busy

--->busy 로 나오면 다른 디렉토리로 이동후 마운트를 해제하거나
    fuser 로 프로세스를 확인후 프로세스를 강제 종료후 마운트 해제 할 수 있다.

#fuser  -u  /mnt/mycd
fuser  파일시스템 사용자 출력
-u 사용자 계정 출력
---> fuser 로 보았을 때 프로세스가 보이면 마운트 해제시 busy 로 나타나고 마운트 해제가 안 된다.

c 현재(current) 디렉토리로 파일을 사용한다는 의미

//////////////////////////////////////////////////////////////////////////
#man fuser
NAME
       fuser - identify processes using files or sockets

 c      current directory.
//////////////////////////////////////////////////////////////////////////

#cd
#pwd
/root
#fuser  -u  /mnt/mycd
/mnt/mycd:

#umount  /mnt/mycd

//////////////////////////////////////////////////////////////////////////
(참고)
다른 디렉토리로 이동해서도 마운트 해제가 안 되면
#fuser  -k  /mnt/mycd
#umount   /mnt/mycd
해 본다.

fuser  -k 는 /mnt/mycd 에 남아있는 프로세스를
강제 종료하는 명령어와 옵션(-k : kill 옵션)
//////////////////////////////////////////////////////////////////////////

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
/dev/shm               98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home

#ls  /mnt/mycd
---> 마운트가 해제되었으므로 출력되는 내용이 없다.

#mount  /media/cdrom 또는 #mount /media/cdrecorder
---> 자동 마운트 설정 파일인 /etc/fstab 에 마운트 정보가 있을 경우
"mount  마운트디렉토리"  형식으로 이용 가능하다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
/dev/shm               98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hdc              630M  630M     0 100% /media/cdrom

#eject (마운트 해제와 cd 배출을 한꺼번에 해 준다.)
#df  -h
(cdrom 이 마운트 해제 된 것을 확인 할 수 있다.)

#mount  /mnt/mycd
mount: can't find /mnt/mycd in /etc/fstab or /etc/mtab
---> /mnt/mycd 정보가 /etc/fstab 에 없으므로 마운트되지 않는다.

/etc/fstab  :  자동마운트 설정 정보 파일
/etc/mtab  :  현재 마운트된 정보를 저장하고 있는 파일

/media/cdrom : 자동마운트 프로그램이 이용하는 디렉토리
/mnt/mycd     : 수동마운트에 사용한 디렉토리

<디스크 관리>
새로운 하드디스크를 추가하기 위해서 리눅스 가상머신을 종료한다.
(리눅스 가상머신이 부팅 된 상태에서는 가상 하드디스크 추가가 안 된다.)

[cent]
#poweroff

▲IDE 방식 200M 가상 하드디스크 2개 추가하기
1) vmware 메뉴표시줄-VM-Settings
2) Add-Hard Disk-Next
3) Create a new virtual disk 선택(첫번째 버튼)-Next
4) Virtual disk type : IDE 선택-Next
5) Disk Capacity-0.2 로 설정-Next
6) Disk file(가상하드디스크 저장 파일명, 디폴트값 그대로 사용)-finish
8) OK

하드디스크 추가후 Linux 부팅시키기

dmesg : 부팅시 커널이 발생한 메시지 출력 명령

#dmesg
#dmesg  |  grep sd
#dmesg  |  grep hd
---> 부팅시에 커널이 하드웨어 인식한 것을 알 수 있다.

//////////////////////////////////////////////////////
결과 캡춰
#dmesg | grep sd
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)
sda: cache data unavailable
sda: assuming drive cache: write through
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)
sda: cache data unavailable
sda: assuming drive cache: write through
 sda: sda1 sda2 sda3
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
EXT3 FS on sda1, internal journal
EXT3 FS on sda3, internal journal
Adding 522104k swap on /dev/sda2.  Priority:-1 extents:1

#dmesg | grep hd
    ide0: BM-DMA at 0x1070-0x1077, BIOS settings: hda:DMA, hdb:pio
    ide1: BM-DMA at 0x1078-0x107f, BIOS settings: hdc:DMA, hdd:pio
hda: VMware Virtual IDE Hard Drive, ATA DISK drive
hdc: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
hda: max request size: 128KiB
hda: 417792 sectors (213 MB) w/32KiB Cache, CHS=414/16/63, UDMA(33)
hda: cache flushes not supported
 hda: unknown partition table
hdc: ATAPI 1X CD-ROM drive, 32kB Cache, UDMA(33)
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)
SCSI device sda: 16777216 512-byte hdwr sectors (8590 MB)

//////////////////////////////////////////////////////

<하드디스크 작업 순서>
1. 물리적 부착
2. fdisk 로 파티션 생성
3. mkfs.ext3 로 포맷하기
4. 마운트해서 사용하기

▲fdisk 명령어
fdisk  /dev/장치명

▲fdisk 내부에서 사용하는 명령어
a : 부트 플래그 설정
l : 파티션 목록(list)
n : 새 파티션 생성(new)
t : 파티션 변경(toggle,change)
w : 저장(write)
p : 파티션 출력(print)
q : 종료(quit)
d : 삭제(delete)

▲파일시스템 생성(포맷 개념)
1) mkfs.ext3  /dev/hda1
2) mkfs  -t  ext3  /dev/hda1

mkfs ---> make filesystem

▲마운트 형식
mount  -t  ext3  /dev/hda1  /disk2
(-t ext3 는 생략 가능)

#ls /dev/h*
/dev/hda(새로 부착한 하드디스크) /dev/hdb /dev/hdc (CDROM 드라이브)

#fdisk -l
-l(list)

Disk /dev/hda: 213 MB, 213909504 bytes
16 heads, 63 sectors/track, 414 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Disk /dev/hda doesn't contain a valid partition table

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         765     6144831   83  Linux
/dev/sda2             766         830      522112+  82  Linux swap / Solaris
/dev/sda3             831        1044     1718955   83  Linux

Id 83 은 리눅스 데이타 파티션을 의미하고
Id 82 는 리눅스 스왑 파티션을 의미한다.

수업용 하드디스크 구분:

[/dev/sda]              [/dev/hda]              [/dev/hdb]
첫번째 하드디스크    두번째 하드디스크     세번째 하드디스크
(부트디스크)

#fdisk  /dev/hda
Command (m for help): m 입력

 p   print the partition table

Command (m for help): l(엘) 입력
파티션 종류 출력

Command (m for help): n(파티션 새로 생성)
Command action
   e   extended
   p   primary partition (1-4)
주파티션은 1-4번이고
5번 부터는 확장파티션 안의 논리파티션(logical partition)이다.

주파티션   : primary partition(4개 까지 가능)
확장파티션 : extended partition
논리파티션 : logical partion(번호가 5번 부터 할당)

파티션을 5개 이상 만드려면
확장파티션을 만들고 그 안에 논리 파티션을
만들어야 한다.
최대 파티션 수는 16개 이다.
(주파티션 3개 + 확장 파티션 1개 + 논리 파티션 12개)

[주파티션1 | 주파티션2 | 주파티션3 | 확장파티션(논리파티션5 | 논리파티션6 ...)]

p (엔터)
Partition number (1-4): 1
First cylinder (1-414, default 1): 엔터
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-414, default 414):+100M
(총 200M 에서 100M 만 할당)
+ 를 생략하면 실린더수로 인식 됨

실린더가 모여서 파티션을 이룬다.

Command (m for help): p

Disk /dev/hda: 213 MB, 213909504 bytes
16 heads, 63 sectors/track, 414 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         195       98248+  83  Linux

Command (m for help):

Command (m for help): w(저장후 종료)
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#ls /dev/h*
/dev/hda  /dev/hda1(두번째 하드디스크 첫번째 파티션 장치파일)  /dev/hdb  /dev/hdc

실습용 리눅스 가상머신의 하드디스크 구분 :
/dev/sda : 첫번째 하드디스크(부트디스크)
/dev/hda : 두번째 하드디스크
/dev/hdb : 세번째 하드디스크

#fdisk -l
#fdisk -l(엘) /dev/hda

Disk /dev/hda: 213 MB, 213909504 bytes
16 heads, 63 sectors/track, 414 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         195       98248+  83  Linux

#mkfs.ext3  /dev/hda1
(파일시스템 생성하기-윈도우의 포맷개념)

mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
24576 inodes, 98248 blocks
4912 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
12 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

#mkdir /disk2

#mount  /dev/hda1  /disk2
또는
#mount  -t  ext3  /dev/hda1  /disk2
-t ext3 는 생략가능

#cat  /etc/filesystems
---> 자주 사용되는 파티션 타입은 파일에 저장되어 있으므로
       마운트시에 타입을 생략할 수 있다.

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.7G  2.8G  2.7G  51% /
none                   98M     0   98M   0% /dev/shm
/dev/sda3             1.6G   90M  1.5G   6% /home
/dev/hda1              93M  5.6M   83M   7% /disk2

#df -T(파티션 타입 출력)
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda1     ext3     5952252   2849676   2795336  51% /
none         tmpfs       99464         0     99464   0% /dev/shm
/dev/sda3     ext3     1665032     91580   1487508   6% /home
/dev/hdc   iso9660      645032    645032         0 100% /media/cdrom
/dev/hda1     ext3       95139      5664     84563   7% /disk2

--->cdrom 까지 마운트되어 있을 때 캡춰한 결과

/dev/shm 은 램디스크(Ram Disk, 메모리를 가상의 디스크로 사용)와
유사한 것으로 커널이 메모리를 마운트해서 사용하는 것이다.
크기는 메모리의 0.5 배로 기본 설정된다.
tmpfs 는 임시 파일 시스템(temporary filesytem)을 의미한다.

#cd /disk2
#pwd
/disk2

#ls
lost+found
---> 파일시스템 체크시 고아노드(문제가 생긴 파일)가 저장되는 곳

(vi 로 파일을 생성해도 된다.)
#cat  >  test.txt  (> 는 "출력 리다이렉션" 이라고 부른다.)
apple
orange
mango
ctrl+d 입력 : 입력 종료 단축키

#ls
lost+found  test.txt
#cat   test.txt
appple
orange
mango

<파티션 삭제, 타입 변경 테스트>

다른 디렉토리로 이동후 /disk2(/dev/hda1) 마운트 해제 하기
(#umount  /disk2)
파티션 작업을 할 때는
#fdisk  /dev/hda1 으로 하면 안되고
#fdisk  /dev/hda 로 실행해야 한다.

▲실습
두번째 하드디스크(/dev/hda) 남은 용량을 파티션 설정하고
포맷한 후 /disk2_2 디렉토리에 마운트 테스트하기
(주의 : /dev/hda1 을 마운트 해제한 후 작업해야 함,
마운트 해제를 하지 않으면 장치 파일이 생성되지 않는다.)

fdisk 사용시)
파티션 생성 : n
파티션 삭제 : d
파티션 저장 : w
파티션 출력 : p
메뉴 출력   : m

//////////////////////////////////////////////////////

#cd
#pwd
(/root)
#umount /disk2

#fdisk /dev/hda

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (196-414, default 196):
Using default value 196
Last cylinder or +size or +sizeM or +sizeK (196-414, default 414):
Using default value 414

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#mkfs.ext3  /dev/hda2
#mkdir /disk2_2
#mount /dev/hda2 /disk2_2
#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             5.8G  2.2G  3.4G  39% /
none                   98M     0   98M   0% /dev/shm
/dev/sda3             1.7G   35M  1.5G   3% /home
/dev/hda2             105M  5.6M   94M   6% /disk2_2
//////////////////////////////////////////////////////

[파일시스템 체크 및 복구]

1. 리눅스 파티션 구조를 이해한다.
2. fsck 사용법을 익힌다.
3. 디스크 쿼타(Quota) 설정법을 익힌다.

☞파일 시스템(File System)
자료(data)를 저장하고 찾기 쉽도록 만들어 놓은 방법, 체계적인 구조

☞파일시스템의 종류
FAT  : windows 구버전(windows 98)이 사용
NTFS : windows 2000 이상이 사용
ext2 : 구버전 리눅스가 사용
ext3 : 현재의 리눅스가 사용
UFS  : 유닉스가 사용(솔라리스)

☞저장단위
0,1 : bit
8 bit : 1 byte
1 KB(Kilo byte) : 1,024 byte  = 10^3(10의 3승)
1 MB(Mega byte) : 1,024 Kbyte = 10^6(10의 6승)
1 GB(Giga byte) : 1,024 Mbyte = 10^9(10의 9승)

☞블록(block) : 데이타를 묶어서 처리하는 단위(예 : 512 byte)

☞하드디스크 용량 계산 :
트랙수 X 섹터수 X 면수 X 바이트
(실린더수와 트랙수는 동일)

☞리눅스 파일 시스템 구조

[ /dev/sda1 | /dev/sda2 | /dev/sda3 ]

      ^
      |
      |
-------------------------------------------------------
[VTOC][First Group][Second Group][ ... Group]
-------------------------------------------------------
              ^
              |
       |
☞각 Group 의 구조
[수퍼블록(백업수퍼블록)][실린더그룹][아이노드테이블][데이터블록]

☞VTOC(Volume Table Of Contents)
디스크 라벨(Label)
첫번째 섹터(512 바이트)에 존재하며, 파티션 정보를 포함

☞Primary Super Block
데이터 블록의 갯수
실린더 그룹의 갯수
데이터 블록의 크기 및 조각(Fragment)
마운트 정보
파일시스템 정보

☞Cylinder Group Block
아이노드의 갯수
디렉토리 갯수
실린더 그룹 내의 사용하지 않는 블록, 아이노드 갯수

☞Inode Table
파일의 종류와 접근모드(rwx)
파일의 UID, GID
파일의 접근시간, 수정시간 ,아이노드 변경시간
데이터 저장에 사용된 총 데이터 블록수
데이터 저장된 블록에 대한 포인터
총15개의 데이터 블록 포인터(주소정보)를 갖고 있다.
12 번재 포인터 까지는 아이노드가 실제 데이타를 가르킨다.
13 번째 포인터는 파일이 16MB 이하에 사용
14 번째 포인터는 32GB
15 번째 포인터는 70TB 까지 이론상 가능하지만
구조상 하나의 파일이 1TB 이상은 존재할 수 없다.

☞Data Block
데이터 블록의 기본 크기는 8192바이트(8KB)

참조)
http://gpvprasad.wordpress.com/interview-questions/embedded-interview-questions/

☞ext3 파일시스템은 ext2 와 구조는 같고 파일저장시 로그를
남기는 저널링 기능이 포함된 형태이다.

◐dumpe2fs : 파티션 논리적인 구조를 볼 수 있는 명령어

#dumpe2fs  /dev/sda3

dumpe2fs 1.35 (28-Feb-2004)
Filesystem volume name:   /home
Last mounted on:          <not available>
Filesystem UUID:          6b361661-6db7-4f63-a81c-da58b686f939
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index fil
etype needs_recovery sparse_super large_file
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              570080
Block count:              1138606
Reserved block count:     56930
Free blocks:              1110280
Free inodes:              570069
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      277
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16288
Inode blocks per group:   509
Filesystem created:       Tue Feb  8 20:05:13 2011
Last mount time:          Tue Feb  8 11:50:40 2011
Last write time:          Tue Feb  8 11:50:40 2011
Mount count:              2
Maximum mount count:      -1
Last checked:             Tue Feb  8 20:05:13 2011
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      4c36ba93-e489-44ab-bd5a-6534c8cd0fc0
Journal backup:           inode blocks

Group 0: (Blocks 0-32767)
  Primary superblock at 0, Group descriptors at 1-1
  Block bitmap at 279 (+279), Inode bitmap at 280 (+280)
  Inode table at 281-789 (+281)
  23769 free blocks, 16277 free inodes, 2 directories
  Free blocks: 8999-32767
  Free inodes: 12-16288
Group 1: (Blocks 32768-65535)
  Backup superblock at 32768, Group descriptors at 32769-32769
  Block bitmap at 33047 (+279), Inode bitmap at 33048 (+280)
  Inode table at 33049-33557 (+281)
  31962 free blocks, 16274 free inodes, 4 directories
  Free blocks: 33558-55295, 55312-65535
  Free inodes: 16303-32576
Group 2: (Blocks 65536-98303)
  Block bitmap at 65536 (+0), Inode bitmap at 65537 (+1)
  Inode table at 65538-66046 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 66047-98303
  Free inodes: 32577-48864
Group 3: (Blocks 98304-131071)
  Backup superblock at 98304, Group descriptors at 98305-98305
  Block bitmap at 98583 (+279), Inode bitmap at 98584 (+280)
  Inode table at 98585-99093 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 99094-131071
  Free inodes: 48865-65152
Group 4: (Blocks 131072-163839)
  Block bitmap at 131072 (+0), Inode bitmap at 131073 (+1)
  Inode table at 131074-131582 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 131583-163839
  Free inodes: 65153-81440
Group 5: (Blocks 163840-196607)
  Backup superblock at 163840, Group descriptors at 163841-163841
  Block bitmap at 164119 (+279), Inode bitmap at 164120 (+280)
  Inode table at 164121-164629 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 164630-196607
  Free inodes: 81441-97728
Group 6: (Blocks 196608-229375)
  Block bitmap at 196608 (+0), Inode bitmap at 196609 (+1)
  Inode table at 196610-197118 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 197119-229375
  Free inodes: 97729-114016
Group 7: (Blocks 229376-262143)
  Backup superblock at 229376, Group descriptors at 229377-229377
  Block bitmap at 229655 (+279), Inode bitmap at 229656 (+280)
  Inode table at 229657-230165 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 230166-262143
  Free inodes: 114017-130304
Group 8: (Blocks 262144-294911)
  Block bitmap at 262144 (+0), Inode bitmap at 262145 (+1)
  Inode table at 262146-262654 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 262655-294911
  Free inodes: 130305-146592
Group 9: (Blocks 294912-327679)
  Backup superblock at 294912, Group descriptors at 294913-294913
  Block bitmap at 295191 (+279), Inode bitmap at 295192 (+280)
  Inode table at 295193-295701 (+281)
  31978 free blocks, 16288 free inodes, 0 directories
  Free blocks: 295702-327679
  Free inodes: 146593-162880
Group 10: (Blocks 327680-360447)
  Block bitmap at 327680 (+0), Inode bitmap at 327681 (+1)
  Inode table at 327682-328190 (+2)
  32257 free blocks, 16288 free inodes, 0 directories
  Free blocks: 328191-360447
  Free inodes: 162881-179168

<디스크 장애 발생 및 복구>

fsck : 파일시스템 체크 및 복구 명령어(file system checker)

형식)
fsck  마운트디렉토리명 또는 fsck 장치명

#fsck 만 적고 tab 키를 두 번 눌러 본다.(명령어 자동완성 기능)
fsck     fsck.ext2     fsck.ext3

[root@cent ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  4.5G  9.3G  33% /
none                  252M     0  252M   0% /dev/shm
/dev/sda3             4.3G   42M  4.1G   1% /home
/dev/hda1              93M  5.6M   83M   7% /disk2

#fsck  /dev/sda3

fsck 1.37 (21-Mar-2005)
e2fsck 1.37 (21-Mar-2005)
/dev/sda3 is mounted.

WARNING!!!  Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.

Do you really want to continue (y/n)? no
---> 마운트된 파티션을 체크하면 손상을 줄 수 있으므로 n 을 입력한다.

check aborted.

#umount  /home
[root@cent ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  4.5G  9.3G  33% /
none                  252M     0  252M   0% /dev/shm
[root@cent ~]#

#fsck.ext3   /dev/sda3

e2fsck 1.37 (21-Mar-2005)
/dev/sda3: clean, 12/24576 files, 8774/98248 blocks

---> 파일시스템(파티션)이 문제가 없는 상태(clean)


<dd 를 이용하여 파티션의 수퍼블록 삭제하기>
//////////////////////////////////////////////////////////////////////////
#man  dd
NAME
       dd - 한 파일을 복사하는 동한 변환한다.
//////////////////////////////////////////////////////////////////////////

dd : convert and copy a file
1)dd 는 백업 명령어 중의 하나이다.
2)파티션을 복제할 때 사용할 수 있다.
3)수업에서는 수퍼블록을 삭제하는 용도로 사용함

The  default  ibs= and obs= sizes are specified as 512 bytes
if : input file
of : output file
/dev/zero : special file(지우개에 해당)
count : 횟수


A 디스크                     B 디스크
----------                     ----------
1번 파티션    ---->        1번 파티션
----------       dd           ----------

----------                     ----------
입력                           출력


◐dd 형식
dd  입력장치  출력장치  옵션
---> 입력장치에서 일정 크기만큼(디폴트는 1블록-512bytes) 데이타를 읽은 후 출력장치에 그대로 써준다.

☞파일시스템을 복구한 후 데이파 파일을 확인 할 수 있도록 예제 파일 만들기
#mount  /home
#cd  /home
#ls
#vi ddtest.txt
Linux Test

#cd
#umount  /home

--->dd 사용전 테스트 파일을 작성하고 마운트 해제하기
    dd 명령은 마운트 해제후 사용한다.

#dd  if=/dev/zero   of=/dev/sda3  bs=4096  count=20

count 옵션을 주지 않으면 파티션이 모두 삭제 된다.
count=20 에서 숫자를 다르게 지정해도 된다.

if : 입력장치
of : 출력장치
bs : 블록 사이즈(byte 단위)

---> /dev/zero 에서 읽은 후 /dev/sda3 에 쓰기 작업을 20번 반복하라는 의미
     즉, /dev/sda3 의 앞쪽 파티션 정보(수퍼블록)가 삭제된다.

//////////////////////////////////////////////////////////////////////////
#man  zero

null, zero - 데이터 소멸점(sink)

설명
       null나 zero 특수 파일에 쓴 데이터는 버려진다.

       null  특수 파일에서 읽으면 항상 EOF를 리턴하는 반면, zero에서 읽으면 항상 \0 문자를 리턴한다.
//////////////////////////////////////////////////////////////////////////


#mount  /dev/sda3  /home
mount: you must specify the filesystem type

---> dd 명령으로 인해 파티션이 손상되서 마운트되지 않는다.

#mount  -t  ext3  /dev/sda3  /home
mount: wrong fs type, bad option, bad superblock on /dev/sda3,
       or too many mounted file systems

◐수퍼블록(super block)
ext2 또는 ext3 파일 시스템에서 사용되는 주요 설정 정보들이
기록되어 있는 영역, 수퍼블록이 깨지면 마운트가 안되기
때문에 파티션 내부에 주기적으로 백업수퍼블록이 존재한다.

-----------------------------
primary super block

first backup super block
...

      backup super block
-----------------------------

[리눅스 파티션]

fsck.ext3 : 파일시스템 체크 및 수리 명령어

# fsck.ext3  /dev/sda3
안되면  #fsck  /dev/sda3  또는 -b 옵션을 이용해 본다.
#fsck.ext3  -b  32768  /dev/sda3 

e2fsck 1.35 (28-Feb-2004)
Couldn't find ext2 superblock, trying backup blocks...
Resize inode not valid.  Recreate<y>? yes

(질문이 나오면 엔터 또는 y 를 입력)

/home was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #2 (32286, counted=32278).
Fix<y>? yes (y를 입력하거나 엔터를 입력)

Free blocks count wrong for group #11 (32286, counted=32278).
Fix<y>? yes

Free blocks count wrong (414144, counted=414128).
Fix<y>? yes

Free inodes count wrong for group #0 (15345, counted=15344).
Fix<y>? yes

Free inodes count wrong for group #2 (15360, counted=15352).
Fix<y>? yes

Directories count wrong for group #2 (0, counted=1).
Fix<y>? yes

Free inodes count wrong for group #11 (15360, counted=15352).
Fix<y>? yes

Directories count wrong for group #11 (0, counted=1).
Fix<y>? yes

Free inodes count wrong (215025, counted=215008).
Fix<y>? yes


/home: ***** FILE SYSTEM WAS MODIFIED *****
/home: 32/215040 files (0.0% non-contiguous), 15610/429738 blocks

fsck 검사 단계
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

1단계 : 아이노드의 무결성 체크
         (아이노드 타입,아이노드 크기,형식 체크)
2단계 : 디렉토리의 무결성을 체크해서 bad inode 를 찾고 fix 한다.
3단계 : 디렉토리의 연결성 확인, lost+found 디렉토리를 fix 한다.
4단계 : 아이노드에서 link count 를 fix 한다.
         (잘못된 링크 카운트를 바로 잡는다.)
5단계 : 그룹요약정보를 체크한다.


#mount  /dev/sda3  /home
#cd  /home
#ls
#cat ddtest.txt

---> 파티션이 복구되어서 정상적으로 마운트가 되고 자료파일에 접근할 수가 있다.

//////////////////////////////////////////////////////////////////////////
#man  fsck
이름
       fsck - 리눅스 화일 시스템을 점검하고 수리한다.
.........

참고
       fstab(5), mkfs(8), fsck.minix(8), fsck.ext2(8) 또는 e2fsck(8), fsck.xiafs(8).

#man  fsck.ext2
NAME
       e2fsck - check a Linux ext2/ext3 file system

SYNOPSIS
       e2fsck  [  -pacnyrdfkvstDFSV  ]  [  -b  superblock  ]  [  -B  blocksize  ] [ -l|-L
       bad_blocks_file ] [ -C fd ] [ -j external-journal ] [ -E extended_options ] device

-b superblock
              Instead of using the normal superblock, use an alternative superblock spec-
              ified by superblock.   This  option  is  normally  used  when  the  primary
              superblock  has  been  corrupted.  The location of the backup superblock is
              dependent on the filesystem’s blocksize.  For filesystems  with  1k  block-
              sizes, a backup superblock can be found at block 8193; for filesystems with
              2k blocksizes, at block 16384; and for 4k blocksizes, at block 32768.
(수퍼 블록의 위치를 수동으로 지정할 때 사용하는 옵션)

-y     Assume an answer of ‘yes’ to all questions; allows e2fsck  to  be
              used non-interactively.

(질문이 많이 나올 때는 #fsck.ext3  -y  /dev/sda3 하면 된다.)
//////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////
#man  mount
이름
       mount - 화일 시스템 마운트

       mount 명령의 기본적인 사용법은
              mount -t type device dir

       -t vfstype
              -t 다음에 쓰이는 인수는 화일 시스템의 유형을 지시한다.  현재 지
              원되고 있는 화일 시스템 유형은 linux/fs/filesystems.c 에 적혀있
              다: minix, ext, ext2, xiafs, hpfs, fat,  msdos,  umsdos,  vfat,
              proc, nfs, iso9660, smb, ncp, affs, ufs, sysv, xenix, coherent.
              마지막 3 개는 같은 것이며 xenix 와 coherent 는 조만간 사라질 것
              이다.  sysv 을 사용하라.

              iso9660  은 기본 설정치이다. 만약 -t 옵션 다음에 다른 것이 주어
              지거나 또는 auto 라고 명시되면 화일 시스템의 수퍼블럭을 조사 하
              게   된 다.  (minix, ext, ext2, xia, iso9660 이 지원되고 있음).
              만약 조사가 실패하고 /proc/filesystems 이 존재한다면, "nodev"라
              고 적힌 것을 제외한 모든 화일 시스템을 조사하게 된다.  (예를 들
              어, proc 와 nfs).

예를 들어, 다음과 같이 한다고 치자:
       mount -a -t nomsdos,ext
이 명령은 msdos 와 ext 을 제외한 모든 화일 시스템을 마운트한다.

-o     -o 플래그 뒤에 콤마로 분리한 옵션을 적어준다. 
       이들 중   몇 몇 은 /etc/fstab  화일에서만 사용할 수 있다.
       다음 옵션들은 마운트될 어떤 화일 시스템에서든 사용할 수
       있는 것이다:

defaults
        다음과 같은 기본 옵션을 사용하게 한다:  rw,  suid,  dev,
        exec, auto, nouser, and async.

suid         set-UID, set-GID 가 효력을 발휘할 수 있게 해준다.
nosuid      set-UID, set-GID 를 무시하게 한다.
dev          화일 시스템 상의 문자, 블럭 특수 장치를 해석한다.
exec        바이너리의 실행은 허가한다.
auto        -a 옵션으로 마운트 가능하게 한다.
nouser     일반 사용자( 즉, 루트 아닌 )가 마운트할 수 있도록 허용하지  않는다.
              기본 설정치이다.
async       화일 시스템에 대한 I/O가 비동기적으로 이뤄지도록 한다.
remount   이미 마운트된 화일 시스템을 다시 마운트한다.

//////////////////////////////////////////////////////////////////////////


◐실습
리눅스를 종료한 다음 SCSI 방식으로 100M 하드디스크를 추가하고 부팅하기
100M 하드디스크를 파티션 설정하고 포맷한 다음 마운트 테스트한 후 마운트 해제하기
#fdisk  /dev/sdb
n
p
1
enter
enter
w
#fdisk  -l
#mkfs.ext3  /dev/sdb1
#mkdir  /new
#mount  /dev/sdb1  /new
#df  -h
#ls  /new
#umount  /new

위의 디스크를 dd 이용하여 수퍼블록 삭제하고
fsck 이용하여 복구한 후 마운트 테스트하기
(cent공용 을 이용해도 됨)


<디스크 쿼타(Quota)>

사용자별로 하드디스크 사용량을 제한하는 기능

---> 쿼타를 지정하지 않으면 일반계정이 파티션의 남은 용량을 다 사용할 수도 있기 때문에 실제 서버에서는 하드디스크 사용량 제한 설정을 해 준다.

1. /etc/fstab 파일을 열고 쿼타를 지정할 파티션 라인의 defaults 다음에 ,usrquota,grpquota 추가

(수업에서는 /home 에 지정)
--->defaults 와 usrquota 사이에 공백이 있으면 안 됨
--->/home 파티션이 없는 경우 / 파티션에 지정하기

usrquota : 사용자별 쿼타
grpquota : 그룹별 쿼타

student 그룹의 멤버 : apple, banana, candy 일 때
[student  group(10M)]=[apple(5M), banana(3M), candy(2M)]

사용자 쿼타는 사용자별로 용량을 제한하는 것이고 그룹 쿼타는 그룹의 멤버 사용자들의 용량을 합하여 그룹의 용량으로 제한 하는 것임


//////////////////////////////////////////////////////////////////////////

#vi  /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
LABEL=/home             /home                   ext3    defaults,usrquota,grpquota(--->공백없이 단어추가)        1 2
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-sda2         swap                    swap    defaults        0 0
/dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0
/dev/hdc                /media/cdrom            auto    pamconsole,exec,noauto,managed 0 0

//////////////////////////////////////////////////////////////////////////

2. 파티션을 리마운트 하거나 리부팅 하기
mount
mount  -o  remount  /home
mount 로 확인

#mount (현재 마운트되어 있는 정보 출력)
/dev/sda1 on / type ext3 (rw)
/dev/proc on /proc type proc (rw)
/dev/sys on /sys type sysfs (rw)
/dev/devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/shm on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
automount(pid1602) on /misc type autofs (rw,fd=4,pgrp=1602,minproto=2,maxproto=4)
automount(pid1649) on /net type autofs (rw,fd=4,pgrp=1649,minproto=2,maxproto=4)
/dev/hdc on /media/cdrom type iso9660 (ro,nosuid,nodev,_netdev)
/dev/sda3 on /home type ext3 (rw)

#cat  /etc/mtab (마운트 테이블 파일)

////////////////////////////////////////////////////////////////

Viewing /etc/mtab
The file /etc/mtab is a normal file that is updated by the mount program whenever file systems are mounted or unmounted. Here is a sample /etc/mtab:

/dev/sda3 / ext3 rw 0 0
none /proc proc rw 0 0
usbdevfs /proc/bus/usb usbdevfs rw 0 0
/dev/sda1 /boot ext3 rw 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/sda4 /home ext3 rw 0 0
none /dev/shm tmpfs rw 0 0
automount(pid1006) /misc autofs rw,fd=5,pgrp=1006,minproto=2,maxproto=3 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
 

Each line represents a file system that is currently mounted and contains the following fields (from left to right):


The device specification

The mount point

The file system type

Whether the file system is mounted read-only (ro) or read-write (rw), along with any other mount options

Two unused fields with zeros in them (for compatibility with /etc/fstab)

////////////////////////////////////////////////////////////////

---> #cat  /etc/mtab 또는 #mount  를 통해 현재 마운트된 정보를 확인할 수 있다.

#mount  -o  remount  /home
(리부팅하지 않고 파티션을 재마운트하기)
---> 위의 명령이 실행 안 되면
umount  /home
mount  /home
한 후 다시 리마운트를 해 본다.
또는 /etc/fstab 의 철자를 확인해 본다.

#mount
/dev/sda1 on / type ext3 (rw)
/dev/proc on /proc type proc (rw)
/dev/sys on /sys type sysfs (rw)
/dev/devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/shm on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
automount(pid1602) on /misc type autofs (rw,fd=4,pgrp=1602,minproto=2,maxproto=4)
automount(pid1649) on /net type autofs (rw,fd=4,pgrp=1649,minproto=2,maxproto=4)
/dev/hdc on /media/cdrom type iso9660 (ro,nosuid,nodev,_netdev)
/dev/sda3 on /home type ext3 (rw,usrquota,grpquota) ---> 확인


3. 쿼타 설정파일 생성하기
cd  /home
touch  aquota.user aquota.group
chmod 600 aquota.user aquota.group
quotacheck  /home

quotacheck : 사용자들이 파티션을 얼마만큼 사용하고 있는지 체크하는 명령어, 루트 파티션을 체크할 때는 -m 옵션을 지정해야 한다.
(quotacheck  -m  /)

사용자별 쿼타는 aquota.user 로 파일 생성
그룹별   쿼타는 aquota.group 로 파일 생성

//////////////////////////////////////////////////////////////////////////
#man  quotacheck
       quotacheck  expects  each
       filesystem  to  be  checked to have quota files named [a]quota.user and
       [a]quota.group located at the root of the associated filesystem.

-m     Don’t try to remount filesystem read-only.
//////////////////////////////////////////////////////////////////////////

aquota.user : 사용자별로 디스크 사용량을 저장하고 있는 파일
(초기상태에서는 없기 때문에 touch 로 생성하고 루트만 접근가능하도록 chmod 600 해 준다.)

#cd  /home
#pwd
/home
#touch  aquota.user  aquota.group
(쿼타를 적용할 파티션 디렉토리, 즉 수업에서는 /home 에 aquota.user, aquota.group 파일을 만들어야 함)

#ll aq*
-rw-r--r--  1 root root 0  8월  6 04:23 aquota.group
-rw-r--r--  1 root root 0  8월  6 04:23 aquota.user

#chmod  600  aquota.user  aquota.group
#ll aq*
-rw-------  1 root root 0  8월  6 04:23 aquota.group
-rw-------  1 root root 0  8월  6 04:23 aquota.user

#quotacheck  -vug  /home
---> warning 이 출력되는데 무시해도 된다.
#quotacheck  -vug  /home
---> 다시 실행하면 warning 이 출력되지 않는다.

-v verbose  자세히 메시지 출력
-u user      사용자 쿼타 체크(디폴트)
-g group   그룹 쿼타 체크

4. 사용자별 쿼타 설정 및 쿼타 On 시키기

edquota   :  사용자별 쿼타 설정 명령어(Edit)
quotaon   :  쿼타를 on 시키는 명령어
quotaoff   :  쿼타를 off 시키는 명령어

edquota -u apple (apple 계정에 대한 쿼타 설정)
edquota -g apple (apple 그룹에 대한 쿼타 설정)

단위는 Kbyte(킬로바이트)
1024byte=1Kbyte
1024Kbyte=1Mbyte

5M  : 5120(1024 x 5)
10M : 10240
50M : 51200

quotaon  /home (쿼타 활성화)

edquota  -p  apple  apple2  apple3
---> apple 계정의 쿼타 설정을 apple2, apple3 에게 복사하는 명령

//////////////////////////////////////////////////////////////////////////
#man edquota
  -p protoname
      Duplicate  the quotas of the prototypical user specified
//////////////////////////////////////////////////////////////////////////

테스트 계정 확인 및 생성하기
#grep  apple  /etc/passwd
apple:x:501:501::/home/apple:/bin/bash
---> 위와같이 나오면 apple 계정이 등록되어 있는 것이고
     출력되지 않으면
     #adduser apple 입력해서 추가해 준다.

#adduser  apple2
#adduser  apple3


#edquota  -u  apple
(apple 계정에 대한 쿼타 편집 명령)

Disk quotas for user apple (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda3                        52          0          0            12        0        0

blocks : 디스크 용량 제한 항목
inodes : 파일갯수 제한 항목

soft : 경고메시지 출력 용량
hard : 사용자가 이용할 수 있는 Maximum 용량

soft 를 50M, hard 를 100M 로 주면 50메가를 넘어서면 경고메시지가 출력되지만 유예기간 동안에는 100메가 용량까지
사용할 수 있다.

사이즈 0 은 쿼타 제한이 없다는 의미

blocks 의 52과 inodes 의 12는 계정추가시 자동으로 복사된 파일의 용량과 수가 출력된 것으로 관리자가 수정하면 안 된다.
(blocks 의 52 와  inodes 12 의 숫자는 테스트 할 때 틀릴수도 있으므로 그대로 사용하면 된다.)

◐apple 계정 디스크 사용량 5M 로 제한
edquota -u apple 이 실행된 화면에서 아래와 같이 설정
(vi 입력상태 명령어 i 나 a 를 누른후 입력)

Disk quotas for user apple (uid 500):
Filesystem     blocks       soft       hard
                       52          0       5120

blocsk 의 hard 항목을 5120 으로 설정
inodes 의 hard 항목이 아님
soft, hard 가 0 일 때는 제한없이 사용할 수 있다는 의미
blocks 의 hard 부분에 5120 을 입력하고 저장후 종료하기(esc  :wq)
내부적으로 vi 가 호출되서 사용된 것이므로 저장후 종료는 vi 명령과 동일하다.

(putty 터미널에서 vi 실행하고 키보드 오른쪽의 숫자키패드 사용시 오동작 함--->문자키 위에 있는 숫자키 사용)

#quotaon  -v  /home
(쿼타활성화)

#quota
--->자신(현재 로그인한 계정)의 디스크 사용량 확인하는 명령

Disk quotas for user root (uid 0): none

--->위와 같이 none 으로 나오면 디스크 사용량 제한이 없다는 의미

#quota  apple
(apple 계정의 쿼타량 확인)

Disk quotas for user apple (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda3      32       0    5120                         8       0       0

#repquota -av
(report quota : 사용자별로 디스크 사용량 출력 명령)
-av  모든계정에 대해 자세히 출력
/home 에 aquota.user 또는 quota.user 파일이 없다면 출력되지 않는다.
group 별 쿼타 리포트를 출력하려면 g 옵션 사용


*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
------------------------------------------------------
root      --   35332       0       0              7     0     0
apple     --      32       0    5120              8     0     0
banana    --      32       0       0              8     0     0
candy     --      24       0       0              6     0     0
cola      --      24       0       0              6     0     0
cidar     --      24       0       0              6     0     0
kkk       --      24       0       0              6     0     0

Statistics:
Total blocks: 8
Data blocks: 1
Entries: 8
Used average: 8.000000

---> repquota 의 결과에 모든 계정이 출력되지 않는다면
      quotaoff 를 한 다음 quotacheck 를 다시 해 주면 된다.

#adduser  apple4
#adduser  apple5

#quotaoff  -v  /home
/dev/sda3 [/home]: user quotas turned off

#quotaoff  -v  /home
quotaoff: quotactl on /dev/sda3 [/home]: 그런 프로세스가 없음

--->쿼타를 이미 off 했으므로 위와 같이 출력된다.

quotacheck  /home 은 디폴트로 user 쿼타를 체크하므로 그룹 쿼타까지 체크하려면
quotacheck -ug /home
또는
quotacheck -vug /home
하면 된다.


#quotacheck -vug /home
quotacheck: Scanning /dev/sda3 [/home] done
quotacheck: Checked 68 directories and 105 files


#quotaon -v /home
/dev/sda3 [/home]: group quotas turned on
/dev/sda3 [/home]: user quotas turned on

#quotaon -v /home
quotaon: using /home/aquota.group on /dev/sda3 [/home]: 장치나 자원이 동작 중
quotaon: using /home/aquota.user on /dev/sda3 [/home]: 장치나 자원이 동작 중

---> 쿼타가 활성화 중일 때는 위와 같이 출력됨

#repquota  -av
계정을 추가했는데도 repquota 에서 안 나오면 quotaoff 후 quotacheck 를 다시 하고 repquota 하면 된다.
quota 가 on 상태일 때는 계정을 추가하면 repquota 했을 때 출력된다.

◐apple 의 쿼타 설정을 apple4, apple5 계정에게 복사하기
#edquota  -p  apple   apple4   apple5
-p 프로토타입

#repquota -av
*** Report for user quotas on device /dev/sda3
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
---------------------------------------------------
root      --   35332       0       0              7     0     0
apple     --      28       0    5120              7     0     0
banana    --      28       0       0              7     0     0
candy     --      24       0       0              6     0     0
cola      --      24       0       0              6     0     0
cidar     --      24       0       0              6     0     0
kkk       --      24       0       0              6     0     0
apple4    --       0       0    5120              0     0     0
apple5    --       0       0    5120              0     0     0

Block grace time: 7days
(grace time 은 유예기간으로 soft 와 hard 설정을 둘 다 했을 때 soft 를 넘어선 경우 유예기간 동안 hard 까지 사용할 수 있다는 의미)


5. 쿼타 테스트
ftp 서비스를 이용하여 테스트를 할 것이므로 리눅스 머신을 ftp 서버로 만들고 win7 에서 파일질라 또는 알FTP 이용하여 쿼타 테스트를 한다.

#rpm  -q  vsftpd
설치된 패키지 중에서 vsftpd(ftp 서버)가 있는지 확인 하는 명령

"설치되어 있지 않습니다"로 출력되면 패키지가 없는 것이므로 아래와 같이 yum 이용하여 설치하고 start 를 해 준다.

#yum  -y  install  vsftpd

#rpm -qa | grep vsftpd
vsftpd-2.0.1-5.EL4.5 ---> ftp 서버 프로그램(패키지)이 설치되어 있다는 의미

#service  vsftpd  start
ftp 서버 시작 시키기
---> ftp 서비스를 시작해 주면 다른 컴퓨터에서 알FTP 등으로 접속할 수 있다.

apple 계정 암호 재설정
#passwd  apple
1234
1234


[win7]
파일질라 또는 알FTP 실행
호스트   : 192.168.x.x(리눅스 아이피)
사용자명 : apple
비밀번호 : 1234
--->위와같이 적고 엔터를 눌러서 리눅스로 접속하기

테스트 환경)
[윈도우7]--------------<가상 네트워크>----------------[리눅스 가상머신]

업로드 테스트
---> 쿼타 설정으로 인해 5M 까지만 업로드 되고 중단된다.
(쿼타 설정이 있어도  #quotaon  /home  해 주어야 적용된다.)


◐테스트 결과
[cent]
#cd ~apple
--->apple 의 홈디렉토리로 이동
#pwd
/home/apple
#ls -hl
합계 5.0M
-rw-r--r--  1 apple apple 4.6M  6월 17 17:36 VMware-workstation-6.0.5-109488.exe
-rw-r--r--  1 apple apple 372K  6월 17 17:36 putty.exe


정신없이 따라가면서 종료된 리눅스 수업.. 그 뒷정리를 아직도 못하고 여기까지 왔습니다.
수업은 이미 끝났지만 계속해서 이렇게 내용을 남기겠습니다.
다만 이는 제가 수업을 진행했던 환경에서의 내용을 쭈욱 남긴 것인 만큼 실제로 이 포스트를 보는 님에게는 안 맞을 수도 있습니다.
그렇다고 해도 흐름과 명령어 등을 인식하는데 도움되길 바라며 남기는 것입니다 ^^
항상 행.복.하시길~^^

[프로세스]
1. 프로그램 : 하드디스크에 저장되어 있는 파일중에서 실행가능한 파일
2. 프로세스 : 메모리에 로딩된 프로그램
3. 데    몬  : 부팅중에 메모리에 로딩되어 종료될 때까지 상주해 있는 프로그램(윈도우에서는 서비스라 부른다.)

프로세스는 여러 가지 자원(CPU,메모리,장치)을 사용한다.
프로세스는 해당 명령을 수행하기 위해 CPU 를 점유하기도 하고 명령어와 데이터를 저장하기 위해 물리적인 메모리를 사용한다.
프로세스는 운영체제의 제어를 받으면서 실행,대기,중단,좀비 의 한 상태를 갖는다.

실행(running) : 프로세스가 현재 실행중인 상태
대기(waiting) : 운영체제가 자원을 할당해 주기를 기다리는 상태
중단(stopped) : 인터럽트를 받는 경우
좀비(zombie)  : 프로세스가 종료된 상태이지만 정보가 완전히 삭제되지 않고 남아 있는 경우

리눅스 프로세스는 프로그램을 실행하는데 필요한 PID,UID,GID 정보를 포함한다.

PID(Process ID)   : 프로세스가 시작할 때 할당받는 프로세스 식별번호
UID(User ID)      : 사용자 번호
GID(Group ID)    : 그룹 번호

프로세스 정보가 있는 디렉토리 : /proc
/proc 에는 각 프로세스에 해당하는 PID 디렉토리가 있다.
/proc 는 가상의 디렉토리로 커널 메모리를 마운트 한 것이다.

▣프로그램 실행 방식
1. foreground : 전면실행(터미널을 프로그램이 점유하고 있는 상태로 프로그램이 종료 될 때까지 다른 명령어를 실행할 수 없다.)
2. background : 후면실행(프로그램은 실행되면서 쉘프롬프트가 나타나므로 프로그램을 계속 실행시킬 수 있다.)
                예) 윈도우 도스창

---> 리눅스 터미널은 디폴트가 포그라운드 방식이다.
백그라운드 실행시키는 방법 : 명령어 &  또는 명령어&

#oclock (Putty 말고 리눅스 가상머신 터미널에서 실행)
---> 기본적으로 포그라운드 로 실행된다.

시계종료(마우스 이용)

#oclock  &
[1]  1234
#oclock  &
[2]  1235
#oclock&
[3]  1236

백그라운드로 프로그램을 실행시키면 번호가 두 개 나타나는데 첫번째 번호는 백그라운드로 실행된 프로그램 갯수 번호, 두번째는 프로세스 아이디(PID) 이다.

리눅스 운영체제는 파일,프로세스,계정 등 을 모두 숫자로 구분해서 관리한다.

PID(Process ID) : 프로세스를 구분하는 번호

<프로세스 관련 명령어>
#ps
현재 터미널에서 실행된 프로세스만 출력. TTY 는 프로그램이 실행된 터미널을 의미

#tty
현재 사용하고 있는 터미널 출력 (/dev/pts/번호)

모든 프로세스 출력하기
#ps  -ef
#ps  aux 또는 ps axu

☞ps(report  process  status) : 프로세스 정보 출력

옵션
 -a : 모든 프로세스(all) 출력
 -e : 현재 실행중인 모든 프로세스(every) 출력
 -f : full list로 출력
 -l : long list로 출력
 -m : 쓰레드 정보 출력
 -t TTY : 지정한 TTY를 가진 프로세스 정보 출력(ps  -t  pts/2)
 -u 사용자이름 : 지정한 사용자가 실행한 프로세스
 -p PID : 지정한 PID(프로그램 번호)를 가진 프로세스 정보 출력
 -u UID : 지정한 UID(사용자 번호)를 가진 프로세스 정보 출력
 -g GID : 지정한 GID(그룹 번호)를 가진 프로세스 정보 출력
 -x : 제어 터미널을 갖지 않은 프로세스도 출력(? 로 나타나는 프로세스)

#ps  aux  |  more
ps  aux  결과의  헤드라인 항목

PID(Process ID)          : 프로세스마다 주어지는 번호
TTY(Tele TYpewrite)    : 명령어가 실행되는 터미널의 번호
STAT(STATE)             : 실행되고 있는 프로세스 상태
    R                        : 실행 중 혹은 실행될 수 있는 상태
    S                        : sleep
    T                        : 정지된 상태 (suspend)
    Z                        : 좀비 (zombie) 프로세스
    X                        : dead (should never be seen)
    W                       : 스왑 out 된 상태
    <                       : 우선 순위가 인위적으로 높아진 상태

START(START)            : 프로세스가 시작된 시간
TIME(TIME)                : CPU가 사용한 시간
USER(USER)               : 사용자의 이름
COMMAND(COMMAND)  : 사용자가 실행한 명령어
UID(User ID)                : 사용자의 ID
(Parent Group ID)         : 사용자 부모 프로세스의 그룹 ID
PRI(PRIority)               : 실행하는 우선 순위에 따른 프로세스
NI(Nice)                     : nice 에 의한 우선 순위에 따른 프로세스
RSS(Resident Set Size)   : 프로세스가 사용하는 메모리의 크기
SZ(SiZe)                     : 프로세스가 사용하는 자료와 스택의 크기
SHRD(ShaReD)            : 프로세스가 사용하는 공유 메모리
%CPU                        : 프로세스가 사용하는 CPU 점유율
%MEM                      : 프로세스가 사용하고 있는 메모리 점유율
WCHAN                     : 프로세스가 실행하고 있는 커널함수

#man  ps
ps 명령어에 대한 매뉴얼을 확인하면 위의 정보를 확인할 수 있다.

57 번 라인
568 번 라인
672 번 라인

☞pstree : 프로세스를 트리 구조로 출력
#pstree


//////////////////////////////////////////////////////////////////////////

[root@cent ~]# pstree --help
pstree: 부적절한 옵션 -- -
usage: pstree [ -a ] [ -c ] [ -h | -H pid ] [ -l ] [ -n ] [ -p ] [ -u ]
              [ -G | -U ] [ pid | user]
       pstree -V

    -a     show command line arguments
    -c     don't compact identical subtrees
    -h     highlight current process and its ancestors
    -H pid highlight process "pid" and its ancestors
    -G     use VT100 line drawing characters
    -l     don't truncate long lines
    -n     sort output by PID
    -p     show PIDs; implies -c
    -u     show uid transitions
    -U     use UTF-8 (Unicode)) line drawing characters
    -V     display version information
    -Z     show SELinux security contexts
    pid    start at pid, default 1 (init))
    user   show only trees rooted at processes of that user

//////////////////////////////////////////////////////////////////////////

#pstree  -a
#pstree  -n
#pstree  -p
#pstree  -np
---> PID 로 정렬


☞top : 시스템의 전체적인 상황(CPU,메모리,프로세스 정보)을 실시간으로 출력

형식)
top 또는 top -d 초


#top
q 로 종료

#top  -d  1
---> 1 초 단위로 업데이트

첫번째 줄 : 시스템의 현재시간, 부팅후 작동한 시간, 현재 사용자 수, load average(CPU 부하 평균값)

load average :
1분, 5분, 15분간의 시스템 평균 부하율

두번째 줄 : 프로세스의 상태(실행,대기,중단,좀비)

세번째 줄 : CPU 상태
us : User 가 사용중인 CPU 사용률(user)
sy : 시스템 이 사용하는 CPU 사용률(system)
ni : nice 에 사용되는 CPU 사용률(nice)
id : 사용되지 않는 CPU 미사용률(idle)
wa : 입출력 대기상태 사용률(wait)
hi : 하드웨어 인터럽트
si : 소프트웨어 인터럽트


네번째 줄, 다섯번째 줄 : 총 사용가능한 메모리, 사용된 메모리,
                              스왑 메모리 등 메모리에 대한 정보
나머지    : 각 프로세스에 대한 정보
            (기본적으로 CPU 사용률을 기준으로 정렬 된다.)

VIRT : 가상메모리 사용량(SWAP + RES)
RES : 스왑되지 않은 물리적 메모리 사용량(Resident Size)
SHR : 공유 메모리 사이즈

종료 : q


//////////////////////////////////////////////////////////////////////////
#man top

    309        o: VIRT  --  Virtual Image (kb)
    310           The total amount of virtual memory used by the task.   It  inc
    310 ludes
    311           all  code,  data  and  shared  libraries  plus pages that have
    311  been
    312           swapped out.
    313
    314           VIRT = SWAP + RES.
    315
    317        p: SWAP  --  Swapped size (kb)
    318           The swapped out portion of a task’s total virtual memory image
    318 .
    319
    321        q: RES  --  Resident size (kb)
    322           The non-swapped physical memory a task has used.
    323
    324           RES = CODE + DATA.
    325
    327        r: CODE  --  Code size (kb)
    328           The amount of physical memory  devoted  to  executable  code,
    328  also
    329           known as the ’text resident set’ size or TRS.

    332        s: DATA  --  Data+Stack size (kb)
    333           The  amount  of  physical  memory  devoted to other than execu
    333 table
    334           code, also known as the ’data resident set’ size or DRS.
    335
    337        t: SHR  --  Shared Mem size (kb)
    338           The amount of shared memory used by a  task.   It  simply  ref
    338 lects
    339           memory that could be potentially shared with other processes.
    340
//////////////////////////////////////////////////////////////////////////


☞nice : 프로그램 실행시 우선순위를 지정하는 명령어
형식)
nice  [-20 에서 19 의 숫자]   [명령어]
(숫자가 작을 수록 우선 순위가 높음)

☞sleep : 대기 명령어
형식)
sleep  초

#nice  -17  sleep 100  &
#ps  -l


☞gnome-system-monitor
시스템 모니터링 프로그램, GUI 방식
#gnome-system-monitor


☞pmap(process map)
프로세스의 메모리 주소 공간을 확인 할 수 있다.
응용 프로그램이 실행될 때 얼마나 많은 라이브러리가 load 되는지
확인 할 수 있다.

#ps
1234  bash
#pmap PID (ps 결과에서 bash 의 PID 를 입력)


☞jobs
현재 터미널에서 백그라운드로 실행된 프로세스 출력

#jobs
+ 는 가장 최근의 작업
- 는 그 이전 작업


☞fg : 포그라운드로 전환
#fg  %2(또는 fg  2)
2번 시계를 포그라운드로 전환
---> 쉘에 따라서 % 를 사용해야 하는 경우가 있다.

ctrl + z : 프로세스 중지(stop) 시키는 단축키

#jobs


☞bg : 백그라운드로 전환
#bg  %2
(2번 시계를 백그라운드로 전환)
#jobs

#ps  -ef  |  grep  oclock
UID   PID   PPID  C  STIME   TTY    TIME      CMD

root  3201  2521  0  16:17   pts/1  00:00:00  oclock
root  3202  2521  0  16:17   pts/1  00:00:00  oclock
root  3203  2521  0  16:17   pts/1  00:00:00  oclock 

grep oclock 은 ps -ef | grep oclock 명령어 자신이 출력된 것임

PID(Process ID)            : 프로세스 아이디
PPID(Parent Process ID) : 부모프로세스 아이디
                                 (oclock 의 부모프로세스는 bash 쉘이 된다.)


☞pgrep : 프로세스를 필터링 하는 명령어

//////////////////////////////////////////////////////////////////////////
#man  pgrep

PGREP(1)                           Linux User’s Manual                           PGREP(1)

NAME
       pgrep, pkill - look up or signal processes based on name and other attributes

       -f     The  pattern is normally only matched against the process name.  When -f is
              set, the full command line is used.

       -l     List the process name as well as the process ID. (pgrep only.)
//////////////////////////////////////////////////////////////////////////

#pgrep  oclock
#pgrep  -lf  oclock 또는 #pgrep  -fl  oclock

☞커맨드(Command)로 프로그램을 종료시키는 방법 : kill 또는 pkill 명령 이용

kill 다음에는 PID(숫자) 가 와야 하고
pkill 다음에는 프로그램 이름(문자)이 와야 한다.

#kill   oclock
---> X
#pkill  oclock
3개의 시계가 모두 종료된다.

백그라운드로 시계 3개 실행하기

#pgrep  -lf  oclock
1234  oclock
1235  oclock
1236  oclock


#kill  1234(자신의 가상머신 터미널에서 출력된 PID 사용하기)
디폴트로 15번 시그널 전달
종료됨 출력

#kill  -9  1235(두번째 시계 프로그램 번호)
9번 시그널 전달
죽었음 출력

#kill  -2  1236
인터럽트 시그널 전달
인터럽트 출력

☞시그널(Signal) : 리눅스 프로그램에 보내는 신호

☞시그널 종류
#kill  -l
1  헙시그널(데몬 프로세스 재시작, 그래픽 프로그램은 예외)
2  인터럽트(단축키는 ctrl+c)
9  강제종료
15 자연스럽게 종료 (디폴트 시그널)

백그라운드로 시계 3 개 실행하기
#pkill  oclock
종료됨(디폴트로 15번 시그널 전달 됨)

백그라운드로 시계 3 개 실행하기
#pkill  -9  oclock
죽었음
(kill 과 pkill 이 사용하는 시그널은 동일하다)

▣실습
2 의 1000000 승 계산하기
bc : 계산기 프로그램 명령어
+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
^ 자승
scale=숫자(소수점 자리 지정)

#bc
quit(계산기 종료)

#echo 2+3
#echo 2+3 | bc

#echo 2^3
---> 2 X 2 X 2 = 8
#echo 2^3 | bc

포그라운드로 실행된 상태에서 프로세스를 중지시킨후
백그라운드로 다시 실행시키기

//////////////////////////////////////////////////////
#echo 2^1000000 | bc
ctrl + z 입력
#jobs
#bg %1 (jobs 에서 출력된 [] 안의 번호를 적는다.)
#jobs
//////////////////////////////////////////////////////


■nohup
부모 프로세스가 종료되어도 메모리에 남아있게 해 주는 명령어

//////////////////////////////////////////////////////////////////////////
#man  nohup

NOHUP(1L)                                                           NOHUP(1L)

이름
       nohup  -  Hangup에 무관하게 명령을 수행하고 tty아닌 곳에 출력을 하도록
       한다.

개요
       nohup 명령 [인수...]
       nohup {--help,--version}

설명
       이 맨페이지는 GNU 버전의 nohup 을 다룬다.  nohup 은 명령 에   대 하 여
       Hangup 신호를 무시한 채 수행하며 우선권을 5 만큼 증가시켜여러분이 로그
       아웃한 후에도 계속 백그라운드로 실행할 수 있도록 해준다.
//////////////////////////////////////////////////////////////////////////


[패키지 관리]
1. 리눅스에서 사용되는 프로그램 배포 방식을 이해한다.
2. rpm, yum 명령어 사용법을 익힌다.


패키지(Package) : 프로그램 파일이 들어있는 상자 개념

프로그램 배포 단위 
레드햇 리눅스 : rpm 패키지
데비안 리눅스 : debian 패키지

rpm 패키지 이름 구성
mc-4.6.0-2.i386.rpm
--->패키지이름-릴리스버전-아키텍처


명령어형식 : rpm  옵션  패키지명

옵션
-qa   : 설치된 패키지 목록 확인 (q : query, a : all)
-e     : 삭제 (e : erase)
-ivh   : install
-Uvh  : Upgrade


설치 및 업그레이드시 옵션
v            : verbose, 설치과정 자세히 출력
h, --hash  : # 마크 표시, 보통 v 옵션과 같이 사용
nodeps    : 의존성을 검사하지 않음
force       : --oldpackage, --replacefiles, --replacepkgs 를 합한 옵션
test         : 실제 설치하지 않고 점검


rpm -qi    : 패키지 정보 (information)
rpm -qf    : 파일이 속한 패키지 출력(file)
rpm -ql    : 패키지 파일 목록(list, location)
rpm -qs    : 패키지 상태(status)
rpm -qc    : 패키지 설정 파일(configuration)

rpm 의 단점 : 의존성 문제(먼저 설치되어 있어야 하는
패키지가 없는 경우 설치가 안 된다.)


[A 패키지]-------------------------------[B 패키지]
                 의존성(dependency)


yum :  인터넷 파일서버에서 패키지를 다운받아 설치해 준다.
         관련 패키지가 있을 경우 한꺼번에 설치해 준다.
         (의존성 문제 해결)
         인터넷이 되야 사용할 수 있다.


#cd  /etc/yum.repos.d
#ls
(yum 사용시 패키지 다운받는 서버 목록 이 저장되어 있다.)
#cat  CentOS-Base.repo


yum  (-y)  install     : 설치
yum  check-update  : 업데이트 가능한 목록
yum  update          : 업데이트
yum  remove         : 삭제
yum  info              : 정보 출력
yum  list               : 패키지 목록 출력
yum  grouplist       : 패키지 그룹 목록 출력
yum  groupinstall   : 패키지 그룹 설치
yum  search  단어   : 단어가 들어간 패키지 검색
yum  localinstall     :  CD 의 패키지를 설치할 때 사용


사용 예 : yum  -y  install  mc
(-y 를 생략하면 설치시 질문이 출력된다.)


♠rpm 사용하기
(Redhat Package Management)
 

#rpm  -qa
리눅스 CD 에 들어있는 프로그램 형태는 rpm 패키지로
rpm -qa 하게 되면 하드디스크에 설치된 rpm 패키지 목록이
모두 출력된다.
q : query(물어보다)
a : all


#cd  /var/lib/rpm
(패키지 데이타베이스가 있는 디렉토리)
#ls


패키지(프로그램) 설치 유무 확인 방법 :
1)rpmquery  패키지명  패키지명  ...
2)rpm  -q  패키지명  패키지명  ...
3)rpm  -qa  |  grep  패키지명

#rpmquery  zip
#rpm  -q  zip
#rpm  -qa  |  grep  zip
zip-2.3-27
--->설치된 프로그램(패키지) 목록 중에서 zip 관련 패키지만 필터링


zip 패키지 삭제
#rpm -e zip (rpm -e zip-2.3-27 로 해도 동일하다.)
오류: Failed dependencies:
        zip >= 2.1 is needed by (installed) libgcj-3.4.6-8.i386
        zip >= 2.1 is needed by (installed) libgcj-devel-3.4.6-8.i386
---> 다른 패키지와 의존성이 있어서 삭제가 안 된다.


#rpm -e --nodeps zip
의존성 무시하고 삭제하기

#rpm  -q  zip
#rpm  -qa  |  grep  zip
zip 패키지는 삭제했으므로 나타나지 않는다.


gftp : 윈도우의 알FTP와 같은 FTP 클라이언트 프로그램

#gftp (---> putty 에서 실행하면 안 되고 리눅스 가상머신 터미널에서
              실행해야 한다.
       putty 터미널은 그래픽 프로그램을 사용할 수 없다.)


//////////////////////////////////////////////////////////////////////////
gftp 가 설치가 안 되어 있으면 yum 으로 설치후 실행해 준다.

#yum -y install gftp
--->gftp(ftp 프로그램)를 인터넷에 있는 CentOS 서버에서
     다운받아 설치하는 명령어

다운이 안 될 경우 #netconfig 이용해서 DHCP 설정후
#service network restart 한 후 다시 해 본다.

//////////////////////////////////////////////////////////////////////////


[cent]
gftp 가 실행된 화면에서 아래와 같이 입력하기

호스트   : 수업용 서버 아이피(172.16.7.252)
사용자   : 아이디(andylec)
비밀번호 : 암호입력
(위와같이 적고 엔터를 입력한다. 탭키를 누르면
커서가 다음칸으로 이동된다.)

테스트 환경 :
[리눅스 가상머신]--------------------------[수업용 FTP 서버]

리눅스의 한글 코드와 win7 의 한글 코드가 틀려서
한글 폴더 이름은 나타나지 않는다.
(LANG 변수를 ko_KR.eucKR 로 설정하면 한글 폴더 이름이 출력된다.)
#export  LANG=ko_KR.eucKR
다시 리눅스 한글로 설정하려면
#export  LANG=ko_KR.UTF-8
로 설정하면 된다.


수업용 FTP 서버 Linux1lab 디렉토리로 이동후
gftp-2.0.17-6.i386.rpm,
zip-2.3-27.i386.rpm
파일을
cent 리눅스 /work 디렉토리에 다운받는다.
가운데 왼쪽 화살표 아이콘(◀) 클릭

접속종료는 호스트 왼쪽 녹색 컴퓨터 아이콘을 클릭하면 된다.
다운받은 후 gftp 종료하기(오른쪽 상단 X 클릭)


#cd  /work
#ls

#file zip-2.3-27.i386.rpm
zip-2.3-27.i386.rpm: RPM v3 bin i386 zip-2.3-27
#
--->RPM 패키지 파일이라는 의미

file : 대상 파일의 Type(종류)를 출력해 주는 명령어

#rpm  -qlp  zip-2.3-27.i386.rpm
설치안 된 패키지안의 파일목록 출력
p : 패키지를 뜻하며 설치전에는 p 옵션을 지정해야 한다.


#rpm  -ivh  --test  zip-2.3-27.i386.rpm
준비 중...              

########################################### [100%]
#
---> --test 옵션을 지정했으므로 실제로 설치되지 않는다.
---> rpm 파일이 있는 디렉토리, /work 에서 해야 함


#rpm -ivh  zip-2.3-27.i386.rpm
(rpm  -Uvh  zip-2.3.27.i386.rpm 해도 설치된다.)
--->패키지(리눅스 프로그램) 설치하기

준비 중...              

########################################### [100%]
   1:zip                   

########################################### [100%]
#
rpm  -ivh  : 설치
rpm  -Uvh : 업그레이드(이전 버전이 있으면 업그레이드를 하고 설치가 안 되어 있으면 프로그램이 설치 됨)


#rpm  -qa  |  grep  zip
zip 패키지가 설치되었으므로 출력된다.

#rpm  -qs  zip
패키지 상태 출력

//////////////////////////////////////////////////////////////////////////
#man  rpm
       -s     패키지 안에 든 화일의 상태를 보여준다.(-l은 포함) 각 화일의 상태는 normal(정상), not installed(설치 되지   않음), replaced 다른 것으로 교체됨)의 값을 갖는다.
//////////////////////////////////////////////////////////////////////////

#rpm  -ql  zip
설치된 특정 패키지의 파일목록 출력
설치가 된 후에는 패키지 목록 출력시 -p 옵션이 필요없고 rpm 확장자를 지정하면 안 된다.


#rpm  -qi  zip
패키지 정보 확인


#zip
사용법 출력됨
#which zip
/usr/bin/zip

which : 명령어가 어느 디렉토리에 있는지 경로를 출력

 

#rpm  -qf  /usr/bin/zip (파일이 속한 패키지 찾기)
zip-2.3-27

---> zip 명령이 깨졌을 경우나 삭제된 경우 zip-2.3-27 패키지를 다시 설치해 주면 된다.
리눅스 CD 에 zip 명령어가 개별적으로 존재하지 않는다.

♠yum  사용하기
(인터넷의 파일서버를 이용하는 방식)

[리눅스 서버] <----- yum -----> [인터넷의 CentOS 프로그램 서버]


#rpm  -qa  |  grep  mc
mc 패키지(프로그램) 확인

#rpm  -e  mc

#yum -y install mc (mc 패키지 설치하기)
-y 옵션을 생략하면 질문 나올 때 y 를 입력해 주어야 설치된다.

#rpm  -qa  |  grep  mc
mc  패키지 설치됨

#mc
mc 는 유틸리티 프로그램
종료는 exit 입력


#yum info mc
Setting up repositories
Reading repository metadata in from local files
Installed Packages
Name   : mc
Arch   : i386
Epoch  : 1
Version: 4.6.1
Release: 0.8.5
Size   : 4.2 M
Repo   : installed
Summary: User-friendly text console file manager and visual shell.

Description:
 Midnight Commander is a visual shell much like a file manager, only
with many more features. It is a text mode application, but it also
includes mouse support if you are running GPM. Midnight Commander's
best features are its ability to FTP, view tar and zip files, and to
poke into RPMs for specific files.


#yum  remove  mc
-y 옵션을 지정하지 않았으므로 질문이 출력된다.
(질문에 y 를 입력한다.)
rpm  -e  mc  로  삭제해도 된다.

yum 을 이용하면 의존성 있는 패키지까지 함께 삭제 된다.


#mc
---> X


♠GUI 를 이용한 패키지 관리
1. 메뉴표시줄-프로그램-시스템 설정-응용 프로그램 추가/삭제
   오류가 나는 경우에는 패키지 명령어(rpm, yum)를 이용해야 한다.

2. 메뉴표시줄-프로그램-파일 브라우저 실행
 1) /work 로 이동
 2) zip-2.3-27.i386.rpm 선택후 마우스 오른쪽 버튼 클릭
 3) 메뉴에서 "Install Packages 프로그램으로 열기" 선택
    이미 설치된 경우에는 "설치되어 있다"는 메시지 출력 됨
    또는 왼쪽마우스를 더블 클릭하면 설치된다.
 4) 터미널에서 #rpm -e gftp 한 후 리눅스 탐색기에서 gftp-2.0.17-6.i386.rpm 설치 테스트 하기


<리눅스 프로그램 업그레이드>
rpm 버전은 yum 을 이용하여 업그레이드 할 수 있고 소스버전은 홈페이지에서 다운받아 컴파일 방식으로 업그레이드 할 수 있다.


☞리눅스에서 사용하는 프로그램 형식
1. rpm 버전(hello.exe 상태)
2. 소스 버전(hello.c 상태)


[win7]

RPM 패키지 검색 사이트 : http://rpm.pbone.net, http://www.rpmfind.net

위 사이트에 접속하고 [        ][search] 텍스트 박스에 단어를 입력하고 search 버튼을 누르면 패키지를 검색할 수 있다.

mc 프로그램 홈페이지
http://www.midnight-commander.org


☞rpm 프로그램(파일명 : mc-4.6.1a-0.9.i386.rpm)
[요리가 다 된 떡볶이]--->프로그램이 들어있는 상자


☞소스 프로그램(파일명 : apache-1.3.2.tar.gz)
[떡볶이 재료-떡,고추장,파 등..]--->프로그램이 들어있는 상자


☞소스 프로그램 설치방법(음식 요리법-레서피)

1) ./configure (환경설정)
---> gcc 같은 컴파일러의 유무, 라이브러리 위치 등 컴파일을 하기위한
     정보들을 확인해서 Makefile 로 저장을 해 준다.

2) make (컴파일)
---> Makefile 이용해서 gcc 로 컴파일 해 준다.

3) make  install (설치디렉토리로 복사)
---> configure 시 prefix 옵션으로 지정해 준 디렉토리로 파일들을 복사해 준다. prefix 를 지정하지 않으면 설정파일은
/usr/local/etc 로 실행파일을 /usr/local/bin 등으로 파일들이 분산된다. 그러므로 prefix 옵션을 주는 것이 좋다.


#cd  /work
#ftp  172.16.7.252
andylec 로그인

ftp>ls (서버쪽 파일 목록 확인)
ftp>cd  UPLOAD (서버쪽 디렉토리 이동)
ftp>pwd (현재 경로 확인)
ftp>ls
ftp>get  파일명
ftp>mget  mc*
질문에 y 나 엔터 입력
ftp 명령어를 실행한 디렉토리에 다운이 된다.
다운로드 : get(파일 1개 다운로드), mget(파일 여러 개 다운로드)
업로드 : put, mput
ftp>by (접속 종료)
#ls


#tar  zxvf  mc-4.6.1.tar.gz
#ls
#cd  mc-4.6.1
#pwd
(/work/mc-4.6.1)
#ls
#ls  src (---> /work/mc-4.6.1/src 폴더의 내용을 확인하는 것)
확장자  .c  로 된 소스 파일


#./configure  --help
---> 컴파일 옵션 확인

Installation directories:
  --prefix=PREFIX         install architecture-independent files

in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in

EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

 --enable-charset         Support for charset selection and conversion [no]

#pwd
(/work/mc-4.6.1)

#./configure  --prefix=/work/mc  --enable-charset
--prefix 는 설치 디렉토리 지정 옵션
--enable-charset 은 한글 지원 설정
#make
#make  install

명령어 라인 한 줄에 입력하려면 && 연산자를 이용하면 된다.
#./configure  --prefix=/work/mc  --enable-charset  &&  make  &&  make  install

#cd  /work/mc
#ls
#/work/mc/bin/mc
#/work/mc/bin/mc  --help
  -a, --stickchars    Use stickchars to draw (테두리선이 깨질 때 사용)
#/work/mc/bin/mc  -a

<쉘 연산자>
(1) ;    ---> 명령어 연속적으로 실행
(2) &&  ---> AND 연산자, 앞의 명령이 성공적으로 실행되어야
                 뒤의 명령 실행
(3) ||    ---> OR 연산자, 앞의 명령이 실패하면 뒤의 명령 실행,
                앞의 명령이 성공하면 뒤의 명령이 실행되지 않는다.

※AND 연산은 산술연산(1+1=2)이 아니고 논리연산(1 AND 1=1)이다.

A  B     A  AND  B        A   OR   B
0  0          0                     0
0  1          0                     1
1  0          0                     1
1  1          1                     1

#cp  ;  cal
#cp  &&  cal (cal 실행 안 됨)
#cp  ||  cal (cal 실행됨)
#date  ||  cal(date 만 실행됨)

♠실습
소스 프로그램을 삭제할 때는 rpm, yum 을 이용하는 것이 아니고 설치된 디렉토리를 지우면 된다.
1. /work/mc 디렉토리 삭제하기
2. mc 프로그램을 소스 컴파일 방식으로 /usr/local/mc 디렉토리에 설치하기

[압축 프로그램]
Archiving and Compress(묶음과 압축)
☞리눅스 관련 프로그램은 압축된 상태로 인터넷에 올려진 경우가 대부분 이므로 압축명령어를 사용할 수 있어야 한다.

1) tar(압축 기능은 없고 여러 개의 파일을 하나로 묶는 역할을 함)
   압축              압축해제
2) gzip         ,    gunzip
3) bzip2       ,    bunzip2
4) compress  ,    uncompress
5) zip          ,    unzip

☞tar 에서 gzip, bzip2, compress 는 옵션이 지원되고 zip 는 tar 에서 옵션이 지원되지 않는다.
☞압축 해제시 압축 명령어의 -d 옵션(decompress)을 이용할 수 도 있다.
(gzip  -d  파일명, bzip2  -d  파일명, compress  -d  파일명)
(zip 는 예외로 unzip 을 이용해야 한다.)


//////////////////////////////////////////////////////
♠tar 명령어 형식
tar  옵션(-는 생략가능)  대상파일  원본파일
(cp 와는 반대이다.)

☞tar 는 압축은 하지 않고 여러 파일을 하나로 묶어주거나 해제하는 프로그램
tar 와 몇몇 명령어는 옵션을 줄 때 - 를 생략할 수 있다.
☞옵션의 순서는 변경해도 된다.
☞zxvf 대신 xvfz 를 사용해도 결과는 똑같다.

z : gzip 사용
x : extract (타르 해제)
v : verbose (자세히 출력)
f : file 지정
t : content(내용) 출력
c : create (타르 파일 생성)
j : bzip2 사용

//////////////////////////////////////////////////////

#man  tar
NAME
       tar - The GNU version of the tar archiving utility
 Operations:
       [-]A --catenate --concatenate
       [-]c --create
       [-]d --diff --compare
       [-]r --append
       [-]t --list
       [-]u --update
       [-]x --extract --get
       --delete
 Common Options:
       -C, --directory DIR
       -f, --file F
       -j, --bzip2
       -p, --preserve-permissions
       -v, --verbose
       -z, --gzip

 -p, --same-permissions, --preserve-permissions
              extract all protection information

 -g, --listed-incremental
              create/list/extract new GNU-format incremental backup


♠tar 테스트

            /
            |
 +--------+-------+
tmp                boot

#tar   -cvf   /tmp/my1.tar   /boot
#ls  /tmp

#tar  c   /tmp/my2.tar  /boot
---> f 옵션을 생략하면 화면상에 결과가 출력된다.
      가상머신 터미널에서 실행하면 프롬프트가 깨지므로 터미널을 종료후 다시 실행하면 된다.
#ls  /tmp
---> f 옵션을 생략해서 파일이 생성되지 않는다.

#tar  cf  /tmp/my3.tar  /boot
---> v 옵션을 생략하면 처리과정이 자세히 출력되지 않는다.
#ls  /tmp

#tar  cvf  /tmp/my5.tar  /boot
#ls  /tmp

#tar  zcvf  /tmp/boot.tar.gz  /boot
또는
#tar  -zcvf  /tmp/boot.tar.gz  /boot
--->/boot 디렉토리의 모든 내용을 /tmp 디렉토리에 boot.tar.gz  파일로 저장 (tar 로 묶고 gzip 으로 압축이 한꺼번에 된다.)

tar 옵션
z : gzip 사용
c : create
v : verbose
f : file
j : bzip2 사용
p : 퍼미션 보존
t : 내용 출력

#cd  /tmp
#ll
#ls -hl

#tar  ztvf  boot.tar.gz
t : 파일이 풀리는 것이 아니라 내용을 확인하는 옵션

tar 파일의 내용을 볼 때는 tar  tvf  test.tar 형식을 사용
tar.bz2 파일의 내용을 볼 때는 tar jtvf  test.tar.bz2

#ls

tar.gz 파일은 gunzip 으로 압축을 풀고 tar xvf 로 tar 파일을 풀 수도 있지만 tar  zxvf  옵션을 이용하면 압축과 tar 해제가 한 번에 된다.

#tar  zxvf  boot.tar.gz
기본적으로 현재 디렉토리에 파일이 풀린다.
#ls
boot

#tar  zxvf  boot.tar.gz
#tar  zxvf  boot.tar.gz  -k
기본적으로 덮어쓰기 하므로 기존 파일을 보존하려면 -k 옵션을 이용한다.

#man  tar
-k 옵션
       -k, --keep-old-files
              keep existing files; don’t overwrite them from archive

#gunzip  boot.tar.gz (압축해제) 또는 gzip  -d  boot.tar.gz

#ls
boot.tar

#tar  xvf  boot.tar (타르 풀기)
---> 기본적으로 현재 디렉토리에 풀리고 다른 디렉토리에 풀려면 "-C 경로" 를 지정하면 된다.
      tar 에 -C(대문자) 옵션이 존재하고 gunzip 에는 -C 옵션이 없다.
#gunzip  --help

#mkdir  /mywork
#tar  xvf  boot.tar  -C  /mywork
---> tar 파일이 /mywork 디렉토리에 풀린다.
---> -C (Change) 는 대문자이다.
#ls  /mywork

//////////////////////////////////////////////////////
타르 파일과 타르.압축 파일의 생성 형식
tar   cvf    파일명.tar
tar  zcvf    파일명.tar.gz
tar  jcvf    파일명.tar.bz2

타르 파일과 타르.압축 파일의 해제 형식
tar   xvf   파일명.tar
tar  zxvf   파일명.tar.gz
tar  jxvf   파일명.tar.bz2
//////////////////////////////////////////////////////


#tar  cvf  /tmp/boot2.tar   /boot
---> /boot 디렉토리의 모든 내용을 /tmp 의 boot2.tar 파일로 저장하기
압축옵션이 없으므로 압축은 되지 않는다.

c : create
v : verbose
f : file

#cd  /tmp
#pwd
(/tmp)
#ls


#bzip2 boot2.tar (bzip2 로 압축)
#gzip  my1.tar (gzip 으로 압축)

#ll
#ls -hl
boot.tar 
boot2.tar.bz2 
my1.tar.gz
(h 옵션을 주면 킬로바이트,메가바이트 형태로 출력 된다.)

#bunzip2  boot2.tar.bz2(압축해제) 또는 bzip2  -d  boot2.tar.bz2

#ls -hl
boot.tar 
boot2.tar

#tar  jcvf  /tmp/boot3.tar.bz2  /boot
---> tar 로 묶고 bzip2 로 압축
#pwd
(/tmp)

#ls
boot.tar  boot2.tar  boot3.tar.bz2

#tar  jxvf  boot3.tar.bz2
---> 압축 해제하고 타르 풀기

#ls  /work5 (디렉토리 없으면 #mkdir  /work5 로 생성)
#cp  boot3.tar.bz2  /work5
#cd  /work5
#ls
#man  bunzip2
-k --keep
              Keep  (don’t delete) input files during compression or decompression.
--->압축 해제시 원본 파일을 삭제하지 않는 옵션(keep)
     gunzip 은 -k 옵션이 없음(gunzip  --help)

#bunzip2  -k  boot3.tar.bz2
#ls

#cd  /tmp
#pwd
(/tmp)
#ls
boot.tar  boot2.tar  boot3.tar.bz2
#gzip  boot2.tar (gzip 으로 타르 파일 압축)
#ls
boot.tar  boot2.tar.gz  boot3.tar.bz2

#file  boot.tar
#file  boot2.tar.gz
#file  boot3.tar.bz2
---> file 명령을 이용하여 파일의 종류를 확인 할 수 있다.


☞tar 파일에서 특정 파일삭제 :
tar  --delete  -f  타르파일  지울파일명

#tar  --delete  -f  boot.tar  message
tar: message: 아카이브에 없음
tar: Error exit delayed from previous errors

#tar  tvf  boot.tar
#tar  --delete  -f  boot.tar  boot/message


☞tar 파일에서 특정 파일만 추출 할 때 :
tar  xvf  타르파일  특정파일명

#cd  /tmp
#pwd
(/tmp)
#rm  -rf   boot  (rm  -rf  /boot 하면 부팅이 안 됨)
---> /tmp 폴더 안의 boot 폴더 삭제
#tar  xvf  boot.tar  message.ja
tar: message.ja: 아카이브에 없음
tar: Error exit delayed from previous errors

#tar  xvf  boot.tar  boot/message.ja
boot/message.ja
#ls
#ls  boot
message.ja


☞기존의 tar 파일에 새로운 파일 추가하기
(옵션 r 또는 u 사용)

#tar  --help
  -r, --append            아카이브 끝에 파일을 추가합니다
  -u, --update            아카이브 안의 것보다 새로운 파일만 추가합니다

#pwd
(/tmp)
#cp  /etc/hosts  new.txt
#tar  uvf  boot.tar  new.txt
#tar  tvf  boot.tar


☞압축된 상태에서는 tar 파일에 새로운 파일을 추가할 수 없다.

[root@cent tmp]# tar  uvf  boot2.tar.gz  new.txt
tar: 이것은 tar 아카이브처럼 보이지 않습니다
tar: 다음 헤더로 건너 뜀
tar: Archive contains obsolescent base-64 headers
new.txt
tar: Error exit delayed from previous errors

[root@cent tmp]# tar  zuvf  boot2.tar.gz  new.txt
tar: 압축된 아카이브를 갱신할 수 없습니다
더 많은 정보를 보려면 `tar --help' 하십시오.
[root@cent tmp]#


♠GUI 압축관리자 사용하기
1) 파일브라우저 실행
2) /tmp 폴더로 이동해서 압축 파일을 더블클릭하거나
3) 압축파일 선택후 마우스 오른쪽 버튼-"압축 관리자 프로그램으로 열기"를 선택하면 그래픽 압축 프로그램을 사용할 수 있다.
4) "풀기" 버튼을 누르고 압축해제할 디렉토리를 지정한 후 오른쪽 하단 "풀기" 버튼을 누르면 된다.


♠GUI 를 이용한 tar 파일 만들기
/work 의 txt 파일을  /tmp/fedora.tar.gz 로 만들기

#file-roller
1) 위쪽 메뉴아이콘에서 "새로 만들기" 클릭
2) 압축 형식에서 "gzip 으로 압축된 Tar" 선택
3) "다른 폴더 찾아보기" 클릭
4) 왼쪽의 파일시스템 더블클릭하고 오른쪽에서 /tmp 선택
5) 위쪽의 이름: fedora 입력(확장자는 제외)
6) "새로 만들기" 버튼 클릭
7) 새로운창이 나타나면
   "더하기" 버튼을 누르고 원하는 파일을 선택후 종료하면 됨. 복수 파일을 선택할 때는 Ctrl 키 사용
 

♠compress 사용하기
#rpm -qa | grep compress
--->설치된 프로그램 확인 방법

#yum  -y  install  ncompress
--->인터넷 서버를 이용한 프로그램 설치 방법
compress 프로그램이 없을 경우 인터넷 프로그램 서버에서 다운을 받아 설치후 실습을 한다.
--->다운이 안되면 리눅스 인터넷 설정을 다시 한 후 해 본다.

#rpm -qa | grep compress
프로그램 설치 확인
---> cent공용 을 사용할 경우 위와 같이 프로그램을 설치한 후 실습을 한다.

#cd  /work
#compress score.c
---> 압축 되지 않으면 score.c 에 내용을 더 추가한 후 압축해 본다.
      size 가 적으면 compress 로 압축되지 않는다.
#ls
#file score.c.Z
#uncompress score.c.Z  또는  compress  -d  score.c.Z
---> 압축 해제

♠zip 사용하기
#cd  /mywork
#pwd
(/mywork)
#cp  /etc/hosts  1.txt
#cp  /etc/hosts  2.txt
#cp  /etc/hosts  3.txt
#ls

#zip  -h (도움말 확인)
 -1   compress faster              -9   compress better

#man  zip

    587
    588        -#     Regulate  the  speed  of  compression using the
    589               specified digit #, where -0 indicates  no  com-
    590               pression  (store  all  files), -1 indicates the
    591               fastest compression method  (less  compression)
    592               and -9 indicates the slowest compression method
    593               (optimal compression, ignores the suffix list).
    594               The default compression level is -6.
    595


#zip  my.zip  *.txt (압축하기)
또는
#zip  my.zip  1.txt  2.txt  3.txt
---> 형식 : zip  압축파일명  원본파일명

#ls
#file  my.zip
#cp  my.zip  /tmp
#cd  /tmp
#unzip  my.zip (압축 해제 하기)

♠wget 명령어

#man  wget

WGET(1)                        GNU Wget                        WGET(1)

NAME
       Wget - The non-interactive network downloader.

SYNOPSIS
       wget [option]... [URL]...

DESCRIPTION
       GNU Wget is a free utility for non-interactive download of
       files from the Web. 


♠실습
1. /Desk1 , /Desk2, /Desk3, /Desk4 디렉토리 생성하기
2. 리눅스 웹브라우저 실행 후
   아래 주소 입력
   http://httpd.apache.org/download.cgi
   httpd-2.2.17.tar.gz 와 httpd-2.2.17.tar.bz2 를 다운받기
3. GUI 프로그램 이용하여
   httpd-2.2.17.tar.gz 와 httpd-2.2.17.tar.bz2 를
   /Desk1, /Desk2 에 압축과 tar 해제하기
4 .터미널에서 명령어 이용하여
   httpd-2.2.17.tar.gz 와 httpd-2.2.17.tar.bz2 를
   /Desk3, /Desk4 에 압축과 tar 해제하기

웹브라우저에서 다운을 받으면 바탕화면에 저장되고 터미널에서 찾아갈 때는 cd  /root/Desktop 하면 된다.
터미널에서 다운을 받으려면 wget 다음에 주소를 적으면 된다.

#wget  URL주소


<vmware tool 사용하기>
vmware tool : 리눅스 가상머신의 그래픽 성능을 향상 시키는 프로그램(해상도 조절, 마우스 이동 등)

vmware tool 을 설치하면
1)고해상도를 사용할 수 있다.
2)윈도우와 리눅스간에 마우스 커서를 자동으로 전환할 수 있다.
3)윈도우에서 복사한 내용을 리눅스로 붙여넣기를 할 수 있다.
1.자동마운트 기능 활성화 하기

리눅스메뉴표시줄-프로그램-환경설정-이동식 저장장치

이동식 디스크 항목
[v]"(cdrom 같은)꺼낼수 있는 미디어가 들어오면 마운트" 체크하기 - 닫기 버튼 클릭
--->위에서 두번째 항목

2.vmware 메뉴표시줄-VM-Install VMware Tools 클릭

바탕화면에 "VMware Tools" cdrom 아이콘 나타나는지 확인
(자동마운트 안되면 리눅스를 리부팅 해 본다.)

update 창이 나오면 취소 버튼을 누르고
가상머신 오른쪽 CDROM 아이콘을 클릭한 후
(*)Use ISO Image file 선택 하고
C:\Program Files (x86)\VMware\VMware Workstation\linux.iso   를 입력해 준다.

3.vmware tool 설치 및 해상도 설정하기
[root@cent ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  3.8G   10G  28% /
none                  252M     0  252M   0% /dev/shm
/dev/sda3             4.3G   42M  4.1G   1% /home
/dev/hdc               92M   92M     0 100% /media/cdrom
[root@cent ~]#
---> /media/cdrecorder 로 출력될 수 도 있다.


[root@cent ~]# cd /media/cdrom 또는 cd /media/cdrecorder
[root@cent cdrom]# ls

[root@cent cdrom]# cp  VMwareTools-x.x.x-x.tar.gz  /work
---> CD 의 파일을 하드디스크로 복사하기
      tar 의  -C 옵션을 이용하여 다른 디렉토리에 압축 및 타르 해제를 할 수도 있다.

[root@cent cdrom]# cd /work
[root@cent work]# ls
[root@cent work]# tar  zxvf  VMwareTools-x.x.x-x.tar.gz
---> 압축 프로그램을 해제하는 명령


[root@cent vmware-tools-distrib]# cd vmware-tools-distrib
[root@cent vmware-tools-distrib]# pwd
/work/vmware-tools-distrib

[root@cent vmware-tools-distrib]# ls
FILES  INSTALL  bin  doc  etc  installer  lib  vmware-install.pl

vmware-install.pl 프로그램을 실행하고
해상도 설정 질문이
나올 때까지 엔터를 입력해 주면 된다.
(putty에서 하면 안 되고 리눅스 가상머신 터미널에서 해야 함)

[root@cent vmware-tools-distrib]# ./vmware-install.pl
Creating a new VMware Tools installer database using the tar4 format.

Installing VMware Tools.

In which directory do you want to install the binary files?
[/usr/bin] ---> 엔터 입력

... (생략)

[1] "640x480"
[2] "800x600"
...

Please enter a number between 1 and 15 :

[6] 원하는 해상도 번호 선택하기

#reboot
부팅시 "실패" 로 나오는 것은 무시해도 된다.

루트로 로그인

해상도를 다시 조정하려면 터미널에서
#system-config-display 실행 후 변경해 주면 된다
.



엠토리가 수업받은 내용을 쭈욱 적습니다.
이는 처음부터 하나하나 확인하며 따라하기 형태로 공부하면서.. 생기는 화면변화등에 민감히 반응할 수 있어야 자기 것이 될 것입니다.

이상, 엠토리 였습니다. 항상 행.복.하시길~^^

조금 길어요 ^^; 진도를 맞추는 게 좋다는 생각에 이틀치 수업 내용을 한꺼번에 올립니다 ㅎ

☞리눅스 운영체제는 퍼미션과 소유권을 통해 다른 사용자들로부터 자신이 만든 파일을 보호할 수 있다.
☞관리자는 퍼미션과 소유권을 통해 일반사용자들의 파일 (또는 디렉토리)에 대한 접근을 제어할 수 있다.

<파일관리 : 퍼미션(Permission), 소유권(Ownership)>

1.리눅스는 여러 사람이 사용하는 다중사용자 운영체제이므로 각 파일이나 디렉토리에 대해서 퍼미션(허가권)과 소유권이 존재한다.
2.리눅스에서는 파일의 확장자로 실행파일을 구분하지 않는다. 실행가능 파일은 ls 했을 때 green 컬러로 표시된다. (디렉토리는 blue 컬러, 심벌릭링크파일은 skyblue 컬러)
3.파일은 퍼미션과 소유권을 갖는다.
4.대소문자를 구분한다.
5.파일이름은 255자 까지 가능하고 공백이나 특수문자도 포함할 수 있다. (공백이나 특수문자, 한글 사용은 권장하지 않는다. 영문과 숫자, _ 등을 조합해서 사용하는 것을 권장)
6.파일의 종류는 ls -F 로 확인할 수 있다. (실행파일은 *, 디렉토리는 /, 심벌릭링크파일은 @ 가 파일명뒤에 표시된다.)

#mkdir  /work/boot
#ls -F /work
boot/(--->디렉토리)    kkk.txt    linux2.txt  php-5.2.4.tar.gz  zip-2.3-27.i386.rpm
hello.c  hello.exe*(--->실행파일) linux.txt  services

#ls -F /bin 
alsaunmute*(--->실행파일)
arch*
ash*
ash.static*
aumix-minimal*
awk@(--->심벌릭링크파일)
basename*
bash*
bsh@
cat*

파일 또는 디렉토리 퍼미션 변경 : chmod(Change Mode)
(파일 소유자나 루트만이 사용할 수 있다.)
 -R 옵션 : 하위 디렉토리 및 파일을 모두 변경할 때 사용

권한을 가지는 개체-user, group, others
u user 소유자(사용자)
g group 그룹(사용자들을 묶을수 있는 개체, 학교의 동아리, 회사의 부서)
o ohers 다른 계정들(everyone)
a all(3 개체를 모두 가리킴)

+ 권한 추가 
- 권한 제거
= 새로 권한 지정

예)
chmod  ugo+rx  my.txt (---> chmod  a+rx  my.txt 와 동일하다.)

◆기본권한(permission)
r   read      4 (읽기)
w  write     2 (쓰기)
x  execute  1 (실행)

7 rwx
6 rw-
5 r-x
4 r--
3 -wx
2 -w-
1 --x
0 ---
(권한이 없을 때는 - 로 표시)

◆special permission
4000 setuid      실행시 소유자 권한을 갖는다.
2000 setgid      실행시 그룹 권한을 갖는다.
1000 sticky bit  공용 디렉토리에 설정해서 소유자와 루트만이 파일을
                     삭제할 수 있도록 설정할 때 사용한다.

예)
chmod  4755  my.exe  (setuid 설정)
chmod  u+s   my.exe  (setuid 설정)
chmod  g+s   my.exe  (setgid 설정)

소유자 변경 : chown(Change Owner)
그룹   변경 : chgrp(Change Group)
               -R 옵션(디렉토리 일 때 하위 디렉토리 및 파일 모두 변경할 때 사용)

◆r, w, x 의 의미
 1. r (read)
   파일      : 파일의 내용을 볼 수 있다.
   디렉토리 : 디렉토리의 내용을 ls 로 볼 수 있다.
 
 2. w (write)
    파일      : 파일을 수정할 수 있다.
    디렉토리 : 디렉토리의 내용을 변경할 수 있다.
    (파일을 삭제할 수 있는 권한은 파일의 w 권한이 아니고 그 파일이 있는 디렉토리에 w 권한이 있어야 파일이 삭제된다.)

 3. x (execute)
    파일      : 파일을 실행할 수 있다.
    디렉토리 : 디렉토리 안으로 cd 를 이용하여 들어갈 수 있다.

---> 퍼미션과 소유권은 일반 계정들에 대해서는 정확하게 적용되고 수퍼유저인 루트는 실행권한 만 빼고 퍼미션과 소유권을 초월한다. (루트라 할지라도 파일에 실행권한이 있어야 실행할 수 있다.)

[cent]
#cd  /work
(디렉토리 이동이 안되면 #mkdir  /work 한 후 이동)

#ls
hello.exe

//////////////////////////////////////////////////////
hello.exe 파일이 없을 경우
#vi  hello.c

#include  <stdio.h>
int  main()  {
     printf("Linux  Test  \n");
     return  0;
}

#gcc  -o  hello.exe  hello.c
실행한 후 실습하기
//////////////////////////////////////////////////////

#ll hello.exe
-rwxr-xr-x  1 root root 4725 Aug  7 14:42 hello.exe
  7  5  5
퍼미션 : 하드링크수 : 소유자 : 그룹 : 크기(바이트) : (수정)날짜 : 파일명

퍼미션 -rwxr-xr-x 에서 첫번째 문자가 - 이면 일반파일이고 d 이면 디렉토리이다. 나머지 문자는 3개씪 묶어서 소유자(User), 그룹(Group), 다른계정들(Others) 의 퍼미션을 뜻한다.

rwx=>4+2+1=>7
r-x=>4+0+1=>5

#chmod  u-x,g-x,o-rx  hello.exe
u-x,g-x,o-rx 사이에 공백이 있으면 안 된다.

u-x,g-x,o-rx 의 의미
user   퍼미션에서 실행권한 x 제거
group  퍼미션에서 실행권한 x 제거
others 퍼미션에서 읽기 및 실행권한 rx 제거

#ll hello.exe
-rw-r-----  1 root root 4725 Jun  5 20:41 hello.exe

#./hello.exe
-bash: ./hello.exe: Permission denied

원하지 않은 프로그램을 실행시킬수 있으므로 루트라 할지라도 실행권한이 없으면 실행할 수 없다.

#chmod 755 hello.exe
user 개체에 7, group 개체에 5, others 개체에 5 퍼미션 할당

#ll hello.exe
-rwx r-x r-x  1 root root 4725 Jun  5 20:41 hello.exe
  7   5   5 

r  - 4
w - 2
x  - 1

-rwxr-xr-x 에서 첫번째 글자가 d 이면 디렉토리, - 이면 파일, l 이면 링크파일(다른 파일과 연결되어 있다는 의미), b 는 블록장치, c 는 캐릭터 장치를 뜻한다.

#chmod a-x hello.exe
#ll hello.exe
-rw- r-- r--  1 root root 4725 Jun  5 20:41 hello.exe
  6   4   4

[root@cent work]# chmod ugo=rx hello.exe
[root@cent work]# ll hello.exe
-r-xr-xr-x  1 root root 0  2월 12 01:26 hello.exe

#chown  nobody  hello.exe
파일의 소유자 변경
#ll hello.exe
-rw-r--r--  1 nobody root 4725 Jun  5 20:41 hello.exe

#chown  nobody111  hello.exe
chown: `nobody111': 잘못된 사용자
#
---> chown, chgrp  명령어 다음에는 
/etc/passwd, /etc/group 에 등록되어 있는 사용자, 그룹이름을 적어야 한다.

/etc/passwd : 리눅스 사용자가 등록되어 있는 파일
/etc/group  : 리눅스 그룹이 등록되어 있는 파일
/etc/shadow : 리눅스 사용자의 패스워드(암호)가 있는 파일

#chgrp  sys  hello.exe
파일의 그룹 변경
#ll  hello.exe
-rw-r--r--  1 nobody sys 4725 Jun  5 20:41 hello.exe

nobody 와 sys, adm 은 리눅스 설치시 자동으로 등록되는 시스템 계정(사용자)과 시스템 그룹이다.

#chown  root.adm  hello.exe
또는 #chown  root:adm  hello.exe 
소유자와 그룹 동시에 변경

#ll hello.exe
-rw-r--r--  1 root adm 4725 Jun  5 20:41 hello.exe

◆setuid
로그인한 사용자와 관계없이 프로그램을 실행할 때 그 프로그램의 소유자 권한으로 실행되는 특별한 권한, 주로 루트 소유자로 되어있는 프로그램에 설정되어 있다.

[cent]
#ll /etc/shadow
-r--------  1 root root 1170 Jun 10 21:14 /etc/shadow
(/etc/shadow 파일은 루트만 접근 가능하다.)

#which passwd
/usr/bin/passwd

#ll /usr/bin/passwd
-r-s--x--x  1 root root 18852 Mar  7  2005 /usr/bin/passwd
--->setuid 가 적용되어 있다.

◆테스트 계정 생성하기
[cent]
adduser : 새로운 계정(사용자)을 생성시키는 명령

#adduser  apple
--->apple 사용자 생성

#passwd apple
1234
1234

--->apple 사용자의 암호 설정 (입력시 아무것도 안 보이므로 정확히 타이핑하고 엔터를 누르면 된다.) 루트일 때는 짧은 암호를 설정할 수 있다.


putty : 원격 접속 프로그램

[win7]-----------<가상 네트워크>------------------[cent]

[putty]
win7 에서 cent 로 apple 로그인

putty 실행후 HostName(or IP Address) 항목에 리눅스의 아이피를 입력후(#ifconfig 로 확인) Open 버튼을 누른후 메시지 창(Warning)이 나오면  예(Yes) 를 누른다.

login as: apple
apple@192.168.197.128's password: apple 사용자의 암호입력
[apple@cent ~]$

id : 사용자 확인 명령

$ id
uid=500(apple) gid=500(apple) groups=500(apple)

$cat  /etc/passwd (사용자 계정이 등록되어 있는 파일)
---> O
$cat  /etc/shadow (사용자 암호가 등록되어 있는 파일)
---> X

$ ll /etc/passwd  /etc/shadow
-rw-r--r--  1 root root 1841 12월 11 02:43 /etc/passwd
-r--------  1 root root 1170  3월 15 07:14 /etc/shadow

$ cat /etc/shadow
cat: /etc/shadow: 허가 거부됨
한글이 깨지면 #export  LANG=C 를 입력해서 영문설정하고 테스트

$ passwd
Changing password for user apple.
Changing password for apple
(current) UNIX password: 1234(apple 의 현재 패스워드 입력)
New UNIX password: qwer ---> 일반계정은 간단한 암호를 사용할 수 없다. (루트는 지정할 수 있다.)
BAD PASSWORD: it is too short
New UNIX password: qwer1234 (일반 계정은 8자 이상으로 암호를 지정)
Retype new UNIX password: qwer1234
passwd: all authentication tokens updated successfully.
---> passwd 명령어에 setuid 가 있어서 /etc/shadow 파일이 업데이트 된다. (setuid 로 인하여 일반계정도 자신의 암호를 변경할 수 있다.)

[cent]
(루트 계정으로 작업-프롬프트가 # 상태)
#ll  /usr/bin/passwd
-r-s--x--x  1 root root 21200  8월 22  2005 /usr/bin/passwd
--->실행권한이 없는 상태에서는 소문자 s 가 아니라 대문자 S 로 나타난다.

#chmod  u-s  /usr/bin/passwd
(setuid 제거)

#ll  /usr/bin/passwd
-r-x--x--x  1 root root 21200  8월 22  2005 /usr/bin/passwd


[putty]
(apple 계정으로 작업-프롬프트가 $ 상태)
$ passwd
Changing password for user apple.
Changing password for apple
(current) UNIX password: qwer1234 입력
passwd: Authentication token manipulation error

---> passwd 명령어에서 setuid 를 제거하면 일반계정은 암호를 업데이트 할 수 없다.


◆passwd 권한 원래대로 설정하기

[cent]
(루트 계정으로 작업하기)
#ll  /usr/bin/passwd
#chmod  u+s  /usr/bin/passwd
#ll  /usr/bin/passwd

---> setuid 를 다시 설정하고 putty 에서 apple 의 암호를 변경할 때 안 되면 루트 계정에서 apple 의 암호를 다시 설정(#passwd  apple)하고 테스트 해 본다. (setuid 를 제거하고 실행해서 오동작 할 수 있다.)


◆sticky bit
setuid 와 setgid 는 일반적으로 디렉토리가 아니라 루트 소유자로 된 실행가능한 프로그램에 지정하고 sticky bit 는 파일보다 디렉토리에 지정한다.

[cent]
#adduser  banana
#passwd  banana
암호지정
1234
1234
#passwd  apple
1234
1234

#ls -l /

drwxrwxrwt   12 root root   4096 Jun 10 21:38 tmp
---> sticky bit 가 설정되어 있다.(1777)


[putty]
apple login
$cd  /tmp
$touch  apple2.txt
$ll
-rw-rw-r--  1 apple apple    0 12월 12 00:34 apple2.txt

$su  banana
---> banana 계정으로 전환
Password: banana 계정의 암호 입력

$id
uid=501(banana) gid=501(banana) groups=501(banana)

$pwd
/tmp

$ll
total 36
-rw-rw-r--  1 apple apple    0 Jun 10 22:19 apple2.txt

$rm apple2.txt
rm: remove write-protected regular empty file `apple2.txt'? y 입력
rm: cannot remove `apple2.txt': Operation not permitted

$ls
apple2.txt    keyring-MYtKrn  orbit-root      texconfig.hn4867  xses-root.FNdhQx
gconfd-root  mapping-root    ssh-gcvrCQ2178  tmp.noIJGa2325

---> sticky bit 로 인하여 다른 계정이 만든 파일이 지워지지 않는다. 디렉토리 퍼미션이 777 이라면 다른 계정이 만든 파일을 지울수 있다.
파일을 삭제할 때는 파일의 w 권한이 적용되는 것이 아니고 그 파일이 속한 디렉토리의 w 권한이 적용된다. 
파일의 w 권한은 파일의 내용을 수정할 수 있다는 의미이다.
sticky bit 는 주로 공용 디렉토리(인터넷 게시판에 해당)에 설정하며 루트나 파일 소유자만이 해당 파일을 삭제할 수 있다.


<일반 계정에서 루트 또는 다른 계정으로 전환하기>
su : Switch User

관리자도 일반 계정으로 사용하다가 루트 권한이 필요한 경우 su 를 이용하여 루트 로 전환하기 위해서 사용되며 테스트 할 때 A 계정에서 B 계정으로 전환할 때도 이용된다.

1. 루트 계정으로 전환
   1)su   (su    root 와 동일)
   2)su - (su  - root 와 동일)

2. 다른 계정으로 전환
   1)su     계정명
   2)su  -  계정명

su 다음에 
- 를 사용하면 모든 쉘설정파일을 읽어서 로그인한 것과 비슷하게 되고
- 가 없으면 모든 쉘설정파일을 읽지 않아서 일부 환경변수는 이전 계정의 내용으로 존재한다.
이전 계정으로 돌아올 때는 #exit 하면 된다.
putty 접속을 종료할 때도 #exit 를 입력하면 된다.

◆실습
1.cent 에서 루트계정으로 /tmp2 디렉토리 생성후 디렉토리 퍼미션을 777 로 설정하기
2.putty 이용하여 apple 로 로그인한 다음 /tmp2 로 이동해서 apple.txt 만들기
3.su 이용하여 banana 로 전환후 /tmp2 로 이동해서 apple.txt 삭제 테스트 하기
//////////////////////////////////////////////////////
[cent]
#mkdir  /tmp2
#chmod  777  /tmp2
#cd  /
#ll 로 확인
[putty]
apple login
$cd  /tmp2
$touch  apple.txt
$su  banana
$id
$ls
$rm  apple.txt (삭제 테스트)
질문에 y 를 입력해야 삭제됨
//////////////////////////////////////////////////////


◆Control 문자
키보드 컨트롤 키(Ctrl)와 문자를 이용하여 특별한 기능을 사용할 수 있다.

Ctrl + c 명령 실행 중단
Ctrl + d 입력 종료
Ctrl + u 터미널 입력 라인 초기화
Ctrl + w 터미널 마지막 입력단어 삭제
Ctrl + s 터미널 출력 중지
Ctrl + q 터미널 출력 재시작


◆파일 및 경로명 확장
* : 모든 문자를 의미
? : 한 문자를 의미
[...] : [ ] 안의 한 문자를 의미, ^ 는 제외를 의미
{파일1,파일2,...} : { } 안의 파일을 묶어서 사용할 때

#mkdir  /work2
#cd  /work2
#touch  a  ab  tb  abc  a.txt  ab.txt  abc.txt
#ls  *
#ls  *.txt
#ls  ab*
#ls  ?
#ls  ??
#ls  ?.txt
#ls  ??.txt
#ls  [abc]
#ls  [abc]b
#ls  [^abc]b
#ls  -l  /etc/{hosts,services}
#cd  /
#ls
tmp  tmp2
#cd  tm??
#pwd
tmp2



리눅스 명령어(grep,find)

<Pipe(파이프)>

#명령어1 | 명령어2 | 명령어3 ...

| ---> 백스페이스 왼쪽키

파이프(|) : 리눅스 명령어들을 연결해서 사용할 수 있는 기호
       파이프를 이용하면 한 명령어의 출력을 다른 명령어의 입력으로 사용하여 여러 명령어가 적용된 출력 결과를 얻어낼 수 있다.
      A | B | C ...

명령어1 의 결과 ---> 메모리 임시버퍼에 저장 ---> 명령어 2 의 입력

grep 명령어(필터링)
파일내에서 특정 패턴을 검색하여 그 패턴을 포함하는 모든 라인을 화면에 출력하는 명령어
특정 패턴을 찾는 규칙을 정규표현식(Regular Expression)이라 한다.

-------------------------------------------------
^ 시작을 의미
-------------------------------------------------
$ 끝을 의미
-------------------------------------------------
. 한 개의 문자를 의미
-------------------------------------------------
* 모든 문자를 의미
-------------------------------------------------
[] 범위를 지정, [a-z]* ---> 소문자
-------------------------------------------------
[^] ^ 다음의 문자를 제외(except)하는 의미, 
[^a-c] ---> a부터 c로 시작하는 것은 제외
-------------------------------------------------

<grep 형식>

1)
grep  검색단어  파일명

또는

2)
명령어  |  grep  검색단어

#grep  Telnet  /etc/services

#grep  -i  Telnet  /etc/services
-i ignore-case (대소문자 구분 안함)

#grep  -n  telnet  /etc/services
-n line-number

#grep  -c  telnet  /etc/services
-c count (검색된 라인 갯수)

#cat  /etc/services  |  grep  telnet
---> 파이프를 이용한 필터링
또는
#grep  telnet  /etc/services

//////////////////////////////////////////////////////
#cat  /etc/hosts
#cat  /etc/hosts  |  vi
---> vi 는 파이프 되지 않는다.
모든 명령어가 파이프를 사용할 수 있는 것이 아니다.
---> vi  /etc/hosts 처럼 사용해야 한다.
//////////////////////////////////////////////////////

♥리눅스의 내부 통로
리눅스 운영체제 내부에는 데이터가 이동하는 3가지 통로가 있다.

표준입력(stdin)  - 0 : 키보드와 연결
표준출력(stdout) - 1 : 모니터와 연결
표준에러(stderr) - 2 : 모니터와 연결

--------------------------- 
Standard Input        0    <------------   키보드
---------------------------
 
---------------------------
Standard Output      1     -------+          
---------------------------             |
                                          +--->  모니터
---------------------------             |
Standard Error         2     -------+              
---------------------------

#A 라는 명령어를 실행했을 때 기본적으로 모니터로 출력되지만
#A | B 라고 실행할 경우 A 와 B 가 내부적으로 통로가 연결되어서(파이프) A 의 결과가 B 의 입력으로 전달이 된다.

#cd  /work
#pwd
(/work)
#ls
#ls | rm
---> 의 경우 rm 명령어는 파이프를 이용하는 것이 아니라 명령어 다음에 적은 인자값(인수,파일명)을 사용하기 때문에 제대로 실행되지 않는다.
--->파이프를 사용할 수 있는 명령어는 grep, sort, wc(필터류), more 등 한정되어 있다.

☞sort 명령어
파일의 텍스트 라인을 화면상에 정렬하여 출력한다.
기본적으로 알파벳 또는 숫자로 정렬한다.
space bar 또는 tab 으로 필드 구분을 한다.

-n 숫자로 정렬
-r 내림차순 정렬
-o 파일로 저장
-t 필드(라인의 각 항목) 구분자 지정
-k 정렬할 필드 지정

#sort  /etc/group

#sort  -r  /etc/group
---> 역순 정렬

#sort  -t  :  -k 3  -n  /etc/group
---> 그룹 번호를 이용한 정렬

#man sort
   -t, --field-separator=SEP use SEP instead of non-blank to blank  transi-
              tion(한 라인에서 필드를 구분하는 공통된 문자-Token)
   -k, --key=POS1[,POS2]
              start a key at POS1, end it at POS 2 (origin 1)
    (정렬에 사용할 필드)

♥실습
<파일 또는 디렉토리만 출력하도록 알리아스 설정하기>
Q)alias, ls, |, grep 을 이용하여 lsf 를 입력하면 파일만 출력되고 lsd 를 입력하면 디렉토리만 출력되도록 알리아스를 설정하시오

//////////////////////////////////////////////////////

#mkdir  /work3
#cd  /work3
#mkdir  a  b  c
#touch  1.txt  2.txt  3.txt
#ls
1.txt  2.txt  3.txt  a  b  c
#pwd
/work3
#ll
합계 12
-rw-r--r--  1 root root    0 12월 11 22:51 1.txt
-rw-r--r--  1 root root    0 12월 11 22:51 2.txt
-rw-r--r--  1 root root    0 12월 11 22:51 3.txt
drwxr-xr-x  2 root root 4096 12월 11 22:50 a
drwxr-xr-x  2 root root 4096 12월 11 22:50 b
drwxr-xr-x  2 root root 4096 12월 11 22:50 c


#alias lsf='ls -l | grep "^-"'
#alias lsd='ls -l | grep "^d"'
#lsf
#lsd
//////////////////////////////////////////////////////

☞wc 명령어(word count)
파일내의 라인수,단어수,문자수 를 확인할 때 사용

#wc  --help
#wc  /etc/hosts
라인수  단어수  문자수

#wc  -l    /etc/hosts
#wc  -w  /etc/hosts
#wc  -c  /etc/hosts

#cat  /etc/hosts | wc -l

☞df 
disk free, 하드디스크의 파티션별 정보 출력
-k 킬로바이트 출력
-h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)

/dev/sda : 하드디스크 전체
/dev/sda1 : 첫번째 파티션
/dev/sda2 : 두번째 파티션
/dev/sda3 : 세번째 파티션

[/dev/sda1(첫번째 파티션) | /dev/sda2(두번째 파티션) | /dev/sda3(세번째 파티션)]
---> 하드디스크

//////////////////////////////////////////////////////////////////////////
#man   df
DF(1)                                                                   DF(1)

NAME
      df - 디스크의 남은 공간을 보여준다.
//////////////////////////////////////////////////////////////////////////


[root@cent ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15116836   4646976   9701956  33% /
none                    257752         0    257752   0% /dev/shm
/dev/sda3              4482820     42500   4212600   1% /home
[root@cent ~]#
[root@cent ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  4.5G  9.3G  33% /
none                  252M     0  252M   0% /dev/shm
/dev/sda3             4.3G   42M  4.1G   1% /home
[root@cent ~]#

df  는 하드디스크의 사용 현황을 확인하는 명령어로 기본적으로 킬로바이트로 출력
-h 옵션은 읽기 쉽도록 메가바이트, 기가바이트로 출력

/dev/sda1 은 하드디스크의 첫번째 파티션으로 15G 가 전체용량이고 33% 를 사용했음을 확인할 수 있다.
/dev/shm 은 메모리를 디스크처럼 사용하기 위해 리눅스가 자동으로 만든 것

☞awk
패턴 처리 명령어
$5 5번째 항목을 의미

//////////////////////////////////////////////////////////////////////////
#man  awk

GAWK(1)                        Utility Commands                       GAWK(1)

NAME
      gawk - pattern scanning and processing language
//////////////////////////////////////////////////////////////////////////

awk 는 파일의 내용을 프로그래밍적으로 처리해 주는 명령어
division.txt 파일에 아래와 같이 입력되어 있다고 하면

[root@cent ~]# cat division.txt
seoul     pusan      daegu
orange   mango    apple

위 의 내용중에서 첫번째 열(seoul 과 orange)만을 출력시키고 싶을 때 awk 를 사용할 수 있다.
사용법은 awk '{ print 출력할열 }' 파일명
출력할 열은 첫번째는 $1 이 되고 두번째는 $2 가 된다.
division.txt 에서는 두 번째 열(두번째 세로줄)은 pusan 과 mango 가 된다.

예제1)
[root@cent ~]# awk '{ print $1 }' division.txt
seoul
orange

예제2)
[root@cent ~]# awk '{ print $2 }' division.txt
pusan
mango

예제3)
[root@cent ~]# cat division.txt | awk '{ print $1 }'
seoul
orange
[root@cent ~]#
---> 파이프를 이용하여 출력한 예
     예제1 과 예제3은 결과가 동일
     예제1은 파이프를 사용하지 않고 파일을 직접 이용한 경우
     예제3은 파이프를 사용해서도 동일한 결과를 출력시킬 수 있다는 예

#df -h | sort | head -2 | awk '{ print $6 " : " $5 }'
/ : 28%
/home : 1%

<파일 검색>
1) GUI 프로그램
    리눅스 메뉴표시줄-명령-파일 찾기
2) find 명령어
형식)
find <탐색을 시작할 경로> [옵션]

파일이 어느 경로에 있는지 모를 때는 / 를 사용하면 된다. 
최상위 부터 검색하므로 시간이 많이 걸린다.
탐색 경로를 생략하면 현재 디렉토리를 기준으로 찾는다.

2) find 옵션
-name     이름으로 검색
-empty    empty 파일 검색
-uid UID   UID(사용자 번호)로 검색
-gid GID   GID(그룹 번호)로 검색
-newer    지정한 파일 이후에 만들어진 파일 검색
-perm     퍼미션으로 검색
-user      소유자로 검색
-exec      찾은 파일을 대상으로 명령어 실행
-ok         exec 와 비슷하나 질문 출력

#man  find
space bar 다음 페이지 
q 종료

NAME
       find - search for files in a directory hierarchy
SYNOPSIS
       find [path...] [expression]
 If no expression
       is given, the expression ‘-print’ is used.
 ACTIONS
       -exec command ;
       Execute  command;  true  if  0 status is returned.  
       All following arguments to find are taken to be arguments
       to the command  until an argument consisting of ‘;’ is encountered.  
       The string ‘{}’ is replaced by the current file name
       being processed  everywhere  it
       occurs  in  the  arguments  to the command, not just in arguments
       where it is alone, as in some versions of find.   Both  of  these
       constructions  might need to be escaped (with a ‘\’) or quoted to
       protect them from expansion by the shell.  The  command  is  executed in the starting directory.

       -ok command ;
       Like  -exec  but  ask  the  user  first

#find  --help

#mkdir  /work5
#cd  /work5
#touch  user1.txt  user2.txt  cent.dat
#ls 

#find  *
---> O
#find  /work5  -name  *
---> X 
#find   /work5  -name  *.txt 
---> /work5 부터 txt 로 끝난 모든 파일을 찾으라는 의미

#find   /work5  -name  "*" 
---> O
#find   /work5  -name  "*.txt" 
---> O

---> 쉘명령어 사용시 * 나 공백이 들어간 경우 
     쉘이 특별하게 생각하기 때문에 결과가 올바르게 
     나오지 않을 수 있다.
     이 때는 쿼팅을 사용하면 된다.

#find   /work5  -name  user1.txt  -print 
-print 는 디폴트 옵션이다.

#man  bash

쿼우팅(QUOTING)
쿼우팅은 쉘에 있어 특별한 의미를 갖는 문자나 단어의 그 의미를제거할 때 사용한다.

<쿼팅(Quoting)>
작은따옴표, 큰따옴표, 역따옴표, \ 등을 사용하는 것을 쿼팅 이라 부른다.

' 작은따옴표
" 큰따옴표
` 역따옴표(1번키 왼쪽키-Back Quote)
\ 역슬래쉬(해석금지의 의미)

---> * 의 경우 ' 나 " 둘 다 사용할 수 있지만
      변수의 경우 '(작은따옴표) 는 $ 표시와 변수이름 자체가 출력되고
      " 는 변수의 값이 출력된다.
      `(역따옴표) 는 명령어의 결과를 변수에 저장할 때 쓰인다.

---> 작은 따옴표와 큰따옴표를 섞어서 사용하면 안 된다.

#find  /work5  -name  "*" 
---> O
#find  /work5  -name  '*' 
---> O
#find  /work5  -name  \*
---> O

#echo '$LANG' 
---> 변수이름 출력
#echo "$LANG" 
--->변수 값 출력
#echo  $LANG 
---> 변수 값 출력
#echo  \$LANG
---> 변수 해석 금지
#\rm  user1.txt
---> 알리아스 해석 금지

Q)공백이 들어간 디렉토리로 이동하려면 ?

☞uname 명령어
운영체제의 종류와 버전 확인
uname -a (모든 정보 출력)
uname -s (운영체제 종류)
uname -r (운영체제 릴리스-release 버전)
uname -sr (종류 + 릴리스)
uname -n (컴퓨터 이름)
uname -i (하드웨어 플랫폼)
uname -p (프로세서 종류)

//////////////////////////////////////////////////////////////////////////
#man  uname

UNAME(1L)                                                           UNAME(1L)

이름
       uname - 시스템 정보를 출력한다

개요
       uname   [-snrvma]  [--sysname]  [--nodename]  [--release]  [--machine]
       [--all] [--help] [--version]

설명
       이 맨페이지는 GNU 버전의 uname 을 설명한다.  uname 은 현재 작동  중 인
       머 신 과 운영체제에 대한 정보를 출력한다.  아무런 옵션도 주어지지 않으
       면, uname 은 마치 -s 옵션이 주어진 것처럼 동작한다.  여러 개의 옵션 이
       주 어 지 거 나 -a 옵션이 주어지면 각 항목마다 스페이스 문자로 구분하여
       ‘snrvm’ 순서대로선택된 정보를 출력한다.

   옵션
       -m, --machine
              머신(하드웨어) 타입을 출력한다.

       -n, --nodename
              머신의 네트웍 노드 호스트명을 출력한다.

       -r, --release
              운영체제 릴리즈 넘버를 출력한다.
//////////////////////////////////////////////////////////////////////////

#uname
--->운영체제 정보 출력 명령

#temp=`uname` (역따옴표 사용)
---> = 사이에 공백이 있으면 안 됨
---> uname 명령어의 결과가 메모리상의 temp 라는 변수에 저장 됨

#echo  $temp
Linux

#temp='uname' (작은따옴표) 또는 temp="uname"
---> uname 이라는 문자열이 변수에 저장 됨
#echo  $temp
uname

#mkdir /work6
#cd   /work6

#touch  a.c  b.c 
#mkdir  mydir.c

#find  .  -name  "*.c"   -type   f
-type : 파일 또는 디렉토리를 지정하는 옵션(f 는 파일, d 는 디렉토리)

#chown  nobody.sys  a.c
#chown  nobody  b.c
#ll
#find  /work6  -user  nobody  -group  sys

#mkdir  /work62
#cd  /work62
#touch  f1  f2  f3  f4  f5  f6
#rdate  -s  time.bora.net
외부 타임서버 이용하여 리눅스 머신의 시간을 표준시로 동기화 (인터넷이 되어야 시간이 동기화 된다.)
#date

현재 날짜와 시간을 기준으로 아래와 같이 변경
#touch  -t  월일시간분  f6 (현재 날짜와 시간 : 월 일 시 분)
#touch  -t  월일시간분  f5 (현재 날짜에서 -1 한 날짜)
#touch  -t  월일시간분  f4 (현재 날짜에서 -2 한 날짜)
#touch  -t  월일시간분  f3 (현재 날짜에서 -3 한 날짜)
#touch  -t  월일시간분  f2 (현재 날짜에서 -4 한 날짜)
#touch  -t  월일시간분  f1 (현재 날짜에서 -5 한 날짜)
#ls -l f*

#find . -mtime 3 -type f -ls 
(수정날짜가 3일전인 파일)

#find . -mtime -3 -type f -ls 
(수정날짜가 현재 날짜부터 3일 이전 파일) ---> 수정한지 3일이 지나지 않은 파일

#find . -mtime +3 -type f -ls
(수정날짜가 3일 지난 파일)

#man find
    +n     for greater than n,
    -n     for less than n,
     n      for exactly n.

-ls    True; list current file in ‘ls -dils’ format on standard  output.

#man  ls
       -f      경로 내용을 정열하지 않는다: 이것은디스크에 저장된 순으로 보여준다.  -a와 -U 옵션과 같은 뜻이 며,  -l, -s, -t. 옵션과 반대뜻이다.

☎파일을 찾아서 지우는 예제

#mkdir /work7
#cd   /work7
#touch  user1.txt  user2.txt  cent.dat
#find  /work7  -name  cent.dat  -exec  rm  {}  \;
---> 질문없이 바로 삭제 된다.

{} 는 찾은 파일을 의미하고 
\; 는 명령어가 끝났음을 의미한다.

#find  /work7  -name  user2.txt  -ok  rm  {}  \;
질문이 나올 때 엔터만 치면 삭제되지 않는다. y 를 누르면 파일이 삭제된다.
-exec,ok 다음에는 ll 같은 알리아스를 적으면 안 됨 (알리아스는 쉘의 기능, find 는 알리아스를 처리하지 않는다.)

◆퍼미션을 이용한 find 검색
#man find
       -perm mode
              File’s permission bits are  exactly  mode  
       -perm -mode 
              All of the permission bits mode are set for the file. (AND 연산자)
       -perm +mode 
              Any of the permission bits mode are set for the file. (OR 연산자)

#mkdir /work8
#cd  /work8
#touch  my0  my1  my2  my3  my4  my5  my6  my7
#chmod  000  my0
#chmod  100  my1
#chmod  200  my2
#chmod  300  my3
#chmod  400  my4
#chmod  500  my5
#chmod  600  my6
#chmod  700  my7
#ll

#find . -perm 600 -type f -ls

#find . -perm -600 -type f -ls 
(rw 로 검색, AND 연산자 역할, 퍼미션이 rw 이상인 파일 검색)

#find . -perm +600 -type f -ls 
(r 또는 w 로 검색, OR 연산자 역할)

6(rw)=4(r) + 2(w)



와우.. 쉽지 않네요. 그래도 나중을 위해서 이렇게~
이상, 엠토리 였습니다. 항상 행.복.하시길~^^
첫주 수업 내용을 접속으로 하고 이제부터는 리눅스 세상이라고 해보겠습니다. ㅎ

[Shell(쉘)]

☞리눅스의 명령어 작업을 할 때는 자동으로 쉘을 사용하게 되므로 리눅스를 정확하게 사용하려면 쉘에 대해서 이해하고 있어야 한다. 라고 강사님이 말하시더군요.

먼저 이를 위해 알아야할 리눅스 용어(명령어)는..

1. alias
   명령어 별칭 출력 및 생성(반대는 unalias)

#ls  -l
#ll
---> 명령어 alias , ll 은  ls  -l 과 같다.

#alias
---> 미리 설정되어 있는 alias 확인하기

#zz
---> 명령어도 아니고 알리아스도 아니므로 실행되지 않는다.

#alias  zz='ls  -l'
사용자 정의 알리아스(명령어에 대한 별칭)
---> 위의 설정은 1회성이고 리부팅해도 적용하려면 쉘설정 파일에 등록시켜야 한다.

#alias
#zz
---> ls  -l 이 실행된다.

#unalias  zz
알리아스 해제
#alias
#zz
---> X

2. echo
   화면상에 문자열이나 변수의 값(내용)을 출력.  변수는 $ 기호로 시작된다.

#echo test
#echo TEST

3. export
   환경변수로 만들어 주는 명령어


♥Unix 및 Linux 구조

----------
사용자
----------
Shell
----------
Kernel
----------
H/W
----------

♥부팅
하드 디스크의 커널이 메모리에 로딩되어 사용자의 명령을  처리할 수 있도록 준비되는 과정 (from bootstrap)

♥Kernel(커널)
운영체제의 핵심되는 프로그램(자동차의 엔진 역할)

♥쉘(shell)
명령어 해석기(Command Interpreter)
사용자가 입력한 명령어를 커널(운영체제의 핵심프로그램)이 이해할 수 있도록 번역해서 전달하고 결과를 사용자에게 리턴하는 프로그램
쉘도 하나의 프로그램이며 리눅스로 로그인하면 쉘이 메모리에 로딩되고 터미널 프로그램을 실행해도 쉘이 메모리로 로딩된다.
터미널에서 텍스트 명령어를 사용하면 쉘을 이용하게 되는 것이다.

명령어 대기 상태 : 쉘프롬프트 라고 부른다.
리눅스 명령어를 쉘명령어 라고도 부른다.

[root@cent work]#cd /work (안 되면 #mkdir  /work 한 후 이동하기)
[root@cent work]# vi score.c

#include <stdio.h>
int main() {
        int jumsu;
        printf("Input Your Score : ");
        scanf("%d",&jumsu);
        printf("Your Score is %d\n",jumsu);
        return 0;
}

[root@cent work]# cat score.c
#include <stdio.h>
int main() {
        int jumsu;
        printf("Input Your Score : ");
        scanf("%d",&jumsu);
        printf("Your Score is %d\n",jumsu);
        return 0;
}

[root@cent work]# gcc  -o  score.exe  score.c
gcc : C 컴파일(컴퓨터가 이해할 수 있도록 변환) 명령어
-o 는 출력 파일(output file)을 지정하는 옵션

[root@cent work]# ls
pine.txt  score.c  score.exe
[root@cent work]#
[root@cent work]# ls sc*
score.c  score.exe
[root@cent work]#
[root@cent work]# score.exe
-bash: score.exe: command not found
---> 실행안됨
---> 현재 작업 디렉토리 /work 가 패스(PATH)에 설정되어 있지 않기 때문

[root@cent work]#
[root@cent work]# ./score.exe
--->현재 디렉토리에 있는 score.exe 를 실행하라는 의미
--->점 1개는 현재 디렉토리를 의미
.. 
--->점 2개는 상위 디렉토리를 의미

Input Your Score : 90
Your Score is 90

[root@cent work]#

-------------
shell(쉘)
-------------
kernel(커널)
-------------
리눅스로 로그인 한 후 터미널 실행했을 때 메모리 상태

PATH(패스) : 명령어를 탐색하는 경로(디렉토리,폴더) 정보

#echo  path
---> 문자열은 그대로 출력됨
#echo  PATH
#echo  $path
---> $ 는 변수를 뜻하며 환경변수는 대문자이다.
---> 소문자 path 변수는 정의가 되어있지 않으므로 출력되는 것이 없음

#echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

변수      : 메모리에 데이타를 저장하고 있는 임시 기억장소
환경변수 : 명령어가 실행될 때 참조되는 패스(PATH) 같은 변수를 환경변수라고 부른다.

---------------------------------------------
[/a:/b:/c]      [ ko_KR ]    [ /root ]
PATH 변수    LANG 변수   HOME 변수
---------------------------------------------
메모리상의 쉘 영역

쉘의 메모리 영역에는 변수도 있고 환경변수도 있는데 리눅스의 명령어 프로그램이 실행될 때 참조하는 변수를 환경변수라 하고 PATH 가 대표적인 환경변수이다.(--->대문자)

PATH : 명령어 탐색 경로 저장
LANG : 언어 정보 저장
HOME : 로그인한 계정의 홈디렉토리 저장

#ls 라고 입력했을 때 실제로는 /bin/ls 실행이 되는데 쉘이 메모리상에서 PATH 변수를 탐색해서 실행을 해주므로 /bin/ls 라고 입력할 필요가 없다.
score.exe 는 /work 에 있지만 패스(PATH) 변수에 /work 디렉토리가 포함되어 있지 않으므로 #score.exe 라고 입력했을 때 실행되지 않는다.

score.exe 를 실행하려면 

1) score.exe 파일을 /bin 같은 패스에 등록된 디렉토리에 복사
2) #/work/score.exe 처럼 절대경로를 입력
3) #cd /work 한 후 #./score.exe 처럼 상대경로 입력
4) /work 를 패스에 지정

#export  PATH=/work:$PATH
/work 디렉토리를 PATH 변수에 추가하기(대소문자 구분)
export ---> 환경변수로 만들어주는 명령어
                PATH 는 이미 환경변수이므로 export 를 생략해도 된다.

---> 패스설정시 ; 이 아니라 : 으로 해야 하고 공백이 있으면 안 된다.
---> 위와같은 설정은 일회성으로 리부팅해도 적용되게 하려면 쉘설정파일을 이용해야 한다.

#echo $PATH
/work:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
(/work 디렉토리가 패스에 추가 됨)

[root@cent work]# score.exe
Input Your Score : 80
Your Score is 80
---> 패스설정을 했으므로 ./score.exe 라고 입력을 안 해도 실행된다.

☎한/영 전환 알리아스 설정
#cp
cp: missing file argument
더 많은 정보를 보려면 `cp --help' 하십시오.
---> 한글로 메시지가 출력된다.

#echo $LANG
ko_KR.UTF-8
--->언어가 한글로 설정되어 있다는 의미

Q)터미널에서 en 을 입력하면 영문으로 설정되고 ko 를 입력하면 한글로 설정이 되도록 알리아스를 설정하시오
--->LANG 환경변수를 en_US.UTF-8 또는 C(대문자) 로 변경하면 됨


//////////////////////////////////////////////////////
#alias  en='export  LANG=en_US.UTF-8'
대소문자 구분하고 = 의 왼쪽과 오른쪽은 공백이 있으면 안 됨

#alias  ko='export  LANG=ko_KR.UTF-8'
위와 같은 설정은 일회성이고 계속 적용하려면 쉘설정파일에 등록해 주면 된다.

#en
#cp
cp: missing file argument
Try `cp --help' for more information.
#
#ko
#cp
cp: missing file argument
더 많은 정보를 보려면 `cp --help' 하십시오.
#
//////////////////////////////////////////////////////

<쉘설정파일 사용하기>
리눅스는 로그인을 하면 메모리에 쉘이 실행 되는데 /etc/bashrc,  /etc/profile 을 먼저 읽고  자신의 홈디렉토리에서 .bashrc, .bash_profile 을 읽어서 알리아스, 패스(PATH)같은 환경변수를 설정하게 된다.
(.bashrc 는 터미널을 실행할 때 마다 읽고 .bash_profile 로그인시 한 번 만 읽는다.)
/etc 에 있는 쉘설정파일은 모든 사용자에게 적용되는 전체설정 파일이다.


bash(--->리눅스의 디폴트 쉘 프로그램인 배쉬 쉘) 설정파일
1).bashrc (비-로그인 쉘 설정파일)
2).bash_profile (로그인 쉘 설정파일)
3).bash_history
4).bash_logout
--->계정의 홈디렉토리에 존재한다.

#cd
(cd 만 입력하면 자신의 홈디렉토리로 이동한다.)
#pwd
(/root)
#ls
#ls  -a
리눅스에서는 점으로 시작하는 파일은 숨김속성(hidden file) 파일로 ls 로 안 보이고 ls -a 로 볼 수 있다. 주로 설정파일들이 점으로 시작한다.

#cat  .bashrc
---> 주로 알리아스 등록

#cat  .bash_profile
---> 패스같은 환경변수 등록

#cat  .bash_history
---> 사용한 명령어가 기록됨(히스토리 파일) #history 명령어로 확인

#!! 또는 !-1
--->가장 마지막에 사용한 명령이 실행된다.

#!369
--->history 목록에서 369번 명령이 실행된다.

#cat  .bash_logout
---> 로그아웃시 실행 할 명령어 기록

<쉘변수 확인하기>
set    : 변수 + 환경변수 출력(형식 : 변수이름=값)
unset : 변수 초기화(#unset  PATH ---> 패스변수 초기화)
env   : 환경변수 출력


PS1 변수 : 프롬프트 저장 변수
#echo $PS1

\u 유저네임
\h 호스트네임(컴퓨터이름)
\W 작업 디렉토리

프롬프트 변경
#PS1="C:\>"
C:\>

쉘변수에 대한 확인은 #man  bash 이용

♥쉘의 기능(bash 쉘)
0. 알리아스 기능
1. 히스토리 기능 : 위쪽 화살표, 아래쪽 화살표
                       명령어는 #history
2. 자동완성 기능 : Tab(탭) 키

<redirection(방향 재지정)>

1) >  출력(기존의 파일이 있으면 overwrite 됨)
2) >> append(기존내용에 추가하기)
3) <  입력
4) << 입력 종료 문자 지정

#vi  result.txt

redirection test

#cat  result.txt
#cat < result.txt (cat  result.txt 와 동일하다)
#cat 
---> 입력 리다이렉션(< 기호)를 사용하지 않았으므로 키보드로부터 입력을 받으려고 커서가  다음 줄로 넘어간다. ctrl + d 를 누르면 종료가 된다.

#cat > result.txt (키보드 입력을 받아 파일로 출력하라는 의미)
one
two
three
ctrl + d : 입력종료 단축키


#ls
#cat  result.txt
덮어쓰기(Overwrite)가 된 것을 확인할 수 있다.

#cat  >>  result.txt
four
five
six
ctrl + d(타이핑 하는 것이 아니고 ctrl 키 누른 상태에서 d 키를 누르라는 의미)

#cat  result.txt
추가가 된 것을 확인할 수 있다.

#cat  >  result.txt  <<  EOF
kor
eng
math
eof
EOF(입력 종료 문자로 동작함)
#cat  result.txt


♥쉘옵션 설정
#set  -o  noclobber
출력(>) 리다이렉션 이용시 덮어쓰기 방지 설정

#set  +o noclobber
출력(>) 리다이렉션 이용시 덮어쓰기 가능 설정


♥실습
1. cat 와 리다이렉션 이용하여 아래와 같은 내용으로 one.txt 파일 만들기
2. cat 와 리다이렉션을 이용하여 one.txt 를 입력받아 two.txt 로 출력 시키기

one.txt :                       
Seoul                
Pusan                  
Daegu                             

//////////////////////////////////////////////////////////////////////////
#cat  >  one.txt
내용 입력

#cat  <  one.txt  >  two.txt
//////////////////////////////////////////////////////////////////////////

여기까지입니다. ^^ 또 상황에 따라 업로드 해둘께요.
리눅스 고수가 되려는 것은 아니지만 기본적인 개요를 함께 나누는 엠토리가 되었으면 좋겠습니다.

항상 행.복.하시길~^^

드뎌 일주일차 마지막 날 수업(5일차)의 내용입니다.
리눅스에는 여러 명령어들이 있습니다. 그중에 일부(많이 쓰는 것)를 소개 겸 타이핑(실습)을 했습니다.
# 뒤의 내용을 잘 읽고 타이핑하는 형태로 쭈욱 따라가면서 보니까 이해가 쪼금 되니까 참고하세요.

리눅스 명령어(파일 및 디렉토리 관련)
1. pwd
   print working directory, 현재 디렉토리의 전체경로 출력

2. cd
   change directory, 디렉토리 변경

#cd
디렉토리명을 지정하지 않으면 현재 사용자의 홈디렉토리로 이동된다.

#cd  디렉토리명
디렉토리명은 상대경로나 절대경로를 이용할 수 있다.

상대경로(Relative Path, 현재 디렉토리가 기준)
절대경로(Absolute Path, 최상위 디렉토리인 / 가 기준)

.  (점 1개)  : 현재 디렉토리를 의미
.. (점 2개)  : 상위 디렉토리를 의미


경로 연습
#cd  /tmp
---> 절대 경로
#pwd
#cd  .
---> 상대 경로
#pwd
#cd  ..
---> 상대 경로
#pwd
#ls

#cd  /usr/local
---> 절대 경로
#pwd
#cd  ../../
---> 상대 경로
#pwd

3. touch
빈 파일을 만들거나 파일 또는 디렉토리의 수정시간(mtime,Modify Time)이나 접근시간(atime,Access Time)을 현재 시간으로 변경한다.
-t 옵션을 이용하면 수정시간을 특정시간으로 변경할 수 있다.

옵션)
-a : 최근 파일 사용 시간(access time) 변경
-c : 파일이 존재하면 생성하지 않는다.(디폴트)
-d [시간] : 현재 시간 대신 지정한 시간 사용
-m : 최근 파일 수정 시간 변경
-r [파일] : 지정한 파일의 시간으로 변경
-t [[CC]YY]MMDDhhmm[.SS] : 지정한 시간(년도월일시간분초)으로 변경


#cd
---> 현재 계정이 루트 이므로 루트의 홈디렉토리 /root 로 이동된다.
#pwd
(/root)
#ls
#touch  a.txt
#ls
#touch  b.txt  c.txt
#ls
#ls -l
-l : long, 파일의 정보를 자세히 출력하는 옵션
#touch  -t  월일시분  a.txt  (월,일,시,분)

touch -t 01031730 a.txt
---> 1월 3일 17시 30분

#ls -l

4. cat
파일의 내용을 화면에 출력

옵션)
-e : 제어문자를 ^ 형태로 출력
-n : 라인 번호를 표시
-v : 개행문자, 탭키를 제외한 제어문자를 ^ 형태로 표시
-E : tab 문자를 출력
-T : tab 키를 ^I 로 출력
-A : -vET 옵션과 동일

사용 예)
#cat  파일명1
#cat  파일명1  파일명2  ...

#cat   /etc/hosts (/etc 는 폴더명, hosts 는 파일명)
#cat  -n  /etc/hosts
#cat  -A  /etc/hosts


5. cp
파일이나 디렉토리를 다른 파일 또는 다른 디렉토리로 복사(Copy), 물리적으로 새로운 파일이 생성됨

옵션)
-a : 원본 파일의 속성, 링크 파일 정보를 유지하며 복사(archive)
-b : 파일이 존재할 경우 기존 파일을 백업(backup)
-d : 복사할 원본이 심볼릭 링크일 때 심볼릭 링크 자체를 복사(no-dereference)
-f : 복사할 대상이 있으면 강제로 지우고 복사(force)
-i : 복사할 대상이 있으면 질문 출력(interactive)
-r : 디렉토리 복사할 때 사용(recursive)
-v : 복사과정 자세히 출력(verbose)
-u : 복사할 대상의 변경 날짜가 같거나 더 최근 것이면 복사하지 않음(update)

사용 예)
#cp  파일명1(원본)  파일명2(대상)
#cp  파일명   디렉토리명
#cp  -r  디렉토리명1  디렉토리명2

모든 파일을 복사할 때는 * 를 이용할 수 있다.
*.txt : txt 로 끝난 모든 파일을 의미

#cp  /etc/hosts  /tmp/one.txt (파일 이름을 변경하면서 복사)
#ls  /tmp
#cp  -v  /etc/hosts  /tmp/two.txt
#ls  /tmp
#cp  -v  /etc/hosts  /tmp (동일한 파일 이름으로 복사)
#ls  /tmp


6. clear
화면 지우기

7. ls  또는  dir
list, 파일과 디렉토리의 목록을 출력
옵션 : -l, -a, -F, -R, -d
    -l(long) 퍼미션, 소유권 등 자세한 정보 출력
    -a(all) 점으로 시작하는 숨김속성 파일도 출력
    -f 디스크에 저장된 순으로 출력
    -F(classify) 파일의 종류를 구분해서 출력
    -R(recursive) 하위 디렉토리를 구분해서 출력
    -r(reverse) 역순정렬(z - y - x ....  c - b - a)
    -d(directory) 경로안의 내용을 출력하지 않고 경로를 출력

#cd
#pwd
(/root)
#ls
#ls  -a
#ls  -F
#ls  -r
#ls  -R
#ls  /etc
#ls  -d  /etc
#ls  -dl  /etc (또는 ls  -ld  /etc  또는 ls  -l  -d  /etc)

8. mkdir  (make directory)
디렉토리 생성하기
옵션)
-p : 계층적으로 디렉토리 만들 때 사용(mkdir  -p  /a/b/c)

#cd
#pwd
(/root)
#mkdir  /work
---> 최상위 디렉토리(/) 아래에 work 디렉토리가 생성된다.
    /
    |
            root   work

#cd  /work
#pwd
(/work)
#touch  apple1.txt
#ls
#touch  apple2.txt  apple3.txt
#ls

#pwd
(/work)
#mkdir  /work22
mkdir  work22 로 하면 현재 디렉토리 즉, /work 안에 work22(/work/work22) 가 만들어진다.
           /
   work    work22

#ls  /
#ls  /work22
비어있음


9. rm 
remove, 파일 및 디렉토리 삭제
옵션)
    -i(interactive) : 확인 질문 출력하는 옵션
    -r(recursive)  : 디렉토리 삭제시 사용
    -f(force)       : 확인 질문없이 강제 삭제시 사용

#rm  apple1.txt
rm : 파일 삭제
질문 나올 때 엔터 또는 n 을 입력하면 삭제가 안되고 y 를 입력하고 엔터를 쳐야 삭제 된다.

#ls
파일삭제 확인


#rm  -f  apple2.txt
-f : force, 질문없이 강제 삭제
#ls
--->터미널에서 삭제할 때는 바탕화면의 휴지통으로 들어가지 않으므로 중요한 파일을 지울 때는 주의해야 한다.
--->중요한 파일은 다른 곳(다른 디렉토리,다른 하드디스크 등)에 백업(저장)을 해 두는 것이 좋다.

10. rmdir 
remove directory, 디렉토리 삭제하기
(디렉토리가 비어 있지 않을 때는 삭제되지 않으므로 rm  -rf 를 대신 사용하기도 한다.)

#pwd
(/work)
#ls
apple3.txt
#cp  apple3.txt  /work22
#ls  /work22

#rmdir  /work22
---> 디렉토리가 비어 있지 않으면 삭제되지 않는다.

#mkdir  /work23
#ls  /
#ls  /work23
#rmdir  /work23
#ls  /

#rm  /work22
rm: cannot remove directory `/work22': 디렉토리입니다

#rm  -r  /work22
비어 있지 않은 디렉토리를 지우려면 rm -r 을 이용할 수 있으나 질문이 출력된다.

#rm  -rf  /work22
(rm  -r  -f  /work22 와 동일)
---> 질문없이 바로 삭제 : 사용할 때 주의

#ls  /
(주의 : rm -rf  /  하면 새로 설치해야 한다.)


11. mv 
move, 이름변경 및 이동

형식)
mv     원본파일(또는 디렉토리)명      대상파일(또는 디렉토리)명
대상파일명이 디렉토리로 존재하면 그 디렉토리 안으로 이동이 되고 존재하지 않으면 이름이 변경된다.
   
옵션)
    -i  : 같은 이름의 파일이 있을 때 질문 출력
    -f  : 동일 파일이 있을 때 확인 질문없이 강제로 덮어쓰기
    -v  : 실행과정 자세히 출력

사용예)
    mv  a.txt  new.txt (이름이 변경됨)
    mv  a.txt  b.txt  /work (현재 디렉토리의 a.txt 와 b.txt 가 /work 디렉토리로 이동이 됨)
    mv  *.txt  /work

♥파일 이름변경 및 이동
#cd  /work
#pwd
(/work)
#ls
apple3.txt
#mv  -v  apple3.txt  orange.txt
이름 변경
#ls

#ls  /tmp
#mv  -v  orange.txt  /tmp
이동(/work 의 orange.txt 가 /tmp 디렉토리로 이동 됨)
#ls
#ls  /tmp
orange.txt 가 이동 된 것을 확인 할 수 있다.

이름을 변경하면서 이동
#cd  /tmp
#pwd
(/tmp)
#mv  -v  orange.txt  /work/pine.txt
또는
#mv  -v  /tmp/orange.txt   /work/pine.txt

#ls
#ls  /work


12. which
알리아스, 실행파일 경로(위치) 출력

#which  ls


13. more
파일의 내용을 한페이지씩 볼 때 사용

14. less
more 를 업그레이드한 프로그램으로 more 와 비슷하다


♥파일 내용 확인하기 : cat, more, less

#cat     /etc/services
#more  /etc/services
한 페이지씩 출력
space bar : next page
q : 종료

♥more 실행시 사용가능한 내부명령어
Space bar 또는 f : 다음 페이지
b                    : 이전 페이지
enter key         : 다음 줄
v                    : vi 편집기로 전환
                     (esc  :q  를 입력하면 more 상태로 전환됨)
/telnet            : telnet 문자열 찾기
                     (n을 누르면 다음 단어로 이동)
h                   : 도움말
ctrl + l(영문엘)  : 화면 다시 그리기(redraw)
=                   : 현재 line number를 보여줌
:f                   : 현재 파일명과 현재 라인 넘버 출력
q                   : more 상태를 빠져나감


#less  /etc/services
more 를 개선한 프로그램
/telnet            telnet 있는 라인으로 이동됨
                     n을 누르면 다음 단어로 이동
       N을 누르면 이전 단어로 이동

h                   도움말 출력, q 를 누르면 도움말 종료
=  ^G  :f          Print current file name.
                     (^G 는 Ctrl + G 를 의미)
G                   마지막 라인으로 이동(g  또는  1G 는 첫번째 라인으로 이동)
q                    less 종료


15. file
대상 파일의 종류(type)를 출력

#file  /bin/ls
#file  /etc/hosts
#cd  /usr/share/backgrounds/images
#ls
#file  stone_bird.jpg

이미지 뷰어 프로그램 : 리눅스 메뉴 표시줄-프로그램-그래픽-Photo Tool

16. head
파일의 앞쪽 부분 10줄 출력
옵션 : -숫자(출력 행수 지정)

#head      /etc/services
#head  -3  /etc/services


17. tail
파일의 뒷쪽 부분 10줄 출력
옵션)
-숫자(출력 행수 지정)

#tail      /etc/services
#tail  -3  /etc/services


♥실습
1. /root 안에 vi 이용하여 today.txt 파일을 아래 내용으로 생성하기
linux
unix
windows

2. 터미널에서 명령어를 이용하여 아래와 같이 설정하기

                        /
          |
        desk(디렉토리)
                        |
        test1(디렉토리)
                      test1.txt(파일)
                        |
        test2(디렉토리)
                      test2.txt(파일)

/desk/test1/test1.txt 는 /root/today.txt 를 복사하고
/desk/test1/test2/test2.txt 는 /root/today.txt 를 이동하기


//////////////////////////////////////////////////////
#cd
#pwd
(/root)
#vi  today.txt
linux
unix
windows
#ls
today.txt
#mkdir  -p  /desk/test1/test2
#cp  today.txt  /desk/test1/test1.txt
#mv  today.txt  /desk/test1/test2/test2.txt
#ls

#ls  /
#ls  -R  /desk

#mkdir
#mkdir  --help
//////////////////////////////////////////////////////


♥VI 설정 파일 사용하기
.vimrc  :  vi  설정파일(로그인한 계정의 홈디렉토리에 존재해야 한다.)

~ 는 홈디렉토리를 뜻하며
#cd  ~  는 로그인한 계정의 홈디렉토리로 이동이 되고
#cd  ~계정명  은  계정의 홈디렉토리로 이동이 된다.
(#cd  ~fedora 는  fedora 계정의 홈디렉토리로 이동이 된다.)

#cd (또는  cd  ~)
#pwd
(/root)
#vi  .vimrc
set  nu
color  evening
#vi  /etc/services
라인번호와 색상이 적용되는지 확인


♥파일전송 명령어
ftp : 텍스트 ftp 프로그램 명령어
#ftp
ftp>help(도움말)
ftp>get(1개 파일 다운)
ftp>mget(여러개 파일 다운)
ftp>put(1개 파일 업로드)
ftp>mput(여러개 파일 업로드)
ftp>hash(자료전송시 # 마크 설정 on/off)
ftp>prompt(자료전송시 확인 질문 on/off)
ftp>ls(서버쪽 목록 출력)
ftp>!ls(자신의 컴퓨터 목록 출력)
!명령어 : 자신의 컴퓨터에서 명령이 실행됨
ftp>cd(서버쪽 디렉토리 이동)
ftp>lcd(자신의 컴퓨터 디렉토리 이동)
ftp>by(접속 종료) 또는 bye 또는 quit

여기까지입니다.. 계속 수업 내용을 남기겠습니다.
강사님 허락 없이 수업 내용 메모해서 하는거긴 한데 ^^;
어찌되었든 보는 분의 환경이 따라하시기 쉽지는 않겠지만 책보다는 좀더 낫지 않을까 싶어서 쭈욱 남겨봅니다.

항상 행.복.하시길~^^

엠토리, 리눅스 세상 접속 - 3rd : vi

2011. 2. 14. 19:46 | Posted by 엠토리

리눅스에 대해 세번째로 남기면서, 수업 4일차의 내용입니다.
이때는 VI 에 대해 진행했습니다.
리눅스는 GUI 보다는 텍스트로 여러가지 명령과 작업을 진행하기 때문에 특히나 이 vi 라는 것에 대해 잘 알아야 한다네요.

vi(visual screen editor) : 리눅스나 유닉스에서 일반적으로 사용하는 텍스트 편집기
자체 윈도우가 있는 것이 아니라 터미널에서 실행 되고, 메뉴가 없다.

vi 는 세가지 상태(모드,Mode)가 있다.
 1) 명령상태 또는 esc 상태
 2) 입력상태 또는 편집 상태
 3) ex상태 또는 :(콜론) 상태

#vi
vi 를 실행하면 처음상태가 명령상태이다. 키보드 입력이 하나의 명령으로 동작한다.

i(insert) 나 a(append) 를 누르면 입력상태로 전환된다.
왼쪽하단에 -끼워넣기- 또는 -INSERT- 로 표시됨

다시 명령상태로 전환하려면 esc 키를 누르면 된다.

ex 상태는 콜론(:) 으로 시작하는 상태를 말한다.
:set  nu   ---> 라인번호 출력
:set  nonu ---> 라인번호 해제

처음 vi 를 실행하면 명령상태 이므로 아래 문자키를 입력하여 입력상태로 만들고 입력을 하게 된다.

■ 입력상태 설명
i : 현재 커서 앞쪽에 입력
a : 현재 커서 뒤쪽에 입력
I : 현재 라인 처음에 입력(라인이 공백으로 시작하면 실제 단어 앞에 입력 됨)
A : 현재 라인 마지막에 입력
o : 현재 라인 아래 줄에 입력
O : 현재 라인 위쪽 줄에 입력

명령상태로 바꾸려면 esc 키를 누르면 된다. (왼쪽 하단에 -끼워넣기- 또는 -INSERT- 가 표시되면 입력상태, 없으면 명령상태이다.)

■ 삭제(esc 키를 눌러서 명령상태에서 입력하는 것임)
x 또는 delete 키 : 한자 삭제
dd : 한 줄 삭제
dw : 한 단어 삭제 (단어 첫번째 글자에 커서를 위치시켜야 함)
d$ : 현재 커서 부터 마지막까지 삭제 ($는 마지막을 의미)
d0 : 현재 커서 부터 라인의 처음부분까지 삭제 (숫자 0 은 처음을 의미)
d^ : 현재 커서 부터 라인의 처음부분까지 삭제 (^ 는 처음을 의미)

■교체
r  : 한 글자 교체(r 누르고 새로운 문자 입력)
cw : 한 단어 교체(cw 누르고 새로운 단어 입력후 esc 누르기)
cc : 한 줄 변경(cc 누르고 새로운 내용 입력후 esc 누르기)

dw 나 cw 이용시 단어의 첫번째 글자에 커서를 위치시키고 작업을 해야 함

리눅스 명령어 상태(# 상태)로 빠져 나가려면 명령상태로 바꾼다음 아래 명령을 입력후 엔터를 치면된다.
:q (저장하지 않고 종료, q - quit)
:wq (저장후 종료, w - write, q - quit)

vi 실행시 파일명을 지정하지 않았으면 리눅스 명령어 상태로 나올 때 저장할 파일명을 입력해야 한다.

:q 엔터를 쳤을 때 하단에 ! to override(덮어쓰려면 ! 더하기) 메시지가 나오는 경우가 있는데
1)읽기 전용파일을 편집후 빠져 나올 때
또는
2)파일을 수정후 저장하지 않고 그냥 빠져 나올 때 이런 메시지가 출력된다.
이때는 !(force - 강제 실행을 의미)를 사용해서 빠져나오면 된다.

:q!  (저장하지 않고 강제 종료)
:wq! (저장후 강제종료)

--->리눅스는 대소문자를 구분함

:q! 를 입력해서 리눅스 명령어 상태로 빠져 나온다.

#vi
입력 상태 만들고 단어를 입력

one
two
three

esc 누른 후 :wq 엔터 입력 ---> 파일명을 지정하지 않아서 메시지가 출력된다.

:wq  test2.txt
---> :wq  저장할파일명
---> 기본적으로 vi 를 실행한 디렉토리(현재 디렉토리)에 저장된다.
---> 다른 디렉토리에 저장하려면  :wq  /tmp/test3.txt  와 같이 경로와 파일명을 입력하면 된다.

#vi  test2.txt
---> vi 실행하면서 test2.txt 파일을 open 하기. 즉 존재하는 파일 편집하기

■ 이전작업 취소 ---> u(undo 를 의미)
■ 이전 작업 반복 ---> .(점)

■ 문자키를 이용한 커서 이동하기(명령상태에서 하기)

             k(위)
h(왼쪽)            l(오른쪽)
            j(아래)

■ 라인번호 출력 및 해제(명령상태에서 입력)
1)
:set  number
:set  nonumber

2)
:set  nu
:set  nonu

3)
:se   nu
:se   nonu

:help (도움말 출력)
:help  usr_03
:help  wq
:q (도움말 종료)

색상 설정하기
:color  evening
:color  morning
:color  desert

■ 검색
/검색단어(명령상태에서 / 누르고 검색단어 입력후 엔터)
--->후방 탐색(앞에서 뒤로 검색)
n 을 누르면 다음 단어로 이동된다.
N 을 누르면 이전 단어로 이동

?검색단어
--->전방 탐색(뒤에서 앞으로 검색)

:set  nohls (검색어 색상 해제)
:set  hls (검색어 색상 출력)

■ 라인이동 및 페이지 이동
shift + g : 마지막 라인으로 이동(대문자 G, go 를 의미)
1번 라인으로 이동하기
---> 1G 또는 :1 엔터

33번 라인으로 이동하기
---> 33G 또는 :33 엔터

ctrl + f(또는 Page Down 키) : next page 로 이동
ctrl + b(또는 Page Up 키)    : previous page 로 이동
b                                   : 이전 단어로 이동
w                                   : next 단어로 이동
enter                              : next 라인으로 이동
space bar                        : 같은 라인에서 next 문자로 이동

esc  :q 입력해서 빠져 나오기

■ 실습
1)메모장 이용하여 아래 내용으로 /root 디렉토리에 redhat.txt 생성하기
2)vi 이용하여 아래 내용으로 /tmp 디렉토리에 redhat2.txt 생성하기

Redhat Linux
CentOS Linux
Debian Linux

--->터미널에서 vi 로 작업후 탐색기(파일 브라우저)에서 확인을 하면 된다.

#vi  -c 100  /etc/services
---> 파일을 open 하면서 100 번 라인으로 이동하기
-c 는 command 를 의미

또는

#vi  +100  /etc/services

#vi  -c  "color  morning"  /etc/hosts
---> O
#vi  -c"color  morning"  /etc/hosts
---> X

#vi  +"color  morning"  /etc/hosts
---> O
#vi  +  "color  morning"  /etc/hosts
---> X

리눅스 명령어 대기상태로 빠져 나오기
#vi  linux.txt  (---> vi  저장할파일명)
~ 표시는 라인에 아무 내용도 없다는 의미

아래와 같이 입력하기

apple
apple  apple  apple

orange
orange  orange  orange

mango
mango  mango  mango

■ 치환
:1,10s/원래단어/바꿀단어 ---> 1번 라인에서 10번 라인까지 변경
:%s/원래단어/바꿀단어   ---> 파일 전체에서 첫번째 단어만 변경
:%s/원래단어/바꿀단어/g ---> 파일 전체에서 한 줄의 모든 단어 변경
:%s/원래단어/바꿀단어/gc ---> 파일 전체에서 한 줄의 모든 단어 변경시 확인질문 출력(confirm)
:%s/apple/tico (명령상태에서 입력후 엔터-결과 확인)
:%s/orange/matiz/g (g 는 global 을 의미)

■ 복사 및 붙여넣기
한줄 복사      : yy (yank)
한줄 붙여넣기 : p (paste) - 현재 라인 아래 줄에 붙여넣기
                P - 현재 라인 윗 줄에 붙여 넣기
여러줄 대상으로 할 때는 숫자이용
숫자-yy-p ---> 여러 줄 복사해서 붙여넣기
3dd   (3줄 삭제)
3p    (3번 붙여넣기)

■ 라인합치기 : J (Join)

■ 파일편집 및 읽기
:e   파일명(기존 파일 편집하기)
:e!  파일명(현재 작업을 중단하고 다른 파일 편집)
:r   파일명(현재 라인 아래에 기존 파일 읽어오기)

■ 다중파일 편집
vi  파일명1  파일명2  ...
:args (목록 출력)
:n (다음 파일로 이동)
:prev (이전 파일로 이동)

■ vi 에서 저장후 종료 방법
1) :wq
2) ZZ(: 없이 대문자로 입력)
3) :x
4) :exit

■ 블록지정
shift + v : 라인 단위 블록 지정(shift + v 를 누른후 화살표키를 이용하여 블록을 지정)
블록을 지정한 상태에서 y : 복사하기
블록을 지정한 상태에서 d : 삭제하기
블록을 지정한 상태에서 p : 붙여넣기

이상입니다. (현재 포스팅하는 시간은 수업중입니다 ㅋ)
아무쪼록 항상 행.복.하시길~^^

지난번에 이어서 리눅스 초보가 남깁니다 ^^

2일차까지 수업을 통해 실제 CentOS 4.5 를 VMware 안에 설치하였습니다.
이제는 이 설치된 리눅스를 가지고 앞으로 수업을 진행을 한다고 하니, 저 또한 수업 내용을 정리하면서 계속 포스팅하겠습니다.

리눅스는 로그인을 해야 사용이 가능합니다. 이때 로그인을 위해 필요한 것이 계정인데요.
이 계정은 아이디와 비번을 말합니다.(너무나 당연한 것을 왜 쓰는 지 아시는 분? ^^? 이것을 분실하지 않아야 하기 때문입니다!)
참고 : 리눅스 명령어를 입력해서 실행하고 결과를 확인할 수 있는 프로그램을 터미널이라고 합니다.(MS-DOS 창과 유사)

계정 종류
 - 슈퍼유저(Super User) : 루트(root)를 의미, 리눅스의 모든 작업을 할 수 있는 관리자 계정 터미널을 실행하면 # 으로 나타난다.
 - 일반유저 : 루트를 제외한 사용자 모두. 일반적인 프로그램 실행은 가능하나, 네트워크 설정, 하드디스크 작업 등 시스템 작업은 할 수 없다.  터미널 실행하면 $ 로 나타난다.
 - 일반 계정에서 루트로 전환 : su 명령 이용

리눅스 디렉토리, 구조 및 기능 개요

참고 : 리눅스 자격증


리눅스도 윈도우 처럼 마우스를 통해 여러가지 명령 및 프로그램을 실행할 수 있습니다.
-  리눅스 파일브라우저(=윈도우 탐색기) : 메뉴표시줄 - 프로그램 - 파일브라우저
-  바탕화면 변경 : 메뉴표시줄 - 프로그램 - 환경설정 - 데스크탑 바탕
- 루트 암호 변경하기 : 메뉴표시줄 - 프로그램 - 시스템 설정 - 루트 암호

리눅스 명령어(Command) 형식

기본형식 :  #명령어 [옵션] [인자값]
[] 부분은 생략 가능하며 명령어와 옵션 인자값 구분은 스페이스바(공백) 로 구분을 해 주어야 한다. 명령어나 옵션 다음에 적는 단어를 argument, 인자값, 인수 라고 부른다. 옵션은 보통 - 를 지정하고 생략 가능한 경우도 있다.

실행 종류
 - 명령어 사용하는 경우  예) #ls
 - 명령어 옵션 사용하는 경우, 여러번 사용 가능  예) #ls -l      #ls -a -l     #ls -al     # ls -la
 - 명령어 옵션 인자값 사용하는 경우, 옵션과 달리 인자값의 경우 순서를 지켜야 하는 경우도 있다.  예) #ls -l /tmp
 - 한 줄에 여러 명령어 를 사용하는 경우  예) #ls ; date

사용법 및 옵션은 man 또는 --help 사용해서 확인 가능하다.
man 명령어 : 매뉴얼(설명서) 페이지 확인, 명령어의 --help 옵션과 유사

형식
#man  옵션  리눅스명령어
#명령어  --help
예)
#man  ls
q : 매뉴얼 종료
#man  -K  calendar    ---> 달력과 관련된 명령어를 확인하는 방법
-K(대문자) : 키워드 지정 옵션
#ls  --help

터미널 실행하기
#man  ls
---> 터미널에서 man ls 를 입력후 엔터누르기(#은 입력하는 것이 아님)
---> ls 명령어에 대한 매뉴얼이 출력된다.
     ls 는 파일이나 디렉토리 목록 확인 명령, 리눅스의 명령어는 .exe .com 등 확장자로 구분하지 않는다.

스페이스바 : next page
f(또는 ctrl + f) : next page
b(또는 ctrl + b) : previous page
엔터 : next line
PageUp, PageDown, 화살표 키를 이용할 수 도 있다.
h : 매뉴얼 도움말(help) 출력(도움말 종료는 q)
-N 입력후 엔터 : 라인번호 출력
-n 입력후 엔터 : 라인번호 해제
100G : 100 번 라인이 있는 페이지로 이동(G 는 Go 를 의미)
q : 매뉴얼 종료(quit)

#ls  --help
페이지 이동은 shift + page up, shift + page down (또는 마우스로 스크롤바 이동)

whereis 명령어 : 실행파일 위치, 매뉴얼 파일 위치 출력
passwd : 암호를 설정하거나 변경하는 명령어

#man  passwd
--->1번 설명서(명령어) 확인
기본적으로 작은 번호의 설명서가 먼저 출력된다.
PASSWD(1)                       User utilities                       PASSWD(1)

NAME
       passwd - update a user’s authentication tokens(s)

#man  5  passwd
---> 5번 설명서(설정파일) 확인

참고 : 메뉴얼의 종류(Section)

passwd 명령어
루트 사용자는 일반 계정의 암호를 변경할 때 이전 암호를 묻지 않는다. 일반 계정의 자신의 암호를 바꿀 때 이전 암호를 물어본다.

루트       : 모든 사용자의 암호 변경 가능
일반 계정 : 자신의 암호만 변경 가능

#passwd  또는 #passwd  root
---> 현재 계정인 루트 계정의 암호 변경

#passwd  fedora
---> fedora  계정의 암호 변경

유동아이피 설정
 - 편지를 보낼 때 보내는 사람, 받는 사람 주소가 필요한 것처럼 컴퓨터끼리 데이타를 주고받기 위해서는 아이피 주소(IP Address)가 필요하다. 아이피 주소는 유동아이피,고정아이피,공인아이피,사설아이피 등으로 분류할 수 있다.
1.유동아이피(DHCP) : 리부팅하면 변경될 수 있는 아이피 // DHCP-Dynamic Host Configuraton Protocl
2.고정아이피(Static IP) : 리부팅해도 변경되지 않는 아이피

유동아이피 설정 관련 명령어 : netconfig, service, ifconfig, ping

터미널 실행하기
#netconfig
---> netconfig : 네트워크 설정 명령어
---> 터미널에서 netconfig 입력하고 엔터를 치면 프로그램이 실행된다. (#은 입력하는 것이 아니다.)
---> Cent 5 에서는 netconfig 명령이 없어졌으므로 system-config-network-tui 를 이용하면 된다.

네트워크 설정 질문 : "예" 에 커서 위치시키고 엔터입력

[*] 동적 IP 주소 자동설정 사용(BOOTP/DHCP)
---> 스페이스 바 이용하여 체크하기, 탭키 눌러서 커서를 "확인"으로 보낸 후 엔터 입력
(netconfig 로 설정하면 바로 적용되지 않고 리부팅 하거나 서비스를 재시작 해 주어야 반영된다.)

#service  network  restart
service : 서비스 구동 명령어
network : 서비스 종류
restart : 재시작(stop 과 start 를 한꺼번에 해 준다.)

#ifconfig(윈도우 도스창에서는 ipconfig 사용)
ifconfig : 아이피 확인 명령어
eth0 : 첫번째 랜카드(두번째 랜카드는 eth1 이 된다.)
lo   : 컴퓨터 자신을 테스트 할 때 사용되는 가상 인터페이스

#ping  -c3  168.126.63.1
ping : 네트워크 점검 명령어
-c3 : 패킷 갯수 제한 옵션(count, 데이타를 3개 보내는 옵션)
168.126.63.1 : 한국통신 네임서버 아이피

64 bytes 로 출력 되어야 정상

[리눅스 가상머신]-----------------<가상 네트워크>--------------------[인터넷]

리눅스 웹브라우저 실행해서 인터넷 테스트
메뉴표시줄-"명령" 메뉴 오른쪽 지구 아이콘 클릭 

putty 사용하기
윈도우에서 리눅스 서버로 로그인 할 수 있는 원격(Remote) 터미널 프로그램

Host Name : 192.168.x.x (리눅스 아이피를 적는다.)
Port : 22
Protocol : SSH 선택
Saved Sessions : LINUX1PM730
save 버튼 누르기
open 버튼 누르기
Security alert 메시지창 나오면 "예" 버튼을 누른다.
처음 접속할 때만 메시지창이 나오므로 이전에 사용했으면 alert 메시지가 안 나올 수 도 있다.

login as: root
root@192.168.x.x's password: 루트 암호 입력하기 (입력할 때 암호는 안 보인다.)
Last login: Sat Jan 10 04:53:21 2009
[root@cent ~]#

---> putty 같은 프로그램을 이용하여 원격지에 있는 리눅스 서버에 로그인한 후 작업을 할 수 있다.

참고 : putty 설정 변경하기


이상 3일차 수업에 대한 내용 모두를 남깁니다. 생각보다 많네요 ^^;
다만 이는 수업을 들으면서 있던 내용인 만큼 실제로 따라하기 쉽지 않을 수 있습니다. 그렇지만 차근차근 보시면 좋을 듯 합니다.

항상 행.복.하시길~^^

- 이전 관련 포스팅 링크 -
2011/02/12 - [◇ Tip & Info ◇] - 엠토리, 리눅스 세상 접속 - 1st


와우 한달만에 포스팅을 합니다 ^^;

엠토리가 리눅스를 학원에서 접속했습니다.
학원은.. (주)솔데스크 라고 종로2가에 있는 곳입니다. 젊음의거리(구 피아노거리) 옆에 있는 베니건스 건물이지요.



암튼 그건 그런데요.
이곳에서 수업 진행하는 리눅스 수업의 개괄적인 부분을 남겨서 혹시나 리눅스를 처음 접하거나 접하려는 분께 이렇구나 싶은 것을 남겨봅니다 ^^

1일차. 수업 OT와 VMware 소개
=> 이곳에서의 리눅스 수업이 총 2개월로 이루어지는데, 1개월차 수업에서 강사 스스로가 어떻게 진행하겠다는 것을 언급하네요.
참고로 전 1개월만 무료수강을 합니다. 이유는 노코멘트 ^^;;
제가 들을 수업은 1개월 과정으로 총 4주, 20일간, 평일 19시반~22시반에 진행되었답니다.
수업 진행을 위해서 오래전에는 리눅스를 직접 데스크탑(가짜 서버)을 활용했지만 지금은 가상머신을 활용하는데, 그중에 많이 사용하는 VMware 이기에 이것에 대해 설명해 줍니다.
또한 강의에 필요한 FTP 프로그램(요기 강사는 파일질라를 쓰네요)과 아크로벳리더(pdf 자료), 알집(압축)도 언급했습니다.
물론 강의에서 활용하는 ftp 서버 등도 알려줬지만 이는 학원 강사의 대외비니까 생략..
강의의 메인 교재는 아래의 "CENTOS 5.3" 라고 하네요. (실제 수업 진행은 4.5 버전인데 --;)

CENTOS5.3
카테고리 컴퓨터/IT > OS > 리눅스
지은이 서자룡 (혜지원, 2009년)
상세보기

그리고 나서 VMware Workstation 7을 설치하면서 사용하는 방법에 대해서 설명해 주는 것으로 하루 세시간의 학원 첫날 강의를 마쳤답니다.

2일차, 리눅스 설치
화요일인 이틀차에는 실질적인 리눅스 설치를 첫날 설명했던 VMware 안에서 설치하는 법을 알려주었습니다.
이때 사용한 리눅스 설치프로그램은 iso 화일로 만들어진 가상CD로 이루져있었습니다.
결국 리눅스 설치는 VMware 사용을 통해서 이루어졌고, 자동화 되어있는 것이 있어서 몇가지 옵션 체크만 신경쓰고 다음(넥스트)만 하면 의외로 손쉽게 설치되더군요 ^^;
그러니 참고 자료만 남겨봅니다. 아, 수업에서 사용하는 리눅스는 CentOS 4.5 버전입니다..
   - VMware 홈페이지나 자료실을 통해서 데모 또는 쉐어 프로그램을 구할 수 있습니다.
   - 파일질라 다운로드 페이지
   - CentOS 다운로드 페이지 : 참고로 저의 경우 버전 4.5를 가상CD가 만들어진 것을 활용했습니다.

제가 했던 설치 과정을 간단히 텍스트만 남기자면. ^^;
1. VMware에서 가상머신 만들기 => Typical 선택하여 진행 => 실제 리눅스 인스톨은 나중 선택 => 가상머신의 종류(시스템은 리눅스, 버전은 CentOS)를 선택 => 가상머신의 이름과 경로를 지정 => Finish


2. 가상머신에서 ISO 설치 CD를 통해 리눅스(CentOS) 설치
=> 1번 CD 선택하여 진행, VMware 하단 CD-ROM 연결에 대해서 체크하고 진행


3. 알림 메시지에 따라 VMware의 CD 연결(Connetc)과 가상CD 이미지 파일(*.iso) 선택하여 진행
Tip : VMware 의 스냅샷 기능을 통해 CD 교체 확인전에 과정을 저장해두는 것 필요. 설치 오류 발생시 이전 단계 진행까지 쉽게 되돌릴 수 있습니다.

이렇게 진행하면 리눅스 설치가 됩니다.

첨부화일의 한계가 있어서 오늘 포스팅은 여기까지 하겠습니다. ^^;;
3일차부터는 또 여건되는대로 남길께요 ㅎ

저도 잘 모르지만 리눅스를 처음 접하는 이들에게 조금이라도 도움되길 바라면서 남겨봅니다~
항상 행.복.하시길~^^
이전 1 2 3 4 5 6 다음