반응형

1. 확장된 디스크 크기가 보이는지 확인

lsblk
fdisk -l

 

2. pv확장

pvresize /dev/sda2

 

3. VG(Volume Group) 확인

vgdisplay
(확장된 Free PE (Physical Extent) 용량이 보이면 성공)

 

4. LV(Logical Volume) 확장

lvextend -l +100%FREE /dev/mapper/centos-root
(경로는 lvdisplay로 확인)

 

5. 파일시스템 확장

(CentOS7 기본 루트 파일시스템인 경우)
xfs_growfs /

(EXT4 인 경우)
resize2fs /dev/centos/root

 

6. 확인

df -h
반응형

'Linux' 카테고리의 다른 글

apache complie include module  (0) 2022.05.27
ubuntu apt source kakao  (0) 2016.12.29
SSL 인증서 변환  (0) 2013.03.11
ubuntu ssh 로그인 실패 아이피 차단  (0) 2013.02.20
쉘프로그래밍 기초  (0) 2012.01.25
반응형
제한된 인터넷 환경을 위한 apache 컴파일



- 필요한 모듈 압축 풀고 httpd소스 srclib 경로로 넣어줌

mv apr httpd-2.4.53/srclib/apr
mv apr-util httpd-2.4.53/srclib/apr-util
mv pcre httpd-2.4.53/srclib/pcre

- 컴파일

./configure --prefix=/usr/local/apache-2.4.54 --with-included-apr --with-included-apr-util --with-include-pcre --enable-mpms-shared=all --enable-so --with-mpm=event
make
make install

- 압축
tar -zcvf compiled_apache_2.4.54.tar.gz apache-2.4.54


- 테스트

 

 

 

반응형

'Linux' 카테고리의 다른 글

ESXi centos linux 용량 늘리기  (0) 2025.09.22
ubuntu apt source kakao  (0) 2016.12.29
SSL 인증서 변환  (0) 2013.03.11
ubuntu ssh 로그인 실패 아이피 차단  (0) 2013.02.20
쉘프로그래밍 기초  (0) 2012.01.25
반응형
sudo sed -i 's/us.archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list

 

반응형

'Linux' 카테고리의 다른 글

ESXi centos linux 용량 늘리기  (0) 2025.09.22
apache complie include module  (0) 2022.05.27
SSL 인증서 변환  (0) 2013.03.11
ubuntu ssh 로그인 실패 아이피 차단  (0) 2013.02.20
쉘프로그래밍 기초  (0) 2012.01.25
반응형
PKCS#12(Public Key Cryptography Standards #12)

보통 .pfx , .p12 등의 확장자로 저장됨. 
바이너리 형식으로 저장되며 pkcs#12 포멧의 파일은 인증서, 개인키 내용을 파일하나에 모두 담고 있습니다. 
백업 또는 이동용으로 주로 사용됩니다. 

인증서 형식변환

PKCS#12 에서 개인키 추출
$ openssl pkcs12 -in www.example.co.kr.pfx -nocerts -nodes -out www.example.co.kr.key

PKCS#12 에서 인증서 추출
$ openssl pkcs12 -in www.example.co.kr.pfx -nokeys -out www.example.co.kr.crt

PEM -> PKCS#12 
$ openssl pkcs12 -export -in www.example.co.kr.crt -inkey www.example.co.kr.key -out www.example.co.kr.p12 

DER => PEM
$ openssl rsa -inform DER -outform PEM -in www.example.co.kr.der -out www.example.co.kr.pem

PEM => DER
$ openssl rsa -inform PEM -outform DER -in www.example.co.kr.pem -out www.example.co.kr.der
반응형

'Linux' 카테고리의 다른 글

apache complie include module  (0) 2022.05.27
ubuntu apt source kakao  (0) 2016.12.29
ubuntu ssh 로그인 실패 아이피 차단  (0) 2013.02.20
쉘프로그래밍 기초  (0) 2012.01.25
vi 명령어  (0) 2012.01.25
반응형
ubuntu ssh 로그인 실패 아이피 차단

1. /var/log/auth.log 파일 읽는다.
2. sshd 로그인 시도한 IP 리스트 작성한다.
3. 10번 이상 실패한 IP는 ufw deny 에 추가한다.

crond에 등록해서 사용.

테스트는 안해봐서 되는지 모르겠다.

#!/usr/bin/ruby

# 로그 파일 읽는다.
logfile = File.new("/var/log/auth.log", "r")
loglines = logfile.readlines


# hash 생성.
hash = Hash.new(0);

# 라인 반복.
loglines.each do |value, index|
        if value.match("Failed password for")
                line_str = String.new(str=value)

                # ip address
                regexp = Regexp.new( '([0-9]{1,3}\.){3}([0-9]{1,3})' )

                if ipAddr = line_str.match(regexp)
                        ipKey = ipAddr.to_s
                        hash[ipKey] = hash[ipKey] + 1
                end
        end  
end


# hash print
puts "SSH Login Failed IP List:"
hash.each { |key, value|
        if value >= 10
                # 10번 이상 실패한 아이피
                puts "ip: #{key} / failed count: #{value}" 
                cmd_v4 = "ufw deny from #{key}"
                cmd_v6 = "ufw deny proto ipv6 from #{key}"

                puts "cmd: #{cmd_v4}"
                puts "     #{cmd_v6}"
                system(cmd_v4)
                system(cmd_v6)

                puts ""
        end
}

system("ufw status")
puts("Last executed time:")
system("date")
반응형

'Linux' 카테고리의 다른 글

ubuntu apt source kakao  (0) 2016.12.29
SSL 인증서 변환  (0) 2013.03.11
쉘프로그래밍 기초  (0) 2012.01.25
vi 명령어  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
반응형

1. 변수
. 쉘변수는 처음 사용될때 만들어진다. 즉 미리 선언할 필요가 없다.
. 쉘변수는 유닉스 명령과 마찬가지로 대소문자에 구별이 있다.
. 쉘변수는 기본적으로 데이터를 문자열로 저장한다. 수치를 대입해도 실제 수치
가 아닌 문자열이 저장된다. 계산이 필요할 경우는 자동으로 수치로 변환하여
계산후 다시 문자열로저장된다.
. 쉘변수의 값을 사용할 때는 변수명앞에 "$" 를 붙여서 사용한다.
. 쉘변수에 값을 대입할때는 "$"를 사용하지 않는다.
. 쉘변수는 타입이 없다. 즉 아무 값이나 다 넣을 수 있다.

1.1 환경변수
쉘을 기동하고나면 기본적으로 셋팅되어있는 변수들이다. 유닉스/리눅스에는 많은
환경변수들이 있고 필요한경우 이 변수들을 마치 일반변수처럼 값을 얻어오거나 셋
팅할 수 있다. 여기서는 쉘과 직접적인 관련이 있는것만 설명한다.

$0 - 실행된 쉘 스크립트 이름
$# - 스크립트에 넘겨진 인자의 갯수
$$ - 쉘 스크립트의 프로세스 ID

1.2 인자 변수
쉘스크립트에 인자를 넘겨줄때 그 인자들에 대한 정보를 가지고 있는 변수들.

$1~ $nnn : 넘겨진 인자들
$* : 스크립트에 전달된 인자들을 모아놓은 문자열. 하나의 변수에 저장되며
IFS 환경변수의 첫번째 문자로 구분된다.
$@ : $*과 같다. 다만 구분자가 IFS변수의 영향을 받지 않는다.

1.3 일반변수
일반변수에 특별한 제약은 없다. 단 대소문자 구분만 정확하게 해주면 된다.

예제 )

#!/bin/sh
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"

실행 )
$chmod 755 test1
$./test1 a1 a2 a3 a4
This Script Executable File : ./test1
Argument Count : 4
Process ID : 905
Argument List $* : a1 a2 a3 a4
Argument List $@ : a1 a2 a3 a4
Argument 1 : a1
Argument 2 : a2
Argument 3 : a3
Argument 4 : a4

1.4 연산
변수의 산술연산은 생각하는것 처럼 쉽지않다. 위에서 언급했듯이 변수에는 모든것
이 문자열로 저장되기 때문에 연산이 불가능하다. 연산을 위해서는 좀 복잡한 절차
를 거쳐야 한다.

변수 = $((산술식))

이것이 가장 단순한 연산 규칙이다. 산술식내에는 변수( $1, $a 와 같은 ) 도 들어
갈 수 있다. 산술식 내에 숫자가 아닌 문자열, 또는 문자열이 담겨있는 변수가 들어
가면 그것들은 계산에서 제외된다.
(정확히 말하면 0 으로 간주되어 연산이 이루어 지지 않는다.)

1.5 매개변수 확장
매개변수 확장이란 변수의 값을 문자열등으로 대체하는 것을 말한다. 단순한 대체뿐
아니라 변수내의 문자열을 조작하여 원하는 문자열만을 추출할 수도 있다.

형식
${parm:-default} : parm이 존재하지 않으면 default로 대체된다.


${#parm} : parm의 길이를 참조한다.(가져온다)


${parm%word} : 끝에서부터 word와 일치하는 parm의 최소부분(첫번째 일치) 을
제거하고 나머지를 반환한다.

${parm%%word} : 끝에서부터 word와 일치하는 parm의 최대부분(마지막 일치) 을
제거하고 나머지를 반환한다.

${parm#word} : 처음부터 word와 맞는 parm의 최소부분(첫번째 일치)을 제거하
고 나머지 부분을 반환한다.
${parm##word} : 처음부터 word와 맞는 parm의 최대부분(마지막 일치)을 제거하
고 나머지를 반환한다.

* word에는 와일드 카드를 사용할 수 있다.

예를 보자.

1 #!/bin/sh
2
3 p="/usr/X11R6/bin/startx"
4
5 unset p
6 a=${p:-"Variable p Not found"}
7 echo $a
8
9 p="/usr/X11R6/bin/startx"
10 a=${p:-"Variable parm Not found"}
11 echo $a
12
13 a=${#p}
14 echo $a
15
16 a=${p%/*}
17 echo $a
18
19 a=${p%%/*}
20 echo $a
21
22 a=${p#*/}
23 echo $a
24
25 a=${p##*/}
26 echo $a
27

위 스크립트의 결과는 다음과 같다.
---------------------------------
Variable p Not found
/usr/X11R6/bin/startx
21
/usr/X11R6/bin

usr/X11R6/bin/startx
startx
----------------------------------
6행 : 변수 p 가 제거 되었으므로 "Variable p Not found" 가 a에 들어간다.
10행 : 변수 p 가 있으므로 그대로 a에 들어간다.
13행 : a에는 변수 p의 길이가 들어간다.
16행 : p 에서 가장 오른쪽의 "/"부터 끝까지 지우고 나머지를 a에 넣는다.
19행 : p 에서 가장 왼쪽의 "/" 부터 끝까지 지우고 나머지를 a에 넣는다.
(아무것도 없다)
22행 : p 의 처음부터 가장왼쪽의 "/" 까지 지우고 나머지를 a에 넣는다.
25행 : p 의 처음부터 가장 오른쪽의 "/"까지 지우고 나머지를 a에 넣는다.

2. 조건 판단
쉘 스크립트에서 조건판단은 if 와 파일 유형을 점검하고 값을 비교하는 test 명령을

혼합하여 사용한다.

일반적인 예는 다음과 같다.

if test -f test1
then
...
fi

-f 는 주어진 인자가 일반파일 일때 참이된다.


test 명령은 [] 로 대체될 수 있다.

if [ -f test1 ]
then
...
fi

-----------------------------

if [ -f test1 ]; then
...
fi

2.1 test 명령

test 명령의 조건은 다음과 같이 세 부류로 나누어진다.

문자열비교
[ string ] : string이 빈 문자열이 아니라면 참
[ string1 = string2 ] : 두 문자열이 같다면 참
[ string1 != string2 ] : 두 문자열이 다르면 참
[ -n string ] : 문자열이 null(빈 문자열) 이 아니라면 참
[ -z string ] : 문자열이 null(빈 문자열) 이라면 참

산술비교
[ expr1 -eq expr2 ] : 두 표현식 값이 같다면 참 ( EQual )
[ expr1 -ne expr2 ] : 두 표현식 갑이 같지 않다면 참 ( Not Equal )
[ expr1 -gt expr2 ] : expr1 > expr2 이면 참 ( Greater Then )
[ expr1 -ge expr2 ] : expr1 >= expr2 이면 참 ( Greater Equal )
[ expr1 -lt expr2 ] : expr1 < expr2 이면 참 ( Less Then )
[ expr1 -le expr2 ] : expr1 <= expr2 이면 참 ( Less Equal )
[ ! expr ] : expr 이 참이면 거짓, 거짓이면 참
[ expr1 -a expr2 ] : expr1 AND expr2 의 결과 ( 둘다 참이면 참 )
[ expr1 -o expr2 ] : expr1 OR expr2 의 결과 ( 둘중 하나만 참이면 참 )

파일조건

[ -b FILE ] : FILE 이 블럭 디바이스 이면 참
[ -c FILE ] : FILE 이 문자 디바이스 이면 참.
[ -d FILE ] : FILE 이 디렉토리이면 참
[ -e FILE ] : FILE 이 존재하면 참
[ -f FILE ] : FILE 이 존재하고 정규파일이면 참
[ -g FILE ] : FILE 이 set-group-id 파일이면 참
[ -h FILE ] : FILE 이 심볼릭 링크이면 참
[ -L FILE ] : FILE 이 심볼릭 링크이면 참
[ -k FILE ] : FILE 이 Sticky bit 가 셋팅되어 있으면 참
[ -p FILE ] : True if file is a named pipe.
[ -r FILE ] : 현재 사용자가 읽을 수 있는 파일이면 참
[ -s FILE ] : 파일이 비어있지 않으면 참
[ -S FILE ] : 소켓 디바이스이면 참
[ -t FD ] : FD 가 열려진 터미널이면 참
[ -u FILE ] : FILE 이 set-user-id 파일이면 참
[ -w FILE ] : 현재 사용자가 쓸 수 있는 파일(writable file) 이면 참
[ -x FILE ] : 현재사용자가 실행할 수 있는 파일(Executable file) 이면 참
[ -O FILE ] : FILE 의 소유자가 현재 사용자이면 참
[ -G FILE ] : FILE 의 그룹이 현재 사용자의 그룹과 같으면 참
[ FILE1 -nt FILE2 ] : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참
[ FILE1 -ot FILE2 ] : FILE1이 FILE2 보다 오래된 파일이면 참
[ FILE1 -ef FILE2 ] : FILE1 이 FILE2의 하드링크 파일이면 참

2.2 if 구문
if 문은 조건을 판단하여 주어진 문장을 수행한다.

1. 형식 1 ( 단일 if 문 )
형식 :
if [ 조건 ]
then
문장1
문장2
fi

2. 형식 2 ( if~else 문 )
형식 :
if [ 조건 ]
then
문장3

else
문장4
fi

3. 형식 3 ( if~elif 문 )
형식 :
if [ 조건 ]
then
문장1
문장2
elif
문장3
문장4
else
문장5
문장6
fi

2.3 case 구문
※ 패턴에는 * 문자, 즉 와일드카드를 사용할 수 있다.
형식 :
case 변수 in
패턴 [ | 패턴 ] ... ) 문장 ;;
패턴 [ | 패턴 ] ... ) 문장 ;;
....
* ) 문장 ;;
easc

2.4 목록
여려명령을 실행할때 앞의 명령의 결과에 의해서 다음행동이 결정되어야 할 경우
가 있다. 이런경우에 AND나 OR조건을 사용해서 한번에 처리할 수 있다. 이것은 쉘
스크립트 뿐 아니라 명령행에서도 사용 가능하다. 물론 if 문을 이용해서 반환값
을 검사하여 처리할 수 있지만 문장이 길어지고 복잡해진다.

AND 목록

statment1 && statment2 && statmentN && .....

위의 명령들은 각 명령이 거짓이 될 때 까지 명령을 수행해 나간다. 수행도중
결과가 거짓이 되면 그이후의 명령은 수행되지 않는다.


OR 목록

statment1 || statment2 || statmentN || .....

위의 명령들은 각 명령이 거짓이 나오는 동안 계속된다. 즉 참이 나오면 실행
을 멈춘다.

AND와 OR목록은 혼용이 가능하다.

[ 조건 ] && 문장1 || 문장2

위의 예는 조건이 참이면 문장1을 수행하고 거짓이면 문장2를 수행한다.

또한 위의 문장1이나 문장2에서 여러개의 문장을 수행 하고 싶을 때는 {}를
사용하면 된다.

[조건] && {
문장1
문장2
문장3
} || {
문장4
문장5
문장6
}

3. 제어문
3.1 for
for 문은 지정된 범위안에서 루프를 수행한다. 범위는 어떤 집합도 가능하다.
형식 :
for 변수 in 값1, 값2, ...
do
문장
done

매 루프를 돌때마다 변수의 값은 in 이후의 값으로 대체된다.
예)
for str in "test1", "test2", "test3", "test4"
do
echo @str
done

출력 )

test1
test2
test3
test4

값에는 와일드 카드 확장을 사용할 수 있다.

for file in $(ls -a | grep "^.")
do
echo "$file is Hidden File"
done

위 예의 출력 결과는 현재디렉토리에서 처음이 "." 으로시작하는 파일(히든파일) 만
을 출력한다.

for file in $(ls chap[345].txt); do
echo "--- $file ---" >> Books.txt
cat $file >> Books.txt
done

위의예는 chap3.txt, chap4.txt, chap5.txt 파일을 Books.txt 라는 파일에 붙여 넣
는다.

다음의 예를 보고 결과를 예측해보자

echo "\$* output"

for fvar in $*
do
echo $fvar
done

echo "\$@ output"
for fvar in $@
do
echo $fvar
done

3.2 while
for 명령의 경우는 횟수를 지정해서 루프를 수행하는데는 문제가 있다.
while 문은 실행횟수가 지정되지 않았을때 편리하다.

형식 :
while 조건문
do
문장
done

예제를 보자. 패스워드를 입력받고 맞는지 확인하는 프로그램이다.

echo "Enter Password : "
read password1

echo "Retype Password : "
read password2

while [ "$password1" != "$password2" ]
do
echo "Password miss match Try again "

echo "Retype Password : "
read password2
done

echo "OK Password Match complete"


어떻게 동작하는가 ?

3.3 until
until은 while문과 동일한 효과를 내지만 조건이 반대이다. 즉, while문은 조건이
참 일동안 루프를 수행하지만 until은 조건이 거짓일 동안 루프를 수행한다.

형식 :
until 조건문
do
문장
done

다음 예를 보자. 이 예는 지정한 유저가 로그인 하면 알려준다.

#!/bin/sh

until who | grep "$1" > /dev/null
do
sleep 10
done

echo "User $1 just logged in ^_^"

3.4 select
select 문은 원하는 리스트를 출력하고 그중 선택된것을 돌려주는 구문이다. 주의
할점은 select의 루프내에서는 자동적으로 루프를 벗어날 수 없다. 반드시 break
문을 사용해서 루프를 벗어나야 한다.

예) 간단한 퀴즈 ^_^

#!/bin/sh

echo "다음중 스크립트언어 프로그래밍에 속하는 것은 ?"
select var in "쉘 프로그래밍" "C 프로그래밍" "자바 프로그래밍" "Exit"
do
if [ "$var" = "쉘 프로그래밍" ]
then
echo "정답입니다."
exit 0
elif [ "$var" = "Exit" ]
then
echo "종료합니다."
exit 1
else
echo "$var 을 선택하셨습니다. 오답입니다."
echo "다음중 스크립트언어 프로그래밍에 속하는 것은 ?"
fi
done

4. 함수
쉘 스크립트 내부에 또는 다른 스크립트파일에 함수를 정의해 놓고 사용할 수 있다.
함수를 사용하면 코드를 최적화 할 수 있고, 코딩이 간결해지며,재사용이 가능하다.
그러나 다른 스크립트 파일을 호출해서 함수를 실행할 경우, 가능은 하지만 스크립
트의 실행시간이 길어지고, 함수의 결과를 전달하는 것이 까다롭기 때문에 가급적이
면 외부파일의 함수는 안쓰는 것이 좋다.

형식 :
정의 -
함수명 ()
{
문장
return 값
}

사용

함수명 인자1, 인자2, ...


함수는 독립적으로 $#, $*, $0 등의 인자변수를 사용한다. 즉 함수내의 $#과 본체
의 $#은 다를 수 있다는 것이다.

다음의 예를 보자

#!/bin/sh

func()
{
echo ------ this is func --------
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
}

echo ------ this is main --------
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"
func aa bb cc


본체와 함수에서 동일한 변수를 보여주지만 값은 틀린다는것을 알 수 있다.

함수에서 값을 반환하기 - 함수에서 반환값은 반드시 정수값만을 반환할 수 있다.
이 값을 if등으로 조건을 판단해서 사용할 수 있다. 반환값중 0은 참으로 나머지
숫자는 거짓으로 판별된다.

5. 명령어
쉘에서 쓸 수 있는 명령어는 두가지로 나누어진다. 명프롬프트 상에서 실행 시킬 수
있는 외부 명령어와 쉘 내부 명령이다. 내부명령은 보통 쉘 내부나 쉘 구문상에서
쓰인다. 외부명령은 쉘에 관계없이 사용이 가능하다.

break
제어문이나 조건문의 루프를 빠져나갈때 사용한다.
예)
while [ $a -eq 10 ]
do
if [ $a -eq 5 ]; then
break
fi
done

:명령
의미없는 명령. 논리값 true를 대신해 쓰기도 한다.

continue
제어문이나 조건문의 처음으로 돌아가서 다시수행한다.
예)
while [ $a -eq 10 ]
do
if [ $a -eq 5 ]; then
continue
fi
done

. 명령
. 명령을 사용하면 현재 쉘에서 명령을 실행시킨다 그러므로 실행된 명령의 결과
를 본 프로그램에서 사용할 수 있다.

예를 들면 A 라는 스크립트에서 B라는 스크립트를 그냥 실행할 경우 B에서의 변화
(환경변수 등)는 A에게 아무런 영향도 미치지 않는다. 그러나 . 명령을 사용해서
실행하면 B에서의 변화가 A에도 영향을 미친다.

echo
문장을 출력한다. 자동으로 개행문자가 삽입된다. ( 다음줄로 넘어간다 )

eval
인자의 실제 값을 구하는데 사용한다.

foo=10
x=foo
y='$'$x
echo $y

이 예를 실행해 보면 $foo가 출력된다

foo=10
x=foo
eval y='$'$x
echo $y

이 예에서는 $foo의 값 즉 10 이 출력된다. eval명령은 원하는 문자열들을 조합해
서 변수를 액세스 할 수 있다.

exec
현재쉘을 다른 프로그램으로 대체한다.

예 ) exec csh

exit n
현재 쉘을 종료한다. 종료시 n 값을 리턴한다.

export
해당 쉘에서 파생된 자식 프로세스에서 export한 환경변수는 본래 쉘에서 관리한
다.

expr
표현식의 값을 구한다. ( x=`expr 1 + 2` )
요즘은 expr보다는 $((계산식)) 구문을 많이 사용한다.

printf
C 언어의 printf명령과 흡사하다.

형식 : printf "Format String" arg1 arg2 arg3 ...

return
쉘함수에서 값을 반환 할 때 쓰인다.
0은 성공을 1~125까지는 쉘 에러코드를 나타낸다.

set
쉘 내부에서 매개 인자를 설정한다.
set의 인자로 쓰인 문자열은 공백에 의해 $1 부터 차례대로 대입된다.

예)

#!/bin/sh
echo $#
set $(ls)
echo $#

결과는

0
22

이다..( 22는 필자의 ls 결과의 갯수이다. ). 첫번째 0는 이 스크립트에 인수가
없으므로 0이고 set $(ls) 에 의해서 인수의 갯수가 22개로 늘었다.

shift
쉘의 인자를 한자리씩 아래로( n -> 1 로 ) 이동시킨다.

예)
#!/bin/sh

echo $1
shift
echo $1
shift 5
echo $1

#./myscript 1 2 3 4 5 6 7 8 9 0
1
2
7

trap
쉘의 실행도중 시그널을 처리하는 시그널 처리기를 만드는 역할을 한다.

형식 : trap command signal

쉘 스크립트는 위에서 아래로 실행되므로 보호하려는 부분 이전에 trap명령을 사
용해야 한다. trap조건을 기본으로 사용하려면 명령에 - 를 넣으면 된다.
신호를 무시하려면 '' 빈 문자열을 준다.

unset
변수나 함수를 제거한다.

6. 명령실행
외부명령의 실행 결과를 변수에 집어넣어 변수의 값으로 사용할 수 있다.

형식 : x = $(명령)

이렇게 변수에 결과를 넣은 후에는 이 변수를 일반문자열로 생각하고 원하는 가공을
해서 결과를 얻어낼 수 있다.
위에서 보았던 매개변수 확장이나 set명령을 이용해서 원하는 부분을 추출해 내면
그만이다.

7. 쉘 스크립트 내부에서 명령에 입력 전달하기 ( Here Documents )
이 기능은 쉘 내부에서 명령어에 입력을 전달하는 방법이다. 전달된 입력은 마치 키
보드에서 눌려진 것 처럼 반응한다.

형식 : 명령 << 종료문자열
입력값.....
종료문자열
예제 ) 자동으로 메일을 보내는 스크립트

#!/bin/sh

mail $1 << myscript
This is Header
This is Body
.

myscript


반응형

'Linux' 카테고리의 다른 글

SSL 인증서 변환  (0) 2013.03.11
ubuntu ssh 로그인 실패 아이피 차단  (0) 2013.02.20
vi 명령어  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
ubuntu ttf-symbol 에러나면..  (0) 2008.04.17
반응형

<< VI 명령어 >>

vi에는 삽입 모드와 명령어 모드의 2가지 모드가 있다.

삽입모드에서는 문서를 입력하고, 명령어 모드에서는 문서의 수정, 삽입, 대체등의 일을 한다.

명령어 형식

[from][.][to][명령어][명령어 인수] or [n][명령어][명령어 인수]

이 사람이 vi에 익숙한지 아닌지는 그 사람이 작업하는 것을 보지 않고도 알 수 있다. 자주 beep음이 나는 사람은 잘못된 명령어를 입력하고 있다는 것이다. 제대로 사용한다면, 결코 beep음이 나지 않는다. beep음은 이동을 할려고 할 때, 더 이상의 이동을 할 수 없을 때 난다. 예를 들어 그 화일의 내용이 100줄이고 현재 50행에 있는데, 현재행에서 부터 60행 전으로 움직여라(60+), 든지 아니면 현재행에서 부터 60행 앞으로 움직여라(60-), 이런 명령을 준다면 beep음을 발생한다.

또, 삽입 모드에서 명령어 모드로 전환하는데, ESC 키를 두세번 누르는 경우를 자주 보는데, 그럴 필요는 없다. 딱 1번만 눌러도 항상 모드 전환을 할 수 있다. 이것도 습관이어서 처음 시작할 때, 그런 사람은 무의식중에 두세 번 ESC키를 누른다. 계속 beep을 발생할 수밖에. 세살 버릇이 여든 살까지 간다.

<< 화면 이동 >>

문자 단위 이동

커서는 에디터가 명령 모드 안에 있는 동안 현재 행을 포함해서 스페이스 바와 백 스페이스를 사용해서 쉽게 앞뒤로 이동할 수 있다.

vi의 대부분의 터미날에서 화살표 키로 작업을 할 수 있도록 지원해 준다. 그러나 키의 작업은 여러분의 터미날의 특성에 의존한다. 만약에 화살표 키를 지원하지 않는 터미날에서는, 어쩔 수 없이 h(왼쪽), j(위), k(아래), l(오른쪽)를 사용한다. 이와 같은 키를 "home row key"라고 하는데, home row key에 익숙해지면, 화살표 키를 사용하는 것보다 편리함을 알 수 있을 것이다. 화살표키를 누르기 위해서는, 손을 옆으로 움직이여 하나, home row key는 손을 제자리에 놓고도 입력을 할 수 있어, 불필요한 동작을 없애 버린다.

k

h l

j

줄 단위 이동
n 현재 행으로부터 n 번째 행으로 이동한다.
+ n+ 커서를 다음 행의 처음으로 이동
- n- 커서를 이전 행의 처음으로 이동
G 화일의 마지막 행에서 공백 문자가 아닌 첫 번째 문자로 이동
1G
nG

<< 단어, 문장, 절 단위 이동 >>

1 문자
fc

nfc

다음에 나타나는 문자 c로 이동
Fc

nFc

이전에 나타나는 문자 c로 이동
tc

ntc

다음에 나타나는 문자 c 이전으로 이동
Tc

nTc

이전에 나타나는 문자 c 이전으로 이동
;

n;

바로 전에 검색한 방법과 같은 방향으로 문자 c로 이동
,

n,

바로 전에 검색한 방법과 반대 방향으로 문자 c로 이동

단어
w

nw

다음에 나타나는 단어나 특수 문자의 시작 위치로 이동
W

nW

다음에 나타나는 단어 앞의 공백 문자로 이동
e

ne

다음에 나타나는 단어나 특수 문자의 끝으로 이동
E

nE

다음에 나타나는 단어 끝의 공백 문자로 이동
b

nb

이전에 나타나는 단어나 특수 문자의 시작 위치로 이동
B

nB

이전에 나타나는 단어 앞의 공백 문자로 이동

패러그래프와 섹션 단위 이동
{

n{

커서가 있는 패러그래프의 시작위치로 이동
}

n}

인접한 이전 패러그래프의 시작위치로 이동
(

커서가 있는 문장의 처음으로 이동
)

커서가 있는 문장의 끝으로 이동
]]

n]]

인접한 이전 섹션의 시작 위치로 이동

화면 단위 이동
^B n^B 이전 화면으로 스크롤(scroll Backward)
^F n^F 다음 화면으로 스크롤(scroll Forward)
^U 반 화면 뒤로 스크롤(scroll Up)
n^U n번째 행으로 커서를 이동후, 반 화면 뒤으로 스크롤
^D 반 화면 앞으로 스크롤(scroll Down)
n^D n번째 행으로 커서를 이동후, 반 화면 앞으로 스크롤
^Y n^Y 한 행 뒤로 이동
^E n^E 한 행 앞으로 이동
z 커서를 화면의 top으로 이동, 주위의 문서가 스크롤 된다.
z. 커서를 화면의 중간으로 이동, 주위의 문서가 스크롤 된다.
z- 커서를 화면의 bottom으로 이동, 주위의 문서가 스크롤 된다.
^L 현 화면을 지우고 다시 출력(refresh)
; n; 바로 전에 검색한 방법과 같은 방향으로 문자 c로 이동

<< 삽입(Insert) >>

a 현 커서의 위치 다음부터 추가 시작
i 현 커서 위치부터 삽입 시작
A 현재 줄의 마지막에 추가 시작
I 현재 줄의 처음에 추가 시작

<< 지우기( Delete) >>

문자 지우기
x

nx

커서에 위치한 한 문자를 지운다.
X

nX

커서 이전의 한 문자를 지운다.
D

현재 커서 위치에 있는 행의 끝까지 모든 문자를 지운다.(d$)
d0

행의 시작 부분에서 현재 컷 위치 앞 문자까지 지운다.(d|)

줄 지우기
dd ndd 현재 행을 지운다.
dG 현재 행으로부터 화일의 끝까지 모든 행을 지운다.
d1G 현재 행으로부터 화일의 처음 위치까지 모든 행을 지운다.
dnG 현재 행에서 시작하여, 상대적으로 n번째 행까지 모든 행을 지운다.
d- 현재 줄과 이전 줄 전부를 지운다.
d+ 현재 줄과 다음 줄을 지운다.
nd- 현재 줄과 n번째 줄 전부를 지운다.(dn-)
nd+ 현재 줄과 n번째 줄 전부를 지운다.(dn+)
ddp 현재 줄과 다음 줄을 교환한다.

문장, 절, 구 지우기
d) dn) 현재 위치에서 다음 문장(sentence)의 끝까지 지운다.
d( dn( 이전 sentence의 시작위치부터 커서 이전의 문자까지 지운다.
d} dn} 현재 위치에서 다음 패러그래프(paragraph)의 끝까지 지운다.
d{ dn{ 이전 paragraph의 시작위치부터 커서 이전의 문자까지 지운다.
d] dn] 현재 위치에서 다음의 section 끝까지 지운다.
d[ dn[ 이전 section의 시작부터 커서 이전의 문자까지 지운다.

현재 위치로부터 표시된 곳까지 지우기
dfc dnfc 현재 위치에서 순방향으로 첫번째(n번째) 'c' 문자까지 지운다.
dFc dnFc 현재 위치에서 역방향으로 첫번째(n번째) 'c' 문자까지 지운다.
dtc dntc 현재 커서 이전에서 순방향으로 첫번째(n번째) 'c' 문자까지 지운다.
dTc dnTc 현재 커서 이전에서 역방향으로 첫번째(n번째) 'c' 문자까지 지운다.

'd'명령과 'f'와 't' 그리고 'F'와 'T' 명령을 사용하면 현재 위치로부터 현재 줄에 명시된 문자, 혹은 편집하는 화일에서 명시된 텍스트 패턴까지 지운다.

탐색된 패턴의 내용을 지우기
d/pattern 현재 위치에서 순방향으로 탐색하면서 처음 만나는 패턴 이전까지 모두 지운다.
d?pattern 현재 커서 이전에서 화일의 역방향으로 탐색하면서 처음 만나는 pattern까지 지운다.

만일, pattern이 현재부터 화일의 처음까지 없고, 화일의 끝으로 가서 탐색하여 찾았다면, 현재 위치 문자부터 일치하는 패턴 이전가지 지운다.

아차!! 실수. 지운 텍스트 복구

p

버퍼의 내용을 현재 줄 이전에 복구한다.

P

버퍼의 내용을 현재 줄 다음에 복구한다.

텍스트는 change, delete, yank 명령어가 실행될 때마다 버퍼로 복사되는데, 그 버퍼의 내용을 복구하는 명령어는 p(put)이다. 즉, yank를 한 후에 커서의 위치를 이동하여 원하는 위치에 버퍼의 내용을 복구할 수 있다.

시스템이 꺼졌을때, 문서 화일 복구
$ vi -r <화일이름> <화일이름>은 문제가 생기기전의 화일 이름

<< 교체(Substitute) >>

단어 변경
cw cnw 현재 위치에서 부터 현재(n번째 다음) 단어의 끝까지 변경한다.
cW cnW 현재 위치에서 부터 현재 단어의 끝까지 변경한다.
cb cnb 가장 가까운(n번째) 이전 단어의 시작부터 현재 위치 이전 문자까지 변경
cB cnB 가장 가까운 이전 단어의 시작 부터 현재 위치 이전 문자까지 변경

문장, 절, 구 변경
c) cn) 현재 위치에서 다음 문장(sentence)의 끝까지 변경한다.
c( cn( 이전 sentence의 시작위치부터 커서 이전의 문자까지 변경한다.
c} cn} 현재 위치에서 다음 패러그래프(paragraph)의 끝까지 변경한다.
c{ cn{ 이전 paragraph의 시작위치부터 커서 이전의 문자까지 변경한다.
c]] cn]] 현재 위치에서 다음의 section 끝까지 변경한다.
c[[ cn[[ 이전 section의 시작부터 커서 이전의 문자까지 변경한다.

현재 줄상에서 커서에서 특정 문자 까지 변경
cfc cnfc 현재 위치에서 순방향으로 첫번째(n번째) 'c' 문자까지 변경한다.
cFc cnFc 현재 위치에서 역방향으로 첫번째(n번째) 'c' 문자까지 변경한다.
ctc cntc 현재 커서 이전에서 순방향으로 첫번째(n번째) 'c' 문자까지 변경한다.
cTc cnTc 현재 커서 이전에서 역방향으로 첫번째(n번째) 'c' 문자까지 변경한다.

텍스트 변경 명령 반복해서 사용하기

vi에서 마지막 명령어를 반복하기 위해 도트 명령어 '.'를 제공한다. 이것은 다른 에디터나 기타 환경의 에디터에서는 보기 힘든 편리한 기능이다.이 명령어는 텍스트를 변경하는 delete, replace, change, yank/put 또는 다른 명령어에도 사용하여 여러 번 타이핑 해야 되는 작업을 동작으로 반복시킬 수 있어 매우 유용하다.

<< 검색과 치환 >>

검색
/문자열 문자열을 앞으로 검색하여 이동
10,20/문자열 10줄에서 20줄까지 문자열을 검색
/문자열/+n 순방향으로 검색된 문자열 다음의 n번째의 줄로 이동
?문자열 문자열을 뒤로 검색하여 이동
?문자열?+n 역방향으로 검색된 문자열 다음의 n번째의 전 줄로 이동
n 방금 전에 수행한 검색과 같은 방향으로 검색(/)
N 방금 전에 수행한 검색과 반대 방향으로 검색(?)

치환 방법 :[범위]s/old/new/[cgi]
s/old/new/g 현재의 줄에 대해 수행
10,$s/old/new/g 10줄에서 화일의 끝까지 수행
g/foobar/s//foo/g 전체 화일에서 foobar를 찾아(g/foobar), foobar를 foo로 치환한다.(s//foo) 이 연산을 한 줄에 반복해서 적용한다.(/g)
g/foobar/s/bar/baz/g 전체 화일에서 foobar를 찾아(g/foobar) foobar중 bar를 baz로 치환한다(s/bar/baz) 이 연산을 한 줄에 반복해서 적용한다.(/g)

[범위] 숫자, $(화일의 끝), .(현재 위치), %(현재 화일)

[cgi] c는 변경시 변경 여부를 사용자에게 물어본다. g는 한 줄에 나타난 모든 것을

찾아 변경한다. i는 검색시 대소문자 구별을 하지 않는다.

콘트롤 문자 검색 하기

콘트롤 문자를 검색하고 싶다고 해서, 그냥 /^<seq>라고 해서는 않된다. 콘트롤 문자를 화면에 입력하고 싶은면, 우선 ^V를 누른다음에, 입력하고자 하는 콘트롤 문자를 눌러야 한다.

가끔, ftp로 문서 화일을 받아오면 (특히 도스와 유닉스 사이), 화면에 ^M이 찍혀서 나오는 경우가 있다. 이럴때는 일단 ^M을 찾아서, 지워야 한다. ^M을 찾기 위해서는,

:/^M ( ^V + ^M)

라고 입력해야지만 가능하다.

<< 마크(Mark) >>

마크 설정

mc

현 커어서의 위치를 'c'로 표시한다. ('c'는 1문자이며 소문자이다)

마크한 곳으로 이동

'c

'c' 로 표시된 위치로 이동한다.

`

'c' 로 표시된 줄의 첫 문자로 이동한다.

"

지정되었거나, 작업했던 바로 전 줄로 이동한다.

``

지정되었거나, 작업했던 그 줄의 첫 문자로 이동한다.

<< 블럭 명령어 >>

블럭을 화일에 저장, 첨가
:10,20w <화일명> 10줄에서 20줄까지 <화일명>에 저장
:10,20w >> <화일명> 10줄에서 20줄까지 <화일명>에 첨가

화일에서 블럭 읽어 오기
:10,20r <화일명> 10줄에서 20줄까지 <화일명>을 읽어와서 현재의 줄에 삽입

블럭 자르기

"a5dd

현재 줄에서 부터 5줄을 삭제하고, a라는 이름으로 버퍼에 기록

이 명령은 삭제 명령인 d 명령이다. 삭제를 하게 되면, 화면에서는 없어지지만, 버퍼라는 기억장소에 복사하게 된다. 이렇게 필요한 부분을 버퍼라고 불리는 기억 장소에 복사하는 것을, 'yank'라고 한다. 그래서, 나중에 다시 꺼내 와서 사용할 수 있다.

그냥, d 명령을 사용하면, 최근에 버퍼에 들어온 것만 사용하게 된다. 그래서, 화일에서 mark를 하는 식으로, 버퍼에도 이름을 주어서 기록할 수 있다.

이 명령은 삭제 명령인 d 명령과 같은 명령 구조를 갖게 된다. 예를 들면,

블럭 복사
yw 한 단어를 버퍼에 기록시킨다.
3yw 3단어를 버퍼에 기록시킨다.
y$ 줄의 끝까지 기록시킨다.
y) 문자의 끝까지 기록시킨다.
yy nyy

현재(n개의) 줄을 버퍼에 기록시킨다.(Y)

yank명령도 버퍼에 이름을 주어서 기록할 수 있다.

"a5Y 현재 줄에서 부터 5줄을 a라는 이름으로 버퍼에 기록

블럭 붙히기

p

버퍼의 내용을 현재 커서 위치의 오른쪽에 추가시킨다.

P

버퍼의 내용을 현재 커서 왼쪽에 추가한다.

버퍼에 기록된 텍스트 내용을 옮기기 위해서 버퍼의 자료를 추가시키고자 하는 곳으로 커서를 이동한 후 다음의 명령을 사용한다.

"ap

버퍼 a에 있는 내용을 현재 커서 왼쪽에 추가한다.

"nP

n번 전에 사용한 삭제 명령이나, yank명령에 의해 기록된 버퍼의 내용을 가지고 붙이기 수행

put 명령도 버퍼에 이름을 주어서 삭제를 하거나, yank를 한 버퍼 이름을 가지고 블럭 붙이기를 수행.

<< 화일 명령 >>

:f<ESC>

화일은?

읽기
:e <화일명> 새로운 화일을 편집
:e! 현재 지정되어 있는 화일의 수정 여하에 관계없이 빠져 나온다.

저장하기
:w <화일명> 현재 편집한 내용을 화일명으로 기록

다중 화일 편집

vi는 한번에 여러개의 화일을 동시에 작업할 수 있는 환경을 제공해 준다. 이것은 하나의 화일에서 다른 화일로 문서의 일부를 이동시킬 경우 특히 유용하게 사용된다.

$ vi l.c o.c v.c e.c

위의 명령어는 4개의 화일을 동시에 작업하고 싶다는 것을 vi에 알리는 것이다. 이렇게 되면 vi는 차례 차례로 화일을 편집하게 된다. l.c라는 화일에서 작업을 종료한 후, o.c를 편집할 수 있다.

다른 화일로 이동하기

:n

다중 화일 편집시 지정한 화일 중 현재 화일의 다음 화일로 이동

<< 환경설정 >>

vi의 환경을 바꾸어서, 문서의 편집에 큰 도움을 줄 수 있다. 예를 들어

set 명령어

vi 상태에서 :set all를 입력하면, 현재 사용중인 vi의 옵션 지정 상태에 대한 모든 것을 볼 수 있다.

: set <option> <param>

set명령의 취소는 <option>앞에 no를 붙히면 된다.

: set <nooption> <param>

option default 기능
autoindent(ai) noai 들여 쓰기 기능을 자동적으로 설정
autoprint(ap) ap 각 명령 후에 변화를 자동적으로 화면 출력
autowrite(aw) noaw 여러 화일 편집시 다른 화일로 이동하기 전에(:n, :!) 자동적으로 저장
beautify(bf) nobf

입력 하는 동안 모든 제어 문자를 무시

(단, tab, newline, formfeed 는 제위)

directory(dir=) /tmp 버퍼를 저장하기 위한 디렉토리 이름
edcmpatible noedcompatible ed 편집기의 기능 사용
errorbells(eb) errorbells 에러 발생시 벨을 울림
exrc(ex) noexrc 홈 디렉토리가 아닌 곳에 .exec 화일이 존재하는 것을 인정

hardtabs=

(ht=)

8 하드웨어 탭을 위한 범위설정
ignore case(ic) noic 검색이나 교체시 대소문자 무시
lisp nolisp indentation을 lisp 형식으로 삽입
list nolist 모든 탭 문자 대신에 ^I, 행의 끝에 $를 표시
magic magic [*. 등의 문자들이 정규식 패턴에서 특수한 의미를 갖게함
mesg mesg 버퍼의 최대 크기를 설정
number (nu) nonumber 터미날로 입력되는 메시지를 가능하게 함
open open Visual mode를 ex에 가능하게 함
optimize (opt) optimize

paragraphs=

(para=)

IPLPPPQPPLIbp 문맥을 위하여 매크로를 설정
prompt prompt ex 명령의 prompt 설정
readonly (ro) nore ! 부호없는 화일 쓰기 방지
redraw noredraw
remap remap map된 문자들을 반복적으로 적용
report= 5 변경을 알리기 위한 윈도우의 크기를 설정
scroll 1/2 스크롤할 행의 수를 설정
sections= SHNHH section을 위한 매크로를 제공
shell=(sh=) 셀 환경을 사용

shiftwidth=

(sw=)

지정된 줄을 오른쪽 혹은 왼쪽으로 전체를 옮기는 명령을 설정

showmatch

(sm)

{, ( 등을 눌린 경우 매칭되는 },)를 찾아 1초동안 출력하고 원위치로 돌아옴
showmode noshowmode 입력모드에서 화면의 우측 하단에 "input mode"를 출력

slowopen

(slow)

tab을 눌렀을 경우 이동한 공간을 설정
tabstop=(ts=)

taglength=

(tl=)

tab 화일의 내용중에 의미있는 문자수를 결정

(0은 의미 있음을 말함)

tags= tag, /usr/lib/tags 태그 명령에 사용되는 태그 화일의 패스를 가짐
term= 터미날 형식 설정
timeout (to) timeout 간단한 에러 메시지 출력
ttytype= Set 1초 후에 매크로인 "time out"을 실행
warn warn 터미날의 타입을 설정
window= (w=) 내용이 저장되지 않고 쉘 명령을 사용할 경우 경고 메시지를 출력

wrapmargin=

(wm=)

0 화면상에 보여줄 행의 수를 설정
wrapscan (ws) ws 우측 마진을 설정
writeany (wa) nowa 어떠한 화일이라도 시스템이 허용하는 범위내에서 쓰기 가능

exec 화일 설정하기

vi가 시작할 때 자동적으로 .exec 라는 화일을 읽어 들인다. .exec는 vi 입력 모드에서 쓰이는 모든 명령어에 대한

뿐만 아니라, vi 환경 설정인 모든 set에 대한 정보를 가지고 있다. 만약 .exec 화일이 없는 경우는 모든 set 값은 디펄트로 설정된다.

매크로 설정

반복되는 작업을 매크로로 설정하여, 빠르게 문서를 작성하거나, 수정을 할 수 있다. 터보 C에서는 프로그램도 직접 작성하고, 에디터에서 ^F9로 직접 컴파일과 실행을 한다. 이런 기능을 vi에서도 할 수 있다. C 프로그래밍을 하다가 기능키를 가지고 컴파일을 하고, 실행을 할 수 있다는 것이다. 또는 영문 철자 검사을 할 수 있다.

자기 환경에서 매크로를 잘 설정해서 사용한다면, vi를 좀더 강력하게 만든다. 밑에서 예로 몇개를 만들어 놓았다. 여러분도 직접 매크로를 만들어 보기 바란다. 그래서, 유용한 매크로는 서로 알린다.

매크로 작성

:map <매크로 키> <매크로 기능>

<매크로 키>는 10자 까지고, <매크로 기능>은 100자 까지이다. 즉, 매크로를 작성해 놓으면, 문서를 작성하다가 <매크로 키>를 칠 때마다, 그것이 <매크로 기능>으로 바뀐다. 그러나, vi의 버그로서 항상 모든 모드에서 매크로가 동작하는 것은 아니라는 것을 염두해 두기 바란다.

매크로 해제

:unmap <매크로 키>

기능키를 매크로로 사용하기

:map #n <매크로 기능>

만약 <매크로 키>가 #n - n은 0에서 9까지의 숫자 - 이라면, 그것은 정확한 매크로 키로 설정될 것이다.

:map #2 :w^M

이 매크로는, 문서를 작성하다가 기능키 F2를 누르면, :w^M을 실행 한다. 정확히 말하면, F2키가 :w^M으로 바뀌는 것이다. :w^M은 :w(저장하기) + ^M(엔터)를 의미한다. 즉, 저장하기이다. 물론 여기서도 ^M은 콘트롤 문자이므로, ^V + ^M을 눌려야 한다.

매크로 예제

영문 철자 검사

:map V :w^M:!ispell -x $^M:e!^M^M

vi에서 기능키 F2으로 컴파일

:map #2 :w^M:!cc %^M:e!^M^M

<< 명령어 참조 >>

vi 명령어

#

(where # is a number) following command n times...

:

ex 모드(편집 모드)로 같다

)

다음 sentence

(

전 sentence

}

다음 paragraph

{

전 paragraph

]]

다음 section

[[

전 section

0

줄의 시작으로 이동

$

줄의 끝으로 이동

^

첫번째 화이트스페이스 문자가 아닌 곳으로 이동

+

다음 줄의 첫번째 문자로 이동

-

전 줄의 첫번째 줄로 이동
(spacebar) 다음 문자
(return) 다음 줄

/

앞 방향으로 탐색

?

뒷 방향으로 탐색

%

서로 쌍으로 이루는 (, {, [ - ), }, ]으로 이동

,

마지막 f, F, t나 T 명령의 역 방향으로 가면서 실행

;

마지막 f, F, t나 T 명령의 순 방향으로 가면서 실행

.

마지막 명령어 반복 실행

`

마크(mark)한 곳으로 이동

'

마크가 있는 줄의 첫번째로 이동

``

전에 마크한 곳이나 탐색 하기전의 위치 뒤돌아 감

''

전에 마크한 곳이나 탐색 하기전 위치의 줄의 처음으로 이동

~

현재문자를 대문자면 소문자로, 소문자면 대문자로 바꾸고, 다음문자로 이동

"

레지스터에 저장

!!

마지막 쉘 명령어 반복

!

send next to command, replace output (eg !}fmt passes the current paragraph to the command fmt, and replaces the output with whatever fmt returns.)

>>

오른쪽으로 하나의 shiftwidth만큼 paragraph 이동

<<

왼쪽으로 하나의 shiftwidth만큼 paragraph 이동

>%

오른쪽으로 shift until matching (, [ 나 { 을 만날때까지 이동

<%

왼쪽으로 shift until matching (, [ 나 { 을 만날때까지 이동

a

현재 위치에 삽입

A

현재 줄의 끝에 삽입

^a

사용하지 않음

b

전 단어의 처음으로

B

전 단어의 처음으로, punctuation 무시

^b

한 화면 위로 스크롤

c

...일때가지 변경

C

줄의 끝까지 변경

^c

삽입 모드를 끝냄, 명령어 모드에서는 사용되지 않음

d

...일때까지 삭제

D

줄의 끝까지 삭제

^d

화면의 반을 아래로 스크롤, 삽입 모드에서는 전의 shiftwidth로 이동

e

단어의 끝으로 이동

E

단어의 끝으로 이동, ignore punctuation 무시

^e

한 줄 밑으로 화면 스크롤

f

...을 탐색

F

...을 뒷방향으로 탐색

^f

앞 방향으로 한 화면 스크롤

g

사용하지 않음

G

...로 이동[디펄트는 화일의 끝으로]

^g

현재 줄의 위치를 화면 출력

h

왼쪽으로 한칸 이동

H

화면의 첫번째 줄로 이동

^h

삽입 모드에서는 백스페이스, 명령어 모드에서는 왼쪽으로 이동

i

현재 위치 전에 삽입

I

줄에서 첫번째 화이트스페이스 문자가 아닌 곳에서 삽입

^i

삽입 모드에서는 탭, 명령어 모드에서는 사용되지 않음

j

아래로 이동

J

현재 줄과 다음줄을 붙임

^j

명령어 모드에서는 아래로, 삽입 모드에서는 새로운 줄 생성

k

위로 이동

K

사용되지 않음

^k

사용되지 않음

l

오른쪽으로 이동

L

화면의 마지막 줄로 이동

^l

화면을 다시 그림(refresh)

m

현 위치를 레지스터에 마크

M

화면의 중간으로 이동

^m

캐리지 리턴

n

마지막에 한 검색을 다시 수행

N

마지막에 한 검색을 역방향으로 수행

^n

명령어 모드에서는 아래로 이동

o

현재 줄 밑에 한 줄 첨가

O

현재 줄에 한 줄 첨가

^o

사용되지 않음

p

현재 줄 밑에 넣음

P

현재 줄 위에 넣음

^p

명령어 모드에서는 위로 이동

q

사용되지 않음

Q

끝내고, ex를 실행시킴

^q

사용되지 않음

r

현재 문자를 교체

R

삽입 모드가 남을 때까지 문자들을 교체

^r

명령어 모드에서 화면을 다시 그림

s

교체

S

모든 줄을 교체
^s 사용되지 않음

t

...까지

T

뒤로 ...까지

^t

다음 shiftwidth로 이동

u

마지막 변화를 취소

U

현재 줄의 변화를 취소

^u

반 화면을 위로 스크롤

v

사용되지 않음

V

사용되지 않음

^v

사용되지 않음

w

다음 단어의 시작으로 이동

W

다음 단어의 시작으로 이동, punctuation 무시

^w

명령어 모드에서는 사용되지 않음. 삽입 모드에서는 전 단어의 시작으로 위로 움직임

x

현재의 문자 삭제

X

전 문자 삭제

^x

사용되지 않음

y

...를 양크

Y

현재 줄을 양크

^y

한 줄 위로 화면 스크롤

z

reposition screen around line (Return to top of screen, . to middle, - to bottom)

ZZ

저장하고, 나감( = wq)

^z

사용되지 않음

Command mode input options ( : commands)
:r <file> <화일>을 현재의 문서로 읽어 들임
:r !<command> <명령어>의 실행 결과를 현재의 문서로 읽어 들임
:nr <file> n 줄로 <화일>을 읽어 들임
:!<file> 쉘 명령어를 실행
:sh 쉘로 나감
:so <file> <화일>로 부터 명령어들을 읽어 들여, 실행
:x 쓰고, 나가기
:wq 쓰고, 나가기
:l1,l2w <file> 줄 11과 12사이에 있는 내용을 <화일>에 저장
:w >> <file> 현재 작업중인 화일을 <화일>에 첨가
:w! 현재 작업중인 화일을 덮어 쓰기
:q 끝나기(만약 화일이 변했다면, 에러 메시지 출력)
:q! 변화한 내용에 상관없이 끝나기
:e <file> vi를 나가지 않고, <화일>을 편집
:e! forget changes since last write
:n 다음 화일을 편집
:e +n <file> 줄 n에서 <화일>을 편집
:n <files> 편집하기 위한 화일의 새로운 리스트로서 <화일> 지정
:e# edit alternate file (if :e <file> is used, alternate isthe original file)
:args 편집된 화일들을 보여준다
:rew rewind life of files to top
:map m n 매크로 설정
:map! m n create an insert mode macro (make m do n)
:unmap m 매크로 해제
:unmap! m destroy insert mode macro m
:ab <1> <2> 약어 설정 - <1>이 <2>로 대체
:unab <1> 약어 해제
:set <option> set <option>...

반응형

'Linux' 카테고리의 다른 글

ubuntu ssh 로그인 실패 아이피 차단  (0) 2013.02.20
쉘프로그래밍 기초  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
ubuntu ttf-symbol 에러나면..  (0) 2008.04.17
ubuntu APM 설치  (0) 2008.04.17
반응형
apache2의 사용자별 웹 디렉토리 설정을 위해서는 모듈이 필요하다.

필요한 모듈의 이름은 userdir.conf, userdir.load 이다.

우분투에서 apache2를 설치하면 /etc/apache2 디렉토리가 생긴다.
이 디렉토리 밑에 mods-available과 mods-enabled 디렉토리가 존재한다.

따라서 mods-available 디렉토리에 존재하는 위의 두 파일(userdir.conf, userdir.load)를 mod-enabled 디렉토리로 복사하거나 이동 시키면 된다.

그리고 apache2의 재부팅은 필수이다.(sudo /etc/init.d/apache2 restart)

그리고 웹 페이지를 띄우고 나서 주소창에 http://(웹 서버 ip)/~(사용자명)/ 을 입력하면 사용자 디렉토리 밑에 있는 public_html디렉토리안의 index.html을 볼 수 있다.
(전에 index.html을 만들어 놔야 한다. public_html 디렉토리가 없으면 mkdir 명령어로 생성하면 된다.)

이상으로 아파치2의 개인화 웹 디렉토리 설정 완료.

출처.
http://penta82.egloos.com/4161466
반응형

'Linux' 카테고리의 다른 글

쉘프로그래밍 기초  (0) 2012.01.25
vi 명령어  (0) 2012.01.25
ubuntu ttf-symbol 에러나면..  (0) 2008.04.17
ubuntu APM 설치  (0) 2008.04.17
vim 설정. vimrc 설정. vi설정.  (0) 2008.04.17
반응형
degul@ubuntu:~$ sudo apt-get upgrade | cat > error.txt
degul@ubuntu:~$ grep fail error.txt | cut -d: -f1 | xargs sudo touch
반응형

'Linux' 카테고리의 다른 글

vi 명령어  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
ubuntu APM 설치  (0) 2008.04.17
vim 설정. vimrc 설정. vi설정.  (0) 2008.04.17
ubuntu 개발환경 만들기  (0) 2008.04.17
반응형

//----- MySQL 설치
sudo apt-get install mysql-common
sudo apt-get install mysql-server

//----- Apache2 설치
sudo apt-get install apache2

//----- PHP5 설치
sudo apt-get install php5
sudo apt-get install php5-mysql
 
//----- 설치 후 업데이트
sudo apt-get upgrade      //기존 패키지
sudo apt-get update        //새로운 패키지 정보

//----- Apache2 데몬 재시작
sudo apache2ctl restart

// Apache 설정파일 : /etc/apache2/apache2.conf
// php 설정파일 : /etc/php5/apache2/php.ini
// Apache home : /var/www/

반응형

'Linux' 카테고리의 다른 글

vi 명령어  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
ubuntu ttf-symbol 에러나면..  (0) 2008.04.17
vim 설정. vimrc 설정. vi설정.  (0) 2008.04.17
ubuntu 개발환경 만들기  (0) 2008.04.17
반응형
~/.vimrc

syntax on
set nocp
set all&
set hi=10
set bs=indent,eol,start
filetype on
set ru
set sc
set nu
set ts=4
set sw=4
set ai
set si
set noet
set sts=0
set background=dark
colorscheme ron


sudo apt-get install vim


반응형

'Linux' 카테고리의 다른 글

vi 명령어  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
ubuntu ttf-symbol 에러나면..  (0) 2008.04.17
ubuntu APM 설치  (0) 2008.04.17
ubuntu 개발환경 만들기  (0) 2008.04.17
반응형
sudo aptitude install build-essential manpages manpages-dev manpages-posix-dev
반응형

'Linux' 카테고리의 다른 글

vi 명령어  (0) 2012.01.25
Ubuntu 7.10 apache2 사용자별 웹 디렉토리 설정  (0) 2008.04.17
ubuntu ttf-symbol 에러나면..  (0) 2008.04.17
ubuntu APM 설치  (0) 2008.04.17
vim 설정. vimrc 설정. vi설정.  (0) 2008.04.17

+ Recent posts