Shell script 에서 자주 쓰는 명령들

처음 시작은
#!/bin/sh

Perl 처음 시작은
#!/usr/bin/perl -w

argument는 $0 $1 $2 …
argument 처리는 아래 형식.

for ARGUMENT in “$@”; do
case $ARGUMENT in
–commit)
COMMIT=$2;
;;
–uploader)
UPLOADER=$2;
;;
–branch)
BRANCH=$2;
;;
–patchset)
PATCHSET_ID=$2;
;;
–change-url)
CHANGE_URL=$2;
CHANGE_NO=`basename $CHANGE_URL`;
;;
esac
shift;
done

Perl에서 Argument 처리는
$ARGV[0], $ARGV[1], $ARGV[2]… $#ARGV 는 argument 개수
 

공백으로 나눠진 파라미터 프린트
gawk ‘{print $1}’

/로 나눠진 마지막 파라미터 프린트. cut 도 사용가능
gawk -F / ‘{print $NF}’

파일명 얻기는
basename 경로명

디렉토리명 얻기는
dirname 경로명

절대경로 얻을 때는
readlink -e 상대경로

특정 문자열 치환은
sed -e “s/문자열/문자열/g”

if는 이런 형식. 비교식은 http://www.gnu.org/s/bash/manual/bash.html#Bash-Conditional-Expressions 참고

if [ “$변수” = “” ]; then
  명령;

elif
  명령;
else
  명령;
fi

for each 는 이런 형식

for 변수 in $가져올변수
do
  echo “$변수”
done

case는 위의 argument 처리 참고.

명령의 결과 저장은 `명령`
변수의 값으로 치환한 문자열은 “$변수 포함 문자열”
그냥 그대로 문자열은 ‘문자열’

끝에만 자를 땐
tail -n 숫자

앞에만 자를 땐
head -n 숫자

문자열 있는 줄만 얻고 싶을 땐
grep “문자열”

정규식으로 찾은 문자열 포함된 줄만 얻고 싶을 땐
grep -P “^문자열[0-9a-zA-Z-_/]*$”

basic http 인증은 https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients 참고

html 얻어올 때는
curl “주소”

리눅스 인터넷 공유(Masquerade)

http://www.otl.ne.kr/243

문서 중 가장 간단하다.

문서를 정리하자면,

다음과 같은 외부와 연결시키고 싶은 네트워크가 있다고 하자.



   _____________
  /                     \               외부 IP               _________              내부 IP
 |   Internet          |           123.12.23.43           |  linux     |          192.168.0.1
 |   google.com    | ——[외부 랜카드]——| machine |——[내부 랜카드]
  \_____________/                                         ———-             |
                                                                                               |        
                                                                                               |
                                                   _____________                ______|_______
                                                  | 192.168.0.2  |             /                      |
                                                  |    내부        |——–|    192.168.0.0    |
                                                  |    컴퓨터     |            |      인트라넷      |
                                                  ————–             \______________/ 

외부 네트워크 카드는 eth0, 외부 IP는 123.12.23.43, 그리고 내부 네크워크 카드는 eth1라고 가정하자.





$> modprobe ipt_MASQUERADE # 만약 실패하더라도 다음을 계속하시오.

$> iptables -F; iptables -t nat -F; iptables -t mangle -F

$> iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 123.12.23.43

$> echo 1 > /proc/sys/net/ipv4/ip_forward

그리고 보안을 위해:





$> iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

$> iptables -A INPUT -m state –state NEW -i ! eth0 -j ACCEPT

$> iptables -P INPUT DROP # 위의 두 줄이 성공한 경우에만

$> iptables -A FORWARD -i eth0 -o eth0 -j REJECT

이 문서는 GNU Free Documentation License를 따른다.


http://www.gnu.org/copyleft/fdl.html

[Linux] screen 사용법

예전에 screen + vim 조합으로 열심히 써서 손에 익었던 것도 잠시.. 몇 년이 지나고 나니 어느새 다 잊어버렸다.
screen 을 이용하면 vim 에서 창을 나누지 않고 여러 화면을 전환하면서 쓸 수도 있고, 새로운 파일 들을 열어서 볼 때도 매우 편리하다.  또한, 원격지에서 접속 후 일을 하다가 중간에 작업은 진행시켜 둔 채로 접속을 끊고, 다른 곳에서 접속하여 하던 작업을 이어서 할 수 있다는 장점(이게 난 가장 좋다!)도 있다.
사용법을 찾아보니 이 곳이 정리가 너무 잘되어 있다.

내가 자주 사용하거나 유용한 몇 가지만 요약하여 정리하면 다음과 같다.

1. screen 생성시

 

$ screen -S <세션명>

또는 그냥

 

$ screen

2. 어떤 screen 이 있는지 보고 싶을 때

 

$ screen -list

3. 이전에 생성한 screen으로 돌아가고 싶을 때

 

$ screen -r [세션명]

4. 작업 중 새로운 screen 생성

 

Ctrl + a, c

5. 현재 screen 의 Title 명 변경

 

Ctrl + a, A

6. 작업 중 다른 screen으로 옮기고 싶을 때
6.1. 바로 이전에 사용하던 screen

 

Ctrl + a, a

6.2. screen 번호와 Title 보고 이동(5 항목과 함께 이용하면 편리하다)

 

Ctrl + a, ” (화살표 키 이동 후 엔터)

6.3. 번호 창으로 이동

 

Ctrl + a, [0-9]

6.4. 다음 screen

 

Ctrl + a, n

6.5. 이전 screen

 

Ctrl + a, p

7. screen 을 잠깐 사용 중인 상태로 떼어놓고(detach) 싶을 때

 

Ctrl + a, d

 

8. screen 사용 시 마우스로 화면 스크롤이 안되고, command history가 스크롤 될 때 ~/.screenrc 에 다음 내용을 적는다.

termcapinfo xterm* ti@:te@