윈도: 윈도 드라이브에 이름이 있는 파이프가 있습니까?
13050 단어 BashOnUbuntuOnWindows
이 보도는 너무 낡아서 적절하게 부패했다.
최신판은 이 페이지에서 할 수 없다고 할 수 있다.
나는 보도를 따르고 싶지만, 나는 전혀 그런 특별한 마음을 가지고 있지 않다.
최신 정보를 찾아보세요.
이마
Surface의 Windows 10에서 Anniversary Update는 아무렇게나 다시 시작하거나 업데이트할 때마다 분개할 정도로 소문난 Bash와 Ubuntu를 사용할 수 있다.
최근 윈도를 적극적으로 쓰는 이유가 미쓰코의 똥만큼 많지는 않지만, 가끔 윈도가 아니면 안 되는 고통 현상1도 일어나는 것도 사실이다.
Cygwin이면 스페셜 파일 주변에 힘든 부분이 있는데 거기를 어디로 이동하는지에 관심이 생겨서 잠깐 놀았어요.
설치하다.
고그레카스
정말 우분투인가요?
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
혼연일체의 우분투다.Windows File I/O
Windows 영역에서 읽기
hello!
ァゼソゾタダチボポマミ
АЪЫЬЭЮЯклмн
이러한 텍스트 파일을 C:\바로 아래에 저장합니다. Bash on Ubuntu Windows에서 보십시오...$ file /mnt/c/test.txt
/mnt/c/test.txt: Non-ISO extended-ASCII text, with CRLF line terminators
$ cat /mnt/c/test.txt
hello!
�@�[�\�]�^�_�`�{�|�}�~
�@�[�\�]�^�_�`�{�|�}�~
예상대로 별다른 감동은 없었다.Windows 파일 시스템을 설치하는 파일 읽기와 관련해서는/mnt 아래에 자동으로 설치되는 것 외에는 기존 VM 및 컨테이너와 거의 차이가 없습니다.
사용 권한
Windows와 Linux는 파일 권한 방식에 있어서 호환성을 전혀 느끼지 못합니다.
$ ll /mnt/c
ls: cannot access hiberfil.sys: Permission denied
ls: cannot access pagefile.sys: Permission denied
ls: cannot access swapfile.sys: Permission denied
total 140
drwxrwxrwx 2 root root 0 Aug 8 07:08 ./
drwxr-xr-x 2 root root 0 Jan 1 1970 ../
-r-xr-xr-x 1 root root 1 Oct 30 2015 BOOTNXT*
-????????? ? ? ? ? ? hiberfil.sys
drwxrwxrwx 2 root root 0 Nov 27 2015 Intel/
drwxrwxrwx 2 root root 0 May 4 02:02 OneDriveTemp/
-????????? ? ? ? ? ? pagefile.sys
d--------- 2 root root 0 Jul 16 20:47 PerfLogs/
drwxrwxrwx 2 root root 0 Aug 6 20:21 ProgramData/
dr-xr-xr-x 2 root root 0 Aug 6 19:53 Program Files/
dr-xr-xr-x 2 root root 0 Aug 8 07:04 Program Files (x86)/
...
?????????Bash를 놀게 할 뜻은 전혀 없는 것 같습니다.
Windows 영역에 쓰기
777이면 소쿠리로 해 봤어요, 그렇게 달지 않아요.
$ echo hoge > /mnt/c/hoge.txt
bash: /mnt/c/hoge.txt: Permission denied
777은 무엇입니까그럼 루트면 갈 수 있어요.
$ sudo echo hoge > /mnt/c/hoge.txt
bash: /mnt/c/hoge.txt: Permission denied
있잖아 그래...그럼 Admin으로 Bash를 시작해 보십시오.
$ echo hoge > /mnt/c/hoge.txt
$ cat /mnt/c/hoge.txt
hoge
아, 큰일났다.Bashon Ubuntu Windows는 언뜻 보기에는 Linux이지만 실제로는 Windows에서 실행되는 과정으로 Windows의 파일 시스템과 권한이 먼저 있는 데다 Linux의 권한까지 더해져 2층 구조를 형성한 것으로 파악됐다.
따라서 Bash on Ubuntu on Windows에서/mnt/
파이프 이름 지정
Cygwin에서 잘 안되는 스페셜 파일은 어때요?
$ mkfifo /mnt/c/bash_test/hoge_pipe
mkfifo: cannot create fifo ‘/mnt/c/bash_test/hoge_pipe’: Operation not permitted
오, 파이프도 만들 줄 모르다니, 정말 못났다.참고: Ubuntu의 파일 시스템 영역에서 이름이 지정된 파이프를 만들 수 있습니다.
소프트 링크
$ cd /mnt/c/bash_test/
$ ln -s /mnt hoge
$ ll
total 8
drwxrwxrwx 2 root root 0 Aug 8 09:14 ./
drwxrwxrwx 2 root root 0 Aug 8 08:56 ../
lrwxrwxrwx 1 root root 4 Aug 8 09:14 hoge -> /mnt/
링크를 붙일 수 있을 것 같아요.링크된 파일이 포함된 창고를 체크아웃하고 여기서 고치면 어떨까
cp -rf
뜯어버리면 어떨까 관심이 쏠린다.장치 파일 관련
mount
안되겠지?
$ mkisofs -r -J -V test_image -o image.iso /home/
I: -input-charset not specified, using utf-8 (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 1614
Total directory bytes: 8192
Path table size(bytes): 70
Max brk space used 23000
198 extents written (0 MB)
$ ll
total 404
drwxrwxrwx 2 root root 0 Aug 8 09:42 ./
drwxrwxrwx 2 root root 0 Aug 8 08:56 ../
-rwxrwxrwx 1 root root 405504 Aug 8 09:42 image.iso*
drwxrwxrwx 2 root root 0 Aug 8 09:23 test_mount/
$ sudo mount image.iso test_mount/
mount: Could not find any loop device. Maybe this kernel does not know
about the loop device? (If so, recompile or `modprobe loop'.)
안된다고 하기 전에 케네르는 루프 장비를 모른다는 슬픈 말을 했어요.$ ll /dev/
ls: cannot access /dev/lxss: Operation not permitted
ls: /dev/random: Invalid argument
total 8
drwxr-xr-x 2 root root 0 Aug 8 05:18 ./
drwxr-xr-x 2 root root 0 Jan 1 1970 ../
drwxr-xr-x 2 root root 0 Aug 8 04:57 block/
lrwxrwxrwx 1 root root 13 Aug 8 04:57 fd -> /proc/self/fd/
crw------- 1 root root 0, 0 Aug 8 09:55 kmsg
c????????? ? ? ? ? ? lxss
crw-rw-rw- 1 root root 1, 3 Jan 1 1970 null
crw-rw-rw- 0 root tty 5, 2 Aug 8 09:40 ptmx
drwxr-xr-x 0 root root 0 Aug 8 04:57 pts/
crw-rw-rw- 1 root root 1, 8 Aug 8 09:55 random
lrwxrwxrwx 1 root root 8 Aug 8 04:57 shm -> /run/shm/
lrwxrwxrwx 1 root root 15 Aug 8 04:57 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Aug 8 04:57 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Aug 8 04:57 stdout -> /proc/self/fd/1
crw------- 1 integral tty 4, 1 Aug 8 2016 tty
crw-rw-rw- 1 root tty 4, 0 Aug 8 09:55 tty0
crw------- 1 integral tty 4, 1 Aug 8 2016 tty1
crw------- 1 integral tty 4, 2 Aug 8 09:55 tty2
crw-rw-rw- 1 root root 1, 9 Aug 8 09:55 urandom
crw-rw-rw- 1 root root 0, 0 Aug 8 09:55 zero
시원하군. 제대로 된 장비가 없네. lxss는 마법이야. 뭐야.LXSS
Linux Subsystem에서는 Bash on Ubuntu Windows의 핵심 기술인 것 같습니다.
$ ll /mnt/c/Users/ひみつ/AppData/Local/lxss/
total 912
drwxrwxrwx 2 root root 0 Aug 8 04:57 ./
drwxrwxrwx 2 root root 0 Aug 8 07:03 ../
-rwxrwxrwx 1 root root 911975 Aug 6 20:34 bash.ico*
d--------- 2 root root 0 Aug 6 20:34 cache/
d--------- 2 root root 0 Aug 6 20:34 data/
d--------- 2 root root 0 Aug 6 20:45 home/
d--------- 2 root root 0 Aug 6 20:34 mnt/
d--------- 2 root root 0 Aug 8 09:36 root/
d--------- 2 root root 0 Aug 6 20:34 rootfs/
-rwxrwxrwx 1 root root 64 Aug 6 20:32 sha256*
d--------- 2 root root 0 Aug 8 04:57 temp/
읊다, 읊조리다권한은 000입니다. 이곳은 불가침 구역인 것 같습니다.참고로 lxss 디렉터리는 Windows에서 보면 500MB 정도입니다.
인터넷은요?
네트워크 차단
LXSS의 구조와/dev의 모습으로 미뤄 네트워크 차단은 없는 것 같다.
$ ip a
SO_SNDBUF: Invalid argument
$ ifconfig
Command 'ifconfig' is available in '/sbin/ifconfig'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
ifconfig: command not found
$ route
Command 'route' is available in '/sbin/route'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative privileges associated with your user account.
route: command not found
빙고!인터넷은 역시 Windows를 이용한다.네트워크를 사용할 수 없는 Linux에는 Tsumannaku가 없습니까?
ping 재미있는 행동을 하다.
# ユーザー権限でbashを起動した場合
$ sudo ping google.com
ping: icmp open socket: Permission denied
# Admin権限でbashを起動した場合
$ ping google.com
PING google.com (172.217.25.78) 56(84) bytes of data.
64 bytes from nrt13s50-in-f14.1e100.net (172.217.25.78): icmp_seq=1 ttl=53 time=12.7 ms
oh... Resolver
이름 해결은 Ubuntu Windows에 혼자 있는 것 같습니다.
$ cat /etc/hosts
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
...
$ dig google.com
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
...
인터넷 소켓을 사용하면 어떻게 됩니까?$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
PowerShell에서 볼 때 Windows에 포트가 있음을 알 수 있습니다.PS C:\> netstat -na
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING
...
총결산뻔한 일
C:\Windows\System32\bash.exe
/mnt/c/Users/<username>/AppData/Local/lxss/
에 있지만 Windows에 의해 조작되지 않습니다2알 수 없음
이번 접촉 과정에서 의문은 있었지만 화려하게 화제를 놓았다
처음에는 이름이 붙은 파이프 운동이었나요?하지만 정신을 차리면 아침이야,
Bash on Ubuntu Windows는 폭발 속도가 빠르고 진정한 Linux에 가깝다는 장점이 있지만, Bash에 의해 Windows 컨트롤러를 가지고 놀지 않고, Windows에 의해 Ubuntu의 파일을 직접 가지고 놀지 않는 약점도 있다.
나는 Cygwin이 Windows와 Linux의 상호 곱셈으로 더욱 편리하다고 생각한다.
Microsoft의 관점에서 볼 때 OSS계에서 폭발적으로 성장한 자원을 얻으려면 Windows에서도 OSS와 같은 판매 대화를 문제 없이 사용하려는 의도가 명백하다3.
하지만 VM, 컨테이너, Cygwin에 비하면 비교할 수 없는 미묘한 실상이다. 솔직히 깜짝 놀랄 만한 사용법은 생각해 내지 못했다.
뱀발이지만 기본적으로 터미널이 너무 똥을 싸서 우수한 터미널 소프트웨어에서 bash를 얻을 수 있다.가장 좋은 것은exe를 실행하는 것이다.
유니코드가 왜 UTF-16이야!SJIS가 바보야?이렇게 불평하면서 Windows로 마변성을 하고 망가진 파일을 고친다. 일부 위험한 문자는 비슷하지만 비문자로 돌아온다. BOM이 있는지 없는지 곳곳에서 폭발이 일어나고 CRLF가 방해가 되는 등 여러 가지 문제가 있기 때문에 Windows기기를 모두 창문에서 던져버린다!이렇게 사람을 웃게 하는 광경이 여러 번 반복되어 나는 피곤했다
이 사이트는 많은 실험을 하였는데, 캐비닛의 민감한 파일 이름이 Windows에서 어떻게 해석되는지는 또 다른 것이 많다. ↩ http://rcmdnk.github.io/blog/2016/06/05/computer-windows-ubuntu-bash/
이런 의미에서 맥과 OSS의 친화력은 OSS의 친화력보다 훨씬 높아서 매우 편리하다
Reference
이 문제에 관하여(윈도: 윈도 드라이브에 이름이 있는 파이프가 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/o_-____-___-o/items/fe410c3a93825c052e84텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)