반응형

테스트 환경: Ubuntu 14.04, bash shell 사용



Bash 스크립트 파일에서 점점 awk를 써야 될 일이 많아지고, 그 awk 스크립트가 점점 더 복잡해지면서 한 줄에 주욱 이어서 썼더니 점점 가독성이 떨어지고 디버그하기 어렵게 되었다.


결론부터 말하자면, 그냥 가장 바깥에 있는 두 개의 single quote 문자 사이에는 마음대로 띄워써도 된다. ㅡㅡ;

개행 문자(newline), 탭 문자 마음대로 써도 상관이 없다.



그런데 내가 뭘 잘못했는지 command not found 에러가 났다.

뭐가 문제였을까?


확인해 보니,

awk [각종_옵션들] 

'                <---- awk 명령과 single quote 문자를 개행문자로 분리(...)

{

...

}

'


이런 식으로 썼던 거였다. 그러니까,


awk [각종_옵션들] '

{

...

}

'


코드의 시작을 나타내는 single quote 문자를 awk 명령줄과 같은 위치에 써야 하는데 그걸 엔터 쳐서 분리했더니, bash shell이 두 개의 서로 다른 명령으로 이해했던 것이었다. ㅜㅜ


아니면,

awk [각종_옵션들] \

'

{

...

}

'


이렇게 역슬래시로 다음 줄까지 명령 하나로 인식하도록 처리했어야 했다.


POSIX 명령의 기본 규칙을 잊지 말자. ㅠㅠ



반응형
블로그 이미지

Bryan_

,
반응형

두 개의 텍스트 파일에 각각 아래와 같이 데이터가 있는 경우,


 number.txt

alphabet.txt 

1

2

3

4

5

6

A

B

C

D

E

F


두 파일을 열(column)을 추가하는 형태로 이어붙여야 할 때가 있다. 즉,


1    A

2    B

3    C

4    D

5    E

6    F


이런 형태의 파일을 만들고 싶을 때, paste 명령을 쓰면 된다.


$ paste number.txt alphabet.txt


열 간의 기본 구분자는 탭 문자 '\t'로 되어 있다.

만약 두 열 간에 구분자를 다르게 주고 싶으면 -d 옵션으로 명시한다.


// 공백으로 구분할 때

$ paste -d ' ' number.txt alphabet.txt


// 쉼표로 구분할 때 (csv 파일 포맷)

$ paste -d , number.txt alphabet.txt


참고로 paste 명령 왼쪽에 있는 파일의 라인 수가 오른쪽 파일보다 짧더라도 구분자 문자를 먼저 추가한 다음 내용이 붙기 때문에 구분자를 기준으로 하면 각 column이 독립적으로 데이터를 유지할 수 있다.


 number.txt

alphabet.txt 

1

2

3

4

5

6

A

B

C

D

E

F

G
H
I
J
K


예를 들어 위의 두 파일을 paste로 이어붙이면,


1    A

2    B

3    C

4    D

5    E

6    F

G

H

I

J

K


이렇게 숫자 밑에 알파벳이 오지 않도록 column을 유지하며 붙는다.



반응형
블로그 이미지

Bryan_

,
반응형

데비안 계열 리눅스에서 /etc/rc.local 파일에 고칠 부분이 있어서 고쳤는데, 막상 재부팅을 하기는 싫고 그냥 rc.local에서 수정된 부분만 적용하는 방법이 없는지 잠깐 고민을 했는데, 부질없는 짓이었다. -_-;;


만약 예를 들어 /etc/sysctl.conf 와 같은 "설정 파일"의 경우에는 내용을 고치고 나서 새로 적용할 때, 해당하는 서비스나 프로세스를 재시작하는 것이 맞다.


하지만 /etc/rc.local 파일은 그 자체가 실행 스크립트이고, 파일에 기록하는 내용 또한 쉘 명령들이니까 그냥 파일 자체를 실행하면 되는 거였다. ㅡㅡ;;


$ sudo /etc/rc.local



다만 rc.local 파일에 원래부터 적혀 있었던 연유로 기존의 특정 명령어가 중복 실행되지 않도록 하고 싶으면, 그냥 방금 수정한 라인들을 쉘에다 복사해서 실행해야 된다. 다른 신기한 방법이 있기라도 하겠는가?


밤에 정신없이 작업하니 스크립트 파일을 설정 파일로 착각하는 일도 생기는 것 같다. ㅜㅜ 하지만 인터넷에는 나같은 바보짓(...)을 똑같이 시도하는 사람들도 많이 있다는 데서 위안을 삼는다. ㅋㅋ [1]



<참고자료>

[1] http://www.linuxquestions.org/questions/slackware-14/execute-rc-local-without-reboot-of-linux-server-467282/



반응형
블로그 이미지

Bryan_

,
반응형

Host OS: Ubuntu 14.04 Desktop (amd64)

Guest OS: Windows 10 (64-bit)


우분투 머신에 원격 접속을 하게 되면, XRDP를 쓰든 VNC Server 종류를 쓰든 상관없이 키보드 키의 연속 입력이 안 되는 문제를 경험한다. 사실 문제가 있어어 안 되는 것이 아니고, 의도적으로 연속 키 입력을 꺼 놓아서 그렇다.


콘솔을 제외하고 (콘솔은 어차피 로컬 게스트 머신의 접속 프로그램에 의해 좌우되기 때문에) 리눅스 머신에 그래픽 기반의 원격 접속을 하면, 내부적으로는 VNC가 가장 밑단에서 작동하기 때문에 VNC에서 연속 키 입력 옵션이 꺼져 있으면 RDP 클라이언트에서 별 짓을 다 해도 소용없다. 확인해 보니 VNC에서 옵션으로 켜고 끌 수 있다. [1]


VNC 서버 입장에서 연속 키 입력을 켜는 방법:

$ x11vnc -R repeat


반대로 연속 키 입력 기능을 끄는 방법:

$ x11vnc -R norepeat



*추가

참고로 우분투에 x11vnc 패키지를 설치하고 나면 시스템 부팅 시 자동실행 되는데, 이 때 키입력 연속 설정을 켜려면 /etc/init/x11vnc.conf 파일을 고쳐야 한다.


/etc/init/x11vnc.conf 파일

start on login-session-start

script

x11vnc -xkb -noxrecord -noxfixes -noxdamage -R repeat -display :0 -auth /var/run/lightdm/root/:0 -forever -bg -o /var/log/x11vnc.log -rfbauth /etc/x11vnc.pass -rfbport 5900 

end script



다만 버그가 있는데, 괄호 문자 '(' 또는 ')'를 입력하면 연속으로 입력하지 않는데도 계속 입력되는 현상이 있다. 가만히 두면 계속 타이핑되기 때문에 백스페이스 키를 눌러서 중단시켜야 한다. 전체적으로 연속 키 입력이 안되는 것보다는 약간의 불편을 감수하고 쓰는 편이 나을 것 같다.

<2016.05.24 수정> 괄호 문자가 반복 입력되는 버그는 다음에 재접속할 때는 또 발생하지 않았다. 그때그때 다른 것 같은데 원인은 아직 모르겠다.




<참고자료>

[1] https://lighttomorrow.wordpress.com/2015/04/16/vnc-server-setup-guide-for-ubuntu/


반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 (desktop, server 모두) amd64



우분투(또는 리눅스) 머신에 원격접속할 때 xrdp를 설치하면 RDP 클라이언트(e.g. 윈도우의 원격 데스크탑 연결)를 쓸 수 있어서 좋지만, 세부 설정을 수정하지 않고 그대로 둘 경우 다음과 같은 두 가지 문제가 발생한다.


  1. (우분투만 해당) 검은색 또는 회색 화면만 나온 채 가만히 있거나, 그 상태로 잠시 있다가 연결이 끊어짐.
  2. 매번 세션이 새로 생성돼서 이전의 작업 환경에 접근할 수 없음.


1번의 경우에는 우분투 기본 세션인 Unity에 버그가 있고 아직 해결되지 않아서 그렇다.

답답하지만 xfce4와 같은 다른 세션을 설치해서 써야 한다. [1]



이 글에서 해결할 문제는 2번이다. 사실 이것은 xrdp 기본 설정이 불친절(?)해서 기존 세션을 재활용하기 위한 옵션을 디폴트에서 볼 수 없기 때문이다.


즉, 원격 세션에서 로그아웃을 하지 않으면 매번 rdp로 로그인할 때마다 새로운 세션이 쌓여서 쓸데없이 메모리를 차지하게 된다. 그 뿐만 아니라 각 세션마다 실행시켜 둔 어플리케이션들도 다 그대로 살아있게 되므로 낭비도 이런 낭비가 없다.


물론 xrdp 설정에서 최대 동시 세션 수를 기본값 10으로 제한해 두기는 했다. 따라서 윈도우 rdp 클라이언트로 리눅스 머신에 10번 넘게 접속해서 세션을 만들기만 하면, 기존의 10개 중 가장 오래 된 세션이 고아 프로세스가 되거나, 아예 에러가 나면서 더이상 연결이 안되는 문제가 발생한다. 이런 문제를 방지한답시고 최대 세션 수를 100개(...)로 늘리라는 조언을 인터넷에서 심심찮게 볼 수 있는데, 그다지 좋은 방법이 아닌 것 같다.


물론 기존 세션을 쓰기 위한 옵션이라고 해봤자 결국 "포트 번호"를 입력하는 것 외에는 아무 것도 없다. ㅡㅡ; 즉, 기존 세션이 각자 포트 번호 하나씩 할당되어 있으니까 포트 번호만 외우고 있으면 나중에 다시 접근할 수 있다. 지금 생성돼 있는 세션과 포트 번호를 리스트로 보여주기라도 하면 좋을 텐데... 뭐 오픈소스니까 직접 그 기능을 코드로 만들어 넣지 않는 이상 너무 많은 것을 기대하지는 말자... ㅜㅜ





<XRDP 기존 세션 재활용 방법>


1. /etc/xrdp/xrdp.ini 파일을 열고, [xrdp1]에 해당되는 항목을 아래와 같이 고친다.


...

[xrdp1]

name=sesman-Xvnc

lib=libvnc.so

username=ask

password=ask

ip=127.0.0.1

port=ask5910

...


원래는 port 부분이 -1로 되어 있고, 로그인 창에서 보이지 않게 되어 있다. 하지만 ask를 추가함으로써 항상 접속할 때마다 포트 번호를 입력할 수 있도록 바꿨고, 그 뒤에는 5910이라는 포트 번호가 기본적으로 입력되어 있도록 설정했다.



2. xrdp 서비스를 재시작한다.


$ sudo service xrdp restart



3. 원격 데스크탑 연결(RDP) 클라이언트로 접속하면, 아래 그림과 같은 로그인 화면이 뜰 것이다.

원래 없던 포트 번호가 표시됨을 알 수 있다.



만약 리눅스 머신을 부팅한 직후 맨 처음 접속하는 경우거나, 기존에 생성된 세션의 포트 번호를 모르겠는 경우에는 아래와 같이 포트 번호를 "-1"로 고쳐서 로그인한다.


(새로운 세션을 만들 때에는 포트에 -1을 입력한다)


새로운 세션이 만들어질 때, 로그 메세지를 자세히 보면 세션이 어느 포트 번호에 할당되는지 알 수 있다. 해당 포트 번호를 기억해 둔다.

(새로운 세션이 포트 번호 5910번에 할당되었음을 알 수 있다.)


원하는 작업을 수행하고, 로그아웃하지 않은 채로 RDP 클라이언트를 종료한다.



4. RDP 클라이언트로 다시 리눅스 서버에 접속한다.

이번에는 로그인할 때 port 부분에 이전에 접속했을 때 할당된 포트 번호를 쓰고 로그인한다. 그러면 방금 전에 작업하던 세션을 그대로 볼 수 있다.





필자의 경우는 리눅스에 RDP로 접속할 때에도 윈도우 서버에 원격접속 하듯이 세션을 여러 개 만들지 않기 때문에, 부팅 직후 맨 처음에 세션을 만들 때 -1로 바꾸는 수고만 하고, 그 뒤에는 항상 맨 처음 시도하는 포트번호가 5910이기 때문에 기본값으로 5910번 포트가 입력되어 있도록 설정해 두었다.


현재로써는 앞으로 쓰기에 이게 가장 손이 덜 가는 설정이라고 생각한다. 하지만 xrdp가 조금 더 친절해져서 리스트 형태로 나열된 기존 세션 중 하나를 눈으로 보고 선택해서 로그인할 수 있도록 개선되면 정말 좋겠다.




<참고자료>

[1] http://yujuwon.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%9B%90%EA%B2%A9-%EC%A0%91%EC%86%8D


반응형
블로그 이미지

Bryan_

,