# CLI(Command Line Interface)
- CLI(Command Line Interface): 텍스트 명령어를 입력하여 시스템을 제어하는 인터페이스
- CLI를 사용하면 텍스트 명령을 입력하여 모든 서버 또는 컴퓨터 시스템에서 프로그램을 구성, 탐색 또는 실행할 수 있다
- Linux, macOS와 Windows를 포함한 모든 운영 체제는 시스템과 더 빠르게 상호 작용할 수 있는 CLI를 제공한다
- GUI(Graphical User Interface): 아이콘, 이미지 등을 시각적으로 탐색하고 클릭하여 작업을 수행하는 인터페이스
- GUI를 사용하면 아이콘과 이미지를 시각적으로 탐색하고 클릭하여 작업을 수행할 수 있다
- 그러나 GUI는 시스템 관리 작업에 비효율적이며, 가상 또는 원격 환경에서는 더욱 효율이 떨어진다
컴퓨터 사용자들은 주로 GUI를 통해 컴퓨터와 상호작용한다.
하지만, 컴퓨터의 더 깊은 수준의 작업을 수행하거나, 자동화된 스크립트를 실행하기 위해서는 CLI에 익숙해져야 한다.
## CLI의 이점
- 속도: GUI보다 명령어를 입력하여 작업을 수행하는 것이 종종 더 빠르다.
- 자동화: 반복적인 작업을 스크립트로 만들어 자동화할 수 있다.
- 유연성: 복잡한 작업을 단순화시키고, 맞춤형 작업을 수행할 수 있다.
- 리소스 사용: CLI는 GUI보다 적은 시스템 리소스를 사용한다.
## CLI의 단점
- 학습 곡선: GUI에 비해 배우기 어렵고, 명령어를 기억해야 한다.
- 사용자 친화성: 텍스트 기반 인터페이스는 일부 사용자에게 덜 직관적일 수 있다.
## CLI의 작동방식
명령줄 인터페이스(CLI)는 컴퓨터의 운영 체제와 상호 작용하는 명령을 입력할 수 있는 텍스트 기반 인터페이스다. CLI는 운영 체제와 사용자 사이에 있는 기본 쉘을 사용하여 작동한다.
쉘은 사용자와 운영 체제 사이의 중개자 역할을 하는 프로그램을 말한다. 예를 들어 보다 구체적인 기능을 위한 `Bash`, `cmd.exe`, `PowerShell` 등이 있다.
## CLI 사용법
### Windows
1. 윈도우 키와 `S`를 누른다.
2. 검색 필드에 `cmd`를 입력한다.
3. `명령 프롬프트`를 마우스 오른쪽 버튼으로 클릭하고 `관리자 권한으로 실행`을 선택한다.
4. 이제 명령 프롬프트를 입력할 수 있다.
### Mac
1. 일반적으로 도구 모음에 있는 Finder 애플리케이션을 찾는다.
2. 애플리케이션/유틸리티로 이동한다.
3. `터미널`을 선택한다.
4. 이제 명령 프롬프트를 입력할 수 있다.
### Linux
- `CTRL`+`ALT`+`T`를 사용하여 CLI에 엑세스한다.
- 또는 `Alt`+`F2`를 사용한 다음 `gnome-terminal`을 입력할 수 있다.
## CLI 명령어
대부분의 CLI 명령어는 다음과 같은 구조를 따른다.
```bash
명령어 [옵션] [인자]
```
- 명령어: 수행할 작업을 지정
- 옵션: 명령어의 동작을 변경. 일반적으로 하이픈(-)으로 시작한다.
- 인자: 명령어의 대상이 되는 파일이나 디렉토리를 지정.
### 파일 및 디렉토리 관련 명령어
| 명령 | Windows | Linux |
| -------------- | ------------------------- | ------------------------ |
| 디렉토리 변경 | `cd 경로` | `cd 경로` |
| 디렉토리 목록 | `dir` | `ls` |
| 디렉토리 생성 | `mkdir 디렉토리명` | `mkdir 디렉토리명` |
| 디렉토리 제거 | `rmdir 디렉토리명` | `rmdir 디렉토리명` |
| 파일 복사 | `copy 원본파일 대상위치` | `cp 원본파일 대상위치` |
| 파일 이동 | `move 원본파일 대상위치` | `mv 원본파일 대상위치` |
| 파일 이름 변경 | `ren 원래파일명 새파일명` | `mv 원래파일명 새파일명` |
| 파일 삭제 | `del 파일명` | `rm 파일명` |
### 네트워크 관련 명령어
| 명령 | Windows | Linux |
| ------------- | ------------------- | ------------------- |
| Ping | `ping 주소` | `ping 주소` |
| 경로 추적 | `tracert 주소` | `traceroute 주소` |
| 네트워크 구성 | `ipconfig` | `ifconfig` |
| 라우팅 테이블 | `route PRINT` | `route` |
| DNS 조회 | `nslookup 도메인명` | `nslookup 도메인명` |
| 네트워크 진단 | `netsh` | `netstat` |
### 정보 명령어
| 명령 | Windows | Linux |
| --------------- | -------------------------- | ----------------- |
| 프로세스 목록 | `tasklist` | `ps -ef` |
| 프로세스 종료 | `taskkill /PID 프로세스ID` | `kill 프로세스ID` |
| 시스템 정보 | `systeminfo` | `uname -a` |
| 시스템 모니터링 | `perfmon` | `top` |
### 변수 및 환경 관련 명령어
| 명령 | Windows | Linux |
| ------------------ | --------------- | ------------------ |
| 환경변수 보기 | `set` | `printenv` |
| 특정 환경변수 보기 | `echo %변수명%` | `echo $변수명` |
| 환경변수 설정 | `set 변수명=값` | `export 변수명=값` |
| 지역 변수 설정 | `set 변수명=값` | `변수명=값` |
| 환경변수 제거 | `set 변수명=` | `unset 변수명` |