vi 명령어

vi 명령어

vi 파일명
vi +n 파일명
vi +/검색어 파일명
vi -R 파일명 : 읽기 전용

vi -r 파일명 : 문서 복구

명령 / 입력 모드

vi 편집 명령

i : 현재 커서 입력
a : 커서 한칸 오른쪽 앱력
A : 현재행 가장 마지막에 입력
o : 현재행 다음에 한줄 삽입 후 입력
O : 현재행 위에 한줄 삽입 후 입력
s : 현재 커서 한글자 삭제후 입력
S : 현재 행 삭제후 입력
R : 문서 수정 모드
x : 문자 하나 삭제

u : 실행한 작업 취소
:redo : 취소한작업을 재실행

k : 상
h : 좌
l : 우
j : 하

n[이동키] : n만큼 이동

0 : 라인 맨 앞으로
$ : 라인 맨 뒤로
w : 오른쪽으로 한단어 이동
b : 왼쪽으로 한단어 이동

gg: 첫행으로
G: 마지막행으로
ngg: n행으로 이동

v : 알파벳 문자 단위로 영역 지정
V : 행 단위로 영역 지정

c : 삭제후 입력모드 전환. 다른키와 조합후 사용
cc : 행전체 삭제후 입력모드
d : 삭제. 다른키와 조합후 사용
dd : 행 전체 삭제
y : 텍스트 복사
yy : 행 복사
p : 붙여넣기

~ : 대소문자 전화
. : 마지막 실행한 명령을 반복 실행

문자 검색

/찾을내용 : 하일라이트로 표시
n : 다음
N : 이전

치환
:s/찾을내용/바꿀내용. 시작위치부터 첫번째로 검색한것만 바꾼다
:%s/찾을내용/바꿀내용
:%s/찾을내용/바꿀내용/c

ubuntu에서 python cgi 연동하기

CGI 실행 허용을 위한 설정

  1. .py확장자를 CGI로 실행하도록 아파치 설정
sudo vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName www.magpie.com
        DocumentRoot 루트경로
        <Directory 루트경로>
                AddHandler cgi-script .py
                Options ExecCGI
        </Directory>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

2. cgi 기능 켜기

sudo a2enmod cgi

3. 아파치 서버 재기동

sudo service apache2 restart

4. 테스트 파일 추가

#!/usr/bin/python3
print("content-type:text/html; charset=UTF-8\n")

5. 파일에 권한 변경

sudo chmod a+x helloworld.py

6. 오류 발생시 로그 확인

 sudo tail -f /var/log/apache2/error.log

Python3.8.3을 Ubuntu에 설치해보자.

아래 글들은 좀 보기 좋기 다듬을 예정이다. 임시글이라고 봐둘.. 쿨럭

Python 설치 가이드

파이썬을 요즘 만지작 만지작 거리는 중인데, 운영체제마다 설치방법이 약간씩 달라서 여간 번거롭다. 우분투는 설치도 잘 안하고, 한번 잘못 설치하면 골치 아프기 때문에 정리를 해놓는 형식이다.

다운로드 경로 찾고 wget으로 우분투에 다운로드

https://www.python.org/downloads/release/python-383/

위 링크로 들어가서 다운로드 항목을 찬찬히 살펴본다.
Gzipped source tarball

https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz

링크는 위와 같다.

이제 다시 우분투로 돌아가서 wget으로 다운을 받는다.
10분정도 소요되는군..

wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz

압축풀고 인스톨

 $ tar xvfz Python-3.8.3.tgz 
./congifure 

이렇게 하면 잘되야 하지만...
내 환경은 언제나 문제가 있지. ㅋㅋㅋ

configure: error: in `/home/magpiebros/downloadFiles/pythone3.8.3/Python-3.8.3':
configure: error: no acceptable C compiler found in $PATH

컴파일러를 설치해줘야 하나보다...
sudo apt-get install gcc
(이전에 visudo에 사용자에 해당 계정을 추가해주어야만 했다.)

다시 명령어를 날려본다.
./configure

후두루루루루룩... 뭔가 잘 된다.
다음 명령어를 실행
make
make도 없네..

sudo apt-get install gcc
make
후두루루루루룩... 뭔가 잘 된다.

sudo make install
후두루루루루룩... 뭔가 잘 된다.

이제 설치가 잘 된지 확인이 남았다.

python3 -V

sudo apt-get install idle-python3.8

idle-python3.8

개발 관련 라이브러리 추가 설치

$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev

컴파일

$ cd Python-3.8.1
$ sudo ./configure --enable-optimizations
$ sudo make altinstall


pip경로 에러 발생

python-pip is in the universe repositories, therefore use the steps below:

sudo apt-get install software-properties-common
sudo apt-add-repository universe
sudo apt-get update
sudo apt-get install python-pip

참고 사이트

다시 컴파일

sudo make altinstall

https://somjang.tistory.com/entry/PythonUbuntu에-Python-37-설치하기

Ubuntu에서 sudo가 안되네?

아직 우분투를 잘 다루지는 못하지만, root 계정의 권한을 얻으려 하는데.
sudo 커맨드가 없다고 에러가 뜬다.

이때는 su- 명령어를 사용하여 로그인한후 다음과 같이 처리하자.

apt-get update
apt-get install sudo

다시 본인 계정으로 돌아와서 sudo를 사용해본다.
아마도 정상으로 동작할 것이다.

참고 명령어

sudo 명령어 권한을 특정 유저에게만 주고 싶을때는 vi가 아닌 visudo를 사용하여 수정한다.

visudo -f /etc/sudoers

Let’s Encrypt – ACMEv1에서 ACMEv2로 변경하기

학습목표

  • Let’s Encrypt – ACMEv1에서 ACMEv2로 변경하기

Let’s Encrypt에서는 ACMEv1을 2020년 6월 1일부터 중지할것이라는 메일을 보내왔다.
올해 초부터 메일이 왔지만, 잠시 서버쪽 셋팅을 멈추고 있었기 때문에(귀찮았던건 아니…) 무시하고 있었는데.
다음달부터 당장 안된다니.. 미루어놓았던 일을 해치워야 겠다.

주식으로 잃은 돈을 노력으로 얻기 위해서 다시 열심히 학습과 경제적 자유에 대한 열망으로 다시 손을 대기 시작했다.

각설하고 본론으로
Let’s Encrypt에서는 ACMEv1에서 ACMEv2로 변경하기 위한 가이드문서를 읽어보았다.
가이드 문서를 좀 읽어보니, ACME 클라이언트 구현을 위해서 Certbot을 추천하더라.
잘 모르면 추천받는걸로 작업하는게 인지상정.

ACMEv2의 장점 : (star)*인증서를 발급
기본적으로 certbot의 경우 실행시 자동으로 업데이트를 한다.
api주소만 단순히 ACMEv2를 사용하면 동일하게 사용할수 있다.

글로 배운데로 해보려 했지만, 실패

글로 배운 결론은 renewal 폴더 안의 conf 파일의 기존 ACMEv1 주소를 ACMEv2로 변경하면 정상 갱신이 가능하다고 한다.

글로 배운데로 해보려고 하는데, 왜 내 conf파일은 v2로 이미 갱신되어 있냐는 말인가??
server = https://acme-v02.api.letsencrypt.org/directory 로 이미 변경이 되어 있는 상태였다.

유연하게 해결해 나가기

이제 차선책으로 업데이트 전 인증서 상태를 확인해보고, 업데이트 후 인증서가 잘 변경되는지를 확인해보자.

lets encrypt 버전 확인

letsencrypt --version
certbot 0.27.0

인증서 확인 (root로 확인)
root@:~# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
이하 생략

현재 인증서 정보 확인

openssl x509 -noout -text -in /etc/letsencrypt/live/magpiebros.com/fullchain.pem 

ACME 버전 정보 확인은 할수 없었음. 

그래서 그냥 업데이트 하기로 함… ㅠ
뭐 아직 인증서 기간이 남아서 안된다고?

인증서 취소 삭제 다시 설치를 해야 하나….
기간 만료되거나 사용불가면 다시 되겠지라는 마음으로 일단 접는다.

만료되는 6월 다시 확인해보고 조치내용을 공유 예정.

// 인증서 취소 & 삭제
certbot-auto reboke —cert-path /etc/letsencrypt/renewal/www.magpiebros.com.conf
certbot-auto delete —cert-path /etc/letsencrypt/renewal/www.magpiebros.com.conf

crontab -e
min hour1/hour2 * * * /home/../certbot-auto renew —renew-hook “sudo /opt/…/ctlscript.sh restart apache”