WSL 설치하기
WSL은 Windows SubSystem for Linux의 약자이다.
리눅스 커맨드와 커맨드라인 앱을 윈도우에서 실행할 수 있는 가벼운 툴이므로 Unix Command 실습을 위해
WSL을 설치해 세팅해보자.
1. powershell 관리자 권한으로 실행 후 아래 커맨드 터미널에 복붙하기(WSL 사용 허용)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2. 컴퓨터 재부팅하기
3. Ubuntu 설치 및 실행
아래 링크에 들어가서 Ubuntu를 설치한다.
https://ubuntu.com/download/desktop
Download Ubuntu Desktop | Ubuntu
Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.
ubuntu.com
처음 설치 후 실행하면, UNIX username과 New password 설정하기

4. VirtualBox에 Ubuntu 올리기
윈도우 컴퓨터 안에서 리눅스 환경 사용을 위해서 가상머신을 만들 것이다.
아래 링크에 들어가 VirtualBox를 설치한다.
https://www.virtualbox.org/wiki/Downloads
Downloads – Oracle VM VirtualBox
Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. VirtualBox 7.0.20 platform packages The binaries are released unde
www.virtualbox.org
VirtualBox를 설치했으면 여기에 Ubuntu를 얹어 가상 머신 하나를 생성해 줄 것이다.
VirtualBox에 올린 우분투 설치파일을 다운로드 받는다. (확장자는 .iso)

VirtualBox 실행 후 "새로만들기" 버튼을 클릭하여 아래 사진과 같이 진행하여 새 가상머신을 생성한다.



-> 나는 8GB로 세팅하고 넘어갔다가, 디스크 크기가 부족하다고 해서 후에 20GB로 다시 늘렸다.
그러니 넉넉하게 20GB정도로 설정하고 넘어가도록 하자.

생성된 가상머신에서 '"[광학 드라이브] 비어 있음" 클릭 -> "디스크 이미지 선택/만들기 ..." 클릭해서 다운받았던 .iso 파일을 추가한다.



그 후 가상머신을 실행해 Install Ubuntu를 선택한 후, 쭉쭉 초기설정을 넘어간다.

Ubuntu 가상머신 세팅이 끝나면, Terminal을 열어 Linux 터미널을 사용할 수 있다.
Shell, Bash, Zsh
컴퓨터는 사람이 쓰는 명령어 그 자체를 이해할 수 없다. 따라서 이런 커맨드들을 컴퓨터가 이해할 수 있는 형태로 바꿔줘야 하고, 그 일을 수행하는 것이shell이다.
shell은여러 종류가 있는데 그 중 하나가 대표적으로 bash이다. zsh(Z shell)도 shell의 한 종류이다.
Argument와 Option
커맨드 사용 시 커맨드 이름만 쓸 때도 있지만 argument와 option을 주어야 할 때도 있다.
argument는 command를 어느 대상에 대해 실행할 것인지를 정해준다. 하나의 커맨드는 argument를 어떤 방식으로
줄 수 있는지, 어떤 옵션들을 붙일 수 있는지에 대한 여러가지 사용법이 있다.
man 커맨드로 공식 매뉴얼을 검색해보면서 그때그때 찾아보면 된다.
커맨드 사용법을 공식 매뉴얼에서 볼 때
man {명령어}
💡 알아두면 편리한 꿀팁
↑: 이전에 입력했던 커맨드불러오기 가능
Ctrl + A: 문장 가장 앞으로 커서 이동
Ctrl + E: 문장 가장 뒤로 커서 이동
Alt + ←: 단어 단위로 커서 점프 이동
Ctrl + C: 입력중이거나 실행중인 커맨드 취소
clear: 터미널 창 청소
Tab: 지금 작성하고있는 커맨드 명령어 자동완성 기능
유닉스 폴더 구조와 파일 경로
리눅스의 디렉토리는 계층형 트리구조를 가지고있다.
이에 대해 잘 정리되어있는 블로그 글을 살펴보자.
🐧 리눅스 디렉토리 구조 한눈에 정리
리눅스 파일의 종류 리눅스는 유닉스 계열을 바탕으로 만들어진 오픈소스 운영체제이다. 그래서 유닉스와 마찬가지로 모든 것들을 파일로 관리한다. 리눅스의 경우 계층구조(트리구조)의 디렉
inpa.tistory.com
/bin | binaries의 약자이다. 컴퓨터가 실행할 수 있는 바이너리 프로그램을 뜻한다. 커맨드를 입력하면 커맨드에 해당하는 프로그램이 실행되면서 해당 프로그램들의 일부 또한 /bin 디렉토리 안에 있다. |
/sbin | bin과 비슷하지만 sbin은 관리자 전용 프로그램들이 들어있다. |
/etc | 컴퓨터 설정 파일들이 들어있다. 각종 프로그램 설정파일, 관리자 권한 설정 파일 등이 있다. |
/home 또는 /Users | /home에는 사용자들의 홈 디렉토리가 있다. 사용자의 모든 파일을 저장해 놓는 곳이다. |
/usr | 사용자에게 필요한 파일들을 저장하고 있다. /usr 안에도 각종 binary 파일들을 저장하고 있는 디렉토리가 있는데 /bin에는 컴퓨터가 시작하거나 자신을 수리하기 위해 꼭 필요한 커맨드들이 있고 /usr/bin에는 컴퓨터가 필요하기보다는 사용자가 필요한 커맨드들이 있다. |
현재 사용자의 홈 디렉토리는 ~로 표시한다.
어떤 사용자의 홈 디렉토리 구조가 /home/user라고 할 때, ~로 대체할 수 있는 것이다.
사용자의 홈 디렉토리가 /home/user라고 할 때,
/home/user/Documents -> ~/Documents
디렉토리와 파일 관련 명령어: pwd, cd, ls
📍 pwd
현재 디렉터리 = working 디렉토리 확인하는 명령어
📍 cd {directory_path}
디렉토리 경로 이동하는 명령어. 만약 홈디렉토리로 이동하려면 cd ~, 이전에 있었던 디렉토리로 가려면 cd -
📍 ls
디렉토리 안에 어떤 파일들이 있는지 확인하는 명령어
절대 경로와 상대 경로
절대경로는 루트 디렉토리를 기준으로 어떤 파일이나 디렉토리의 고유한 경로를 표시하는 방식이다.
상대경로는 루트를 기준으로 하는 것이 아닌 워킹 디렉토리를 기준으로 경로를 작성한다.
cd 명령어 사용하는 경우, 현재 경로가 루트 디렉토리에 위치하지 않는 경우, 자동으로 상대경로로 인식한다.
* 파일/디렉토리 이름에 공백이 있는 경우는 ' '(따옴표) 안에 이름을 작성하고 커맨드를 실행해야 한다.
cd hello world (X)
cd 'hello world' (O)
ls의 중요한 옵션들
https://en.wikipedia.org/wiki/Unix_file_types
Unix file types - Wikipedia
From Wikipedia, the free encyclopedia File types in Unix operating systems The seven standard Unix file types are regular, directory, symbolic link, FIFO special, block special, character special, and socket as defined by POSIX.[1] Different OS-specific im
en.wikipedia.org
1) a 옵션
all 옵션이다. 숨겨진 파일 혹은 디렉토리까지 모두 조회할 수 있다.
ls -a

2) l 옵션
ls 커맨드로 조회했을 때는 뭐가 파일이고 뭐가 디렉토리인지 구분할 수가 없다.
long format을 뜻하는 -l 옵션을 사용하면 (파일/디렉토리에 대한 권한 정보,파일에 연결된 링크의 개수, 파일 소유자, 소유자가 속한 그룹, 파일 byte수, 파일 마지막 수정 날짜) 등 더 자세한 정보를 확인할 수 있다.
ls -l #파일 상세 조회
ls -al #모든 파일 상세 조회

맨 앞글자를 통해 디렉토리, 일반파일 등등 파일의 종류를 확인할 수 있다.
-: 일반 파일 (regular file)
d: 디렉토리 (directory)
l: 심볼릭 링크 (symbolic link)
c: 문자 장치 파일 (character device file)
b: 블록 장치 파일 (block device file)
p: 이름 있는 파이프 (named pipe, FIFO)
s: 소켓 (socket)
디렉토리와 파일 만들기: mkdir, touch
mkdir은 디렉토리를 생성하는 커맨드이고, touch는 파일을 생성하는 커맨드이다.
mkdir {directory_name}
touch {file_name}

CLI 환경에서의 텍스트 에디터
대표적으로는 vim이 있다.
설치 커맨드: sudo apt install vim
아무 명령어없이 vim 커맨드 입력 시 새로운 파일 생성하고, 뒤에 argument를 주면 해당 파일을 수정한다.
vim에는 크게 4가지 모드가 있다. 4가지 모드의 종류와 할 수 있는 동작은 아래와 같다.
normal mode | insert mode | visual mode | command mode |
커서 이동 | 텍스트 입력 | 텍스트 블록 지정 | 내용 저장 |
텍스트 붙여넣기 | 텍스트 복사 | Vim 종료 | |
작업 취소 |
각 모드로 들어갔다 나가는 단축키 사용법은 아래 사진과 같다. (출처: codeit)

📍 yy: 복사
📍 dd: 잘라내기
📍 p: 붙여넣기
📍 :(콜론) w(파일 저장) q: vim 종료
수정사항을 저장하지 않고 강제 종료하려면 :q!
[단축키 정리]
- 텍스트 입력 모드(i) -> 텍스트 입력
- 텍스트 한 줄 복사: 일반 모드(esc) -> 복사하려는 줄에 커서 두고 yy
- 텍스트 한 줄 잘라내기: 일반 모드 -> 잘라내려는 줄에 커서 위치 -> dd
- 특정 영역 복사: 비주얼모드(줄단위는 V, 워드 단위는 v) -> 잘라내고 싶은 영역 커서로 잡은 후 d
- 텍스트 붙여넣기: 일반모드 -> ㅂㅌ여넣고 싶은 위치에 커서 위치 -> p
- 파일 저장: 명령 모드(:) -> w+enter
- vim 종료(내용 저장되지 않게): 명령모드(:) + q! + enter
파일 내용 살펴보는 커맨드
파일 내용을 vim을 통해 파일에 들어가지 않고 확인할 수 있는 커맨드는 cat, less, head, tail 등이 있다.
cat 명령어는 파일 내용을 출력해준다.
cat diary.txt finances.txt
less는 파일을 페이지별로 나눠서 보여준다. 파일의 양이 방대할때 페이지 별로 나눠 보는 것이 좋기 때문에 사용하기 좋다.
head와 tail은 파일의 시작과 끝 몇줄을 조회하기 위해 사용한다.
파일의 첫 5줄만 보고싶은 경우 ...
head -n 5 diary.txt
파일의 마지막 5줄만 보고싶은 경우 ...
tail -n 5 diary.txt
디렉토리와 파일 옮기기, 이름 변경하기
파일과 디렉토리 모두 mv 커맨드를 사용한다.
mv {작업할 경로} {이동할 경로}

mv 커맨드 사용시 주의 할 점!
똑같은 이름의 파일이 목적지에 있을 때 그 파일을 덮어쓴다.
아래 예시를 보면 test1.txt파일의 내용으로 test2.txt가 덮어씌여지고, test1.txt 파일은 삭제된 것을 볼 수 있다.

이를 방지하고 싶으면 커맨드에 -i를 추가해서 쓰면 된다.
mv -i test1.txt test2.txt
이 명령어를 쓰면 overwrite를 할것인지 아닌지 파일을 덮어쓰기 전에 선택창이 나온다.
디렉토리와 파일 복사 & 붙여넣기: cp
1) 파일 복사 시
cp {붙여넣을 원본 파일} {복사되어 생성될 파일 이름}
이 또한 파일을 덮어쓰는 실수를 한번 더 확인을 통해 방지하고 싶으면 -i 옵션을 추가하여 커맨드를 실행하면 된다.
2) 디렉토리 복사 시
디렉토리를 복사할 때는 -r 옵션을 cp 앞에 꼭 붙여줘야 한다.(r은 recursive를 의미함.)
복사할 디렉토리 내의 모든 자식 디렉토리와 파일들이 그대로 복사된다.
cp -r {directory} {directory_copy}
디렉토리와 파일 삭제하기: rm
remove의 줄임말인 rm 커맨드를 사용한다.
여기서도 똑같이 파일을 지울때는 rm {file_name}으로 지우면 되지만, 디렉토리를 삭제할 때는 -r 옵션을 반드시 사용해야 한다.
1) 파일 삭제
rm {file.txt}
2) 디렉토리 삭제
rm -r(i) {directory_name}
삭제에도 r 옵션이 존재한다. -ri 옵션을 사용해 rm 커맨드를 실행하면 디렉토리 내 파일들을 하나씩 살펴보며
해당 파일을 삭제할 것인지 확인하는 옵션이 활성화된다.