'분류 전체보기'에 해당되는 글 89건
리눅스(linux) LVM 디스크 관리 및 추가
Linux
     여기서 사용한 명령어 모
[root@dbserver ~]# fdisk /dev/sdc                 /처음 파티션을 나눠주기 위한 명령어(fdisk /dev/디스크)
[root@dbserver ~]# fdisk -l                       /디스크 파티션 정보
[root@dbserver ~]# pvcreate /dev/sdc1             /논리적에서 물리적 볼륨으로 변환 명령어
[root@dbserver ~]# vgcreate lvm /dev/sdc1 \       /lvm이란 볼륨그룹에 3개의 물리적 볼륨을 합치는 명령어
>                               /dev/sdd1 \
>                               /dev/sde1
[root@dbserver ~]# vgdisplay                      /생성된 논리적 볼륨을 보여주는 명령어
[root@dbserver ~]# lvcreate -L 1500MB -n lv1 lvm  /lvm볼륨그룹에서 파티셔닝 할 수 있는 명령어
[root@dbserver ~]# lvscan                         /생성된 논리적 볼륨 그룹을 조회 하는 명령어
[root@dbserver ~]# mkfs.ext3 /dev/lvm/lv1         /mkfs포멧
[root@dbserver ~]# df -h                          /하드 조회
[root@dbserver ~]#vi /etc/fstab                   /fstab에 디스크 파티셔닝 정보를 입력해야함


        LVM이란 Local Volume Manager의 약자로 물리적으로 여러 개의 디스크를 논리적으로 하나의 디스크로 합쳐주고
      다시 논리적으로 나누어서 관리하게 해 주는 방법을 말한다. 아래에는 1gb의 용량의 디스크 3개를 LVM을 사용해서
      3GM의 용량의 디스크 1개로 만들어 주고 이것을 각각 다시 1.5GB 씩 두개로 나누게 해주는 방법을 말한다.

[root@dbserver ~]# fdisk /dev/sdc

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xfc5b1df1.
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)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n                                                 /new를 뜻함
Command action
   e   extended
   p   primary partition (1-4)
p                                                                       /primary로 나눔
Partition number (1-4): 1                                               /첫번째 파티션
First cylinder (1-130, default 1):                                      /엔터치면 실린더넘버는 알아서 입력된다.
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):         /나누지 않을것이기에 엔터
Using default value 130

Command (m for help): t                                                 /t 입력
Selected partition 1
Hex code (type L to list codes): 8e                                     /8e 입력
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w                                                 /생성한 파티션 저장
The partition table has been altered!

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



        위 파티션에서 t,8e 가 추가 되었는데 이 부분이 파티션을 생성할 때 linux LVM 용으로 파티션을 생성하는 단계이다.
      지문이 길어지므로 나머지 sdd, sde 이 두개의 디스크도 동일하게 위와 같이 lvm 파티션으로 생성하면 된다. 알아서 해라.

      파티션 작업이 모두 끝났다면 이제 조회를 해보자.

[root@dbserver ~]# fdisk -l                                                    /생성한 파티션 조회

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x16dcfdbd

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         130     1044193+  8e  Linux LVM              /정삭적으로 LVM으로 만들어졌다

Disk /dev/sdc: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfc5b1df1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         130     1044193+  8e  Linux LVM              /정삭적으로 LVM으로 만들어졌다

Disk /dev/sde: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb628b079

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1         130     1044193+  8e  Linux LVM              /정삭적으로 LVM으로 만들어졌다

Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004badc

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        3851    10240000   83  Linux
/dev/sda4            3851        6528    21502976    5  Extended
/dev/sda5            3851        4616     6144000   83  Linux
/dev/sda6            4616        5126     4096000   82  Linux swap / Solaris
/dev/sda7            5126        6528    11259904   83  Linux

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x110bf577

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          65      522081   83  Linux
/dev/sdb2              66         130      522112+  83  Linux
[root@dbserver ~]#
        각 파티션이 나눠진 디스크를 보면 id=8e , system=Linux LVM이라고 쓰여져 있다.
      아~주 잘 LVM용 파티션으로 나누어 졌다. 다음으로 넘어가자.

      이젠 아까 만들었던 LVM용 디스크3개를 각각 물리적 볼륨(논리적에서)으로 변환하겠다. 오타는 용서치 않음
[root@dbserver ~]# pvcreate /dev/sdc1                       / 논리적 볼륨에서 물리적 볼륨으로 변환
  dev_is_mpath: failed to get device for 8:33
  Physical volume "/dev/sdc1" successfully created
[root@dbserver ~]# pvcreate /dev/sdd1                       / 논리적 볼륨에서 물리적 볼륨으로 변환
  dev_is_mpath: failed to get device for 8:49
  Physical volume "/dev/sdd1" successfully created
[root@dbserver ~]# pvcreate /dev/sde1                       / 논리적 볼륨에서 물리적 볼륨으로 변환
  dev_is_mpath: failed to get device for 8:65
  Physical volume "/dev/sde1" successfully created
[root@dbserver ~]#

      변환이 완료 되었다. 그럼 이제 물리적으로 변환했으면 이 볼륨 3개를 1개의 볼륨그룹으로 합쳐야한다.(RAID의 개념을 알고 있어야 한다)
[root@dbserver ~]# vgcreate lvm /dev/sdc1 \
>                               /dev/sdd1 \                 / 물리적 볼륨 3개를 lvm(이름 맘대로 정해도 됨)이라는 1개의 볼륨그룹으로 합침
>                               /dev/sde1
  Volume group "lvm" successfully created
[root@dbserver ~]#


      3개의 볼륨을 하나의 볼륨그룹으로 합쳤고, vgdisplay 명령어를 쳐서 확인해보자.
[root@dbserver ~]# vgdisplay
  --- Volume group ---
  VG Name               lvm
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               2.98 GiB
  PE Size               4.00 MiB
  Total PE              762
  Alloc PE / Size       0 / 0
  Free  PE / Size       762 / 2.98 GiB
  VG UUID               pZQSHo-BZMU-4rhM-7qxX-N1aU-aD6I-CO6UrR

[root@dbserver ~]#

        vg size에 3gb가 있다. 하나의 볼륨그룹으로 제대로 합쳐진 상태고 이제 1.5gb씩 파티셔닝 할 차례이다.
      물리적인 디스크는 fdisk로 파티션을 분할 하지만, 논리적인 LVM디스크는 lvcreate 명령어로 분할한다.(logical volume)


[root@dbserver ~]# lvcreate -L 1500MB -n lv1 lvm
  Logical volume "lv1" created                                   /1개의 lvm디스크에서 파티셔닝함(여러개 가능)
[root@dbserver ~]# lvcreate -L 1500MB -n lv2 lvm
  Logical volume "lv2" created
[root@dbserver ~]#

       위와 같이 논리적 볼륨 lv1(다르게 네임 지어줘도 됨)이 볼륨그룹 lvm안에 만들어졌다.
      vgdisplay명령어로 남아 있는 공간을 확인 한 후에 나머지 논리적 볼륨 lv2를 알아서 만들자.

      다 만들었으면 lvscan 명령어로 확인해보자.

[root@dbserver ~]# lvscan
  ACTIVE            '/dev/lvm/lv1' [1.46 GiB] inherit
  ACTIVE            '/dev/lvm/lv2' [1.46 GiB] inherit
[root@dbserver ~]#

       히야. 겁나게 잘 만들어졌다.
      항상 파티셔닝이 끝나면 포멧을 해줘야 한다. 리눅스에서는 포멧할때 mkfs를 사용한다.

      이제 포멧해보자.

[root@dbserver ~]# mkfs.ext3 /dev/lvm/lv1                       /포멧하자...하...
mke2fs 1.43-WIP (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
96000 inodes, 384000 blocks
19200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=394264576
12 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

       나머지 하나의 볼륨(lv2)도 알아서 말 안해도 포멧해라.
      그리고 마지막 과정인 디렉토리를 생성하고 마운트하면 끝난다.
      그리고 꼭 fstab에 정보를 입력해 두자.

[root@dbserver ~]# ls /
app   cgroup  dir2  lib         media  net   root     srv  usr
bin   dev     etc   lib64       misc   opt   sbin     sys  var
boot  dir1    home  lost+found  mnt    proc  selinux  tmp
[root@dbserver ~]# mkdir /dir3                                 /dir3 디렉토리 생성
[root@dbserver ~]# mkdir /dir4                                 /dir4 디렉토리 생성
[root@dbserver ~]#
[root@dbserver ~]# mount /dev/lvm/lv1 /dir3                    /dir3 마운트
[root@dbserver ~]# mount /dev/lvm/lv1 /dir4                    /dir4 마운트
[root@dbserver ~]#
[root@dbserver ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/sda3            9.5G  5.3G  3.8G  58% /
tmpfs                998M   76K  998M   1% /dev/shm
/dev/sda2             20G   13G  5.5G  70% /app
/dev/sda1            190M  159M   17M  91% /boot
/dev/sda7             11G  2.5G  7.5G  25% /home
/dev/sda5            5.7G  2.3G  3.1G  43% /var
/dev/mapper/lvm-lv1  1.5G   35M  1.4G   3% /dir3
/dev/mapper/lvm-lv1  1.5G   35M  1.4G   3% /dir4
[root@dbserver ~]#
[root@dbserver ~]#vi /etc/fstab                                 /lvm디스크 정보저장
# /etc/fstab
# Created by anaconda on Mon Jul 14 07:23:11 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=147fcbc4-fddc-419e-8ece-111d5acc56d7 /                       ext4    defaults        1 1
UUID=7da49108-d211-4727-9152-edb7dea56f6b /app                    ext4    defaults        1 2
UUID=3d938562-8552-4064-bc4e-cf75b117aaea /boot                   ext4    defaults        1 2
UUID=f518c3a4-c3b2-4a06-8347-7184cd4f4e6c /home                   ext4    defaults        1 2
UUID=682a4749-3154-4915-81bb-5926fe21b909 /var                    ext4    defaults        1 2
UUID=4abfebb2-f61b-4878-98c4-e951aa6a9034 swap                    swap    defaults        0 0
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
/dev/mapper/lvm-lv1                       /dir3                   ext3    defaults        1 2
/dev/mapper/lvm-lv2                       /dir4                   ext3    defaults        1 2


'Linux' 카테고리의 다른 글

set sqlprompt 사용법  (0) 2014.10.31
리눅스 디스크 관리 및 추가  (0) 2014.10.31
리눅스 shell script  (0) 2014.10.31
lunux(리눅스) 압축 파일 관리 (compress.tar, gzip 등)  (0) 2014.10.31
리눅스에 iptraf3.0 설치  (1) 2014.10.31
리눅스 shell script
Linux

script : 수행 해야할 여러가지 작업들을 하나 파일로 정해놓은 것
shell script : shell이 script를 실행한다.

  • bourne shell : 최초의 shell. 지원하는 명령어가 적음
    /bin/sh
  • c shell : bourne shell의 개량형
    /bin/csh
  • korn shell : 유닉스에서 많이 사용중인 shell (bourne shell + 편의 기능)
    /bin/ksh
  • bash shell :리눅스의 기본 shell로 다양한 명령과 편의성을 지원함
    /bin/bash
  • /usr/bin/명령어 : 일반 유저 사용
  • /usr/sbin/명령어 : 슈퍼유저 사용(root)

shell script를 쓸때 첫줄에는 반드시 쉘 타입을 써줘야한다.
단 첫줄은 주석으로 읽지 않는다.
- #!/bin/bash

shell script를 실행할때는 실행권한이 있을때와 없을때가 다르다.

  • ./filename.sh : 실행권한 있을때
  • sh filename.sh : 실행권한 없을때
    또 한가지 방법으로는 chmod를 이용해 실행권한을 줘도 된다.

shell script 형식
-echo : echo뒤의 내용을 화면에 출력한다.

[root@dbserver shell]# vi fruit.sh
       1 #bin/bash
       2
       3 fruit=apple
       4 drink=cokecola
       5
       6 echo $fruit
       7 echo $drink

변수명으로 쉘 스크립트 짜기
‘변수명 = 값’ 형태로 사용( 절대 기호 좌우에 공백 있으면 안된다)
-> 공백이 있을경우 “” (쌍따옴표)로 묶어줘야함

[root@dbserver shell]# vi ifconfig.sh
      1 #!/bin/bash
      2 echo `ifconfig | grep inet | grep -v 127.0.0.1`

ifconfig의 inet을 출력하되, 127.0.0.1는 빼고 출력
역따옴표 :특정 명령어를 실행한 결과를 출력

[root@dbserver shell]# vi echon.sh
      1 #!/bin/bash
      2 echo 'aaaaaa'
      3 echo "aaaaaa"
      4 echo -n "bbbbb"
      5 echo -n "ccccc"

-n은 줄을 바꾸지 않고 연속적으로 출력한다.

  • read 함수 사용 : 사용자로부터 값을 입력 받아서 변수에 저장해주는 역할
  • argument 사용해서 실행
    /etc/init.d/network stop을 수행할 때 stop부분을 인수(argument)라고한다

  • 크기비교
  1. [ $A -gt $B ] : A값이 B값보다 크다
  2. [ $A -lt $B ] : A값이 B값보다 작다
  3. [ $A -ge $B ] : A값이 B보다 크거나 같다
  4. [ $A -le $B ] : A값이 B보다 작거나 같다.
  5. [ $A -eq $B ] : A값이 B값과 같다
  6. [ $A -ne $B ] : A값이 B값과 다르다

공백을 하지 않으면 크기비교가 되지 않으니 조심할것 !

[root@server101 ~]# vi comp_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter First Number : "
      4 read A
      5 echo ""
      6 echo -n "Enter Second Number : "
      7 read B
      8 echo ""
      9
     10 if [ $A -eq $B ]
     11 then
     12 echo "$A = $B"
     13 elif [ $A -gt $B ]
     14 then
     15   echo "$A > $B"
     16 elif [ $A -lt $B ]
     17 then
     18   echo "$A < $B"
     19 fi
     20 echo "" 
[root@server101 ~]# sh comp_test1.sh
Enter First Number : 3
Enter Second Number : 5
3 < 5

숫자 계산하기
Shell Script는 기본적으로 모든 데이터를 문자로 인식
expr로 연산을 함

[root@server101 ~]# vi cal_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter First Number : "
      4 read A
      5 echo -n "Enter Second Number : "
      6 read B
      7 echo ""
      8 echo "$A + $B"
      9 echo ""

[root@server101 ~]# sh cal_test1.sh
Enter First Number : 2
Enter Second Number : 4                      -> 연산 안해줌
2 + 4
[root@server101 ~]# vi cal_test2.sh
\#!/bin/bash
echo ""
echo -n "Enter first Number : "
read A
echo ""
echo -n "Enter second Numver : "
read B
echo ""
hap=`expr $A + $B`
echo ""
echo "$A + $B = $hap"
echo ""

​[root@server101 ~]# sh cal_test2.sh
Enter first Number : 3
Enter second Numver : 5

3 + 5 = 8 -> 연산작업 한번 거침

세개의 숫자를 입력받아서 연산

[root@server101 ~]# vi cal_test3.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter First Number :"
      4 read A
      5 echo ""
      6 echo -n "Enter Second Number :"
      7 read B
      8 echo ""
      9 echo -n "Enter Third Number :"
     10 read C
     11 echo ""
     12
     13 result=`expr \( $A + $B \) \* $C`    -> ( , ), * 메타캐릭터라서 \역슬래시 꼭 붙여줘야
                                                                    연산자로 인식함 
                                                                    expr 구문 안에서의 모든연산자와 기호, 변수
                                                                   사이에는 공백으로 한칸 띄어야함! 
     14 echo ""
     15 echo "($A + $B ) X $C = $result"
     16 echo ""


[root@server101 ~]# sh cal_test3.sh
Enter First Number :3
Enter Second Number :4
Enter Third Number :2

(3 + 4 ) X 2 = 14

문자열 비교하기

[ “string1” = “string2” ]
두 문자열이 같은 경우
[ “string1” != “string2” ]
두 문자열이 다른경우
[ -z “string” ]
문자열의 길이가 0인경우
[ -n “string” ]
문자열의 길이가 0이 아닌 경우

[root@server101 ~]# vi comp_string1.sh
      1 #!/bin/bash
      2 echo""
      3 echo -n "Enter String:"
      4 read str
      5 echo ""
      6
      7 if [ $str = "Korea" ]   -> 공백 조심 !!! 
      8 then
      9   echo "Korea"
     10 else
     11   echo "Not Korea"
     12 fi
     13 echo"" 

[root@server101 ~]# sh comp_string1.sh
Enter String:k
Not Korea
​
[root@server101 ~]# sh comp_string1.sh
Enter String:Korea
Korea

파일관리하기

[ -f 파일명 ]
파일이 있는경우
[ -s 파일명 ]
파일이 존재하고 내용이 있는 경우
[ -d 파일명 ]
파일이 아니고 디렉토리인경우
[ -r 파일명 ]
읽기가 가능한 파일일 경우
[ -w 파일명 ]
쓰기가 가능한 파일인 경우
[ -x 파일명 ]
파일이 존재하고 실행 가능할 경우
[ !-옵션 파일명]
옵션의 조건이 아닐 경우

test.log 파일을 먼저 생성한 후 …

[root@server101 ~]# sh file_test1.sh
aaa
[root@server101 ~]# vi file_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 fname=/shell/test.log
      4
      5 if [ -f $fname ]
      6 then
      7   cat $fname
      8 fi
      9 echo ""
[root@server101 ~]# vi file_test2.sh
      1 #!/bin/bash
      2 echo ""
      3 fname=/shell/test.log
      4
      5 if [ -s $fname ]
      6 then
      7   echo -n "Before: "
      8   echo `ls -l /shell/test.log`
      9   cat /dev/null > $fname   -> 파일 크기를 0으로 만들기 
     10 fi
     11 echo ""
     12 echo -n "After: "
     13 echo `ls -l /shell/test.log` 
[root@server101 ~]# sh file_test2.sh
Before: -rw-r--r-- 1 root root 4 313 11:16 /shell/test.log
After: -rw-r--r-- 1 root root 0 313 12:10 /shell/test.log

  • 분기문 : 조건문 = if , case

  • 반복문 : while .for

if 문

if[조건] -> 조건 한개일 때
then
처리할 문장
fi

[root@server101 ~]# vi if_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter fruit name: "
      4 read a
      5 echo ""
      6 if [ $a = "apple" ]
      7 then
      8    echo "apple goot!"
      9 fi
     10 echo "" 
[root@server101 ~]# sh if_test1.sh
Enter fruit name: apple
apple goot!
[root@server101 ~]# sh if_test1.sh
Enter fruit name: orange

if[조건] -> 조건 두개일 때
then
처리할 문장
else
처리할 문장
fi

[root@server101 ~]# vi if_test2.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter string : "
      4 read a
      5 echo ""
      6
      7 if [ $a = "apple" ]
      8 then
      9   echo "apple goot!"
     10 else
     11   echo "give me apple!"
     12 fi
     13 echo ""
[root@server101 ~]# sh if_test2.sh
Enter string : apple
apple goot!
[root@server101 ~]# sh if_test2.sh
Enter string : banana
give me apple!

if[조건]; then -> 조건 세개 이상일 때
처리할 문장
elif[조건];then
처리할 문장
else
처리할문장
fi

[root@server101 ~]# vi if_test3.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter string : "
      4 read str
      5 echo ""
      6
      7 if [ $str = "apple" ] ; then
      8    echo "I like apple~!"
      9 elif [ $str = "Orange" ] ; then
     10    echo "I like orange"
     11 else
     12    echo "give me apple or Orange!!!!!"
     13 fi
     14
     15 echo ""
[root@server101 ~]# sh if_test3.sh
Enter string : apple
I like apple~!
[root@server101 ~]# sh if_test3.sh
Enter string : orange                       -> 대소문자 구분하므로 조심!!!!
give me apple or Orange!!!!!
[root@server101 ~]# sh if_test3.sh
Enter string : Orange
I like orange

중첩 if문 (if 문장안에 다른 if사용)

if[조건];then
실행문장
exit
elif[조건]; then
실행문장
exit
else
if[조건]; then
실행문장
fi
fi

[root@server101 ~]# vi if_test4.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter Number 1 or 2 :"
      4 read a
      5
      6 if [ $a -eq 1 ]; then
      7   echo "입력 받은 값은 $a입니다."
      8   exit
      9 elif [ $a -eq 2 ]; then
     10   echo "입력 받은 값은 $a입니다."
     11   exit
     12 else
     13   if [ $a -lt 0 ]; then
     14     echo "값이 너무 작음.."
     15     exit
     16   elif [ $a -gt 2 ]; then
     17     echo " 너무 크자너.."
     18     exit
     19   fi
     20 fi 
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :1
입력 받은 값은 1입니다.
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :2
입력 받은 값은 2입니다.
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :3
 너무 크자너..
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :-1

값이 너무 작음..

조건을 동시에 사용하기
-> if [] -a [] (and)
-> if [] -o [] (or)

[root@server101 ~]# vi if_test5.sh
      1
      2 #!/bin/bash
      3 echo ""
      4 echo -n "Enter Number 1 or 2 :"
      5 read a
      6 echo ""
      7
      8 if [ \( $a -lt 1 \) -o \( $a -gt 2 \) ]; then
      9   echo " 유효하지 않은 값임.."
     10   exit
     11 else
     12   if [ \( $a -eq 1 \) -o \( $a  -eq 2 \) ]; then
     13     echo "입력 받은 값음 $a"
     14     exit
     15   fi
     16 fi 
[root@server101 ~]# sh if_test5.sh
Enter Number 1 or 2 :1
입력 받은 값음 1
[root@server101 ~]# sh if_test5.sh
Enter Number 1 or 2 :3

유효하지 않은 값임..

연습문제 1.

학생의 시험 성적을 입력 받아서 학점을 계산하는 스크립트를 작성하세요. 학점은 점수가 96-100:A+, 90-95:A0 , 86-89:B+, 80-85:B0, 76-79:C+, 70-75:C0, 66-69:D, 나머지는 F로 계산 . 그리고 100점이 넘는 점수는 So Big 메시지를 출력, 1점보다 적은 값이 들어오면 So small 이라는 메시지를 출력하고 스크립트를 종료하게 작성하시오

[root@server101 ~]# vi exam1.sh
      9   if [ $A -gt 100 ]; then
     10     echo "so Big!~!!!!!!"
     11     exit
     12   else
     13     echo " So Small!!!!"
     14   fi
     15 else
     16   if [ \( $A -gt 95 \) -a \( $A -lt 101 \) ]; then
     17     echo " A+"
     18   elif [ \( $A -gt 89 \) -a \( $A -lt 96 \) ]; then
     19     echo "A0"
     20   elif [ \( $A -gt 85 \) -a \( $A -lt 90 \) ]; then
     21     echo "B+"
     22   elif [ \( $A -gt 79 \) -a \( $A -lt 86 \) ]; then
     23     echo "B0"
     24   elif [ \( $A -gt 75 \) -a \( $A -lt 80 \) ]; then
     25     echo "C+"
     26   elif [ \( $A -gt 69 \) -a \( $A -lt 76 \) ]; then
     27     echo "C0"
     28   elif [ \( $A -gt 65 \) -a \( $A -lt 70 \) ]; then
     29     echo "D"
     30   else
     31     echo "F"
     32  fi
     33 fi

[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :78
C+
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :90
A0
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :100
 A+
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :8
F
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :30
F
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :66
D

연습문제 2. 학생으로부터 지역번호를 입력 받아서 지역명을 출력하는 스크립트를 작성하시오, 지역번호가 02:Seoul. 031:Kyoungki, 051: Busan, 052 : Ulsan .나머지는 Heaven으로 출력합니다. 단 지역번호가 0보다 작거나 100보다 크면 “Check Your number!!!” 메시지 출력수 스크립트를 종료하게 작성하시오

​[root@server101 ~]# vi exam2.sh
#!/bin/bash
echo ""
echo -n "지역번호를 입력하세요 : "
read A
if [ \( $A -lt 0 \) -o \( $A -gt 100 \) ]; then
  echo " Check your Number !!!!"
  exit
else
 if [ $A = "02" ]; then
   echo "서울"
 elif [ $A = "031" ]; then
   echo "경기"
 elif [ $A = "051" ]; then
   echo "부산"
 elif [ $A = "052" ]; then
   echo "울산"
 else
   echo "Heaven"
 fi
fi
​
​지역번호를 입력하세요 : 02
서울
[root@server101 ~]# sh exam2.sh
지역번호를 입력하세요 : 031
경기
[root@server101 ~]# sh exam2.sh
지역번호를 입력하세요 : 051
부산
[root@server101 ~]# sh exam2.sh
지역번호를 입력하세요 : 032
Heaven

case : 경우의 수가 여러개 일 경우에 유용

case 변수 in
패턴 1)
실행명령 ;;
패턴 2)
실행명령 ;;
*) -> 1.도 아니고 2 도 아닐경우
실행명령 ;;
esac

[root@server101 ~]# vi case_test1.sh
#!/bin/bash
echo ""
echo "
          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup "
echo ""
echo -n "Enter your choice :"
read a
echo ""
case $a in
  1)
    sh /shell/web_backup.sh ;;
  2)
    sh /shell/was_backup.sh ;;
  3)
    sh /shell/db_backup.sh ;;
  *)
    echo "Enter [ 1, 2, 3 ]"
esac 


[root@server101 ~]# sh case_test1.sh

          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :1
Web Server Backup Start!!
[root@server101 ~]# sh case_test1.sh

          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :2
WAS Server Backup Start~~~!
[root@server101 ~]# sh case_test1.sh

          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :3
DB Server Backup Start~~!!
[root@server101 ~]# sh case_test1.sh
          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :5
Enter [ 1, 2, 3 ]

for 변수명 in 값1 값2 값3
do
실행할 문장
done

  • 화면에 1-5까지 출력
    [root@server101 shell]# vi for_test1.sh
        1 #!/bin/bash
        2 for i in 1 2 3 4 5
        3 do
        4   echo "$i"
        5 done
        6 echo ""
    [root@server101 shell]# sh for_test1.sh
    1
    2
    3
    4
    5
    
  • 반복횟수 부분의 변형
[root@server101 shell]# vi for_test2.sh
    \#!/bin/bash
    count=`ls /shell`    -> 변수 뒤에 =와 꼭 붙일것! 안붙이면 실행 안됨 !
    for i in $count
    do
     echo "$i"
    done
    echo ""

[root@server101 shell]# sh for_test2.sh
    db_backup.sh
    echo_test1.sh
    echo_test2.sh
    echo_test3.sh
    echo_test4.sh
    echo_test5.sh
    echo_test6.sh
    test.log
    test1.sh
    was_backup.sh
    web_backup.sh
``
* 반복 횟수 부분의 변형 2
 ```cpp
[root@server101 shell]# vi for_test3.sh
      1 #!/bin/bash
      2 echo ""
      3 count=`ls /shell`
      4
      5 for i in $count
      6 do
      7   echo "Easy Shell Script"
      8 done


[root@server101 shell]# sh for_test3.sh   -> 파일 수만큼 복사해서 출력
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
  • 중첩 for문
    [root@server101 shell]# vi for_test4.sh
      #!/bin/bash
      echo""
      for i in a b c
    do
        for j in 1 2 3
    do
      echo "\$i=$i , \$j=$j"     -> $을 문자 그대로 출력하기 위해 \역슬래시 사용!
    done
    done 
    [root@server101 shell]# sh for_test4.sh
    $i=a , $j=1
    $i=a , $j=2
    $i=a , $j=3
    $i=b , $j=1
    $i=b , $j=2
    $i=b , $j=3
    $i=c , $j=1
    $i=c , $j=2
    $i=c , $j=3
    

*2단 출력하기

[root@server101 shell]# vi for_test5.sh
    \#!/bin/bash
    echo ""
    for i in 2
    do
      for j in 1 2 3 4 5 6 7 8 9
      do
       gob=`expr $i \* $j`           -> =사이에 띄어쓰는 곳 없도록 조심 !
       echo " $i X $j = $gob"
      done
    done 

[root@server101 shell]# sh for_test5.sh
     2 X 1 = 2
     2 X 2 = 4
     2 X 3 = 6
     2 X 4 = 8
     2 X 5 = 10
     2 X 6 = 12
     2 X 7 = 14
     2 X 8 = 16

주의 사항 !

  1. expr 구분에 반드시 역따옴표를 쓰기
  2. *연산자와 괄호 뒤에는 \역슬래시를 꼭 붙이기
  3. expr 구분 안에서의 모든 연산자와 기호, 변수 사이에는 공백으로 한 칸씩 띄우기

while [조건문 ] - 조건을 만족할 경우 반복 수행
do
반복할 문장
done

while 문과 for문의 차이

  • for : 반복 횟수가 결정되어 잇음
  • while : 사용자가 중지 할 때까지 수행
* 예1)
[root@server101 shell]# vi while_test1.sh
    \#!/bin/bash
    num=1
while [ \( $num -eq 1 \) -o \( $num -eq 2 \) ]
do
   echo -n "Enter Number :"
   read num
   echo "God Bless you~!!"
   echo ""
done
   echo "Incorrect Number"
   echo "Good bye~"


[root@server101 shell]# sh while_test1.sh
Enter Number :1
God Bless you~!!
Enter Number :2
God Bless you~!!
Enter Number :3
God Bless you~!!
Incorrect Number
Good bye~

예2) 사용자가 y나 Y를 입력할 때까지 계속 “Enter y| Y”출력하게 하고 맞게 입력하면 Good출력하고 종료…

[root@server101 shell]# vi while_test2.sh
    #!/bin/bash
    A=a
    while [ \( $A != "Y" \) -a \( $A != "y" \) ]
    do
    echo -n "Enter Y | y : "
    read A
    done
    echo "Good!" 
[root@server101 shell]# sh while_test2.sh
    Enter Y | y : a
    Enter Y | y : b
    Enter Y | y : y

Good!
예3) while을 이용하여 사용자에게 단수를 입력 받은 후 해당 구구단을 출력하는 스크립트

[root@server101 shell]# vi while_test3.sh
    #!/bin/bash
    echo -n " 단수를 입력하세요 : "
    read a
    i=1
    while [ $i -lt 10 ]
do
      gob=`expr $a \* $i `
      echo " $a X $i = $gob "
      i=`expr $i + 1`
done 
[root@server101 shell]# sh while_test3.sh
 단수를 입력하세요 : 3
 3 X 1 = 3
 3 X 2 = 6
 3 X 3 = 9
 3 X 4 = 12
 3 X 5 = 15
 3 X 6 = 18
 3 X 7 = 21
 3 X 8 = 24
 3 X 9 = 27

연습문제 )
사용자에게 원하는 단 수를 입력 받아 해당 단 수의 구구단을 출력 한 후 “Retry? y|Y : “ 메시지를 보인 후 y를 누르면 다시 원하는 단수를 입력받아 출력하게 하고 만약 다른문자를 누르면 종료하는 스크립트

[root@server101 shell]# vi while_exam1.sh
    #!/bin/bash

    t=y
    i=1
while [ \( $t = "y" \) -o \( $t = "Y" \) ]
do
      echo -n " 단수를 입력하세요 : "
      read a

   while [ $i -lt 10 ]
   do
    gob=`expr $a \* $i `
    echo " $a X $i = $gob "
    i=`expr $i + 1`
   done
  echo -n " Retry? Y |y :"
   read t
   i=1
done

[root@server101 shell]# sh while_exam1.sh
 단수를 입력하세요 : 3
 3 X 1 = 3
 3 X 2 = 6
 3 X 3 = 9
 3 X 4 = 12
 3 X 5 = 15
 3 X 6 = 18
 3 X 7 = 21
 3 X 8 = 24
 3 X 9 = 27
 Retry? Y |y :y
 단수를 입력하세요 : 5
 5 X 1 = 5
 5 X 2 = 10
 5 X 3 = 15
 5 X 4 = 20
 5 X 5 = 25
 5 X 6 = 30
 5 X 7 = 35
 5 X 8 = 40
 5 X 9 = 45
 Retry? Y |y :Y
 단수를 입력하세요 : 4
 4 X 1 = 4
 4 X 2 = 8
 4 X 3 = 12
 4 X 4 = 16
 4 X 5 = 20
 4 X 6 = 24
 4 X 7 = 28
 4 X 8 = 32
 4 X 9 = 36
 Retry? Y |y :f

util [ 조건문 ]
do
실행할 문장
done
-> 조건문이 거짓이면 반복문을 수행하고 조건문이 참이면 반복문을 끝낸다.

[root@server101 shell]# vi until_test1.sh
    #!/bin/bash
    echo -n " Enter Number : "
    read dan
    echo ""
    num=1
    until [ $num -eq 10 ]
do
        gob=`expr $dan \* $num `
         echo " $dan X $num = $gob "
         num=`expr $num + 1 `
done 
[root@server101 shell]# sh until_test1.sh
 Enter Number : 4
 4 X 1 = 4
 4 X 2 = 8
 4 X 3 = 12
 4 X 4 = 16
 4 X 5 = 20
 4 X 6 = 24
 4 X 7 = 28
 4 X 8 = 32
 4 X 9 = 36

연습문제 1
for문으로 구구단 만들기

[root@server101 shell]# vi for1.sh
      1 #!/bin/bash
      2
      3 for dan in 2 3 4 5 6 7 8 9
      4 do
      5   echo " $dan 단 "
      6   for i in 1 2 3 4 5 6 7 8 9
      7   do
      8      gob=`expr $dan \* $i`
      9      echo " $dan X $i = $gob "
     10   done
     11 done 
[root@server101 shell]# sh for1.sh
 22 X 1 = 2
 2 X 2 = 4
 2 X 3 = 6
 2 X 4 = 8
 2 X 5 = 10
 2 X 6 = 12
 2 X 7 = 14
 2 X 8 = 16
 2 X 9 = 18
 33 X 1 = 3
 3 X 2 = 6
 3 X 3 = 9
 3 X 4 = 12
 3 X 5 = 15
 3 X 6 = 18
 3 X 7 = 21
 3 X 8 = 24
 3 X 9 = 27
 44 X 1 = 4
 4 X 2 = 8
 4 X 3 = 12
 4 X 4 = 16
 4 X 5 = 20
 4 X 6 = 24
 4 X 7 = 28
 4 X 8 = 32
 4 X 9 = 36
 55 X 1 = 5
 5 X 2 = 10
 5 X 3 = 15
 5 X 4 = 20
 5 X 5 = 25
 5 X 6 = 30
 5 X 7 = 35
 5 X 8 = 40
 5 X 9 = 45
 66 X 1 = 6
 6 X 2 = 12
 6 X 3 = 18
 6 X 4 = 24
 6 X 5 = 30
 6 X 6 = 36
 6 X 7 = 42
 6 X 8 = 48
 6 X 9 = 54
 77 X 1 = 7
 7 X 2 = 14
 7 X 3 = 21
 7 X 4 = 28
 7 X 5 = 35
 7 X 6 = 42
 7 X 7 = 49
 7 X 8 = 56
 7 X 9 = 63
 88 X 1 = 8
 8 X 2 = 16
 8 X 3 = 24
 8 X 4 = 32
 8 X 5 = 40
 8 X 6 = 48
 8 X 7 = 56
 8 X 8 = 64
 8 X 9 = 72
 99 X 1 = 9
 9 X 2 = 18
 9 X 3 = 27
 9 X 4 = 36
 9 X 5 = 45
 9 X 6 = 54
 9 X 7 = 63
 9 X 8 = 72
 9 X 9 = 81

while문으로 구구단 만들기

[root@server101 shell]# vi while1.sh
    #!/bin/bash
    dan=2
    i=1
while [ \( $dan -ge 2 \) -a \( $dan -le 9 \) ]
do
     echo " $dan 단"
      i=1
      while [ $i -lt 10 ]
  do
            gob=`expr $dan \* $i `
        echo "$dan X $i = $gob"
            i=` expr $i + 1 `
  done
 dan=`expr $dan + 1`
done

구구단 옆으로 만들기

[root@server101 shell]# vi gugu.sh
     #!/bin/bash
     for num in 1 2 3 4 5 6 7 8 9
do
       for dan in 2 3 4 5
  do
     gob=`expr $dan \* $num `
    echo -n "   $dan X $num = $gob "
  done
  echo ""
done
echo ""
for num in 1 2 3 4 5 6 7 8 9
do
  for dan in 6 7 8 9
  do
     gob=` expr $dan \* $num `
     echo -n "   $dan X $num = $gob "
  done
  echo ""
done


[root@server101 shell]# sh gugu.sh
   2 X 1 = 2    3 X 1 = 3    4 X 1 = 4    5 X 1 = 5
   2 X 2 = 4    3 X 2 = 6    4 X 2 = 8    5 X 2 = 10
   2 X 3 = 6    3 X 3 = 9    4 X 3 = 12    5 X 3 = 15
   2 X 4 = 8    3 X 4 = 12    4 X 4 = 16    5 X 4 = 20
   2 X 5 = 10    3 X 5 = 15    4 X 5 = 20    5 X 5 = 25
   2 X 6 = 12    3 X 6 = 18    4 X 6 = 24    5 X 6 = 30
   2 X 7 = 14    3 X 7 = 21    4 X 7 = 28    5 X 7 = 35
   2 X 8 = 16    3 X 8 = 24    4 X 8 = 32    5 X 8 = 40
   2 X 9 = 18    3 X 9 = 27    4 X 9 = 36    5 X 9 = 45
   6 X 1 = 6    7 X 1 = 7    8 X 1 = 8    9 X 1 = 9
   6 X 2 = 12    7 X 2 = 14    8 X 2 = 16    9 X 2 = 18
   6 X 3 = 18    7 X 3 = 21    8 X 3 = 24    9 X 3 = 27
   6 X 4 = 24    7 X 4 = 28    8 X 4 = 32    9 X 4 = 36
   6 X 5 = 30    7 X 5 = 35    8 X 5 = 40    9 X 5 = 45
   6 X 6 = 36    7 X 6 = 42    8 X 6 = 48    9 X 6 = 54
   6 X 7 = 42    7 X 7 = 49    8 X 7 = 56    9 X 7 = 63
   6 X 8 = 48    7 X 8 = 56    8 X 8 = 64    9 X 8 = 72
   6 X 9 = 54    7 X 9 = 63    8 X 9 = 72    9 X 9 = 81
[root@server101 shell]# vi whilegugu.sh
#!/bin/bash
num=1
while [ $num -lt 10 ]
do
  dan=2
  while [ $dan -lt 6 ]
  do
  gob=`expr $dan \* $num `
  echo -n "  $dan X $num = $gob "
  dan=`expr $dan + 1 `
  done
echo ""
num=`expr $num + 1 `
done
echo""
num=1
while [ $num -lt 10 ]
do
  dan=6
  while [ $dan -lt 10 ]
  do
  gob=`expr $dan \* $num `
  echo -n "  $dan X $num = $gob "
  dan=`expr $dan + 1 `
  done
echo ""
num=`expr $num + 1 `
done

별 스크립트
문제1 답

     #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

    i=1
while [ $i -le $num ]
do
   j=1
   while [ $j -le $i ]
   do
     echo -n "*"
     j=`expr $j + 1 `
   done

   i=`expr $i + 1 `
   echo ""
done
echo ""

별 스크립트
문제2 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

    i=1
while [ $i -le $num ]
do
   j=1
   k=`expr $num - $i`
   while [ $j -le $num ]
   do
     if [ $j -le $k ]
     then
       echo -n " "
     else 
       echo -n "*"
     fi

     j=`expr $j + 1 `
   done

   i=`expr $i + 1 `
   echo ""
done
echo ""

별 스크립트
문제3 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

  i=1
  while [ $i -le $num ]
  do
   j=1
   k=`expr $num - $i`
   l=`expr $num + $i - 1`
   while  [ $j -le $l ]
   do
     if [ $j -le $k ]
     then
       echo -n " "
     else
       echo -n "*"
     fi
     j=`expr $j + 1`
   done

   i=`expr $i + 1`
   echo ""
done
echo ""

별 스크립트
문제4 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

    i=1
while [ $i -le $num ]
do
  j=1
  k=`expr $num - $i + 1`
  while [ $j -le $k ]
  do 
     echo -n "*"
     j=`expr $j + 1`
  done

  i=`expr $i + 1`
  echo ""
done
echo ""

별 스크립트
문제5 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

i=1
while [ $i -le $num ]
do
  j=1
  k=`expr $num \* 2 - $i`
  while [ $j -le $k ]
  do 
     if [ $j -lt $i ]
     then
       echo -n " "
     else
       echo -n "*"
     fi

     j=`expr $j + 1`
  done

  i=`expr $i + 1`
  echo ""
done
echo ""

별 스크립트
문제6 답

#!/bin/bash
echo ""
echo -n "Enter number: "
read num
echo ""

i=1
while [ $i -le $num ]
do
   j=1
   k=`expr $num - $i`
   l=`expr $num - 1 + $i`
   while [ $j -le $l ]
   do
      if [ $j -le $k ]
      then
        echo -n " "
      else
        echo -n "*"
      fi
      j=`expr $j + 1`
    done

    i=`expr $i + 1`
    echo ""
done

i=1
while [ $i -le $num ]
do
   j=1
   k=`expr $num \* 2 - $i - 1`
   while [ $j -le $k ]
   do
     if [ $j -le $i ]
     then
        echo -n " "
     else
        echo -n "*"
     fi
     j=`expr $j + 1`
   done

   i=`expr $i + 1`
   echo ""
done
echo ""
lunux(리눅스) 압축 파일 관리 (compress.tar, gzip 등)
Linux

압축(COMPRESS,GZIP,TAR,ZIP,JAR)

1. - compress

*기본 사용법

 * -압축하기
1.#compress file1
    ;file1.Z로 압축

2.#compress -v file1
    ;-v : 압축과정 보여줌

    (압축할 대상이 없으면
    "file unchanged" 라는 메시지가 출력되며 압축 안된다)

*    -압축 내용 미리보기
    1.# uncompress -c file1.Z
        ;압축된 파일의 내용 미리 보기
        (압축을 가상으로 풀어줘서 cat으로 보여주지만,
        사실은 임시저장 디렉토리에 압축이 풀린다. (윈도우의 임시파일이랑 같다))

    -압축 해제
        1.# uncompress file1.Z
            ;압축해제
2. - Gzip

■ gzip
*기본 사용법

* -압축하기        
 1.# gzip file1
       ;file1.gz 로 압축
 2.# gzip -v file1
       ;-v : 압축 과정 보여줌        

-압축 내용 미리보기
# gunzip -c file1.gz (O)   
              (주의 : # gzip -c file1.gz (X, 내용 깨져 보임))
                  ;압축된 파일의 내용 미리 보기
                       (= # gzcat file1.gz)

-압축 해제
              1.# gunzip file.gz
                       ;압축 해제
              2.# gzip -d file1.gz

*추가 사용법

    -서브 폴더도 압축하기
    # gzip -r 디렉토리명
              ;디렉토리 안의 모든 파일(서브,서브...포함) 압축
              ;(개개의 파일을 개개의 .gz 로 압축)
              ;(유닉스의 압축에는 묶어 압축 이란 건 없음.
                        묶음 과 압축을 따로 해주어야 함)

    -서브 폴더도 압축 해제
    # gzip -dr 디렉토리명
              ;디렉토리 안의 모든 파일(서브,서브...포함) 압축 해제
              ;(바로 위에서 압축한 걸(서브폴더도 압축하기) 해제할  사용)
■ tar

(=묶기)(=백업)
*기본 사용법

-묶기
# tar cvf file.tar file1 file2 file3
              ;(c : create, v : vervose, f : file or tape)
              ;(f는 이후 지정한 파일명으로 묶겠다는 것)

    -묶음 내용 미리 보기
              # tar tvf file.tar
              ;묶어진 것들 확인

    -묶음 해제
              # tar xvf file.tar

*추가 사용법

-디렉토리 묶기
# tar cvf dir.tar 디렉토리명
             ;해당 디렉토리 묶음 (서브,서브... 포함)

-테이프 장치로 묶기 (백업이라 함 - tar 는 백업에도 사용됨)
              1.# tar cvf /dev/rmt/0 file1 file2 file3
                       ;파일 세개를 테이프 장치로 백업
              2.# tar cvf /dev/rmt/0 /export/home
                       ;계정 홈 베이스 폴더 안의 것
                       (서브,서브...포함)을 테이프 장치로 백업
                       ?/dev/rmt/0 대신에 디스크 장치명(c0t0d0s7)
■ gtar

*기본 사용법

    -묶고 압축하기
    # gtar cvzf file.tar.gz file1

    -묶음 내용 미리보기
    # gtar tvzf file.tar.gz

    -묶음 해제
    # gtar xvzf file.tar.gz

(참) gtar 는 기존 tar 기능에, 특정 디렉토리 제외, 압축,묶기 동시 수행 두 개의 기능이 더 있어서 보통 tar 에 alias 지정해서 사용함 (시나리오 문서 참고)

     # alias tar='/usr/sfw/bin/gtar'

■ zip
     ;zip 은 gtar cvzf 와 유사 함 => 묶고 압축하기. 결국엔 묶기
     ;UNIX jar 와 호환, 윈도우 zip 과 호환
     ;zip 파일이면, 알집에서도 풀림
     ;묶음 유형의 명령어라 원본은 그대로 놔두고, 묶기,묶음해제 수행 함

*기본 사용법

             -묶고 압축하기
              # zip file.zip file1 file2 file3
                       ;file.zip 으로 묶고 압축하기

    -묶음 내용 미리 보기
              # unzip -l file.zip
                       ;묶음 내용 확인

    -묶음 해제
              # unzip file.zip

*추가 사용법
-디렉토리(서브,서브…포함) 묶기

              # zip -r dir.zip 디렉토리명
                       ;해당 디렉토리(서브,서브...포함) 를 dir.zip 이란 이름으로 묶기

    -디렉토리에 zip 사용시 주의사항
              # zip dir.zip 디렉토리명
                       ;이 경우 디렉토리명 자체에 대해 zip 명령 수행 (안의 것을 묶는 게 아님. 의미 없는 행동이니 디렉토리에 대해 zip 할때는 -r 쓰자)
■ jar
     ;jar 은 gtar cvzf 와 유사 => 묶고 압축하기. 결국엔 묶기

*기본 사용법

    - 묶고 압축하기
              # jar cvf file.jar file1 file2 file3
                       ;file.jar 으로 묶기

    -묶음 내용 미리 보기
              # jar tvf file.jar

    -묶음 해제
              # jar xvf file.jar

■ 정리 : 압축 해제 유형

     -file.tar.Z
              # zcat file.tar.Z | tar xvf -
                       ;.tar.Z 압축 해제하기 : 두 번의 작업이 필요하나, 한 번에 풀기 위한 요령 임

     -file.tar.gz
              # gzcat file.tar.gz | tar xvf -
                       ;.tar.gz 압축 해제하기 : 두 번의 작업이 필요하나, 한 번에 풀기 위한 요령 임

     -file.zip
              # unzip file.zip

     -file.jar
              # jar xvf file.jar

'Linux' 카테고리의 다른 글

리눅스(linux) LVM 디스크 관리 및 추가  (0) 2014.10.31
리눅스 shell script  (0) 2014.10.31
리눅스에 iptraf3.0 설치  (1) 2014.10.31
DNS 서버구축  (0) 2014.10.31
linux,unix에 vi editor 구문강조  (0) 2014.10.31
솔라리스(unix) 디스크 관리 및 추가
Unix
1.슬라이스
1. 실린더의 그룹
2. 0~7번 슬라이스로 구성
3. 슬라이스 2번은 절대로 건들여서는 안된다.
4. benefit
    *데이터의 조직화
    *파일 엑세스 속도 감소
    *i/o 퍼포먼스 향상
2. 디스크 슬라이스 네이밍
종류 디바이스
컨트롤 이름 c0 ,c1, c2.. host bus adapter
타겟 숫자 d0 ,d1 ,d2.. disk,type,jumper로 세팅
슬라이스 숫자 s0 ,s1 ,s2.. slice number -> 0~7까지 가능
3.하드 추가 및 디스크 관리
bash-2.05# touch /reconfigure  /재부팅할때 장치를 읽을 수 있음
bash-2.05# devfsadm            /재부팅 할 수 없는 서버가 많기 때문에
                                거의 이쪽을 많이 쓴다.(리붓없이 장치인식)
bash-2.05# format
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c0d0 <DEFAULT cyl 22189 alt 2 hd 15 sec 63>
          /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
       1. c0d1 <DEFAULT cyl 2077 alt 2 hd 16 sec 63>
          /pci@0,0/pci-ide@7,1/ide@0/cmdk@1,0
       2. c1d1 <DEFAULT cyl 2077 alt 2 hd 16 sec 63>
          /pci@0,0/pci-ide@7,1/ide@1/cmdk@1,0
       3. c2t0d0 <DEFAULT cyl 1021 alt 2 hd 64 sec 32>
          /pci@0,0/pci15ad,1976@10/sd@0,0
Specify disk (enter its number): 3
  • 0번은 처음 설치할때의 하드디스크고,
    나머지 1,2는 예전에 1G씩 추가. 3번이 이번에 추가한 1G 하드디스크다.
    3번을 선택해서 디스크의 파티션을 나눠보겠다.
    EX)DISK의 SLICE NAME을 꼭 기억하자. /dev/dsk/ 디렉토리에에 파일이 생성됨.
Specify disk (enter its number): 3
selecting c2t0d0
[disk formatted]


FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format>
  • 여러가지 메뉴가 뜨는걸 볼 수 있는데
    여기서 사용할 메뉴는 fdisk,part,verify,laber 정도이다.
format> fdisk                 /fdisk를 생성한다.
No fdisk table exists. The default partition for the disk is:

  a 100% "SOLARIS System" partition

Type "y" to accept the default partition, otherwise type "n" to edit the
partition table.

 Please answer with "y" or "n": y    /y선택
format> part     /partision인데 줄여써도 된다.


PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        7      - change `7' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        !<cmd> - execute <cmd>, then return
        quit
partition>
  • 위에서 설명했듯이 파티션을 누나기전에 fdisk를 꼭 생성해 줘야한다.
    part명령어를 입력하면 프롬프트가 바뀌면서 슬라이스 번호 메뉴가 나열된다.
    위에서 말했듯이 2번 슬라이스는 backup tag가 들어있으므로 절대 건들지않는다.
    0번으로 가서 파티션을 나눠보자.
partition> 0
Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       0               0         (0/0/0)          0

Enter partition id tag[unassigned]:     /파티션아이디 입력 [그냥엔터]
Enter partition permission flags[wm]:   /플래그 입력 [그냥엔터]
Enter new starting cyl[0]:              /맨첫번째니까 당연히 0 [그냥엔터]
Enter partition size[0b, 0c, 0e, 0.00mb, 0.00gb]: 500mb
partition>
  • 실린더가 중요한데 기본적으로 0번 슬라이스를 제외하고 1번부터는
    실린더 번호가 중복되어서는 안된다. 예를 들어 0번 실린더에서 0-899까지 썼다면
    다음 1번 파티션 실린더에서는 900번으로 써야지 옳다.
partition> print
Current partition table (unnamed):
Total disk cylinders available: 1020 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       0 -  499      500.00MB    (500/0/0)  1024000
  1 unassigned    wm       0               0         (0/0/0)          0
  2     backup    wu       0 - 1020     1021.00MB    (1021/0/0) 2091008
  3 unassigned    wm       0               0         (0/0/0)          0
  4 unassigned    wm       0               0         (0/0/0)          0
  5 unassigned    wm       0               0         (0/0/0)          0
  6 unassigned    wm       0               0         (0/0/0)          0
  7 unassigned    wm       0               0         (0/0/0)          0
  8       boot    wu       0 -    0        1.00MB    (1/0/0)       2048
  9 unassigned    wm       0               0         (0/0/0)          0

partition>
  • print라는 명령어는 현재 파티션을 나눈 정보를 출력받을수 있다.
    이제 다음 1번 슬라이스를 나눠보자.
partition> 1     /파티션 1번 나눌차례
Part      Tag    Flag     Cylinders        Size            Blocks
  1 unassigned    wm       0               0         (0/0/0)          0

Enter partition id tag[unassigned]:    /그냥엔터
Enter partition permission flags[wm]:  /그냥엔터
Enter new starting cyl[0]: 500         /슬라이더 나누기전에 꼭 print 명령어로 마지막으로 나누었던 슬라이스 실린더번호를 꼭 확인해야한다.
Enter partition size[0b, 0c, 500e, 0.00mb, 0.00gb]: $  /달러문자는 나머지를 뜻함
partition> print      /정보확인
Current partition table (unnamed):
Total disk cylinders available: 1020 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       0 -  499      500.00MB    (500/0/0)  1024000
  1 unassigned    wm     500 - 1019      520.00MB    (520/0/0)  1064960
  2     backup    wu       0 - 1020     1021.00MB    (1021/0/0) 2091008
  3 unassigned    wm       0               0         (0/0/0)          0
  4 unassigned    wm       0               0         (0/0/0)          0
  5 unassigned    wm       0               0         (0/0/0)          0
  6 unassigned    wm       0               0         (0/0/0)          0
  7 unassigned    wm       0               0         (0/0/0)          0
  8       boot    wu       0 -    0        1.00MB    (1/0/0)       2048
  9 unassigned    wm       0               0         (0/0/0)          0
  • 슬라이스를 모두 나누었다면 재부팅해도 사용할수 있게 명령어를 쳐야한다.
partition> label
Ready to label disk, continue? y

partition> quit
format> q
bash-2.05#
  • 여기서 끝이 아니고 포멧을 해야 쓸 수 있다.
    파일 시스템은 ufs(Unix FILE System)
bash-2.05# newfs /dev/dsk/c2t0d0s0      /IDE가 아닌 SCSI로 만들었다.
newfs: construct a new file system /dev/rdsk/c2t0d0s0: (y/n)? y  /Y 엔터
/dev/rdsk/c2t0d0s0:     1024000 sectors in 500 cylinders of 64 tracks, 32 sectors
        500.0MB in 32 cyl groups (16 c/g, 16.00MB/g, 7680 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 32832, 65632, 98432, 131232, 164032, 196832, 229632, 262432, 295232,
 721632, 754432, 787232, 820032, 852832, 885632, 918432, 951232, 984032,
 1016832,
bash-2.05# newfs /dev/dsk/c2t0d0s1
newfs: construct a new file system /dev/rdsk/c2t0d0s1: (y/n)? Y
bash-2.05#
  • 파티션 슬라이스 갯수많큼 포멧해줘야 한다.
    UFS로 만들어 졌는지 확인도 가능하다.
bash-2.05# fstyp /dev/dsk/c2t0d0s0
ufs
bash-2.05# fstyp /dev/dsk/c2t0d0s1
ufs
  • 이제 정상적으로 마운트 할 디렉토리 생성하고 디렉토리에
    disk를 마운트 하는 일만 남았다.
bash-2.05# mkdir /c2t0d0_1 /c2t0d0_2 /c2t0d0_backup
bash-2.05#
bash-2.05# mount /dev/dsk/c2t0d0s0 /c2t0d0_1
bash-2.05# mount /dev/dsk/c2t0d0s1 /c2t0d0_2
bash-2.05# mount /dev/dsk/c2t0d0s2 /c2t0d0_backup
bash-2.05# df -h
Filesystem             size   used  avail capacity  Mounted on
/dev/dsk/c0d0s0        4.8G   1.4G   3.3G    31%    /
/proc                    0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
fd                       0K     0K     0K     0%    /dev/fd
/dev/dsk/c0d0s1        939M    30M   852M     4%    /var
swap                   1.1G    20K   1.1G     1%    /var/run
swap                   1.1G   332K   1.1G     1%    /tmp
/dev/dsk/c0d0s3        4.1G   2.2G   1.8G    55%    /export/home
/vol/dev/dsk/c1t0d0/sol_9_905_x86/s2
                       250M   250M     0K   100%    /cdrom/sol_9_905_x86/s2
/vol/dev/dsk/c1t0d0/sol_9_905_x86/s0
                       183M   173M     0K   100%    /cdrom/sol_9_905_x86/s0
/dev/dsk/c2t0d0s0      469M   1.0M   422M     1%    /c2t0d0_1
/dev/dsk/c2t0d0s1      489M   1.0M   439M     1%    /c2t0d0_2
/dev/dsk/c2t0d0s2      469M   1.0M   422M     1%    /c2t0d0_backup
  • 마운트까지 잘 되었는지 df-h로 확인하였고 이후 hard disk 추가방법은
    맨 위에 기재를 해놨지만 1. touch /reconfigure나 2. reboot — -r로 가능하다.

'Unix' 카테고리의 다른 글

솔라리스 10 ssh 접속  (0) 2014.10.31
솔라리스(unix) 파일권한 관리  (0) 2014.10.31
솔라리스(unix) 파일 시스템 관리(fsck, du....)  (0) 2014.10.31
unix 암호찾기  (0) 2014.10.31
unix crontab, runlevel,init 정의 및 사용법  (0) 2014.10.31
솔라리스(unix) 파일 시스템 관리(fsck, du....)
Unix

*fsckFileSystemCheck

파일시스템이 손상을 입었을 경우 손상된 파일시스템의 데이터에 대한 일관성을
체크하고 손상되거나 일관성이 없는 데이터를 복구하는 프로세스.

fsck 명령어로 파일시스템 체크시 이상한 파일이나 데렉토리를 찾으면 그것들을
lost+found 디렉토리에 갖다 놓는다.

fsck 명령어 사용시 -y옵션을 안주면 파일시스템 체크 후 복구하겠냐는
당연한 질문을 해대는데 당연히 복구하려고 쓰는 기능이므로 fsck 시작시 -y 옵션을 주자.

  1. 손상 원인
    Power failuer, kenel에서 software error
    Hardware failure, 부적절한 시스템 shutdown

  2. 주의 사항
    fsck 실행시 반드시 umount해주어야 한다. (디스크가 깨질염려가 있음)
    mount시 ‘logging’ option을 사용하면 fsck를 수행하지 않음
    file system이 ‘clean’,’stable’,’logging’이면 fsck 수행하지 않음


*용도

Super block에 문제가 발생한 경우
Can’t mount /dev/dsk/c0t0d0s
backup super block 위치 확인

newfs  -N  /dev/rdsk/c# t# d# s#

해결방법

fsck  -y  -o  b=32  /dev/rdsk/c0t0d0s0

single user mode에서 사용해야 함(단, / file system는 다른 곳에서 체크해야 함)


monitoring file system usages

*df

    * 현재 mount된 file system에서 사용되고 있는 디스크 공간 표시
    * Disk Free Block

command
df {-options} [directory]
    *-k -> 킬로바이트 단위로 표시
    *-h    -> 킬로바이트, 메가바이트, 기가바이트, 테라바이트 단위로 표시
    *-l -> 로컬 파일시스템만 표시

*du

    *Directory나 file에 의해 사용된 Disk Block 수
    *Disk usage    Block

command
du {-k} [directory]
    *-k -> 킬로바이트로 표시
    *-s -> 서머리 정보 표시
    *-a -> 특정 디렉토리에서 사용되고 있는 파일이나 디렉토리의 block수

'Unix' 카테고리의 다른 글

솔라리스(unix) 파일권한 관리  (0) 2014.10.31
솔라리스(unix) 디스크 관리 및 추가  (0) 2014.10.31
unix 암호찾기  (0) 2014.10.31
unix crontab, runlevel,init 정의 및 사용법  (0) 2014.10.31
unix swap,top 정의 및 명령어  (0) 2014.10.31
unix 암호찾기
Unix

root 암호찾기

root계정 암호 잃어버렸을때 어떻게 해야할지 난감하다면
아래 과정만 따라해서 찾을 수 있습니다.(솔라리스9 기준)

  1. OS 재부팅에 앞서 솔라리스9 1번cd를 넣고 재부팅을한다.
    (터미널에 reboot)

  2. 재부팅중에 vmware라고 화면에 잠깐 출력되는데 그때
    바이오스로 넘어갈수 있는 시간이 잠깐 있다(F2연타)

  3. 바이오스 화면에서 BOOT로 넘어가 HDD가 아닌 CD/DVD를
    1번 순위로 바꾸고 다시 재부팅 하면 설치화면으로 넘어간다.

  4. 설치화면에서 CD체크후 F2로 계속 넘어가다보면 회색화면이
    나오는데 입력칸에 b -s를 입력하면 다음 화면으로 넘어가게 된다.

    # b -s
    
  5. 좀만 기다리면 프롬프트가 뜨는데 기존하드(c0d0s0)를 마운트한다.

    bash-3.00# mount /dev/dsk/c0d0s0
    
  6. 그리고 shadow파일로 들어가서 root비밀번호 삭제.
    삭제 안하고 다시 암호치고 재부팅하면 안된다.
    한번 더 암호화해버려서 1번부터 다시 진행해야한다.
    vi /a/etc/shadow /root암호삭제

  7. 다시 재부팅 해서 HDD를 1순위로 올려놓고 재부팅.

  8. 비밀번호 없이 로그인이 되고 비밀번호를 변경해줘야한다.
    bash-3.00# passwd root
    

RPMLinux

RPM이란 RedHat Package Manager의 약자다.

  • RedHat에서 프로그램 설치와 업그레이드 및 삭제등을
    편리하게 하기위해 패키치 형태의 바이너리 파일을 배포중이고
    간단히 RPM이란 명령어를 통해 설치 및 삭제, 업그레이드 가능.

command

  • rpm {-options} packagename

options

  • rpm -i 패키지이름
    (패키지 설치)
  • rpm -U 패키지이름
    (패키지 업그레이드,구저번이 있으면 덮어씀)
  • rpm -e 패키지이름
    (패키지 삭제)
  • rpm -qa 패키지이름
    (패키지 조회)
  • rpm -v (설치과정을 #으로 표시)

주요 사용하는 명령어

  • rpm -ivh 패키지이름
    (패키지 설치시)
  • rpm -Uvh 패키지이름
    (패키지 업그레이드)
  • rpm -e 패키지이름
    (패키지 삭제)

의존성 패키지( - -nodeps)

  • a.rpm , b.rpm , c.rpm이 있다고 가정하고
    a라는 rpm을 설치할려고 하면 b.rpm을 먼저 설치하라고 하고
    b는 c , c는 d…이렇게 꼬리에 꼬리를 물고 설치하라고 함
  • 이럴 땐 강제로 의존성을 무시하고 강제로 원하는 패키지 설치
    *rpm -Uvh a.rpm —nodeps
  • 강제로 덮어쓰기
    *rpm -Uvh a.rpm —force

주의사항

  • rpm 파일은 다운받기도 힘들뿐더러 OS의 bit 확인해서 깔아야한다.
    64bit는 패지키네임 뒤에 x64라고 적혀있다.
  • rpm은 설치하기 쉬운방면에 옵션설정이 불가하다.
  • 컴파일은 옵션이 가능하지만 사용하기가 다른것보다 조금 어렵다.
    *configure(setup) -> make(실행코드생성) -> make instal(복사)

pkgunix

소프트웨어 & 패치 매니지먼트

  • Update = patch
  • Software = packages(솔라리스에서)
  • 솔라리스 설치경로 -> /var/sadm/pkg
  • Package 기본디렉토리 -> /var/spool/pkg
  • 설치된 프로그램 목록 -> /var/sadm/install/contents
    패치지 명령어
  • # pkginfo
    (설치된 모든 패키지 표시)
  • # pkginfo -l SUNWxf86
    (설치된 패키지 정보(-l:자세하게 출력))
  • # pkginfo -l /var/spool/pkg
    (spooling된 패키지 정보 표시 (Error))
  • # pkginfo -l -d /var/spool/pkg
    (spooling된 패키지 정보 자세히 표시)
  • # pkginfo | grep -i netscape
  • # grep useradd /var/sadm/install/contents

기본적으로 –d 옵션안주면 /var/spool/pkg/프로그램이 있다고 생각함
현재 디렉토리 밑에 있다 라는게 -d옵션임 (지정된 디렉토리 안에라는 뜻)
/var/sadm/pkg 디렉토리에 해당 package 디렉토리 생성 / 설치될 프로그램 장소
/var/sadm/install/contents / 설치될 프로그램 명단

  • Pkgadd : 패키지 추가
  • Pkgrm : 패키지 삭제
  • Pkgchk : 패키지 체크

매니징 소프트웨어 패치스
os에서 의존성패키지가 설치가 안되어서 오라클 설치가 안될수도 있음
patchadd –p : 현재 패치되어진걸 확인하는 명령어
patchrm { -f } patch_id : a에서 a`로 패치해야하는데 기존 a를 빽업을하고 a`를 a로 덮어쓴다. 문제가 되면 다시 a(원본)을 a`로 덮어 쓴다.

예제

Top-3.6.1-sol9-x86-local.gz이라는 패키지를 설치해보자

Bash-2.05# top-3.6.1-sol9-x86-local.gz를 /tmp/밑에 옮겨놓고
Bash-2.05# gzip top-3.6.1-sol9-x86-local.gz으로 압축풀거나
Bash-2.05# gunzip top-3.6.1-sol9-x86-local.gz 으로 압축을 풀고
Bash-2.05# pkgadd –d top-3.6.1-sol9-x86-local [enter]
all, y
Bash-2.05# cp /usr/local/bin/top /usr/bin/ [enter]
Bash-2.05# top [enter]

리눅스에 iptraf3.0 설치
Linux

iptraf 3.0 설치 가이드

  • 설치가이드래봤자 별거없고 과정만 조금 긁어봤다.
    1.운영체제는 oracle linux6.5
    2.iptraf 3.0.0 버전

iptraf는 실시간 패킷 분석 프로그램으로 네트워크 인터페이스 별 모니터링과
각 프로토콜 별 송수신 패킷 전송량을 측정, 송수신 IP 실시간 감시 등 TEXT 그래픽 인터페이스로 제공하는 프로그램이다.

[root@dbserver ~]# wget http://www.superuser.co.kr/home/files/iptraf-3.0.0.tar.g            z
--2014-07-31 19:15:02--  http://www.superuser.co.kr/home/files/iptraf-3.0.0.tar.            gz
Resolving www.superuser.co.kr... 222.97.189.20
Connecting to www.superuser.co.kr|222.97.189.20|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.linux.co.kr/home/files/iptraf-3.0.0.tar.gz [following]
--2014-07-31 19:15:04--  https://www.linux.co.kr/home/files/iptraf-3.0.0.tar.gz
Resolving www.linux.co.kr... 222.97.189.20
Connecting to www.linux.co.kr|222.97.189.20|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 575169 (562K) [application/x-gzip]
Saving to: ?쐇ptraf-3.0.0.tar.gz??

100%[======================================>] 575,169     1.29M/s   in 0.4s

2014-07-31 19:15:04 (1.29 MB/s) - ?쐇ptraf-3.0.0.tar.gz??saved [575169/575169            ]

[root@dbserver ~]#

터미널로 iptraf3.0.0 tar gz를 받는다.

[root@dbserver ~]# ls
anaconda-ks.cfg  Downloads           iptraf-3.0.0      Music     Templates
Desktop          install.log         iptraf-3.0.0.tar  Pictures  Videos
Documents        install.log.syslog  missfont.log      Public    yum.sh
[root@dbserver ~]# cd iptraf-3.0.0/
[root@dbserver iptraf-3.0.0]# ls
CHANGES        FAQ      README             README.platforms  Setup
contrib        INSTALL  README.contact     README.rvnamed    src
Documentation  LICENSE  README.interfaces  RELEASE-NOTES     support
[root@dbserver iptraf-3.0.0]# ./Setup

ls로 확인해 봤더니 root/home에 iptraf가 있었다.
압축을 풀어보자.

[root@dbserver ~]# iptraf-3.0.0.tar.gz           /gwet으로 받았는 2중압축 iptra
[root@dbserver ~]#
[root@dbserver ~]# gunzip iptraf-3.0.0.tar.gz    /gunzip으로 gz를 한번 풀고
[root@dbserver ~]#
[root@dbserver ~]# tar -xvf iptraf-3.0.0.tar     /tar로 나머지 tar압축을 푼다.

이렇게 전부 다 풀어주고 해당 디렉토리 안으로 들어가서 설치해주면 끝

[root@dbserver ~]# cd iptraf-3.0.0
[root@dbserver ~]#
[root@dbserver iptraf-3.0.0]#ls
CHANGES        FAQ      README             README.platforms  Setup
contrib        INSTALL  README.contact     README.rvnamed    src
Documentation  LICENSE  README.interfaces  RELEASE-NOTES     support

위에 setup 설치파일이 보인다.
./setup 해주면 설치를 할 수 있다.

[root@dbserver iptraf-3.0.0]#./Setup  /대소문자 주의해서 입력할것
=====================================================================
 IPTraf Version 3.0.0 Setup
 Target Platform: Linux/x86_64
---------------------------------------------------------------------

>>>>>> COMPILING IPTRAF 3.0.0 FROM SUPPLIED SOURCE CODE

make: Entering directory `/root/iptraf-3.0.0/src'
rm -f *.o *~ core iptraf rvnamed rawtime
make -C ../support clean
make[1]: Entering directory `/root/iptraf-3.0.0/support'
rm -rf *.o *~ libtextbox.a libtextbox.so
make[1]: Leaving directory `/root/iptraf-3.0.0/support'
make: Leaving directory `/root/iptraf-3.0.0/src'
make: Entering directory `/root/iptraf-3.0.0/support'
rm -rf *.o *~ libtextbox.a libtextbox.so
make: Leaving directory `/root/iptraf-3.0.0/support'
make: Entering directory `/root/iptraf-3.0.0/src'
gcc -Wall  -DWORKDIR=\"/var/local/iptraf\" -DLOGDIR=\"/var/log/iptraf\" -DEXECDIR=\"/usr/local/bin\" -I/usr/include/ncurses -I../support -DVERSION=\"3.0.0\" -DPLATFORM=\"Linux/x86_64\"     -c -o iptraf.o iptraf.c
In file included from iptraf.c:54:
tcptable.h:26:25: error: linux/if_tr.h: No such file or directory
make: *** [iptraf.o] Error 1
make: Leaving directory `/root/iptraf-3.0.0/src'
make: Entering directory `/root/iptraf-3.0.0/src'

*** Installing executable programs and preparing work directories

>>> Installing iptraf in /usr/local/bin
/usr/bin/install: cannot stat `iptraf': No such file or directory
>>> Installing rvnamed in /usr/local/bin
/usr/bin/install: cannot stat `rvnamed': No such file or directory
>>> IPTraf work directory /var/local/iptraf already exists
>>> IPTraf log directory /var/log/iptraf already exists
>>> IPTraf lockfile directory /var/run/iptraf already exists


*** iptraf, and rvnamed executables are in /usr/local/bin
*** Log files are placed in /var/log/iptraf


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

Please read the RELEASE-NOTES file for important new information about
this version. You can view this file now (will require the 'less'
program in /usr/bin.  Press Q to quit when done).

Would you like to view the RELEASE-NOTES file now (Y/N)? N

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

Thank you for installing IPTraf.  You can now start IPTraf by issuing
the command

    /usr/local/bin/iptraf

at your shell prompt.  You can also add /usr/local/bin to your PATH environment
variable to avoid having to type the pathname when invoking the program.

make: Leaving directory `/root/iptraf-3.0.0/src'
[root@dbserver iptraf-3.0.0]# iptraf


 


'Linux' 카테고리의 다른 글

리눅스 shell script  (0) 2014.10.31
lunux(리눅스) 압축 파일 관리 (compress.tar, gzip 등)  (0) 2014.10.31
DNS 서버구축  (0) 2014.10.31
linux,unix에 vi editor 구문강조  (0) 2014.10.31
make install 안될 때 해결법  (0) 2014.10.31
unix crontab, runlevel,init 정의 및 사용법
Unix

crontab

crontab이란 정해둔 명령을 일정 기간 마다 실행 하도록 설정하는것을 말한다.

2가지 기능

  • Cron : 주기적으로 반복되는 작업을 통칭함.

Cron 작업을 해 주는 데몬(프로그램) : crond
(*d라는게 끝에 붙으면 데몬이라고 생각하면 됨.)

Crontab : crond 가 작업을 할 작업 목록
(Cond가 작업하게 명단을 작성해주는 것)
(cron 자체는 쉬운데 저걸 실행해줄 스크립트를 만드는게 조금 어렵다)

Crontab : crontab 을 수정하는 명령어
주기적으로 반복되는 작업을 cron 내지 cron작업이라고 한다.
os에서 사용자를 대신해서 cron작업을 해주는게 있다.

사용법

  • crontab {-u user id] file
  • crontab { -u user id] [ -r | -l | -e ]

options

  • -e : 설정된 파일을 새롭게 편집
  • -d : 등록된 내용을 삭제함
  • -l : 현재 등록된 내용 보기

  • command
    1.crontab -l

  • 설정
    2.1.crontab -e (일반계정으로 사용하는 크론탭)
    2.vi /etc/crontab (수퍼유저 크론탭)
    3.vi /etc/cron.d (환경설정)

*매월 매일 3시 10분 일요일,목요일에 /etc/cron.d/logchecker 작업을 실행하여라.

bash-2.50#
bash-2.50# vi /etc/cron.d/logchecker 
10 3 * * 0,4 /etc/cron.d/logchecker
bash-2.50#
bash-2.50# crontab -e
bash-2.50#

10(분) 3(시간) (매일) (매월) 0 , 4(0은 일요일기준)

bash-2.05# cd /var/spool/cron/crontabs/
bash-2.05# ls
adm   lp    root  sys   uucp

adm이라는 crontab, root라는 crontab, sys라는 crontab, uucp라는 crontab

크론탭 생성명령어

#EDITOR-vi
#export EDITOR
#crontab -e
#10 3 * * * /test/a.sh

#crontab –e -> 작업이 실행최면 해당 계정으로 전송되어 /var/spool/cron/crontabs 로 보내진다.
Crontab –e = vi /해당경로로 열어도 됨 , 보통은 vi로 디렉토리가서 열어 작업을 많이 함
*# vi /etc/cron.d/cron.deny (haha라는 사용자는 cron을 사용하지 못함)

사용자에게 crontab 명령어 사용 설정

# /etc/cron.allow   /id등록
#
# /etc/cron.deny    /id등록

서비스

# /etc/rc.d/init.d/crond start
#
# /etc/rc.d/init.d/crond restart
#
# /etc/rc.c/init.d/crond stop


program boot system

Boot Program

  • unix 프로그램 load
    Krtld load(ntmdr 윈도)
    커널한테 명령하는 파일
  • Kernel Initialization
    변수값 설정 /etc/system
    왠만해선 건들일이 없음

run level

2가지가 있다

  1. run level
  2. who –r

Run Level 0
PROM 상태
인텔 시스템의 BIOS상태

Run Level S, s

  • Single user mode
  • 파일 시스템 복구나 백업하는 용도로 사용
    /, /usr, /var, /etc, /dev, /devices, /proc, /dev/fd, /var/run, /var/adm mount

Run Level 1

  • Single user mode
  • 모든 지역 파일 시스템 mount

Run Level 2

  • Multi user mode
  • 모든 지역 파일 시스템 + 원격 파일 시스템 mount
  • NFS, Samba, Web Service 제공 안됨

Run Level 3

  • Multi user mode
  • NFS, Samba, Web Service 제공
  • Default Run Level

Run Level 4

  • 사용 안함

Run Level 5

  • 시스템 종료
  • 모든 서비스 중단
  • 파일시스템 unmount

Run Level 6

  • 시스템 재부팅
  • 모든 서비스 중단
  • 파일시스템 unmount

-r

현재 Run level과 이전 Run Level 출력

bash-3.0.0# who –r
    .    Run-level 3    102708:00    3    0    S


init

Init
/etc/inittab -> 각 모드별로(level별로) 해야되는 일을 적어놓은 파일(중요)
Vi /etc/inittab
#is:3:initdefault :기본값
s0:0:wait:/sbin/rc0 /sbin밑에 rc0을 실행해라
bash-2.05# cd /etc/rc3.d
bash-2.05# ls
README S15nfs.server S50apache S77dmi S84appserv
S13kdc.master S16boot.server S52imq S80mipagent S89sshd
S14kdc S34dhcp S76snmpdx S81volmgt S90samba
S로 시작하는 파일들은 스크립트를 시작해라.

/etc/inittab를 참조하는 shutdown 명령어
shutdown -g 10 -i 6 -y “system reboot after 10 sec”
-y : yes, -n : no
-g : default 60 sec, 명령 실행 후 종료시까지의 시간
-I : default S, 런 레벨 지정
0, 1, s, 5, 6 런 레벨로만 변경 가능

'Unix' 카테고리의 다른 글

솔라리스(unix) 파일 시스템 관리(fsck, du....)  (0) 2014.10.31
unix 암호찾기  (0) 2014.10.31
unix swap,top 정의 및 명령어  (0) 2014.10.31
UNIX,LINUX 사용자 관리 및 그룹관리  (0) 2014.10.31
서버보안 및 원격접속  (0) 2014.10.31
unix swap,top 정의 및 명령어
Unix

Pseudo F/S and SWAP

  • Pseudo : 의사코드(~할 의사가 있다. 가짜코드), 설명할 용도의 F/S (File System)
  • 사용자가 건드리는건 아니고 pseudo는 커널이 건드림
  • /proc : 돌고 있는 프로세스 정보를 파일로 만들어 놓은 것임(돌고 있는 프로그램 명단)
  • sdt processe의 네트워크 버전 -> pr step
  • load avg : 평균 부하율

top 명령어

(top이라는 패키지가 설치되어 있어야한다.)

shift + p : cpu 우선순위
shift + m : memory 우선순위
k        : kill

Swap Space Overview

tmpfs File System : 램이 부족할 때 swap으로 쓸 때 씀
tmpfs의 size가 큰 파일은 프로그램 실행에 영향을 준다. - 솔라리스는 기본적으로 가상메모리에 tmpfs를 사용하도록 설정되어 있기 때문

  • swap command
  • swap { options } { argument }
    -l  : swap space List 표시
    -a : swap space 추가
    -d : swap space 삭제
    -s  : swap space 요약 정보
    

*주의사항
swap을 많이 쓴다는건 ram이 부족하다는건데 너무 남용하면 큰일남 해결책으로는 ram을 증설해주면 된다.

'Unix' 카테고리의 다른 글

unix 암호찾기  (0) 2014.10.31
unix crontab, runlevel,init 정의 및 사용법  (0) 2014.10.31
UNIX,LINUX 사용자 관리 및 그룹관리  (0) 2014.10.31
서버보안 및 원격접속  (0) 2014.10.31
NFS 서버로 원격접속하기  (0) 2014.10.31
UNIX,LINUX 사용자 관리 및 그룹관리
Unix

useradd

  • useradd -u uid(주민번호) -g gid(부서번호,메인그룹) -G gid(보조그룹) –d dir(홈 디렉토리)
    -m (리눅스는 안붙이고 유닉스는 붙여야함, 저게 없으면 login을 할수없음)
  • Bin/ksh(콘쉘) , Bin/ssh(쉬쉘) ,Bin/bash(바쉬쉘)

*useradd –D를 치면 기본값들이 나옴

*사용자 정보저장 위치:/etc/passwd ,

  • 암호저장 위치:/etc/shadow

*유저삭제 : userdel –r loginname

  • -r옵션을 안주면 계정만 지워지고 파일, 디렉토리는 남아있음
  • -r옵션을 주면 계정 및, 파일 디렉토리..계정에 속한 모든것들이 지워짐

usermod

usermod –u uid –o(overwrite) 자신의 정보를 보고 싶으면

bash-3.0.0# #id

passwd파일에서 root외에 uid가 0인 계정이 있으면 누가 호작질한거임
유저가 oracle이였는데 userdel –r(안줌) oracle 해서 확인
유저는 삭제 됐는데 oracle디렉토리가 남아있음
그래서 useradd u 100 oracle3으로 해서 예전 oracle uid를 따라감
그리고 디렉토리에 접속 할려고 했는데 노디렉토리 뜸. 안됨

userdell

-r : 디렉토리까지 모두 제거

bash-3.0.0# userdel oracle     /oracle 계정"만" 제거. 디렉토리 파일들은 모두존재
bash-3.0.0# userdel -r oracle  /oracle 계정과 디렉토리, 파일 모든것이 삭제

Passwd

그냥 passwd치면 현재 계정의 암호를 바꿀수 있고,
바로뒤에 Passwd username 하면 다른 유저의 계정 암호를 바꿀 수 있음.(root만 가능)

bash-3.0.0# passwd root


group

그룹이란 특정 폴더나 파일을 특정 권한이 있는 사용자들만이 함께 사용하기 위해
해당 사용자들에게 권한을 부여하여 그룹 단위로 묶어 관리할 수 있는 것

그룹 명령어

  • groupadd : 그룹추가
    bash-3.0.0# groupadd oracle
    
  • groupmod :그룹id나 이름 변경
    bash-3.0.0# groupmod -n 변경후이름 변경전이름
    
  • groupdel : 그룹제거
    bash-3.0.0# groupdel 그룹명
    
  • groups : 사용자가 속한 그룹 목록 표시
    bash-3.0.0# groups 계정명
    
  • usermod [옵션] [그룹명] [사용자명] : 그룹에 사용자 추가
    bash-3.0.0# usermod -G dba oracle
    

그룹 비밀번호 변경 / 사용자 관리
명령어

  • 그룹 비밀번호 변경 : gpasswd [그룹명]
  • 사용자 관리 변경 :gpasswd [옵션] [사용자명] [그룹명]

옵션

  • -A[사용자명] [그룹명] : 사용자를 해당 그룹의 관리자로 임명
  • -a[사용자명] [그룹명] : 사용자를 해당 그룹의 사용자로 추가
  • -d[사용자명] : 사용자를 해당 그룹에서 제거

'Unix' 카테고리의 다른 글

unix crontab, runlevel,init 정의 및 사용법  (0) 2014.10.31
unix swap,top 정의 및 명령어  (0) 2014.10.31
서버보안 및 원격접속  (0) 2014.10.31
NFS 서버로 원격접속하기  (0) 2014.10.31
solaris10 설치 + Oracle 10g  (0) 2014.09.02