시스템/LinuxSystem2011. 3. 5. 23:50

< SetUID > - 4000

- 파일 및 명령어가 실행되는 동안에는 실행한 사용자가 아니라 파일의 소유주의 권한을 부여하게 되는 퍼미션 값

- 그룹 소유주의 퍼미션 값에 실행의 값인 'x'가 아닌 's'기호가 대신 명시된다.

- 절대 모드 표현에서 일반 퍼미션에 4000을 더하거나 뺄 수 있다

 

< SetGID > - 2000

- 파일 및 명령어가 실행되는 동안에는 그룹 소유주의 권한을 갖게 되는 퍼미션 값

- 실행 파일 뿐만 아니라 디렉토리에도 명시 될 수 있다.

- 그룹 소유그룹의 퍼미션 값에 실행의 값인 'x'가 아닌 's'기호가 대신 명시된다.

- 절대 모드 표현에서 일반 퍼미션에 2000을 더하거나 뺄 수 있다.

 

< Sticky bit > - 1000

- 모든 사용자가 읽고, 쓰고, 실행이 가능한다.

- 단 Sticky bit 퍼미션이 적용된 디렉토리에서는 누구나 파일을 스고 실행할 수 있지만, 파일 삭제는 오직 소유주만 할 수 있다.

- 나머지 사용자의 퍼미션 값에 실행의 값인 'x'가 아닌 't'기호가 대신 명시된다.

- 절대모드 표현에서 일반 퍼미션에 1000을 더하거나 뺄 수 있다.


특정파일에 SetUID Bit 설정하기


이번에는 특정파일에 SetUID Bit를 설정하는 방법에 대해서 설명 하겠습니다. 특정 파일에 SetUID Bit가 설정되어 있다면 다른 사용자들이 그 파일을 실행하였을 경우 실행되는 동안에는 실행시킨 사용자의 권한이 아닌 파일의 소유자권한으로 실행이 됩니다.


이 퍼미션을 설정하는 방법은 4755, 4644, 4750등과 같이 지금까지 설명한 일반퍼미션앞에 4를 붙이시면 됩니다.


아래의 예는 testfile에 일반 퍼미션 755와 함께 SetUID Bit(4)를 설정한 예입니다.





위의 결과를 보시면 testfile의 퍼미션설정의 소유자 실행퍼미션 자리에 s라는 문자가 설정된 것을 보실 수 있을 것입니다. 파일의 소유자 실행퍼미션 자리에 s라는 문자가 있다면 다른 사용자들이 이 파일을 실행하더라도 파일의 소유자권한으로 실행이 됩니다.


참고로 다음의 예에서 설명하는 SetGID는 일반퍼미션앞에 2를 붙이시면 되고 Sticky Bit1을 붙이시면 됩니다.



특정파일에 SetGID Bit 설정하기


이번에는 SetGID를 설정해 보도록 하겠습니다. 앞의 SetUID와 동일한 방법으로 설정하지만 일반 퍼미션앞에 4가 아니라 2를 붙이면 SetGID가 설정됩니다.


아래의 예는 testfile에 일반퍼미션 755와 함께 SetGID Bit(2)를 설정한 예입니다.




chmod 명령어가 실행된 후에 testfile의 그룹소유자의 실행퍼미션 자리를 보시면 s라는 문자가 설정된 것을 확인할 수 있습니다.


그룹소유자의 실행퍼미션자리에 s로 설정되면 SetGID로 설정되었음을 의미합니다. SetGID가 설정된 파일을 다른 사용자가 실행을 시키면 실행시킨 사용자의 권한으로 파일실행이 되는 것이 아니라 파일의 소유자그룹권한으로 실행이 됩니다.


특정 디렉토리에 Sticky Bit 설정하는 퍼미션 설정하기


이번에는 특정 디렉토리에 Sticky Bit를 설정하는 예를 보도록 하겠습니다. Sticky Bit라고 하면 조금은 생소하게 느끼시는 독자분이 계실지는 모르겠습니다.


리눅스에서는 흔히 /tmp 디렉토리를 Sticky Bit로 설정 합니다. /tmp디렉토리내에서 특정 파일을 생성하면 생성한 사용자의 소유로 파일이 생성됩니다.

그리고 다른 사용자가 /tmp디렉토리에 다른 파일을 생성하면 역시 생성한 사용자의 소유로 파일이 생성됩니다. 파일을 삭제할 때에도 생성한 사람만이 삭제를 할 수가 있습니다.


이런 디렉토리를 흔히 공유디렉토리라고 합니다. , 파일생성을 아무나 할 수 있으며 생성된 파일은 각각 생성한 사람의 소유로 되며 수정, 삭제 또한 생성한 사람만이 그 파일을 수정하고, 지울 수 있도록 되어 있습니다. 이런 "공동장소"로 사용되는 디렉토리설정을 하기 위하여 Sticky Bit를 설정합니다.


설정하는 방법은 일반퍼미션앞에 1을 붙이시면 됩니다.


다음의 예를 보시기 바랍니다.





위의 예에서 testdir이라는 디렉토리의 퍼미션을 1755로 설정하면서 Sticky Bit를 부여하였습니다. 부여한 결과 다른사용자 실행 퍼미션자리에 보시면 t라는 문자로 셋팅된 것을 확인하실 수 있습니다. t라는 문자의 의미가 Sticky Bit라는 것을 의미합니다.


이제부터 testdir이라는 디렉토리는 공유목적으로 사용할 수 있도록 Sticky Bit 설정이 된 것입니다.


, bible이라는 사용자가 testdirbiblefile이라는 파일을 생성하였다고 하면 이 biblefilebible이라는 사용자의 소유로 생성되고, 삭제와 변경도 bible이라는 사용자만이 할 수가 있습니다.


그리고 sspark이라는 사용자가 testdirssparkfile이라는 파일을 생성하였다고 하면 이 ssparkfilesspark이라는 사용자의 소유로 되고, 삭제와 변경도 sspark이라는 사용자만이 할 수가 있습니다. 물론 다른 사용자들도 모두 동일하게 적용이 됩니다.


하지만, Sticky Bit가 설정된 디렉토리내의 파일들에 대하여 root는 언제든 마음대로 변경,삭제등이 가능합니다.


여러분 이제 파일과 디렉토리의 퍼미션에 대해서 어느정도 자신감이 생겼으리라 생각합니다. 파일과 디렉토리의 퍼미션설정에 대한 필자의 소임을 마치고 이제 실무에서 적용하는 것에 대해서는 여러분들께 맡기도록 하겠습니다. 부디 필자의 소망처럼 정확한 이해와 효율적인 사용으로 힘있고 강력한 서버관리자가 되시길 바랍니다.


[출처] 슈퍼유저코리아 - http://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1235

Posted by @dmin @dmin

댓글을 달아 주세요

시스템/LinuxSystem2011. 3. 5. 15:36

Posted by @dmin @dmin

댓글을 달아 주세요

시스템/LinuxSystem2011. 1. 4. 13:44

linux 점검명령어
서버명 : hostname
OS버전 : cat /etc/issue.net
             cat /etc/redhat-release
kernel : uname -r
            cat /proc/version
cpu : cat /proc/cpuinfo
         top
memory : free -m
              top
              cat /proc/meminfo
swap : free -m
           top
           cat /proc/swaps
           df -m (free size check)
F/S : df -h
log : /var/log/messages.* #tail messages.*

 


Unix(유닉스) 점검명령어
서버명 : hostname
OS버전체크 : uname -a
                   showrev
firmware : prtdiag -v
              #cd /usr/platform #cd `uname -i` #cd sbin #./prtdiag -v|more
cpu check : psrinfo -v
                  sar 2 10
                  ps -ef
memory check : prtdiag -v
swap check : swap -s
                    df -m (free size check)
flie system : df -h
log view : cd /var/adm/messages.* #tail messages.*
              cd /var/log/syslog.* #tail messgaes.*
booting chechk : dmesg
dump or core : /var/crash/[hostname]/*
routing table : netstat -nr
link traffic : netstat -i
disk i/o : iostat -xcPn 2 10


 

IBM AIX 점검명령어

#uname –amML  : 서버 정보 확인

#uname -L : 서버 시리얼넘버 확인

#oslevel –s  :  OS버전확인(TL SP확인)

#lssrc -g tcpip :

#instfix –i |grep ML(and SP)  : OS버전 확인

#lsdev –Cc processor  : 프로세서 수 확인

#lsattr –El mem0  : 메모리 용량 확인.

#topas  : 시스템(프로세스, 메모리, 네트워크) 체크.

#ls –al .*Com*  : 패치 확인.

#errpt |more  : 시스템 에러 체크 à errpt –aj [errorID] |more  : errpr에 대한 상세내역 확인.

#lsdev –Cc disk  : 디스크 확인

#lspv  : 디스크 활성상태확인

#lsvg –l [볼륨그룹명]  : 볼륩그룹 확인.

#df –g  : 파일시스템 용량체크.

#ifconfig – a  : ip정보확인

#netstat –rn  : 라우트 정보 확인 (디폴트게이트웨이 확인)

#ping 테스트

#lsdev –Cc if  : 네트워크 인터페이스 확인

#lsdev –Cc adapter  : 네트워크 카드 확인

#lsdev –Cc pci  : pci슬롯 확인.

#lscfg –v  : FRU 확인. (lsdev –Cc, lsdev –P)

#lsconf  : 장치정보

#du –sk * : 하위 디렉토리 및 파일 용량정보 출력

#bootinfo –r

#bosboot -a : 부트이미지 생성

#ps –ef | grep [프로세서명] : 실행중인 프로세서 검색


 
Windows(윈도우즈) 점검명령어

서버명 : hostname
            [내컴퓨터]- [속성]에서 확인
OS버전 : winver  (OS버전확인)
            [내컴퓨터]- [속성]에서 확인
patch : winver  (패치버전 확인)
            [내컴퓨터]- [속성]에서 확인
cpu : dxdiag  (CPU 클럭확인)
          [작업관리자]
memory : dxdiag  (메모리 용량확인)
          [작업관리자]
F/S :  [내컴퓨터]-[드라이브]별 용량확인
log : [관리]-[이벤트뷰어]


[출처] http://blog.naver.com/sjh9853/80091441578

Posted by @dmin @dmin

댓글을 달아 주세요

시스템/LinuxSystem2010. 12. 13. 03:09
리눅스 백업 관련 명령어

tar
- 로컬영역을 백업한다.
- tar cvfpz [백업파일] [대상파일]

예)# tar cvfpz home.tar.gz /home - /home 디렉토리를 home.tar.gz로 압축하여 백업한다.

dump
- dump [option] [backup_name] [dump_file]

option
- 0~9 : 덤프레벨 0은 전체백업이고 나머지는 부분백업이다.
- f : 백업할 미디어 및 파일명 지정

예)
# dump -0f home_backup /home - /home디렉토리를 home_backup이란 이름으로 dump한다.
# dump -0f usr_backup /dev/sda5 - /dev/sda5 파티션을 usr_backup이란 이름으로 dump한다.

restore
- dump된 파일을 복구한다.
- restore [option] [dump_file]

option
-i : 대화식으로 복구 파일을 선택 후 복원
-f : 백업 파일명으로 지정
-r : 전체 복원

---------------------------------------------------------------------------------------------

예) dump 명령어를 이용해 /home 폴더를 백업해 보자.

# mkdir backup - 백업할 폴더를 생성한다.
# cd backup

# dump -0f home-backup /home - /home폴더를 home-backup 이름으로 dump한다.
  DUMP: Date of this level 0 dump: Mon Nov 17 16:16:36 2008
  DUMP: Dumping /dev/sda6 (/home) to home-backup
  DUMP: Label: /home
  DUMP: Writing 10 Kilobyte records
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 1890 blocks.
  DUMP: Volume 1 started with block 1 at: Mon Nov 17 16:16:41 2008
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
  DUMP: Closing home-backup
  DUMP: Volume 1 completed at: Mon Nov 17 16:16:42 2008
  DUMP: Volume 1 1820 blocks (1.78MB)
  DUMP: Volume 1 took 0:00:01
  DUMP: Volume 1 transfer rate: 1820 kB/s
  DUMP: 1820 blocks (1.78MB) on 1 volume(s)
  DUMP: finished in 1 seconds, throughput 1820 kBytes/sec
  DUMP: Date of this level 0 dump: Mon Nov 17 16:16:36 2008
  DUMP: Date this dump completed:  Mon Nov 17 16:16:42 2008
  DUMP: Average transfer rate: 1820 kB/s
  DUMP: DUMP IS DONE
# ls -l
-rw-r--r-- 1 root root 1863680 11월 17 16:16 home-backup

# file home-backup
home-backup: new-fs dump file (little endian), This dump Mon Nov 17 16:16:36 2008, Previous dump Thu Jan  1 09:00:00 1970, Volume 1, Level zero, type: tape header, Label /home, Filesystem /home, Device /dev/sda6, Host server3, Flags 3
- dump를 통해 생성된 home-backup파일의 파일 종류를 알아본다.

# du -sh home-backup
1.8M    home-backup
- dump를 통해 생성된 home-backup파일의 용량을 알아본다.

# restore -rf home-backup - dump인 home-backup파일의 전체를 복원한다.

# ls
aquota.user  install.log.syslog  ks.cfg  lost+found  protoss  terran  test1  test2  test3  zerg
home-backup  restoresymtable                 
# ls /home
aquota.user  install.log.syslog  ks.cfg  lost+found  protoss  terran  test1  test2  test3  zerg
- 원본 폴더와 비교해 보면 같은 파일이 복원된 것을 알 수 있다.

---------------------------------------------------------------------------------------------

예) dump를 통해 백업된 파일을 필요한 파일 또는 폴더를 선택해서 복원해 보자.

# ls -l
-rw-r--r-- 1 root root 1863680 11월 17 16:16 home-backup

# restore -if home-backup - -i 옵션을 통해 필요한 파일 또는 폴더를 복원할 수 있다.
restore > help                  - dump -i 모드에서의 도움말을 확인 할 수 있다.
Available commands are:
        ls [arg] - list directory
        cd arg - change directory
        pwd - print current directory
        add [arg] - add `arg' to list of files to be extracted
        delete [arg] - delete `arg' from list of files to be extracted
        extract - extract requested files
        setmodes - set modes of requested directories
        quit - immediately exit program
        what - list dump header information
        verbose - toggle verbose flag (useful with ``ls'')
        prompt - toggle the prompt display
        help or `?' - print this list
If no `arg' is supplied, the current directory is used
restore > ls
aquota.user         lost+found/        test1/           zerg/
install.log.syslog  protoss/            test2/
ks.cfg                 terran/              test3/

restore > add test1
restore > add test2
restore > add test3 - 복원할 파일 또는 폴더를 선택한다.
restore > ls
aquota.user         lost+found/        *test1/           zerg/
install.log.syslog  protoss/            *test2/
ks.cfg                 terran/               *test3/          - 복원할 파일 또는 폴더에 '*'가 붙여져 있다.

restore > extract   - dump파일에서 필요한 파일 또는 폴더를 푼다.
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1
set owner/mode for '.'? [yn] y

restore > quit       - 복원이 끝났으면 dump -i 모드를 종료한다.
# ls -l
합계 1836
-rw-r--r--  1 root  root  1863680 11월 17 16:16 home-backup
drwx------ 18 test1 test1    4096 11월 17 10:09 test1
drwx------  4 test2 test2    4096 11월 17 10:10 test2
drwx------  3 test3 test3    4096 11월 12 09:33 test3
- 선택한 파일 또는 폴더가 복원 된 것을 확인 할 수 있다.

---------------------------------------------------------------------------------------------

dd (Disk Dump)
- dd if=[input_device] of=[output_device]

예) /dev/sda1 (= /boot) 파티션을 dd를 이용해 백업해 보자.

# fdisk /dev/sda - fdisk를 이용해 /dev/sda13 파티션을 새로 생성

# df -l
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              9920624   1125780   8282776  12% /
/dev/sda7              9920592   3505976   5902548  38% /usr
/dev/sda6              9920592    154972   9253552   2% /home
/dev/sda5              9920592    490128   8918396   6% /var
/dev/sda1               101086     11128     84739  12% /boot
tmpfs                   512776         0    512776   0% /dev/shm
/dev/sda8              1929068      2880   1828196   1% /data1

# dd if=/dev/sda1 of=/dev/sda13
208782+0 records in
208782+0 records out
106896384 bytes (107 MB) copied, 17.1724 seconds, 6.2 MB/s
- /boot 파티션을 확인한 다음 dd 명령어를 이용해 디스크를 덤프시킨다.

# mkdir /boot-dd
# mount /dev/sda13 /boot-dd
- 마운트 할 폴더를 생성한 다음 dd로 생성한 /dev/sda13을 /boot-dd에 마운트 시킨다.

# ls /boot-dd
System.map-2.6.18-92.el5  grub                           lost+found   symvers-2.6.18-92.el5.gz
config-2.6.18-92.el5          initrd-2.6.18-92.el5.img  message     vmlinuz-2.6.18-92.el5
# ls /boot
System.map-2.6.18-92.el5  grub                           lost+found   symvers-2.6.18-92.el5.gz
config-2.6.18-92.el5          initrd-2.6.18-92.el5.img  message     vmlinuz-2.6.18-92.el5
- 원본 폴더와 비교해 보면 같은 파일이 복원된 것을 알 수 있다.

[출처] http://bban2.tistory.com/68


DD명령어 활용

기능 : 부트 플로피나 스왑파일을 만드는 특수한 복사를 위한 명령어이다.

사용법 : dd 옵션

of=file : 표준출력대신 지정한 파일에 작성한다.

if=file : 표준입력대신 지정한 파일에서 불러들인다.

ibs=size : 지정한 사이즈만큼 읽는다.

obs=size : 지정한 사이즈만큼 쓴다.

bs=size : 지정한 사이즈만큼 읽고 쓴다.

count=n : 입력블록의 ibs크기만큼 복사한다.

conv=ascii : EBCDIC->ASCII로 변환

conv=ebcdic : ASCII->EBCDIC로 변환

conv=ibm : ASCII코드호환을 EBCDIC코드로 변환

conv=swab : 입력되는 두 바이트의 순서를 바꾼다. 입력파일에서 짝이 맞지 않는 하나의 비트가 남으면 , 마지막 바이트는 단순히 복사된다.

활용

dd if=kernel-image of=/dev/fd0 bs=1440 -> 커널이미지(부팅디스크)를 fd0디스크에 1.4mb 사이즈로 복사함

[출처] http://blog.naver.com/koleekr7/100092813697

NAME
       dd - 한 파일을 복사하는 동한 변환한다.

SYNOPSIS
       dd  [--help]  [--version]  [if=file]  [of=file] [ibs=bytes] [obs=bytes]
       [bs=bytes]  [cbs=bytes]  [skip=blocks]   [seek=blocks]   [count=blocks]
       [conv={ascii,ebcdic,ibm,block,unblock,lcase,ucase,swab,noerror,notrunc,
       sync}]

DESCRIPTION
       이 문서는 더이상 최신 정보를 담고 있지않다.  그래서,  몇몇틀릴  경우 도
       있고,  부족한  경우도  있을  것이다.  완전한매뉴얼을 원하면, Texinfo 문
       서를 참조하기 바란다.

       이 매뉴얼 페이지는 dd 명령의 GNU  버전에  대한  것이다.  dd 명령은 지정
       한  블럭크기만큼 파일을 복사하는데, 사용된다.  초기값으로는 표준 입력과
       표준 출력을 사용한다.  또한 선택적으로 그 파일의 변환도 수행한다.  (즉,
       파일을 특정 크기로 나누는데, 주로 사용됩니다. - 옮긴이 말)

OPTIONS
       사용될 수 있는 블럭 크지 지정의 문자들은 다음과 같다:
       b=512, c=1, k=1024, w=2, xm=number m

       --help 도움말을 보여주고 마친다.

       --version
              버전 정보를 보여주고 마친다.

       if=file
              표준 입력 대신에 지정한 file을 입력 대상으로 한다.

       of=file
              표준 출력 대신에 지정한 file을 출력 대상으로 한다.  conv=notrunc
              옵션을 사용하지 않는 한은, seek= 바이트 크기에 따라 ( seek= 크기
              가 0아닌 한) 지정한 크기에 따라 출력 파일을 자른다.

       ibs=bytes
              한번에 bytes 바이트씩 읽는다.

       obs=bytes
              한번에 bytes 바이트씩 쓴다.

       bs=bytes
              한번에 bytes 바이트씩 읽고 쓴다.  ibs, obs 값 무시.

       cbs=bytes
              한번에 bytes 바이트씩 변환한다.

       skip=blocks
              입력 시작에서 blocks 단위 만큼 ibs 크기를 건너띈다.(가령 skip=5,
              ibs=10 이면, 처음 50바이트를건너띄어 작업을 계속한다.)

       seek=blocks
              출력 시작에서 blocks 단위 만큼 ibs 크기를 건너띈다.

       count=blocks
              입력의 blocks 의 ibs 크기만큼만 복사한다.

       conv=conversion[,conversion...]
              대상 파일로 복사할 때, conversion 으로 변환 한다.
              Conversions:
              ascii  EBCDIC 코드를 ASCII 코드로.

              ebcdic ASCIi 코드를 ebcdic 코드로.

              ibm    ASCII 코드를 alternate EBCDIC 코드로.

              block  cbs 단위로 변환 할 때 읽은 것 안에 있는 줄바꿈 문자들을공
                     백 문자로 바꾼다.

              unblock
                     cbs 단위로 변환 할 때 읽은 것 안에 있는 공백 문자들을줄바
                     꿈 문자로 바꾼다.

              lcase  대문자를 소문자로

              ucase  소문자를 대문자로

              swab   입력되는 두 바이트의 순서를 바꾼다.  유닉스의 dd 명 령 과
                     달 리, 이것은 읽혀질 짝이 맞지 않는 추가 바이트 하나가 생
                     겼을 때는그냥 그대로 작업한다.  즉, 입력 파일에서 짝이 맞
                     지 않는 하나의 바이트가 남으면, 마지막 바이트는 그냥 단순
                     히 복사된다.  (이것의 순서가 바뀌지 않는한)

              noerror
                     오류를 읽어도 계속 한다.

              notrunc
                     출력 파일을 자르지 않는다.

              sync   ibs 블럭 크기와 obs 블럭 크기가 차이가 있을 경우, 그 여백
                     을 NULL문자로 채운다.


[참조]
Dump & restore 명령어와 NFS 서버를 이용한 OS 백업 및 복구(카페가입필요) - http://cafe.naver.com/eitlinux/54
파일시스템 복구 - http://blog.naver.com/etrangers/80015699686

Posted by @dmin @dmin

댓글을 달아 주세요

시스템/LinuxSystem2010. 12. 13. 02:59
[명령어소개]

1. date 명령어

date명령어는 현재 서버의 날짜와시간을 확인하거나 설정할 수 있는 명령어이다.
가끔씩 서버의 날짜와시간이 조금씩 틀리게되어 있는 경우가 있다.
이런겨우에 이 명령어를 이용하여 현재서버의 날짜와시간을 확인하고 정확하게 설정하는 작업을 하기위해 사용한다.  이 명령어는 rdate와 비교를 하시면 좀 더 정확한 이해를 할 수 있다.

사용형식
       date  [-u]  [-d  datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr]
       [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]


2. rdate 명령어

rdate는 지정한 원격지의 타임서버로 부터 날짜시간정보를 받아와 보여주거나 날짜시간설정을 하는 명령어이다. 이 명령어는 date와 clock명령어와 함께 공부를 하면 학습효과가 좋다.


3. ntp 명령어

NTP(Network Time Protocol)는 각 장비 간 시간을 동기화 시켜주는 프로토콜이다.
NTP Server를 두어 각 장비 간 동기화를 하는데 NTP 정보는 UDP 123번 포트를 이용하여 전달된다.


[포트번호]

rdate(RFC 868 time server over a TCP/IP network, remote time server date)

UDP 37번포트 사용

ntp(Network Time Protocol)
UDP 123번포트 사용

[사용방법]

1. clock

# clock - CMOS의 시간 설정

clock은 CMOS의 시각을 설정할 수 있는 명령어이다. CMOS의 시각을 가져와 시스템운영체제 시각으로 설정할 수 있으며, 반대로 시스템 운영체제 시각을 CMOS의 시각으로 설정할 수 있다. date명령어는 단순히 시스템 즉, 시스템 운영체제의 시각을 설정하는 것이며 서버의 CMOS시각을 설정할 수는 없다. 시스템이 부팅될 때에는 CMOS의 시각이 시스템 운영체제시각에 넘겨져서 부팅 시 초기시간으로 설정된다. 따라서 부팅시마다 지속적으로 정확한 시각설정이 필요하다면 clock명령어로 CMOS의 시각을 정확하게 설정해 두어야 한다.

clock애서 사용되는 옵션은 아래와 같다.

-u : CMOS의 시각을 국제시각으로 조정한다.
-r : CMOS의 시각을 출력한다.
-w : 리눅스시스템 시각으로 CMOS시각을 조정한다.
-s : CMOS의 시각으로 리눅스시스템시각을 조정한다.
-a : CMOS의 시각으로 리눅스시스템시각으로 조정하고 다시 CMOS에 조정한다.


아래는 CMOS의 시간과 운영체제의 시간에 대해 비교설명한 것이다.

    구분                            CMOS 시간        운영체제시간
    의미  메인보드에 있는 ROM-BIOS에서 인식하고 있는 시간.
 즉, 하드웨어적인 의미의 시간. 
 운영체제에서 인식하는 시간
 리눅스에서 인식하는 시간
 커널에서 인식하는 시간
    구분  하드웨어적인 의미의 시간  소프트웨어적인 의미의 시간
    관계  운영체제(리눅스)가 부팅시 마다 CMOS의 시간을 가져와서 운영체제에 적용함.
 따라서 운영체제의 시간이 CMOS시간에 다소 종속됨.
 변경방법 clock(hwclock)명령어로 CMOS시간을 변경할 수 있음.  data명령어로 운영체제의
 시간을 변경할 수 있음.


* CMOS의 시각과 시스템 시각을 가각 확인하기

CMOS의 시각을 확인하고자 할때에는 clock명령어에 -r옵셕을 사용한다.

[root@inter-devel ~]# clock -r
2009년 10월 14일 (수) 오후 11시 09분 45초  -0.091976 seconds
[root@inter-devel ~]#


리눅스서버의 시스템(운영체제)시각을 확인하고자 한다면 date 명령어를 사용한다.

[root@inter-devel ~]# date
2009. 10. 14. (수) 23:11:33 KST
[root@inter-devel ~]#


* 리눅스시스템시각으로 CMOS시각 설정하기

대부분의 리눅스시스템의 시각은 cron에서 주기적으로 맞추는 설정을 해두게 되므로 리눅스시스템의 시각이 CMOS의 시각보다는 정확하다고 생각하므로 리눅스시스템의 시각으로 CMOS의 시각을 설정하기 위하여 "clock -w"로 CMOS 시각을 수정하였다.

 [root@inter-devel ~]# clock -w


* CMOS의 시각으로 리눅스시스템 시각을 설정한다.

이번에는 반대로 CMOS시각으로 리눅스시스템의 시각을 설정한 것이다.

 [root@inter-devel ~]# clock -s


* CMOS로 시스템시각설정 후 다시 CMOS시각을 설정하기

clock명령어에서  -a옵션을 사용하면 /etc/adjtime파일에서 3가지의 숫자를 읽어서 그 값을 참조하여 CMOS의 시각으로 리눅스시스템의 시각을 설정한 후에 다시 CMOS의 시각을 설정한다. 

 [root@inter-devel ~]# clock -a


2. date

사용예 #1

[root@host1 root]# date
2003. 09. 09. (화) 15:58:42 KST
[root@host1 root]#

위의 예는 현재 서버의 날짜와 시간을 확인한 것이다.

사용예 #2

다음은 현재 서버의 날짜와 시간을 새롭게 설정한 것이다.

[root@host1 root]#
date 050601012003
2003. 05. 06. (화) 01:01:00 KST
[root@host1 root]#
[root@host1 root]# date
2003. 05. 06. (화) 01:01:06 KST
[root@host1 root]#

위의 예에서 새롭게 설정한 날짜와시간은 2003년 5월 6일 01시 01초입니다. 그리고 date라는 명령어로 새롭게 설정된 날짜와 시간을 확인한 것이다.

위와 같이  date로 날짜와시간을 새롭게 설정할 때에는  "date MMDDhhmmYY" 와 같은 형식을 사용하면 된다. 그리고 각 인수들은 아래와 같은 의미를 가지고 있다. 서버의 날짜와 시간을 새롭게 설정할 수 있는 권한은 오로지 root만이 할 수 있다.

       MM     월
       DD      월 중 일
       hh        시
       mm      분
       CC      연도의 처음 두 숫자 (선택적)
       YY      연도의 나중 두 숫자 (선택적)
       ss         초 (선택적)


또한 date는 지정된 형식에 맞는 출력을 할 수 있다. 즉 형식에 맞는 출력을 하고자 한다면 "%"지시자를 사용하여 아래 설정된 문자를 앞에 붙여 사용한다.

       시간 필드:

       %H     시 (00..23)
       %I     시 (01..12)
       %k     시 ( 0..23)
       %l     시 ( 1..12)
       %M     분 (00..59)
       %p     로케일의 AM 또는 PM
       %r     시간, 12-시간제 (hh:mm:ss [AP]M)
       %s     1970-01-01 00:00:00 UTC (비표준 확장기능)로 부터 경과된 초
       %S     초 (00..61)
       %T     시간, 24-시간 (hh:mm:ss)
       %X     로케일에서 정의한 시간 표현(%H:%M:%S)
       %Z     시간대 (에, EDT), 시간대를 결정할 수 없는 때는 아무 값도 출력하지 않는다.

       날짜 필드:

       %a     로케일의 약식 요일 이름 (Sun..Sat)
       %A     로케일의 완전한 요일 이름, 가변 길이 (Sunday..Saturday)
       %b     로케일의 약식 월 이름 (Jan..Dec)
       %B     로케일의 완전한 월 이름, 가변 길이 (January..December)
       %c     로케일의 날짜와 시간 (Sat Nov 04 12:02:33 EST 1989)
       %d     월 중 일 (01..31)
       %D     날짜 (mm/dd/yy)
       %h     %b 와 동일
       %j     연 중 일 (001..366)
       %m     월 (01..12)
       %U     연 중 주 번호, 일요일을 주의 첫번째 날로 생각 (00..53)
       %w     요일 번호 (0..6), 0 은 일요일
       %W     연 중 주 번호, 월요일을 주의 첫번째 날로 생각 (00..53)
       %x     로케일의 날짜 표현식 (mm/dd/yy)
       %y     연 중 일의 마지막 두 숫자 (00..99)
       %Y     연 (1970...)

 

또한 date는 다음과 같은 옵션을 이용하여 다양한 출력형식을 표현할 수 있다. 

       -d datestr, --date datestr

위의 옵션은 datestr에 지정된 형식대로 출력을 하게된다. 쉬운 예부터 보도록 하자.

아래의 예는 지금으로 부터 5일전의 날짜와 시간정보를 확인하고할때 사용하는 옵션이다.

[root@host1 root]# date --date '5 days ago'
2003. 09. 04. (목) 17:02:51 KST
[root@host1 root]#

다음의 예는 5개월하고 3일전의 날짜와 시간정보를 출력하는 예이다.

[root@host1 root]# date --date '5 months 3 day'
2004. 02. 12. (목) 17:03:48 KST
[root@host1 root]#

 

올해 크리스마스 날짜를 출력하는 예입니다.

[root@host1 root]# date --date '25 Dec' +%j
359
[root@host1 root]#


3. rdate

[root@host1 root]# rdate -p time.bora.net
rdate: [time.bora.net]  Tue Sep  9 11:44:25 2003


그리고 다음은 date명령어로 현재 시스템의 날짜시간정보가 맞는가를 확인하였다.
그리고 현재 시스템의 날짜시간정보가 틀리다는 것을 확인하고 원격지의 타임서버에서 날짜시간정보를 가져와서 현재 시스템에 적용을 한 것이다
날짜시간설정을 하려면 -s옵션을 사용해야한다. 아래는 그 예이다.

[root@host1 root]# date                                    (현재시스템의 날짜시간정보 확인)
2003. 09. 07. (일) 01:30:01 KST
[root@host1 root]#
[root@host1 root]# rdate -s time.bora.net          (타임서버에서 날짜시간정보를 가져와 적용함)
[root@host1 root]#
[root@host1 root]# date                                    (현재시스템의 변경적용된 날짜시간정보 확인)
2003. 09. 09. (화) 11:45:40 KST
[root@host1 root]#

참고로 사용할 수 있는 타임서버(Time Server)의 종류로는 다음과 같은 것들이 있다.
time.bora.net
time.kriss.re.kr

참고로 date명령어는 현재시스템의 날짜와 시간정보를 확인하고 직접 변경할 수 있는 명령어이다.  date의 자세한 설명은 date명령어편을 참고바란다.

그리고 서버를 직접 관리하시는 분들께서는 매번 이런 시간을 직접 맞추어야하는 번거로움이 있을 것이다. 이런 경우에는 다음과 같이 /etc/rc.d/rc.local 파일에 명령어를 넣어 두거나 주기적인 시간설정을 위해 cron에 넣어두기도 한다.

/etc/rc.d/rc.local 파일에 넣는 예

  ## Set the date & time ##
/usr/bin/rdate -s time.kriss.re.kr
/sbin/clock -w

다음은 cron파일에 설정하는 예이다.

 00 01 * * * su - root /usr/bin/rdate -s time.bora.net && /sbin/clock -w


4. ntp

NTP는 Network Time Protocol 약자로서 rdate와 비슷한 기능을 제공한다. ntpdate는 rdate를 이용한 방법보다 시간을 0.01초 이하의 오차로 맞출 수 있다.

 ntpdate는 rdate와 다르게 별도 설치 작업이 필요하다.


# rpm -qa | grep ntp 명령으로 "ntp-버젼"이 출력되지 않으면

# yum install ntp   또는 
   
http://rpmfind.net 에서 "ntp" 로 검색해서 배포판에 해당하는 패키지를 설치한다.

ex1) OS : Fedora Core 3 
#wget
ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm

#rpm -Uvh ntp-4.2.0.a.20040617-4.i386.rpm

ex2) #rpm -Uvh ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm



동기화하는 방법은 rdate와 같으며, rdate 명령부분에 아래와 같이 입력하면 된다.

 # ntpdate time.kriss.re.kr

 
* 재부팅시 자동 날짜시간정보 사용하기

## Set the date & time ##
/usr/sbin/ntpdate time.kriss.re.kr

/sbin/clock -w


 * 주기적으로 cron에 의한 날짜시간정보 적용

  00 01 * * * su - root /usr/sbin/ntpdate time.kriss.re.kr && /sbin/clock -w


어느 것을 사용하시든 시간이 동기화 되어 local time 이 바뀌게 된다.

다음은 cron파일에 설정하는 예이다.

[사내서버 NTP 시간동기화 crontab 설정]
55 23 * * * /sniper/ntp/bin/ntpdate 100.1.110.10 && /sbin/hwclock --systohc 1>/dev/null 2>/dev/null
[사외서버 NTP 시간 동기화 crontab 설정]
55 23 * * * /sniper/ntp/bin/ntpdate 168.78.201.102 && /sbin/hwclock --systohc 1>/dev/null 2>/dev/null


[참조]
고수가 되기위한 리눅스실무기술 - 박성수 저(수퍼유저코리아), 745page 시스템날짜와 시간관리편

[자료출처]
date명령어 - http://www.linux.co.kr/home/lecture/index.php?cateNo=1&secNo=28&theNo=&leccode=244
rdate명령어 - http://www.linux.co.kr/home/lecture/index.php?cateNo=1&secNo=28&theNo=&leccode=245
ntp명령어 - http://blog.naver.com/kwi3094/120042965234
rdate활용 - http://nobless_05.blog.me/50084815034
ntp관련 - http://kldp.org/node/94853
종합 - http://blog.naver.com/yswon72/91139665

Posted by @dmin @dmin

댓글을 달아 주세요