'센토스'에 해당되는 글 2건

  1. 2014.08.23 LAMP (Linux Based Apache, MariaDB, PHP) Install
  2. 2013.05.08 xargs, find 명령어


OS : Centos 7


1. Install Apache on a CentOS 7

: 아파치 서버를 설치한다.

# yum install httpd

output : 

Loaded plugins: amazon-id, rhui-lb

Resolving Dependencies

--> Running transaction check

---> Package httpd.x86_64 0:2.4.6-17.el7 will be installed

--> Processing Dependency: httpd-tools = 2.4.6-17.el7 for package: httpd-2.4.6-17.el7.x86_64

--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-17.el7.x86_64

--> Running transaction check

---> Package httpd-tools.x86_64 0:2.4.6-17.el7 will be installed

---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed

--> Finished Dependency Resolution

 

Dependencies Resolved

 

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

 Package            Arch          Version               Repository                               Size

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

Installing:

 httpd              x86_64        2.4.6-17.el7          rhui-REGION-rhel-server-releases        1.2 M

Installing for dependencies:

 httpd-tools        x86_64        2.4.6-17.el7          rhui-REGION-rhel-server-releases         77 k

 mailcap            noarch        2.1.41-2.el7          rhui-REGION-rhel-server-releases         31 k

 

Transaction Summary

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

Install  1 Package (+2 Dependent packages)

 

Total download size: 1.3 M

Installed size: 3.9 M

Is this ok [y/d/N]: y

Downloading packages:

(1/3): httpd-tools-2.4.6-17.el7.x86_64.rpm                                     |  77 kB  00:00:00

(2/3): httpd-2.4.6-17.el7.x86_64.rpm                                           | 1.2 MB  00:00:00

(3/3): mailcap-2.1.41-2.el7.noarch.rpm                                         |  31 kB  00:00:00

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

Total                                                                 2.0 MB/s | 1.3 MB  00:00:00

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

  Installing : httpd-tools-2.4.6-17.el7.x86_64                                                    1/3

  Installing : mailcap-2.1.41-2.el7.noarch                                                        2/3

  Installing : httpd-2.4.6-17.el7.x86_64                                                          3/3

  Verifying  : mailcap-2.1.41-2.el7.noarch                                                        1/3

  Verifying  : httpd-tools-2.4.6-17.el7.x86_64                                                    2/3

  Verifying  : httpd-2.4.6-17.el7.x86_64                                                          3/3

 

Installed:

  httpd.x86_64 0:2.4.6-17.el7

 

Dependency Installed:

  httpd-tools.x86_64 0:2.4.6-17.el7                   mailcap.noarch 0:2.1.41-2.el7

 

Complete!


: httpd 서비스를 활성화 및 부팅시에 자동적으로 활성화가 되도록 한다.

# systemctl enable httpd.service

output : 

ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'


# systemctl disable httpd.service 

- disable 명령을 하면 httpd 서비스가 중단되고 부팅하여도 활성화되지 않는다.


: httpd service 실행

# systemctl start httpd.service 

ex) systemctl {start | stop | restart } httpd.service - 시작, 중지, 재시작 명령

ex) systemctl is-active httpd.service - httpd 서버의 상태 확인 명령

apache server가 잘 동작하는지 확인하려면 127.0.0.1을 쳐봐서 확인할 수 있다.



: Gracefully 재시작

# apachectl graceful


: Test httpd/apache configuration file for errors on a centos

# apachectl configtest

- 아파치 서버의 설정파일 테스트인데 "syntax ok"가 나와서 정상이다.

하지만 아마도 처음 이것을 실행하면 서버네임 어쩌고저쩌고 에러가 나올 수 있다. 나중에 설정할 것이지만 미리 말하면 /etc/httpd/conf/httpd.conf  에서...

ServerName 127.0.0.1:80 으로 편집하면 에러가 나지 않을 것이다.


: httpd service default configuration

1. Default config file : /etc/httpd/conf/httpd.conf

2. configuration files which load modules : /etc/httpd/conf.modules.d/directory(e.g PHP)

3. Seelct MPMs (processing model) as loadable modules [worker, prefork(default)] and event:

/etc/httpd/conf.modules.d/00-mpm.conf

4. Default ports : 80 and 443(SSL)

5. Default log files : /var/log/httpd/}access_log, error_log}


***************************************************************************************************************

***************************************************************************************************************


2. MariaDB Install

: mariadb를 설치한다.

# yum install mariadb-server mariadb


: mariadb start

# systemctl start mariadb.service

이 명령을 실행 시켰을 때, error가 발생한다면... 제대로 설치가 되지 않은 것이다.

/var/lib/mysql 디렉토리를 지우고 다시 만든다. mkdir /var/lib/mysql

그런 다음, 

yum install mariadb mariadb-server

다시 한번 이 명령을 실행시키면 된다.



: 컴퓨터 켤 때 자동 실행

# systemctl enable mariadb.service

output :

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service


ex)

sudo systemctl stop mariadb.service #<-- Stop mariadb server

sudo systemctl restart mariadb.service #<-- Restart mariadb server

sudo systemctl disable mariadb.service #<-- Disable mariadb server

sudo systemctl is-active mariadb.service   #<-- Is mariadb server running?


: Securing MariaDB

# /usr/bin/mysql_secure_installation

output :

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current

password for the root user.  If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none): PRESS-ENTER-KEY

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

Set root password? [Y/n] Y

New password: YOUR-NEW-PASSWORD-HERE

Re-enter new password: YOUR-NEW-PASSWORD-HERE

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] Y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] Y

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] Y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!


:: 잘 설치되었는지 확인

# mysql -u root -p

위의 명령을 입력하여 비밀번호를 치고 들어가면 성공.


: mariaDB 가 잘 동작하는 지 확인

vi /var/www/html/db.php

 code :

<?php

mysql_connect("", "", "");

echo "db 작동 완료!!";

?>

이렇게 해서 "db 작동 완료" 라는 문구가 나오면 서로 잘 연동 된 것이다.


3. PHP Install

: php 설치

# yum install php php-mysql php-gd php-pear


: httpd 재시작

# systemctl restart httpd.service


:  모듈 설치

# yum install php-pgsql


: php가 잘 설치되었는지 확인

vi /var/www/html/test.php

code : 

<?php

phpinfo();

?>

파일을 저장하고 웹브라우저에서 127.0.0.1/text.php 를 입력하면 아래의 사진과 같은 결과물이 나오면 잘 설치가 된 것이다.




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


Configure Settings


:: 방화벽 설정

\

3306 포트는 mariadbServer에서 mysql를 열기위함이다. mysql 기본 포트가 3306인 것 같다.


방화벽 서비스 재시작



/etc/httpd/conf/httpd.conf

: apache가 php를 인식하도록 설정



/etc/httpd/conf.d/php.conf

:: AddType 추가


:: DirectoryIndex 추가



/etc/php.ini

upload_max_filesize = 100M

default_socket_timeout = 3000

max_execution_time = 30     ; Maximum execution time of each script, in seconds

max_input_time = 60     ; Maximum amount of time each script may spend parsing request data

memory_limit = 128M      ; Maximum amount of memory a script may consume

short_open_tag = On // XE 가  제대로 작동 안될때 사용.

 upload_tmp_dir = /tmp

upload_max_filesize = 100M

default_charset = "UTF-8"

mbstring.internal_encoding = UTF-8


# php.ini 에서 사용 금지할 명령어 추가

disable_functions = exec, shell



/etc/my.cnf

php에서 한글을 출력해 내는 것은 잘 되는데, MariaDB에서 DB 쿼리를 해서 한글을 출력시에는 전부 ?? 로 표시되는 문제가 발생했다.

인터넷상에서 알려진 PHP와 UTF-8의 설정법을 전부 적용해봤는데도 안되었는데, 최종적으로 /etc/my.cnf 에 [mysqld] 항목에서 skip-character-set-client-handshake 를 추가해주니깐 겨우 한글이 출력되기 시작했다. 클라이언트의 설정을 무시하고 서버쪽 설정에 따르도록 한다는 것 같다.

다른 부분을 전부 설정했음에도 저걸 안해주면 안되는 이유가 소스 설치를 했으면 모르겠는데, 내 경우는 yum 을 이용해서 설치했으며, yum 을 이용해서 설치하면 다른곳이 전부 utf8이라도 DB가 접속시 latin을 사용한다는 얘기가 있다. 따라서 꼭 skip-character-set-client-handshake 를 해준다.

이외에 기본적으로 CentOS 6.4에서 PHP와 MariaDB(MySQL)의 utf-8 입출력을 위한 설정을 남겨본다.

물론 기본적으로 php 파일은 utf-8 로 인코딩 되어 있어야 함.

1. DB 생성시 utf8_general_ci 로 생성.

2. /etc/my.cnf 파일 수정

※ 참고로 my.cnf 설정 잘못하면 my.cnf 설정 변경후 서비스 재시작시에 에러나서 실행이 안될수도 있다. 이 경우엔 설정을 하나씩 지우던가 해서 맞지 않는 설정을 제외시킨다.


[client]

default-character-set=utf8


[mysqld]

init_connect="SET collation_connection=utf8_general_ci"

init_connect="SET NAMES utf8"

character-set-server=utf8

collation-server=utf8_general_ci

skip-character-set-client-handshake


[mysql]

default-character-set=utf8

#

# This group is read both both by the client and the server

# use it for options that affect everything

#

[client-server]

#

# include all files from the config directory

#

!includedir /etc/my.cnf.d


위와같이 my.cnf 를 바꿔준후 서비스를 재시작해주고 mysql 콘솔로 접속해서 show variables like 'c%'; 명령어를 이용해서 정상적으로 db가 utf8로 설정되어 있는지 확인한다.


:: /etc/php.ini 수정

default_charset = "utf-8"

mbstring.internal_encoding=UTF-8


일단 내가 설정한 부분은 여기까지 였으며 정확하게 utf-8이 동작한다. 내 경우에 핵심은 /etc/my.cnf 에 skip-character-set-client-handshake 추가를 해준후에 동작했다는 점. 



참고 페이지 : 

http://blog.keypointer.co.kr/?p=53

http://www.cyberciti.biz/faq/howto-install-linux-apache-mariadb-php-lamp-stack-on-centos7-rhel7/

http://www.if-not-true-then-false.com/2013/install-mariadb-on-fedora-centos-rhel/

http://www.nextstep.co.kr/250



'Programming > etc' 카테고리의 다른 글

Linux PHPStrom 설정  (0) 2014.09.06
Installing Xdebug on CentOS  (0) 2014.09.06
Python 학습 관련 자료 및 문서, WebSite  (0) 2014.03.25
Python PySide 설치  (1) 2013.03.07
윈도우환경을 리눅스환경처럼  (0) 2013.02.19
Posted by scii
:

xargs, find 명령어

Linux/Common 2013. 5. 8. 01:58 |


xargs 

xargs 명령은 입력된 데이터를 라인 단위로 읽어서 argument화하는 명령이다.

find 명령을 사용하여 검색한 파일에 대한 처리를 위해 파이프로 연결하여 사용한다.


위의 명령은, which 명령에 의해 출력되는 bash 실행 파일의 경로가 /bin/bash인데, 이 결과 값이 파이트와 xargs에 의해 ls -l 아규먼트로 대입되어 결국 ls -l /bin/bash 명령을 수행한 결과를 출력하게 된다.



find

find 명령은 디렉토리 계층에서 파일을 검색하기 위한 명령이다. 

find 명령으로 검색한 결과 값은 하나의 라인에 하나의 파일명이 출력되는데, 이 결과 값을 파이프로 연결하여 여러가지 명령의 아규먼트로 전달하여 원하는 명령을 실행하고 그 결과 값을 얻어낸다.


형식

1) -exec를 사용하여 검색된 결과를 명령의 아규먼트 ({})로 사용한다.

# find ... -exec 명령 {} \;

2) xargs 명령을 사용하여 파이프로 전달된 결과를 표준 입력 아규먼트로 받아서 명령을 실행한다.

# find ... | xargs 명령


find 옵션


 find 옵션

의        미 

 -name 파일명 

 파일명으로 검색한다. 

 -user 유저명 

 유저명 또는 UID로 검색한다. 

 -group 그룹명 

 그룹명으로 검색한다. 

 -perm nnn 

 퍼미션이 nnn인 파일을 검색한다.

 예) -perm 755

 # find . -perm -100 -print

 실행 가능한 --x------ 파일을 찾는다.

 -perm 인자가 마이너스(-) 부호를 가지게 되면 setuid 설정 비트를 포함한 모든 퍼미션 비트들이 검사된다.

 -type x 

 파일 타입이 x인 파일을 검색한다.

 b(블럭 특수 파일), c(문자 특수 파일), d(디렉토리), p(파이프), f(정규표현 일반 파일), l(심볼릭 링크 파일), s(소켓) 

 -atime +n 

 접근 시간이 n일 이전인 파일을 검색한다. (access) 

 -atime -n 

 접근 시간이 n일 이내인 파일을 검색한다. (access) 

 -ctime +n 

 n일 이전에 변경된 파일을 검색한다.

  (change: 내용 수정이 아니라 모드 변경 또는 접근 시간 변경)

 -mtime +n 

 n일 이전에 내용이 수정된 파일을 검색한다. (modify) 

 -mtime -n 

 n일 이내에 내용이 수정된 파일을 검색한다. (modify) 

 -empty

 파일이 비어있고 (0 bytes) 일반 파일, 디렉토리를 검색한다. 

 -newer 파일명 

 파일명의 파일보다 최근에 수정된 파일을 검색한다. 

 -size n 

 파일 블록 크기가 n 이상인 파일을 검색한다.

 b(블럭 -기본값), c(bytes), k(kbytes), w(2바이트 단어) 

 -links n 

 링크된 개수가 n인 파일을 검색한다. 

 -print 

 표준 출력 

 -exec 명령

 검색된 파일을 찾으면 command 명령을 실행한다.

 명령 인자(검색된 파일)는 {}으로 사용하며, 이때 명령 끝은 \;(;이 아님)을 사용해야 한다.

 즉, 명령구분 문자인 ';'을 이스케이프(\) 시켜 주어야 한다.  

 -operator 

 -a: and 연산, -o: or  연산, !: not 연산 

 -path 패턴

 path가 패턴과 일치하는 path에 대해서 검색한다.  

 -regex 패턴 

 파일명이 패턴과 일치하는 정규 표현식에 대해서 검색한다. 



find 명령에서 사용하는 -atime, -ctime, -mtime 옵션에서의 시간들은 일(하루 24시간) 단위이다. 

부호 없는 숫자, 예를 들어 3은 정확하게 3일 전에 끝난 24시간을 의미한다. 다시 말하면 96시간과 72시간 이전 사이를 의미하는 것이다.


마이너스(-) 부호를 가진 숫자는 그 시간 이후에 기간을 가리킨다. 예를 들어, -3은 지금과 3일 전 사이의 모든 시간을 의미한다. 

다시 말하면 0시간 이전과 72시간 이전 사이를 의미하는 것이다.


플러스(+) 부호를 가진 숫자는 그 시간 이전의 기간을 가리킨다. 예를 들면, +3은 3일 이상된 시간을 의미한다.

다시 말하면 72시간 이상 지난 파일을 의미하는 것이다.



# find . -type f -exec file '{}' \;

쉘이 위치한 현재 디렉토리 아래에서 모든 파일을 검색하고 file 명령을 실행한다. 

'{}', 작은따옴표로 둘러싸인 브레이스는 쉘 스크립트에 의해 해석되지 않도록 하기 위한 것이며, find 명령으로 찾은 파일을 의미한다.

세미콜론(;)은 쉘에서 해석되지 않기 위해 백슬래시(\)를 사용하고 있다. 

만약 현재 디렉토리 아래의 grep 디렉토리에서 검색하려면 ./grep 를 지정하면 된다.


# find $HOMe -mtime 0

현재 쉘에 접속해 있는 자신의 홈디렉토리 아래에서 24시간(-mtime 0) 안에 수정된 파일들을 검색하여 출력한다.


# find . -name 'fi*'

현재 디렉토리부터 모든 하위 디렉토리까지 파일명이 fi로 시작하는 모든 파일을 검색하여 출력한다.


# find . -perm 755

현재 디렉토리부터 모든 하위 디렉토리까지 퍼미션이 755인 파일과 디렉토리를 검색한다.

위의 명령은 모든 파일과 디렉토리를 검색하였지만, -type f 옵션을 추가하면 일반 파일만 출력할 수 있다.

# find . -type f -perm 755


# find /home -newer here.sh

/home 디렉토리 아래에서 here.sh 파일보다 최근에 수정된 파일을 검색하여 출력한다.


# find /home -size +1024 -print

/home 디렉토리 아래에서 파일의 블록 크기가 1024 이상인 파일을 검색하여 출력한다.


# find ~/ -type d -print

홈 디렉토리 아래에서 디렉토리들만 검색하여 출력한다.


# find /home \( -name a.out -o -name '*.o' \) -atime +7 -exec rm '{}' \;

/home 디렉토리 아래에서 파일명이 a.out 또는 .o로 끝나는 파일을 검색하고, 7일 동안 사용하지 않은 파일(생성/변경 날짜가 7일 이상된 파일)이면 rm 명령을 사용하여 삭제하도록 하는 명령이다.


# find /tmp -name core -type f -print | xargs /bin/rm -f

/tmp 디렉토리 아래에서 파일명이 core인 파일을 검색하여 출력한다. 이때 검색된 파일 목록은 하나의 라인에 하나의 파일명이 출력되는데, 파이프로 연결된 xargs 명령에 의해 라인 단위로 /bin/rm -f 명령의 아규면트로 전달되어 검색된 모든 파일들을 삭제하게 된다.


# find . -type f -mtime +1 | xargs -n 100 rm -f

find 명령을 사용하여 현재 디렉토리 아래에서 현재 시간보다 하루(+) 전(24시간 내에 작성/수정된 파일만 제외) 에 작성/변경된 파일을 찾으면 라인 단위로 파일 리스트가 쉘에 출력된다.

이 파일 리스트는 하나의 라인당 하나의 파일명이 출력되기 때문에 각 라인의 파일명을 아규먼트화하기 위해 xargs 명령을 파이프로 연결한 다음 -n 100, 즉 100라인 (100개의 아규먼트) 을 한 번에 읽어서 rm -f [아규먼트] 로 치환하여 100개 단위로 검색된 파일들을 삭제하는 명령이다.


'Linux > Common' 카테고리의 다른 글

vim 업데이트 및 gvim 설치  (0) 2014.02.01
분할 압축  (0) 2013.05.26
Linux Theme  (0) 2013.04.28
Linux Theme Settings  (2) 2013.04.07
터미널에서 멀티태스킹하기  (0) 2013.02.02
Posted by scii
: