[Linux] Screen 명령어
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 : 전체 스크린 리스트 확인
[Linux] Job 컨트롤
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 |
[Linux][SSH] 터널링을 이용한 포트 포워딩
아래 그림에서 처럼 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 |
[Linux] mysql 데이터 경로 변경하기
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 경로 변경
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
> mysql_install_db –-user=mysql –ldata=/data/mysql
[Linux] SWAP 메모리 추가하기
현재 사용중인 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
[Linux] HDD 추가하기
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
[Linux][CentOS] Apache 소스 설치 하기
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
[Linux] Apache-Tomcat 80포트로 사용하기
웹서버로 많이 사용하는 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
[Linux][CentOS] How to purge cached memory
Cached memory purge
@ Check memory status with top command
> top
@ purge cached memory
> sync
> echo 3 > /proc/sys/vm/drop_caches
[Linux][CentOS] rpm 을 이용한 패키지 설치 및 설치된 패키지 확인
rpm -ivh [패키지 파일 이름]
설치된 패키지 확인
rpm -qa
패키지 업그레이드
rpm -Uvh [패키지 파일 이름]
패키지 삭제
rpm -ev [패키지 파일 이름]