- e2fsck
기타 : fsck,fsck.ext2,fsck.ext3,fsck.msods,fsck.vfat

- e2fsck 로 파일시스템 점검시 점검하는 항목
- inode
- blocks
- size
- 디렉토리 구조
- 디렉토리 연결성
- 파일링크 정보
- 전체파일갯수
- 천체블록중 사용중인 블록
- 기타점검.


파일시스템 점검 및 복구
e2fsck /dev/sdb1
e2fsk -j ext3 /dev/sdb1
e2fsck -y /dev/sdb1 / e2fsck -j ext3 -y /dev/sdb1 => 비대화식 모드로 command 수행


파일시스템 점검 및 복구

- 백업슈퍼블록을 이용한 복구
e2fsck -b 백업슈퍼블록번호 장치명
e2fsck -b 32768 /dev/sdb1

[root@star ~]# e2fsck /dev/sda5
e2fsck 1.37 (21-Mar-2005)
Couldn't find ext2 superblock, trying backup blocks...
Superblock has a bad ext3 journal (inode 8).
Clear<y>? cancelled!

e2fsck: Illegal inode number while checking ext3 journal for /data1
[root@star ~]# e2fsck -j ext3 /dev/sda5
e2fsck 1.37 (21-Mar-2005)
Couldn't find ext2 superblock, trying backup blocks...
Superblock has a bad ext3 journal (inode 8).
Clear<y>? yes

*** ext3 journal has been deleted - filesystem is now ext2 only *** <== 파일시스템 타입이
ext2 로만 사용가능하게 변경됨.

Resize inode not valid. Recreate<y>? yes

/data1 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 #0 (7677, counted=7678).
Fix<y>? yes

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


/data1: ***** FILE SYSTEM WAS MODIFIED *****
/data1: 27/52208 files (0.0% non-contiguous), 8420/208812 blocks
[root@star ~]# mount -t ext3 /dev/sda5 /data1
mount: wrong fs type, bad option, bad superblock on /dev/sda5,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

[root@star ~]#
[root@star ~]# mount -t ext3 /dev/sda5 /data1 <= 파일시스템 체크 후 타입이 ext2 로 변경됨.
그래서 마운트가 안됨.
mount: wrong fs type, bad option, bad superblock on /dev/sda5,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

[root@star ~]# mount -t ext2 /dev/sda5 /data1 <= 마운트 성공.
*. /dev/sda5 가 /etc/fstab 에 등록되어 있었다면 파일시스템 타입이 변경되었으므로 ext2 로 바꾸어야 함. /etc/fstab 의 내용중 아래부분.

LABEL=/data1 /data1 ext3 defaults 1 2 <= ext2 로 바꾸어야 함.

그렇지 않으면 부팅이 제대로 안될 수 있다.

'Log > Linux' 카테고리의 다른 글

디스크 Quota  (0) 2011.11.28
LVM / RAID  (0) 2011.11.28
파일시스템 생성작업  (0) 2011.11.28
리눅스 파일시스템 및 마운트  (0) 2011.11.28
작업예약 schedule - cron / at  (0) 2011.11.28
Posted by logwatch
*. 아래 예제는 두번째 스카시 디스크 장치에 하나의 주 파티션과 하나의 확장파티션
두개의 논리 파티션을 만드는 과정이다.

*. 주파티션은 하나의 디스크에 대해 4개까지 만들수 있다.
*. 확장 파티션은 주파티션을 제외한 나머지 모든 영역이다.
*. 논리 파티션은 확장파티션 내의 파티션이다.


[root@star ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklab
el
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): m <= m 을 입력하면 명령어 리스트를 볼수 있다.
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help):
Command (m for help): p

Disk /dev/sdb: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System

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

Command (m for help): p

Disk /dev/sdb: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 49 50160 83 Linux

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

Command (m for help): p

Disk /dev/sdb: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 49 50160 83 Linux
/dev/sdb2 50 204 158720 5 Extended

Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (50-204, default 50):
Using default value 50
Last cylinder or +size or +sizeM or +sizeK (50-204, default 204): +50M

Command (m for help): p

Disk /dev/sdb: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 49 50160 83 Linux
/dev/sdb2 50 204 158720 5 Extended
/dev/sdb5 50 98 50160 83 Linux

Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (99-204, default 99):
Using default value 99

Last cylinder or +size or +sizeM or +sizeK (99-204, default 204): +50M
(* .참고 50 이라고 적으면 last cylinder 번호,+ 50 이라고 적으면 실린더 갯수를 50개 할당, + 50K 라고 적으면 50K 바이트를 할당한다는 의미)


Command (m for help): p

Disk /dev/sdb: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 49 50160 83 Linux
/dev/sdb2 50 204 158720 5 Extended
/dev/sdb5 50 98 50160 83 Linux
/dev/sdb6 99 147 50160 83 Linux

Command (m for help): w <= 작업한 내용을 저장하지 않고 그냥 빠져나가려면 q 만 입력하면 된다.
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@star ~]#

*. 그리고 파티션을 삭제하려면 d 명령을 사용하면 된다.

* 확인은 -l 옵션으로 할 수 있다.

[root@star ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 49 50160 83 Linux
/dev/sdb2 50 204 158720 5 Extended
/dev/sdb5 50 98 50160 83 Linux
/dev/sdb6 99 147 50160 83 Linux
[root@star ~]#

파일시스템 생성은
mkfs -t ext3 /dev/sdb1 => ext3 파일시스템 생성
mkfs -t ext2 /dev/sdb1 => ext2 파일시스템 생성

또는
mke2fs -j /dev/sdb1 => ext3 파일시스템 생성

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

swap file system 생성 및 추가

swap 영역 생성하기
os 설치후에 swap 영역이 더 필요하다라고 생각되면
스왑파티션을 생성하거나 빈 디스크 블럭을 할당하여
swap 영역을 추가할 수 있다.

1. swap 파티션을 생성하고 swap 영역 추가하는 경우
[root@titan p2]# fdisk -l /dev/sdc
Disk /dev/sdc: 213 MB, 213909504 bytes
64 heads, 32 sectors/track, 204 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 49 50160 82 Linux swap
/dev/sdc2 50 98 50176 83 Linux
/dev/sdc3 99 204 108544 83 Linux
[root@titan p2]#

/dev/sdc1 을 swap 파티션으로 사용하기 위해 파일시스템 타입을 Linux swap으로
지정하였다.

그런다음

[root@titan ~]# mkswap /dev/sdc1
Setting up swapspace version 1, size = 51359 kB
[root@titan ~]#
[root@titan ~]# swapon -v /dev/sdc1 (v 옵션을 생략해도 되지만 그 밑에 있는 실행결과를 보여주지 않는다)
swapon on /dev/sdc1
[root@titan ~]#
[root@titan ~]# swapon
usage: swapon [-hV]
swapon -a [-e] [-v]
swapon [-v] [-p priority] special|LABEL=volume_name|UUID=uuid ...
swapon [-s]
[root@titan ~]# swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 522072 3096 -1
/dev/sdc1 partition 50152 0 -5
[root@titan ~]#

swap 영역이 활성화 되었음을 알수 있다.

2. swap 파일을 swap 영역을 할당하려면

[root@titan p2]# dd if=/dev/zero of=./swapfile bs=1024 count=30000

swap file 은 dd 명령으로 생성한다.
약 30메가 크기로 디스크 블럭을 할당하고 디스크 블럭을 0으로 초기화 하였다.

이 디스크 영역을 swap 영역으로 할당하기 위해서는

[root@titan p2]# mkswap swapfile
Setting up swapspace version 1, size = 30715 kB

[root@titan p2]# mkswap swapfile
Setting up swapspace version 1, size = 30715 kB
[root@titan p2]# chmod 600 swapfile <= swap file은 보안상 퍼미션을 600으로 하는것이 좋다.
[root@titan p2]# swapon -v swapfile <= swap file 퍼미션이 600 이 아니면 보안경고메세지가 출력될것이다.
swapon on swapfile
[root@titan p2]# swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 522072 3876 -1
/dev/sdc1 partition 50152 0 -5
/mnt/p2/swapfile file 29992 0 -7
[root@titan p2]#
swap 영역이 활성화 되었음을 알수 있다.

그리고 리부팅후에도 계속 사용하기 위해서는 fstab 파일에 등록해두어야 한다.

/dev/sdc1 swap swap defaults 0 0
/mnt/p2 swap swap defaults 0 0
[root@titan p2]#
기존의 등록되어 있는 swap 영역 한줄을 복사해서 사용하면 간단히 추가할수 있다.

그리고 swap 파티션 장치명을 label 명으로 fstab 에 등록하려면
mkswap 명령어를 사용할 때 아래와 같이 레이블명을 넣어주면 된다.

mkswap -L SWAP-sdc1 /dev/sdc1

'Log > Linux' 카테고리의 다른 글

LVM / RAID  (0) 2011.11.28
파일시스템 점검 및 복구  (0) 2011.11.28
리눅스 파일시스템 및 마운트  (0) 2011.11.28
작업예약 schedule - cron / at  (0) 2011.11.28
process 관리  (0) 2011.11.28
Posted by logwatch

파일시스템 관리

리눅스 file system 구조

부트블록
(Boot Block)
Block group 0 Block group 1

....

Block group n - 1 Block group n


그리고 각 block 그룹은 아래처럼 구성되어 있다.

>
super block group descriptor block bitmap

inode bitmap

inode table data blocks

*. 이러한 파일시스템 구조는 파일시스템 생성시 만들어진다.

부트블록(부트섹터)

- 운영체제를 부팅시키기 위해 필요한 코드를 저장
- 대부분의 파일스템들은 부트블록으로 시작
- 하드웨어가 부팅에 필요한 코드를 부트블록에서 찾는다.

슈퍼블록

- 블록 그룹의 가장 앞에 위치.
- 파일시스템과 관련된 정보를 담고 있음. 파일 시스템의 전체 크기,마운트정보 등..
- 리눅스 운영체제는 슈퍼블록의 정보를 사용하여 파일시스템을 관리함.
- 다른 블록그룹에 있는 슈퍼블록도 똑 같은 내용을 가지고 있는 사본이다.

. 매직넘버 - ext 파일시스템의 슈퍼블록임을 의미하는 숫자
. 마운트횟수 - 얼마나 많이 마운트 되었는지를 나타낸다.
.블록그룹번호 - 파일시스템내에서 몇 번째 블록인지를 나타내는 번호

블록크기 - 파일시스템의 기본 블록크기를 바이트 단위로 표시(예를들면 1024byte)

그룹당 블록수 - 하나의 그룹에 속하는 블록 갯수
free blocks - 할당되지 않은 block 갯수
free inode - 할당되지 않은 inode 갯수
first inode - 파일시스템내의 가장 첫 번째 inode 번호

group 디스크립터 table

- 해당 파일시스템 내의 모든 블록 그룹에 대한 정보를 기록.
- 다른 블록그룹에 있는 group 디스크립터 영역도 똑 같은 내용을 가지고 있는 사본이다.

. 첫 번째 inode table block 의 블록번호
. 그룹내의 free block 갯수
. 그룹내의 inode 갯수
. 디렉토리갯수

block bitmap - 블록 그룹에서 블록의 할당 상태를 나타내는 맵, 블록을 할당하거나 해제 할 때 사용된다.
inode bitmap - inode 의 할당 상태를 나타내는 맵, inode를 할당하거나 해제 할 때 사용


아이노드(inode = index node) 블록

- 파일의 정보[접근권한/소유주/파일크기/inode 번호 등]를 저장하고있는 부분.
- 파일 하나당 하나의 아이노드가 사용됨.
- 파일의 형태와 무관하게 아이노드 블록을 가지게 됨

데이터 블록

- 실제 데이터 내용이 저장되는 디스크 영역

filesystem mount

- 리눅스에서 파일시스템에 접근하기 위해서 마운트라는 개념을 사용한다.
- 모든 블록장치파일은 마운트를 하지 않으면 사용할 수 없다.
- mswindows 의 C: 나 D: 같은 드라이버 문자를 통해서 장치파일에 접근할 수는 없다.

시스템의 마운트 정보는 df(disk free) 명령으로 확인할 수 있다.

man mount

MOUNT(8) Linux Programmer's Manual MOUNT(8)

NAME

mount - mount a file system

SYNOPSIS

mount [-lhV]

mount -a [-fFnrsvw] [-t vfstype] [-O optlist]

mount [-fnrsvw] [-o options [,...]] device | dir

mount [-fnrsvw] [-t vfstype] [-o options] device dir

DESCRIPTION

All files accessible in a Unix system are arranged in one big tree, the

file hierarchy, rooted at /. These files can be spread out over sev-

eral devices. The mount command serves to attach the file system found

on some device to the big file tree. Conversely, the umount(8) command

will detach it again.

[root@river root]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda2 2016044 117772 1795860 7% /

/dev/hda1 295564 13284 267020 5% /boot

/dev/hda5 3020140 1987440 879284 70% /home

/dev/hda8 1004024 24536 928484 3% /private1

/dev/hda10 1004024 16428 936592 2% /private2

none 256900 0 256900 0% /dev/shm

/dev/hda7 2016016 34572 1879032 2% /tmp

/dev/hda3 10080520 2924472 6643980 31% /usr

/dev/hda6 3020140 112892 2753832 4% /var

/dev/hdb2 10807976 845260 9413696 9% /home1

기본출력은 block 단위이다.

대부분의 사용자에게 좀 더 익숙한 byte 단위로 출력하려면 아래처럼 -h 옵션을 추가하면 된다.

[root@river root]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/hda2 2.0G 116M 1.8G 7% /

/dev/hda1 289M 13M 261M 5% /boot

/dev/hda5 2.9G 1.9G 859M 70% /home

/dev/hda8 981M 24M 907M 3% /private1

/dev/hda10 981M 17M 915M 2% /private2

none 251M 0 251M 0% /dev/shm

/dev/hda7 2.0G 34M 1.8G 2% /tmp

/dev/hda3 9.7G 2.8G 6.4G 31% /usr

/dev/hda6 2.9G 111M 2.7G 4% /var

/dev/hdb2 11G 826M 9.0G 9% /home1

[root@river root]#

각 파일시스템의 총 용량,현재 사용량, 남은 공간등의 정보를 확인할 수 있다. /dev/shm 을 제외한 각 라인은
리눅스 파일시스템 정보이다. 파티션 설정은 되어 있으나 마운트 되지 않은 정보는 출력되지 않는데 그러한 정보는
파티션 설정 명령어인 fdisk 명령으로 확인할 수 있다.

[root@river root]# fdisk -l

Disk /dev/hda: 40.0 GB, 40060403712 bytes

255 heads, 63 sectors/track, 4870 cylindevs

Units = cylindevs of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hda1 * 1 38 305203+ 83 Linux

/dev/hda2 39 293 2048287+ 83 Linux

/dev/hda3 294 1568 10241437+ 83 Linux

/dev/hda4 1569 4870 26523315 f Win95 Ext'd (LBA)

/dev/hda5 1569 1950 3068383+ 83 Linux

/dev/hda6 1951 2332 3068383+ 83 Linux

/dev/hda7 2333 2587 2048256 83 Linux

/dev/hda8 2588 2714 1020096 83 Linux

/dev/hda9 2715 2779 522081 82 Linux swap

/dev/hda10 2780 2906 1020096 83 Linux

Disk /dev/hdb: 20.0 GB, 20060135424 bytes

255 heads, 63 sectors/track, 2438 cylindevs

Units = cylindevs of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hdb1 * 1 51 409626 83 Linux

/dev/hdb2 52 1418 10980427+ 83 Linux

/dev/hdb3 1419 2055 5116702+ 83 Linux

/dev/hdb4 2056 2438 3076447+ f Win95 Ext'd (LBA)

/dev/hdb5 2056 2372 2546271 83 Linux

[root@river root]#

이 시스템은 ide 타입은 디스크가 2개 연결되어 있으며 각각 primary master와 primary slave 이다.
그리고 첫 번째 디스크에는 10개의 파티션 정보가 있으며 주 파티션의 세 개, 확장 파티션 1개, 그리고
확장 파티션 안에 있는 논리 파티션이 6개 있다. 그 중 하나는 스왑파티션으로(/dev/hda9) 가상메모리로
사용될 영역이다. 리눅스에서 주 파티션은 최대 4개까지 만들 수 있으며 나머지는 확장 파티션 안에 있어야
한다.
출력결과에서

/dev/hda4 1569 4870 26523315 f Win95 Ext'd (LBA)

이 부분이 확장 파티션을 의미한다.

마운트는 파일시스템을 붙이는 것을 의미한다. 쉽게 생각하면 파일시스템이 생성되어 있는

블록장치 파일을 특정 디렉토리에 연결하는 작업으로 생각해도 된다.

마운트 명령어 자체는 단순하며 디바이스 이름과 파일시스템 타입을 알고 있으면 된다.

그 두 가지만 알면 리눅스에서 지원하는 모든 파일시스템에 접근할 수 있다. 그 두 가지를 알아보자

장치명

마운트 대상은 하드디스크, 시디롬, 플로피디스크등 블록장치 파일이 일반적인 대상이다.

하드디스크는 ide 타입과 scsi 디스크 타입으로 나눠볼 수 있는데

ide 타입의 디스크 장치는

hda : primary master

hdb : promary slave

hdc : secondary master

hdd : secondary slave

위와 같은 이름을 갖는다. scsi 디스크인 경우에는 첫번째가 sda 두 번째 디스크는 sdb 와 같은 형태로 이름이
붙게 되며 디스크 안에 분할된 파티션의 이름은 순서대로 sda1, sda2 와 같은 이름을 갖는다.

ide 타입인 경우에는 hda1, hda2 ... 의 이름을 갖는다.

파일시스템의 종류.

minix : 과거에 리눅스가 minix 머신에서 돌아갈 때, 리눅스가 사용한 파일시스템. 현재는 사용안됨.

xiafs,extfs : 과거의 리눅스 파일시스템. 지금은 사용하지 않는다.

ext2fs : 리눅스 파일시스템. 현재는 많이 사용하지는 않는다.

ext3fs : 리눅스 파일시스템. ext2 파일시스템에 이어서 나온 파일시스템, 요즘은 ext2fs 대신 이 파일시스템이 많이 사용된다.

vfat : fat16, fat32를 리눅스에서 지원하기 위해서 개발된 가상의 파일시스템.

ntfs : windows nt 파일시스템

iso9660 : 시디롬 파일 시스템

nfs : network file system. 이 파일 시스템을 사용하기 위해서는 nfs 서버가 구성되어 있어야 한다.

*. ext2 와 ext3 파일시스템 비교

ext2 의 단점

- 갑작스러운 시스템 다운(정전)이 되었을 경우 마운트해제되지 않은 데이터들에 대한 데이터가 유실되는 일이 종종 있었다.

-. 모든 파일시스템은 마운트할 수 있는 횟수가 제한되어 있었다.
그래서 ext2 파일 시스템에서는 마운트 제한(maximum mount)에 도달하였을 경우에 데이터 유실을 방지하기 위해서
fsck를 실행하도록 되어 있었다.

- fsck를 실행하더라도 한계가 있었다

즉, 파일시스템의 크기에 따라서 fsck를 실행하는 것이 무의미한 작업일 경우가 있었다.
파일시스템의 크기가 너무 작을 경우 fsck로 점검하는 것이 무의미했다.
그리고 파일시스템의 크기가 너무 큰 경우에는 시간이 너무 오래 걸려서
복구작업과 부팅시간이 너무 오래 걸리는 단점이 있었다.

ext3의 장점 :

- ext3 파일시스템에서는 기록된 인덱스 로그를 이용하여 복구할 수 있도록 하였다.
그래서 갑작스러운 시스템 다운시 부팅시간을 단축할 수 있게 되었다.
즉, fsck로 파일시스템을 일일이 채크하지 않아도 인덱스로그를 이용하기 때문에
복구시간과 부팅시간이 단축된다는 점이다.

*. 저널링 파일 시스템의 종류에는 ext3, reiserfs, XFS등이 있다.대표적인 것이 ext3이다.

마운트 명령어 형식.

mount -t 파일시스템타입 디바이스명 마운트포인터

ex)

mount -t vfat /dev/hda1 /mnt/mswin

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

mount -t ext3 /dev/sad5 /home

블록장치가 더 이상 필요하지 않으면 마운트 해제(흔히 unmount 라고도 한다) 할 수 있다.
unmount 한 장치는 다시 마운트 할때까지 아무도 사용할 수 없다. 만약 시디롬을 다 사용하고
시디를 꺼내려면 반드시 시디롬 장치파일을 unmount 해야 한다. unmount 하는 명령어는 umount 이다

umount

umount 마운트포인터 또는 디바이스파일명. 일반적으로 마운터 포인터를 많이 사용한다.

umount 마운트포인터 또는 디바이스파일명. 일반적으로 마운터 포인터를 많이 사용한다.

ex)

[root@river private1]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda2 2016044 117772 1795860 7% /

/dev/hda1 295564 13284 267020 5% /boot

/dev/hda5 3020140 1987440 879284 70% /home

/dev/hda8 1004024 24536 928484 3% /private1

/dev/hda10 1004024 16428 936592 2% /private2

none 256900 0 256900 0% /dev/shm

/dev/hda7 2016016 34572 1879032 2% /tmp

/dev/hda3 10080520 2924472 6643980 31% /usr

/dev/hda6 3020140 112896 2753828 4% /var

/dev/hdb2 10807976 845260 9413696 9% /home1

[root@river private1]#

테스트로 /hda8을 언마운트해보자.

[root@river private1]# umount /private1

umount: /private1: device is busy

[root@river private1]#

[root@river private1]# pwd

/private1

[root@river private1]#

사용중이라는 메세지가 출력되었다. 사용 중인 장치파일은 언마운트 되지 않는다.

현재의 디렉토리가 /private1 이므로 hda8 장치는 사용 중이다.

[root@river private1]# cd ..

[root@river /]# umount /private1

[root@river /]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda2 2016044 117772 1795860 7% /

/dev/hda1 295564 13284 267020 5% /boot

/dev/hda5 3020140 1987440 879284 70% /home

/dev/hda10 1004024 16428 936592 2% /private2

none 256900 0 256900 0% /dev/shm

/dev/hda7 2016016 34572 1879032 2% /tmp

/dev/hda3 10080520 2924472 6643980 31% /usr

/dev/hda6 3020140 112904 2753820 4% /var

/dev/hdb2 10807976 845260 9413696 9% /home1

[root@river /]#

/private1 디렉토리가 보이지 않는다. 마운트 해제 되었다.

이제 다시 마운트 해보자.

[root@river /]# mount -t ext3 /dev/hda8 /private1

[root@river /]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda2 2016044 117772 1795860 7% /

/dev/hda1 295564 13284 267020 5% /boot

/dev/hda5 3020140 1987440 879284 70% /home

/dev/hda8 1004024 24536 928484 3% /private1

/dev/hda10 1004024 16428 936592 2% /private2

none 256900 0 256900 0% /dev/shm

/dev/hda7 2016016 34572 1879032 2% /tmp

/dev/hda3 10080520 2924472 6643980 31% /usr

/dev/hda6 3020140 112920 2753804 4% /var

/dev/hdb2 10807976 845260 9413696 9% /home1

[root@river /]#

다시 mount 된 것을 확인 할 수 있다. 이 상태에서 /private1 디렉토리에 파일을 만들면
/dev/hda8 영역에 만들어진다.
그리고 마운트가 해제 된 상태에서 파일을 만들면 그 파일은 /dev/hda2 만들어진다.
다른 장치파일들도 다 마찬가지이다.
장치명과 파일시스템이 다르더라도 마운트 형식과 의미는 같다.
마운트 설정 파일이 etc 디렉토리 밑에 있다. 파일명은 fstab 이며 아래와 같은 포맷으로 되어 있다.

[root@river /]# cat /etc/fstab

LABEL=/ / ext3 defaults 1 1

LABEL=/boot1 /boot ext3 defaults 1 2

none /dev/pts devpts gid=5,mode=620 0 0

LABEL=/tmp /home ext3 defaults 1 2

LABEL=/var1 /private1 ext3 defaults 1 2

LABEL=/private2 /private2 ext3 defaults 1 2

none /proc proc defaults 0 0

none /dev/shm tmpfs defaults 0 0

LABEL=/tmp1 /tmp ext3 defaults 1 2

LABEL=/usr /usr ext3 defaults 1 2

LABEL=/var /var ext3 defaults 1 2

/dev/hdb2 /home1 ext3 defaults 1 2

/dev/hda9 swap swap defaults 0 0

/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0

[root@river /]#

* 자세한 내용은 메뉴얼 페이지를 참조

가장 왼쪽은 디바이스명이나 LABEL 명이 온다. 두 번째는 마운트 포인터, 그리고 세 번째는 파일시스템타입,
네번째는 옵션으로 defaults 는 읽기, 쓰기에 해당된다. 그리고 마지막에 숫자는 부팅 시 파일시스템 체크 여부에 관한
것으로 숫자 0이 적혀있는 장치명에 대해서는 부팅 시 파일시스템 검사를 하지 않겠다는 의미이다.

부팅 시 /etc/fstab 파일이 읽혀지며 fstab에 설정되어 있는 마운트 장치명은 자동으로 마운트 되게 할 수 있다.
그리고 fstab는 mount 명령이 참조하는 파일이기도 하다. fstab 설정이 잘못되면 부팅이 정상적으로 되지 못한다.

fstab 파일설정이 위와 같다면

mount -t ios9660 /dev/cdrom /mnt/cdrom 대신에

mount /dev/cdrom 또는 mount /mnt/cdrom 으로 해도 된다. mount 명령은 mount 명령의 인수를
fstab 파일의 각 행에서 찾은 후 일치하는 부분이 있다면 mount 명령의 생략된 부분을 그것으로 대체한다.

fedora 9 에서는 내용이 조금 다릅니다. 아래와 같습니다.

[root@bega /]# cat /etc/fstab
UUID=8bd23abd-ca18-4609-a374-c407bf0b84b2 /                       ext3    defaults        1 1
UUID=1e12d149-8e26-401c-aa12-64fc2b5c0fdc /data                   ext3    defaults        1 2
UUID=69a544e6-4c4a-4a6f-a16a-0b3e6cb99d10 /home                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
UUID=30aa3f23-7e43-4599-9e1a-a2700c26b77e swap                    swap    defaults        0 0
/dev/sdb1       /d2p1   ext2    defaults        1 1
LABEL=/d2p2     /d2p2   ext3    defaults        1 1
UUID=9fd45246-21fd-4b55-8e09-585d7741b363       /d2p6   ext3    defaults 1 1
[root@bega /]#

UUID 라는것으로 LABEL 명이나 장치명을 대신할 수 있습니다.
UUID (Universal Unique IDentifier) 는 네트워크 상에 있는 개체 식별자라는 의미로
디스크 장치도 서버상에서 하나의 개체 식별자로서 구분하겠다는 의미입니다.

*. 장치명에 label 을 보거나 설정하는 명령은 아래와 같습니다.
[root@bega /]# e2label
Usage: e2label device [newlabel] <= label 을 설정하거나 수정할때.
[root@bega /]# e2label /dev/sda1 <= 장치의 label을 확인할때.
/
[root@bega /]# e2label /dev/sda3
/home
[root@bega /]#

UUID 값은 파일시스템 생성시 자동으로 할당되며 수정할 수도 있습니다.
UUID 값 수정 및 확인은 tune2fs 명령어로 할 수 있습니다.

[root@bega /]# tune2fs -l /dev/sda3 | grep UUID
Filesystem UUID:          69a544e6-4c4a-4a6f-a16a-0b3e6cb99d10

*. UUID 값을 변경하려면 아래와 같이 하면 됩니다.
[root@bega /]# tune2fs -l /dev/sdb5 | grep UUID
Filesystem UUID:          5c20e325-6c0f-48e5-b22c-621a450182fb
[root@bega /]# tune2fs -U random /dev/sdb5
tune2fs 1.40.8 (13-Mar-2008)
[root@bega /]# tune2fs -l /dev/sdb5 | grep UUID
Filesystem UUID:          f75ca609-97c1-4802-b8fe-164d376aed8d <= 변경되었습니다.
[root@bega /]#
*. UUID 값을 제거하는것은 위에 random 대신에 clear 를 적어주면 됩니다.
그리고 random 대신에 time 을 적어주더라도 마찬가지로 무작위로 UUID 값을
할당하게 됩니다. 그러나 file system 생성시 UUID 값이 할당되므로 굳이 직접
생성하는 경우는 잘 없으리라고 생각됩니다.

*. UUID 값을 다른 값으로 변경하는 경우 그 장치명이 사용하는 UUID 값이
fstab 에 등록되어 있는 장치라면 fstab 파일을 열어서 UUID 값을 일치하게 직접 수정해 
주어야 합니다.

그렇지 않으면 부팅시 그 장치가 마운트가 되지 않고 정상적인 부팅이 안될 수 있습니다.

** 마운트할때 디폴트로 적용되는 옵션과 fstab 에 설정되어 있는 defaults 항목은
메뉴얼 페이지를 보면 아래의 옵션이 적용된다고 되어있습니다.

defaults
 Use default options: rw, suid, dev, exec, auto, nouser, and async.

옵션설명 -
rw : 읽기,쓰기
ro : 읽기전용
suid : setuid 퍼미션 허용
nosuid:setuid 퍼미션 허용하지 않음
exec : 실행파일 실행권한 허용
noexec: 실행파일 실행권한 허용하지 않음
user:일반유저에게 마운트권한 허용
nouser : 일반사용자에게는 마운트 권한 허용하지 않음
auto : mount -a 명령어로 마운트할 경우 자동마운트 허용

*. 나머지 옵션에 대해서는 fstab file및 mount 명령의 메뉴얼 페이지를 
참고 바랍니다.

'Log > Linux' 카테고리의 다른 글

파일시스템 점검 및 복구  (0) 2011.11.28
파일시스템 생성작업  (0) 2011.11.28
작업예약 schedule - cron / at  (0) 2011.11.28
process 관리  (0) 2011.11.28
파일 권한(Permission)  (0) 2011.11.28
Posted by logwatch

cron - 주기적으로 실행될 작업 예약
at - 한번만 실행될 작업 예약

cron 서비스 데몬은 crond.
at 서비스 데몬은 atd.

crontab 형식 및 옵션

#crontab --help
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)

crontab 설정은 아래와 같다.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

#--- 여기까지는 cron 작업을 위한 환경변수

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

#-- 여기는 주기적인 실행을 위한 설정 및 실행할 디렉토리.

형식:

분 시 일 월 요일 권한 실행명령 실행파일및 디렉토리

분: 0 ~ 59
시: 0 ~ 23
일: 1 ~ 31
월: 1 ~ 12
요일 : 0 ~ 6

예를 들면 아래내용은

22 4 * * 0 root run-parts /etc/cron.weekly

일요일 오전 4시 22분이 되면 root 권한으로 /etc/cron.weekly 에 있는 파일을 실행한다는 의미.

cron 사용 권한 설정

/etc/cron.allow 파일이 있는경우 cron.allow 에 기록이 된 사용자만 cron 을 사용할 수 있다.
/etc/cron.allow 이 없고 /etc/cron.deny 파일만 있는경우 /etc/cron.deny 에 기록이 안된 사용자만 cron을 사용할 수 있다.
두 파일이 모두 없으면 root 를 제외하고 아무도 cron을 사용할 수 없다.

EXAMPLE CRON FILE
# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to 'paul', no matter whose crontab this is
MAILTO=paul
#
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 2:15pm on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly
# run at 10 pm on weekdays, annoy Joe
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun echo "run at 5 after 4 every sunday"

at

- 주기적으로 반복 실행할 수 없고 예약된 시간에 한번만 실행한다.

주요옵션

at -l ; 예약된 작업 보기
atq ; 예약된 작업보기
atrm ; 예약된 작업삭제하기

작업예약하기 형식

at 예약날짜 및 시간

ex) at 03pm
at 07am
at -t 0809201830 => 2008년 9월 20일 18시 38분 , -t 날짜 및 시간을 표기하기 위한 옵션
at now + 1 hour
at now + 10 min
at now + 2 days
at now + 1 hour -f /usr/sbin/poweroff => 1 시간뒤에 시스템을 끈다.(-f 는 실행파일명을 적기 위한 옵션)

ex 2)

[root@/]# at -t 09201830
at> httpd start
at> <EOT>
job 19 at 2008-09-20 18:30

at 사용권한 (man at 중에서...)

If the file /etc/at.allow exists, only usernames mentioned in it are allowed to use at.
If /etc/at.allow does not exist, /etc/at.deny is checked, every username not mentioned in it is then allowed to use at.
If neither exists, only the superuser is allowed use of at.
An empty /etc/at.deny means that every user is allowed use these commands, this is the default configuration.


'Log > Linux' 카테고리의 다른 글

파일시스템 생성작업  (0) 2011.11.28
리눅스 파일시스템 및 마운트  (0) 2011.11.28
process 관리  (0) 2011.11.28
파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:19 Log/Linux

process 관리

Process 관리

process는 흔히 실행중인 프로그램을 뜻한다. file과는 다른 의미이다. file은 디스크 상에 존재하며 수동적이다.
process는 메모리에 있거나 cpu가 실행하는 상태를 의미한다

예를 들면

디스크의 특정 파티션의 특정 디렉토리에 있는 ls 명령을 실행하면 ls 명령이 메모리에 올라가고 cpu 자원을 할당 받아
실행된다. 이것을 process 라고 하며 실행이 끝나면 메모리에서 완전히 제거된다.

프로세스 관리는 중요하다. 프로세스를 잘못관리하면 시스템 성능이 떨어질 수 있으며 보안상 시스템이 취약해질 수도 있다.

프로세스 상태보기

ps

PS(1) Linux User's Manual PS(1)
NAME ps - report process statusSYNOPSIS
ps [options]
[lee@river ex]$ ps
PID TTY TIME CMD
3397 pts/1 00:00:00 bash
3578 pts/1 00:00:00 ps
[lee@river ex]$

두개의 프로세스가 실행중이다.

ps 명령을 아무런 옵션 없이 사용하면 출력되는 내용은 현재 터미널에서(여기서는 pts/1) 현재 사용자 권한
(여기서는 lee)으로 실행(메모리에 있거나 cpu 자원을 할당받은)중인 프로세스만 출력된다. 아무런 옵션 없이
사용하면 가장 단순한 형태로 출력해준다.

위의 ps 명령의 각 항목의 의미는 아래와 같다.

PID : 커널이 식별하는 프로세스 식별자
프로세스가 생성되는 순서대로 번호가 할당되며 1번은 init 이다.
TTY : 프로세스가 어떤 터미널에서 실행되었는가 하는 정보
TIME : 프로세스가 cpu를 점유한 누적 시간
CMD : 프로세스 이름

모든 프로세스 목록을 다 보고 싶다면 -e 옵션을 사용하면 된다.

[lee@river ex]$ ps -e
PID TTY STAT TIME COMMAND 1 ? S 0:04 init [3]
2 ? SW 0:00 [keventd]
3 ? SW 0:00 [kapmd]
4 ? SWN 0:00 [ksoftirqd_CPU0]
5 ? SW 0:00 [kswapd]
6 ? SW 0:00 [kscand/DMA]
7 ? SW 0:00 [kscand/Normal]
8 ? SW 0:00 [kscand/HighMem]
10 ? SW 0:00 [kupdated]
11 ? SW 0:00 [mdrecoveryd]
15 ? SW 0:00 [kjournald]
73 ? SW 0:00 [khubd]
285 ? SW 0:00 [kjournald]
286 ? SW 0:00 [kjournald]

위에 출력결과중 TTY는 프로세스가 실행된 터미널을 나타내는데 ? 로 표시된 것은 터미널과 관계없는
프로세스를 뜻한다. 예를 들면 부팅할 때 자동으로 실행된 프로세스를 의미한다.

그리고 STAT 는 프로세스 상태를 나타내는 부분으로 여기에서 몇 가지가 있다.

S (sleep) : 프로세스가 cpu 자원을 기다리고 있는 상태
SW : 프로세스가 swap 영역에 내려와 있는 상태(스왑파티션에 있다)
(한정된 메모리 자원을 효율적으로 사용하기 위해 일부 프로세스가 swap 영역으로 내갈 수 있다)
SWN : swap 영역에 있는 프로세스중 cpu 자원을 할당받을 우선순위가 낮은 상태
T : 중단된 상태
R : Runable 또는 Running 상태
Z : Zombie 상태

주요옵션

-e : 모든 프로세스 출력
-f : 프로세스 소유자 및 부모 프로세스 정보까지 출력
-ef : -e와 -f 는 주로 같이 붙여서 많이 사용된다.

프로세스도 file system 처럼 계층구조로 되어 있다.
부모프로세스가 있고 그 아래에 자식 프로세스가 있는 구조이다.

ex)
[lee@river book]$ pstree

pstree -u 사용자 => 특정 사용자 권한의 프로세스만 tree 구조로 출력할 수 있다.

ex)
[lee@river book]$ pstree -u lee
bash---bash---pstree

[lee@river book]$

부모 프로세스의 pid 를 출력하고자 하는 경우에는 -f 옵션을 사용하면 된다.

ex)[lee@river book]$ ps -f
UID PID PPID C STIME TTY TIME CMD
lee 3122 3119 0 10:17 pts/0 00:00:00 -bash
lee 3522 3122 0 11:11 pts/0 00:00:00 bash
lee 3613 3522 0 11:37 pts/0 00:00:00 ps -f
[lee@river book]$

몇개의 자식 프로세스를 만들고 테스트 해보자

[lee@river book]$ sleep 300 &
[1] 3614

[lee@river book]$ sleep 600 &
[2] 3615

[lee@river book]$ sleep 900 &
[3] 3616

[lee@river book]$ pstree -u lee
bash---bash-+-pstree
`-3*[sleep]

위에서 실행한 3개의 sleep 프로세스의 부모 프로세스는 바로 위에 있는 bash 라는것을 알 수 있다.
그렇다면 자식 프로세스가 죽기 전에 부모프로세스가 죽는다면 자식 프로세스는 어떻게 될까? 확인해보자

[lee@river book]$ ps -f
UID PID PPID C STIME TTY TIME CMD
lee 3122 3119 0 10:17 pts/0 00:00:00 -bash
lee 3522 3122 0 11:11 pts/0 00:00:00 bash
lee 3614 3522 0 11:38 pts/0 00:00:00 sleep 300
lee 3615 3522 0 11:38 pts/0 00:00:00 sleep 600
lee 3616 3522 0 11:38 pts/0 00:00:00 sleep 900
lee 3620 3522 0 11:40 pts/0 00:00:00 ps -f

여기서 PPID 가 Parent PID 즉, 부모프로세스id 이다.

[lee@river book]$ kill -9 3522 <= 프로세스를 죽이는 명령어

[lee@river newbook]$ ps -f
UID PID PPID C STIME TTY TIME CMD
lee 3122 3119 0 10:17 pts/0 00:00:00 -bash
lee 3614 1 0 11:38 pts/0 00:00:00 sleep 300
lee 3615 1 0 11:38 pts/0 00:00:00 sleep 600
lee 3616 1 0 11:38 pts/0 00:00:00 sleep 900
lee 3621 3122 0 11:40 pts/0 00:00:00 ps -f

부모 프로세스가 메모리에서 제거되었으나 자식 프로세스는 여전히 살아있다.
부모 프로세스가 1로 변경되었다. 그래서 sleep 프로세스는 여전히 부모 프로세스를 갖고
메모리에 남아있다. 부모 프로세스가 죽어도 자식 프로세스는 죽지 않는다는 것을 알 수 있다.

이번에는 pstree 로 확인해보자

[lee@river newbook]$ pstree -u lee
sleep
sleep
sleep
bash---pstreebash---man---sh---sh-+-less
`-nroff---groff---grotty
[lee@river newbook]$

sleep 프로세스의 소유자는 여전히 lee 이지만 더이상 bash의 자식은 아니라는것을 알 수 있다

프로세서 제어 명령어 kill

불필요한 프로세스가 메모리에 남아 있다면 메모리 리소스를 줄이기 위해 제거해야 한다.
프로세스를 제거하는 명령은 kill 이다.

[lee@river newbook]$ help kill
kill: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
Send the processes named by PID (or JOB) the signal SIGSPEC. If SIGSPEC is not present,
then SIGTERM is assumed. An argument of `-l' lists the signal names; if arguments follow `-l'
they are assumed to be signal numbers for which names should be listed. Kill is a shell
builtin for two reasons: it allows job IDs to be used instead of process IDs, and, if you have reached
the limit on processes that you can create, you don't have to start a process to kill another one.

[lee@river newbook]$man kill
KILL(1) Linux Programmer's Manual KILL(1)
NAME kill -
SYNOPSIS kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ]

kill 은 shell 내장 명령어인 동시에 외부명령어로도 존재한다. kill 명령을 경로 없이 사용한다면
shell 내장 명령어 kill 이 사용된다. 둘 다 비슷하지만 완전히 같진 않다.

kill 명령은 프로세스에게 특정 signal 을 전달하는 명령어인데 아래에 전달 할 수 있는 모든 signal의 종류를 확인할 수
있다. 그러나 일반적으로 자주 사용되는 것들은 몇 안 된다.

[lee@river newbook]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN22) SIGTTOU 23) SIGURG
24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 33) SIGRTMIN
... 이하생략.

주요 signal

1) SIGHUP : 프로세스 재실행이다. 죽였다가 다시 실행하는것과 같다.
2) SIGINT : 현재 프로세스 강제종료. ctrl+c 를 사용한다.
9) SIGKILL : 가장 많이 사용되는 시그널로 프로세스 강제 종료이다. 프로세스가 어떤일을 하든 무조건 죽인다.
물론 죽일 수 없는 예외적인 프로세스도 존재한다. 예를 들면 init 프로세스
15) SIGTERM : 프로세스 종료.
이 시그널을 사용하면 프로세스가 종료되지 않을 수도 있다.강제종료가 아니기 때문이다.
20) SIGTSTP : 현재 프로세스 강제 중단. ctrl+z 사용

위에서 언급한 signal 외에 다른 signal 들은 잘 사용되지 않는다.

ex)[lee@river newbook]$ sleep 900 &
[1] 3658 <= sleep 의 pid

[lee@river newbook]$ ps
PID TTY TIME CMD
3122 pts/0 00:00:00 bash
3658 pts/0 00:00:00 sleep
3659 pts/0 00:00:00 ps

sleep 프로세스는 실행할 때의 인자에 해당하는 시간(초)만큼 메모리를 점유한다.
필요없다고 가정하고 제거해보자.

[lee@river newbook]$ kill -SIGKILL 3658

[lee@river newbook]$[1]+ Killed sleep 900
[lee@river newbook]$

-SIGKILL 대신에 -KILL 또는 -9 라고 해도 같다. kill -l 로 출력해보면 signal을 의미하는 SIG 문자가
각 signal 앞에 다 포함되어 있는 것을 알 수 있다. 그래서 SIG 는 생략해도 되며 -9 는 -SIGKILL 의 번호를 뜻한다.
그 번호를 사용해도 된다. 다른 시그널도 다 마찬가지.

[lee@river newbook]$ sleep 600 &
[1] 3662

[lee@river newbook]$ kill 3662
[lee@river newbook]$[1]+ Terminated sleep 600
[lee@river newbook]$

종료 메세지가 다르다. 아무런 signal을 사용하지 않으면 기본적으로 -SIGTERM 시그널이 사용된다.
kill PID = kill -SIGTERM PID = kill -TERM PID = kill -15 PID => 이 세 개는 다 같은 의미이다.

-SIGTERM 은 -SIGKILL 과 달리 프로세스를 안전하게 정상적으로 종료시킨다.

다른 signal 도 확인해보자.

[root@river root]# ps -e | grep sendmail
1132 ? S 0:00 [sendmail]
1141 ? S 0:00 [sendmail]
3707 pts/0 R 0:00 grep sendmail

[root@river root]# kill -SIGHUP 1132
[root@river root]# ps -e | grep sendmail
1141 ? S 0:00 [sendmail]
3709 ? S 0:00 [sendmail]
3712 pts/0 S 0:00 grep sendmail[root@river root]#

SIGHUP signal을 전달하고 난 후 결과를 보면 1132 PID 의 sendmail PID 가 바뀐 것을 알 수 있다.
즉, sendmail 프로세스가 다시 실행되었다는 의미이다. 이렇게 프로세스를 재 실행 할 경우에는
-9로 죽이고 다시 실행하기 보다는 SIGHUP 를 사용하는 것이 편하다

[root@river root]# sleep 1000

sleep 프로세스를 실행할 때 & 붙이지 않으면 sleep 프로세스가 완전히 끝날 때까지는 shell prompt 가
보이지 않는다. 즉 command 를 사용할 수 없다. 시간이 많이 걸리는 프로세스를 실행할 때 & 붙여주지 않고 실행하면
이렇게 멀티태스킹을 사용하지 못하는 문제가 발생한다. 1000초라는 시간을 기다릴 수 없다면 죽여야 한다.
아무런 명령을 사용할 수 없지만 ctrl+c 를 입력하는 것은 가능하다.

vi 편집기 사용도중 ctrl+z 를 입력했다. 그러면

[1]+ Stopped vim a.txt
[root@river root]#vi 편집기가 강제 중단된다. ctrl+z 를 입력하면 현재 프로세스를 강제 중단하는 시그널을
전달하기 때문이다.

[root@river root]# ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3665 0.0 0.1 4088 888 pts/0 S 12:10 0:00 [su]
root 3666 0.0 0.2 5448 1448 pts/0 S 12:10 0:00 -bash
root 3719 0.0 0.5 9160 2780 pts/0 T 12:17 0:00 vim a.txt
root 3726 0.0 0.1 2608 660 pts/0 R 12:19 0:00 ps -u
[root@river root]#%CPU 와 %MEM 은 각각 cpu 점유율과 메모리 점유율을 나타낸다.
vi 프로세스의 상태가 T 이다. 중단된 프로세스를 다시 재실행해야 할 경우에는
fg (foreground) 명령을 사용하면 된다.

foreground/background 프로세스

foreground 프로세스에게 터미널 제어권이 있다. foreground 프로세스가 실행중인동안에서터미널에서
명령을 바로 전달하지 못한다.

ex)[root@river root]# sleep 1000

=> sleep 프로세스가 foreground 상태로 실행중이다.

그 아래의 세 개의 명령은 sleep 프로세스가 끝나야 차례대로 실행된다. 그래서 시간이 많이 걸리는 프로세스를
foreground로 실행해서는 곤란하다. 그럴 때는 background 로 실행하면된다.
단지 실행할 때 & 기호만 붙여주면 된다.

ex)
[root@river root]# sleep 1000 &
[2] 3733
[root@river root]# ls
a.txt anaconda-ks.cfg b.txt contest.txt hello unix install.log install.log.syslog
[root@river root]# pwd
/root[root@river root]#
=> 이제 터미널 제어권이 sleep 에게 있지 않으므로 명령을 계속 입력하는 것이 가능하다.
*.background 프로세스는 jobs 명령어로 따로 관리할 수 있다.

[root@river root]# sleep 300 &
[4] 3737

[root@river root]# sleep 900 &
[5] 3739

[root@river root]# sleep 600 &
[6] 3740

[root@river root]# jobs => 중단 또는 background 상태로 실행중인 프로세스만 출력
[1]- Stopped vim a.txt
[2] Running sleep 1000 &
[3]+ Stopped vim b.txt
[4] Running sleep 300 &
[5] Running sleep 900 &
[6] Running sleep 600 &
[root@river root]#

출력결과중 숫자는 프로세스 제어에 사용되는 job 번호 이며 +,- 기호는 가장 나중에 실행된 것,
그리고 두 번째로 나중에 실행된 프로세스를 뜻한다.

[root@river root]# kill -9 %3 %5
[root@river root]#[3]+ 죽었음 vim b.txt
[5] 죽었음 sleep 900
[root@river root]# jobs
[1]+ Stopped vim a.txt
[2] Running sleep 1000 &
[4] Running sleep 300 &
[6]- Running sleep 600 &[root@river root]#

프로세스 id 대신 job 번호로도 프로세스를 제어할 수 있다는 것을 알 수 있다.
중단 또는 백그라운드로 실행중인 프로세스를 foreground 로 전환하고자 하는 경우에는
fg %job번호를 사용하면 된다.

ex)[root@river root]# fg %6
sleep 600[6]+ Stopped sleep 600
[root@river root]# jobs
[1]- Stopped vim a.txt
[2] Running sleep 1000 &
[4] Running sleep 300 &
[6]+ Stopped sleep 600

[root@river root]# bg %6
[6]+ sleep 600 &
[root@river root]# jobs
[1]+ Stopped vim a.txt
[2] Running sleep 1000 &
[4] Running sleep 300 &
[6]- Running sleep 600 &
[root@river root]#

그리고 foreground 상태의 프로세스를 background 로 전환하고자 할 경우에는 먼저 프로세스를 ctrl+z 로
강제 중단한 후 bg 명령을 사용하면 된다.


'Log > Linux' 카테고리의 다른 글

리눅스 파일시스템 및 마운트  (0) 2011.11.28
작업예약 schedule - cron / at  (0) 2011.11.28
파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:12 Log/Linux

파일 권한(Permission)

퍼미션(Permission)

1. r(read)읽기 8진수로 4: 파일을 읽을 수 있고, 디렉토리의 내용을 볼 수 있다.
2. w(write)쓰기 8진수로 2 : 파일에 저장 및 삭제, 디렉토리에 파일저장, 디렉토리의 이름 변경, 삭제를 할 수 있다.
3. x(excute)실행 8진수로 1: 파일을 실행, 디렉토리 access 가 가능하다.

[lee@river lee]$ ls -l /etc/passwd
-rw-r--r-- 1 root root 3197 5월 4 12:57 /etc/passwd
여기서 첫 번째의 root 는 이 파일에 대한 소유자를 뜻한다.
두 번째 root 이 파일에 대한 소유그룹을 뜻한다..

[lee@river lee]$ groups lee
bin
[lee@river lee]$ head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

lee 와 bin 그룹에 속해있는 lee 사용자가 /etc/passwd 파일에 대해서 행사할 수 있는 권한은 제3자의 권한이다.
제3자가 /etc/passwd 파일에 대해 가질 수 있는 권한은 "r" 이므로 읽기가 가능하다.

[lee@river lee]$ ls -l /etc/shadow
-r-------- 1 root root 2764 5월 4 12:57 /etc/shadow

[lee@river lee]$ head -2 /etc/shadow
head: /etc/shadow: 허가 거부됨
당연히 볼 수 없다. shadow 파일은 소유자만 읽을 수 있는 퍼미션으로 되어있다.

-rwxr-xr-- 1 root root 11217 2월 11 2003 makewhatis
이 파일에 대해서는 lee 사용자가 실행할 수 없다.(제3자권한에 x 퍼미션이 없으므로)

[lee@river lee]$ /usr/sbin/makewhatis
-bash: /usr/sbin/makewhatis: 허가 거부됨

[lee@river lee]$ ls -ld /root
drwxr-x--- 4 root root 4096 5월 4 13:07 /root
디렉토리 파일의 r 권한은 디렉토리내의 파일리스트를 출력할 수 있는 권한을 뜻한다.
디렉토리 파일의 w 권한은 디렉토리내에서 파일을 생성하거나 삭제하거나 이름을 변경할 수 있는 권한을 뜻한다.
디렉토리 파일의 x 권한은 디렉토리를 access 할 수 있는 권한을 뜻한다.

[lee@river lee]$ cd /root
-bash: cd: /root: 허가 거부됨 (디렉토리에 "x" 권한이 없으므로)
[lee@river lee]$ ls -l /root
ls: /root: 허가 거부됨 (디렉토리에 "r" 권한이 없으므로)
[lee@river lee]$ touch /root/a.txt
touch: creating `/root/a.txt': 허가 거부됨 (디렉토리에 "w" 권한이 없으므로)

퍼미션 변경
chmod(change mode)

1. chhmod octal mode file 명

ex)[root@river tmp]# chmod 654 a.txt
[root@river tmp]# ls -l a.txt
-rw-r-xr-- 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# chmod 203 a.txt

[root@river tmp]# ls -l a.txt
--w-----wx 1 root root 5 5월 6 21:30 a.txt
[root@river tmp]#

2. chmod symbolic mode file명
u : user
g: group
o: other
a: all

symmbolic mode 에는 세 개의 연산자(+, - , =)가 사용될 수 있다.

+ : 특정권한 추가
- : 특정권한 제거
= : 특정권한 변경

[root@river tmp]# ls -l a.txt
--w-----wx 1 root root 5 5월 6 21:30 a.txt
[root@river tmp]# chmod u=rx,g=rw,o=x a.txt
[root@river tmp]# ls -l a.txt
-r-xrw---x 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# chmod a-x a.txt ( a-x : u-x,g-x,o-x 와 같다)

[root@river tmp]# ls -l a.txt
-r--rw---- 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# ls -l a.txt
-r--rw---- 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]# chmod u=rwx,g-r,o+x a.txt

[root@river tmp]# ls -l a.txt
-rwx-w---x 1 root root 5 5월 6 21:30 a.txt

[root@river tmp]#

파일에 대한 소유자 및 그룹변경은chown, chgrp 명령어로 한다.

chown 소유자 file명
chgrp 그룹 file명 또는
chown 소유자:그룹 file 명

ex)[root@river tmp]# ls -l a.txt
-rwx-w---x 1 lee root 5 5월 6 21:30 a.txt

[root@river tmp]# chgrp sys a.txt

[root@river tmp]# ls -l a.txt
-rwx-w---x 1 lee sys 5 5월 6 21:30 a.txt

[root@river tmp]# chown root:bin a.txt

[root@river tmp]# ls -l a.txt
-rwx-w---x 1 root bin 5 5월 6 21:30 a.txt

[root@river tmp]#

그 외에 아래와 같은 세 가지 퍼미션이 더 있다.

1. s(set UID) (4nnn n은 8진수) : --s-------
소유자 권한에 s 가 있으면 setUID 퍼미션이다.(실행하는 동안 소유자 권한을 갖는다)
2. s(set GID) (2nnn): ------s--- :
그룹 권한에 s 가 있으면 setGID 퍼미션이다.(실행하는 동안 그룹권한을 갖는다)
3. t(sticky bit) (1nnn): --------t :
3자권한에 t 가 있으면 sticky bit 퍼미션이다.(파일을 만들 수 있다. 그러나 파일소유자만 파일을 삭제할 수 있다)

sticky bit 퍼미션
[root@river var]# mkdir share

[root@river var]# ls -ld share
drwxr-xr-x 2 root root 4096 5월 6 20:22 share
[root@river var]# ls -ld share
drwxrwxrwx 2 root root 4096 5월 6 20:22 share

[lee@river lee]$ id
uid=500(lee) gid=500(lee) groups=500(lee),1(bin)

[lee@river lee]$ ls -l /var/share/a.txt
-rw------- 1 root root 5 5월 6 20:27 /var/share/a.txt

[lee@river lee]$ rm -f /var/share/a.txt

[lee@river lee]$ ls -l /var/share/a.txt
ls: /var/share/a.txt: 그런 파일이나 디렉토리가 없음

share 디렉토리에 모든 사용자가 자신의 파일을 저장하고 사용하게 하려면 777 퍼미션을 줘야 한다.
그러나 퍼미션이 777 이면 디렉토리내의 파일명을 생성, 수정 그리고 삭제할 수 있는 권한을 갖게 되므로
문제가 된다. (자신이 만든 파일 퍼미션을 어떤 식으로 하더라고 다른 사람이 삭제할 수 있게 된다)
이럴 때 사용되는 퍼미션이 sticky bit 퍼미션이다.
sticky bit 퍼미션이 설정되어 있으면 소유자 외에는 파일을 삭제할 수 없게 되므로 자신의 파일을
다른 사용자로부터 보호할 수 있다.

[root@river var]# chmod 1777 share

[root@river var]# ls -ld share
drwxrwxrwt 2 root root 4096 5월 6 20:22 share

[root@river var]# su - lee

[lee@river lee]$ whoami
lee

[lee@river lee]$ ls -ld /var/share
dwxrwxrwt 2 root root 4096 5월 6 20:30 /var/share

[lee@river lee]$ ls -l /var/share/a.txt
-rw------- 1 root root 5 5월 6 20:30 /var/share/a.txt

[lee@river lee]$ rm -f /var/share/a.txt
rm: cannot remove `/var/share/a.txt': 명령이 허용되지 않음[lee@river lee]$

* 아래의 두 개의 퍼미션은 Process 에 대한 이해가 필요하다.

setUID 퍼미션

보안과 관련되어 있는 퍼미션으로 이 퍼미션을 잘못관리하면 보안상 문제가 발생할 수 있다.
소유자 권한으로 파일을 실행할 수 있다.

[lee@river lee]$ id
uid=500(lee) gid=500(lee) groups=500(lee),1(bin)
[lee@river lee]$

[lee@river lee]$ find /root -name .bashrc
find: /root: 허가 거부됨

프로세스의 권한은 사용자 권한을 그대로 따른다 root 사용자는 /root 디렉토리에 읽고,쓰고,실행할 수 있는
권한을 가지고 있다. 그러면 root 가 실행한 프로세스도 마찬가지다.
그리고 lee 사용자는 /root 디렉토리에 대해 아무런 권한도 없으므로 lee 사용자가 실행한 find 프로세스도
마찬가지이다.

예를 들면
[lee@river lee]$ sleep 30 &
[2] 31083

[lee@river lee]$ ps -aux | grep sleep
lee 31083 0.0 0.1 4692 528 pts/1 S 21:03 0:00 sleep 30
lee 31086 0.0 0.1 4668 652 pts/1 S 21:03 0:00 grep sleep
[lee@river lee]$sleep 프로세스의 소유자는 프로세스를 실행한 lee가 된다.그러나 sleep 프로세스에
set uid 퍼미션이 설정되어 있다면
ls -l /bin/sleep
-rwsr-xr-x 1 root root 12444 2월 19 2003 /bin/sleep
[lee@river lee]$ sleep 30 &
[1] 31133

[lee@river lee]$ ps -aux | grep sleep
root 31133 0.0 0.1 4692 528 pts/1 S 21:06 0:00 [sleep]
[lee@river lee]$프로세스 소유자가 lee가 아니라 root 인 것을 알 수 있다.

이제 find 명령어에 setuid 퍼미션을 설정하고 다시 테스트해보자

[root@river root]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz

[root@river root]# chmod 4755 /usr/bin/find

[root@river root]# ls -l /usr/bin/find
-rwsr-xr-x 1 root root 51028 1월 25 2003 /usr/bin/find
[root@river root]#

find 명령어에 setuid 퍼미션이 설정되었으며 소유자는 현재 root로 되어 있다.

[root@river root]# su - lee

[lee@river lee]$ find /root -name .bashrc
/root/.bashrc
[lee@river lee]$

find 프로세스가 root 권한으로 실행되므로 처음과 달리 lee 사용자가 /root 아래에 있는
.bashrc 파일을 검색할 수 있게 되었다.

setUID 퍼미션이 필요한 이유는?

예를들면

모든 사용자의 비밀번호는 /etc/shadow 라는 파일에 저장되어 있다.
사용자가 자신의 패스워드를 변경한다면 그 변경된 패스워드는 shadow 파일에 기록이 되어져야만 한다.
그렇다고 shadow 파일을 수정할 수 있는 권한을 준다면 당연히 보안상 문제가 발생한다.
setuid 퍼미션은 그럴 때 필요한 것이다. 사용자가 root 권한이 필요한 파일에 엑세스 해야 하는경우
setuid 퍼미션이 필요하다.

setGID 퍼미션

setGID 퍼미션의 개념은 setUID 퍼미션의 개념과 다르지 않다.
파일의 소유 그룹권한으로 실행할 수 있는 권한이다.

*.아래는 bash 메뉴얼 페이지의 일부내용이다.
setuid 퍼미션을 테스트할때 알아두면 도움이 된다.

-p      Turn on privileged mode.  In this  mode,  the  $ENV  and
                      $BASH_ENV  files  are not processed, shell functions are
                      not inherited from the environment,  and  the  SHELLOPTS
                      variable,  if it appears in the environment, is ignored.
                      If the shell is started with the effective user  (group)
                      id  not  equal  to  the real user (group) id, and the -p
                      option is not supplied, these actions are taken and  the
                      effective user id is set to the real user id.  If the -p
                      option is supplied at startup, the effective user id  is
                      not reset.  Turning this option off causes the effective
                      user and group ids to be set to the real user and  group
                      ids.

set [-o 옵션] [인수...]
-p : privileged 모드를 켠다. 이모드에서는 $ENV 파일을 처리하지 않으며
셀함수를 환경으로부터 상속하지 않는다. 유효사용자(그룹) id와 실제 사용자(그룹) id 가 일치하지
않으면 시동할 때 자동으로 작동한다. 이옵션을 끄면 유효사용자, 그룹 id를 실제 사용자, 그룹id로
설정한다.

'Log > Linux' 카테고리의 다른 글

작업예약 schedule - cron / at  (0) 2011.11.28
process 관리  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:11 Log/Linux

계정관리

계정관리

linux system에는 크게 세 가지 종류의 계정이 있다

root : super user 계정이라고도 하며 관리자 계정으로 거의 모든 권한을 행사할 수 있는 계정
system 계정 : 일반적으로 login은 안되며 system 운영상 필요한 계정
일반user 계정: 시스템 운영목적이 아닌 일반사용자를 위한 계정

계정관련 파일

/etc/passwd, /etc/shadow, /etc/group
- 이 가운데 한 가지 파일이라도 잘못되면 사용자는 정상적으로 login 하지 못할 수 있다.

ex)
[lee@river lee]$ head -5 /etc/passwd; tail -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash 관리자 계정

bin:x:1:1:bin:/bin:/sbin/nologin 시스템 계정

daemon:x:2:2:daemon:/sbin:/sbin/nologin 시스템 계정

adm:x:3:4:adm:/var/adm:/sbin/nologin 시스템 계정

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 시스템 계정

user1:x:3041:3041::/home/user1:/bin/bash 일반유저계정

user2:x:3042:3042::/home/user2:/bin/csh 일반유저계정

ftp1:x:3043:3043::/home/ftp1:/bin/tcsh 일반유저계정

패스워드 파일 포맷

man -S5 passwd
There is one entry per line, and each line has the
format:
account:password:UID:GID:GECOS:directory:shell

의미 있는 문자열 및 각 숫자는 콜론 문자로 구분되어 있다.
root : 계정명

x : 패스워드 필드 x 로 표시되어 있으면 패스워드가 /etc/shadow 파일에 저장되어 있다는 의미
패스워드를 shadow 파일에 두면 패스워드를 보호할 수 있다.(shadow file 에 대한 접근은 root 만이 가능하다)

0 : 커널이 참조하는 root 사용자의 식별자.

0 : root 사용자가 속한 첫 번째 그룹(primary group)을 나타낸다

root : 단순히 참고하기위한 용도로 사용되며 이 필드는 비어져 있어도 된다

/root : root 사용자의 홈 디렉토리

/bin/bash : login shell

shadow 파일 포맷

[root@river root]# head -2 /etc/shadow ; tail -2 /etc/shadow
root:$1$0lvCjXwW$JwSLfSuCJGtHebt.0BJGr/:13587:0:99999:7:::
bin:*:13587:0:99999:7:::
user2:!!:13635:0:99999:7:10::
ftp1:$1$xHaNZCYY$kLaYYpY.q7yydEhgxTNum0:13637:0:99999:7:10::

shadow 파일의 각 포맷 역시 도움말 안에 상세한 내용이 나와 있다.

[root@river root]# man -S5 shadow

SHADOW(5) SHADOW(5)
NAME shadow - encrypted password file
DESCRIPTION shadow contains the encrypted password information for
user's accounts and optional the password aging information.
Included is
Login name
Encrypted password
Days since Jan 1, 1970 that password was last changed
Days before password may be changed Days after which password must be changed
Days before password is to expire that user is warned
Days after password expires that account is disabled
Days since Jan 1, 1970 that account is disabled
A reserved field

[root@river root]# head -1 /etc/shadow
root:$1$0lvCjXwW$JwSLfSuCJGtHebt.0BJGr/:13587:0:99999:7:::[root@river root]#

root : 계정명

$1$0lvCjXwW$JwSLfSuCJGtHebt.0BJGr : 암호화된 비밀번호

13587 : root 사용자가 패스워드를 마지막으로 변경한 날짜를 1970년 1월 1일 기준으로 계산한 일수이다.

0: 패스워드를 변경할 수 있는 최소한의 일수를 나타낸다. (0 으로 되어 있으면 설정이 되어 있지 않다는 의미로
패스워드를 변경을 언제든지 할 수 있다)

99999 : 패스워드를 반드시 변경해야만 하는 일수이다. (숫자가 이렇게 되어 있으면 설정이 되어 있지 않다는 의미)

7 : 패스워드 만료일이 되기 전에 언제부터 경고메시지를 보여줄 것인가 하는 필드

: : 유예기간 - 패스워드 만료일까지 사용자가 패스워드를 변경하지 않았다면 계정을 바로 잠그도록 하는 것이 아니라
이 기간 동안은 패스워드를 변경할 수 있도록 하겠다는 것이다. 유예기간동안에도 패스워드를 변경하지 않는다면
그 계정은 잠기게 되므로 사용하지 못한다.

: : 계정이 expire 되는 날을 뜻한다.

* finger 명령으로 passwd 파일을 쉽게 볼 수 있으며 chage 명령으로 shadow 파일을 쉽게 볼 수 있다.

ex)
[root@river root]# finger root
Login: root Name: rootDirectory: /root
Shell: /bin/bash
On since Mon Apr 23 21:40 (KST) on tty1 5 days 13 hours idle
Last login Wed Apr 25 17:01 (KST) on pts/0 from 211.54.45.118
New mail received Sun May 6 04:02 2007 (KST) Unread since Mon Mar 12 11:05 2007 (KST)
No Plan.

[root@river root]# chage -l root
최소: 0

최대: 99999

경고: 7

유효하지 않음: -1

마지막 변경: 3월 15, 2007

패스워드 만기: 불가

패스워드가 유효하지 않음:

계정 만기:불가

group file

ex
[root@river root]# head -2 /etc/group; tail -2 /etc/group
root:x:0:root,user7,admin
bin:x:1:root,bin,daemon,lee
user2:x:3042:ftp1:x:3043:

=> 분석 =>

root : group 이름

x : 패스워드 필드를 뜻한다. (요즘은 쓰이지 않는다. 의미 없는 필드이다)

0 : root 그룹의 식별자

root,user7,admin : root 그룹에 속해있는 사용자. 그룹에 속해있는 사용자가 하나이상일 경우에는 사용자사이를
콤마로 구분

사용자 계정을 추가
명령어는 useradd 또는 adduser 이다.

[root@river root]# ls -l /usr/sbin/adduser
lrwxrwxrwx 1 root root 7 3월 11 23:27 /usr/sbin/adduser -> useradd
* adduser 는 단지 링크파일

*.명령을 옵션없이 그냥입력하면 친절하게 사용법이 출력된다.

[root@river root]# useradd
사용법: useradd [-u uid(사용자 아이디) [-o]] [-g 그룹명][-G 그룹,...]
[-d 홈디렉토리][-s 쉘][-c 적요사항][-m [-k template]]
[-f 비활성화] [-e 만기] [-p passwd] [-M] [-n] [-r] name
useradd -D [-g 그룹명][-b 초기디렉토리][-s 쉘][-f 비활성화] [-e 만기]

useradd 명령어 사용법이 두 가지 형식이 있다는 것을 보여준다.useradd 옵션, 그리고 useradd -D 옵션
여기서 useradd -D 옵션은 디폴트값과 관련 있다. 예를 들면
[root@river root]# useradd -D
그룹=100
홈디렉토리=/home
비활성화=10
만기=
쉘=/bin/bash
SKEL=/etc/skel

위에 출력된 것이 useradd 명령의 디폴트 값이다.
사용자 계정을 추가할 때 홈디렉토리를 지정하지 않으면 /home 그리고 login shell을 지정하지 않으면 /bin/bash
가 지정된다는 그런 의미이다.

[root@river root]# useradd kildong
useradd 명령을 옵션 없이 사용하면 아래와 같은 디폴트값이 지정된다.

[root@river root]# finger kildong
Login: kildong Name: (null)Directory: /home/kildong Shell: /bin/bash
Never logged in
No mail.
No Plan.

[root@river root]# groups kildong
kildong : kildong => kildong은 하나의 primary 그룹에만 속해있다.디폴트 값을 쓰기 싫다면

[root@river root]# useradd -u 5555 -G sys,bin -d /var/kildong2 -c "hong kil dong" -s /bin/csh kildong2

[root@river root]# finger kildong2
Login: kildong2 Name: hong kil dong
Directory: /var/kildong2 Shell: /bin/csh
Never logged in
No mail
No Plan.

[root@river root]# groups kildong2
kildong2 : kildong2 bin sys => kildong2 는 하나의 primary group과 두개의 secondary 그룹에 속해있다.

[root@river root]#

계정삭제

userdel
사용법: userdel [-r] 이름[root@river root]#

-r : 계정 삭제시 홈디렉토리까지 삭제

ex)
[root@river root]# userdel kildong
[root@river root]# finger kildong
finger: kildong: no such user.

[root@river root]# ls -ld /home/kildong
drwx------ 5 3044 3044 4096 5월 6 22:53 /home/kildong
=> 계정 삭제시 -r 옵션을 사용하지 않았으므로 홈 디렉토리가 남아있다.

[root@river root]# userdel -r kildong2
[root@river root]# ls -ld /var/kildong2
ls: /var/kildong2: 그런 파일이나 디렉토리가 없음 => 디렉토리까지 삭제되었다.

계정설정 변경

usermod
명령의 사용법은 useradd와 상당히 유사. 단 usermod 명령어로 계정을 생성할 순 없다. 변경만 가능하다.

[root@river root]# useradd kildong
[root@river root]# finger kildong
Login: kildong Name: (null)
Directory: /home/kildong Shell: /bin/bash
Never logged in.
No mail.
No Plan.

[root@river root]# usermod
사용법: usermod [-u uid(사용자 아이디) [-o]] [-g 그룹명][-G 그룹,...]
[-d 홈 디렉토리 [-m]] [-s 쉘] [-c 적요사항] [-l 새_이름]
[-f 비활성화] [-e 만기] [-p 패스워드] -L|-U] 이름

[root@river root]# usermod -s /bin/bash -c "hongkildong" kildong

[root@river root]# finger kildong
Login: kildong Name: hongkildong
Directory: /home/kildong Shell: /bin/bash
Never logged in.
No mail.
No Plan.

=> kildong 사용자 정보가 바뀌었다. login shell 이 변경되었으며 Name이 추가된 것을 알 수 있다.

그룹 추가 및 삭제, 변경

ex)
[root@river root]# groupadd
usage: groupadd [-g gid [-o]] [-r] [-f] group

[root@river root]# groupadd group1

[root@river root]# tail -2 /etc/group
kildong:x:3044:group1:x:3045:

[root@river root]# groupmod -g 4000 group1

[root@river root]# tail -2 /etc/group
kildong:x:3044:group1:x:4000:

[root@river root]# groupdel group1
[root@river root]# tail -2 /etc/group
ftp1:x:3043:kildong:x:3044:

[root@river root]#

*. 사용자 계정 생성시 자동으로 만들어지는 파일은 skel 항목과 관련있다.


'Log > Linux' 카테고리의 다른 글

process 관리  (0) 2011.11.28
파일 권한(Permission)  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:11 Log/Linux

vi 편집기

vi 편집기

unix의 일반 text 모드에서 사용되는 편집기에는 vi, emacs, pico 등이 있다.

특징

pico 편집기는 쉽고 단순하다. 간단한 편집 유틸리티 정도로 볼수 있음.

vi - 유닉스에서 가장 널리 사용되는 대중적인 편집기 *. 위키백과사전에 설명되어 있는 vi

emacs - 강력한 편집 기능 제공, vi 편집기에 비하면 더 복잡하고 크다.

* 레드헷을 포함한 대부분의 리눅스에서 기본적으로 사용되는 vi 편집기는 vi 편집기의 기능을 좀 더 향상 시킨
vim(vi improved) 이라는 편집기가 vi 라는 이름으로 사용되고 있으며 본래의 vi 편집기에 비해 사용하기 편한 좀
더 많은 기능을 제공한다.

vi 편집기 mode

vi 편집기 명령어는 크게 세 가지 모드로 나뉘어 질수 있다.

명령 모드 : vi 편집기의 기본모드.( 입력 상태이면 편집 명령어 사용 불가능)

입력모드 : i,I,a,A,o.O (입력모드 상태가 아니면 편집기 입력이 불가능)

확장모드(ex 모드, 또는 last line 모드라고 부른다.? - 왼쪽 하단에 명령어가 표시된다)

각 모드에서 사용하는 명령어는 정해져 있으며 입력모드 명령어가 가장 적다(i,I,a,A,o.O)

확장 모드 명령어는 명령어를 입력할 때 대부분 먼저 ‘:’을 붙이고 명령어를 입력함으로써

다른 모드 명령어와 구분이 된다.

각 모드 사이의 전환

명령어 모드 => 입력모드 전환 ; 입력모드 명령어중 하나를 사용.

입력모드 => 명령모드전환 ; esc 키 입력

입력모드 => 확장모드 ; 명령모드로 전환 후 확장모드 명령어 입력.

vi 편집기 명령어

커서 이동 명령

j(↓) 아래로 이동

k(↑) 위로 이동

h(←) 왼쪽으로 이동

l (→) 오른쪽으로 이동

G(go) 제일 끝줄로 이동

nG n번째 행으로 이동.

^b(back) 한 화면 위로 이동

^f(forward) 한 화면 아래로 이동

^u(up) 반 화면 위로 이동

^d(down) 반 화면 아래로 이동

e 한 단어 뒤로 이동

b 한 단어 앞으로 이동

0 줄의 제일 처음부터 이동

$ 줄의 제일 끝으로 이동

*. vi 편집기 명령어중 반복할 수 있는 일부 명령어 앞에? n(숫자)을 붙일 수 있다.
이때 n 의 의미는 n 뒤의 명령을 n 번 반복하라는 의미이다.
ex) 3dd => dd 명령을 세 번 반복하라. => 세 줄이 삭제된다.

입력 명령어

i 현재 커서 위치에 삽입(커서 위치에 문자를 오른쪽으로 한 칸 밀고 삽입)

a 현재 커서 위치 다음에 삽입 (a == "l + i")

o 현재 커서가 위치한 줄의 아랫줄에 삽입(o == "$ + a + Enter")

I 현재 커서가 위치한 줄의?맨 앞에 삽입 (I == "0 + i")

A 현재 커서가 위치한 줄의?맨 뒤에 삽입 (A == "$ + a")

O 현재 커서가 위치한 줄의?바로 위에 삽입

지우기 명령어

x 현재 커서 위치의 문자를 지운다. (nx x를 n번 반복)

dd 현재 커서가 위치한 줄을 지운다. (ndd dd를 n번 반복)

dw 현재 커서가 위치한 단어를 지운다.

d$ 현재 커서가 위치한 곳부터 그 행의 끝까지를 지운다.

dG 현재 커서가 위치한 행부터 편집문서의 마지막 줄까지 삭제한다.

*. 삭제한 내용은 바로 지워지지 않고 버퍼에 저장되므로 붙여넣기 하거나 취소 할 수 있다.

* 리눅스에 서 사용하는 vim 편집기는 undo를 여러 번 수행할 수 있다

복사하기와 붙이기

yy(=Y) 현재 커서가 위치한 줄을 버퍼에 복사한다.

(nyy => 현재 커서가 위치한 곳부터 아래로 n 라인을 버퍼에 복사한다)

yw 현재 커서가 위치한 단어를 버퍼에 복사한다.

(nyw => 현재 커서가 위치한 단어부터 오른쪽으로 n개의 단어를 버퍼에 복사한다)

p 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.

P 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.? "xyy x라는 버퍼에 라인을 카피한다. (버퍼에 이름을 붙여서 사용하면 편집기가 열려 있는 동안은?버퍼의 내용을 잊어버리지 않는다.)

치환

r 현재 위치의 문자를 한개만 바꾼다.

R 현재 커서위치에서 오른쪽으로 esc 키를 입력할 때 까지 바꾼다.

cw 현재 위치의 단어를 바꾼다.

cc 현재 커서가 위치한 줄을 바꾼다.

C 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.

~ 대소문자를 서로 바꾼다.

기타 명령어

J 현재 줄과 다음 줄을 합한다.?

^g 현재 편집하고 있는 파일의 정보를 보여준다.

u 방금 한 명령을 취소한다.

^R (=redo) 취소한 명령을 다시 취소 (vim)

U 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.

. 방금한 명령을 되풀이 한다.

^l 화면 refresh

확장모드 명령어

:! shell command ; 편집기를 벗어나지 않은 상태로 shell command 를 실행한다.

:args 현재 편집하는 파일명을 보여준다.

:w 편집하는 내용을 덮어쓰기로 저장한다.

:w filename 현재 내용을 지정된 파일 이름으로 저장한다.

:w! 강제로 덮어쓰기를 한다.

:wq 현재 편집하는 내용을 저장하고 종료한다.

:wq! 현재 편집하는 내용을 강제로 저장하고 종료한다.

:q! 강제로 종료한다.

:e filename ;새로운 파일을 편집한다.

:e! 현재 파일을 저장하지 않고 편집이전의 상태에서 새로 작성한다.

:r filename 현재 커서위치 다음에 파일을 끼워 넣는다.

:14 r filename 14행 이후에 파일을 읽어 삽입한다.

:n1,n2d n1번째 행에서 n2번째 행까지를 지운다.

:n1,n2 w filename n1에서 n2행까지를 filename에 저장한다.

:3,$d 3번째 행에서 끝항까지 지운다.

:set 여러 가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경 변수를 보여준다.

:set nu ; 라인 넘버 붙이기 (<=> set nonu)

:set showmode ; 현재 명령 상태를 화면 하단에 표시

:set bg=dark 편집기 글자색을 밝게 표시 (vim)

:set ai 자동 들여쓰기

:set ic 문자열 검색시 대소문자 구분 안한다.

:ab문자 문자열? ; 문자열을 문자열 앞에 있는 문자로 줄여 사용할 수 있음.(아래아한글의 상용구 기능에 해당)

:set ts=n 기본 tab size를 n column 으로 한다.

:sp 편집기 화면 수평 분할(화면을 수평으로 여러 개 분할해서 사용할 때 쓴다) (vim)

:^ww 분할된 화면으로 커서 이동. (vim)

문자열검색

/패턴 ; 패턴에 해당하는 내용을 현재 커서위치로 부터 오른쪽에서 그리고 아래쪽으로 찾는다.

n 정방향 다음 찾기 (현재 진행방향으로 => 아래쪽으로)

N 역방향 다음 찾기 (현재 진행 방향 반대쪽으로 => 위쪽으로)

? 패턴 패턴에 해당하는 내용을 현재 커서위치로 부터 왼쪽에서 그리고 위쪽으로 찾는다.

문자열 치환

:n1,n2s/serch/replace/g ( => 시작행번호, 마지막행번호s/찾을패턴/바꿀패턴/옵션 )

(g 는 global의 의미 해당 라인의 문자열을 전부 치환, g옵션이 생략될 경우에는 한 라인에서 치환해야할 패턴이
여러 개일 경우 맨 왼쪽 에 있는 것만 치환됨.)

*. 옵션에 i 가 사용되면 intractive 모드로 명령어 실행, 바꾸기 전에 물어본다.
* . 키보드에 있는 'Del', 'PageUp','Home','End' 및 방향키는 vi 편집기에서는 사용되지 않는다.
(vi 편집기 명령에 사용되는 키가 아니므로 시스템 환경에 따라서 될 수도 있고 안될 수도 있음)

vi 환경설정.

환경설정 파일을 만들면 자주 사용되는 vi 명령을 디폴트값으로 사용 할 수 있다.
환경설정파일은 확장 모드 명령어만 사용
위치 $HOME/.exrc 또는 .vimrc

설정 파일예

set nu(=set number) : 라인번호를 붙임.

set ts=4 : tab 의 크기를 4칸으로 함

syn on(=syntax on) : syntax highlighting

set ai : 자동들여쓰기

set cindent : c 소스 코딩시 자동들여쓰기

set shiftwidth : 자동들여쓰기 간격

set showmode : 편집 상태를 화면 하단에 표시

set vb : visual beep (경고음을 시각적으로 표시)

set title : 제목표시줄에 현재 편집중인 파일명 표시

set ic(=ignorecase) : 문자열 검색 할 때 대/소문자 구분 안함

set bg=dark : 글자색을 밝게 표시되도록 한다.

*. 기타
매크로
qa 라고 하면 a 레지스터에 입력하는 모든 키가 순서대로 매크로로 저장이 된다. 매크로가 실행줄일때는 아래에 기록중이라는 메세지가 보인다. q 를 누르면 매크로 저장이 돤료된다.

매크로에 저장된 명령을 실행할때는 @a 라고 하면 된다. 반복실행할때는 5@a 이렇게 숫자를 앞에 붙여주면 된다.

* vi 편집기 연습문제 1
* vi 편집기 연습문제 2

** vi 명령어 기타 **

vim 또는 vi에서 , Tab 문자를 보려면
:set list
그러면 현재 문서의 모든 탭문자가 ^I 라는 기호로 나타난다.
그리고 라인끝에는 $ 문자가 표시된다.
탭문자를 보이지 않게 하려면
:set nolist


'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
vmware 에서 centos 5.x및 fedora9 리눅스 설치방법  (0) 2011.11.28
Posted by logwatch

* 실행파일 경로

- 파일 실행시 참조되는 경로는 $PATH 변수에 설정되어 있다.

echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin

- 파일 실행시 경로명 없이 파일명만 사용한 경우에는 shell 내장 명령어인지를 먼저 확인한다.

shell 내장 명령어가 아니면 $PATH 변수에 설정되어 있는 디렉토리 경로에서 파일을 찾는다.

현재 디렉토리는 참조하지 않는다.

$PATH 에 설정되지 않는 디렉토리의 파일을 실행할 때 경로를 생략할 수 없다.

실행파일 경로를 재지정 하려면

PATH=설정할 경로 명

*. logout 하게 되면 설정 변수값을 잃어버린다.

파일관련 명령어

cat

conCATenate에서 나온 말로 파일의 내용을 표준 출력으로 내보내어, 파일내용을 알아보거나,
여러 파일을 하나의 파일로 출력하여 연결한다.
또는 표준 입력으로부터 파일을 만들 수도 있다.

cat [options] [file(s)]

파일 이름이 주어지지 않으면, 표준 입력으로 입력 받는다.

자주 사용되는 옵션

-n : 행 번호를 붙여서 출력.

-b 행 번호를 보여주되 빈 줄은 행 번호를 붙이지 않고 출력

ex)

cat dict1 dict2 > dictionary => dict1 과 dict2 파일을 연결하여 dictionary라는 파일에 저장

cat > memo => 'control-d'를 입력할 때까지 키보드(표준 입력)로 입력한 내용을 memo라는 파일로 저장

head

파일의 선두를 보여준다.
head [-count] [file(s)] : count에 정해준 줄 수만큼 file(s)의 첫 부분을 보여준다.
count를 생략하면 파일의 첫 10줄을 보여준다.
file을 생략하면 표준입력을 사용한다.

tail

파일의 끝부분을 보여준다.

tail [-count] [file(s)]사용법은 head와 같다.

wc (word count)

파일,또는 표준 입력 안의 행, 단어, 문자의 수를 센다.
wc [options] [file(s)]
자주 사용되는 옵션
-l : line 수 출력
-c : 문자(charater)수 출력
-w : 단어(word)수 출력
옵션을 생략하면 line수, 단어수, 문자수를 모두 출력한다.

ex)

[lee@river lee]$ wc /etc/passwd 109 125 4484 /etc/passwd

more

파일의 내용을 화면 단위로 끊어서 보여준다.
more file(s) : file이 생략되면 표준 입력을 사용한다.

more에서 사용되는 명령어(more 가 실행중일때)

h 도움말
space 다음 페이지
RETURN 다음 한줄 스크롤
q,Q 종료
b,^B 이전 페이지
/pattem 검색
= : 현재 라인 번호 출력
:f : 현재 파일 이름과 라인 번호를 보여준다.
! 쉘 명령어를 실행한다.

*. more 와 유사한 명령어로 less 가 있으나 more 보다 많이 쓰이진 않는다.

* meta character *
- shell 이 특별한 의미로 해석하는 문자를 메타 문자라고 한다. (대개 특수문자가 이에 해당된다)

redirection - 입출력 방향 재지정

file descriptor

0: 표준입력
1: 표준출력
2: 표준에러

> ( = 1>) : 출력방향 전환 (표준출력 => file) 파일이 존재하는 경우는 overwrite
>>( = 1>>) : 출력방향 전환 (표준출력 => file) 파일이 존재하는 경우 append
<(= 0<) ; 입력방향 전환 (표준입력 => file) 입력을 키보드가 아닌 파일에서 받아들다.
<<_문자열; here document 라고 한다. 이 문자열까지만 입력을 받는다는 의미이다.
2> ; 에러방향 전환 (표준에러 => file) 표준에러의 방향은 모니터이다.
에러를 모니터 상에 출력하지 않거나 파일로 남길 때 사용한다.

ex 1)
cat > a.txt => 키보드 입력으로 파일을 만든다.
ctrl + d 를 입력하면 완료된다.
cat < a.txt => 키보드 대신 파일로부터 입력을 받아서 표준출력으로 출력한다.
cat => 키보드로 입력받은 내용을 모니터로 출력한다.

ex 2)
[root@river root]# ls -l a.txt b.txt c.txtls: c.txt: No such file or directory <= 이 부분이 표준에러이다.
-rw-r--r-- 1 root root 0 May 1 20:28 a.txt <= 이부분은 표준출력
-rw-r--r-- 1 root root 0 May 1 20:28 b.txt <= 이부분도 표준출력
[root@river root]# ls -l a.txt b.txt c.txt 2> /tmp/error.txt
-rw-r--r-- 1 root root 0 May 1 20:28 a.txt
-rw-r--r-- 1 root root 0 May 1 20:28 b.txt

=> 에러가 모니터로 출력되지 않고 /tmp/error.txt 파일에 저장되었다.

출력을 그냥 버리고 싶을 경우에는 /dev/null 로 보내면 된다.

pipe

pipe는 앞에 명령의 실행결과를 pipe 뒤의 명령어의 입력으로 전달한다.예를 들면

ls -l /etc | more

=> ls -l /etc 의 실행결과를 모니터로 출력하지 않고 more 명령의 입력으로 전달한다.

pipe를 사용하면 명령을 조합해서 사용할 수 있다는 점 때문에 매우 많이 사용된다.

grep(get regular expression)

: 특정한 문자열을 포함하고 있는 라인을 찾기 위해 사용한다.

자주 사용되는 옵션

-v(invert) ; 찾고자 하는 문자열과 일치하는 라인을 제외한 모든 라인을 출력한다.

-n(number) ; 문자열이나 패턴을 일치시키는 라인들의 라인번호를 표시해준다.

-l(listfile) ; 특정한 패턴을 찾기 위해 여러 개의 파일을 검색할 때 편리하게 사용할 수 있다.

이 옵션은 패턴을 갖고 있는 줄을 찾아 보여주는 것이 아니라 그러한 줄이 발견된 파일명을 결과로 보여준다.

sort
알파벳 순서대로 또는 숫자 순서대로 정렬항목을 기준으로 오름차순, 내림차순으로 정렬한다.
보통 정렬은 사전적으로 순서화되는데 이때 주의할 점은 알파벳 순서는 소문자보다 대문자가 우선이고,
숫자들은 모든 문자보다 우선한다는 것이다. 옵션 없이 실행하면 보통 오름차순이고, -r 옵션을 사용하면 내림차순이다.

cut
데이터의 특정 열을 선택하거나, 파일내의 특정 필드만을 표시할 때 사용한다.

주요옵션

-c 목록 : 목록에 지정한 열을 출력

1,2번열을 출력하려면 -c1,2

1번에서 10번열까지 출력하려면 -c1-10

-f 목록 : 목록에 지정한 필드를 출력

-f1,3은 1번 필드와 3번 필드를 출력

-d 문자 : 문자로 지정된 문자를 필드 구분자로 사용

ex1) $cat test.txt

first second third

$ cut -c1-3 test.txt

fir

$ cut -f1 test.txt

first

$

ex2) $ cat /etc/passwd # 필드구분자를 “:”를 사용

root:x:0:1:Super-User:/root:/bin/bash

daemon:x;1:1::/:

bin:x:2:2::/usr/bin:

$ cut -f1 -d: /etc/passwd

root

daemon

bin

$

paste
수직으로 파일을 결합하여 보여준다.

ex)

$ cat a

kug

kang

su

$ cat b

222-222

333-333

$ paste a b

kug 111-111

kang 222-222

su 333-333

$

*. 파일을 결합할 때 중간에 특정한 구분자를 넣고자 할 때에는 -d옵션을 사용 한다

$ paste -d* a b

kug*111-111

kang*222-222

su*333-333

$

*. 또 다른 옵션 -s는 연속적인 라인을 1개 라인으로 결합한다. 1개 파일내의 라인이 모두 결합되고 나면
그 다음 파일의 라인들도 계속 결합된다.

$ paste -s a b

kug kang su

111-111 222-222 333-333

$

tr

표준입력에서 문자를 복사하여 표준출력에서 출력하는데, 지정된 대로 문자를 교체 또는 삭제한다.
보통은 소문자를 대문자로 바꾸거나 그 외 텍스트 처리작업을 할 때 주로 사용된다.

$cat c

kildong 111-1111

kang 222-2222

su 333-3333

$tr k A < c

Aug 111-1111

Aang 222-2222

$ tr \[a-z\] \[A-Z\] < c

KUG 111-111

KANG 222-2222

SU 333-3333

$

cat c | tr a-z A-Z

KUG 111-111

KANG 222-2222

SU 333-3333

또 다른 옵션 -d(delete)는 아래와 같이 특정한 칼럼을 제거할 수도 있다.

$ cat c

kug 111-111

kang 222-222

$tr -d [0-9] <c

kug -

kang -

$

파일 검색 명령어

whereis

whereis command(s)
명령 인자로 준 명령을 $PATH로 지정된 경로에서 찾아 전체 경로명을 보여준다.예를 들어
whereis csh이라고 입력하면 다음과 같은 출력이 나온다. csh: /usr/bin/csh/usr/man/man1/csh.1

which

which command(s)

명령어를 입력했을 때 실행되는 파일의 경로명을 보여준다.
예를 들어 which tin이라고 입력하면 /usr/local/bin/tin이라고 출력된다. 만약 alias된 명령이 있다면 alias내용을 보여준다.
만약 ls가 alias되어 있을 때 which ls라고 입력하면 다음과 같이 출력된다.
ls aliased to ls -CF

find

find [path...][expression]

ex) find /tmp /etc -name passwd
find /etc -name pass*
find /etc -name *conf

Man Page. http://www.gentoo.org/doc/en/man-guide.xml <= 여기에 설명이 잘되어 있습니다.
man0p p가 POSIX를 뜻한다. 다른 디렉토리에서도 p로 끝나는 것은 같은 의미이다.
이 디렉토리의 맨페이지는 여러가지 POSIX 헤더 파일의 기능을 설명한다.

man1 일반적인 명령어

man1p POSIX버젼의 명령어를 설명한다. 기본적인 명령어만을 다루기 때문에 man1보다 훨씬 작다.
man2 리눅스 커널 시스템 호출이다.

man3 표준 C 라이브러리 함수를 설명한다.

man4 특별한 장치를 설명한다. 이 장치는 보통 커널에서 생성하는 것이지만,
Xorg-X11도 여기에 장치를 넣는다.

man5 시스템 설정파일을 위한 설명

man6 게임이나 다른 특별한 장난감을 소개한다.

man7 그 외의 여러가지 것들을 설명한다. 캐릭터셋이나 SQL 구문, ISO표준,
정규 표현식 등이 여기 포함된다.

man8 (대체로 root가 실행하는) 관리용 명령어들을 설명한다

man9 원래 커널의 여러 부분의 설명이 들어 있기로 되어 있는 곳이다.

mann 주로 Tcl/Tk에서 사용한다. n은 new를 뜻한다.

'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 사용자 인터페이스 및 명령어  (0) 2011.11.28
vmware 에서 centos 5.x및 fedora9 리눅스 설치방법  (0) 2011.11.28
Posted by logwatch

기본적인 인터페이스 환경 이해.

- GUI (Graphic User Interface)

Xwindow (xwindows를 위한 function key 는 alt+f7)

- text mode

리눅스는 Multi User System 으로 동시 접속이 가능하다.

alt+f1 ~ f6 까지 6개의 가상콘솔을 사용할 수 있다.
(* vmware에서는 ctrl+shift+alt+f1)

- 부팅시 디폴트 user interface를 GUI 와 text mode를 선택 지정할 수 있다.
( /etc/inittab 파일에서 지정한다)

* 계정

보안을 위해 로그인시 패스워드를 요구한다.

기본적으로 세가지 형태의 계정이 존재한다.

1. root - 관리자 계정 - 거의 모든 권한을 행사할 수 있다.

2. system 계정 - 시스템 운영에 사용되며 정상적인 로그인 불가

3. 일반사용자 계정 - 필요에 따라 일반사용자 계정을 만들고 로그인을 허락할 수 있다.

- 시스템 사용에 많은 제약을 받을 수 있는 권한을 가진다.

** 실습하기전에 실습계정을 하나 만든다

(useradd user1

passwd user1))

리눅스 명령어

(* 명령어는 대소문자를 철저히 구분한다)

명령어 형태

프롬프트 명령어 -옵션 인수

ex)

[lee@river lee]$ ls -l a.txt b.txt

명령어 옵션 인수의 기본 구분자는 스페이스 문자이며 다시 옵션과 인수의 구분은 - 문자의 유무에 따라 일반적으로 구분된다.

ls -l ; 여기서 -l 은 옵션ls l ; 여기서 l은 인수

리눅스 명령어는 크게 두 가지로 분류된다.

1. 셀 내장 명령어

*. shell - 명령어 해석기.

msdos 의 내부명령어와 유사.
셀에 포함되어 있는 명령어.
도움말보기는 help 명령어로

ex)

[lee@river lee]$ help cd

cd: cd [-L|-P] [dir]

Change the current directory to DIR.
The variable $HOME is the default DIR. The variable CDPATH defines the search path for
the directory containing DIR. Alternative directory names in CDPATH are separated by a colon (:).
A null directory name is the same as the current directory, i.e. `.'. If DIR begins with a slash (/),
then CDPATH is not used. If the directory is not found, and the shell option `cdable_vars' is set, then try the word as a variable name. If that variable has a value, then cd to the value of that variable. The -P option says to use the physical directory structure instead of following symbolic links; the -L option forces symbolic links to be followed.

[lee@river lee]$

* 똑같은 이름의 명령어가 셀 내장 명령어 및 외부명령어로 각각 존재하는 경우에는 경로명 없이 명령어를 입력하면 셀 내장 명령어가 실행된다.
명령어를 찾는 순서가 셀 내장 명령어가 먼저이다.

2. 외부 명령어

디스크에 존재하는 명령어

리눅스 명령어는 주로 bin 이라는 이름의 디렉토리에 존재한다.

대개의 실행파일 경로는 환경변수 PATH를 출력해보면 알수 있다.

[root@river root]#

echo $PATH

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin

(PATH 환경변수 변경은 export PATH=경로명으로 재지정 할 수 있으며 로그인 시 자동으로 실행되는 profile 에 저장해

두지 않으면로그아웃 할 때 원래값으로 초기화 된다)

*. 도움말은 man 명령어로 출력해 볼 수 있다.

ex)

root@river root]# man ls

LS(1) FSF LS(1)

NAME

ls - list directory contents

SYNOPSIS ls [OPTION]... [FILE]...DESCRIPTION

List information about the FILEs (the current directory by default).

Sort entries alphabetically if none of -cftuSUX nor --sort. Mandatory arguments to long options are mandatory for short

options too. -a, --all do not hide entries starting with . -A, --almost-all do not list implied . and .. --author

*. PATH

경로는 두 가지가 있다. 절대 경로 및 상대경로.

1. 절대 경로 - 파일 위치를 나타날 때 / 가 기준이 된다.

2. 상대경로 - 파일위치를 나타낼 때 현재디렉토리가 기준이 된다.

. : 현재디렉토리

.. : 부모디렉토리

ex)

/---os

| +---linux

| | +---debian

| | +---redhat

| +---windows

| | +---2000

| | +---xp

tree 구조의 예.

*. 디렉토리 관련 명령어

Is

list, 파일의 리스트를 보여준다. 도스의 dir과 비슷하다.

ls [-옵션] [파일 또는 디렉토리]

자주 쓰이는 옵션은,

-l 파일에 대한 긴 정보(파일 허가권, 소유자, 그룹, 크기, 날짜)를 준다.

-a “.”로 시작하는 파일은 hidden 파일이다. 이 옵션을 사용하면 볼 수 있다.

-t 가장 최근에 변경된 파일을 최근의 것부터 보여준다.

-F 파일의 특성을 보여준다.

이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된 파일이면 @를 붙여준다.

-R 하위 디렉토리의 파일도 모두 보여준다.

cd (change directory)

현재 작업 디렉토리 변경 명령어

cd . : 현재디렉토리로 이동 (아무런 변화 없음)

cd .. : 부모디렉토리로 이동

cd ../../ : 2단계 상위 디렉토리로 이동

cd : 현재 사용자 홈 디렉토리로 이동(bash shell에서)

cd ~ : 현재 사용자 홈 디렉토리로 이동(bash shell에서)

cd $HOME : 현재 사용자 홈 디렉토리로 이동

cd ~kildong : kildong 사용자의 홈 디렉토리로 이동

위의 그림(그림 2-1)과 같은 디렉토리 구조에서 현재 디렉토리가 linux 라고 가정할 때

xp 디렉토리로 이동하려면

cd /os/windows/xp ; 절대경로

cd ../../windows/xp ; 상대경로

mkdir(make directory)

디렉토리를 만든다.

cp - 파일을 복사한다.

cp file1 file2 cp file(s) directory

[-r] option을 주면 directory도 copy가 가능하다.

file1을 file2로 복사한다.

하나 또는 여러 개의 파일을 directory에 복사한다.

명령어 사용형식은 dos와 유사하나 dos와 달리 타겟은 절대 생략할 수 없다.

ex)

[lee@river lee]$ cp /bin/ls <= 타겟경로가 빠져있다.

cp: missing destination file <= 역시 에러다.더 많은 정보를 보려면 `cp --help' 하라.

[lee@river lee]$ cp /bin/ls . <= 파일을 현재 디렉토리에 복사할 때도 현재 디렉토리 경로를 적어줘야 한다.

mv

move, 파일이나 디렉토리의 위치를 바꾸거나 이름을 바꾼다. 사용법은 다음과 같다.

1.mv [options] oldname newname

2.mv [options] file(s) directory

mkdir( make directories)

mkdir dir(s) => 한 번에 여러 개도 만들 수 있다.

rmdir

remove directory, 디렉토리를 지운다. 단. 디렉토리가 비어있지 않으면 지울 수 없다.

pwdprint working directory, 현재 작업 Directory를 출력한다.

rm

remove, 파일을 제거한다. (디렉토리 삭제시에는 -r 옵션을 반드시 사용해야 한다)

rm [options] file(s)

사용 가능한 옵션은 다음과 같다.

-f (force) 물어보지 않고 강제로 지운다.

-i (interactive) 삭제하기전에 물어 온다.

-r 서브디렉토리를 포함한 모든 내용을 지운다.

'Log > Linux' 카테고리의 다른 글

파일 권한(Permission)  (0) 2011.11.28
계정관리  (0) 2011.11.28
vi 편집기  (0) 2011.11.28
리눅스 기본 명령어  (0) 2011.11.28
vmware 에서 centos 5.x및 fedora9 리눅스 설치방법  (0) 2011.11.28
Posted by logwatch
이전버튼 1 2 3 4 5 이전버튼

블로그 이미지
내가 나에게 확인 하는 블로그
logwatch

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.11
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

최근에 올라온 글

최근에 달린 댓글

글 보관함