1. 라인의 맨앞에 특정 키워드를 추가한다.

:%s/^/aaa/g   (각 라인들 앞에 aaa 가 추가됨)

2. 라인의 맨 뒤에 특정 단어를 추가하고자 할 경우

:%s/$/aaa/g (각 라인들 뒤에 aaa 가 추가됨)

3. 줄 앞에 있는 공백을 제거하는 방법

:%s/\v^\s+//g
\v 는 vim 정규식 대신 표준 정규식을 사용하게 하는 옵션
\s스페이스바나 탭 등 모든 공백 한글자를 나타냄

4. 줄 끝에 있는 공백을 제거하는 방법

:%s/\s\+$//

5. 문서전체에 있는 공백을 제거하는 방법 (공백갯수 무관)

:s/ //g (스페이스로 구분된 공백의 갯수가 1또는 그이상이라도 공백은 1개만 입력)

6. 라인의 맨 뒤에 특정단어를 다른 단어로 치환

:%s/,$/;    (라인 맨 뒤의 , 를 ; 로 변경할 경우)

7.  특정 pattern이 들어가는 line 지우기

:g/pattern/d

8. 특정 pattern이 들어가 있는 line을 제외한 모든 line 지우기

: g!/pattern/d  또는 :v/pattern/d


1. 아파치 accesslog 중 특정 도메인을 추출한 파일 (domain.com.txt)의 해외 접속 기록만 확인

cat domain.com.txt | awk '$1 != "KR" {print $0}' 
(1번째 필드가 mod_geoip에 의해 출력되어야함, 로그포맷 변경 및 GeoIP와 GeoIP-devel 설치 필수)


/var/spool/clientmqueue는 sendmail이 메일 발송 목적지를 확정 하지 못할 경우 메일을 임시로 보관 하는 공간입니다.

목적지가 확정 되면 /var/spool/mqueue 디렉토리로 메일이 옮겨진 뒤 발송이 되며, 목적지가 확정 되지 않을 경우에는

관리자가 삭제 하기 전까지는 계속 해당 디렉토리에 메일이 남아 있게 됩니다.

또한 sendmail을 전혀 사용 하지 않는 시스템에서도 clientmqueue 디렉토리에 메일이 지속적으로 쌓이는 경우가 있습니다.

이는 logwatch가 시스템 상의 주요 로그를 간추린 보고서나 cron이 구동 되면서 발생 하는 각종 메세지를 root 계정으로

메일 발송 되게끔 설정 되어 있기 때문입니다.

 logwatch의 메일 발송을 중단 하려면 아래와 같이 /etc/crontab 내용을 수정해 주면 됩니다.

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root   <---- 이 부분을

MAILTO=""   <---- 이렇게

[출처] http://faq.hostway.co.kr/Linux_Mail/3954


 

Apache에서 아래와 같이, Deny from all설정으로 모든 디렉토리가 막혀있다.

이는 다른 설정없이 호출시, Fobbiden 오류가 발생하게 된다.

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

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    Deny from all

</Directory>

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

 

Options

: 지정한 디렉토리이하에 모든 파일과 디렉토리들에 적용할 접근제어를 설정함. 즉 디렉토리를 보여줄 것인가? CGI를 허용할 것인가? SSI를 허용할 것인가? 등의 설정을 여기서 하게 된다. 


None

모든 허용을 하지 않음. 즉, None설정으로 이외의 다른 설정들은 모두 무시


All

MultiViews 를 제외한 모든 옵션설정을 허용


Indexes

디렉토리 접근시에 DirectoryIndex에서 지정한 파일(index.html 또는 index.htm 등)이 존재할 경우에 디렉토리내의 파일목록리스트를 웹브라우저로 보여준다. 웹서버 보안을 위해 사용하지 않는 것이 좋다. 


Includes

SSI 사용을 허용하는 설정. 단, mod_include.c 모듈이 아파치웹서버에 로딩되어 있어야 함. 거의 대부분이 기본 설정으로 되어 있음. 확인법은 "httpd -l"


IncludesNOEXEC

SSI사용은 허용되지만 #exec 사용과 #include는 허용되지 않는다. 즉, SSI를 사용하면서 시스템에 위험한 SSI의 실행태그는 허용하지 않겠다는 설정


FollowSymlinks

심볼의 링크를 허용한다. 이 옵션을 지정하면 웹브라우저에서 링크파일의 경로까지도 확인할 수 있게 된다. 보안상 이 값은 설정하지 않는 것이 좋다.


ExecCGI

perl 등과 같은 CGI실행을 허용하기 위한 설정이다. 원래 아파치에서 CGI사용은 ScriptAlias로 지정된 위치에서 사용하는 것이 기본이다. 하지만 ScriptAlias가 지정되지 않은 디렉토리에 이 옵션이 지정되어 있다면 지정된 디렉토리내에서는 CGI 사용이 허용된다. 물론 이 경우에도 "AddHandler cgi-script" 지시자에서 정의한 확장자만 유효하다. 참고로 perl 등의 CGI실행이 안될 경우에는 ExecCGI값이 설정 되어 있나를 확인해 봐야 한다. 이 설정이 않되어 있다면 해당 디렉토리내에서는 CGI의 실행이 허용되지 않기 때문이다.


MultiViews

웹브라우저의 요청에 따라 적절한 페이지로 보여준다. 웹브라우저의 종류나 웹문서의 종류에 따라서 가장 적합한 페이지를 보여줄 수 있도록 하는 설정이다.

 


AllowOverride

: 어떻게 접근을 허락할 것인가에 대한 설정.


None

AccessFileName에 지정된 파일을 엑세스 인증파일로 인식하지 않는다. 즉, AccessFileName 의 값이 대부분 .htaccess 이므로 이를 무시하게 된다는 의미가 된다. 즉 이 파일을 무시하기 때문에 새로운 접근 인증박싱을 Override하지 않는다. 대부분ㅇ 보아이나 중요한 디렉토리에서 사용할 수 있는 것으로 아주 제한적인 접근만을 허용하고자 할 때에 사용하는 값이다.


All

이전의 인증방식에 대하여 새로운 접근인증방식을 우선적용하도록 Override를 허용한다.


AuthConfig

AccessFileName 지시자에 명시한 파일(거의 대부분은 .htaccess)에 대하여 AuthDBMgroupFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require 등과 같은 클라이언트 인증지시자의 사용을 허용한다. 즉 htpasswd 유틸리티를 이용하여 특정 디렉토리의 접근은 AccessFileName에 명시한 파일(대부분은 .htaceess)로 제어하고자 할 때에 (이를 "디렉토리 인증설정"이라고 함) 해당 디렉토리내에 이 값을 주로 사용한다.


FileInfo

AccessFileName지시자에 명시한 파일(거의 대부분은 .htaccess)에 대하여 AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority 등과 같은 문서유형을 제어하는 지시자 사용을 허용한다.


Indexes

AccessFileName 지시자에 명시한 파일(대부분 .htaccess파일)에 대하여 AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName 등과 같은 디렉토리 Indexing을 제어하는 지시자 사용을 허용한다.


Limit

AccessFileName 지시자에 명시한 파일(대부분 .htaccess파일)에 대하여 allow, deny, 그리고 order 등과 같은 호스트 접근을 제어하는 지시자 사용을 허용한다.


Options

AccessFileName 지시자에 명시한 파일(대부분 .htaccess파일)에 대하여 Options 그리고 XBitHack등과 같은 특정 디렉토리 옵션을 제어하는 지시자 사용을 허용한다.

 

 

 

 

     

     

쓰고자 하는 디렉토리는 아래와 같이,

설정을 해야 정상적으로 호출을 할 수 있다.

     

     

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">

    #

    # Possible values for the Options directive are "None", "All",

    # or any combination of:

    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

    #

    # Note that "MultiViews" must be named *explicitly* --- "Options All"

    # doesn't give it to you.

    #

    # The Options directive is both complicated and important.  Please see

# http://httpd.apache.org/docs/2.2/mod/core.html#options

# for more information.

#

Options Indexes FollowSymLinks

#

# AllowOverride controls what directives may be placed in .htaccess files.

# It can be "All", "None", or any combination of the keywords:

# Options FileInfo AuthConfig Limit

#

AllowOverride None

#

# Controls who can get stuff from this server.

#

Order allow,deny

Allow from all

</Directory>

 

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

 

<Directory "C:/webapps/app1">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

 

<Directory "C:/webapps/app2">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>



출처: http://mcpaint.tistory.com/133 [MC빼인트와 함께]


 

apache 를 재시작하는 방법으로는 크게  restart 와 graceful 이 있습니다.

재시작하는건 동일하지만 약간의 차이가 있습니다.

restart (kill -HUP)

restart 의 경우 apache 의 모든 프로세스를 종료 시키고 재시작합니다.  stop 한후 start와 동일합니다.

완전한 종료는 되지만 서비스 끊김이 발생합니다.

graceful (kill -USR1) 

graceful 의 경우 접속된 컨넥션은 유지하고 그외 apache  모든 프로세스를 종료하고 재시작합니다.

이때 세션의 종료 없이 설정파일을 불러서 재실행합니다.

운영중인 서버에 작업을 하고 재시작할때는 restart 보다는 graceful 옵션을 사용하는걸 추천합니다.

 

출처 : https://idchowto.com/?p=38239

 

대부분의 많은 사용자들이 apache 설정 변경 후 restart를 진행 합니다.

 

가상호스트가 추가 되어도 restart

apache의 ServerName이 변경되어도 restart

 

restart를 진행하면 프로세스가 모두 종료하고 재시작 되기때문에 세션이 끊어지는 문제가 있습니다.

 

 

apache의 재시작 방법은 restart/graceful 이렇게 두가지가 존재 합니다.

 

restart (kill -HUP)
- httpd 모든 프로세스를 찾아 종료시키고 재시작 시그널 주는것이다.

graceful (kill -USR1)
- 현재 접속된 컨넥션은 그대로 유지하고 그외 httpd 모든 프로세스를
찾아 종료시키고 재시작 시그널 주는것이다.

예1) /usr/local/apache2/bin/apachectl restart

이 경우 완벽한 재시작은 이루어지지만, 서비스가 끊김 발생

예2) /usr/local/apache2/bin/apachectl graceful

서비스의  세션 및 연결 종료 없이 conf 설정 파일 불러서 재실행

 

서비스 운영 중에 추가되는 작업들은 restart 보다는 graceful 옵션을 통해 재시작 해주시는 것이 좋습니다.

 

단, 모듈 추가 등의 apache 내에 삽입되어야 하는 작업들은 반드시 restart를 해주셔야 합니다.

 

출처 : http://faq.hostway.co.kr/Linux_WEB/3665


linux 에서 스크립트 실행할 때
/bin/sh^M: bad interpreter: No such file or directory
와 같은 에러 메시지가 나타날 때가 있다.

이것은 십중 팔구 윈도우에서 스크립트 파일을 만든 뒤, linux 에서 실행했기 때문에 나타나는 오류이다.
정확히는 줄 끝 (줄바꿈)을 의미하는 개행문자가 달라서 발생하는 문제인데 이것의 해결을 위해서는 다음의 방법 중 한 가지로 처리한다.

1. vi -b
vi 의 바이너리 모드로 들어가면 ^M 이라는 문자가 보인다. 이것을 지워주면 된다.

2. dos2unix
linux 콘솔에서 dos2unix filename.txt 와 같이 명령을 주어 파일을 변경한다.

3. subversion property 설정
형상관리 시스템으로 subversion을 쓰고 있을 경우, 해당 스크립트 파일의 property 에 svn:eol-style=native 를 추가해 준다.
(native 는 줄 끝 문자를 해당 OS에 맞게 변경해준다)


출처 : http://tod2.tistory.com/28


아래 명령어를 이용하면 확인이 가능함.

1. HDD의 경우

cat /sys/block/sda/queue/rotational 명령을 실행한 결과가 1

2. SSD의 경우

cat /sys/block/sda/queue/rotational 명령을 실행한 결과가 0

커널 2.6.29 이상부터 가능.


mount된 디렉토리를 umount 하고자 할 때, 만약 특정 사용자 & 프로세스가 해당 디렉토리를 사용하고 있으면

"device is busy" 메세지가 발생하며 umount 가 되지 않습니다.

이 경우 umount를 위해 해당 프로세스를 강제로 kill 하는 방법은 아래와 같습니다.

# fuser -ck 마운트디렉토리

ex) fuser -ck /backup

위 명령으로 프로세스를 kill 하고 umount를 재시도하면 정상적으로 mount가 해제 됩니다.

* 해당 디렉토리를 사용하는 사용자가 누구인지 확인하고 싶을 때
# fuser -cu /backup

출처 : http://faq.hostway.co.kr/Linux_ETC/4209

 

페이지 수정 후 업데이트 했는데 수정된 부분이 업데이트 안되는 경우가 있습니다.


보통 호스팅 하드 용량이 꽉찬 경우, 업데이트가 안되는 경우가 있고요,


max_input_vars 가 1000으로 설정되어 있는데 너무 적어서 전송이 안되는 경우가 있습니다.



이럴때는 php.ini 파일을 수정해줘야 하는데, 웹호스팅 받는 경우 권한 오픈이 안되므로

.htaccess 파일을 수정해서 늘려줍니다.


파일 맨위에 아래 내용 추가하면 됩니다.


php_value max_input_vars 6000




카페24 호스팅 기준으로 보면 www폴더안에 있는 .htaccess파일입니다.

 

출처 : https://m.blog.naver.com/gizmo90/220750057322


 

yum 패키지 관리자는 패키지 설치/삭제를 트랜잭션으로 관리하므로 예전 패키지 설치 상태로 되돌릴 수 있는 방법을 제공하고 있습니다.


yum 을 통해 패키지 설치, 변경, 삭제로 인해 내부 저장소가 변경되는 작업을 트랜잭션(transaction)이라고 하며 CentOS 6 에 내장된 yum 부터는 트랜잭션 내역을 확인하고 rollback 을 할 수 있습니다. 


트랜잭션 목록 보기

yum history 명령을 옵션없이 실행하거나 옵션에 list 를 주면 최근 트랜잭션 목록을 볼 수 있습니다.

# yum history list


ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
24 | lesstif <lesstif> | 2017-07-12 12:02 | Install | 5
23 | lesstif <lesstif> | 2017-06-28 11:38 | Install | 1
22 | lesstif <lesstif> | 2017-06-28 11:11 | Install | 15
21 | lesstif <lesstif> | 2017-06-28 11:11 | Erase | 6 EE
20 | lesstif <lesstif> | 2017-06-28 10:57 | Install | 1 EE
19 | lesstif <lesstif> | 2017-06-28 10:57 | Install | 1
18 | lesstif <lesstif> | 2017-06-19 09:30 | Install | 6
17 | lesstif <lesstif> | 2017-06-19 09:21 | I, O, U | 255 EE
16 | lesstif <lesstif> | 2017-06-19 09:18 | Install | 1
15 | lesstif <lesstif> | 2017-06-19 09:16 | I, U | 8
14 | root <root> | 2015-01-30 04:12 | Install | 3

yum history list 실행 결과

ID는 트랜잭션 번호를 의미하며 수차적이므로 총 24번의 트랜잭션이 있었음을 나타내며 Action 은 실행한 행동이며 Altered 는 트랜잭션에 의해 변경된 패키지의 갯수를 나타냅니다.


이력에 표시되는 모든 Action 항목은 아래 표에 있으며 여러 개의 Action 이 있었을 경우 I,U 같이 축약어로 표시됩니다.

Action
축약어
의미
Downgrade D 최소 한개의 패키지가 예전 버전으로 다운그레이드됨.
Erase E 최소 한개의 패키지가 삭제됨.
Install I 최소 한 개의 패키지가 설치됨.
Obsoleting O 최소 한개의 패키지가 obsolete 로 표시됨.
Reinstall R 최소 한개의패키지가 재설치됨.
Update U 최소 한개의 패키지가 새로운 버전으로 업데이트됨.
가능한 Action

Altered 필드는 변경된 패키지의 숫자와 변경 내역에 대한 기호가 표시되며 각 기호의 의미는 다음과 같습니다.

기호
의미
< 트랜잭션이 완료되기 전에 rpmdb 데이타베이스가 yum 이 아닌 외부에서 변경됨.
> 트랜잭션이 완료된 후에 rpmdb 데이타베이스가 yum 이 아닌 외부에서 변경됨.
* 트랜잭션을 종료하지 못함
# 트랜잭션이 성공적으로 종료되었지만 yum 이 0 아닌 종료 코드를 전달함.
E 트랜잭션이 성공적으로 종료되었지만 에러나 워닝이 표시됨.
P 트랜잭션이 성공적으로 종료되었지만 rpmdb 데이타베이스에 문제가 계속 존재함.
s

트랜잭션이 성공적으로 종료되었지만 --skip-broken 옵션을 사용하였으므로 어떤 패키지는 건너뜀.

Alteted 필드 의미

ID 가 24 번인 트랜잭션의 경우 Acton 이 Install 이고 Altered 항목이 5 이므로 5개의 패키지를 설치했다는 뜻입니다.

ID 가 21인 작업의 경우는 6개의 패키지를 삭제했다는 로그이며 17번인 트랜잭션은 I, O, U 이므로 설치와 업데이트를 했고 몇몇 패키지는 이제는 불필요(Obsolete)해졌다는 의미입니다.


자세한 정보 보기

해당 트랜잭션의 자세한 정보를 보고 싶으면  info 명령어 뒤에 트랜잭션 id 를 적어주면 되며  독자들도 사용하고 있는 리눅스 시스템의 트랜잭션 목록에서 상세 작업 이력을 확인해 보기 바랍니다.

아래는 22 번 트랜잭션의 상세 내용을 보는 예제입니다.

yum history info 22


Transaction ID : 22
Begin time : Wed Jun 28 11:11:52 2017
Begin rpmdb : 378:16ce599ad759e8435336997b266340324c5b0671
End time : 11:11:55 2017 (3 seconds)
End rpmdb : 393:3035f14323d91e76579575a07b6b2c04986f7800
User : lesstif <lesstif>
Return-Code : Success


Command Line : install php70w-cli php70w-common php70w-gd php70w-mbstring php70w-mysqlnd php70w-pdo php70w-fpm php70w-xml


Transaction performed with:
Installed rpm-4.11.3-21.el7.x86_64 @base
Installed yum-3.4.3-150.el7.centos.noarch @base


Packages Altered:
Dep-Install libX11-1.6.3-3.el7.x86_64 @base
Dep-Install libX11-common-1.6.3-3.el7.noarch @base
Dep-Install libXau-1.0.8-2.1.el7.x86_64 @base
Dep-Install libXpm-3.5.11-3.el7.x86_64 @base
Dep-Install libjpeg-turbo-1.2.90-5.el7.x86_64 @base
Dep-Install libpng-2:1.5.13-7.el7_2.x86_64 @base
Dep-Install libxcb-1.11-4.el7.x86_64 @base
Install php70w-cli-7.0.20-1.w7.x86_64 @webtatic

강조한 부분처럼 해당 트랜잭션으로 실행한 명령어 및 변경된 패키지의 자세한 정보를 알수 있습니다.


되돌리기(Undo)

"history undo ID" 명령어로 특정 트랜잭션을 되돌릴 수 있으며 되돌리기 작업은 수행한 트랜잭션을 이전 상태로 되돌리는 것이므로 작업한 내용과 반대의 작업을 수행하게 됩니다.


즉 트랜잭션이 패키지 설치라면 해당 트랜잭션에서 설치된 패키지는 삭제되고 트랜잭션이 패키지 삭제라면 삭제한 패키지는 설치됩니다.

되돌리기도 새로운 트랜잭션이므로 성공적으로 종료되었을 경우 별도의 트랜잭션 ID 를 갖게 되므로 전체 트랜잭션 ID 는 1 이 증가됩니다.

독자들도 수행한 트랜잭션중에 하나를 골라서 되돌리기 작업을 수행해 보기 바랍니다.


다음은 필자의 리눅스 시스템의 마지막 트랜잭션(ID: 24)을 되돌리는 예제입니다.

yum history undo 24


되살리기(Redo)

"yum history redo ID" 명령어로 특정 트랜잭션을 되살릴 수 있습니다.

위에서 24번 트랜잭션으로 5개가 설치되고 트랜잭션 되돌리기로 삭제되었습니다. 이제 24번 트랜잭션에서 설치한 패키지를 재설치하려면 "yum history redo 24" 명령어로 24번 트랜잭션을 되살릴 수 있습니다.

이 작업은 25번 트랜잭션을 되돌리는 "yum history undo 25" 번과 비슷한 결과를 가져오게 됩니다.

 

출처 : https://www.lesstif.com/pages/viewpage.action?pageId=43844113

'Works > CentOS & RockyLinux' 카테고리의 다른 글

디스크가 HDD인지 SSD인지 확인하기  (0) 2018.10.24
강제 umount 방법 (umount : device is busy 발생시)  (0) 2018.10.22
CentOS7 Locale설정  (0) 2018.05.29
SFTP log 설정  (0) 2018.02.22
dig 개념 및 사용법  (0) 2017.11.01