복붙의 함정, 디렉토리를 삭제할 수 없다?

매우 간단한 디렉토리 생성 명령어가 의도대로 동작하지 않고 실패했다. 왜 일까?

ls 명령어의 결과를 보면 알 수 있는데, 부모 디렉토리를 생성하는 -p 옵션이 동작하지 않고 디렉토리로 생성되어 버렸다. 그 다음으로 존재하지 않는 ~/docker/shared 디렉토리를 생성하려고 했으니 명령어가 실패한 것이다.

mkdir 명령어는 사실 어딘가에서 복사 붙여넣기 한 것인데, 이렇게 잘 못 생성된 디렉토리는 왠만해서 삭제가 되지 않는다.

rm -r "./-p"
rm -r -- "./-p"

그 이유는 -p에 붙어 있는 -가 ASCII가 아닌 Unicode U+2013이기 때문인데, 이를 삭제하려면 LC_ALL=C를 앞에 붙여서 임시로 Locale을 변경해 8진수로 표시되는 Unicode 값을 확인하고 그 이름으로 명령어를 입력 하면된다.

rm -r -- ''$'\342\200\223''p'

VMM에서 Host USB장치를 Guest로 넘기기

VMM(Virtual Machine Manager)에서 Host machine의 USB 장치(카메라)를 passthrough하는 단계에 대한 설명.

Guest OS로 넘기고자하는 device는 Laptop에 달려 있는 카메라라고 하자.

VMM에서 Add Hardware 버튼을 누르고 USB Host Device를 선택하면 연결된 장치들의 목록이 표시된다. 여기에서 해당 카메라 장치를 선택하고 Finish 버튼을 누르면 장치가 등록된다.

Guest OS를 부팅하고 넘겨진 장치의 목록을 부면 Host OS의 BDF와는 다른 번호가 부여되면서 장치가 연결 된 것을 볼 수 있다.

드라이버가 제대로 로드되었다면 비디오 장치에 등록되고 어플리케이션으로 카메라 화상정보도 받아 올 수 있다.

주의: Passthrough된 장치는 Guest OS가 동작하는 동안 Host OS에서 사용할 수 없다.

VNC SSH Tunneling

Local VNC server는 접속이 가능하지만 외부에서 접속이 불가능 하다면 SSH tunneling을 설정해서 연결을 시도할 수 있다.

VNC Client에서 SSH Tunneling을 지원하는 경우

SSH tunneling을 지원하는 VNC client인 Remmina와 같은 경우에는 다음과 같이 서버로 localhost:5901을 설정한다. 여기에 서버 IP가 아니라 localhost를 적어주는게 좀 이상해 보이긴 하지만 SSH tunneling을 설정한 상태에서는 localhost의 5901번이 remote server의 VNC service를 제공하도록 연결된다.

그 다음에는 SSH Tunnel 탭을 선택해서 다음과 같이 정보를 입력한다. Enable SSH tunnel을 클릭해서 활성화 하고, 서버의 IP와 SSH가 서비스되는 port번호인 22번을 적어준다(SERVER_IP:<SSH_PORT>). 로그인 방식은 설정에 따라 적어 준다. 나는 SSH key login을 선호하므로 SSH Identity file을 선택하고 private key를 설정해 주었다.

SSH Tunneling 설정이 없는 경우

TigerVNC와 같이 명시적으로 SSH tunneling을 지원하지 않는 경우에는 터미널을 하나 열어서 다음과 같이 SSH tunel을 하나 열어 준다.

다음은 리모트 서버의 5901 포트를 로컬 5999번에 tunelling하는 예이다.

ssh -L 5999:localhost:5901 <user_id>@<vnc_server_ip>

터미널을 그대로 열어둔 상태에서 VNC client를 열어서 로컬의 5999번 포트로 연결한다.

연결