mongoDB 설치 - CentOS 7

  • add mongoDB repository

    # vi /etc/yum.repos.d/mongodb.repo
    [mongodb-4.0]
    name=mongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64
    gpgchecl=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
  • install nginx

    # yum install -y mongodb-org
  • find mongodb config file

    # cat -n /usr/lib/systemd/system/mongod.service
    ...
    9 Environment="OPTIONS=-f /etc/mongod.conf"
    ...
  • start mongodb service

    # systemctl start mongod

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

[CentOS 7] Nginx 설치  (0) 2019.04.29
[Network] OSI 7계층  (0) 2019.04.03
[Linux] 자주 사용하는 명령어 (grep, find, exec, xargs, awk)  (1) 2019.02.26
[Linux] nohup 사용  (0) 2019.02.01
[Ubuntu] AWS - Ubuntu locale 한글 변경  (0) 2019.01.14

Nginx 설치 - CentOS 7

  • add nginx repository

    # vi /etc/yum.repos.d/nginx.repo
    [nginx]
    name=Nginx Repository
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgchecl=0
    enabled=1
  • install nginx

    # yum install -y nginx
  • if not use 80 port, setting firewall and modify nginx conf file

    # firewall-cmd --permanent --zone=public --add-port=81/tcp
    # firewall-cmd --reload
    # firewall-cmd --list-ports
    ...
    # vi /etc/nginx/conf.d/default.conf
    ...
      listen 81;
    ...

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

[CentOS 7] mongoDB 설치  (0) 2019.04.29
[Network] OSI 7계층  (0) 2019.04.03
[Linux] 자주 사용하는 명령어 (grep, find, exec, xargs, awk)  (1) 2019.02.26
[Linux] nohup 사용  (0) 2019.02.01
[Ubuntu] AWS - Ubuntu locale 한글 변경  (0) 2019.01.14

계층별 주요 기능 요약

  • 물리 계층 (Physical Layer, L1)

    • 기계적, 전기적인 통신망 접면의 정의

    • 데이터를 전기적인 신호로 변환해서 주고받는 기능만 할 뿐

    • 대표 장비 : 통신 케이블, 리피터, 허브 등

  • 데이터링크 계층 (DataLink Layer 2, L2)

    • 데이타 링크의 제어 (프레임화, 데이터 투명성, 오류 제어 등)

    • 맥 주소를 가지고 통신한다.

    • 대표 장비 :브리지, 스위치 등

  • 네트워크 계층 (Network Layer 3, L3)

    • 경로 배정, 주소, 호 설정 및 해지 등

    • 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능(라우팅)

    • 주소부여(IP), 경로설정(Route)

  • 전송 계층 (Transport Layer 4, L4)

    • 종단 간의 신뢰성 있고 효율적인 메세지 전송(연결 관리,에러제어,데이타 분리,흐름제어 등)

    • 오류검출 및 복구와 흐름제어, 중복검사 등을 수행

    • TCP 프로토콜 / UDP 프로토콜

  • 세션 계층 (Session Layer 5, L5)

    • 응용 개체들간의 대화, 동기화 제어, 연결세션관리 등

    • 데이터가 통신하기 위한 논리적인 연결

    • 세션 설정, 유지, 종료, 전송 중단시 복구 등

    • 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)

    • TCP/IP 세션을 만들고 없애는 책임

  • 표현 계층 (Presentation Layer 6, L6)

    • 전송 형식 협상, 데이타의 표현 방식 변환 등

    • MIME 인코딩이나 암호화 등의 동작

    • 데이터 종류 구분(해당 데이터가 TEXT인지, 그림인지, GIF인지 JPG인지의 구분)

  • 응용 계층 (Application Layer 7, L7)

    • 화일 전송, 접근 및 관리 및 문서, 메세지 교환 등

    • 최종 목적지로서 HTTP, FTP, SMTP, POP3, IMAP, Telnet 등과 같은 프로토콜

    • 일반적인 응용 서비스를 수행


참고

- grep

 : 파일 내용이나 콘솔상의 출력 내용에서 특정 문자열을 찾아서 보여줍니다.


1) 파일에서 word 문자열을 찾아 출력합니다.

$ grep word test.txt


2) 현재 디렉토리상에 있는 모든 파일에서 word 문자열이 포함된 줄을 찾아 출력합니다.

$ grep word *


3) 현재 디렉토리 및 하위에 있는 모든 파일에서 word 문자열이 포함된 줄을 찾아 출력합니다.

$ grep -r word * 


4) 파일에서 word 문자열을 찾아 다음 3줄을 포함해서 출력합니다.

$ grep word test.txt -A 3


5) 파일에서 word 문자열을 찾아 이전 3줄을 포함해서 출력합니다.

$ grep word test.txt -B 3


6) 파일에서 word 문자열을 찾아 줄번호를 포함해서 출력합니다.

$ grep word test.txt -n


7) 파일에서 word 문자열이 포함된 줄을 제외하고 출력합니다.

$ grep -v word test.txt


8) 파일에서 (word1 or word2) 문자열이 포함된 줄을 출력합니다. ( or 연산자 = |  는 특수기호이므로 역슬래시를 붙여줍니다. )

$ grep "word1|word2" test.txt


9) 파일에서 (word1 and word2) 문자열이 포함된 줄을 출력합니다.

$ grep word1 test.txt | grep word2


10) 옵션 혼합 가능

$ grep -rn word /home/test -B 5 -A 3


=> /home/test 폴더 하위 모든 파일에서 word 문자열을 찾아서 해당 문자열 이전 5줄, 이후 3줄에 줄번호를 포함해서 출력합니다.


11) pipe 로 다른 명령어의 표준 출력과 연계가능

$ cat /home/test/test.txt | grep word



- find

 : 파일 및 디렉토리 등 검색할 때 사용합니다


1) /home/test 하위 파일, 디렉토리, 링크, 소켓 등등 모든 것을 출력합니다.

$ find /home/test


2) /home/test 하위 파일만 출력합니다. ( -type d = 디렉토리만 출력 )

$ find /home/test -type f


3) /home/test 하위 파일 중 크기가 5MB 이상인 파일만 출력합니다.

$ find /home/test -type f -size +5M


4) /home/test 하위 파일 중 크기가 5MB 이상이고 권한이 644인 파일만 출력합니다.

$ find /home/test -type f -size +5M -perm 644


5) /home/test 하위 파일 중 크기가 5MB 이상이고 파일이 변경된지 5일이 지난 파일만 출력합니다.

(일자 옵션 - s : 초, m : 분, h : 시, d : 일, w : 주)

$ find /home/test -type f -size +5M -mtime +5d 



- exec

 : 앞선 명령어의 결과를 입력으로 받아 “\;” 라는 표기자를 만날때까지 읽고 실행

 : 즉 exec 커맨드의 끝을 ';'(세미콜론)으로 표기해줘야함

 : '+' 옵션은 인자를 연속으로 입력해서 커맨드 한번으로 실행하게끔 해줌


/home/test 에 아래와 같이 3개의 파일이 있을 경우

/home/test/a.txt

/home/test/b.txt

/home/test/c.txt


1) /home/test 하위 파일 중 크기가 5MB 이상인 파일의 출력을 인자로 하여 ls -l 명령어를 실행합니다.

$ find /home/test -type f -size +5M -exec ls -l {} \;

({} <- 위치에 find 결과값의 인자가 들어갑니다.)


위 명령어를 풀어서 써보자면...

$ find /home/test -type f -size +5M -exec ls -l {} \;

=>  $ ls -l  /home/test/a.txt

    $ ls -l  /home/test/b.txt

    $ ls -l  /home/test/c.txt


1) /home/test 하위 파일 중 크기가 5MB 이상인 파일의 출력을 인자로 하여 chmod 명령어를 실행합니다.

$ find /home/test -type f -size +5M -exec chmod 755 {} +


위 명령어를 풀어서 써보자면...

$ find /home/test -type f -size +5M -exec chmod 755 {} +

=>  $ chmod 755 /home/test/a.txt /home/test/b.txt /home/test/c.txt



- xargs

 : exec 커맨드의 + 옵션과 유사하다.

 : 앞선 명령어의 결과를 입력으로 받아 인자를 연속으로 나열하여 커맨드를 실행함

 : {} 문자열은 다른 문자열로 사용할 수 있다.


1) -I 옵션으로 txt 파일을 backup 폴더로 복사 (권장)

$ find /home/test -type f | xargs -I{} cp {} /home/test/backup


2) -i 옵션으로 txt 파일을 backup 폴더로 복사

$ find /home/test -type f | xargs -i cp {} /home/test/backup


3) {} 대신 다른 문자열 사용

$ find /home/test -type f | xargs -IARGS cp ARGS /home/test/backup


매뉴얼에는 -i 옵션은 옛날 방식이므로 -I 옵션을 사용하도록 권고하고 있다. -i 옵션에서 아무것도 지정하지 않을 경우 기본값으로 "{}" 문자열이 사용되고, -I 옵션에는 기본값이 없으므로 반드시 -I{} 이런 식으로 사용해야 한다.



- awk

 : 패턴 탐색과 처리를 위한 명령어로 간단하게 파일에서 결과를 추려내고 가공하여 원하는 결과물을 만들어내는 명령어이다.

 : F 옵션을 통해 구분자를 지정할 수 있다.

 : 구분된 인자는 $1 부터 차례대로 할당된다.


기본 문법

$ awk 'pattern' filename

$ awk '{action}'  filename

$ awk 'pattern' '{action}' filename

$ awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ...  ]


ex) $ ls -al

total 1111

drwxr-xr-x  6 test  staff      192  2 20 10:10  .

drwxr-xr-x  4 test  staff      128  2 20 10:10  ..

-rwxr-xr-x  1 test  staff       100  2 20 10:10 a.txt

-rwxr-xr-x  1 test  staff       100  2 20 10:10 b.txt

-rw-r--r--   1 test  staff       100  2 20 10:10 c.txt


공백으로 분리하면

$1  : '-rw-r--r--'

$2 : '1'

$3 : 'test'

$4 : 'staff'

$5 : '100'

$6 : '2'

$7 : '20'

$8 : '10:10'

$9 : 'c.txt'


$ ls -al | awk -F " " '{print $9}'

.

..

a.txt

b.txt

c.txt


(추가 사항이 생길 경우 수정할 예정입니다.)

- 리눅스에서 파일을 일반적으로 백그라운드로 실행을 하면

  터미널, 콘솔창 등의 연결 프로그램을 닫으면 세션이 종료되어

  백그라운드에서 실행되던 프로세스도 같이 종료되어 버린다.


- 해당 문제를 해결하기 위해 nohup 명령어를 사용한다.


[사용법]

$ nohup ./script.sh &

$ nohup java main.class &

$ nohup python test.py &


등등...


[출력]

* 기본 출력은 실행파일과 같은 위치에 nohup.out 이라는 파일에 저장된다.


* 출력 파일 변경은 일반적인 redirect 옵션을 사용

$ nohup python test.py > print.log &


* 출력 파일 내용이 실시간으로 생기지 않고 어느정도 내용이 쌓이면 저장되는데,

  파이썬의 경우에는 -u 옵션 사용해서 바로 확인이 가능하다.

$ nohup python -u test.py > print.log &

[Ubuntu locale 한글 변경]


- 현재 locale 확인

$ locale


- 설치

$ sudo apt-get install language-pack-ko


- 한글 추가

$ sudo locale-gen ko_KR.UTF-8


- 한글 적용

1)

$ sudo dpkg-reconfigure locales


2-1) 명령어 방법

$ sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX


2-2) 직접 파일 수정 방법

$ vi /etc/default/locale

LANG=ko_KR.UTF-8

LC_MESSAGES=POSIX


* 이후 ssh 재접속 및 서버 재부팅 후 확인

* 서버에서 자동화를 위해 expect 쉘스크립트를 작성하면서 겪은 문제입니다.


[스크립트 예시]


#!/bin/bash

expect << EOL
spawn telnet 192.168.0.1

expect -timeout 2 "*ogin:"
send "test\n"

expect -timeout 2 "*assword:"
send "test\n"

#expect -timeout 2 "*@TEST_SERVER"
send "exit\n"

sleep 1
expect eof

echo "hahaha"


[실행 결과]


test@TEST_SERVER> exit 


Connection closed by foreign host.

invalid command name "echo"

    while executing

"echo "hahaha""



[원인]

- 위 방식은 expect 사용방식 중 HEREDOC 사용할 경우 시작과 끝을 잘 표시해줘야 한다.

(vscode 에서는 문서 형식을 shell script 로 하면 이상함을 바로 느낄 수 있다.)


expect << EOL   # 시작

...

EOL                 # 끝


- 위 스크립트는 끝부분을 표시해 주지 않아서 expect 관련 명령어로 인식되어 오류가 발생했다.



[수정]

#!/bin/bash

expect << EOL
spawn telnet 192.168.0.1

expect -timeout 2 "*ogin:"
send "test\n"

expect -timeout 2 "*assword:"
send "test\n"

#expect -timeout 2 "*@TEST_SERVER"
send "exit\n"

sleep 1
expect eof
EOL

echo "hahaha"


test@TEST_SERVER> exit 


Connection closed by foreign host.

hahaha



- 정상적으로 expect 종료 후 echo 명령어가 실행된다.




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

[Linux] nohup 사용  (0) 2019.02.01
[Ubuntu] AWS - Ubuntu locale 한글 변경  (0) 2019.01.14
[CentOS 7] iptables 로그 남기기  (0) 2018.12.14
[FCM] 서버측 UnknownHostException  (0) 2018.10.01
[CentOS 7] systemd 기본 설정  (0) 2018.09.30

* 참고 링크

https://unix.stackexchange.com/questions/423778/log-iptables-events-on-centos-7

http://flowvalue.tistory.com/2



[rsyslog 수정 (root)]

# vi /etc/rsyslog.conf


// add rule

...

#### RULES ####

...

kern.* /var/log/iptables.log 



[rsyslog 재시작 (root)]

# service rsyslog restart  

or  

# systemctl restart rsyslog



[iptables 수정 (root)]

# vi /etc/sysconfig/iptables


*filter

...

*nat

...

-A PREROUTING ~~~

-A INPUT ~~~

-A OUTPUT ~~~

...

-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " 

COMMIT



[iptables 재시작 (root)]

# systemctl restart iptables


log level - warn

iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4

iptables -A FORWARD -j LOG --log-prefix "BAD_FORWARD: " --log-level 4

iptables -A OUTPUT -j LOG --log-prefix "BAD_OUTPUT: " --log-level 4


log level - debug

iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 7

iptables -A FORWARD -j LOG --log-prefix "BAD_FORWARD: " --log-level 7

iptables -A OUTPUT -j LOG --log-prefix "BAD_OUTPUT: " --log-level 7



- 기존 서버에서 푸시를 잘 보내고 있었는데 물리적 서버 이전 작업 후(IP 변경됨) 푸시가 안감

- 아래와 같은 오류 발생


java.net.UnknownHostException: fcm.googleapis.com

        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)

        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

        at java.net.Socket.connect(Socket.java:579)

       ...


- URL 은 제대로 적었는데...??

- 서버 이전 후 본딩 적용 하면서 네트워크 설정이 변경됨

- '/etc/sysconfig/network-scripts/ifcfg-네트워크이름' 해당 파일에서 DNS 로 구글 추가해주면 해결



# vi /etc/sysconfig/network-scripts/ifcfg-네트워크이름

...

...

...

DNS1=8.8.8.8




출처: http://liveupdate.tistory.com/235 [Live Update]


파일위치

/etc/systemd  기본설정

/usr/lib/systemd : 바이너리

/usr/lib/systemd/system : 타겟유닛

 

부팅 시간 표시

# systemd-analyze

 

서비스별 초기화 시간

# systemd-analyze blame

 

서비스 목록 확인

# systemctl

 

전체 서비스

# systemctl list-unit-files

 

서비스 정보보기

# systemctl show sshd

 

서비스 제어

부팅시 활성화 여부

# systemctl disable 서비스명

# systemctl enable 서비스명

 

시작 중지

# systemctl start 서비스명

# systemctl stop 서비스명

# systemctl restart 서비스명

# systemctl reload 서비스명

# systemctl kill 서비스명

 

서비스 설정반영

# systemctl daemon-reload

 

의존성 파악

# systemctl list-dependencides 서비스명

 

systemd 서비스 추가

# vi /usr/lib/systemd/system/my.service

[Unit]

Description=서비스설명

After=svslog.target

After=network.target

 

[Service]

Type=forking

User=MyUser

Group=MyGroup

Restart=always

ExecStart=실행할 바이너리,스크립트

ExecStop=중지할 바이너리,스크립트

 

[Install]

WantedBy=multi-user.target

 

위처럼 작성  해당 서비스를 enable 시켜준다.

 



서비스 시작 중지시 권한문제 발생하는 경우가 있는데 루트 획득후 데몬을 재시작.

# systemctl daemon-reexec


하지만 이래도 안되는 경우가 발생. 

# setenforce 0


서비스 처리 후에 

# setenforce 1





서비스를 disable 했는데도 계속 보이면, 아예 리셋

# systemctl reset-failed



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

[CentOS 7] iptables 로그 남기기  (0) 2018.12.14
[FCM] 서버측 UnknownHostException  (0) 2018.10.01
크롤링 robots.txt 주의점  (0) 2018.09.19
[Linux] lsof  (0) 2018.09.17
리눅스 터미널 명령어 종류  (0) 2018.09.17

+ Recent posts