지금부터는, 서브라임 텍스트로 원격으로 s1서버에 쉘스크립트 작업을 할 수 있는 환경을 구축하고, root 유저로 접속해서

blockchain이라는 유저를 생성하고 해당 유저에 go 설치 및 필요하다면 build-essential 등등 라이브러리도 세팅, geth 빌드와 blockchain 유저가 geth를 사용할 수 있도록 환경을 구축해보겠다.

  1. 서브라임텍스트(Sublime Text) 설치하기

sublime text 3 를 깔아서 써보자.

편집기 필요요소
코드하이라이팅
자동완성
오류캐치

등등이 가능하다.

이 서브라임 텍스트는 또한 패키지 라는 개념으로 여러 기능들을 확장할 수 있다.

패키지를 설치하는 것은 파이썬 코드로 먹이는 것인데, 패키지 컨트롤을 이용하면 쉽게 새로운 패키지를 추가할 수 있다.


이 페이지로 가서, 아래 텍스트를 서브라임텍스트의 화살표 부분 창에 복붙한다.

import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)



그러면 패키지 컨트롤 인스톨러가 설치된다. (이 창은 ctrl+1옆의 홑따옴표 누르면 켜진다)

다음은 command+shift+P (윈도우는 커맨드 대신 컨트롤) 을 눌러보자.



누르고, 이 화면에서 pci를 치고 엔터 한번 누른 다음 아래 패키지들을 설치하자.
(PCI를 치고 매번 엔터 쳐줘야 안의 놈들이 나온다)

Emmet
Text Pastry
SFTP
SublimeCodeIntel

다 설치했다. 이제 여기서 서버를 돌릴 때 s1과 s2의 root로 접속이 가능하도록 터미널에서 세팅을 해주자.

  1. 터미널에서 s1 가상 컴퓨터의 root 외부 접속 허용 세팅

다시 터미널 창으로 가서, s1과 s2의 루트 비밀번호를 설정해준다.

han@s1:~$ sudo su
root@s1:/home/han# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@s1:/home/han# exit
Exit
han@s1:~$ ssh s2
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-33-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
3 packages can be updated.
0 updates are security updates.
New release '18.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Wed Aug 29 10:18:51 2018 from 192.168.56.70
han@s2:~$ sudo su
sudo: unable to resolve host s2
root@s2:/home/han# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@s2:/home/han# exit
exit
han@s2:~$ exit
logout
Connection to s2 closed.
han@s1:~$ su
Password:
root@s1:/home/han# cd
root@s1:~# pwd
/root
root@s1:~# 
root@s1:~# vi /etc/ssh/sshd_config 



여기서 PermitRootLogin을 yes로 바꿔준다.

root@s1:~# service ssh restart

까지 입력해주면, 이제 외부 접속에 대한 것은 세팅이 되었다.

자, 이제 s1의 /root 폴더에 우리는 위치해있다.

다시 서브라임텍스트로 돌아가자.

  1. 서브라임텍스트(Sublime Text)로 html과 서버 구축해 s1의 root에 연결하기

서브라임 텍스트에서는 html 파일을 만들고 서버를 돌릴 수 있다.

현재 열린 파일을 hello.html로 저장하고, 아래와 같이 치고 탭을 누르면...!





이렇게 변한다. 이 것이 바로 젠코딩이다. 엄청 간편하지 않은가!

컨트롤 f 로 td를 찾고 findall을 누르면 아래처럼 멀티라인 편집도 가능하다.



이 상태에서 command shift P를 누르고 text Pastry의 여러가지 기능을 이용하면 아래와 같은 짓도 가능하다.



File - sftp - setup server 누르고 호스트와 호스트 유저, 포트와 패스워드, 리모트 패스(기본 접속 경로)를 입력해주자.



이제, file - stfp - browse server 에 들어가 s1을 눌러 파일 경로들이 나오면 잘 만들어진 것이다.

Folder action - new file - my.sh 를 만들어보자.



잘 만들어졌다.

터미널에서 확인해보자.

root@s1:~# ls

이제 우리는 sublime text에서 my.sh를 변경하면 바로 터미널에서 확인이 가능하다.


  1. Bash 스크립트 익숙해지기

자, my.sh를 하나의 스크립트로 만들어보자.

만들 스크립트의 내용은 아래와 같다.

 xx 폴더를 만들어 그 안에 a.txt 파일을 만들고, hello world라는 문장 넣은 다음 xx폴더를 xx.tar로 압축하고 xx폴더는 삭제

#!/bin/bash
mkdir xx
echo "hello world" >> xx/a.txt
tar -cf xx.tar xx
rm -rf xx

가 될 것이다.

실행해보자.

root@s1:~# ./my.sh
root@s1:~# ls
my.sh  xx.tar

스크립트의 결과로 xx.tar가 생긴 것을 볼 수 있다.

이번엔, 1부터 10까지 합을 출력하는 스크립트를 만들어보자.

#!/bin/bash
hap=0
#for i in 1 2 3 4 5 6 7 8 9 10:
#for i in 'seq 10';do
for (( i = 0; i < 10; i++ ));do
    hap=`expr $hap + $i`
done
echo "1부터 10까지의 합: "$hap
exit 0

For 문을 돌리는 방법은 위 3가지이다. 직접 입력해주던가, 시퀀스를 쓰던가, 범위를 지정해주던가.

여기서 주의해주어야 할 것은, for문 안의 hap 내용에는 1 옆의 홑따옴표가 사용되어야한다는 것이다. 안그러면 아래와 같은 에러 메시지를 볼 것이다.

root@s1:~# ./my.sh
1부터 10까지의 합: expr $hap + $i

1 옆의 홑따옴표를 사용하면 아래와 같이 잘 나온다.

root@s1:~# ./my.sh
1부터 10까지의 합: 45

이번엔, 구구단의 3단을 출력해보자.

#!/bin/bash
for (( i = 1; i < 10; i++ ));do
    val=`expr $i \* 3`
    echo 3 \# $i = $val
done
exit 0

실행해보면 아래와 같은 결과를 얻는다.

root@s1:~# ./my.sh
3 # 1 = 3
3 # 2 = 6
3 # 3 = 9
3 # 4 = 12
3 # 5 = 15
3 # 6 = 18
3 # 7 = 21
3 # 8 = 24
3 # 9 = 27
root@s1:~#

이번엔 사용자가 parameter를 입력해 만드는 구구단 스크립트를 짜보자.

#!/bin/bash
val=0
if [ "$1" = "" ]; then
    echo "no parameter"
else
    for (( i = 1; i < 10; i++ ));do
        val=`expr $1 \* $i`
        echo $1 \# $i = $val
    done
fi
exit 0

여기서 $1은 사용자가 입력하는 상수 파라미터를 뜻한다.

이제 실행해보자.

root@s1:~# ./my.sh 7
7 # 1 = 7
7 # 2 = 14
7 # 3 = 21
7 # 4 = 28
7 # 5 = 35
7 # 6 = 42
7 # 7 = 49
7 # 8 = 56
7 # 9 = 63

단, 어디 변수에 $ 표시를 빼먹으면 아래와 같은 메세지를 볼 수 있다.

root@s1:~# ./my.sh 7
expr: non-integer argument
7 # 1 =
expr: non-integer argument
7 # 2 =
expr: non-integer argument
7 # 3 =
expr: non-integer argument
7 # 4 =
expr: non-integer argument
7 # 5 =
expr: non-integer argument
7 # 6 =
expr: non-integer argument
7 # 7 =
expr: non-integer argument
7 # 8 =
expr: non-integer argument
7 # 9 =

오늘은 여러가지 쉘스크립트를 연습해보았다.


+ Recent posts