SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Bash on Ubuntu
on Windows
최흥배
https://jacking75.github.io/
Windows Subsystem for Linux(WSL)
WSL은 Windows 10 Mobile에서 Android를 실행하는 "Project Astria"에
서 파생했다고 한다. Astria는 Android 호환 환경을 만들어 Windows 10
Mobile에서 Android 앱을 그대로 이용 가능하게 하는 "브리지"프로젝트였
다.
그러나 Astria는 2016년 2월 공식 중단되었다.
Astria 때문에 마이크로 소프트는 Linux 호환 환경을 만들 필요가 있으며 이
것은 ARM 프로세서를 사용하여 Windows 10 Mobile에서도 작동할 필요가
있었다.
이 때문에 마이크로 소프트가 Windows 10에 도입한 것이 pico 프로세스로
불리는 것이다.
이것은 마이크로소프트 리서치에서 "Drawbridge"으로 개발된 기술의 일부.
pico 프로세스는 1종의 컨테이너로 특정 서브 시스템에 의존하지 않는 프로
세스이다.
보통의 Win32 프로세스와 비교하면 Pico 프로세스는 “투명한 프로세스"라
고 해도 좋다. 다만 어디까지나 NT 커널이 관리하는 프로세스로 Win32 프
로세스처럼 메모리 등이 관리되고 스케줄링 된다.
WSL의 크기는 1MB 미만이라고 한다
https://blogs.msdn.microsoft.com/wsl/2016/05/23/pico-process-
overview
차이는 Windows 서브 시스템 등,
어느 서브 시스템용으로도 초기화
되지 않는 점이다.
Drawbridge 아이디어는 이 투명한
Pico 프로세스 속에 OS의 커널에
상당하는 기능을 라이브러리(혹은
DLL)를 마련하여 과거의 Windows
호환 환경을 실현하는 것이었다.
이 라이브러리화 된 OS(혹은 커널)
는 Pico 프로세스가 가진 “Pal”이라
고 불리는 모듈을 통해서 NT 커널
측에 실제로 처리를 의뢰한다.
https://www.microsoft.com/en-
us/research/project/drawbridge/
Project Astria로 가상 머신이 아닌 컨테이너를 이용한 것은 PC에 비하면 성
능이 약하고 메모리 등의 자원이 작은 32비트 ARM 프로세서(Windows 10
Mobile은 아직 ARM의 64비트 환경에 비대응)에서 가상 머신을 움직이는
것은 퍼포먼스 등의 점에서 문제가 있었다고 생각된다.
여기서 사용된 것이 마이크로 소프트 리서치에서 개발된 Drawbridge 였던
셈이다.
WSL은 커널 모드 측에 Linux를 지원하기 위한 드라이버(LXSS.SYS와
LXCORE.SYS)를 준비하고 Linux 커널 API를 처리한다.
원래 Windows NT는 POSIX, UNIX 서브 시스템 등을 지원하기 위한 대/소문
자를 구분하는 파일 시스템의 기능이나 UNIX 고유 folk(실행 중인 프로세스
의 사본을 만들어 양쪽을 재개하여 한 프로세스에서 또 다른 프로세스를 생
성하는 API)에 해당하는 기능을 가지고 있었다.
이들은 Win32 API에서는 불필요해서 사용되지 않은 상황에서 커널 자체에
는 기능이 남아 있었던 셈이다.
종래의 POSIX 서브 시스템이나 SUA는 실행 파일 형식은 Windows 독자적인
것을 이용했다(당시는 UNIX 시스템 간의 바이너리 호환성은 없었다. 동일
CPU 아키텍처의 바이너리 호환성이 가능하게 되는 것은 Linux부터지만 현
재도 완전한 바이너리 호환성이 있는 것은 아니다).
이 때문에 실제로는 Windows 서브 시스템 측에 의존했던 부분이 있었다.
WSL이 다른 점 중 하나는 실행 파일 형식은 Ubuntu Linux의 바이너리 그대
로 라는 점이다.
bash.exe는 순수한 Windows 애플리케이션에서 보통의 콘솔 응용 소프트웨
어로서 동작하며 Windows측에 있는 Linux Session Manager 서비스와 통
신을 실시한다.
Linux Session Manager는 커널 모드에 있는 LXSS.SYS, LXCORE.SYS를 호출.
LXSS/LXCORE는 Windows 커널 기능 등을 써서 pico 프로세스를 생성한다.
여기에는 Linux 호환 환경이 조성되고, 보통의 Linux 구조를 사용하여 init 프
로세스가 실행되면서 거기서 bash를 기동한다.
bash는 쉘로 애플리케이션 기동 등은 Linux API를 호출하지만 이것들은
LXSS/LXCORE 나 Windows 커널 기능을 병용해서 처리된다.
https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-
overview/
꽤 쓸 만한…
https://github.com/Microsoft/BashOnWindows/issues
우분투 버전 확인
퍼미션
LXSS
Linux Subsystem로 이것이 Bash on Ubuntu on Windows의 코어 테크놀
로지다.
cmd의 현재 위치에서 bash를 실행한다
리눅스의 home 및 usr 디렉토리 이동
Windows의 D 드라이브로
bash에서 Windows 앱 실행하기
/mnt/d/ProgramFiles/Notepad++/notepad++.exe
자주 사용하는 앱은 path에 추가한다
Ubuntu의 GUI
1) VcXsrv Windows X Server 설치하기
https://sourceforge.net/projects/vcxsrv/?source=typ_redirect
2) VcXsrv 실행하기
3) bash에서 명령어 실행
4) gedit 실행
한글에서 영문으로 바꾸기
locale
locale -a
sudo update-locale LANG=en_US.UTF8
cat /etc/default/locale
현재의 locale 설정을 출력
사용할 수 있는 locale 리스트 출력
영문으로 변경
locale 출력
MobaXterm
http://mobaxterm.mobatek.net/
Terminator
https://gnometerminator.blogspot.kr/p/introduction.html
http://technote.kr/163
$ sudo apt-get install terminator
$ terminator
한글 깨어짐 해결
$ sudo apt-get install unifont
한글 입력
$ sudo apt install uim uim-xim uim-anthy
$ export XMODIFIERS="@im=uim"
$ export GTK_IM_MODULE=uim
$ export QT_IM_MODULE=uim
linux chrome 한글 띄어쓰기 버그 수정 -1 uim설치
http://springofmylife.tistory.com/122
벨 소리 안나게 하기
echo 'set bell-style none' >>~/.inputrc
.inputrc는 bash의 행 읽기 기능(Readline)을 제어하는 파일이다.
Windows 네이티브 SSH 서버 정지하기
WSL를 위해 개발자 모드를 유효하게 하면 자동적으로 Windows에서 SSH서
버 서비스(Windows기본 SSH 서버 서비스)가 동작한다.
SSH는 "Secure SHell"의 약어로, 암호화된 통신에 의한 네트워크 호스트에 리
모트 로그인 하여 쉘을 이용하는 기능이다.
접속하면 CMD.EXE가 쉘로 구동한다.
SSH은 접속 시에 인증을 실시하여 통신은 암호화되고 있어 비교적 안전한 프
로토콜이지만, 내부 LAN에 접속한 채 쓴다면 문제가 없지만 외부 연결이 된
PC라면 위험하다.
이 SSH 서비스를 동작시키지 않으려면 "서비스를 중지한다“ "방화벽의 SSH
관련 설정을 금지한다"의 2가지 설정이 필요하다.
SSH 서비스를 막으려면 "시작"→"모든 앱"→"Windows 관리 툴"→"서비스"를
열어 "SSH"에서 비롯된 2개의 서비스
SSH Server Broker
SSH Server Proxy
2개의 서비스를 정지하고 스타트 업 종류를 무효화 한다.
다음으로 제어판에서 「Windows 방화벽」을 열고、좌측의 트리 표시에서 「수
신 규칙」을 선택, 우측의 리스트에서 「SSH Server Proxy Service」를 선택하고,
우 클릭 메뉴에서 「규칙 무효화」를 선택한다.
Setting up a Shiny Development
Environment within Linux on Windows 10
https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx
ANSI escape code와 VT시퀸스 지원
vim, emacs, Midnight Commander, tmux, htop
등의 TUI 애플리케이션의 리치한 UI를 그릴 수
있다.
콘솔에서 24비트 칼라 지원
마우스 지원
SSH 설정
# service ssh start
# update-rc.d ssh defaults
# update-rc.d -f ssh enable 2 3 4 5
# update-rc.d ssh remove
# service ssh status
Bash on Windows에 Ubuntu 외 Fedora,
openSUSE도 대응.
Windows Store에서 쉽게 도입 가능하게.
- Build 2017
https://blogs.msdn.microsoft.com/commandline/2017/05/11/new-distros-coming-to-bashwsl-via-windows-store/
각각의 Linux 디스트리뷰션은 하나의 Windows 10 에서 동시에
공존하고 따로 실행이 가능하다.
"이로써 4개의 개성(Windows, Ubuntu, SUSE, Fedora)가 같은
1개의 OS상에서 실현하게 되었다. Windows 애플리케이션도
Linux 애플리케이션도 실행할 수 있는 최고의 개발 환경이 되
는 유일한 OS의 실현"(Windows&Devices 담당)
Windows Server에도 "Bash on Windows"장착.
Windows Server도 가상 머신을 사용하지 않고
Linux 바이너리를 실행 가능하게.
- Build 2017
https://blogs.technet.microsoft.com/hybridcloud/2017/05/10/windows-server-for-developers-news-from-microsoft-build-2017 /
Windows Subsystem for Linux(WSL), 보통 Bash on Windows로 알려진 기능
을 Windows Server에도 탑재.
이 독특한 조합에 의해서 개발자와 애플리케이션 관리자는 그동안 Linux 컨
테이너에서 사용하던 것과 같은 스크립트, 도구, 절차, 컨테이너 이미지를
Windows Server Container의 호스트에서도 사용할 수 있게 되었다.
Build 2017
vscode-cpptools
https://github.com/Microsoft/vscode-cpptools/blob/master/Documentation/Debugger/gdb/Windows%20Subsystem%20for%20Linux.md
https://www.cevelop.com/
https://www.jetbrains.com/clion/

Weitere ähnliche Inhalte

Ähnlich wie Bash on Ubuntu on Windows

개발자를 위한, WINDOWS 10으로 시작하는 UBUNTU LINUX
개발자를 위한,  WINDOWS 10으로 시작하는 UBUNTU LINUX개발자를 위한,  WINDOWS 10으로 시작하는 UBUNTU LINUX
개발자를 위한, WINDOWS 10으로 시작하는 UBUNTU LINUXUbuntu Korea Community
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?유명환 FunFun Yoo
 
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for LinuxJung Hyun Nam
 
센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012Daum DNA
 
OpenStack
OpenStackOpenStack
OpenStackULUG
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
모두의 쿠버네티스 (Kubernetes for everyone)
모두의 쿠버네티스 (Kubernetes for everyone)모두의 쿠버네티스 (Kubernetes for everyone)
모두의 쿠버네티스 (Kubernetes for everyone)Eunwoo Cho
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1Booseol Shin
 
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...Jung Hyun Nam
 
What is linux(리눅스란 무엇인가)
What is linux(리눅스란 무엇인가)What is linux(리눅스란 무엇인가)
What is linux(리눅스란 무엇인가)Youngbin Han
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍Suhan Park
 
Androidpn guide-0.5.0-ko
Androidpn guide-0.5.0-koAndroidpn guide-0.5.0-ko
Androidpn guide-0.5.0-kosandeepreddyp42
 
개방형 데스크톱 OS 기술동향
개방형 데스크톱 OS 기술동향개방형 데스크톱 OS 기술동향
개방형 데스크톱 OS 기술동향Kevin Kim
 

Ähnlich wie Bash on Ubuntu on Windows (16)

개발자를 위한, WINDOWS 10으로 시작하는 UBUNTU LINUX
개발자를 위한,  WINDOWS 10으로 시작하는 UBUNTU LINUX개발자를 위한,  WINDOWS 10으로 시작하는 UBUNTU LINUX
개발자를 위한, WINDOWS 10으로 시작하는 UBUNTU LINUX
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
 
센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012
 
OpenStack
OpenStackOpenStack
OpenStack
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
모두의 쿠버네티스 (Kubernetes for everyone)
모두의 쿠버네티스 (Kubernetes for everyone)모두의 쿠버네티스 (Kubernetes for everyone)
모두의 쿠버네티스 (Kubernetes for everyone)
 
Ubuntu에서 Flask개발 맛보기 - 1
Ubuntu에서  Flask개발 맛보기 - 1Ubuntu에서  Flask개발 맛보기 - 1
Ubuntu에서 Flask개발 맛보기 - 1
 
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
 
What is linux(리눅스란 무엇인가)
What is linux(리눅스란 무엇인가)What is linux(리눅스란 무엇인가)
What is linux(리눅스란 무엇인가)
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍모두가 함께하는ROS 워크숍
모두가 함께하는ROS 워크숍
 
Winsock
WinsockWinsock
Winsock
 
Androidpn guide-0.5.0-ko
Androidpn guide-0.5.0-koAndroidpn guide-0.5.0-ko
Androidpn guide-0.5.0-ko
 
개방형 데스크톱 OS 기술동향
개방형 데스크톱 OS 기술동향개방형 데스크톱 OS 기술동향
개방형 데스크톱 OS 기술동향
 

Mehr von 흥배 최

Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용흥배 최
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]흥배 최
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback흥배 최
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치흥배 최
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro흥배 최
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개흥배 최
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리흥배 최
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트흥배 최
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임흥배 최
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기흥배 최
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서흥배 최
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템흥배 최
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용흥배 최
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 

Mehr von 흥배 최 (20)

Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용Twitter의 snowflake 소개 및 활용
Twitter의 snowflake 소개 및 활용
 
Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]Go web framework 비교[번역 정리]
Go web framework 비교[번역 정리]
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Wtl 개요와 설치
Wtl 개요와 설치Wtl 개요와 설치
Wtl 개요와 설치
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 
닷넷 Apache avro
닷넷 Apache avro닷넷 Apache avro
닷넷 Apache avro
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
Mongodb 관리
Mongodb 관리Mongodb 관리
Mongodb 관리
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임ASP.NET과 C#으로 개발하는 대규모 소셜 게임
ASP.NET과 C#으로 개발하는 대규모 소셜 게임
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
 
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
Twitter에 있어서 대규모 시스템 구성, 3개의 원칙과 시스템
 
MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 

Kürzlich hochgeladen

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 

Kürzlich hochgeladen (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 

Bash on Ubuntu on Windows

  • 1. Bash on Ubuntu on Windows 최흥배 https://jacking75.github.io/
  • 2. Windows Subsystem for Linux(WSL) WSL은 Windows 10 Mobile에서 Android를 실행하는 "Project Astria"에 서 파생했다고 한다. Astria는 Android 호환 환경을 만들어 Windows 10 Mobile에서 Android 앱을 그대로 이용 가능하게 하는 "브리지"프로젝트였 다. 그러나 Astria는 2016년 2월 공식 중단되었다. Astria 때문에 마이크로 소프트는 Linux 호환 환경을 만들 필요가 있으며 이 것은 ARM 프로세서를 사용하여 Windows 10 Mobile에서도 작동할 필요가 있었다. 이 때문에 마이크로 소프트가 Windows 10에 도입한 것이 pico 프로세스로 불리는 것이다.
  • 3. 이것은 마이크로소프트 리서치에서 "Drawbridge"으로 개발된 기술의 일부. pico 프로세스는 1종의 컨테이너로 특정 서브 시스템에 의존하지 않는 프로 세스이다. 보통의 Win32 프로세스와 비교하면 Pico 프로세스는 “투명한 프로세스"라 고 해도 좋다. 다만 어디까지나 NT 커널이 관리하는 프로세스로 Win32 프 로세스처럼 메모리 등이 관리되고 스케줄링 된다. WSL의 크기는 1MB 미만이라고 한다
  • 5. 차이는 Windows 서브 시스템 등, 어느 서브 시스템용으로도 초기화 되지 않는 점이다. Drawbridge 아이디어는 이 투명한 Pico 프로세스 속에 OS의 커널에 상당하는 기능을 라이브러리(혹은 DLL)를 마련하여 과거의 Windows 호환 환경을 실현하는 것이었다. 이 라이브러리화 된 OS(혹은 커널) 는 Pico 프로세스가 가진 “Pal”이라 고 불리는 모듈을 통해서 NT 커널 측에 실제로 처리를 의뢰한다. https://www.microsoft.com/en- us/research/project/drawbridge/
  • 6. Project Astria로 가상 머신이 아닌 컨테이너를 이용한 것은 PC에 비하면 성 능이 약하고 메모리 등의 자원이 작은 32비트 ARM 프로세서(Windows 10 Mobile은 아직 ARM의 64비트 환경에 비대응)에서 가상 머신을 움직이는 것은 퍼포먼스 등의 점에서 문제가 있었다고 생각된다. 여기서 사용된 것이 마이크로 소프트 리서치에서 개발된 Drawbridge 였던 셈이다.
  • 7. WSL은 커널 모드 측에 Linux를 지원하기 위한 드라이버(LXSS.SYS와 LXCORE.SYS)를 준비하고 Linux 커널 API를 처리한다. 원래 Windows NT는 POSIX, UNIX 서브 시스템 등을 지원하기 위한 대/소문 자를 구분하는 파일 시스템의 기능이나 UNIX 고유 folk(실행 중인 프로세스 의 사본을 만들어 양쪽을 재개하여 한 프로세스에서 또 다른 프로세스를 생 성하는 API)에 해당하는 기능을 가지고 있었다.
  • 8. 이들은 Win32 API에서는 불필요해서 사용되지 않은 상황에서 커널 자체에 는 기능이 남아 있었던 셈이다. 종래의 POSIX 서브 시스템이나 SUA는 실행 파일 형식은 Windows 독자적인 것을 이용했다(당시는 UNIX 시스템 간의 바이너리 호환성은 없었다. 동일 CPU 아키텍처의 바이너리 호환성이 가능하게 되는 것은 Linux부터지만 현 재도 완전한 바이너리 호환성이 있는 것은 아니다). 이 때문에 실제로는 Windows 서브 시스템 측에 의존했던 부분이 있었다. WSL이 다른 점 중 하나는 실행 파일 형식은 Ubuntu Linux의 바이너리 그대 로 라는 점이다.
  • 9. bash.exe는 순수한 Windows 애플리케이션에서 보통의 콘솔 응용 소프트웨 어로서 동작하며 Windows측에 있는 Linux Session Manager 서비스와 통 신을 실시한다. Linux Session Manager는 커널 모드에 있는 LXSS.SYS, LXCORE.SYS를 호출. LXSS/LXCORE는 Windows 커널 기능 등을 써서 pico 프로세스를 생성한다.
  • 10. 여기에는 Linux 호환 환경이 조성되고, 보통의 Linux 구조를 사용하여 init 프 로세스가 실행되면서 거기서 bash를 기동한다. bash는 쉘로 애플리케이션 기동 등은 Linux API를 호출하지만 이것들은 LXSS/LXCORE 나 Windows 커널 기능을 병용해서 처리된다.
  • 13.
  • 16. LXSS Linux Subsystem로 이것이 Bash on Ubuntu on Windows의 코어 테크놀 로지다.
  • 17. cmd의 현재 위치에서 bash를 실행한다 리눅스의 home 및 usr 디렉토리 이동
  • 19. bash에서 Windows 앱 실행하기 /mnt/d/ProgramFiles/Notepad++/notepad++.exe 자주 사용하는 앱은 path에 추가한다
  • 20. Ubuntu의 GUI 1) VcXsrv Windows X Server 설치하기 https://sourceforge.net/projects/vcxsrv/?source=typ_redirect
  • 21. 2) VcXsrv 실행하기 3) bash에서 명령어 실행
  • 23. 한글에서 영문으로 바꾸기 locale locale -a sudo update-locale LANG=en_US.UTF8 cat /etc/default/locale 현재의 locale 설정을 출력 사용할 수 있는 locale 리스트 출력 영문으로 변경 locale 출력
  • 25.
  • 27. $ sudo apt-get install terminator $ terminator 한글 깨어짐 해결 $ sudo apt-get install unifont 한글 입력 $ sudo apt install uim uim-xim uim-anthy $ export XMODIFIERS="@im=uim" $ export GTK_IM_MODULE=uim $ export QT_IM_MODULE=uim linux chrome 한글 띄어쓰기 버그 수정 -1 uim설치 http://springofmylife.tistory.com/122
  • 28. 벨 소리 안나게 하기 echo 'set bell-style none' >>~/.inputrc .inputrc는 bash의 행 읽기 기능(Readline)을 제어하는 파일이다.
  • 29. Windows 네이티브 SSH 서버 정지하기 WSL를 위해 개발자 모드를 유효하게 하면 자동적으로 Windows에서 SSH서 버 서비스(Windows기본 SSH 서버 서비스)가 동작한다. SSH는 "Secure SHell"의 약어로, 암호화된 통신에 의한 네트워크 호스트에 리 모트 로그인 하여 쉘을 이용하는 기능이다. 접속하면 CMD.EXE가 쉘로 구동한다. SSH은 접속 시에 인증을 실시하여 통신은 암호화되고 있어 비교적 안전한 프 로토콜이지만, 내부 LAN에 접속한 채 쓴다면 문제가 없지만 외부 연결이 된 PC라면 위험하다.
  • 30. 이 SSH 서비스를 동작시키지 않으려면 "서비스를 중지한다“ "방화벽의 SSH 관련 설정을 금지한다"의 2가지 설정이 필요하다. SSH 서비스를 막으려면 "시작"→"모든 앱"→"Windows 관리 툴"→"서비스"를 열어 "SSH"에서 비롯된 2개의 서비스 SSH Server Broker SSH Server Proxy 2개의 서비스를 정지하고 스타트 업 종류를 무효화 한다.
  • 31. 다음으로 제어판에서 「Windows 방화벽」을 열고、좌측의 트리 표시에서 「수 신 규칙」을 선택, 우측의 리스트에서 「SSH Server Proxy Service」를 선택하고, 우 클릭 메뉴에서 「규칙 무효화」를 선택한다.
  • 32. Setting up a Shiny Development Environment within Linux on Windows 10 https://www.hanselman.com/blog/SettingUpAShinyDevelopmentEnvironmentWithinLinuxOnWindows10.aspx ANSI escape code와 VT시퀸스 지원 vim, emacs, Midnight Commander, tmux, htop 등의 TUI 애플리케이션의 리치한 UI를 그릴 수 있다.
  • 35. SSH 설정 # service ssh start # update-rc.d ssh defaults # update-rc.d -f ssh enable 2 3 4 5 # update-rc.d ssh remove # service ssh status
  • 36.
  • 37.
  • 38. Bash on Windows에 Ubuntu 외 Fedora, openSUSE도 대응. Windows Store에서 쉽게 도입 가능하게. - Build 2017 https://blogs.msdn.microsoft.com/commandline/2017/05/11/new-distros-coming-to-bashwsl-via-windows-store/
  • 39.
  • 40. 각각의 Linux 디스트리뷰션은 하나의 Windows 10 에서 동시에 공존하고 따로 실행이 가능하다. "이로써 4개의 개성(Windows, Ubuntu, SUSE, Fedora)가 같은 1개의 OS상에서 실현하게 되었다. Windows 애플리케이션도 Linux 애플리케이션도 실행할 수 있는 최고의 개발 환경이 되 는 유일한 OS의 실현"(Windows&Devices 담당)
  • 41. Windows Server에도 "Bash on Windows"장착. Windows Server도 가상 머신을 사용하지 않고 Linux 바이너리를 실행 가능하게. - Build 2017 https://blogs.technet.microsoft.com/hybridcloud/2017/05/10/windows-server-for-developers-news-from-microsoft-build-2017 / Windows Subsystem for Linux(WSL), 보통 Bash on Windows로 알려진 기능 을 Windows Server에도 탑재. 이 독특한 조합에 의해서 개발자와 애플리케이션 관리자는 그동안 Linux 컨 테이너에서 사용하던 것과 같은 스크립트, 도구, 절차, 컨테이너 이미지를 Windows Server Container의 호스트에서도 사용할 수 있게 되었다.