엑셀로 데이터 관리 등을 하면 할수록 엑셀의 강력함을 느끼게 된다. 엑셀의 가장 강력한 점은, 수많은 기능들이 있다는 점들 외에도, 상대적으로 쉬운 방법들을 조합해서 다소 어려운 기능을 구현하는 '응용'이 가능하다는 점이다. 물론 좀 돌아가는 방법이 될 수는 있겠지만 그래도 어쨋든 여러가지 기능을 응용하고 조합해서 하나의 새로운 기능을 구현해낼수가 있다.


각설하고, 엑셀에서 데이터들이 쭉 나열되어 있을 때, HLOOKUP 등의 함수를 사용하기 위해 각 행 사이사이에 행을 삽입해야 하는 경우가 종종 있다. 이럴 때 행을 자동으로 삽입할 수 있는 방법을 간단히 소개하고자 한다.



1. 데이터 세팅



우선 위와 같이 데이터가 세팅되어있다고 가정하자. 물론 행 수는 이렇게 적을 수도 있고, 몇 백 라인, 몇 천 라인, 몇 만 라인이 될 수도 있다.



2. 데이터 좌/우측에 0.5 단위의 숫자 기입



다음으로 데이터의 제일 왼쪽이나 오른쪽에 0.5 단위의 숫자를 기입한다. 0.5, 1.5, ... 핸들 기능을 이용하여 데이터가 많아도 쉽게 기입할 수 있다.



3. 공백란에 1 단위의 숫자 기입



그리고 그 아래 아무 데이터가 없는 행 / 0.5 단위를 입력한 열에, 1 단위의 숫자를 기입한다. 1, 2, ... 마찬가지로 핸들 기능을 이용해 쉽게 기입 가능하다.



4. 정렬



마지막으로 [데이터-정렬] 버튼을 클릭하여, 아까 기입한 숫자 열을 기준으로 오름차순 정렬한다.



5. 완료



이렇게 간단히, 모든 행 사이마다 행 삽입하기 완료!



그리고 참고로, 매크로를 이용한 방법을 소개한 블로그가 있어 링크를 걸어둔다.


엑셀 일정간격 셀(행) 자동 삽입하기 매크로!

예전에 포스팅 했던 [리눅스] 파일 개수 구하기(find, wc 이용) 글에서, find 명령어를 이용해 이름 기준으로 파일을 검색하는 방법을 알아보았다. 이번에는 파일 크기를 기준으로 검색하고, 그리고 검색된 결과를 바로 삭제하는 방법을 알아본다.


리눅스 콘솔에서 find --help 명령어를 쳐보면 아래와 같이 find에 대한 설명이 나온다. 아래 설명에서 굵게 처리한 부분을 보면, 힌트를 얻을 수 있다.


# find -- help


사용법 : find [경로...] [수식]


default path is the current directory; default expression is -print

expression may consist of: operators, options, tests, and actions:


operators (decreasing precedence; -and is implicit where no others are given):

      ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2

      EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2


positional options (always true): -daystart -follow -regextype


normal options (always true, specified before other expressions):

      -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf

      --version -xdev -ignore_readdir_race -noignore_readdir_race


tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N

      -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME

      -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN

      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE

      -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN

      -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N

      -used N -user NAME -xtype [bcdpfls]

      -context CONTEXT



actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 

      -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit

      -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;

      -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;


find에서 -size 옵션을 주면 파일 크기를 기준으로 검색을 할 수 있고, -exec 옵션을 주면 검색 결과에 특정 액션을 할 수 있다. 그럼 케이스 별로 나누어 실제 사용 예시를 알아본다.



1. 파일 크기 기준으로 검색

# find ./* -size +N    => N 이상 크기의 파일을 검색한다.

# find ./* -size -N    => N 이하 크기의 파일을 검색한다.

# find ./* -size N      => N 크기의 파일을 검색한다.


** 사이즈 단위

b : 블록단위

c : byte

k : kbyte

w : 2byte 워드


예를 들어 콘솔 현재 경로에서 512byte 이상, 1024byte 이내의 파일을 찾고자 한다면 아래와 같이 입력하면 된다.

# find ./* -size +512c -size 1024c



2. 파일 검색 후 삭제

# find ./* [옵션] -exec rm -rf {} \;    => find 검색 결과를 모두 삭제한다.


예를 들어 콘솔 현재 경로 아래의 파일을 모두 삭제하고자 한다면 아래와 같이 입력하면 된다.

# find ./* -type -f -exec rm -rf {} \;



3. 복합

그럼 지난 포스팅의 내용과, 이번 포스팅의 내용을 복합하여 정리해보면 아래와 같은 명령어도 실행할 수 있다.

# find ./* -type -f -name '*.jpg' -size +512k -size -1024k -exec rm -rf {} \;

=> 현재 경로의 파일 중에 파일 확장자가 jpg이면서, 사이즈가 512kbyte 이상, 1024kbyte 이하인 것들을 모두 삭제한다.







리눅스에서 다량의 파일들을 전송/수신하고, 데이터 증분치에 대한 반영을 할 수 있는 가장 좋은 방법은 rsync가 아닐까 생각한다.(혹시 더 좋은 방법이 있으면 추천 부탁드립니다.) rsync 서버 및 클라이언트 설정 방법을 정리해본다. 여기서는 192.168.123.10에 있는 데이터를 192.168.123.11로 가져가는 예시를 들어본다.



<rsync 서버 설정>


rsync 서버 설정 1) rsync 패키지 확인

# rpm -qa | grep rsync


** 설치가 안 되어있을 경우

# yum install rsync



rsync 서버 설정 2) xinetd 패키지 확인

# rpm -qa | grep xinetd


** 설치가 안 되어있을 경우

# yum install xinetd



rsync 서버 설정 3) rsnyc 사용 설정

# vi /etc/xinetd.d/rsync

'disable = yes' 라고 되어있는 부분을 'disable = no' 로 변경한다.


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

# default: off

# description: The rsync server is a good addition to an ftp server, as it \

#       allows crc checksumming etc.

service rsync

{

        disable = no

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/bin/rsync

        server_args     = --daemon

        log_on_failure  += USERID

}

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



rsync 서버 설정 4) rsync 설정

# vi /etc/rsyncd.conf

/etc/rsyncd.conf의 경우 처음에는 없는 파일일 가능성이 높다. 편집기를 이용해 새로 작성해준다.


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

[rsync_test]                                 -> 사용할 rsync 서비스 이름

path=/data/rsync_test/                  -> 데이터 원본 경로

comment = rsync_test                   -> 코멘트

uid = root                                       -> 권한 사용자

gid = root                                       -> 권한 그룹

use chroot = yes

read only = yes

hosts allow = 192.168.123.11     -> rsync 클라이언트 IP. localhost일 경우 입력하지 않아도 됨

max connections = 3

timeout=600

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



rsync 서버 설정 5) xinetd 서비스 재시작 및 방화벽 확인

# /etc/init.d/xinetd restart


보통 iptables 에서 포트가 막혀있는 경우가 많다.

rsync는 873 포트를 사용하므로, 873 포트 허용해준다.




<rsync 클라이언트 설정>


rsync 클라이언트 설정 1) rsync 접속 여부 확인

# telnet [rsync 서버 IP] 873

ex) telnet 192.168.123.10 873

telnet을 이용하여 873 포트가 정상적으로 연결되는지 확인한다.




rsync 클라이언트 설정 2) rsync 실행

# rsync -avz [IP]::[서비스명] 저장디렉토리

ex) # rsync -avz 192.168.123.10::rsync_test /data/rsync_test


혹시 내역을 로그로 남기고 싶을 경우 아래와 같이 입력한다.

rsync -avz 192.168.123.10::rsync_test /data/rsync_test > /data/rsync.log


MySQL 에서는 테이블이 손상 되었는지 여부를 확인(check table)하고, 손상된 테이블이라면 테이블을 복구(repair table)하고, 속도 개선을 위해 테이블을 최적화(optimize table) 하는 기능들을 제공한다. 이 기능들에 대한 쿼리는 상당히 단순하다.



1. MySQL 특정 테이블 체크(check)

DB 콘솔 접속 후

# use [DB명];                   => 작업할 DB를 선택

# check table [테이블명];   => 확인할 테이블을 체크



2. MySQL 특정 테이블 복구(repair)

DB 콘솔 접속 후

# use [DB명];                   => 작업할 DB를 선택                 

# repair table [테이블명];    => 복구할 테이블을 복구



3. MySQL 특정 테이블 최적화(optimize)

DB 콘솔 접속 후

# use [DB명];                    => 작업할 DB를 선택

# optimize table [테이블명]; => 최적화할 테이블을 최적화



그리고 위와 같이 특정 테이블에 대해 체크, 복구, 최적화를 할 수 있으나, 서버 장애 등으로 인해 DB의 전체 상태를 점검하거나 전체를 최적화하고 싶을 때는 테이블 하나하나 확인을 하기 어렵다. 그럴 때 아래와 같이 특정 DB의 모든 테이블을 체크하고, 복구하고, 최적화 할 수 있다.



4. MySQL 특정 DB의 모든 테이블 체크 및 자동 복구

서버 콘솔에서

# cd [MySQL_HOME]/bin                                                                

=> MySQL 설치 홈의 bin 폴더로 이동

# ./mysqlcheck -u [DB계정] -p[패스워드] --auto-repair [DB명]           

=> 해당 DB의 모든 테이블을 체크 및 자동복구



5. MySQL 특정 DB의 모든 테이블 최적화

서버 콘솔에서

# cd [MySQL_HOME]/bin                                                                

=> MySQL 설치 홈의 bin 폴더로 이동

# ./mysqlcheck -u [DB계정] -p[패스워드] --optimize [DB명]               

=> 해당 DB의 모든 테이블을 최적화



MySQL에서 localhost 내에 저장된 sql파일을 실행시키는 방법은 아래와 같다.


- MySQL 콘솔 실행


# source [파일경로/파일명]



예를 들어 /data/sql/test.sql 을 실행하려면 MySQL 콘솔에서 아래와 같이 입력하면 된다.


# source /data/sql/test.sql


Apache가 설치되어 있을 때, 해당 Apache가 설치된 컴파일 옵션을 아래 경로의 파일을 cat이나 vi로 열어봄으로써 확인 가능하다.


[아파치설치경로]/build/config.nice



예를 들어 아파치 설치 경로가 /usr/local/apache 라면, cat명령어를 이용하여 아래와 같이 간단히 확인할 수 있다.


# cat /usr/local/apache/build/config.nice


DB(MySQL)가 설치된 localhost 외의 다른 곳에서 MySQL 접속을 하기 위해서는,

MySQL에서 호스트 및 접속 권한을 미리 설정해야 한다.


예를 들어 '111.222.333.*' 대역대에서 root 계정으로 DB 접속을 할 수 있도록 허용하고, 

해당 사용자에게 모든 권한을 부여하기 위해서는 아래와 같이 DB 콘솔에서 실행하면 된다.



# INSERT INTO mysql.user (host, user, password) VALUES ('111.222.333.%', 'root', password('비밀번호'));

# GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.333.%';

# FLUSH PRIVILEGES;


DNS 관련 설정을 조회할 때, 가장 많이 조회하는 것이 A 레코드와 MX 레코드일 것이다.


이 외에도 역방향 DNS, SPF를 위한 TXT 레코드 등 여러가지가 있지만 가장 사용도가 많은 것이 A 레코드와 MX 레코드이다.



DNS 레코드 타입은 굉장히 많은 것들이 있는데, 이에 대한 내용은 아래 링크에서 간단히 확인할 수 있다.


List of DNS record types : http://en.wikipedia.org/wiki/List_of_DNS_record_types


위 링크에서 확인할 수 있는 내용 중, 여기서 다루고자 하는 A 레코드와 MX 레코드의 정의는 아래와 같다.


A 레코드Returns a 32-bit IPv4 address, most commonly used to map hostnames to an IP address of the host, but also used for DNSBLs, storing subnet masks in RFC 1101, etc.


MX 레코드Maps a domain name to a list of message transfer agents for that domain.



또한 예전 포스트에 역방향 DNS와 SPF 레코드 조회 방법을 적어두었으니, 참고하시길..


역방향 DNS 및 SPF 레코드 조회 방법 : http://nota.tistory.com/48




1. A 레코드 조회 방법


# nslookup


# set type=a

(이때 type을 굳이 지정하지 않아도 기본적으로 A 레코드가 조회된다.)


# [A 레코드를 조회하고자 하는 도메인]


=> 결과 확인




2. MX 레코드 조회 방법


# nslookup


# set type=mx


# [MX 레코드를 조회하고자 하는 도메인]


=> 결과 확인


유닉스 계열의 OS를 사용하다 보면 분명 디스크 공간은 여유가 있는데 디스크에 쓰기가 제대로 되지 않을 때가 가끔 있다.


이럴 때는 inode가 100% 사용 중인지를 확인해봐야 하는데, 솔라리스(SunOS)에서 inode 상태를 확인하는 방법은 아래와 같다.


1. SunOS 4.x 일 때

# /bin/df -i



2. SunOS 2.x 일 때

# /usr/bin/df -F utf -o -i



** 참고로 inode는 유닉스 계열의 파일스시템에서 사용하는 자료구조로, 파일이나 디렉토리 구조에 대한 정보를 담고 있다. 디스크 파티션을 나눌 때 각 파티션 별로 inode를 설정할 수 있다. 그리고 실제 운용 중인 서버에서 특정 파티션의 inode가 100%가 된다면, 해당 파티션의 inode설정을 바꾸거나 새로운 디스크 영역으로 데이터 저장경로를 옮겨야 한다. 이때 inode 설정을 변경하는 것은 운용 중인 데이터에 영향을 미칠 수 있으므로, 데이터를 백업해두고 inode 설정을 변경하는 것이 좋다.


** 위키백과 inode : http://ko.wikipedia.org/wiki/%EC%95%84%EC%9D%B4%EB%85%B8%EB%93%9C

AIX 서버를 사용하다 보면, 25번 포트를 사용하는 메일서버 어플리케이션을 실행할 때

리눅스의 sendmail 서비스가 이미 떠있어서 어플리케이션을 실행하지 못하는 경우가 생긴다.



1. AIX에서 sendmail 서비스 중지 방법


#  smitty


- Processes & Subsystems > Subsystems > Stop Subsystem > Stop & Single Subsystem


- Subsystem의 PROCESS ID 입력 란에서 <F4>


- sendmail 선택 후 <Enter>




2. AIX에서 부팅 시 sendmail 서비스가 실행되지 않도록 설정하는 방법


# vi /etc/rc.tcpip


start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"    ->    #start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

(앞에 '#'을 추가하여 주석 추가)