Linux 콘솔에서는 기본적으로 하나의 foreground job 을 수행할 수 있는데, 여러 개의 작업을 동시에 실행할 때에는 screen 명령을 이용해서 가상의 콘솔을 이용할 수 있다.


1. 기본 사용법


> screen 



2. 스크린 추가하기


^A^C



3. 스크린 닫기


exit : 현재 스크린 닫기

^D : 현재 스크린 닫기

^A\ : 전체 스크린 종료 및 screen 명령 종료



4. 스크린 전환하기


^A^P : 이전 번호의 스크린으로

^A^N : 다음 번호의 스크린으로

^A0, ^A1, ... ^A9 : 해당 번호의 스크린으로 이동

^A' : 이동할 스크린 번호 입력해서 이동

^A^A : 바로 전에 사용한 스크린으로 이동



5. 현재 스크린 확인


^AN : 현재 스크린 번호 확인

^A^W : 전체 스크린 리스트 확인





신고
 
 
Posted by ShineUm
 
 

Linux에서는 여러 개의 프로그램을 동시에 실행시킬 수가 있는데, 


하나의 콘솔창에서는 보통 하나의 Job만 foreground에서 실행이 가능하고, 나머지 Job은 Background에서 실행이 된다.


이 포스트에서는 Foreground / Background Job을 관리하는 방법에 대해서 알아본다.


1. Job


현재 콘솔에서 실행되고 있는 Job들의 리스트를 확인하는 명령어


> jobs 



2. 백그라운드에서 프로그램을 실행하는 방법 


명령 끝에 '&' 를 붙여준다. 실행 하게 되면 job id와 프로세스 id 를 보여준다. (아래 예제에서는 job id = 1, process id = 910)


> sleep 1000 &

[1]+ 910



3. 현재 실행중인 명령을 잠시 중단하는 방법


명령어 실행 후 ^Z  (ctrl + z) 를 입력한다.


> sleep 1000 &

^Z
[1]+ Stopped          sleep 1000


Stopped 라고 나오지만 실제로는 종료되지 않은 상태로 남아 있다. (jobs 명령어로 확인이 가능)



4. 잠시 중단한 명령을 백그라운드로 보내는 방법


bg %[id]


> bg %1

[1]+ sleep 1000 &



5. 백그라운드에서 실행중인 job을 foreground로 바꾸는 방법


fg %[id]


> fg %1

sleep 1000



6. 실행 중인 명령을 중단하는 방법


명령어 실행 후 ^C (ctrl + c) 를 입력한다.



참고로 백그라운드에서 작업 중인 명령을 종료하기 위해서는 해당 job을 foreground로 넘긴 후 ^C 를 입력하면 된다.


혹은 kill 명령어를 이용해서 해당 process 를 종료 하면 된다. (process id 는 ps 명령어로 검색한다.)


> kill 910







신고
 
 
Posted by ShineUm
 
 

아래 그림에서 처럼 Host A (클라이언트) 에서 Host B (서버) 로 SSH를 이용해서 서버에 접속을 하면 둘 사이에 연결이 이루어 지는데, 이 연결 통로를 터널이라고 한다. 이 연결은 암호화 등을 통해 보호되며, 포트 포워딩을 이용하여 다른 애플리케이션이 이 터널을 이용할 수 있다.

 


터널링은 크게 Local Port Forwarding 과 Remote Port Forwarding 으로 나눠진다.

- Local Port Forwarding은 로컬 서버에서 리모트 서버의 특정 포트에서 동작하고 있는 애플리케이션에 접속이 필요한 경우 사용한다.

예를 들어 방화벽이 설정되어 22번 (SSH) 포트는 열려 있으나, 3306번 (MySQL) 포트가 막혀 있는 리모트 서버에 대해, 터널링을 이용하면 외부에서 MySQL에 접속할 수 있는 터널을 생성해 준다.

Local Port Forwarding 은 다음과 같은 형식으로 사용할 수 있다.

 $ ssh -L[bind_address:]port:host:hostport user@hostname


SSH 터널링 (SSH연결을 통해 localhost의 3306번 포트로 들어오는 트래픽을 serverurl.com 서버의 3306번 포트로 포워딩한다.)

 $ ssh -L 3306:localhost:3306 test@serverurl.com

터널링이 연결된 상태에서 MySQL 접속 (MySQL 클라이언트를 로컬호스트 (3306번 포트) 로 접속을 하면 serverurl.com의 MySQL서버에 접속하게 된다.

 $ mysql -h localhost -u mysqluser


- Remote Port Forwarding은 리모트 서버의 애플리케이션이 클라이언트의 특정 포트에 접속이 필요한 경우 사용할 수 있다. 

Remote Port Forwarding 은 다음과 같은 형식으로 사용할 수 있다.

 $ ssh -R[bind_address:]port:host:hostport user@hostname




신고
 
 
Posted by ShineUm
 
 

mysql 데이터 저장 경로 변경하기

/data/mysql 로 변경한다고 가정


  • mysql 설정 파일을 변경한다.

vi /etc/mysql/my.cfg

datadir 부분을 찾아셔 다음과 같이 변경한다.

datadir     = /data/mysql


  • Apparmor access 변경

설정 파일을 변경한 후에 mysql 서비스를 실행하는 경우 로그에 다음과 같은 에러가 나올 경우

/etc/apparmor.d/usr.sbin.mysql 파일을 편집하여 해당 datadir 경로의 권한 추가해 준다.

110727 12:48:32 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
110727 12:48:32 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110727 12:48:32  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

/data/mysql/ r,
/data/mysql/** rwk,

  • ldata 경로 변경
경로 변경 및 access 설정 변경후 아래와 같은 에러가 발생할 경우 다음과 같이 조치한다.
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
> mysql_install_db –-user=mysql ldata=/data/mysql
+ 잘 안되는 경우 그냥 mysql_install_db 만 실행 


신고
 
 
Posted by ShineUm
 
 

현재 사용중인 SWAP 메모리 확인

more /proc/swaps


SWAP 메모리로 사용할 파일 생성 (파일당 1GB)

cd /var/tmp

dd if=/dev/zero of=swapfile1 bs=1024 count=1048576

dd if=/dev/zero of=swapfile2 bs=1024 count=1048576


SWAP 영역으로 설정

/sbin/mkswap -c -v1 /var/tmp/swapfile1

/sbin/mkswap -c -v1 /var/tmp/swapfile2


SWAP 파일 사용시작

/sbin/swapon /var/tmp/swapfile1

/sbin/swapon /var/tmp/swapfile2


바뀐 SWAP 메모리 확인

more /proc/swaps


시작시 SWAP 메모리가 적용이 되도록 설정
vi /etc/rc.d/rc.sysinit

아래 라인을 검색
swapon -a

다음 내용을 같은 줄에 추가
swapon /var/tmpswapfile1 swapon /var/tmp/swapfile2

결과는 다음과 같음
swapon -a swapon /var/tmpswapfile1 swapon /var/tmp/swapfile2


신고
 
 
Posted by ShineUm
 
 

1. 하드 디스크 연결 확인

> lsblk

새로 장착된 하드 디스크의 이름을 확인한다. 

ex) sdb


2. 하드 디스크 파티션 생성

> fdisk /dev/[하드 디스크 이름]

ex) fdisk /dev/sdb


fdisk 상에서의 커맨드

p : 파티션 정보 보기

n : 새 파티션 생성

e : extended

p : primary partition

파티션 아이디 입력 [1-4]

first cylinder : [시작 Cylinder]

last cylinder : [파티션에 사용할 사이즈 or 마지막 Cylinder] ex) 20G

w : 저장 후 종료

q : 저장하지 않고 종료


3. 하드 디스크 포맷

> mkfs -t [파일 시스템] /dev/[하드 디스크 이름 + 파티션 아이디]

ex) mkfs -t ext4 /dev/sdb (단일 파티션인 경우)

mkfs -t ext4 /dev/sdb1


4. 하드 디스크 마운트

마운트 할 폴더를 미리 지정한다.

ex) /home

> mount /dev/[하드 디스크 이름] [마운트 할 폴더]

ex) mount /dev/sdb /home

cf. unmount 는 umount 명령어를 사용한다.

ex) umount /home


5. 부팅시 자동 마운트

/etc/fstab 파일을 수정해서 필요한 내용을 추가한다.

<file system> : 마운트 하려는 파티션 이름 - 하드 디스크 변경이 잦은 경우 UUID=xxx 식으로 적어 주는 편이 안전함. UUID는 lsblk -f 명령어로 확인이 가능하다. 

UUID는 하드 디스크 이름을 아는 경우 

blkid /dev/[하드 디스크 이름]

ex) blkid /dev/sdb

하드 디스크 이름을 모르는 경우

ls -l /dev/disk/by-uuid/

명령어로 확인이 가능하다.


<dir> : 마운트 하려는 위치

<type> : 타입 혹은 파일 시스템

<options> : 파티션 옵션, 잘 모르면 defaults 를 적어준다. (자세한 옵션은 http://linux.die.net/man/8/mount 에서 Mount Option 부분을 참조)

<dump> : dump utility 로 백업할지를 결정 (0 : 끄기)

<pass> : fsck에 의해 파일 시스템을 체크할 순서 (0 : skip), root 파티션에 1을 적는다.

ex)

/dev/sdb        /home        ext4        defaults        0        0




신고
 
 
Posted by ShineUm
 
 


1. 먼저 소스 설치시 필요한 모듈을 설치합니다. (install modules) 

이미 설치된 모듈은 건너 뛰어도 상관 없습니다.

> yum install wget pcre pcre-devel make


2. 최신 아파치 소스를 다운로드 받습니다. (download httpd source from this link)

http://httpd.apache.org/download.cgi

> wget http://URL/httpd-NN.tar.gz


3. 압축을 적당한 폴더에 압축을 풀어 둡니다. (extract source code)

> tar zxvf httpd-NN.tar.gz

> cd httpd-NN/srclib


4. 필요한 경우 apr, apr-util 소스를 다운로드 받아서 srclib 폴더에 풀어 둡니다. (download apr and apr-util source from this link)

http://apr.apache.org/


> wget http://URL/apr-NN.tar.gz

> wget http://URL/apr-util-NN.tar.gz


5. 압축을 풀고 폴더 이름을 다음과 같이 변경합니다. (extract source code on srclib folder and change folder name)

> tar zxvf apr-NN.tar.gz

> mv apr-NN apr

> tar zxvf apr-util-NN.tar.gz

> mv apr-util-NN apr-util


4. 이제 컴파일 해서 설치를 하게 되는데 경로는 "/usr/local/httpd" 에 설치하도록 하겠습니다. (install to "/usr/local/httpd")

> cd ..

> ./configure --prefix=/usr/local/httpd --with-included-apr

> make

> make install


5. 아파치 서버에 필요한 설정을 변경합니다. (configuration)

> vi /user/local/httpd/conf/httpd.conf


6. 다음과 같이 아파치를 실행합니다. (run)

> /user/local/httpd/bin/apachectl -k start





신고
 
 
Posted by ShineUm
 
 

웹서버로 많이 사용하는 Apache-Tomcat 에서 tomcat 기본적으로 8080 포트에서 동작하는데,

기본 웹서버 포트인 80 포트로 동작시키기 위해서는 mod_proxy mod_jk 이용해서 포트를 연결해 줘야 한다.

 

mod_proxy mod_jk 장단점은 다음과 같다.

@ mod-proxy

- 장점

                1. 추가 모듈이 따로 필요 없다.  (Apache 2.2 이상에서는 mod_proxy, mod_proxy_http, mod_proxy_ajp, mod_proxy_balancer 모두 포함되어 있다.)

                2. http, https 혹은 AJP 사용가능

- 단점

                1. mod_proxy_ajp 8K+ 크기의 패킷을 지원하지 않는다.

                2. 기본 load balancer 사용한다.

                3. Domain model clusterig 지원하지 않는다.

@ mod_jk

- 장점

                1. 향상된 load balancer

                2. 향상된 node failure detection

                3. 패킷 사이즈의 AJP 지원

- 단점

                1. 별도의 모듈을 설치해야 한다.

 

위의 내용은 아래 링크에서 가져온 내용임.

 https://community.jboss.org/people/mladen.turk/blog/2007/07/16/comparing-modproxy-and-modjk

 


@ mod_proxy 설정

                1. Apache 설치되어 있으면 별다른 설치는 필요없다.

                2. 설정

httpd.conf

 

                    ProxyPass /app http://127.0.0.1:8080/app

                    ProxyPassReverse /app http://127.0.0.1:8080/app

 

 

@ mod_jk 설정

                1. Httpd Developer 버전을 준비한다. (yum install httpd-devel)

                2. Connector 모듈을 다운로드 한다.  (http://tomcat.apache.org/connectors-doc/)

                3.  설치

 

                    cd native/

                    ./configure --with-apxs=/usr/sbin/apxs

                    make

                    sure make install

 

                4. 설정

httpd.conf

 

                    LoadModule jk_module modules/mod_jk.so


                   <IfModule jk_module>

                         JkWorkersFile  conf.d/workers.properties

                         JkMountFile  conf.d/uriworkermap.properties

                         JkShmFile  logs/mod_jk.shm

                         JkLogFile  logs/mod_jk.log

                         JkLogLevel  info

                         JkLogStampFormat  "[%a %b %d %H:%M:%S %Y] "

                    </IfModule>

 

 workers.properties

 

worker.list=ajp

worker.ajp.port=8009

worker.ajp.host=localhost

worker.ajp.type=ajp13

worker.ajp.lbfactor=1

worker.ajp.socket_timeout=60


uriworkermap.properties

 

/*.do=ajp

/*.jsp=ajp

/*.js=ajp

/*.gif=ajp

/*.jpg=ajp

/*.css=ajp



신고
 
 
Posted by ShineUm
 
 

Cached memory purge

@ Check memory status with top command

> top


@ purge cached memory

> sync

> echo 3 > /proc/sys/vm/drop_caches


신고
 
 
Posted by ShineUm
 
 
패키지 설치
rpm -ivh [패키지 파일 이름]

설치된 패키지 확인
rpm -qa

패키지 업그레이드
rpm -Uvh [패키지 파일 이름]

패키지 삭제
rpm -ev [패키지 파일 이름]

신고
 
 
Posted by ShineUm

티스토리 툴바