shell script - for 문 사용 예시



쉘 스크립트에서 for문 사용 예시 




- 기본 



#!/bin/bash

for i in 1 2 3 4 5

do

   echo "Welcome $i times"

done





- 배열 사용하기 



#!/bin/bash

arrayname=(value1 value2) 


for i in ${arrayname[@]}

do

   echo "Welcome $i times"

done







- 숫자범위 사용하기 



#!/bin/bash

for i in {2000..2011};do echo " $i times";done




- 명령어 결과 사용하기 


#!/bin/bash

for entry in $stockdir/*;do echo " $entry times";done




- 일반 반복문 형식 사용하기


#!/bin/bash

for (( i=0; i<100; i++ ));do echo " $i times";done



#!/bin/bash

for (( i=0; i<100; i=i+5 ))

  do

    j=$((i + 4));

    echo "alter table 테이블이름 add column age_"$i"_"$j"_totalcnt bigint DEFAULT NULL;";

    echo "COMMENT ON COLUMN 테이블이름.age_"$i"_"$j"_totalcnt IS '"$i" - "$j"세 총 인구수';"

done









자주 쓰는 리눅스 명령어


리눅스에서 개인적으로 자주쓰는 명령어들



1. 폴더 및 파일 압축하기 & 압축풀기  


 - tar.gz으로 압축하기 (상대경로) 

    tar zcvf test.tar.gz test


    tar.gz으로 압축하기 (절대경로) 

    tar zcvfP /home/test.tar.gz /home/test



 - tar.gz 압축풀기

    tar zxvf test.tar.gz


  - gzip 으로 압축하기 

    gzip test

 

  - gzip 압축풀기 

    gunzip test.gz 



2. 리눅스에서 탭 사용하기 


   - command line에서 탭 사용하기 

       : ctrl + v 누르고 tab 누르기  


   - grep에서 탭 사용하기 

       : 탭은 \t로 표시하고 -P 옵션 사용 

        -P 옵션은 Perl regular expression을 사용 표시 

예시)  today_sorted=`date '-d yesterday' '+%d\t%m\t%Y'` 

       today_cnt_sorted=`grep -P -c $today_sorted $company".sorted"`


   - sed : \t로 사용 
           sed -i 's/ \t/\t/g' file

           sed -i 's/\t /\t/g' file




3. crontab 재시작하기


# /etc/init.d/crond restart

crond 를 정지 중:                                          [  OK  ]

crond (을)를 시작 중:                                      [  OK  ]




4. 리눅스 OS 확인 

$ cat /etc/issue

CentOS release 5.8 (Final)

Kernel \r on an \m




5. sed로 파일내에서 문자열 변환 
sed -i 's/short_news/feature_files/g'  filename

sed로 줄바꿈 제거
sed ':a;N;$!ba;s/\n/ /g' filenam

sed로 빈라인 제거
sed '/^$/d' 파일명 > 새 파일명



6. vi에서 붙여쓰기 계단현상 방지 
붙여쓰기 전에 :set paste 로 autoindent 등의 자동 들여쓰기 기능 정지시킴
그 후 :set nopaste로 다시 자동 들여쓰기 기능 활성화
또는 :set paste!로 기존 세팅 값 토글 


7. iptables 파일 보기 및 iptables 서비스 재시작하기 


vi /etc/sysconfig/iptables


service iptables restart


8. 현재 사용중인 shell 확인

# echo $SHELL

/bin/bash




9. ls로 디렉토리 목록만 보기


ls -d */


10. 폴더 안의 파일/폴더 사이즈 보기 


du -sh ./*


11. sudo로 ulimit 사용하기

sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"



12. top 


- 명령어 메모리 사용 순으로 정렬하기

top -o %MEM


- MB, GB로 보기 

top화면에서 E를 입력하면 display 기준 사이즈가 변경됨 


리눅스와 mysql의 max_open_file 사이즈 변경하기







환경: 리눅스 CentOS 


새 서버를 받아 max open file 관련하여 설정을 하여 기록을 남긴다. 

mysql에서는 보통 max open file 기본 값으로 1024이 설정되어 있는데 

값이 낮아 mysql 작업 속도를 느리게 하는 원인이 되기도 하니 적절하게 값을 조정해보도록 하자. 



1.mysql의 max open file 설정 확인


일단 mysql 의 현재 max open file설정부터 확인해보자.

ps afx | grep mysql 로 해당 프로세스의 id를 알아내고 프로세스의 설정값을 확인해본다. 

1024(soft), 4096(hard) 값이 설정되어 있다.  



shell> ps afx | grep mysql

48320 pts/3    S+     0:00                      \_ grep mysql

21919 pts/0    S      0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

22021 pts/0    Sl     0:03  \_ /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock


shell> cat /proc/22021/limits

Limit                     Soft Limit           Hard Limit           Units

Max cpu time              unlimited            unlimited            seconds

Max file size             unlimited            unlimited            bytes

Max data size             unlimited            unlimited            bytes

Max stack size            10485760             unlimited            bytes

Max core file size        0                    unlimited            bytes

Max resident set          unlimited            unlimited            bytes

Max processes             30122                30122                processes

Max open files            1024                 4096                 files

Max locked memory         65536                65536                bytes

Max address space         unlimited            unlimited            bytes

Max file locks            unlimited            unlimited            locks

Max pending signals       30122                30122                signals

Max msgqueue size         819200               819200               bytes

Max nice priority         0                    0

Max realtime priority     0                    0

Max realtime timeout      unlimited            unlimited            us

[root@quick141-176 ~]#


mysql>  show variables like 'max_connections';

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| max_connections | 151   |

+-----------------+-------+

1 row in set (0.00 sec)




또는 mysql 에서 직접 open_files_limit 변수값을 확인할 수도 있다. 



mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)




현재 기본 값은 너무 작으니 값을 증가해야 겠다. 
그리고 mysql 의 max open file값은 시스템이나 사용자에게 기존에 할당된 값 이상으로 변경할 수 없으니 

mysql max open file 값을 변경하기 이전에 관련 설정들을 확인 및 변경해보자. 


 

2. OS의 max open file 설정 확인 및 변경 


일단 서버의 기본 max open file 설정부터 확인해보자. 

file-max 값은 리눅스에서 한 번에 운용할 수 있는 파일 수를 의미하며, 

보통 4MB 메모리당 256개의 파일을 운용할 수 있다고 한다.

대략 1G -> 65536개,  2G -> 131072 개 이다. 

 



shell> cat /proc/sys/fs/file-max

382386

 



이미 충분한 값이 설정되어 있는 것 같다. 

만약 위에 나온 값을 변경하고 싶으면 터미널에서 아래와 같이 입력하면 된다.  

그러나 재부팅시 이 값은 유지가 되지 않으니 유의하자. 


shell> echo 382386 > /proc/sys/fs/file-max



재부팅시에도 이 값을 계속 유지하려면 

/etc/sysctl.conf 파일에서 아래와 같이 file-max값 설정을 추가한다. 



# increase max open file

fs.file-max = 382386



그리고 sysctl -p 를 입력하여 설정값이 즉각 변경하도록 한다. 

이 값은 서버가 재시작을 해도 계속 유지된다.




shell> sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
fs.file-max = 382386







3. 사용자별 max open file 설정 확인 및 변경 



사용자별 프로세스(task)의 max open file 설정을 확인하려면 터미널에서 ulimit -a를 입력한다.




shell> ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30122
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30122
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited



open file 값이 기본값인 1024으로 설정되어 있어 64000으로 변경하려고 한다. 

ulimit의 값을 변경하는 방법은 두가지가 있다. 


터미널에서 아래와 같이 ulimit -n 옵션으로 변경할 수 있다. 

현재 로그인되어 있는 사용자에 한해 변경이 되며 로그아웃시에는 설정한 값이 유지가 되지 않으니 유의한다.  



shell> ulimit -n64000



다시 ulimit -a를 입력하여 해당 값이 제대로 변경된 것을 확인하였다. 




shell>  ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 30122

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 64000

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 30122

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited



ulimit -n의 변경값은 일시적이기 때문에 

이 값을 계속 유지하고 싶으면 /etc/security/limits.conf 파일의 내용을 수정해야 한다. 

nofile은 해당 사용자(그룹)이 오픈할 수 있는 최대 파일 개수를 의미한다.

/etc/security/limits.conf 값은 새로운 session 부터 영향을 끼치기 때문에

파일 설정을 변경하고 재로그인을하거나 새로운 세션으로 다시 접속하면

 해당 설정이 변경된 것을 확인할 수 있다.


참고로 root user 는 * wildcard 에 속하지 않으니 

root user   는 따로 설정해줘야한다.


# 전체 user에게 같은 설정을 하려면 * 을 사용한다


* hard nofile 64000

* soft nofile 64000

root hard nofile 64000

root soft nofile 64000



# 특정 user (예: mysql)에기만 설정을 하려면


mysql hard nofile 64000

mysql soft nofile 64000




만약 설정을 변경하였는데 ulimit -a    해도 동일한 결과가 나온다면

/etc/pam.d/su 의 아래 라인을 코멘트 아웃해야한다. 

limits.conf   는  pam_limits.so가 사용하는 설정값이라 

/etc/pam.d/su에서 사용되도록 설정되었는지 확인해야한다.



# Sets up user limits, please uncomment and read /etc/security/limits.conf

# to enable this functionality.

# (Replaces the use of /etc/limits in old login)

session    required   pam_limits.so








4. mysql max open file 설정 변경 

 

자 드디어 mysql max open file 설정을 변경할 차례가 왔다. 

/etc/my.cnf 파일에 아래와 같이 open-file-limit 옵션을 수정하자. 



[mysqld_safe]

open-files-limit=64000




그리고 mysqld 서비스를 재시작한다. 



shell> service mysqld restart
mysqld 를 정지 중:                                         [  OK  ]
mysqld (을)를 시작 중:                                     [  OK  ]




마지막으로 수정된 값을 확인하고 설정을 마무리한다. 



mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 64000 |
+------------------+-------+
1 row in set (0.00 sec)






참고사이트:

http://duntuk.com/how-raise-ulimit-open-files-and-mysql-openfileslimit

http://blog.endpoint.com/2013/12/increasing-mysql-55-maxconnections-on.html

https://dev.mysql.com/doc/refman/5.0/en/linux-postinstallation.html

http://jikime.tistory.com/44






  • adana 2015.10.25 13:51 신고 ADDR 수정/삭제 답글

    https://dev.mysql.com/doc/refman/5.0/en/linux-postinstallation.html

Ubuntu 서버에 새 관리자 추가



리눅스 서버에 새 관리자를 추가할 떄 자주 사용하는 명령어를 기록해놓았습니다. 



useradd로 새 사용자를 추가하고 -m 옵션으로 기본으로 사용할 shell을 지정해 줍니다. 

그리고 passwd로 비밀암호를 설정합니다. 

sudo 권한을 주기 위해 /etc/sudoers 파일에 새로운 사용자를 추가합니다. 




# useradd newuser -m -s/bin/bash

# passwd newuser

Enter new UNIX password:

Retype new UNIX password:

passwd: password updated successfully


#echo 'newuser ALL=(ALL:ALL) ALL' >> /etc/sudoers





데이터베이스에도 역시 같은 user ID를 추가하고 암호를 설정합니다. 

그리고 새 관리자가 어디에서나 접속해도('사용자'@'%') 모든 권한을 사용할 수 있도록 (ALL PRIVILEGES ON *.* )

데이터베이스 권한 설정을 해 줍니다. 



 mysql command 로 설정시 


CREATE USER '사용자'@'%' IDENTIFIED BY '암호';


GRANT ALL PRIVILEGES ON *.* TO '사용자'@'%' WITH GRANT OPTION;


command line에서 설정시 



mysql -u아이디 -p패스워드 디비명 -e "CREATE USER '사용자'@'%' IDENTIFIED BY '암호'"

mysql -u아이디 -p패스워드 디비명 -e "GRANT ALL PRIVILEGES ON *.* TO '사용자'@'%' WITH GRANT OPTION;"





참고로 command line에서 mysql 명령을 실행시킬때 syntax는 아래와 같습니다. 



mysql -u아이디 -p패스워드 디비명 -e "쿼리문"

echo "쿼리문" | mysql -u아이디 -p패스워드 디비명









리눅스에서 오래된 로그 주기적으로 정리하기



리눅스에서 cron작업을 하다보면 로그가 쌓일 경우가 있다. 


단기간에 확인이 필요한 로그가 아니면 서버 저장공간을 아끼기 위해서

오래된 로그들은 삭제하거나 백업 폴더로 옮기는 스크립트를 걸어두는 것이 좋다.



일단 find로 오래된 로그를 찾아보자.  

find는 특정 조건을 찾는 명령어로 기본구문은 아래와 같다.  


find [options] [path] [expression]


expression 중에 mtime 이라는 옵션을 사용하면 

 수정된 날짜를 참조해서 (로그일 경우 로그 생성 날짜) 파일을 찾을 수 있다. 

mtime +7 이면 수정날짜가 7일은 지난 파일들을 의미하고

mtime -7 이면 수정날짜가 7일 이내인 최신 파일들을 의미한다. 



exec 옵션을 사용하면 위 조건으로 찾은 파일들로 어떤 명령을 내릴지 지정할 수 있다. 

{}는 앞에서 찾은 파일 이름들로 대체되고 ;을 만날때까지의 명령을 수행한다. 

마지막의 ;는 \로 escape 되어야 한다. 



아래 명령어를 기존 운영 스크립트에 걸어두었다. 

이제  오래된 로그들은 주기적으로 정리가 되어 좀 더 깔끔하게 서버 이용이 가능해졌다 : ) 



#!/bin/sh


# 삭제 할 경우 

find /home/apache/log/ -mtime +7 -name \* -exec rm {} \;


# 백업 폴더로 이동할 경우 

find /home/apache/log/ -mtime +7 -name \* -exec mv {} /mnt/backup/logbackup/ \;











ubuntu 에서 유저 생성과 관리자 권한 주기


사용자를 생성시에는 useradd 명령어를 사용한다. 


옵션 


-m : 홈 디렉토리 생성
-s : 쉘 환경 설정


useradd 계정명 -m -s /bin/bash



사용자 확인은 아래와 같다. 



cat /etc/passwd | grep username



새로 생성한 사용자에게 암호를 설정할 경우에는 paswd 명령어를 사용한다. 


echo 'Password' | passwd --stdin username



사용자에게 root 권한을 부여하기 위해서는 /etc/sudoers 파일에 아래 라인을 추가하면 된다. 



echo 'username ALL=(ALL:ALL) ALL' >> /etc/sudoers






ubuntu에서 방화벽 설정 (UFW)



Ubuntu에서 기본적으로 제공하는 방화벽은 UFW(Ubuntu Firewall) 이다. 

iptables을 보다 쉽게 사용하도록 개발된 툴로 사용법도 좀 더 간편하다. 



일단 ufw status를 사용하여 활성화 여부를 체크한다. 

기본적으로 비활성화 되어 있기 때문에 ufw enable를 사용하여 ufw를 활성화한다. 

ufw를 활성화하면 방화벽이 작동하기 떄문에 모든 포트가 자동으로 막히게 된다. 

방화벽 설정을 하지 않고 그대로 종료하면 다음에 ssh 접근을 못할 수도 있으니 유의하자. 




# ufw status

Status: inactive


# ufw enable

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y

Firewall is active and enabled on system startup







ufw default deny/allow를 입력하여 기본적인 방화벽 방침을 입력한다. 

ufw logging on을 입력하여 로그를 남기도록 변경한다. 





# ufw default deny
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)


# ufw logging on
Logging enabled





이제 사용하는 포트들을 열어보자. 

ufw allow의 기본적인 문법은 아래와 같다. 


ufw allow <port>/<optional: protocol>


ftp. ssh, http, mysql port를 차례대로 열어준다. 

그리고 ufw status numbered를 사용하여 입력한 룰들을 확인해본다. 




# ufw allow 21
Rule added
Rule added (v6)
# ufw allow 22
Rule added
Rule added (v6)
# ufw allow 80
Rule added
Rule added (v6)
# ufw allow 3306
Rule added
Rule added (v6)



# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 21                         ALLOW IN    Anywhere
[ 2] 22                         ALLOW IN    Anywhere
[ 3] 80                         ALLOW IN    Anywhere
[ 4] 3306                       ALLOW IN    Anywhere
[ 5] 21 (v6)                    ALLOW IN    Anywhere (v6)
[ 6] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 7] 80 (v6)                    ALLOW IN    Anywhere (v6)
[ 8] 3306 (v6)                  ALLOW IN    Anywhere (v6)




참고로 룰을 삭제하고 싶을 경우에는 ufw delete rule_number 를 사용하면 된다. 



# ufw delete 8

Deleting:

 allow 3306

Proceed with operation (y|n)? y

Rule deleted (v6)



참고: http://squall.kr/363



리눅스 열린 포트 확인하기



netstat -tnlp 를 사용하면 로컬 서버에서 현재 열려 있는 포트를 확인할 수 있다. 


사용 옵션은 아래와 같다.



  netstat  [address_family_options]  [--tcp|-t]  [--udp|-u]  [--raw|-w]  [--listening|-l]  [--all|-a]

       [--numeric|-n]     [--numeric-hosts]     [--numeric-ports]     [--numeric-users]    [--symbolic|-N]

       [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v] [--continuous|-c]




사용 예시 




# netstat -tnlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      2209/dnsmasq

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1121/sshd

tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      9770/cupsd

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1197/mysqld

tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN      1255/Xvnc4

tcp6       0      0 :::22                   :::*                    LISTEN      1121/sshd

tcp6       0      0 ::1:631                 :::*                    LISTEN      9770/cupsd

tcp6       0      0 :::443                  :::*                    LISTEN      2171/apache2

tcp6       0      0 :::5901                 :::*                    LISTEN      1255/Xvnc4

tcp6       0      0 :::80                   :::*                    LISTEN      2171/apache2








리눅스(centos)에 phpmyadmin 설치하기



이미 APM 설치가 되어있는 서버에 phpmyadmin를 추가로 설치하였다.


서버: CentOS 




shell> yum install epel-release

shell> yum update

shell> yum install phpmyadmin





보통 로컬서버에서 접속하지 않으면 아래와 같은 접속 권한이 없다는 오류가 나온다. 



Forbidden


You don't have permission to access /phpmyadmin/ on this server.




그럴 경우 phpmyadmin의 설정파일에서 phpmyadmin에 접근할 수 있는 ip를 추가하도록 하자. 

또는 보안에는 약해지겠지만 ip 제한 정책을 아예 없앨 수 도 있다. 

아래는 phpmyadmin의 기본 설정파일 내용이다. 


vi /etc/httpd/conf.d/phpMyAdmin.conf





Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin


<Directory /usr/share/phpMyAdmin/>

   AddDefaultCharset UTF-8


   <IfModule mod_authz_core.c>

     # Apache 2.4

     <RequireAny>

       Require ip 127.0.0.1

       Require ip ::1

     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>

     # Apache 2.2

     Order Deny,Allow

     Deny from All

     Allow from 127.0.0.1

     Allow from ::1

   </IfModule>

</Directory>





예시 1 ) 223.170.188.0/24 대역대의 ip전체 접속 허용 



Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin


<Directory /usr/share/phpMyAdmin/>

   AddDefaultCharset UTF-8


   <IfModule mod_authz_core.c>

     # Apache 2.4

     <RequireAny>

       Require ip 127.0.0.1, 223.170.188.0/24

       Require ip ::1

     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>

     # Apache 2.2

     Order Deny,Allow

     Deny from All

     Allow from 127.0.0.1, 223.170.188.0/24

     Allow from ::1

   </IfModule>

</Directory>




예시 2 ) ip 접속 제한 없앰



<Directory /usr/share/phpMyAdmin/>

   AddDefaultCharset UTF-8


   <IfModule mod_authz_core.c>

     # Apache 2.4

     <RequireAny>

       Require all granted

       Require ip 127.0.0.1

       Require ip ::1

     </RequireAny>

   </IfModule>

   <IfModule !mod_authz_core.c>

     # Apache 2.2

     Order Allow,Deny

     Allow from All

     Allow from 127.0.0.1

     Allow from ::1

   </IfModule>

</Directory>




마지막으로 설정파일에서 기본 alias를 설정한다. 

alias는 phpmyadmin 접속주소인데 보통 http://yourdomain/phpmyadmin 이 기본 phpmyadmin의 접속 주소가 된다. 


기본 설정은 아래와 같지만  자신만이 알수 있는 alias로 변경하는것이 보안에 좋다. 

Alias /phpMyAdmin /usr/share/phpMyAdmin

Alias /phpmyadmin /usr/share/phpMyAdmin 



참고로 예전 서버에 남아있던 해킹시도 로그 기록들이다. 

phpmyadmin에 대한 다양한 주소로 접속을 시도하는 것을 확인할 수 있다. 

여기에서 언급되는 주소를 피해서 alias를 설정하는 것이 좋을 것 같다. 




[Tue Jul 07 14:09:28 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/admin

[Tue Jul 07 14:09:31 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/administrator

[Tue Jul 07 14:09:31 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/database

[Tue Jul 07 14:09:35 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/db

[Tue Jul 07 14:09:37 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/dbadmin

[Tue Jul 07 14:09:37 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/myadmin

[Tue Jul 07 14:09:37 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/myadminphp

[Tue Jul 07 14:09:38 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysql-admin

[Tue Jul 07 14:09:39 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysql

[Tue Jul 07 14:09:41 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysql

[Tue Jul 07 14:09:42 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysqladmin

[Tue Jul 07 14:09:42 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/mysqlmanager

[Tue Jul 07 14:09:43 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/php-my-admin

[Tue Jul 07 14:09:43 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/php-myadmin

[Tue Jul 07 14:09:43 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin-2

[Tue Jul 07 14:09:44 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin-3

[Tue Jul 07 14:09:44 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin-4

[Tue Jul 07 14:09:52 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin2

[Tue Jul 07 14:09:52 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin3

[Tue Jul 07 14:09:53 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyAdmin4

[Tue Jul 07 14:09:53 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpMyadmin

[Tue Jul 07 14:09:53 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmanager

[Tue Jul 07 14:09:54 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmy-admin

[Tue Jul 07 14:09:54 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmy

[Tue Jul 07 14:09:55 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyAdmin

[Tue Jul 07 14:09:55 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin

[Tue Jul 07 14:09:55 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin1

[Tue Jul 07 14:09:56 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin2

[Tue Jul 07 14:09:56 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin3

[Tue Jul 07 14:09:57 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phpmyadmin4

[Tue Jul 07 14:09:57 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/phppma

[Tue Jul 07 14:09:57 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma

[Tue Jul 07 14:09:58 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2011

[Tue Jul 07 14:09:58 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2012

[Tue Jul 07 14:09:58 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2013

[Tue Jul 07 14:09:59 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2014

[Tue Jul 07 14:09:59 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/pma2015

[Tue Jul 07 14:10:00 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/program

[Tue Jul 07 14:10:00 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/shopdb

[Tue Jul 07 14:10:00 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/sql

[Tue Jul 07 14:10:01 2015] [error] [client 54.173.63.20] File does not exist: /var/www/html/sql


..

[Thu Jun 25 15:16:23 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0.0

[Thu Jun 25 15:16:24 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0.1

[Thu Jun 25 15:16:24 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0.2

[Thu Jun 25 15:16:25 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.0

[Thu Jun 25 15:16:25 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.1.0

[Thu Jun 25 15:16:26 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.10.2.0

[Thu Jun 25 15:16:26 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.0.0

[Thu Jun 25 15:16:27 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1-all-languages

[Thu Jun 25 15:16:27 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1.0

[Thu Jun 25 15:16:28 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1.1

[Thu Jun 25 15:16:28 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.11.1.2

[Thu Jun 25 15:16:29 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl2

[Thu Jun 25 15:16:29 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.1-pl3

[Thu Jun 25 15:16:30 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl3

[Thu Jun 25 15:16:30 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.4-pl4

[Thu Jun 25 15:16:31 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.4-rc1

[Thu Jun 25 15:16:31 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.5

[Thu Jun 25 15:16:31 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.6

[Thu Jun 25 15:16:32 2015] [error] [client 104.243.24.211] File does not exist: /var/www/html/phpMyAdmin-2.6.9





마지막으로 httpd 재시작하면 변경된 설정이 반영 된다. 


shell> service httpd restart

httpd 를 정지 중:                                          [  OK  ]

httpd (을)를 시작 중:                                      [  OK  ]









vi 파일 자동 인코딩 변환 막기







간혹 파일에 깨진 글자가 있으면 vi에서 파일 인코딩을 자동 변환하여 

전체 인코딩이 깨져 나올때가 있다 -_-; 



newsline:<strong class="hl">ë<8f><99>í<99><94>ì<95>½í<92><88></strong>, â<80><98>2015 ê¹<8c>ì<8a>¤í<99><9c>ëª<85>ì<88><98> í<8a>¹ë³<84>ë°<95>ì<8a>¤â<80><99> ì¶<9c>ì<8b><9c>



"best_news_2015_10_13.log" [변환 되었습니다] 63894L, 12815248C




자동 인코딩 하지 않고 파일을 원래 버전으로 보려면 

binary 모드로 파일을 열거나 :e 명령어(edit)로 원래 인코딩으로 변경하면 된다. 


- binary 모드로 파일 열기 



vim -b "myfile.type"

binary 모드로 파일 열기 


:set binary 또는 :se bin 

vi로 화면이 연 다음 set 사용 


- :e 명령어로 원래 인코딩으로 변경하고 깨진 문자 확인하기 


:e ++enc=원래 파일 인코딩

예시 ) :e ++enc=utf-8

원래 파일 인코딩으로 파일 내에서 인코딩 변환을 한다. 

그러면 아래 같이 어디에 잘못된 바이트에 있는지 확인할 수 있다. 


"best_news_2015_10_13.log" [59067 줄에 잘못된 바이트] 63894L, 10020220C



이렇게 인코딩을 하면 더 좋은 이유가 어느 줄에 잘못된 바이트가 있는지 알려주기때문에 

깨진 문자열을 확인하고 수정하면 다음부터는 정상적으로 파일을 열 수 있다.