소개


grep은 "global regular expression print"의 약어로, "파일 전체에서 정규 표현식과 일치하는 것을 출력하라"는 의미를 가지고 있다.


문자열 검색


-r 옵션는 recursive로서 서브 디렉토리까지 검색을 하게 된다.


파일에서 검색

grep "검색하고 싶은 문자열" [파일명]

디렉토리에서 검색

grep "검색하고 싶은 문자열" [디렉터리명]

grep -r "검색하고 싶은 문자열" [디렉터리명]


대소문자 구분 없이 검색


grep -r -i "검색하고 싶은 문자열" [디렉터리명]


정규 표현식 검색


정규 표현식은 특수한 기호를 사용해 검색하고 싶은 내용을 유연하게 표현하는 방법이다.


 기호

 설명

 ()

 그룹화

 |

 좌우 중 하나

 ?

 직전 표현이 0회 또는 1회 등장

 *

 직전 표현이 0회 이상 연속해서 등장

 +

 직전 표현이 1회 이상 연속해서 등장

 .

 임의의 한 문자

 ^

 줄 머리

 $

 줄 끝

 \ 다음에 오는 문자를 이스케이프



이름 찾기


grep -r -i -E "(sunghoon|성훈)" [디렉터리명]


핸드폰 번호 찾기


grep -r -i -E "0[0-9]{1,2}-[0-9]{3,4}-[0-9]{4}" [디렉터리명]


'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] sudo  (0) 2017.02.03
[리눅스] strings 명령어  (0) 2016.08.30
[리눅스] vi 에디터에서 텍스트 바꾸기  (0) 2016.06.08
[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] find  (0) 2015.12.16
Posted by SungHoon, Park
,

소개


sudo는 "substitute user do"라는 뜻으로서, 일부 또는 전체 명령어를 ROOT 계정 또는 다른 계정의 권한으로 실행할 수 있도록 한다.


su vs sudo


su 명령어는 다른 계정으로 전환을 한다. 사용이 필요한 명령어가 있어 ROOT 계정으로 전환을 하고 명령어 수행 했더라도 계속 접속이 유지되므로 보안에 문제가 발생하게 된다. sudo 명령어는 특정 작업에만 수행할 수 있는 권한을 부여해 주는 것이므로 이러한 보안 문제점을 방지할 수 있다.


사용법


sudo [실행할 명령어] 형태로 사용이 가능하다. 명령어를 입력 후 엔터키를 입력하게 되면 본인의 비밀번호를 묻는다. 비밀번호를 정상적으로 입력하게 되면 /etc/sudoers에 등록된 사용자인지 검증을 한 후 명령어를 실행하게 된다.


ROOT 계정으로 수행


sudo useradd user1


다른 계정으로 수행


sudo -u sunghoon useradd user1


sudoers를 이용한 권한 부여


sudo vi /etc/sudoers 편집으로 권한을 추가할 수 있다. 추가할 계정의 권한을 파일 하단에 추가하면 된다.


user1 계정에 useradd, usermod 권한을 추가


user1 ALL=/usr/sbin/useradd,/usr/sbin/usermod


참고자료


'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] grep  (0) 2017.02.10
[리눅스] strings 명령어  (0) 2016.08.30
[리눅스] vi 에디터에서 텍스트 바꾸기  (0) 2016.06.08
[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] find  (0) 2015.12.16
Posted by SungHoon, Park
,

문제점

아파치에서 에러 페이지 설정을 위해 다음과 같이 설정하였다.


ErrorDocument 404 /standby/notfound.html


그러나 이상하게도 크롬, 파이어폭스 브라우저에서는 404 에러 페이지가 잘 노출되나, IE 브라우저에서는 에러 페이지가 노출되지 않았다.

원인

이유를 알지 못해 계속 헤맸는데, 확인해보니 IE 브라우저 버그였다.

IE 브라우저는 512 바이트 이상이여야 404 에러 페이지를 노출하고, 512 바이트 이하일 경우 IE 브라우저에서 '웹 페이지를 찾을 수 없습니다' 메세지를 노출해준다.

해결

  • 에러 페이지의 크기를 512 바이트 이상으로 설정하여 정상적으로 노출될 수 있도록 변경하였다.
  • 또 다른 방법으로는 인터넷 옵션에서 'HTTP 오류 메세지 표시'를 체크 해제하는 방법이 있는데, 근본적인 해결책은 아닌듯 하다.

참고

각 에러코드마다 파일 사이즈가 다르니 다음 URL을 확인해보는 것도 좋을 것 같다.

http://www.404-error-page.com/404-error-page-too-short-problem-microsoft-ie.shtml




Posted by SungHoon, Park
,

strings 명령어는 바이너리 파일에서 문자열을 추출하는 역할을 한다.

아파치의 mod_jk.so 버전을 확인하고 싶을 경우 다음과 같이 실행하면 된다.


예제) strings mod_jk.so | grep mod_jk/


mod_jk/1.2.31 (1026297)

mod_jk/1.2.31


'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] grep  (0) 2017.02.10
[리눅스] sudo  (0) 2017.02.03
[리눅스] vi 에디터에서 텍스트 바꾸기  (0) 2016.06.08
[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] find  (0) 2015.12.16
Posted by SungHoon, Park
,

윈도우즈에서 작업한 파일을 리눅스에서 열 경우 라인 끝마다 ^M 문자가 들어간 것을 볼 수 있다.

특히, 쉘스크립트 등에 포함이 될 경우 쉘이 동작하지 않게 된다.

아파치쪽 SSL 패스워드(SSLPassPhraseDialog) 설정과 톰캣쪽 환경설정 파일(setenv.sh)이 쉘로 되어 있었는데 ^M 떄문에 정상적으로 뜨지 않아 헤맴 -ㅅ-;


어쨌든 ^M을 없애는 방법은 간단하다.

vi 에디터를 열고,


:%s/^M//g

(^M은 단순 텍스트 입력이 아닌 Ctrl + v + m으로 입력하여야 한다.)


이렇게 명령어를 날려주면 된다.


Posted by SungHoon, Park
,

vi 에디터에서 텍스트 바꾸는 법이다.

기본형식은 다음과 같다. (맨앞에 :(콜론)이 있음)


:%s/찾는텍스트/변경할텍스트/옵션


[옵션설명]

  • i : 대소문자 구분없이 변경
  • g : 전역으로 치환
  • c : 찾을때마다 변경할 것인지 물어봄


1. foo 텍스트를 bar로 모두 변경

예제) :%s/foo/bar/g


2. foo 텍스트를 bar로 모두 변경하며, 변경전 바꿔도 되는지 물어본다.

예제) :%s/foo/bar/gc


3. 대소문자 구분없이 모두 변경

예제) :%s/foo/bar/gi



'서버 > 리눅스 명령어' 카테고리의 다른 글

[리눅스] sudo  (0) 2017.02.03
[리눅스] strings 명령어  (0) 2016.08.30
[리눅스] vi 에디터 기본  (0) 2015.12.28
[리눅스] find  (0) 2015.12.16
[리눅스] sort  (0) 2015.12.09
Posted by SungHoon, Park
,

소프트링크(심볼릭링크, symbolic link)

1. ln -s 명령을 통해서 소프트링크(이하 심볼릭링크)를 생성한다.

예제) ln -s original.txt soft.txt


심볼릭링크는 바로가기와 동일하다고 할 수 있다. 원본인 original.txt가 삭제가 된다면 심볼릭링크는 깨지게 되고 당연히 original.txt에 접근할 수 없다. 반대로 soft.txt를 지우더라도 링크만 삭제되는 것이기에 원본에는 영향이 가지 않는다.


2. 생성후 확인하기

예제) ln -ali


790572 -rw-rw-r--  2 centos centos   12 2016-05-11 00:44 original.txt

790560 lrwxrwxrwx  1 centos centos   12 2016-05-11 00:55 soft.txt -> original.txt


하드링크(hard link)

1. ln 명령을 통해서 하드링크를 생성한다.

예제) ln original.txt hard.txt


물리적인 데이터 위치 정보를 나타내주는 inode값이 같은 링크방식이다.

쉽게 말하면 파일에 또다른 이름이 있다고 생각하면 이해하기 편하다.

원본인 original.txt 파일을 삭제하더라도 hard.txt라는 다른 이름이 계속 존재하기 때문에 파일은 계속 유지될 수 있다.


2. 생성후 확인하기

예제) ln -ali


790572 -rw-rw-r--  2 centos centos   12 2016-05-11 00:44 hard.txt

790572 -rw-rw-r--  2 centos centos   12 2016-05-11 00:44 original.txt


i옵션을 붙여주면 inode 정보가 추가로 출력된다.


※ inode란?

우리는 탐색기 등을 통해서 트리구조로 파일을 쉽게 확인하고 볼 수 있다. 이것을 파일테이블이라고 한다.

이 파일테이블의 파일정보에는 물리적 저장공간을 가리키는 위치정보가 포함되는데 이것이 바로 inode값이다. inode값은 별도의 inode 테이블에 존재한다.


사용자 파일 테이블(a.txt) -> 파일 테이블(a.txt=100) -> inode 테이블(100=xxx) -> 하드디스크(xxx)


[참고자료]

http://blog.naver.com/pk920207/110147243183

http://mycute7.blog.me/220521823025



Posted by SungHoon, Park
,

mod_headers 모듈은 HTTP 요청(응답) 헤더를 수정 및 삭제할 수 있는 모듈이다.

서버 설정 지시자의 거의 모든 부분에서 사용할 수 있으며, <Location>, <Directory>, <IfModule>, <VirtualHost>에서 사용하면 해당 범위에서만 기능을 제한할 수도 있다.


RequestHeader, Header

- 문법 : Header [condition] set|append|add|unset|echo header [value] [replacement] [early|env=[!]variable]

 (요청헤더는 RequestHeader 지시자를 사용)


- HTTP 요청 및 응답 헤더의 정보를 수정 및 삭제한다.

- 첫번째 condition은 onsuccess, always 값이 올 수 있으며 생략도 가능하다.

- 두번째 값은 행위를 지정한다.


 옵션

설명

 set

 헤더정보를 설정한다. 이미 헤더에 같은 이름의 정보가 있다면 덮어쓴다. 

append

 기존 헤더에 값을 추가한다.

add

 헤더에 값을 새롭게 추가한다. 중복 헤더값이 발생할 수도 있으므로 주의한다.

unset

 지정된 이름의 헤더정보를 삭제한다.

echo

 HTTP 요청헤더에 지정된 이름의 헤더정보가 있을 경우, HTTP 응답 헤더에도 추가한다.


- 예제)

IE 브라우저 호환성보기 끄기

BrowserMatch MSIE is-msie

Header set X-UA-Compatible IE=edge env=is-msie


특정페이지 캐시하지 않도록 설정

<Location "/admin">

  Header set Cache-Control "no-cache, no-store"

</Location>


특정 Content-Type 처리 (대문자로 치환)

SetEnvIf Content-Type application/json is_json

Header set ContentType APPLICATION/JSON env=is_json



※ 상세한 헤더정보 디버깅을 위해선 curl -I 옵션을 통해 헤더정보를 확인할 수 있다.

curl -I http://alpha.test.example.com/xxx.do



※ 참고자료

- 리눅스를 활용한 회사 인프라 구축의 모든 것



Posted by SungHoon, Park
,

찾았던 것은 Windows용 2.2.27 버전이였는데 없는 것 같다. ㅠㅠ


Windows용 아파치 다운로드 경로

https://archive.apache.org/dist/httpd/binaries/win32/




Posted by SungHoon, Park
,

mod_rewrite 모듈은 규칙 기반으로 URL을 동적으로 Redirect 및 Rewrite 처리를 해준다.

특정 URL 패턴에 대한 리다이렉트 처리를 할 때 자주 사용하며, RESTful한 웹서비스도 제공할 수 있다.


기본형식


RewriteEngine On

RewriteCond TestString  CondPattern [Flag]

RewriteRule  Pattern     Substitution [Flag]


먼저 RewriteRule의 Pattern을 체크.

Pattern을 통과하면 RewriteRule 상단의 RewriteCond를 체크.

순차적으로 RewriteCond의 TestString의 CondPattern을 체크.

CondPattern을 통과하면 RewriteRule의 Substitution을 최종적으로 처리한다.


[그림1] Ruleset 흐름도


RewriteEngine On|Off

모듈 사용여부를 설정한다.


RewriteLog

mod_rewrite 모듈에서 처리하는 내용에 대해 로그를 남긴다.


(형식)

RewriteLog logs/rewrite.log


RewriteCond

RewriteRule에 대한 조건문

RewriteRule과 달리 단독으로 사용할 수 없으며, 최상단부터 순차적으로 실행된다.


[그림2] RewriteCond 흐름도


(형식)

RewriteCond TestString CondPattern


1) TestString

- 테스트 대상 텍스트

- 웹서버 변수를 사용할 수 있다. %{변수명} 형식이다.


[그림3] 서버변수


2) CondPattern

- TestString과 일치할 패턴을 지정하며, 정규표현식을 사용할 수 있다.

- 정규표현식 사용 가능

- RewriteCond 앞에 RewriteRule에서 사용한 정규표현식에서 그룹으로 지정된 값을 사용할 수 있다. $0~$9 형식.


3) Flag


 플래그

의미

 설명

 NC

 NoCase

 대소문자 무시한다.

 OR

ORNext

 여러개의 RewriteCond를 사용할 경우 OR 조건으로 사용된다.

 (RewriteCond가 연속으로 있을 경우는 AND 조건이다.)


RewriteRule

조건에 따른 rewrite 규칙을 설정하고 해당 규칙에 따른 동작을 지정한다.


(양식)

RewriteRule Pattern Substitution [Flag, Flag...]


1) Pattern

- 일치시킬 패턴을 지정하며, 정규표현식을 사용할 수 있다. 또한 정규표현식에서 그룹으로 지정한 값을 Substitution에서 사용할 수 있다. $0 ~ $9까지 사용 가능함.


2) Substitution

- Pattern이 일치할 경우 Rewrite 처리할 URL을 지정한다.


3) Flag

- 처리할 동작을 지정한다.

전체 플래그명, 축약어 모두 사용가능하다.


플래그

의미

설명

E

Env

 조건이 일치할 경우 특정 환경변수를 설정하거나 해제한다. 

F

Forbidden

 403 Forbidden으로 응답한다.
 Forbidden은 Last의 의미를 포함한다.
 외부에서 접근하면 안되는 리소스를 차단할 경우 유용하다.

G

Gone

 410 Gone으로 응답한다.

L

Last

 더는 RewriteRule 처리를 하지 않는다는 의미다.

 개발언어에서 break문과 비슷하다고 할 수 있다. 

N

Next

 Rewriting 프로세스를 재시작한다.

R

Redirect

 302 Redirect로 응답한다.

 R=301은 HTTP 301 Moved Permanently 응답으로 Redirect 한다.

NC

NoCase

 대소문자를 무시한다.

PT

Passthru

 타겟URL이 http(s)로 시작하지 않아도 URL 처리를 할 수 있도록 한다.

 ※ 기본적으로 타겟URL에 http(s)를 적지 않으면 디렉토리 경로로 인식하게 된다.

 /로 시작한다면 절대경로, /로 시작하지 않으면 상대경로로 처리한다.

 QSA

qsappend

 qsappend (Query String Apped)

 QUERY_STRING 변수값을 타겟URL에 유지시켜준다.



※ 참고자료

- 리눅스를 활용한 회사 인프라 구축의 모든 것

https://httpd.apache.org/docs/2.0/ko/misc/rewriteguide.html

http://soul0.tistory.com/139

http://soul0.tistory.com/270

http://martinmelin.se/rewrite-rule-tester/


'서버 > 아파치' 카테고리의 다른 글

[아파치] mod_headers 모듈  (0) 2016.03.06
[아파치] Windows용 다운로드 경로  (0) 2016.03.06
[아파치] mod_setenvif 모듈  (0) 2016.02.22
[아파치]VirtualHost 설정  (0) 2016.02.21
[아파치]httpd.conf 서버설정  (0) 2016.02.20
Posted by SungHoon, Park
,