Command Line Interface는 우리에게 익숙한 Graphic User Interface(GUI)처럼 사용자가 컴퓨터와 상호작용을 할 수 있게하는 인터페이스를 말한다.
GUI와는 다르게 그래픽 인터페이스가 없어, 빠르다는 장점이 있다.
대표적인 환경으로는 mac OS의 Terminal, UNIX의 Shell, windows의 CMD 명령프롬프트 등이 있다.
오늘 살펴볼 것은 UNIX shell의 bash와 windows의 cmd이다.
먼저 Linux를 살펴보자.
Linux에서 command line interface(CLI)를 쓰는 대표적인 프로그램으로 bash가 있다.
osc@ubuntu:~$ ps
PID TTY TIME CMD
1365 tty1 00:00:00 bash
1487 tty1 00:00:00 ps
위와 같이 linux에서 ps를 입력했을 때 bash가 동작되고 있는 모습을 볼 수 있다.
bash는 많은 CLI기반의 운영체제의 기본 shell로 탑재되어 있다.
명령어로 동작하는 bash에서 지원하지 않는 명령어를 입력한다면 어떻게 될까?
osc@ubuntu:~$ hi
hi:command not found
hi를 입력했을 때, command를 찾지 못했다고 하는 것을 볼 수 있다.
그렇다면 bash 쉘에서 이 명령어들은 도대체 어디서 참조하는 것이며, 어떻게 인식을 할 수 있을까?
명령어는 내부 명령어(Internal Commands / Builtins)와 외부명령어에서 참조하는데
두 곳 모두에서 명령어를 찾지 못한다면 위와 같이 command not found가 출력 되는 것이다.
우리가 자주 쓰는 대표적인 내부 명령어로는 현재 디렉토리 위치를 바꿔주는 cd 명령어가 있다.
cd 명령어는 bash의 내부 명령어이기 때문에, which cd를 입력해도 cd의 프로그램 위치를 찾을 수가 없다.
우리가 자주 쓰는 ls 라는 명령어는 외부 명령어이다.
따라서 which ls를 입력하면, /bin/ls 가 출력되며 명령어의 위치를 알 수 있다.
그렇다면, 외부명령어는 저장되어 있는 위치가 각각 다를텐데, 어떻게 이것을 시스템에 알려주지 않고도, 알아서 참조해내는 것일까?
...
...
그렇다. 사실은 시스템에서 참조해야하는 경로는 미리 지정되어있다.
외부 명령어를 참조하는 경로는 PATH라는 시스템 환경변수 속에 지정되어있다.
osc@ubuntu:~$ echo $PATH
/home/osc/bin:/home/osc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
echo $PATH를 입력하면 PATH를 출력할 수 있다. 수많은 경로들이 : 구분자와 함께 입력되어있는데, 우리가 ls 라는 외부 명령어를 참조 할 수 있던 이유도 PATH에 /bin 이 입력되어있기 때문임을 이제 알 수 있다.
그렇다면, 윈도우는 어떨까? 윈도우에서 command line interface(CLI)를 쓰는 대표적인 프로그램으로는 명령프롬프트(CMD)가 있다.
윈도우 키를 눌러, cmd를 입력하면 명령 프롬프트를 실행할 수 있다.
cmd의 내부명령어로는 type이라는 텍스트 파일의 내용을 보여주는 명령어가 있다.
C:\Users\user\Desktop>type 123.txt
2023 fighting!!
위와 같이 type 명령어가 잘 동작하는 모습을 볼 수 있지만, cmd의 내부 명령어이기 때문에 마찬가지로 where type을 입력해도 type의 위치를 찾을 수가 없다.
where 명령어는 외부명령어이다. 따라서 where where을 입력하면 where 명령어의 경로가 나타난다.
C:\Users\user\Desktop>where where
C:\Windows\System32\where.exe
Windows\System32\에 해당 프로그램이 있다고 한다. 과연 시스템 환경변수가 이 위치를 지정하고 있을까?
고급 시스템 설정 – 고급 탭 – 환경변수에 들어가 시스템 변수의 Path를 확인하면 %SystemRoot%\System32가 환경 변수에 있는 것을 확인할 수 있다.