nmcli 사용하기

**nmcli**는 한마디로 **”터미널용 네트워크 관리 도구”**로 Network Manager 를 기반으로 동작한다.

nmcli 사용하기

nmcli 에서 자주 쓰일 수 있는 device list, wifi list, wifi connect 정도만 익혀두면 리눅스 네트워크 관리가 훨씬 편리해집니다!

Network Manager

리눅스에서 NetworkManager는 단순히 “연결”만 하는 것이 아니라, 연결 전후의 거의 모든 과정을 관리합니다.

  • 자동 연결 및 전환 : 자동으로 Wi-Fi를 잡는 기능, 이더넷 꽃으면 자동으로 Wi-Fi보다 우선순위를 높여 연결하는 등의 지능적인 전환을 수행합니다.
  • 다양한 인터페이스 관리: Wi-Fi, 유선 이더넷(Ethernet), 모바일 데이터(4G/5G), VPN, 브릿지 등 시스템에 있는 모든 네트워크 장치를 하나로 통합해서 관리합니다.
  • 보안 및 인증: WPA2/WPA3 같은 Wi-Fi 보안 키를 저장하고 관리하며, PPPoE나 VPN과 같은 복잡한 인증 절차를 처리합니다.
  • 상태 모니터링: 네트워크가 끊겼는지, 신호 세기는 어떤지 실시간으로 체크하여 OS에 상태 정보를 전달합니다.

리눅스 네트워크 관리

리눅스(Ubuntu 등)에서는 네트워크를 관리하는 아주 강력한 엔진인 NetworkManager라는 프로그램이 뒤에서 돌아갑니다.

  • GUI: 우리가 눈으로 보고 클릭하는 화면 (네트워크 설정 창)
  • nmcli: 이 NetworkManager에게 명령을 내리는 “명령어용 리모컨”
  • nmtui : **”텍스트 기반의 그래픽 메뉴”**입니다. (터미널에서 nmtui를 치면 마우스 없이도 화살표 키로 Wi-Fi를 고를 수 있는 화면이 뜹니다.)
  • Backend Drivers: 실제 하드웨어(Intel, Realtek 등의 무선 랜카드) 드라이버와 통신하여 데이터를 주고받습니다.

nmcli 명령어의 구조 (문법)

nmcli 명령어를 잘 이해하려면 **[대상] - [동작] - [옵션]**의 구조를 알면 됩니다.

nmcli + 무엇을? + 어떻게?

예시로 풀어보면 이렇습니다:

  • nmcli device: “내 컴퓨터에 있는 장치들(Device) 목록 좀 보여줘.”
  • nmcli radio wifi off: “**무선 기능(radio wifi)**을 꺼줘(off).”
  • nmcli connection show: “지금 연결된 네트워크(connection) 상태를 보여줘(show).”

nmcli 핵심 명령어 4가지

가장 자주 쓰이는 것들 위주로 쉽게 풀었습니다.

1. nmcli device (내 장치 확인)

현재 내 컴퓨터에 꽂혀 있는 랜카드, Wi-Fi 모듈, 블루투스 등이 무엇인지 보여준다.

  • 정확한 인터페이스 이름을 확인하려면 nmcli device를 입력한다.
1
2
3
4
5
6
$ nmcli device
DEVICE TYPE STATE CONNECTION
enp6s0 ethernet connected netplan-enp6s0
lo loopback connected (externally) lo
wlp5s0 wifi disconnected --
p2p-dev-wlp5s0 wifi-p2p disconnected --

특정 장치의 자세한 특성은 device show 명령으로 확인할 수 있다

  • 자세한 사용법은 nmcli device help 로 확인하면 된다.
1
2
3
4
5
6
7
8
9
10
$ nmcli device show wlp5s0
GENERAL.DEVICE: wlp5s0
GENERAL.TYPE: wifi
GENERAL.HWADDR: 78:2B:46:4C:BB:D4
GENERAL.MTU: 1500
GENERAL.STATE: 30 (disconnected)
GENERAL.CONNECTION: --
GENERAL.CON-PATH: --
IP4.GATEWAY: --
IP6.GATEWAY: --

2. nmcli device wifi list (주변 Wi-Fi 탐색)

주변에 어떤 Wi-Fi 이름이 있고 신호 강도를 포함한 무선랜 리스트를 출력한다.

1
2
3
4
5
$ nmcli device wifi list
IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
A8:36:60:C0:8F:B6 abc Infra 13 270 Mbit/s 100 ▂▄▆█ WPA2
8B:38:6C:6F:15:8C wifi1 Infra 1 270 Mbit/s 90 ▂▄▆█ WPA2 WPA3
88:36:6C:C0:AF:B0 wifi2 Infra 149 1170 Mbit/s 80 ▂▄▆_ WPA2

3. nmcli device wifi connect (Wi-Fi 연결)

클릭 대신 명령어로 Wi-Fi에 접속합니다. 한 번 입력하면 컴퓨터가 기억합니다.

1
nmcli device wifi connect [이름] password [비번]

실제 접속시 sudo 필요할 수 있다.

1
2
$ sudo nmcli device wifi connect abc password 12345ABC
Device 'wlp5s0' successfully activated with 'a7ef008a-605f-4bec-9a7e-8e4e87864d7c'.

4. nmcli device disconnect (연결 끊기)

이더넷 enp6s0 연결을 끊어 보겠다.

1
2
3
4
5
$ nmcli device
DEVICE TYPE STATE CONNECTION
enp6s0 ethernet connected netplan-enp6s0
wlp5s0 wifi connected rodrod
lo loopback connected (externally) lo
1
2
$ sudo nmcli device disconnect enp6s0
[sudo: authenticate] Password:

enp6s0 를 끊고 확인:

1
2
3
4
5
qkboo@goyangi-linux:~$ nmcli device
DEVICE TYPE STATE CONNECTION
wlp5s0 wifi connected rodrod
lo loopback connected (externally) lo
enp6s0 ethernet disconnected --

5. nmcli connection show (내 연결 상태 확인)

지금 내가 어떤 네트워크에 연결되어 있고, 그 이름이 무엇인지 확인합니다.

1
2
3
4
5
$ nmcli connection show
NAME UUID TYPE DEVICE
rodrod 7def668a-605f-4bec-9a7e-8e4e87864d7c wifi wlp5s0
lo e1ab35b1-fbf4-4acd-8c76-05483b3448a8 loopback lo
netplan-enp6s0 add72843-8b69-370f-b749-f841554c5bf9 ethernet --

nmcli 로 Wifi 연결 관리하기

nmcli를 사용하여 주변 Wi-Fi 목록을 스캔하고 특정 네트워크에 연결하는 과정을 순서대로 설명해 드립니다.


1. 주변 Wi-Fi 목록 확인 (Scan)

먼저 시스템이 주변의 무선 액세스 포인트(AP)를 찾도록 명령해야 합니다.

  • Wi-Fi 스캔 실행:

    1
    nmcli device wifi list

    (참고: 이 명령은 실시간으로 주변 신호를 검색하여 리스트를 출력합니다.)

  • 출력 항목 설명:

    • INSSID: Wi-Fi 이름 (SSID)
    • MODE: 네트워크 모드 (보통 managed)
    • CHAN: 채널 번호
    • RATE: 전송 속도
    • SIGNAL: 신호 세기 (숫자가 높을수록 좋음)
    • SECURITY: 보안 방식 (WPA2, WPA3 등)

2. Wi-Fi 연결하기

목록에서 확인한 SSID를 사용하여 연결합니다.

방법 A: 비밀번호를 알고 있을 때 (가장 일반적임)

다음 명령어를 입력하면 해당 Wi-Fi에 접속을 시도합니다.

1
nmcli device wifi connect "Wi-Fi이름" password "비밀번호"
  • 예시: nmcli device wifi connect "MyHome_5G" password "12345678"

실제 접속시 sudo 필요할 수 있다.

1
2
$ sudo nmcli device wifi connect abc password 12345ABC
Device 'wlp5s0' successfully activated with 'a7ef008a-605f-4bec-9a7e-8e4e87864d7c'.

방법 B: 연결 확인

연결이 성공했는지 확인하려면 다음 명령어를 사용합니다.

1
nmcli connection show --active
  • 현재 활성화된 모든 네트워크 연결(Wi-Fi, 이더넷 등)을 보여줍니다.

3. 연결 해제 및 삭제 (관리용)

나중에 해당 Wi-Fi 접속 정보를 지우거나 연결을 끊고 싶을 때 사용합니다.

  • 특정 Wi-Fi 연결 끊기:
    1
    nmcli connection down id "Wi-Fi이름"
  • 저장된 Wi-Fi 프로필 삭제 (다음에 다시 접속하려면 새로 등록해야 함):
    1
    nmcli connection delete id "Wi-Fi이름"

💡 유용한 팁 (Troubleshooting)

  1. 권한 문제: 만약 명령어가 작동하지 않는다면 명령어 앞에 sudo를 붙여보세요 (예: sudo nmcli ...). 하지만 보통 일반 사용자 권한으로도 가능합니다.
  2. 인터페이스 이름 확인: 간혹 Wi-Fi 장치 이름이 wlan0가 아닐 수 있습니다. 정확한 인터페이스 이름을 확인하려면 nmcli device를 입력하세요. 만약 특정 장치를 지정해야 한다면 명령어에 -i wlan0와 같은 옵션을 추가할 수 있습니다.
  3. 신호가 안 잡힐 때: rfkill list를 입력해서 Wi-Fi가 Soft blocked: yes 혹은 Hard blocked: yes 상태인지 확인하세요. 만약 yes라면 위에서 설명한 rfkill unblock wifi 명령어를 먼저 실행해야 합니다.

Codex 개발시 불편한 것

Local LLM 시리즈

  1. (Local LLM) Ollama 시작하기
  2. Codex 와 Local LLM 연결하기
  3. Codex 로 개발시 불편한 것

프로젝트에 여러 폴더 포함하기

결론부터 말씀드리면, Lib_StockMart 폴더를 굳이 Stock-Agent 아래로 이동시키지 않아도 외부 폴더 상태 그대로 Codex CLI에 주입할 수 있는 방법이 있습니다.

현재 /home/qkboo/Projects/Lib_StockMart의 소스코드를 볼 수 없는 이유는, Codex CLI가 실행될 때 기본적으로 현재 터미널이 위치한 디렉터리(Stock-Agent)와 그 하위 폴더만 자동으로 컨텍스트에 스캔(인덱싱)하도록 설계되어 있기 때문입니다. 프로필에 등록하는 행위는 ‘이 경로를 신뢰한다’는 허가 선언일 뿐, 실행 시 자동으로 멀리 떨어진 다른 폴더를 끌고 오지는 않습니다.

이 구조적 한계를 깨고 독립된 두 폴더를 유기적으로 탐색하게 만드는 2가지 확실한 해결책을 제시해 드립니다.


리눅스(WSL)의 심볼릭 링크 기능을 사용하면, Lib_StockMart 폴더를 원래 위치에 그대로 둔 채 Stock-Agent 내부에 바로가기(폴더 링크)를 심을 수 있습니다. 이렇게 하면 Codex는 해당 링크를 일반 하위 디렉터리로 인식하여 완벽하게 파일을 읽고 @ 검색 대상에 포함시킵니다.

터미널을 열고 다음 명령어를 실행하세요:

1
2
3
4
5
6
# Stock-Agent 디렉터리로 이동
cd /home/qkboo/Projects/Stock-Agent

# 원래 위치에 있는 Lib_StockMart를 현재 폴더에 'lib'라는 이름의 링크로 연결
ln -s /home/qkboo/Projects/Lib_StockMart ./lib

이렇게 세팅하면 구조는 아래와 같이 유지되며, Lib_StockMart 내부 코드를 수정하면 양쪽 모두 실시간으로 반영됩니다:

  • /home/qkboo/Projects/Stock-Agent/lib ➡️ (실제로는 Lib_StockMart를 가리킴)

💡 중요 조치 사항: 심볼릭 링크를 생성한 후, Codex 대화창에서 /reload 명령어를 입력하거나 터미널에서 **codex --profile goyangi_coder --refresh**를 실행해 새롭게 연결된 외부 라이브러리 폴더의 인덱싱을 강제로 갱신해 주어야 @ 검색에 나타나기 시작합니다.


해결책 2: 실행 시점에 다중 파일/디렉터리 명시적 주입

만약 폴더 내부에 바로가기를 심는 구조가 마음에 들지 않는다면, Codex CLI를 실행하는 스크립트 단에서 두 디렉터리를 강제로 병합하여 인덱싱하도록 명령하는 방법이 있습니다.

현재 사용 중이신 단축어(alias cx="...") 설정을 아래와 같이 변경해 보세요.

1
2
3
# 임시 인덱싱 경로로 외부 라이브러리 폴더를 추가 주입하는 단축어 예시
alias cx="codex --profile goyangi_coder --file /home/qkboo/Projects/Lib_StockMart"

  • 동작 원리: 이렇게 실행하면 현재 위치한 Stock-Agent 소스 코드뿐만 아니라, --file 옵션으로 전달된 공통 라이브러리(Lib_StockMart) 내부의 소스 트리까지 통째로 로컬 모델(gemma-4)의 기억(Context) 속에 밀어 넣어주게 됩니다.

🧐 요약 및 퀀트 개발 환경 제언

가장 깔끔하고 현업 표준에 맞는 방식은 [해결책 1 (심볼릭 링크)]입니다. 주식 데이터 분석 엔진(Stock-Agent)을 개발하다가 공통 마켓 데이터 라이브러리(Lib_StockMart)의 내부 클래스나 유틸리티 함수를 호출해야 할 때, 코드를 물리적으로 복사할 필요 없이 @lib/ 형식으로 참조하여 곧바로 퀀트 로직 최적화 팁을 얻을 수 있습니다.