2. 27 (화) 정리 Linux - 기본 명령어 4 / Net - Net, Trans Layer

2. 27 (화)


- Linux -

* more(less)
 화면 출력을 화면 단위로 제어
 출력되는 내용이 많아서 화면을 넘어가는 경우 사용한다

 # more 파일

* |
 앞쪽 명령의 결과를 뒤쪽 명령의 입력 값으로 사용하겠다는 의미
ex) # ls -al | more

[root@su1-localhost ~]# more install.log
Installing libgcc-4.1.2-43.SUL2.x86_64
warning: libgcc-4.1.2-43.SUL2: Header V3 DSA signature: NOKEY, key ID 922608d6
Installing setup-2.5.58-6.SUL2.noarch
Installing filesystem-2.4.0-2.SUL2.x86_64
Installing basesystem-8.0-5.1.1.SUL2.noarch
Installing kernel-headers-2.6.18-398.el5.x86_64
Installing tzdata-2010l-1.SUL2.x86_64
Installing glibc-common-2.5-34.SUL2.1.x86_64
Installing glibc-2.5-34.SUL2.1.x86_64
Installing glibc-2.5-34.SUL2.1.i686
Installing zlib-1.2.3-3.x86_64
Installing chkconfig-1.3.30.1-2.x86_64
Installing glib2-2.12.3-4.SUL2.1.x86_64
Installing 3:mktemp-1.5-23.2.2.x86_64
Installing popt-1.10.2-49.SUL2.x86_64
Installing audit-libs-1.7.7-6.SUL2.3.SUL2.x86_64
Installing libstdc++-4.1.2-43.SUL2.x86_64
Installing libcap-1.10-26.x86_64
Installing expat-1.95.8-8.3.SUL2.3.x86_64
Installing tcp_wrappers-7.6-40.6.SUL2.x86_64
Installing libjpeg-6b-37.x86_64
Installing db4-4.3.29-10.SUL2.2.x86_64
Installing 2:libpng-1.2.10-7.1.SUL2.3.x86_64
Installing 1:pkgconfig-0.21-2.SUL2.x86_64
--more--(4%)

→ space를 입력하면 다음 화면을 출력해준다.
→ q를 입력하면 나가진다.

* grep
 필터링 수행
 출력 문자열 중에 원하는 단어나 글자가 들어있는 라인만 출력

 # command | grep [필터링 문자열]

[root@su1-localhost ~]# cat install.log |grep setup
Installing setup-2.5.58-6.SUL2.noarch
Installing cryptsetup-luks-1.0.3-4.SUL2.x86_64
Installing setuptool-1.19.2-1.SUL2.x86_64

※ 라인단위 출력

ex) # ls -al | grep conf
                     -> configuration 파일 (설정 파일) : 시스템이 시작할 때 딱 한번 만 읽음.
적용시 서비스를 죽였다 살려야함.

* find
 파일시스템에서 조건에 부합하는 파일을 검색

# find 검색경로 검색조건1 검색조건2 ...

검색조건
 -name : 파일명으로 검색 (와일드카드문자 * 사용)
 -perm : 특정 퍼미션을 가진 파일을 검색
 -empty :  크기가 0인 파일 검색 / NULL 파일 찾을때 사용

 -user  : 지정한 사용자가 소유한 파일
 -group : 지정한 그룹이 소유한 파일
 -nouser : 소유자가 없는 파일
 -nogroup : 그룹 소유자가 없는 파일
 -type : 검색하고자하는 파일의 종류 지정
b(block device file), c(char device file), d(directory file), l(slink file), f(regular file)
 -mount : 마운트된 파일시스템만 검색

++ 짤막 상식 : block device 파일은 캐싱이 가능하다.

가끔 find 명령어에서 문자열을 인식 못해서 나오는 에러가 있다.
 ex) find: paths must precede expression:..............'
  -name 옵션 사용시 발생
  문자열에 ''을 사용하여 해결
 find / -name *.txt     --->   find / -name '*.txt'

[root@su1-localhost ~]# find / -name conf
/root/conf
/root/bin/conf
/proc/sys/net/ipv6/conf
/proc/sys/net/ipv4/conf
/etc/logwatch/conf
/usr/src/kernels/2.6.18-398.el5-x86_64/scripts/kconfig/conf
/usr/share/doc/hal-0.5.8.1/conf
/usr/share/doc/mrtg-2.14.5/contrib/mrtg_php_portal/conf
/usr/share/system-config-network/netconfpkg/conf


* tar
 여러 개의 파일을 하나의 파일로 압축한다.
- 용량을 줄이기 위해서는 gzip을 이용하거나 옵션을 이용한다
++ 보통 두 가지 방식은 같이 사용되기 때문에 옵션으로 gzip을 호출하여 사용한다

# tar [옵션] [압축파일명] [대상]

옵션
 -c : 압축, -x : 압축풀기, -v : 작업내용을 출력(view)
 -z : gzip을 이용한 압축(압축해제), -j : bzip2 이용(다른 리눅스에선 안풀림)
 -f : 파일명을 지정, -p : 퍼미션 유지 (압축, 압축풀기 시 일반적으로 바뀌지 않아 사용하지 않아도 무방)

파일을 압축해서 보내는건 좋지 않음. -> 디렉토리에 담아서 보내준다

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

증분 백업과 누적 백업
누적 백업 : 오늘 변경량의 10여 MB만 바꾸면 된다. 어제 백업을 갖고 있어야함. 갖고있어야할 데이터가 늘어나게 된다. (안정성은 떨어지나 효율성 상승) / 시간 순서에 따라 복원해야한다는 작업 복잡성이 늘어남
리눅스에서는 구분하지 않음
날마다 백업한다고 생각, 10TB의 디스크, 백업 시간 2시간
백업한 이후 그 이전 백업은 의미가 없다, (= 풀 백업)
해결방안 : 주말은 풀 백업 / 평일은 누적백업 = 증분 백업
완벽한 증분백업은 DB에서만 가능하다. OS는 완벽히 위와 같이 수행되지 않는다.

그러나 tar로는 가능하다. tar에서는 이러한 증분백업에 대한 백업정보 파일을 구할 수 있음
바뀐내용, 새로운 파일만 찾아 백업해준다.

* tar를 이용한 증분 백업

 # tar [옵션] [압축파일명] -g [백업정보 파일] [대상]

Ex) 새로운 데이터, 변경데이터가 생길때마다 백업.
 # tar cvfz home_full.gz –g /backup/home_backup /home
 # tar cvfz home_l1.gz -g /backup/home_backup /home
 # tar cvfz home_l2.gz -g /backup/home_backup /home

-> 복구는 반드시 압축순으로 해제
------ 단점은 이 중 하나의 파일이라도 손상된다면 치명적 (추천하지 않음)
------ 또한 백업파일 생성은 사용중인 서비스(시스템)를 모두 종료하고 사용해야하므로,
       DB에선 사용 못함

* gzip
  - # gzip a.txt         :  a.txt.gz 로 압축
  - # gzip -d a.txt.gz  :  파일의 압축을 해제

* bzip2, compress, cpio
 # bzip2, compress : 압축
 # bunzip2, uncompress : 압축 해제
 # cpio –idmv < [압축파일명] : 압축해제

실습)

[root@su1-localhost ~]# mkdir -p ./backup/test1
[root@su1-localhost ~]# mkdir ./backup/test2
[root@su1-localhost ~]# mkdir ./backup/test3
[root@su1-localhost ~]# echo "test1's A file" > ./backup/test1/a.txt
[root@su1-localhost ~]# echo "test1's B file" > ./backup/test1/b.txt
[root@su1-localhost ~]# echo "test2's A file" > ./backup/test2/a.txt
[root@su1-localhost ~]# echo "test2's C file" > ./backup/test2/c.txt
[root@su1-localhost ~]# echo "test3's G file" > ./backup/test3/g.txt
[root@su1-localhost ~]# echo "test3's K file" > ./backup/test3/k.txt
[root@su1-localhost ~]# ls backup
test1  test2  test3
[root@su1-localhost ~]# ls ./backup/test1
a.txt  b.txt
[root@su1-localhost ~]# ls ./backup/test2
a.txt  c.txt
[root@su1-localhost ~]# ls ./backup/test3
g.txt  k.txt
[root@su1-localhost ~]# tar cvfz backup.tar.gz ./backup/
./backup/
./backup/test1/
./backup/test1/a.txt
./backup/test1/b.txt
./backup/test3/
./backup/test3/g.txt
./backup/test3/k.txt
./backup/test2/
./backup/test2/a.txt
./backup/test2/c.txt
[root@su1-localhost ~]# ls
135                  backup.tar.gz   install.log             test1.txt
anaconda-ks.cfg  bin                install.log.syslog    test2.txt
backup              conf              test                    test3.txt
[root@su1-localhost ~]# rm -rf backup
[root@su1-localhost ~]# ls
135                   bin          install.log.syslog  test2.txt
anaconda-ks.cfg  conf         test                  test3.txt
backup.tar.gz      install.log  test1.txt           
[root@su1-localhost ~]# tar xvfz backup.tar.gz
./backup/
./backup/test1/
./backup/test1/a.txt
./backup/test1/b.txt
./backup/test3/
./backup/test3/g.txt
./backup/test3/k.txt
./backup/test2/
./backup/test2/a.txt
./backup/test2/c.txt
[root@su1-localhost ~]# ls -R ./backup
./backup:
test1  test2  test3

./backup/test1:
a.txt  b.txt

./backup/test2:
a.txt  c.txt

./backup/test3:
g.txt  k.txt

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

리눅스 시간 관리 (시간설정)

※ 유닉스에선 사용하지 않음

CMOS / BIOS 로 시간설정가능, 그러나 둘 다 하면 안됨
system에서의 서버 시간은 동기화가 필수

* clock
 리눅스 시스템에 탑재된 BIOS의 시간을 출력하거나 변경

  # clock [옵션]

 옵션
-r : BIOS의 시간을 읽어 표준 출력으로 출력
-w : 시스템의 시간을 이용 시간을 변경 (하드웨어 시간을 시스템 시간으로 변경)
-s : BIOS의 시간으로 시스템의 시간을 변경(시스템 시간을 하드웨어 시간으로 변경, 사용x)

[root@su1-localhost ~]# clock -r
2018년 03월 16일 (금) 오전 10시 56분 16초  -0.725719 seconds

* date
 지정한 포맷으로 시스템의 날짜를 출력한다.

  # date [+포맷]

포맷(시간)
 - 시 : %H(00..23), %I(01..12), %k(0..23), %l(1..12), %p(AM,PM)
 - 분 : %M(00..59)
 - 초 : %S(00..59)
 - 시간 : %r(hh12:mm:ss AM), %T(hh24:mm:ss), %X (로케일)
 - 기타 : %s (1970년 1월 1일 이후 경과된 초)

포맷(날짜)
 - 년 : %Y(YYYY), %y(yy)
 - 월 : %m(01..12), %B(January .. December), %b(Jan .. Dec)
 - 일 : %d(01..31)
 - 요일 : %A(Sunday .. Saturday), %a(Sun .. Sat), %w(0..6)
 - 기타 : %D(mm/dd/yy), %x(로케일), %j(00..365)

국내는
연 / 월 / 일 / 시 / 분 / 초 (단위 포함)순으로 출력해야해서 기본 포맷을 사용하지 않음
+%Y/%m/%d:%H:%M:%S

[root@su1-localhost ~]# clock -r
2018년 03월 16일 (금) 오전 10시 56분 16초  -0.725719 seconds
[root@su1-localhost ~]# date
2018. 03. 16. (금) 10:57:13 KST
[root@su1-localhost ~]# date +%Y/%m/%d__%H:%M:%S
2018/03/16__10:58:57
[root@su1-localhost ~]# date +%Y/%m/%d--%H:%M:%S
2018/03/16--11:00:43


* rdate (반드시 사용해야할 명령어)
 인터넷상에 제공되는 서버로부터 시간정보를 받아 시간을 출력하거나
 시스템의 시간을 재설정

  # rdate [옵션] [시간 제공 서버 주소]

 옵션
  -p : 타임 서버로 부터 제공된 시간을 출력한다.
  -s : 타임 서버로 부터 제공된 시간을 이용 시스템의 시간을 재설정한다.


[root@su1-localhost ~]# rdate -p time.bora.net
rdate: [time.bora.net]  Fri Mar 16 11:01:57 2018

다음 명령어를 시스템 시작 후 바로 설정해야함

#rdate -s time.bora.net
#clock -w : 바이오스 시간을 운영체제(시스템) 시간으로 덮어쓴다.

---- 시작시 자동 시작 프로그램 설정하는 파일
~~.bat (window)
rc.local (linux)
수정 후에도 실행이 안되는 경우 : 권한이 없기 때문 (이후 자세히 공부)

특정 시간마다 무언가를 반복적으로 실행 (schedule)
clone을 이용하여,

[root@su1-localhost ~]# find / -name rc.local
/etc/rc.local
/etc/rc.d/rc.local
[root@su1-localhost ~]# ls /etc/ |grep rc.local
Muttrc.local
rc.local
[root@su1-localhost ~]# ls /etc/rc.d/ |grep rc.local
rc.local
[root@su1-localhost ~]# vi /etc/rc.d/rc.local
[root@su1-localhost ~]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

rdate -s time.bora.net
clock -w
[root@su1-localhost ~]#

→ 이후 재부팅 시 적용된다.
---------------------------------------------------------------------------------------------------

네트워크

라우터를 경유하는 A 네트워크와 B 네트워크가 있다고 가정
Broadcast 메시지는 라우터를 타고 넘어갈 수 없음 (브릿지는 가능하다)

서브넷 마스크란?
IP 주소 내에 어디까지가 네트워크 주소인지 알려주는 일종의 기호

-> 두 개의 네트워크

-> B 네트워크의 서브네팅

#   NW               #  HOST
      1                   256(254)
      2   128(126)
      4                    64(62)
      8     32(30)
                 ...
                 ...
                 ...

넷마스크 서브네팅은 다음주 월요일에 다시 설명해주신다고 함

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

패킷분석

* 와이어샤크 설치
WinPcap 같이 설치 - 프러미스큐어스 모드를 지원


조건선택
필터 2가지 - 캡쳐 필터, 인터페이스 필터

장점 : 유닉스의 필터 사용법과 동일 ex)수식
...

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

패킷의 이해

-> TCP/IP 구조

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

TCP
보내는 AppPortNum / 받는 AppPortNum 을 헤더로 붙임  - 세그먼트
투명성 : 각각의 계층에서 다른 계층이 어떤 역할을 하는지 신경쓰지 않고 본인의 일만 수행하는 것.
IP
보내는 IP Address / 받는 IP Address - 데이터 그램
DataLink
받는 MAC Address / 보내는 MAC Address - 프레임

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

TCP 와 UDP
- UDP : 아무것도 안함
- TCP :
신뢰적인 데이터전송 담당 (2가지 조건 부합 체크)
- 데이터 전송 순서
- 데이터의 손상 여부 확인
혼잡 발생 시 데이터 전송/수신량을 줄임
- 혼잡 제어 (송신자가 시도)
    => 전송량을 조절
- 흐름 제어 (수신자가 시도)
    => 버퍼를 체크하고 받을 양을 조절
    => 그러나 잘 안 사용 (성능이 좋기 때문)
※ 송수신 상호간의 데이터 전송량을 파악해야함 (보내는 양을 제어하기 위함)
    -> 접속지향 통신
3-way handshake 방식.


- IP

ICMP  : 스테이션의 상태를 체크하기 위한 메시지를 보내는 프로토콜 - ICMP 메시지
ARP 와 RARP
  RARP는 사용할 일이 없을 것

* 외우자 : 모두 보내는 놈이 앞에 있지만, 프레임은 받는놈이 앞이다!
ARP : 송신측에서 수신측의 IP만 알고 MAC 주소를 모를때 Broadcast 전송을 통해 MAC 주소를 요청하는 메시지를 보내는 프로토콜
단점 : ARP 스푸핑에 취약
IP 스푸핑은 패킷이 충돌하는 경우 때문에 잘 안씀

RARP : 내 MAC은 알지만 IP를 모를때 사용

댓글

이 블로그의 인기 게시물

Linux Server - FTP 실습 (2 / 2) : 사용자 제한 ( ftpuser / user_list )

전자서명 개념

3.27 (화) - Network (패킷 통신 - 4가지 지연)