명령 설명 ex
echo 출력하고자 하는 변수를 출력할 때 사용하는 명령어이다. 파이썬의 print와 같은 명령어이다. echo $b
pwd 현재 디렉토리를 확인하는 명령어이다. $ pwd
whoami 접속한 사용자가 누구인지 확인하는 명령어이다. $ whoami
mv 파일의 이름을 바꾸거나 파일을 다른 디렉토리로 이동하는 명령어이다. mv 기존파일명 새로운파일명
chown 파일이나 디렉토리의 소유자를 변경하는 명령어이다. 소유자와 파일에 관련된 권한 정보는 ls -l 명령어로 확인할 수 있다. chown 그룹:소유자
su 접속 유저를 바꾸는 명령어 su - 유저이름
접속 유저를 root 유저로 바꾸자. $ su -
whatis 명령어의 간단한 설명을 확인할 수 있다. $ whatis mkdir
man 명령어의 메뉴얼을 확인할 수 있다.
메뉴얼을 확인하고는 q를 눌러 메뉴얼 화면에서 빠져나와야 한다.
$ man mkdir
cd Change Directory 명령어로 디렉토리를 이동하는 명령어이다. $ cd .., $cd /home
ls 현재 디렉토리에 있는 폴더와 파일을 확인하는 명령어
-l 옵션: 폴더, 파일들의 정보를 자세히 출력한다.
-d 옵션: 디렉토리를 검색하는 옵션
$ ls -l *.txt
mkdir 현재 디렉토리에 새로운 디렉토리를 생성하는 명령어이다.
-p 옵션: 디렉토리를 만들면서 한번에 하위 디렉토리를 생성하는 옵션
mkdir -p /test01/test02/test03
touch 파일의 용량이 0인 파일을 생성하는 명령어이다.
여러 파일을 한 번에 생성할 수 있는데 각 파일은 공백(화이트 스페이스)로 구분한다.
$ touch a.txt b.txt c.txt e.txt f.txt
rm 파일이나 디렉토리를 삭제하는 명령어이다.
리눅스는 휴지통이 있지만 명령어로 삭제할 때는 파일이 바로 삭제되기 때문에 복구할 수 없다.
-r 옵션: 현재 디렉토리 밑에 있는 모든 파일과 디렉토리를 삭제한다.
-f 옵션: 삭제 여부를 물어보지 않고 삭제한다.
-rf 옵션: 현재 디렉토리 밑에 있는 파일과 디렉토리를 삭제 여부를 뭍지 않고 삭제한다.
$touch bbb.txt
$rm bbb.txt
rmdir 디렉토리를 삭제하는 명령어이다. $rmdir ddd
alias 자주 수행하는 명령어들을 쉽게 사용할 수 있도록 설정하는 명령어이다.
alias 사용자명령어=”리눅스 명령어”
$ alias ll='ls -alF'
unalias alias 명령을 삭제한다. $ unalias ll
cat 파일의 내용을 화면에 출력하는 명령어이다. $ cat emp.txt
명령어 >> 파일 redirection 화면에 출력되는 결과를 파일로 저장하는 명령어이다.
기존에 같은 파일의 이름이 없으면 파일을 생성하고 있으면 기존 파일 뒤에 덧붙인다.
$ cat emp.txt >> emp2.txt
명령어 > 파일 파일을 생성하는데 기존에 같은 이름의 파일이 있으면 그냥 덮어쓴다. $ cat > test.txt
현재 터미널 입력을 파일로 생성한다.
more 문서의 내용을 화면에 출력할 때 페이지 단위로 볼 수 있는 명령어이다. 문서 내 이동
Space: 전진키
b: 후진키
f: 다음 페이지
more emp2.txt
head 문서의 상위 몇 줄을 출력하는 명령어이다. $ head -20 jobs.txt
tail 문서 하위 몇 줄을 출력하는 명령어이다. $ tail -10 jobs.txt
wc 파일 안의 단어의 개수 또는 라인수를 출력하는 명령어이다.
-l: 라인 수만 출력한다.
-w: 단어의 개수만 출력한다.
-c: 철자의 개수만 출력한다.
$ wc jobs.txt
순서대로 라인 수, 단어의 개수, 철자의 개수를 의미한다.
grep ‘단어’ 파일명 파일 안에 포함된 특정 단어나 구문을 검색하는 명령어이다.
-i: 대소문자를 구분하지 않고 검색한다.
$ grep 'SCOTT' emp.txt
emp.txt에서 SCOTT이라는 단어가 포함된 행을 출력한다.
명령어 | 명령어 pipe 명령어. | 로 표현하며 앞의 명령어와 뒤의 명령어를 연결하여 사용할 때 사용한다. `$ ls -l
sort 데이터를 특정 컬럼을 기준으로 정렬하는 명령어이다.
-k: 내림차순 정렬
-rk: 오름차순 정렬
-n: 숫자를 정렬할 때 사용하는 옵션이다.
$ sort -nk 6 emp.txt
awk 특정 컬럼을 출력하고자 할 때 사용하는 명령어이다.
awk 조건 컬럼선택 대상파일
예제1. emp.txt에서 직업만 출력하자. $ awk '{print $3}' emp.txt
3번 컬럼이 SALESMAN 이면 출력 awk '$3=="SALESMAN" {print $2, $3}' emp.txt
$n 컬럼, $0은 모든 컬럼을 의미한다.
출력은 ‘{print 컬럼번호컬럼번호}’로 출력한다.
uniq 중복된 라인을 제거하는 명령어이다. 결과에서 중복을 제거해서 출력하자.
`$ awk ‘{print $3}’ emp.txt
diff 파일1 파일2 두 파일간의 차이점을 찾아서 알려주는 명령어이다. $ diff emp.txt emp2.txt
find 검색하고자 하는 파일을 찾을 때 사용하는 명령어이다. $ find /root -name 'emp.txt' -print
cp 파일을 복사하는 명령어이다. $ cp emp.txt emp400.txt
tar tar은 여러 파일을 하나로 합쳐주는 명령어이다. 압축을 하려면 -z 옵션을 사용해야 한다.
-c: 여러 개의 파일을 하나로 만드는 옵션
-v: 압축되는 과정을 출력하라는 옵션
-f: 생성되는 파일명을 지정
-x: 묶어있는 파일을 풀라는 옵션
-C: 압축이 풀릴 위치를 지정하는 옵션
-z: 실제 파일 크기를 압축하는 옵션
tar cvf 압축파일명 압축파일대상
tar xvf 압축파일명 압축을 해제할 위치
sed sed 명령어는 검색 뿐만 아니라 내용을 변경할 수 있다. 반면 grep 명령어는 파일의 특정 내용을 검색하는 기능만 가진다. sed ‘s/기존데이터/변경데이터’ 파일명

Window Host에서 WSL 서비스로 port forward 사용

윈도우에서 WSL2 사이에 port forward 를 통해서 WSL에서 사용중인 서비스에 접속하고 사용할 수 있다.

  • 원격에서 WSL2에 SSH서비스로 접근하고자 할 때
  • 원격에서 WSL2에 서비로 동작하는 django 등 서비스에 접근하고자 할 때

WSL2 에 포트 포워드

초기 WSL2 버전까지만 해도 WSl2의 IP로 직접 포트 포워딩을 하거나 VM의 IP를 변경해 사용하는데 왜그런지 최신 WSL2 의 VM IP 는 호스트의 네트워크 인터페이스에서 게스트 머신 WSL2의 IP 네트워크가 확인이 안된다.

예를 들어 윈도우의 ipconfig로 아래 처럼 가상머신 어뎁터가 나오지만 IP network 이 다르다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

이더넷 어댑터 vEthernet (Default Switch):

연결별 DNS 접미사. . . . :
링크-로컬 IPv6 주소 . . . . : fe80::6b31:c23a:366b:1078%47
IPv4 주소 . . . . . . . . . : 192.168.160.1
서브넷 마스크 . . . . . . . : 255.255.240.0
기본 게이트웨이 . . . . . . :

이더넷 어댑터 vEthernet (WSL (Hyper-V firewall)):

연결별 DNS 접미사. . . . :
링크-로컬 IPv6 주소 . . . . : fe80::6b31:2b1a:9d22:efc5%55
IPv4 주소 . . . . . . . . . : 172.18.80.1
서브넷 마스크 . . . . . . . : 255.255.240.0
기본 게이트웨이 . . . . . . :

WSL2의 게스트 머신과 윈도우 호스트 머신 사이의 라우팅을 담당하는 어뎁터가 172.18.80.1 이 WSL의 라우팅 포인트 같은데 실재 wsl 의 IP 는 다음 같이 나온다.

1
2
> wsl hostname -I
172.18.82.228

즉 호스트의 라우팅 테이블에서 알 수 없는 네트워크로 정의된다. 그래서 윈도우에서 직접 게스트 머신으로 라우팅이 안된다. 포트 포워딩시 WSL 게스트 머신의 IP를 직접 사용이 어렵다는 의미다.

게스트머신 IP로 ssh 접근은 된다. 그런데 port forwarding 에선 잘 안된다. 그런데 localhost 는 직접 게스트 머신의 포트에 접근이 가능하다. 그래서 localhost 를 사용하면 된다.

포트 포워드 스크립트

.ps1 파일에 아래 스크립트를 작성한다. WSL2 의 IP에 대해서,

  • 줄막음 처리한 것은 이전에 사용했던 방식이다. (어떤 버전인진 모르겠다)
  • 127.0.0.1 혹은 localhost 를 사용하면 된다.

스크립트

-

1
2
3
4
5
6
7
8
9
10
11
# `start_wsl2_portforward.ps1` 파일
$script = {
# netsh interface portproxy add v4tov4 listenport=5000 listenaddress=0.0.0.0 connectport=5555 connectaddress=(wsl hostname -I)
# netsh interface portproxy add v4tov4 listenport=2000 listenaddress=0.0.0.0 connectport=2222 connectaddress=(wsl hostname -I)
# portforward for Router
netsh interface portproxy add v4tov4 listenport=5000 listenaddress=0.0.0.0 connectport=5555 connectaddress=127.0.0.1
netsh interface portproxy add v4tov4 listenport=2000 listenaddress=0.0.0.0 connectport=2222 connectaddress=127.0.0.1
netsh advfirewall firewall add rule name="TCP/5000" protocol=TCP dir=in localport=5555 action=allow
netsh advfirewall firewall add rule name="TCP/2000" protocol=TCP dir=in localport=2222 action=allow
}
Start-Process -FilePath powershell.exe -ArgumentList "-Command & {$script run}" -verb RunAs

윈도우를 시작하고 Powershell 에서 이 스크립트를 실행하면 관리자 모드 허용을 받아 포트 포워드와 방화벽이 모두 업데이트 된다.

1
2
3
4
> start_wsl2_portforward.ps1

확인됨...

호스트의 포트 포워드 구성을 확인.

1
2
3
4
5
6
7
8
PS C:\Users\daddy> netsh interface portproxy show v4tov4

ipv4 수신 대기: ipv4에 연결:

주소 포트 주소 포트
--------------- ---------- --------------- ----------
0.0.0.0 2000 127.0.0.1 2222
0.0.0.0 5000 127.0.0.1 5555

호스트의 방화벽을 확인

1
> netsh advfirewall firewall show rule name="TCP/8686"

포워드 / 방화벽 구성 삭제

포드워와 방화벽을 삭제할 수 있다.

1
2
3
4
5
# 포트 포워드 삭제
netsh interface portproxy delete v4tov4 listenport=5000 listenaddress=0.0.0.0

# 방화벽 삭제
netsh advfirewall firewall delete rule name="TCP/5000"