00. Daily/Funny2015.07.03 23:00

하...잠깐 눈물좀 닦고 글쓰기 시작 합니다..


집에 사용중인 공유기는 I*T*M* *8*0* 모델을 사용하고 있습니다  - 2년 넘도록 장애 펑펑 나는지도 모르고 사용했습니다.

(당시 기가네트워크 지원하는 공유가 없던 차라 비싸게 주고 샀습니다.....)


그러다가 최근 asus rt-87 혹은 rt-68p 끌리고 있었지만 애증의 newegg여서 구매도 못하고 멍 때리고 있고....


뭐 첫 알리 구매를 해보고 싶어 wt3020 미니 공유기를 (내가 이걸 왜 주문 했는지 모르겠지만...-_-) 구매 했고 한 15일 만에 집에 왔습니다.


(여기까지는 그냥 여담)



wt3020 좋은점

 - 5핀 충전 포트

 - 성냥곽 만한 크기 (는 거짓말이고 담배곽 만한것 같습니다)

 - FULL SIZE USB지원 (무전원 외장하드는 그래도 무리더라...걍 usb 64Gb꼽는걸로 만족)

 - 13$에 맞지 않는 오버스펙 (8Mb의 ROM과 64MB의 메모리 - ddr1)

 - 그리고 openwrt 지원 (8Mb에 openwrt가 3Mb 소비하고, vpn(libzio지원이 쏠쏠하다), ftp, samba, transmisson 정도 설치 하면 끝..)

    (토렌트는 안쓰므로 패스)



나쁜점?

 - 메뉴얼 부실....(..아니 딴지걸게 없어서...)

 - ...? 에이 13$로 나쁜점 말하라고 하면 내가 나쁜놈 같잖슴..


뭐 그냥 장난감 아닌가? 라는 생각에 나도 넘어갈려고 했는데 무선 신호감도를 측정해보니


   I*T*M* *8*0* 안테나 4개 짜리 (의미없는 당시 구매가 10만원 아래...)

                    VS

  우리가 흔히 비꼬는 중궈산 인테나 


그래도 안테나 달린 I*T*M* *8*0*이 좋지만 인테나가 좋긴하지만, 만약 동일 스펙이였다면 3020F가 50% 출력이 좋은듯 싶다



※openwrt

 - linux kernel base (3.1.xxxxx)

   기본적으로 ssh접근이 가능하고, 내가 원하는 프로그램을 올릴수 있다.

 - 기본 명령어는 linux와 동일하며, package설치는 "opkg" 명령어를 통해 설치가 가능하다


opewrt : http://wiki.openwrt.org/toh/nexx/wt3020

openwrt download : https://mega.co.nz/#!jdRECSxA!tq4kk0zHI6aVbDfXVdNBYf5sXXbu7xw4SsvxoP9gYe4




저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신머루군

Awk 자주 쓰게 되는 쉘상에서 데이터 조작이 필요 경우 입니다. (물론 awk, sed, grep 등등 조합으로 쓰기도 하지만)

 

히스토리는 관련 검색을 하면 많이 나오므로, 실무에서 사용 가능한 부분만 정리합니다.

 

알아야 단축어

FS

필드 분리자

awk -f "FS"

print

인쇄명령 (화면 출력)

Awk '{print $0}'

printf

Print 확장 (깔끔한 출력?) - 여타 다른 언어와 마찬가지로 char=c, int=d 제공

echo "awk" |awk '{printf "|%-15s|\n",$1}'

echo "awk" |awk '{printf "|%15s|\n",$1}'

OFMT

숫자 포맷 제어 (output format) : default %.6g (소수점 6자리 혹은 위로 6자리)

 

NR

레코드 번호

awk '{print NR" "$0}'

NF

현재 레코드에서 전체 필드

awk '{print NF}'

FNR

현재 파일의 전체 레코드

Awk '{print FNR}'

IGNORECASE

대소 무시

Awk -F: "{IGNORECASE=1}"

 

 

 

 

사용방법

 #>awk 'pattern' filename'

 

샘플 파일 (1.txt)

Kim 123 11/1/2 333

Wang 321 33/2/12 222

1Kim 222 33/11/33 333

  1. Awk 기본 구분자

Tab 문자열 혹은 공백입니다.

 

예제 > awk 1.txt '{print $1}'

          Kim

          Wang

Kim

123

11/1/2

333

Wang

321

33/2/12

222

$1

$2

$3

$4

 

처럼 컬럼이 나눠져 들어갑니다.

 

  1. 특정 패턴을 구분자로 경우

예제 > awk -F"/" 1.txt '{print $1}'

         Kim 123 11

 Wang 321 33

Kim 123 11

1

2 333

Wang 321 33

2

12 222

$1

$2

$3

 

시스템 명령어 조합으로 사용하기 ( | :파이프라인을 사용)

예제 > df|awk '{print $6}'

Mounted

/

/dev/shm

/data

/home

df 정보가 아래 처럼 나오는데 여기서 문자열을 구분해 $6번째 컬럼을 보여주는 예제입니다.

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             28898428   2552004  24878472  10% /

tmpfs                  1027296         0   1027296   0% /dev/shm

/dev/sda3             10321208   3427544   6369376  35% /data

/dev/sda2             61927420  42257352  16524340  72% /home

 

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

Awk 라인단위로 읽어 $0라는 내부변수에 담습니다. ( awk '{print $0' filename 라인 전체 출력)

 

awk -f 사용법

 awk -f (awk명령어 파일) filename

 

 예제> awk.run

{print $1" Hello~~~~"}

{print $1 $2}

 실행 > awk -f awk.run 1.txt

awk -f awk.run 1.txt

Kim Hello~~~~

Kim123

Wang Hello~~~~

Wang321

  라인에 대해 예제의 awk.run 파일을 적용하여 나타나도록 합니다.

 

grep 명령어 대용으로 awk 사용

예제> awk '/Kim/ {print $1 "   :" NR}' x

Kim   :1

        / / 부분은 정규식 표현이 가능하다

예제> awk '/^[K1]/ {print $1 "   :" NR}' 1.txt

Kim   :1

1Kim   :3

예제 > awk '/Wang/,/1Kim/ {print $0}' 1.txt

Wang 321 33/2/12 222

1Kim 222 33/11/33 333

Awk 필드 매치 (~)

예제> awk '$1~/Kim/{print $0 ":" NR}' 1.txt

Kim 123 11/1/2 333:1

1Kim 222 33/11/33 333:3

$1필드에서 Kim 포함된 라인전체와 줄번호 출력

예제> awk '$1!~/Kim/{print $0 ":" NR}' 1.txt

Wang 321 33/2/12 222:2

$1필드에서 Kim 들어가 있지 않은 라인 전체와 줄번호 출력

 

비교연산 (클까? 작을까? 같을까? 아니면 정규표현식? 위에 필드 매치 ~ 참조)

예제 >awk '$2 > 200' 1.txt

Wang 321 33/2/12 222

1Kim 222 33/11/33 333

 

If

 usage: (A ? B : C;)

{

if ($1 > $2)

x=$1

else

x=$2

}

 

예제> awk '{x=($2 > $4) ? $2 : $4; print x}' 1.txt

333

321

333

  1. $2번과 $4필드값을 비교
  2. $2 필드가 $4보다 크면
  3. 물음표 ? $2값을 x 할당
  4. 그렇지 않으면 : 뒤의 $4값을 x 할당

 

특정 컬럼 전체 SUM하기

예제> awk '{sum+=$2} END {print sum}' 1.txt

특정 컬럼끼리 SUM하기

예제> awk '{sum=$2+$4; print sum}' 1.txt

Awk에서 특정 변수 선언해서 사용하기

예제> awk1.run (파일생성)

         {print $var}

        awk -f awk1.run -v var=2 1.txt

123

321

222



아직은 기초입니다...기초..=_=;;Awk 자주 쓰게 되는 쉘상에서 데이터 조작이 필요 경우 입니다. (물론 awk, sed, grep 등등 조합으로 쓰기도 하지만)

 

히스토리는 관련 검색을 하면 많이 나오므로, 실무에서 사용 가능한 부분만 정리합니다.

 

알아야 단축어

FS

필드 분리자

awk -f "FS"

print

인쇄명령 (화면 출력)

Awk '{print $0}'

printf

Print 확장 (깔끔한 출력?) - 여타 다른 언어와 마찬가지로 char=c, int=d 제공

echo "awk" |awk '{printf "|%-15s|\n",$1}'

echo "awk" |awk '{printf "|%15s|\n",$1}'

OFMT

숫자 포맷 제어 (output format) : default %.6g (소수점 6자리 혹은 위로 6자리)

 

NR

레코드 번호

awk '{print NR" "$0}'

NF

현재 레코드에서 전체 필드

awk '{print NF}'

FNR

현재 파일의 전체 레코드

Awk '{print FNR}'

IGNORECASE

대소 무시

Awk -F: "{IGNORECASE=1}"

 

 

 

 

사용방법

 #>awk 'pattern' filename'

 

샘플 파일 (1.txt)

Kim 123 11/1/2 333

Wang 321 33/2/12 222

1Kim 222 33/11/33 333

  1. Awk 기본 구분자

Tab 문자열 혹은 공백입니다.

 

예제 > awk 1.txt '{print $1}'

          Kim

          Wang

Kim

123

11/1/2

333

Wang

321

33/2/12

222

$1

$2

$3

$4

 

처럼 컬럼이 나눠져 들어갑니다.

 

  1. 특정 패턴을 구분자로 경우

예제 > awk -F"/" 1.txt '{print $1}'

         Kim 123 11

 Wang 321 33

Kim 123 11

1

2 333

Wang 321 33

2

12 222

$1

$2

$3

 

시스템 명령어 조합으로 사용하기 ( | :파이프라인을 사용)

예제 > df|awk '{print $6}'

Mounted

/

/dev/shm

/data

/home

df 정보가 아래 처럼 나오는데 여기서 문자열을 구분해 $6번째 컬럼을 보여주는 예제입니다.

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             28898428   2552004  24878472  10% /

tmpfs                  1027296         0   1027296   0% /dev/shm

/dev/sda3             10321208   3427544   6369376  35% /data

/dev/sda2             61927420  42257352  16524340  72% /home

 

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

Awk 라인단위로 읽어 $0라는 내부변수에 담습니다. ( awk '{print $0' filename 라인 전체 출력)

 

awk -f 사용법

 awk -f (awk명령어 파일) filename

 

 예제> awk.run

{print $1" Hello~~~~"}

{print $1 $2}

 실행 > awk -f awk.run 1.txt

awk -f awk.run 1.txt

Kim Hello~~~~

Kim123

Wang Hello~~~~

Wang321

  라인에 대해 예제의 awk.run 파일을 적용하여 나타나도록 합니다.

 

grep 명령어 대용으로 awk 사용

예제> awk '/Kim/ {print $1 "   :" NR}' x

Kim   :1

        / / 부분은 정규식 표현이 가능하다

예제> awk '/^[K1]/ {print $1 "   :" NR}' 1.txt

Kim   :1

1Kim   :3

예제 > awk '/Wang/,/1Kim/ {print $0}' 1.txt

Wang 321 33/2/12 222

1Kim 222 33/11/33 333

Awk 필드 매치 (~)

예제> awk '$1~/Kim/{print $0 ":" NR}' 1.txt

Kim 123 11/1/2 333:1

1Kim 222 33/11/33 333:3

$1필드에서 Kim 포함된 라인전체와 줄번호 출력

예제> awk '$1!~/Kim/{print $0 ":" NR}' 1.txt

Wang 321 33/2/12 222:2

$1필드에서 Kim 들어가 있지 않은 라인 전체와 줄번호 출력

 

비교연산 (클까? 작을까? 같을까? 아니면 정규표현식? 위에 필드 매치 ~ 참조)

예제 >awk '$2 > 200' 1.txt

Wang 321 33/2/12 222

1Kim 222 33/11/33 333

 

If

 usage: (A ? B : C;)

{

if ($1 > $2)

x=$1

else

x=$2

}

 

예제> awk '{x=($2 > $4) ? $2 : $4; print x}' 1.txt

333

321

333

  1. $2번과 $4필드값을 비교
  2. $2 필드가 $4보다 크면
  3. 물음표 ? $2값을 x 할당
  4. 그렇지 않으면 : 뒤의 $4값을 x 할당

 

특정 컬럼 전체 SUM하기

예제> awk '{sum+=$2} END {print sum}' 1.txt

특정 컬럼끼리 SUM하기

예제> awk '{sum=$2+$4; print sum}' 1.txt

Awk에서 특정 변수 선언해서 사용하기

예제> awk1.run (파일생성)

         {print $var}

        awk -f awk1.run -v var=2 1.txt

123

321

222

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'01. operation > iii. Shell Script' 카테고리의 다른 글

awk script 기초  (0) 2014.08.06
awk로 합계를 뽑아내보자.  (0) 2009.07.27
문자열 변경  (0) 2009.07.27
Posted by 신머루군
01. operation/i. Theory2014.07.23 12:51

서비스를 운영중 1024 이하 포트들은 root권한으로 프로그램이 실행되어야 합니다.

 ※관련 내용 : http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html


하지만, redhat (centos) 6.x 버전으로 올라오면서 이에 대한 제한을 해제가 가능합니다.

 (kernel version : 2.6.25)


해당 패키지 정보 : libcap

Name        : libcap                       Relocations: (not relocatable)

Version     : 2.16                              Vendor: CentOS

Release     : 5.5.el6                       Build Date:

Install Date:                                  Build Host: c6b18n2.bsys.dev.centos.org

Group       : System Environment/Libraries   Source RPM: libcap-2.16-5.5.el6.src.rpm

Size        : 64437                            License: LGPLv2+ or BSD

Signature   : RSA/SHA1, 2011년 12월 09일 (금) 오전 05시 15분 52초, Key ID 0946fca2c105b9de

Packager    : CentOS BuildSystem <http://bugs.centos.org>

URL         : http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/

Summary     : Library for getting and setting POSIX.1e capabilities

Description :

libcap is a library for getting and setting POSIX.1e (formerly POSIX 6)

draft 15 capabilities.

/lib64/libcap.so.2

/lib64/libcap.so.2.16

/lib64/security/pam_cap.so

/usr/sbin/capsh

/usr/sbin/getcap

/usr/sbin/getpcaps

/usr/sbin/setcap

/usr/share/doc/libcap-2.16

/usr/share/doc/libcap-2.16/License

/usr/share/doc/libcap-2.16/capability.notes

/usr/share/man/man1/capsh.1.gz

/usr/share/man/man8/getcap.8.gz

/usr/share/man/man8/setcap.8.gz


usage:

 > setcap

    권한을 주거나, 빼앗을수 있다.

ex> setcap 'cap_net_bind_service=+ep' filename

설명1 : setcap 명령어를 통해

        : cat_net_bind_service를 설정한다

        : 권한은 허가/효과/상속 중 허가, 권한을 부여한다 (+ep)

        : 이것은 filename 설정

 설명2 : cap_*

         : 기존 root권한으로 실행되는것(?)들을 부여할수 있다. (상세 하단 man page url 참조)

 설명3 : + or -

         : 권한을 빼앗거나, 주거나

 설명4 : eip

          : Permitted / Inheritable / Effective

    

 > getcap

    설정된 값을 확인 할 수 있다.

 ex> getcap filename


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

[root@kki bin]# setcap 'cap_net_bind_service=+epi' t4imapd

[root@kki bin]# getcap t4imapd

t4imapd = cap_net_bind_service+eip

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


man page : http://man7.org/linux/man-pages/man7/capabilities.7.html

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신머루군

티스토리 툴바