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

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

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

[링크(Link)]
<하드 링크와 심볼릭 링크>

◆리눅스 파티션 구조

---------------
파티션테이블
---------------
super block
---------------
inode table
---------------
data block
---------------

<하드 링크>
1) 동일한 데이타 블록을 참조하는 서로 다른 파일 이름
2) 파일에 대해서만 만들 수 있다.(디렉토리는 만들수 없음)
3) 같은 파티션 내에서만 만들 수 있다.
4) 하드 링크를 만들면 ls -l 의 두번째 숫자가 하나 증가한다.
5) 하드 링크가 있으면 원본이 없어져도 데이타에 접근 가능하다.
6) 하드 링크를 만들어도 하드디스크 용량은 늘어나지 않는다.
7) 아이노드(파일을 구분하는 번호)가 같다.


<심볼릭 링크>
1) 윈도우의 바탕화면 단축 아이콘과 비슷하다.
2) 파일 및 디렉토리에 대해서 모두 만들 수 있다.
3) 작은 용량의 새로운 파일이다. ---> 아이노드가 원본과 틀리다.
4) 다른 파티션에도 만들 수 있다.
5) 원본을 삭제하면 사용할 수 없다. 

//////////////////////////////////////////////////////
스크립트 : 리눅스 명령어와 프로그래밍 요소(if문 등)로
             이루어진 실행가능한 텍스트 파일
      여러가지 작업을 한 번에 할 수 있어서
      리눅스에서 많이 사용된다.
////////////////////////////////////////////////////// 

#cd  /work
#vi  run.sh (--->간단한 형태의 스크립트 파일)
date
cal

#chmod u+x run.sh
#ll run.sh
-rwxr--r--  1 root root 9 Aug 12 14:22 run.sh
스크립트 파일의 경우 r 과 x 권한이 있어야
일반계정도 실행할 수 있고
루트의 경우에는 실행권한만 있어도 된다.

//////////////////////////////////////////////////////
캡춰 결과
[root@cent work]# ll run.sh
-rw-r--r--  1 root root 9 10월  8 00:08 run.sh
[root@cent work]# chmod u+x run.sh
[root@cent work]# ./run.sh
//////////////////////////////////////////////////////

 
◆하드 링크 생성 방법
ln  원본파일명  링크파일명

#ll run.sh
-rwxr--r--  1 root root 9  7월 15 13:14 run.sh
#
#ln  run.sh  good.sh
#ll
합계 8
-rwxr--r--  2 root root 9  1월  7 12:31 good.sh
-rw-r--r--  1 bin  root 0  1월  7 11:50 hello.exe
-rwxr--r--  2 root root 9  1월  7 12:31 run.sh
#
#./good.sh (run.sh 를 실행한 것과 동일)

 
#ll run.sh good.sh
-rwxr--r--  2 root root 9 Aug 12 14:22 good.sh
-rwxr--r--  2 root root 9 Aug 12 14:22 run.sh
#

#ls -il (아이노드 넘버 출력 ls 옵션 : -i)
합계 8
376145 -rwxr--r--  2 root root 9  1월  7 12:31 good.sh
376143 -rw-r--r--  1 bin  root 0  1월  7 11:50 hello.exe
376145 -rwxr--r--  2 root root 9  1월  7 12:31 run.sh
#
---> 하드링크 파일은 아이노드가 똑 같다.
      복사한 경우에는 아이노드가 틀리다.

◆하드링크 예
#ls -il /bin/gzip /bin/gunzip /bin/ls
245334 -rwxr-xr-x  3 root root 56048  9월 20  2006 /bin/gunzip
245334 -rwxr-xr-x  3 root root 56048  9월 20  2006 /bin/gzip
 

#chmod g-r,o-r good.sh
#ll run.sh good.sh (또는 ll  *.sh)
-rwx------  2 root root 9 Aug 12 14:22 good.sh
-rwx------  2 root root 9 Aug 12 14:22 run.sh
#
하드링크는 아이노드가 동일하므로 둘 다 똑같이 출력된다.

#rm run.sh
rm: remove regular file `run.sh'? y
#ls
ex3.txt   good.sh       hell.exe  hello.exe  services

#./good.sh (원본을 지워도 하드링크 파일로 실행할 수 있다.)

#ll good.sh
(원본을 삭제했으므로 링크카운트가 2에서 1로 감소)
-rwx------  1 root root 9 Aug 12 14:22 good.sh
#

Q)하드링크 된 파일 찾기
(find 명령 이용하여 gzip 의 하드 링크 파일 찾기)

#man  find

       -inum n
              File has inode number n.

#ls -il /bin/gzip
635286 -rwxr-xr-x  3 root root 56048  9월 20  2006 /bin/gzip

#find  /bin  -inum  아이노드번호
/bin/gunzip
/bin/gzip
/bin/zcat

cat : 파일을 읽어서 출력
zcat : gzip 파일을 압축 해제후 읽어서 출력

#cd  /tmp
#ls
boot2.tar.gz
#cat  my1.tar.gz  |  file  -  또는  #file  my1.tar.gz
gzip 으로 출력( - 는 파이프를 사용하라는 의미)


#zcat  my1.tar.gz  |  file  -
tar 로 출력

 ◆심볼릭 링크 생성 : -s 옵션 사용
ln  -s  원본파일명  링크파일명

#cd  /work
#pwd
/work
#ls
#ln  -s  good.sh  go
#

#ll good.sh go
lrwxrwxrwx  1 root root 7 Aug 12 14:47 go -> good.sh
-rwx------  1 root root 9 Aug 12 14:22 good.sh
#
---> 심볼릭 링크파일은 l 로 시작해서 퍼미션이 모두
셋팅되서 나타나므로 실제 퍼미션은 원본 파일을 확인해야 한다.


#./go(--->good.sh 가 실행된다.)

 

#ls  -il  good.sh  go
981304 lrwxrwxrwx  1 root root 7 Aug 12 14:47 go -> good.sh
981301 -rwx------  1 root root 9 Aug 12 14:22 good.sh
#
---> 심볼릭 링크는 새로운 파일이므로 아이노드 번호가 원본과 틀리다.

#chmod u-w go
#ls -il good.sh go
981304 lrwxrwxrwx  1 root root 7 Aug 12 14:47 go -> good.sh
981301 -r-x------  1 root root 9 Aug 12 14:22 good.sh
#
---> 원본의 퍼미션이 변경된다.

#rm  good.sh
#ll
#./go
--->원본 파일을 삭제했으므로 실행되지 않는다.

//////////////////////////////////////////////////////
결과 캡춰

#rm good.sh
rm: remove 일반 파일 `good.sh'? y
#ll
합계 9784
drwxr-xr-x  3 root root    4096  6월  9 15:04 boot
lrwxrwxrwx  1 root root       7  6월 16 20:31 go -> good.sh
-rw-r--r--  1 root root     122  6월  9 19:42 hello.c
-rw-r--r--  1 bin  root       0  6월 16 19:00 hello.exe
-rw-r--r--  1 root root      52  6월  9 18:00 linux.txt
-rw-r--r--  1 root root      52  6월  9 18:00 linux2.txt
-rw-r--r--  1 root root      53  6월  9 18:11 linux3.txt
-rw-r--r--  1 root root   20381  6월  9 17:55 services
-r--r--r--  1 root root  116262  4월 22 00:46 zip-2.3-27.i386.rpm
drwxr-xr-x  3 root root    4096  6월 16 20:28 zzz
-rw-r--r--  1 root root       0  6월 16 20:26 zzz.exe
#./go
-bash: ./go: 그런 파일이나 디렉토리가 없음
#

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


<백업(BACKUP>
원본 파일이나 디렉토리를 다른 디렉토리나 다른 하드디스크,
다른 컴퓨터에 저장해 두는 것을 백업이라 하고
예기치 않은 데이타 손실이 발생했을 경우 백업을 해 두었다면
다시 데이타를 원상복구 할 수 있다.
시스템 관리자의 기본적이면서도 중요한 업무중의 하나가 백업이다.
tar, dd, mkisofs, cdrecord 등을 이용하여 백업을 할 수 있고
간단한 파일은 복사(cp) 를 해도 된다.

백업의 대상은 파티션 전체, 특정 디렉토리나 파일, 응용 프로그램,
시스템 설정파일, 로그파일, 사용자 파일 및 디렉토리 등이다.

1. tar : 디렉토리 백업, 운영체제 백업
2. mkisofs : CD 이미지 파일로 백업
3. dd : 파티션 복제

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

-------------------
표준입력(stdin,0)    <-------------------  키보드
-------------------

-------------------
표준출력(stdout,1)   -------------------> 모니터
-------------------

#man  tar
       -f, --file [HOSTNAME:]F
              use archive file or device F (default "-", meaning stdin/stdout)

#cd  /work
#tar  cvf  -  score.c
#tar  cvf  -  score.c  |  tar  tvf  -
       ------------------------------
       파이프를 이용한 전송---->
       ------------------------------

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

♠tar 를 이용한 로컬 데이타 미러링(mirroring)
---> A 폴더를 B 폴더로 복제할 때 사용
복사를 할 경우 옵션을 사용하지 않을 경우 원본 파일의 정보가 유지되지
않으므로 원본 파일의 정보를 유지하고 싶을 때 이 방법을 사용한다.

형식)
tar   cpf   -   --directory=백업경로   .   |   (cd 백업저장경로 ; tar  xpf  -)


#mkdir  /home3
#cd  /home
#touch  bk1.txt  bk2.txt  bk3.txt
#tar   cpf   -   --directory=/home  .  |  (cd  /home3  ;  tar  xpf  -)
#ls  /home
#ls  /home3

♠tar 를 이용한 리눅스 운영체제 백업
/proc, /mnt, /media, /tmp 디렉토리는 제외해도 되며, 제외할 디렉토리는
--exclude 옵션을 이용한다.
형식)
tar  cpvfz  /backup/백업파일명.tar.gz  --exclude=제외디렉토리  --absolute-name  /

#date
#date  +%Y%m%d
---> 날짜를 변환해서 출력시키기
변환 문자 :
%Y 년도(Year)
%m 월(month)
%d 일(day)

#mkdir  /backup
#tar  cpvfz  /backup/mybackup_`date  +%Y%m%d`.tar.gz  --exclude=/proc  --exclude=/tmp  --exclude=/media  --exclude=/backup  --absolute-name  /

♠tar 를 이용한 증가형 백업
1. 전체백업(full backup)
--->처음 백업할 때
2. 증가형 백업(incremental backup)
--->풀백업을 한 후 변경된 내용만 백업할 때
    --listed-incremental 또는 -g 옵션 사용

#mkdir  /home2
#cd /home2
#touch  data1.txt  data2.txt  data3.txt

#tar  zcpf  /backup/full.tar.gz  --listed-incremental  /backup/bklist.txt  /home2

bklist.txt 파일에는 백업되는 파일정보(파일이 포함된 디렉토리의 시간정보)가 기록되고
증가형 백업을 할 때 이용된다.
tar  zcvpf 를 사용하면 백업되는 파일이 화면에 출력되고
v 를 빼고 tar  zcpf 를 사용하면
tar: Removing leading `/' from member names
메시지만 출력된다.

#ls /backup
bklist.txt  full.tar.gz

#pwd
(/home2)
#touch  data5.txt

               /
               |
   +---------+---------+
backup                  home2
1,2,3                     1,2,3,5

/home2 에 있는 자료를 /backup 디렉토리 안에
incre.tar.gz 로 증가형 백업하기

#tar  zcvpf  /backup/incre.tar.gz  --listed-incremental  /backup/bklist.txt  /home2

--->/home2 에 있는 data1.txt, data2.txt, data3.txt 는
    /backup 에 이미 저장되어 있으므로
    data5.txt 만 백업됨

#cd  /backup
#ls

#tar ztvf full.tar.gz
data1.txt
data2.txt
data3.txt

#tar ztvf incre.tar.gz
data5.txt

 

☞복원
#pwd
(/backup)
#tar  zxvf  full.tar.gz  -g  ./bklist.txt
#ls
#ls home2(/backup/home2 가 보여진다.)
data1.txt  data2.txt  data3.txt 
#
/backup/home2 에 새로운 파일을 만들었을 경우
-g 옵션을 생략하면 새로운 파일이 보존이 되지만
-g 옵션을 이용하면 원본 그대로 복구하므로 새 파일이 삭제 된다.

#tar zxvf incre.tar.gz  -g  ./bklist.txt
home2/
home2/data5.txt
#
#ls home2
data1.txt  data2.txt  data3.txt  data5.txt
#

♠CD 이미지 백업
CD 레코더 장치 검색
#cdrecord  -scanbus


☞실제 리눅스 머신에서 테스트한 결과
[root@server ~]# cdrecord -scanbus
Cdrecord-Clone 2.01 (cpu-pc-linux-gnu) Copyright (C) 1995-2004 J▒rg Schilling
Note: This version is an unofficial (modified) version with DVD support
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to http://bugzilla.redhat.com/bugzilla
Note: The author of cdrecord should not be bothered with problems in this version.
Linux sg driver version: 3.5.27
Using libscg version 'schily-0.8'.
cdrecord: Warning: using inofficial libscg transport code version (schily - Red Hat-scsi-linux-sg.c-1.83-RH '@(#)scsi-linux-sg.c        1.83 04/05/20 Copyright 1997 J. Schilling').
scsibus1:
        1,0,0   100) 'TSSTcorp' 'CDDVDW SH-S223C ' 'SB02' Removable CD-ROM
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *
[root@server ~]#

하드디스크 데이타를 CD 이미지 파일로 백업하기
#mkdir  /backup3
#cd  /backup3
#mkisofs  -R  -J  -V  Linux  -o  homeimage.iso  /home
-R : 퍼미션 유지
-J  : 긴 파일이름 인식
-V :  볼륨 이름
-o : 출력 파일명

 

CD 이미지 파일을 마운트해서 사용하기
#mkdir  /mnt/test
#mount  -t  iso9660  -r  -o  loop  homeimage.iso   /mnt/test

//////////////////////////////////////////////////////////////////////////
#man  mkisofs

       -J     Generate Joliet directory records in addition to regular iso9660
              file  names.   This is primarily useful when the discs are to be
              used on Windows-NT or Windows-95 machines.  The Joliet filenames
              are specified in Unicode and each path component can be up to 64
              Unicode characters long.  Note that Joliet is no standard - CD’s
              that  use  only  Joliet  extensions  but  no standard Rock Ridge
              extensions may usually only be used on Microsoft Win32  systems.
              Furthermore, the fact that the filenames are limited to 64 char-
              acters and the fact that Joliet uses the UTF-16 coding for  Uni-
              code characters causes interoperability problems.

       -R     Generate SUSP and RR records using the Rock  Ridge  protocol  to
              further describe the files on the iso9660 filesystem.

       -V volid
              Specifies the volume ID (volume name or  label)  to  be  written
              into  the master block.

#man  mount

       -r     읽기만 가능하게 마운트한다. 같은 옵션으로는 -o ro   이
              있다.

iso9660 화일 시스템에 대한 옵션
       Normal iso9660 화일명이 8.3 형식으로 나타나게 한다.( 즉 DOS 식 화 일 명
       제 한을 사용한다. ) 그리고 모두 대문자로 표시되게 한다. 또한 소 유권, 허
       가권, 링크 수, 블럭/문자장치 표시 등의 필드를 없앤다.

       락 릿지(Rock Ridge)는 iso9660 시스템에 유닉스의 모든 기능을 제공하는 확
       장기능이다.

루프 장치(THE LOOP DEVICE)
       또 다른 타입 중 하나로서 루트 장치를 통한 마운트를 들 수 있다.

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

CD 이미지 파일을 공 CD 에 저장하기
#cdrecord  dev=1,0,0  -data  -v  -eject  speed=4  homeimage.iso

dev=scsibus 번호, target 번호, lun 번호(cdrecord  -scanbus 로 확인)
data : 데이타 CD 지정
eject : 작업후 CD 배출
speed : 쓰기 속도 지정

//////////////////////////////////////////////////////////////////////////
#man  cdrecord

    -data  If  this  flag is present, all subsequent tracks are written
              in CD-ROM mode 1 (Yellow Book) format. The data  size  is  a
              multiple  of  2048  bytes.   The file with track data should
              contain an ISO-9660 or  Rock  Ridge  filesystem  image  (see
              mkisofs  for  more  details).

    -eject Eject  disk  after  doing  the  work. 

speed=#
              Set  the  speed factor of the writing process to #.  # is an
              integer
//////////////////////////////////////////////////////////////////////////

☞실제 리눅스 머신에서 테스트한 결과
[root@server ~]# cdrecord dev=1,0,0 -data -v -eject speed=4 aa.iso
cdrecord: No write mode specified.
cdrecord: Asuming -tao mode.
cdrecord: Future versions of cdrecord may have different drive dependent defaults.
cdrecord: Continuing in 5 seconds...
Cdrecord-Clone 2.01 (cpu-pc-linux-gnu) Copyright (C) 1995-2004 J▒rg Schilling
Note: This version is an unofficial (modified) version with DVD support
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to http://bugzilla.redhat.com/bugzilla
Note: The author of cdrecord should not be bothered with problems in this version.
TOC Type: 1 = CD-ROM
scsidev: '1,0,0'
scsibus: 1 target: 0 lun: 0
Linux sg driver version: 3.5.27
Using libscg version 'schily-0.8'.
cdrecord: Warning: using inofficial libscg transport code version (schily - Red Hat-scsi-linux-sg.c-1.83-RH '@(#)scsi-linux-sg.c        1.83 04/05/20 Copyright 1997 J. Schilling').
SCSI buffer size: 64512
atapi: 1
Device type    : Removable CD-ROM
Version        : 5
Response Format: 2
Capabilities   :
Vendor_info    : 'TSSTcorp'
Identifikation : 'CDDVDW SH-S223C '
Revision       : 'SB02'
Device seems to be: Generic mmc2 DVD-R/DVD-RW.
Current: 0x0000
Profile: 0x002B
Profile: 0x001B
Profile: 0x001A
Profile: 0x0016
Profile: 0x0015
Profile: 0x0014
Profile: 0x0013
Profile: 0x0012
Profile: 0x0011
Profile: 0x0010
Profile: 0x000A
Profile: 0x0009
Profile: 0x0008
Using generic SCSI-3/mmc   CD-R/CD-RW driver (mmc_cdr).
Driver flags   : MMC-3 SWABAUDIO BURNFREE
Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R
Drive buf size : 720896 = 704 KB
FIFO size      : 4194304 = 4096 KB
Track 01: data    33 MB
Total size:       38 MB (03:47.34) = 17051 sectors
Lout start:       38 MB (03:49/26) = 17051 sectors
cdrecord: Input/output error. test unit ready: scsi sendcmd: no error
CDB:  00 00 00 00 00 00
status: 0x2 (CHECK CONDITION)
Sense Bytes: 70 00 02 00 00 00 00 0A 00 00 00 00 3A 01 00 00
Sense Key: 0x2 Not Ready, Segment 0
Sense Code: 0x3A Qual 0x01 (medium not present - tray closed) Fru 0x0
Sense flags: Blk 0 (not valid)
cmd finished after 0.001s timeout 40s
cdrecord: No disk / Wrong disk!
[root@server ~]#

♠실습
1. /dev/hda1, /dev/hdb1 을  150M 으로 파티션 설정하기
2. /dev/hda1 을 포맷한 후 /disk2 디렉토리에 마운트하기
   (/disk2 없으면 #mkdir  /disk2 로 생성)
3. /backup3 디렉토리를 /disk2 에 복사하기
4. /dev/hda1 마운트 해제하기
5. dd 이용하여 /dev/hda1 을 /dev/hdb1 으로 복제하기

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

#fdisk  /dev/hda
파티션 모두 삭제(d 입력)
n
p
1
엔터
+150M
w
#

/dev/hdb 도 동일하게 파티션 설정

#mkfs.ext3  /dev/hda1
#mount /dev/hda1 /disk2
#
#ls /disk2
lost+found
#
#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  7.4G  6.4G  54% /
none                  252M     0  252M   0% /dev/shm
/dev/sda3             4.3G   47M  4.1G   2% /home
/backup3/homeimage.iso
                      5.6M  5.6M     0 100% /mnt/test
/dev/hda1             140M  5.6M  127M   5% /disk2
#
#cp -r /backup3 /disk2
#umount  /disk2

dd 명령어는 마운트를 해제후 사용해야 함

#dd if=/dev/hda1 of=/dev/hdb1 bs=1024
147136+1개의 레코드를 입력하였습니다
147136+1개의 레코드를 출력하였습니다
#
#mkdir /disk3
#mount /dev/hdb1 /disk3
#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              15G  7.4G  6.4G  54% /
none                  252M     0  252M   0% /dev/shm
/dev/sda3             4.3G   47M  4.1G   2% /home
/backup3/homeimage.iso
                      5.6M  5.6M     0 100% /mnt/test
/dev/hdb1             140M   12M  121M   9% /disk3
#ls /disk3
backup3  lost+found
#ls /disk3/backup3/
homeimage.iso
#
//////////////////////////////////////////////////////////////////////////


[부팅과정]

1. BIOS 단계
POST(Power On Self Test)
하드웨어에 문제가 없는지 체크하는 과정,
BIOS(Basic Input/Output System)에 의해서 실행

CMOS(Complementary Metal Oxide Semiconductor) : 기억장치 종류
BIOS는 CMOS 설정에 의해서 부트디스크의
가장 앞쪽 부분인 MBR을 읽는다.

2. MBR(Master Boot Record)
MBR의 크기는 512 바이트
MBR에 부트로더 정보가 들어 있다.

3. 부트로더(Boot Loader)
(부팅을 도와주는 프로그램)
LILO-이전에 사용되던 부트로더
GRUB-현재 사용하는 부트로더
부트로더에 의해서 커널이 메모리에 로딩된다.

4. init 단계
부트로더는 swapper pid 0 번 프로세스를 실행
swapper 는 pid 1 번 init(/sbin/init) 을 실행하고
init 은 /etc/inittab 을 참조한다.


▣레드햇 리눅스의 부팅종류 : 런레벨(runlevel) 또는 실행수준
(성격이 다른 부팅 종류)

0 : 시스템 종료
1 : 단일 사용자(루트) 모드, 싱글 모드라고 부른다.
2 : NFS 를 지원하지 않는 다중 사용자 모드
3 : 텍스트 다중 사용자 모드(NFS 포함)
4 : 사용 안함
5 : 그래픽 다중 사용자 환경(디폴트)
6 : 리부팅

주로 사용되는 런레벨은 3번과 5번이다.

#cp  /etc/inittab  /etc/inittab.old
---> /etc/inittab 을 잘못 설정하면 부팅중에 멈추므로
      백업을 해 둔다.
#ls  /etc/inittab*


#vi  /etc/inittab
리눅스 설정파일에서 라인이 #으로 시작하면 주석(설명)으로 프로그램에 의해서 무시된다.

/etc/inittab 파일 한 줄(Entry)의 형식

name : level-number : options : process -options
  (1)          (2)              (3)             (4)

(1)name : 각 행을 구분하는 이름(Label)

(2)level-number : 실행할 런레벨을 뜻함

(3)options : 프로세스 실행시킬 때의 속성
        wait  ---> 한 프로세스가 완료될 때까지 대기
  respawn  ---> 프로세스가  종료되면 다시 시작
                     respawn 속성에 의해서 아이디/암호가 틀렸을 경우
       다시 로그인 프롬프트가 출력 된다.

(4)process -options : 실행할 명령어 또는 스크립트와 옵션

id:5:initdefault:
---> 부팅시 사용할 디폴트 런레벨 설정

/etc/rc.d/rc.sysinit 에는
네트워크 설정, fsck 로 파일시스템 점검, 커널 모듈 로딩 등
시스템 초기화 하는 내용이 들어 있다.


각 런레벨에서 실행할 스크립트 설정
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
.....  

l6:6:wait:/etc/rc.d/rc 6


# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
---> 콘솔 모드(서버앞 런레벨 3 상태)에서 ctrl+alt+delete 키를 눌렀을 때
리부팅되게 하는 설정


pf행은 UPS전원이 부족할 경우 2분후에 시스템을 shutdown 시키는 내용

pr행은 다시 전원공급이 되었을 shutdown 을 자동취소시키는 내용


리눅스는 6개의 가상터미널(콘솔)을 제공함
(alt + F1 ~ F6)

1:2345:respawn:/sbin/mingetty tty1 은 첫번째 가상터미널
2:2345:respawn:/sbin/mingetty tty2 은 두번째 가상터미널
3:2345:respawn:/sbin/mingetty tty3 은 세번째 가상터미널
...

6:2345:respawn:/sbin/minegetty tty6 은 여섯번째 가상터미널

쉘로 빠져 나오기

#runlevel
N  5
runlevel : 런레벨 확인 명령

N은 이전 런레벨
5는 현재 런레벨

부팅된 상태에서 런레벨을 변경하는 방법은
#init  런레벨번호  
를 사용한다.


#init  3
---> 3번 런레벨로 전환
---> putty 가 아니라 리눅스 가상머신 터미널에서 실행하기

윈도우가 종료되면서
Starting anacron 메시지가 출력되고
멈춘 것처럼 보인다.
Starting anacron 메시지가 보이지 않으면 리눅스를 종료후
다시 부팅해서 테스트 한다.
(Cent 5 버전에서는 init 3 할 경우 텍스트 로그인 화면이 나타난다.)

윈도우가 종료되므로 가상터미널로 로그인 해서 계속 작업을 할 수 있다.

alt + F1 입력 ---> 가상 터미널 화면이 나타난다.
root 로 로그인 한다.
#id
--->리눅스는 사용자를 숫자로 구분하고 id 명령은 사용자의
uid(사용자번호) 와 gid(그룹번호) 를 출력해 준다.
uid=0 이 관리자 계정이다.

#runlevel
5 3 (---> 5번 런레벨에서 3번으로 변경된 상태)

#vi  /etc/inittab
아래와 같이 변경하고 저장후 종료
18 번 라인의 5를 3으로 변경

18 id:3:initdefault:
---> 부팅시 런레벨을 결정하는 항목

#init  6
--->리부팅을 의미

런레벨을 3으로 변경했으므로 그래픽 로그인 화면이 아니라
텍스트 로그인 화면이 출력된다.
루트로 로그인 하기

#ls  /etc/rc.d
#ls  /etc/rc.d/rc3.d(또는 /etc/rc3.d)
#ls  /etc/rc.d/rc5.d(또는 /etc/rc5.d)
#ls  /etc/rc.d/rc0.d(또는 /etc/rc0.d)

[root@cent ~]# ll /etc/rc3.d
lrwxrwxrwx  1 root root 10  2월  9 14:16 /etc/rc3.d -> rc.d/rc3.d
[root@cent ~]#
---> /etc/rc3.d 는 /etc/rc.d/rc3.d 의 심볼릭 링크 파일이다.

rc : runlevel  change

/etc/rc.d/rc번호.d  ---> 각 런레벨에서 실행되는 데몬을 관리하는
                              스크립트 파일이 들어있는 디렉토리
S(대문자) 는 Start script(프로그램을 메모리로 로딩)
K(대문자) 는 Kill script(프로그램 종료)

rc0.d 는 런레벨 0 이 종료이므로 대부분 Kill 스크립트가 들어가 있다.

런레벨 디렉토리에서 대문자 S로 시작하는 스크립트를 소문자 s 로
바꾸거나 스크립트를 삭제하면 부팅시 해당 프로그램이 시작되지 않는다.


스크립트 : 리눅스 명령어와 프로그래밍 요소(if 문)를 이용하여
             여러 가지 작업이 한 번에 처리될 수 있도록
      만들어 놓은 실행가능한 텍스트 파일
      (ls 는 스크립트가 아니고 바이너리 실행파일이다.)

#runlevel
N  3

텍스트 모드(런레벨 3)에서 그래픽 모드(런레벨 5)로 전환하려면
startx  또는  init  5  하면 된다.

#startx
--->x-윈도우 시작(런레벨은 변경되지 않는다.)
리눅스의 윈도우 프로그램을 X-윈도우 또는 X-서버 라 부른다.

터미널 실행
#vi  /etc/inittab
디폴트 런레벨 5로 변경하기
id:5:initdefault
---> 리부팅하면 그래픽 환경으로 부팅된다.

저장후 종료
#

로그아웃
(로그아웃 단축키 : ctrl+alt+백스페이스)


#init 5
런레벨을 변경하는 것이므로 그래픽 로그인 화면이 나타난다.
루트로 로그인

<리부팅, 종료 방법>
리부팅 : reboot,  init 6, shutdown  -r  now(시간)
종료   : halt, init 0, poweroff, shutdown  -h  now(시간)


☞shutdown 형식 :
shutdown  옵션  시간  메시지

사용 예 :
1)shutdown  -r  +2 (분단위) ---> 2분뒤에 리부팅 하는 명령
2)shutdown  -h  now ---> 즉시 종료
3)shutdown  -r  now  "system check"
---> 즉시 리부팅, system check 메시지가 접속한 사용자들에게 전달 됨
4)shutdown  -c ---> 셧다운 취소


-r : reboot
-h : halt (종료)
-c : cancel

//////////////////////////////////////////////////////////////////////////
#man shutdown

time            When to shutdown.

warning-message
                Message to send to all users.

The time argument can have different formats.  First, it can be an
absolute time in the format hh:mm, in which hh is the hour (1 or 2
digits) and mm is the minute of the hour (in two digits).  Second,
it can be in the format +m, in which m is the number of minutes to
wait.  The word now is an alias for +0.
//////////////////////////////////////////////////////////////////////////

<reboot 와 shutdown 그리고 init 6 의 차이>
reboot   --->   shutdown   --->  init
(reboot 는 shutdown 을 호출하고 shutdown 은 init 을 호출한다.)


#man   reboot
DESCRIPTION
       Halt 명령은 /var/log/wtmp 파일에 시스템 종료 기록을 남기고, 시스템 종료
       나 리부팅 작업을 한다.  만약 runlevel이 0이나 6이 아닌 상태의 시스템 에
       서  halt 나 reboot 명령이 사용되면, shutdown(8) 명령이호출된다.(-h나 -r
       옵션 기능을 함)


#man  shutdown
       Shutdown은 init 프로세서의 시그날 처리에 의해서 수행되며,
       runlevel 바꾸기를 요청한다

가상머신에서 터미널 2개 실행

1번 터미널
#shutdown -h +2
--->2분뒤 종료


2번 터미널
#shutdown -c
--->셧다운 취소

#shutdown -h +1
---> 1분 뒤에 init 프로세스에 의해서
      /etc/rc.d/rc0.d 의 스크립트가 실행된 후 종료가 된다.
      /etc/rc.d/rc0.d 에는 메모리의 프로그램을
      종료시키는 Kill 스크립트들이 들어 있다.

<싱글(single) 부팅하기>
☞싱글 부팅을 사용하는 경우
1) grub 암호(부팅시 암호설정) 잃어버렸을 때
2) 루트 암호 잃어버렸을 때
3) 장애가 발생해서 정상부팅이 안 될 때


☞싱글 부팅하는 방법
1) 리눅스 1번 CD 이용하는 방법
2) grub 설정 이용하는 방법(grub 암호 잃어버렸을 때는 사용 못함)

※1번 방법 실습(리눅스 1번 CD 이용)
종료된 리눅스 가상머신 화면의 Devices 항목에서
CD 장치를 더블 클릭하기

[v]Connect at power on 에 체크하기
Use ISO Image file 선택후
Browse 버튼을 눌러서 리눅스 1번 CD를 입력하고 부팅시키기


하드디스크로 다시 부팅되면
ctrl + alt + insert 키를 누르거나
vmware 아이콘 표시줄의 ■(사각형 버튼)을 눌러서 종료후 다시 부팅시킨다.

ctrl + alt + delete 가 재부팅 단축키 이지만
ctrl + alt + delete 를 누르면 윈도우가 반응하므로 ctrl + alt + insert 를 이용한다.

부팅초기 VMWARE 메시지가 나올 때 리눅스 가상머신 안에서 F2 키를 누른다.
(이 때, 리눅스 화면에서 왼쪽 마우스를 입력해서 리눅스안에 들어온 상태이어야 한다.)
---> 가상머신 바이오스 화면으로 진입하기


Bios 화면 Boot 메뉴에서
CD-ROM Drive 에 커서 위치시키고  + 키 눌러서
아래와 같이 첫번째로 이동시키기

Boot
CD-Rom Drive
Removable Devices
Hard Drive
Network boot from AMD


F10 누른후 Yes 에 커서 위치시키고 엔터를 눌러서 리부팅하기


boot: 라고 나온 화면에서 F1 ~ F5 를 누르면 도움말을 확인할 수 있다.
cdrom 으로 부팅되서 boot: 라고 나오면 아래와 같이 입력하고 엔터 누르기
boot: linux  rescue
--->CD 를 이용한 싱글부팅을 의미함


(아래와 같이 설정)
언어선택-English
키보드-us
네트워크-NO
Rescue-Continue
--->Skip 을 선택하면 하드디스크가 인식되지 않고
    Read-Only 를 선택하면 하드디스크 파일을 변경할 수 없다.

OK(엔터 입력)

-/bin/sh-3.00#
(---> CD 로 싱글 부팅한 상태)

-/bin/sh-3.00#chroot  /mnt/sysimage
sh-3.00#

1번 cd 로 부팅하면 cd 가 / 로 지정이 되고 하드디스크
루트 파티션은 /mnt/sysimage 디렉토리에 연결된다.
그러므로 /mnt/sysimage 를 최상위 디렉토리 / 로
변경시켜주어야 하는데
chroot  /mnt/sysimage 해주면 1번 cd 의 루트에서
하드디스크 루트로 변경된다.
---> change root 를 의미


change root 를 하기 전에는 하드디스크의 파일을 접근할 때
#vi  /mnt/sysimage/etc/grub.conf 라고 적어야 하지만
change root 를 한 후에는
#vi  /etc/grub.conf 를 입력하면 된다.

루트 암호 초기화 설정
#vi  /etc/shadow (--->사용자의 암호가 저장되어 있는 파일)
root::14523:0:99999:7:::

첫번째 라인의 두번째 필드를 삭제하고
--->명령상태에서 x 입력 또는 delete 키 사용
--->콜론(:) 사이의 문자열만 삭제하라는 의미
--->콜론(:) 사이에 공백이 존재하면 안 된다.

강제저장후 종료하기(esc  :wq!)
--->esc :wq 로 하면 읽기전용 파일이라서 저장되지 않는다.

변경전)
root:$1!3fjefdewrdtdff$fdxerfdfdfdex:14523:0:99999:7:::

변경후)
root::14523:0:99999:7:::

또는
#passwd 명령을 입력하고 루트 암호를 다시 설정해도 된다.

가상머신 오른쪽 하단 CD-ROM 아이콘 클릭해서 1번 CD 제거하기(Use physical drive 선택)

sh-3.00#exit
-/bin/sh-3.00#exit


cd 로 부팅했을 때 리부팅이 안 되는 경우도 있는데
red 사각형 아이콘(■)을 눌러서 종료한 다음
부팅(▶아이콘 클릭)시키면 된다.

--->로그인 화면에서 root 만 입력하면 패스워드 입력없이 로그인 된다.

루트암호 다시 설정하기
#grep  root  /etc/shadow
#passwd (또는 passwd  root)
암호 두번 입력하기(입력문자는 안 보인다.)
#grep  root  /etc/shadow
--->설정된 암호 확인

passwd       : 암호 설정 명령어
/etc/shadow : 암호가 저장되어 있는 파일

※2번 방법 실습(grub 을 이용한 싱글 부팅)

리눅스 리부팅후 grub 화면(Press any key ... , 하늘색 화면) 나왔을 때 엔터 입력
첫번째 라인(CentOS-4 i386 ...)에 커서 막대 위치시키고
e 입력(Edit 를 의미)
두번째 kernel 라인에서 e 입력
grub edit> kernel  /boot/vmlinuz ... root=LABEL=/ rhgb quiet single

---> kernel 로 시작하는 라인의 마지막에 single(또는 숫자 1)
      단어 입력후 엔터 누르기
      (숫자를 3으로 적으면 런레벨 3으로 부팅됨)

그 다음 b 입력(Boot 를 의미)

rhgb  : Redhat Graphical Boot
quiet : 커널메시지 숨기기

#id
uid=0(root)
#ifconfig
---> 싱글부팅을 했으므로 네트워크 구성은 되지 않는다.
#passwd
루트 암호 설정(기존 암호와 다르게 입력)
passwd 명령을 이용하면 /etc/shadow 파일의 내용이 변경된다.

#reboot

루트로 로그인


<ACL(Access Control List)>
파일과 디렉토리의 확장 속성
getfacl : acl 확인
setfacl : acl 설정
  -m 수정
  -x 삭제

형식)
#getfacl  파일명
#setfacl  -m  [acl]  파일명
#setfacl  -x  [acl]  파일명

#setfacl  -m  u:apple:7  파일명

operation not permitted 로 나올경우
/etc/fstab 에 acl 추가후  remount 하고 테스트

//////////////////////////////////////////////////////////////////////////
#man  getfacl

GETFACL(1)                   Access Control Lists                  GETFACL(1)

NAME
       getfacl - get file access control lists

SYNOPSIS
       getfacl [-dRLPvh] file ...

       getfacl [-dRLPvh] -

DESCRIPTION
       For  each  file, getfacl displays the file name, owner, the group, and
       the Access Control List (ACL). If a directory has a default ACL,  get-
       facl  also  displays  the  default  ACL.  Non-directories  cannot have
       default ACLs.


#man  setfacl

SETFACL(1)                   Access Control Lists                  SETFACL(1)

NAME
       setfacl - set file access control lists

SYNOPSIS
       setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

       setfacl --restore=file

DESCRIPTION
       This  utility  sets  Access Control Lists (ACLs) of files and directo-
       ries.  On the command line, a sequence of commands is  followed  by  a
       sequence  of  files (which in turn can be followed by another sequence
       of commands, ...).

 

EXAMPLES
       Granting an additional user read access
              setfacl -m u:lisa:r file

       Revoking  write  access from all groups and all named users (using
 the
       effective rights mask)
              setfacl -m m::rx file

       Removing a named group entry from a file’s ACL
              setfacl -x g:staff file
//////////////////////////////////////////////////////////////////////////

#getfacl  /root

#setfacl  -m  u:apple:7  /root
#getfacl  /root


"명령이 지원되지 않음" 또는
operation not permitted 로 나올경우 아래와 같이 설정후 테스트하기

#vi  /etc/fstab
루트 파티션의 defaults 다음에 acl 추가하기

# This file is edited by fstab-sync - see 'man fstab-sync' for details
LABEL=/                 /                       ext3    defaults,acl        1 1


#mount  -o  remount  /

▣실습
1. D:\리눅스2공용\fedora.alz 를 자신의 폴더에 압축 풀고
   vmware 에서 불러오기(파일이 없으면 수업용 서버 "4_가상머신" 폴더에서 다운받기)
2. fedora 리눅스에서 centos 1번 CD 를 이용해서 싱글부팅 한 후
   /etc/shadow 파일을 vi 로 open 해서 루트 암호를 초기화하기
   리부팅 해서 루트암호 입력없이 로그인 되는지 확인하기


에고.. 강의 자료 취합이 이리 늦어서야..ㅠ 어찌되었든 10번째로 남깁니다.
항상 행.복.하기 아시지요? ^^?

[압축 프로그램]
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 다음