리눅스를 사용하면서 변경시각과 수정시각이란 말을 들을 수 있다.
ctime : 변경 시각(change time)
mtime : 수정시각(modification time)
말뜻이 애매해서 비슷하게 생각되지만, 차이점이 있다.
변경(ctime)은 파일의 아이노드(inode)를 바꾸는 것이고,
수정(mtime)은 파일의 내용 자체를 바꾸는 것이다.
예를 들어서 aaa.txt 라는 파일이 있을 때
#chmod 755 aaa
이런 명령을 사용하면 파일내용에는 변경이 없지만, inode 값은 바뀌게 된다.
수정은
#echo aa >> aaa.txt
라고 하면 파일내용이 수정되는 것이고, timestamp 값이 변경 되게 된다.
그리고 또 하나는 접근 시각(access time)도 알아보자.
접근시각이란 해당 파일을 마지막으로 읽거나 쓴 시각을 말한다.
따라서 파일을 읽기만 한다면 변경시각이나 수정시각은 변하지 않고, 접근시각만 달라진다.
find 관련 문서를 찾다보면 ctime(change time):변경시각을 '생성시각(creation time)'이라고 설명하고 있는
문서가 있는데 이런 해석은 옳지 않다.
참고 :유닉스 파워툴
2014년 10월 1일 수요일
2014년 9월 18일 목요일
apache multiviews 기능
서버 이전을 했는데, 이미지를 못 불러오는 부분이 있었다.
해당 이미지를 불러오는 데, 이미지 이름으로만 불러오는 것이었다. 확장자 없이...
예를 들어 /image.jpg 를 불러 온다고 했을 때, 보통은
http://www.site.co.kr/image.jpg
이런식으로 불러온다.
그런데 저기서 확장자가 없이
http://www.site.co.kr/image
이런식으로 호출해도 이미지가 뜨는 것이다.
원인은 아파치 설정의 MultiViews 설정이었다.
아파치 문서를 찾아 보니 다음과 같다고 한다.
테스트 결과 대부분의 이미지는 확장자 없이도 제대로 보여 주었고, html 같은 경우도 형식만 제대로 되어 있으면 인식 되었다.
해당 이미지를 불러오는 데, 이미지 이름으로만 불러오는 것이었다. 확장자 없이...
예를 들어 /image.jpg 를 불러 온다고 했을 때, 보통은
http://www.site.co.kr/image.jpg
이런식으로 불러온다.
그런데 저기서 확장자가 없이
http://www.site.co.kr/image
이런식으로 호출해도 이미지가 뜨는 것이다.
원인은 아파치 설정의 MultiViews 설정이었다.
아파치 문서를 찾아 보니 다음과 같다고 한다.
MultiViews를 사용하면 다음과 같은 일이 일어난다.
서버가 /some/dir/foo에 대한 요청을 받고 /some/dir/foo에 MultiViews가 동작하며 /some/dir/foo가 존재하지 않을 경우,
서버는 디렉토리에서 이름이 foo.*인 파일들을 모든 포함하는 가상의 type map을 만든다.
클라이언트가 요청한 media type과 content-encoding을 가지고 이중에 가장 적합한 것을 선택한다.
테스트 결과 대부분의 이미지는 확장자 없이도 제대로 보여 주었고, html 같은 경우도 형식만 제대로 되어 있으면 인식 되었다.
CentOs7 방화벽 내리기
CentOs 7 이전에는 방화벽이란 건, iptable 이였다.
아무리 iptable을 내려도 적용이 안된다.
확인 해 보니, CentOs 7 버젼부터 Firewalld 란 게 추가되어, 두개가 같이 들어있다. 최소버젼으로 설치 했는 데도 그렇다.
Firewalld 은 iptables 기반으로 조작이 쉽도록 만들어진 것으로 보인다.
Firewalld는 iptables에 의존성을 가진다.
아무리 iptable을 내려도 적용이 안된다.
확인 해 보니, CentOs 7 버젼부터 Firewalld 란 게 추가되어, 두개가 같이 들어있다. 최소버젼으로 설치 했는 데도 그렇다.
[root@localhost ~]# systemctl list-unit-files | grep fire
firewalld.service disabled
[root@localhost ~]# systemctl list-unit-files | grep iptables
iptables.service disabled
[root@localhost ~]#
Firewalld 은 iptables 기반으로 조작이 쉽도록 만들어진 것으로 보인다.
Firewalld는 iptables에 의존성을 가진다.
systemctl stop firewalld
#리부팅 뒤에도 실행 안되게끔
systemctl disable firewalld
2014년 9월 12일 금요일
모든 쿼리 로그 기록.
마리아 db, mysql 의 모든 쿼리를 쌓아놓고 분석에 이용.
my.cnf 에 추가
아래의 스크립트를 하루에 한번 실행하다록 크론에 등록.
general log가 계속 쌓이는 것을 방지. 7일마다 삭제.
http://stackoverflow.com/questions/9343001/is-my-mysql-general-log-table-getting-too-big
my.cnf 에 추가
#log
general_log=1
#log_output을 FILE 로 할경우의 경로.
#general_log_file = /var/log/mysql/general_query.log
log_output=TABLE
아래의 스크립트를 하루에 한번 실행하다록 크론에 등록.
general log가 계속 쌓이는 것을 방지. 7일마다 삭제.
#!/bin/sh
id="root"
pass="PASS"
mysql -u ${id} -p${pass} -e "SET GLOBAL general_log = 'OFF'";
mysql -u ${id} -p${pass} -e "RENAME TABLE mysql.general_log TO mysql.general_log2;";
mysql -u ${id} -p${pass} -e "DELETE FROM mysql.general_log2 WHERE event_time <= NOW()-INTERVAL 7 DAY";
mysql -u ${id} -p${pass} -e "OPTIMIZE TABLE general_log2";
mysql -u ${id} -p${pass} -e "RENAME TABLE mysql.general_log2 TO mysql.general_log";
mysql -u ${id} -p${pass} -e "SET GLOBAL general_log = 'ON'";
http://stackoverflow.com/questions/9343001/is-my-mysql-general-log-table-getting-too-big
general_log 의 엔진이 CSV라서 해당 파일 자체를 cat, vim 등으로 그냥 볼 수 있음.
마리아DB 소켓 변경시 systemd-private-xxxx 디렉토리 안에 생성되는 문제.
마리아DB 의 socket 위치를 /tmp/mysql.sock 로 변경 하였습니다.
그랬더니, /tmp/systemd-private-xxxx/tmp/mysql.sock 으로 생성이 된다.
뭐 이렇게 해도 상관이 없으나, 클라이언트 접속시 접속이 되지 않는다.
[client]
socket=/tmp/mysql.sock
위와 같이 처리 하면 될 것 같았으나, 위처럼 하면 그냥 /tmp/mysql.sock 으로 인식된다.
centos 7버젼으로 설치 했더니, 조금 바뀐게 많다.
tmp 디렉토리의 보안이 추가 된것으로 보인다.
그랬더니, /tmp/systemd-private-xxxx/tmp/mysql.sock 으로 생성이 된다.
뭐 이렇게 해도 상관이 없으나, 클라이언트 접속시 접속이 되지 않는다.
[client]
socket=/tmp/mysql.sock
위와 같이 처리 하면 될 것 같았으나, 위처럼 하면 그냥 /tmp/mysql.sock 으로 인식된다.
centos 7버젼으로 설치 했더니, 조금 바뀐게 많다.
tmp 디렉토리의 보안이 추가 된것으로 보인다.
vim /lib/systemd/system/mariadb.service
PrivateTmp=true 에서 PrivateTmp=false 로 변경.
systemctl daemon-reload
service mariadb restart
2014년 9월 5일 금요일
Mysql 4.0 -> 마리아 5.5.37 마이그레이션
- mysql 4.0 dump
- mysql 4.1.22 업그레이드
- mysql 5.5 업그레이드
- 마리아 db 설치.
mysql 4.1 버젼에서 마리아db 로 변경하는 부분은 그냥 덮어 쓰면 됨.
문제는 mysql 4.0 에서 mysql 4.1 로 업그레이드 부분.
binary로 그냥 덮어써도 되지만, field size 가 반으로 줄어 버리기 때문에 문제가 발생 할 수 있다고 함.
그래서 dump 파일을 생성 해서 써야 함.
mysqldump -u root -ppass --opt --quick --quote-names --all-databases > allBackup.sql
-opt 옵션은 문제가 없다면 쓰는 게 좋음. 백업, 복구 시간을 엄청 단축시킴.
-quote-name 옵션은 테이블 필드명 중, sql 쿼리명이 들어가 있어서 문제를 발생시켜 넣어줌.
restore 완료후에는 mysql_install_db 를 실행 시켜줌.
아래는 마이그레이션시 사용한 스크립트.
#!/usr/bin/bash
#mysql 4.1.22 설치
#killall mysqld
echo "kill mysql"
service mysqld stop
rm -rf /usr/local/mysql/
cd /usr/local/src/mysql-4.1.22/
make install #컴파일 되어 있음. 설치만 하면 됨.
/usr/local/mysql/bin/mysql_install_db
chown -R mysql.mysql /usr/local/mysql
cp -f /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
service mysqld start
#패스워드 설정
/usr/local/mysql/bin/mysqladmin password 'test01'
/usr/local/mysql/bin/mysql -uroot -ptest01 -e 'select now();' #그냥 확인용 or 복구 시간 확인.
#echo $?
#1 이면 제대로 안된거.
#덤프 복구시 필요. 안하면 에러남.
/usr/local/mysql/bin/mysql -uroot -ptest01 -e "set global max_allowed_packet=1000000000;"
/usr/local/mysql/bin/mysql -uroot -ptest01 -e "set global net_buffer_length=1000000;"
#--------------------------------------------------------------------------------------
echo "Start Restoring..."
#43번 dump 복구.
# --debug : 에러 확인용.
# -f 에러 무시 : 43번 덤프파일 duplication 에러남.
/usr/local/mysql/bin/mysql --debug -f -uroot -ptest01 < /usr/local/src/43_DB_ALL_20140820.sql
#설치시 나오는 duplication 정상.
#그외에 오류는 안 나야 됨.
#복구 끝나면 root 패스는 pass 이 됨.
#비교를 위해 test01로 설정.
/usr/local/mysql/bin/mysql -uroot -ptest01 -e 'select now();' #복구 시간 확인.
#--------------------------------------------------------------------------------------
#mysql 5.5.39 설치
#killall mysqld
service mysqld stop
cd /usr/local/src/mysql-5.5.39/
make install
cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chown -R mysql.mysql /usr/local/mysql
service mysqld start
#/usr/local/mysql/bin/mysql_fix_privilege_tables --password=pass
/usr/local/mysql/bin/mysql_upgrade --password=pass
/usr/local/mysql/bin/mysql -uroot -ppass -e 'select now();' #그냥 확인용.
chkconfig mariadb on
#마리아DB 설치 yum
service mysqld stop
service mariadb stop
ln -fs /usr/local/mysql/data/ /var/lib/mysql
yum -y remove mariadb mariadb-devel mariadb-libs mariadb-server
yum -y install mariadb mariadb-devel mariadb-libs mariadb-server
service mariadb start
mysql_upgrade --password=pass
완벽하지 않음.
마리아db 설치 완료 my.cnf 에 euckr 추가.
[mysqld]
...
#charset config
character-set-server=euckr
init_connect=SET collation_connection=euckr_korean_ci
init_connect=SET NAMES euckr
character-set-server=euckr
collation-server=euckr_korean_ci
...
2014년 8월 29일 금요일
setuid, setgid 제거.
#test 디렉토리 생성.
[root@localhost src]# mkdir test\
#확인
[root@localhost src]# ll
합계 4
drwxr-xr-x 2 root root 4096 2014-08-28 16:30 test
#setuid 퍼미션 설정
[root@localhost src]# chmod 4000 test/
#확인.
[root@localhost src]# ll
합계 4
d--S------ 2 root root 4096 2014-08-28 16:30 test
#0000 8bit로 setuid 퍼미션 제거 시도.
[root@localhost src]# chmod 0000 test/
#확인. 제거가 안됨.
[root@localhost src]# ll
합계 4
d--S------ 2 root root 4096 2014-08-28 16:30 test
#심볼링 형식으로 제거 시도.
[root@localhost src]# chmod -s test/
#확인. 제거가 이루어 짐.
[root@localhost src]# ll
합계 4
d--------- 2 root root 4096 2014-08-28 16:30 test
참고 : http://linuxg.net/how-to-set-the-setuid-and-setgid-bit-for-files-in-linux-and-unix/
ps. 참고사이트에서도 0755 같은 형태로 앞부분에 0(zeroi)를 주면 삭제된다고 나옴...; 뭐지..
[root@localhost src]# mkdir test\
#확인
[root@localhost src]# ll
합계 4
drwxr-xr-x 2 root root 4096 2014-08-28 16:30 test
#setuid 퍼미션 설정
[root@localhost src]# chmod 4000 test/
#확인.
[root@localhost src]# ll
합계 4
d--S------ 2 root root 4096 2014-08-28 16:30 test
#0000 8bit로 setuid 퍼미션 제거 시도.
[root@localhost src]# chmod 0000 test/
#확인. 제거가 안됨.
[root@localhost src]# ll
합계 4
d--S------ 2 root root 4096 2014-08-28 16:30 test
#심볼링 형식으로 제거 시도.
[root@localhost src]# chmod -s test/
#확인. 제거가 이루어 짐.
[root@localhost src]# ll
합계 4
d--------- 2 root root 4096 2014-08-28 16:30 test
참고 : http://linuxg.net/how-to-set-the-setuid-and-setgid-bit-for-files-in-linux-and-unix/
ps. 참고사이트에서도 0755 같은 형태로 앞부분에 0(zeroi)를 주면 삭제된다고 나옴...; 뭐지..
피드 구독하기:
글 (Atom)