initial commit
This commit is contained in:
commit
9ca2767d48
259 changed files with 21528 additions and 0 deletions
532
blog/2023-02-03-linux-begin-01-cygwin.md
Normal file
532
blog/2023-02-03-linux-begin-01-cygwin.md
Normal file
|
|
@ -0,0 +1,532 @@
|
|||
---
|
||||
title: '리눅스 입문 - Cygwin'
|
||||
description: 'Cygwin으로 리눅스/유닉스의 기능을 사용한다.'
|
||||
image: '/assets/blog/01-cygwin/00-xfce.png'
|
||||
authors: [bitdori]
|
||||
---
|
||||
|
||||
[우분투][우분투] [그누/리눅스][그누/리눅스] 및 [유닉스][유닉스] 처럼 말로만 들어보고
|
||||
사용해 본 적이 없는 타 운영체제 또는
|
||||
|
||||
[Bash][Bash] 나 [노드][노드] 등 소프트웨어 개발을 하면서 잠깐씩만 접해 본
|
||||
비(非) MS Windows 환경을 [시그윈][시그윈] 을 통해
|
||||
구동시킬 수 있다.
|
||||
|
||||
[가상머신][가상머신]이나 네이티브 환경에서 [X][X] 를 구동하면 리눅스도 MS Windows처럼 마우스를
|
||||
이용한 그래픽 환경을 띄울 수 있다.
|
||||
|
||||
### [git-bash][git-bash], [msys2][msys2], [WSL][WSL] 대신 Cygwin을 사용하는 이유
|
||||
|
||||
TL;DR Cygwin은 검증된 마이너이기 때문이다.
|
||||
|
||||
[git for windows][git for windows], msys2, WSL 모두 각각 유명하다보니
|
||||
이미 설치해서 해 놓은 작업이 매달려 있는 경우가 보통인데 입문자가 이런 환경에다가
|
||||
연습 삼다가 기존 환경이 꼬여버리면 아주 번거로워질 수 있다.
|
||||
|
||||
반면에 처음부터 Cygwin내에서 실습을 하면 잘못 건드려서 꼬여버려도
|
||||
[실패 격리][실패 격리]를 할 수 있다.
|
||||
|
||||
2020년대가 지나면서 입문자가 Cygwin을 소개 받는 경우는 거의 없기 때문에 Cygwin 내에서만
|
||||
이것저것 건드린다면 최악의 경우에도 그저 Cygwin을 삭제하고 다시 설치하는 것으로 원래상태를
|
||||
복구할 수 있다.
|
||||
|
||||
_사양, 호환성_
|
||||
|
||||
WSL은 가상화 기능 위에서 돌아가는데, Cygwin은 [가상머신][가상머신]에 비해서
|
||||
시스템 요구 사항이 낮아 32비트 등 더욱 다양한 환경에서 사용할 수 있다.
|
||||
|
||||
입문하는 입장에서 실습 환경 깔아두기가 용이하다는 것이다.
|
||||
|
||||
비교적 최근부터 사용률이 올라가고 있는 [docker][docker] 는 시스템 요구 사항이 가상머신보다 낮기는
|
||||
하지만 Cygwin보다 배우기 어렵고 Windows 버전 도커는 완성도가 타 플랫폼 버전에 비해서
|
||||
떨어진다.
|
||||
|
||||
{/*
|
||||
```markdown
|
||||
또한, Cygwin은 처음 설치할 때에만 인터넷에 연결하면 되는데 도커는 docker hub
|
||||
및 해당 이미지의 패키지 매니저에서 필요할 때 마다 지속적으로 인터넷 연결을
|
||||
해야 구동되는 행위가 있기 때문에 사용자의 인터넷 연결성 요구사항이 Cygwin보다 높다.
|
||||
|
||||
2020년대 이후에 인터넷에 연결하는 것이 힘든 일은 아니지만
|
||||
https://ko.wikipedia.org/wiki/KT_아현지사_통신구_화재,
|
||||
https://ko.wikipedia.org/wiki/SK_C%26C_데이터_센터_화재
|
||||
처럼 물리적인 이유로든
|
||||
https://github.blog/2015-03-27-large-scale-ddos-attack-on-github-com/
|
||||
같은 의도적 공격, 그 외 https://blog.cloudflare.com/tag/outage/ 같은
|
||||
기타 이유로 서비스를 이용하지 못 하는 경우는 일어나기 마련이다.
|
||||
|
||||
이유가 어찌되었건 사용자에게 필요한 전제조건이 하나라도 줄어들면 그만큼 접근성은
|
||||
좋아지는 것이다.
|
||||
```
|
||||
*/}
|
||||
|
||||
msys2가 Cygwin으로부터 시작한 프로젝트이기 때문에 이미 msys2 경험이 있어서 신뢰하고 있다면
|
||||
Cygwin도 비슷한 수준으로 신뢰할 수 있을 것이다.
|
||||
|
||||
터미널 환경 자체가 익숙하지 않은 경우 https://www.busybox.net/live_bbox/live_bbox.html
|
||||
에서 무설치로 체험해 볼 수 있다.
|
||||
|
||||
## 설치
|
||||
|
||||
https://cygwin.com/install.html - _Installing and Updating Cygwin Packages_
|
||||
섹션에서 [setup-x86_64.exe][setup-x86_64.exe] 다운로드
|
||||
|
||||

|
||||
|
||||
Internet으로부터 다운로드 -> 설치 경로 확인 -> 연결 설정 확인
|
||||
|
||||
 다음
|
||||
 다음
|
||||

|
||||
|
||||
사이트는 .jp, .tw 중에서 선택하면 지리적으로 가깝기 때문에 비교적 속도가 빠르다.
|
||||
그럼에도 다운로드 해야 할 개체가 워낙 많기 때문에 끝날 때 까지 잠시 기다려야 한다.
|
||||
|
||||

|
||||
|
||||
한국 https://ftp.kaist.ac.kr 에서도 서비스를 제공하지만 간혹 문제가 발생하는
|
||||
경우가 있다.
|
||||
|
||||

|
||||
|
||||
▲ https:/ftp.kaist.ac.kr에서 패키지 정보를 불러오지 못 하고 있다.
|
||||
|
||||

|
||||
|
||||
Select Packages에서 설치할 패키지 목록을 볼 수 있는데 기본값으로 두고 다음으로 넘어간다.
|
||||
|
||||
 다음
|
||||
 다음
|
||||
 다음
|
||||

|
||||
|
||||
## 첫 구동
|
||||
|
||||
_이미 msys2 등을 사용하면서 각종 시스템 설정을 해 봤다면 PATH에 연동하는 팁을 적용해보고 싶을 수도 있겠지만 DLL 충돌로 문제가 발생할 수 있으므로 여기에서는 해당 팁을 안내하지 않는다._
|
||||
|
||||
설치가 끝난 뒤 바탕 화면에 생성된 _Cygwin64 Terminal_ 을 실행
|
||||
|
||||
`exit`를 입력하고 엔터를 입력하면 터미널이 종료된다.
|
||||
|
||||

|
||||
|
||||
## [커맨드 (명령어)][커맨드 (명령어)]
|
||||
|
||||
다시 _Cygwin64 Terminal_ 을 실행
|
||||
|
||||
다음 각 명령어를 하나씩 입력하고 엔터를 쳐서 실행해 본다.
|
||||
|
||||
`cal`: 달력을 출력한다. (Calendar)
|
||||
|
||||
`pwd`: 현재 탐색 중인 위치를 출력한다. (Print Working Directory)
|
||||
|
||||
`ls`: 숨김 파일을 제외하고 현재 위치의 파일 목록을 출력한다. (List)
|
||||
|
||||
`ps`: 현재 실행 중인 프로세스 목록을 출력한다. (Process Status)
|
||||
|
||||
`uname`: 현재 시스템의 운영체제 정보를 출력한다 (unix name)
|
||||
|
||||
`man`: 설명서 (manual)
|
||||
|
||||

|
||||
|
||||
`man` 을 실행하면 어떤 실행 결과가 나오는 대신 도움 문구가 출력되는데 이번에는
|
||||
`man man` 이라고 입력 해 본다.
|
||||
|
||||

|
||||
|
||||
실행한 결과 나오는 본문이 `man` 커맨드에 대한 설명서이다. 즉, man을 어떻게 사용해야 하는지
|
||||
man 커맨드로 보고 있는 것이다.
|
||||
|
||||

|
||||
|
||||
실수로 man man 사이에 공백이 여러 개 들어갔어도 똑같이 실행되기 때문에
|
||||
공백을 다시 한 칸으로 줄이려고 굳이 삭제하지 않아도 된다.
|
||||
|
||||
`q` 를 누르면 man에서 나갈 수 있다.
|
||||
|
||||
다시 `man man` 을 실행 해 본다.
|
||||
|
||||
man에서 `f` 를 누르면 다음 페이지로, `b` 를 누르면 이전 페이지로 올라갈 수 있다.
|
||||
|
||||
사용 예시(EXAMPLES)란을 보면 `man ls` 항목이 있는데 man 커맨드로 ls에 대한 설명을 보는 방법을
|
||||
안내하고 있는 부분이다.
|
||||
|
||||

|
||||
|
||||
q를 눌러서 종료하고 다시 `man ls` 를 띄워보면 **SYNOPSIS** 단락에
|
||||
`ls [OPTION]... [FILE]...` 형식이 있는데 [OPTION] 자리에 `-` 로 시작하는 각종 flag를
|
||||
대입할 수 있다.
|
||||
바로 아래 **DESCRIPTION** 단락에서 `-a` 옵션 확인
|
||||
|
||||

|
||||

|
||||
|
||||
`q` 를 입력해서 설명서를 빠져 나온 후 `ls` 를 한 번 입력해보고 `ls -a` 를 다시 입력해 본다.
|
||||
|
||||

|
||||
|
||||
ls만 입력 했을 땐 보이지 않았던 파일도 나오는데, 리눅스에서는 파일이름이 없이 `.` 으로
|
||||
시작하는 파일은 숨김처리를 한다. ls의 `-a` 옵션은 이런 숨김파일도 함께 출력하도록 한다.
|
||||
|
||||
- 다시 `man ls` 실행
|
||||
|
||||
`f` 를 눌러 아랫쪽으로 더 내려가면 `-l` 옵션이 있다.
|
||||
|
||||

|
||||
|
||||
- `q` 를 입력해서 나온 뒤 `ls -al` 실행
|
||||
|
||||
`-l` 옵션까지 추가해서 실행한 결과 각 목록의 상세한 정보도 함께 표시하고 있다. 이처럼
|
||||
몇몇 옵션을 함께 조합할 수도 있다.
|
||||
|
||||

|
||||
|
||||
{/* 간혹 어떤 커맨드는 mandb가 없어서 설명서를 볼 수 없는 경우도 있는데,
|
||||
맨 처음 Cygwin을 설치할 때 실행했던 `setup-x86_64.exe` 를 다시 실행해서
|
||||
해당 mandb를 마저 설치해주면 된다. */}
|
||||
|
||||
## [vi][vi]
|
||||
|
||||
[`vimtutor`][`vimtutor`] 를 실행한다.
|
||||
|
||||
위에서 `f` 키와 `b` 키로 man 페이지를 탐색해 보았는데 vi 또한 비슷한 키맵으로 커서를
|
||||
이동할 수 있다.
|
||||
|
||||
단, Ctrl 키를 조합해서 `Ctrl f` / `Ctrl b` 로 페이지를 이동할 수 있다.
|
||||
|
||||

|
||||
|
||||
vimtutor에서 빠져나가려면 우선 `:` 를 입력한다.
|
||||
|
||||
그러면 하단에 `:` 이 표시되는데 `q` 를 마저 입력해서 `:q` 로 만들고 엔터를 입력해
|
||||
빠져나갈 수 있다.
|
||||
|
||||

|
||||
|
||||
vimtutor는 man과는 별도로 vim에서 제공하는 vim 학습서이다.
|
||||
|
||||
엄밀히 따지면 [vim][vim]과 vi는 서로 다른 개발자의 개별 프로그램이지만
|
||||
[BSD vi][BSD vi] 이든 vim이든 핵심적인 부분을 공유하기 때문에 vimtutor로도 vi 사용법을
|
||||
익힐 수 있다.
|
||||
|
||||
`man` 과 vi의 키 조합이 비슷한데, [Unix 계열][Unix 계열] 운영체제에서는
|
||||
비슷한 [인터페이스][인터페이스]를 여러 상황에서 반복적으로 적용하기 때문에
|
||||
한 가지 개념을 학습하고나면 지속적으로 응용 할 수 있다.
|
||||
|
||||
## 커맨드 Part 2
|
||||
|
||||
커맨드 첫 장에서는 여러 번 실행해도 시스템에 아무 변화를 주지 않고 몇 가지 정보를 출력하기만 하는
|
||||
명령어를 소개했다.
|
||||
|
||||
`man` 으로 각 명령어의 사용법을 익히고 `vimtutor` 의 내용까지 이해했다면 이제부터
|
||||
시스템에 변화를 주는 커맨드도 하나씩 사용해 보도록 한다.
|
||||
|
||||
- `mkdir ~/cygwin-test` 로 디렉토리 생성
|
||||
|
||||
Windows 탐색기에서 `%userprofile%` (보통 C:\Users\사용자명) 로 들어가보면
|
||||
방금 생성한 디렉토리를 볼 수 있다.
|
||||
|
||||

|
||||
|
||||
Unix 계열에서는 `~` 를 사용자 홈 디렉토리로 사용한다.
|
||||
|
||||
리눅스재단에서는 [FHS][FHS] 라는 계층구조를 제안하고 있는데, 이는 MS Windows에서
|
||||
`C:\Program Files\` 로 들어가면 설치된 프로그램 목록을 볼 수 있는 것과 마찬가지로
|
||||
리눅스 운영체제 간 일정하게 사용하기로 합의된 디렉토리 규격이다.
|
||||
|
||||
앞뒤로 아무 문자 없이 `/` 로 시작하는 _루트 디렉토리_ 는 운영체제가 설치된
|
||||
디스크에 배치되는 것이 원칙이지만, 이 실습장에서는 Cygwin으로 FHS를 탐색하고
|
||||
있기 때문에 `/` 의 실제 위치는 C:가 아니라 `C:\cygwin64` 이다.
|
||||
|
||||
탐색기에서 `%homedrive%\cygwin64\home\사용자\cygwin-test` 로 이동해보면
|
||||
위에서 mkdir로 생성한 `~/cygwin-test` 디렉토리로 들어갈 것이다.
|
||||
|
||||
---
|
||||
|
||||
`rmdir` 커맨드로는 디렉토리를 삭제할 수 있다.
|
||||
|
||||
- `ls`
|
||||
- `rmdir ~/cygwin-test` 로 디렉토리 삭제
|
||||
- `ls ~` 로 삭제 여부 확인
|
||||
|
||||

|
||||
|
||||
- `mkdir ~/cygwin-test` 로 다시 디렉토리 생성
|
||||
- `cd ~/cygwin-test` 를 입력해 방금 생성한 디렉토리로 이동
|
||||
- `touch testfile` 로 빈 파일 생성
|
||||
- `vi testfile` -> `i` 입력 -> `first testfile` 이라고 입력 -> `esc` 키 입력
|
||||
-> `:wq` 를 입력하여 저장 & 종료
|
||||
|
||||

|
||||
|
||||
`touch` 는 원래 파일의 타임스탬프를 바꾸는 명령어이지만 지금처럼 파일을 생성하기 위해
|
||||
사용할 수도 있다.
|
||||
|
||||
---
|
||||
|
||||
> `Failed to source defaults.vim` 메세지가 나오는 경우
|
||||
> 
|
||||
> Cygwin 설치 프로그램 (setup-x86_64.exe)을 다시 실행 ->
|
||||
> **Select Packages** 단계에서 Search란에 `vim` 검색
|
||||
> 
|
||||
> 
|
||||
> 
|
||||
> Skip 부분 더블클릭하여 버전번호 선택 ->
|
||||
> 다음으로 넘어가서 설치
|
||||
|
||||
---
|
||||
|
||||
- `cat testfile` 로 testfile의 내용물 확인
|
||||
|
||||
`vi` 를 쓰는 대신 곧바로 내용물을 출력하고 싶을 때 cat을 사용하면 된다.
|
||||
|
||||

|
||||
|
||||
- `echo "new string" >> testfile && cat testfile` 실행
|
||||
|
||||
`echo 문자열`: 문자열 출력
|
||||
|
||||
`&&`: 연속해서 다음 명령 실행. `명령어1 && 명령어2 && 명령어3` 처럼 연결해서 여러 명령어를
|
||||
한꺼번에 실행시킬 수 있다.
|
||||
|
||||
위 명령을 실행한 결과 testfile의 두 번째 줄에 `new string` 이 붙었다.
|
||||
|
||||

|
||||
|
||||
`>>` 이 `new string` 을 testfile로 보내줬는데, [리다이렉션][리다이렉션]을 시킨 것이다.
|
||||
|
||||
`항1 >> 항2` 과 같이 두 번 쓰면 원래 내용을 보존하면서 첫 번째 항을 덧붙여주고
|
||||
`>` 을 하나만 쓰면 원래 내용을 삭제하고 새 데이터를 넣는다.
|
||||
|
||||

|
||||
|
||||
- `cp testfile testfile2 && ls` 로 파일 복사 후 목록 출력
|
||||
- `rm testfile2 && ls` 로 파일 삭제 후 목록 출력
|
||||
|
||||
`cp 원본 복사본` 명령어는 파일을 복사하고
|
||||
`rm 삭제될대상` 명령어는 파일을 삭제한다
|
||||
|
||||

|
||||
|
||||
- `cp testfile testfile2` 로 다시 파일 복사
|
||||
- `ls ~/cygwin-test` 로 복사 여부 확인
|
||||
|
||||

|
||||
|
||||
지금까지와 달리 `ls 절대경로` 형식으로 복사 여부를 확인해 보았다.
|
||||
|
||||
파일시스템에서 [디렉토리][디렉토리]는 계층적으로 이루어져 있는데, 기존처럼 단순 `ls` 만
|
||||
실행하면 `pwd` 가 현재 잡고 있는 위치에서 명령을 실행한다. 반면에,
|
||||
절대경로를 ls의 인자로 전달하면 현재 pwd가 어떻게 잡혀있든 상관 없이
|
||||
절대경로에 대해서 작업을 수행한다.
|
||||
|
||||
다음을 실행해 본 뒤 계층구조를 확인해 보도록 한다.
|
||||
|
||||
- `cd .. && pwd` 로 상위 디렉토리로 이동 후 현재 위치 출력
|
||||
|
||||
`mkdir ~/cygwin-test` 를 했을 때 디렉토리 구조는
|
||||
|
||||
home
|
||||
|
||||
└─ 사용자
|
||||
|
||||
└─ cygwin-test
|
||||
|
||||
로 구성됐다.
|
||||
|
||||
마지막에 `~/cygwin-test` 에 있었기 때문에 여기에서 상위로 이동하면 `~` 로 이동하는 것이다.
|
||||
|
||||

|
||||
|
||||
`rm cygwin-test/testfile2 && ls cygwin-test` 까지 실행하고나면 해당 내용이 이해됐을
|
||||
것이다.
|
||||
|
||||
- `rmdir cygwin-test` 실행
|
||||
- `ls` 실행
|
||||
|
||||
rmdir은 디렉토리를 삭제하는 명령어인 것으로 위에서 소개를 했는데 삭제를 거부하고 있다.
|
||||
|
||||
cygwin-test 내부가 비어있지 않고 파일이 들어있기 때문인데, `rm -rv cygwin-test` 로
|
||||
다시 시도해보라.
|
||||
|
||||
ls로 삭제 여부를 확인할 수 있다.
|
||||
|
||||

|
||||
|
||||
rm으로 삭제를 수행하고나서 이 명령이 실행이 된 건지 아닌지 알려줬으면 좋겠다는 생각이 들
|
||||
수 있는데, rm에 `-v` 옵션을 넣어서 `removed` 라고 출력하도록 조치하였다.
|
||||
|
||||
---
|
||||
|
||||
`clear` 로 이전 기록을 화면에서 지울 수 있다.
|
||||
|
||||
다음을 실행한다
|
||||
|
||||
- `mkdir ~/opt && cd ~/opt`
|
||||
- `touch testfile`
|
||||
- `echo "test string" >> testfile`
|
||||
- `cp testfile testfile2`
|
||||
- `mkdir subdir`
|
||||
- _`mv testf* subdir`_
|
||||
- `cd subdir && ls`
|
||||
|
||||

|
||||
|
||||
`mv` 는 파일을 이동시키는 커맨드이지만 파일명을 변경할 때에도 사용할 수 있다.
|
||||
|
||||
- `mv testfile testfile.test && mv testfile2 testfile3.test && ls`
|
||||
|
||||
testfile은 testfile.test로,
|
||||
|
||||
testfile2는 testfile3.test로 이름이 바뀌었다.
|
||||
|
||||
이 두 파일을 삭제하려면 `rm testfile.test testfile3.test` 를 실행할 수도 있다.
|
||||
|
||||
하지만, 이렇게 삭제해야 할 파일이 20개, 30개씩 있다면 작업이 번거로워지기 때문에
|
||||
`*` 를 사용해서 나머지 뒷 부분을 생략할 수 있다.
|
||||
|
||||
상단에서 실습해 본 `mv testf* cygwin-test` 명령이 그렇게 실행된 것이다.
|
||||
|
||||
- `rm -v *.test && ls` 실행
|
||||
|
||||

|
||||
|
||||
삭제 옵션으로 `-v` 를 또 넣었는데 어차피 계속 사용할 것이므로 자동으로 붙이면
|
||||
편리하게 쓸 수 있을 것이다.
|
||||
|
||||
- `vi ~/.bash_aliases`
|
||||
- `alias rm='rm -v'` 입력
|
||||
- `:wq` 를 입력해서 vi 종료
|
||||
- `source ~/.bash_aliases`
|
||||
- `touch ~/opt/testfile`
|
||||
- `rm ~/opt/testfile`
|
||||
|
||||

|
||||

|
||||
|
||||
존재하지 않는 파일에 대해선 `vi` 에서 `:w` 로 저장할 때 파일이 생성되기 때문에
|
||||
미리 `touch ~/.bash_aliases` 로 만들어 둘 필요가 없다.
|
||||
|
||||
`rmdir` 에 대해서도 alias를 추가해 보도록 한다.
|
||||
|
||||
- `echo "alias rmdir='rmdir -v'" >> ~/.bash_aliases`
|
||||
- `echo "alias ls='ls -F'" >> ~/.bash_aliases`
|
||||
- `echo "alias ln='ln -v'" >> ~/.bash_aliases`
|
||||
- `source ~/.bash_aliases`
|
||||
- `cat ~/.bash_aliases`
|
||||
|
||||

|
||||
|
||||
ls에 `-F` 옵션을 사용하면 디렉토리는 이름 끝에 `/` 가 붙어서 다른 파일과 쉽게
|
||||
구분할 수 있다.
|
||||
|
||||

|
||||
|
||||
`ln` 명령어는 곧 이어 설명을 하겠다.
|
||||
|
||||
어떤 옵션을 alias로 지정할 것인지 전부 외울 순 없기 때문에 man으로 추가할
|
||||
옵션을 참고하도록 한다.
|
||||
|
||||
## 유틸리티
|
||||
|
||||
- `cat /var/log/setup.log`
|
||||

|
||||
|
||||
[FHS][FHS] 에 의하면 내용이 수시로 바뀌는 기록은 `/var/log` 에 저장하도록
|
||||
되어 있는데 cygwin을 설치하면서 `setup.log` 가 저장된다.
|
||||
|
||||
각종 설치 내역이 저장되어 있기 때문에 cat으로 본문을 뽑았을 때 아주 길게
|
||||
화면에 나오는데 `head` 와 `tail` 로 이 길이를 조절할 수 있다.
|
||||
|
||||
- `head /var/log/setup.log`: 내용 시작점 일부를 출력
|
||||
- `tail /var/log/setup.log`: 내용 끝점 일부를 출력
|
||||
|
||||

|
||||

|
||||
|
||||
기본으로 10줄씩 출력을 하고 있는데 이 길이를 바꾸려면
|
||||
|
||||
- `head --lines=3 /var/log/setup.log` 또는
|
||||
- `head -n 7 /var/log/setup.log`
|
||||
|
||||
형식으로 지정하면 되고 tail 또한 마찬가지이다.
|
||||
|
||||

|
||||
|
||||
- `rm -r subdir`
|
||||
- `mkdir -p ~/opt/cygwin-test/subdir && cd $_ && touch test-origin`
|
||||
|
||||
하위 디렉토리를 연쇄적으로 만들 때 `-p` 옵션을 붙이면 하나 만들고 cd로 들어가서
|
||||
또 다시 만드는 일 없이 곧바로 처리할 수 있다.
|
||||
|
||||
이런 다단계 디렉토리를 생성하고나서 그 안쪽으로 이동하기 위해 cd로 또 다시
|
||||
하위 경로까지 입력하는 대신 `cd $_` 를 입력하면 곧장 이동할 수 있다.
|
||||
|
||||

|
||||
|
||||
방금 `~/opt/cygwin-test/subdir` 안에 새로 생성한 test-origin에 대해서
|
||||
|
||||
- `echo "line1" >> test-origin && cat test-origin` 을 실행
|
||||
|
||||
예상대로 `line1` 이라는 문자열이 test-origin 안에 들어 있다.
|
||||
|
||||

|
||||
|
||||
- `ln -s test-origin test-symlink && cat test-symlink` 실행
|
||||
|
||||
cp로 복사한 파일이 아닌데도 `line` 이라는 문자열이 `test-symlink` 안에 들어있다.
|
||||
|
||||

|
||||
|
||||
이어서 아래 명령도 실행해 본다.
|
||||
|
||||
- `echo "line2" >> test-origin`
|
||||
- `cat test-origin`
|
||||
- `cat test-symlink`
|
||||
|
||||
분명히 `line2` 라는 문자열은 `test-origin` 에만 넣었는데 `test-symlink`
|
||||
로부터도 같은 내용물이 출력되고 있다.
|
||||
|
||||

|
||||
|
||||
이것은 [심볼릭 링크][심볼릭 링크] 라고 불리며 MS Windows의 `바로 가기` 기능과
|
||||
유사하다.
|
||||
|
||||
`test-symlink` 파일이 원본인 `test-origin` 을 가리키고 있기 때문에
|
||||
test-origin을 바꾸고서 test-symlink를 출력하더라도 결국 원본인 test-origin의
|
||||
내용을 보여주는 것이다.
|
||||
|
||||
반대로 `test-symlink` 안에 내용물을 추가하고나서 `test-origin` 을 출력해도
|
||||
마찬가지로 반영된 결과를 볼 수 있다.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
[우분투]: https://ubuntu.com/download/alternative-downloads#bittorrents 'Ubuntu'
|
||||
[그누/리눅스]: https://www.gnu.org/gnu/gnu-linux-faq.html#osvskernel 'GNU/Linux'
|
||||
[유닉스]: https://en.wikipedia.org/wiki/UNIX_System_V 'Unix'
|
||||
[Bash]: https://tiswww.case.edu/php/chet/bash/bashtop.html 'Bourne Again Shell'
|
||||
[노드]: https://github.com/nodesource/distributions/blob/master/README.md#using-ubuntu-4 'Node.js'
|
||||
[시그윈]: https://cygwin.com/install.html 'Cygwin'
|
||||
[가상머신]: https://en.wikipedia.org/wiki/Full_virtualization '전가상화'
|
||||
[X]: https://x.org/ '디스플레이 서버'
|
||||
[git-bash]: https://git-scm.com/downloads '깃'
|
||||
[msys2]: https://www.msys2.org/docs/what-is-msys2/ 'minimal system 2'
|
||||
[WSL]: https://github.com/Microsoft/WSL 'Windows Subsystem for Linux'
|
||||
[git for windows]: https://git-for-windows.github.io/
|
||||
[실패 격리]: https://en.wikipedia.org/wiki/Fail-safe 'Fail safe'
|
||||
[docker]: https://www.docker.com/ '도커'
|
||||
[setup-x86_64.exe]: https://cygwin.com/setup-x86_64.exe
|
||||
[커맨드 (명령어)]: https://en.wikibooks.org/wiki/Guide_to_Unix/Commands
|
||||
[vi]: https://ex-vi.sourceforge.net/ 'visual'
|
||||
[BSD vi]: https://docs.freebsd.org/44doc/usd/12.vi/paper.pdf
|
||||
[vim]: https://www.vim.org/viusers.php 'Vi IMproved'
|
||||
[`vimtutor`]: https://github.com/vim/vim/blob/master/runtime/tutor/tutor
|
||||
[Unix 계열]: https://en.wikipedia.org/wiki/Unix-like 'unix-like'
|
||||
[인터페이스]: https://en.wikipedia.org/wiki/Interface_(computing) 'Interface'
|
||||
[디렉토리]: https://en.wikipedia.org/wiki/Directory_(computing)
|
||||
[FHS]: https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard 'Filesystem hierarchy standard'
|
||||
[리다이렉션]: https://en.wikipedia.org/wiki/Redirection_(computing) 'Redirection'
|
||||
[심볼릭 링크]: https://en.wikipedia.org/wiki/Symbolic_link 'Symbolic link'
|
||||
Loading…
Add table
Add a link
Reference in a new issue