[Physical AI W1D2 · 1/6]
피지컬 AI도, ROS 2도 결국 리눅스 위에서 돈다. 커널·쉘·사용자 구조부터 ls·grep·ps·chmod·파이프까지 — 로봇 개발자가 매일 쓰는 명령줄 기초 체력을 "무엇을·왜·어떤 결과"로 풀어본다.
이 글에서 직접 익히는 것
- 리눅스의 3층 구조 — 커널 / 쉘 / 사용자
- 쉘(Shell)이 뭐고 왜 REPL로 도는가, 쉘 종류(sh·bash·zsh)
- 파일시스템 구조(
/,home,etc,var…)- 매일 쓰는 핵심 명령어: 파일·디렉토리, 내용 보기, 프로세스, 패키지, 권한, 네트워크, 파이프
(이 글은 2026년 6월, Physical AI 과정 Week1 Day2 기준입니다. Week1 Day1(1~5편)에서 ROS 2·Gazebo를 다뤘다면, Day2는 그 토대인 리눅스 명령줄부터 다집니다.)
들어가며 — 왜 로봇 개발자가 리눅스부터인가
피지컬 AI 시스템은 화려한 AI 모델 이전에 리눅스 한 대 위에서 돌아갑니다. ROS 2는 Ubuntu(리눅스)를 공식 지원하고, 센서 드라이버·시뮬레이터·빌드 도구 모두 명령줄에서 다룹니다. 즉 로봇을 만지려면 터미널이 손에 붙어 있어야 합니다.
Day1에서 우리는 Colab 터미널에 ROS 2를 깔며 이미 리눅스 명령을 잔뜩 썼습니다. 이번 1편은 그때 "그냥 따라 친" 명령들이 무엇이고 왜 그렇게 동작하는지를 기초부터 정리합니다. 외우기보다 구조를 이해하는 게 목표입니다.
💡 이 글의 실습 무대 — Day1과 같습니다. Colab 터미널(=우분투 22.04 리눅스) 또는 본인 Ubuntu에서 그대로 따라 칠 수 있습니다.
1. 리눅스 Ubuntu란
Ubuntu는 Canonical이 만든 오픈소스 리눅스 배포판으로, 데비안(Debian) 기반입니다. "사람을 위한 Linux"를 표방하며 서버·개발·교육에서 가장 많이 쓰입니다.
- 무료 오픈소스 — 자유롭게 사용·수정·배포
- LTS(Long Term Support) — 2년마다 출시, 5년간 보안 업데이트 (예: 22.04 = jammy)
- APT 패키지 매니저 —
apt한 줄로 소프트웨어 설치·관리 - 강력한 보안 — root 직접 로그인 비허용,
sudo방식 - 멀티유저 — 여러 사용자가 동시에 사용
ROS 2 Humble이 Ubuntu 22.04를 공식 지원하므로, 우리는 이 조합을 씁니다.
2. 운영체제 3층 구조 — 커널 / 쉘 / 사용자
리눅스를 이해하는 핵심 그림은 세 개의 층입니다.
| 층 | 역할 |
|---|---|
| 커널(Kernel) | 하드웨어(CPU·메모리·디스크)를 직접 제어하는 운영체제의 심장. 사람의 명령을 직접 이해하지는 못함 |
| 쉘(Shell) | 사용자의 명령어를 읽어 해석하고 커널이 실행하도록 전달하는 통역사 |
| 사용자(User) | 터미널에 명령을 입력하는 사람 |
비유하자면 커널은 딱딱한 핵심, 쉘은 그걸 감싸 사용자의 말을 번역해 주는 껍데기(shell) 입니다.
3. 쉘(Shell)은 어떻게 도는가 — REPL
쉘은 단순한 입력창이 아니라 REPL(Read–Eval–Print Loop) 구조로 동작하는 프로그래밍 환경입니다.
Read (읽기) : 입력한 명령 문자열을 읽어들임
↓
Eval (해석) : 내장 명령인지 외부 프로그램인지 판단, 경로 탐색·환경변수 적용 후 실행
↓
Print (출력) : 실행 결과를 화면에 표시
↓
Loop (반복) : 다시 프롬프트로 돌아가 입력 대기
쉘이 실제로 하는 일은 생각보다 많습니다: 명령어 파싱, 프로세스 생성(fork/exec), 입출력 리다이렉션, 파이프 구성, 환경변수 관리, 스크립트 실행. 그래서 쉘은 "운영체제와 상호작용하는 텍스트 기반 프로그래밍 인터페이스"라고 부릅니다.
쉘의 종류
| 종류 | 이름 | 특징 |
|---|---|---|
sh |
Bourne Shell | 가장 오래된 표준. 가볍지만 기능 적음. 거의 모든 유닉스에 기본 포함 |
bash |
Bourne Again Shell | 리눅스 표준. 히스토리·자동완성 등 편의성 강화. 서버 운영의 기본값 |
zsh |
Z Shell | bash 기능 + 강력한 테마(Oh My Zsh)·플러그인. macOS 기본·개발 환경 인기 |
csh/tcsh |
C Shell | C 문법과 유사. 명령줄 편집 우수 |
ksh |
Korn Shell | sh 호환 + csh 기능. 대규모 시스템 |
💡 한 줄 정리 — 서버·스크립트는 bash, 개발 환경 꾸미기는 zsh가 주류. 스크립트 호환성은 sh/bash가 가장 높습니다. 헷갈리면 일단 bash.
4. 파일시스템 구조 — 길을 알아야 안 헤맨다
리눅스의 모든 것은 최상위 루트 / 아래 한 그루의 나무처럼 매달려 있습니다.
/ ← 루트 디렉토리 (최상위)
├── home/ ← 사용자 홈 디렉토리 (~ 로 줄여 씀)
├── etc/ ← 설정 파일들
├── var/ ← 로그·데이터 등 자주 바뀌는 파일
├── usr/ ← 프로그램·라이브러리
├── tmp/ ← 임시 파일
└── bin/ ← 기본 실행 파일들
ROS 2도 이 구조 위에 삽니다 — 예를 들어 ROS 2 Humble은 /opt/ros/humble/에 설치되고, 우리가 Day1에서 친 source /opt/ros/humble/setup.bash가 바로 그 경로입니다.
5. 파일 · 디렉토리 명령어
가장 자주 쓰는 묶음입니다. "무엇을·왜" 를 함께 봅니다.
# ls — 목록 보기
ls # 현재 디렉토리 파일 목록
ls -l # 상세(권한·크기·날짜)
ls -a # 숨김 파일(.으로 시작) 포함
ls -lh # 크기를 읽기 쉽게(KB·MB)
ls -la /etc # /etc 전체 상세 목록
# cd — 디렉토리 이동
cd /home/user # 절대 경로
cd Documents # 상대 경로
cd .. # 상위로
cd ~ # 홈으로
cd - # 직전 디렉토리로
# pwd — 현재 위치 확인
pwd # /home/ubuntu/Documents 처럼 현재 경로 출력
# mkdir — 디렉토리 생성
mkdir project # 단일 생성
mkdir -p a/b/c # 중간 경로까지 한 번에
mkdir dir1 dir2 dir3 # 여러 개 동시에
# cp — 복사
cp file.txt backup.txt # 파일 복사
cp -r folder/ folder_backup/ # 디렉토리 통째로(-r 재귀)
# mv — 이동 / 이름 변경
mv old.txt new.txt # 이름 변경
mv file.txt /tmp/ # 이동
# rm — 삭제
rm file.txt # 파일 삭제
rm -r folder/ # 디렉토리+내용 삭제
rm -rf folder/ # 강제 삭제 (⚠️ 복구 불가)
-r(recursive) 은 "디렉토리 안까지 재귀적으로"라는 뜻 — cp·rm에서 폴더를 다룰 때 필수.-p(parents) 는 mkdir에서 중간 경로까지 만들어 줍니다. Day1의mkdir -p ~/ros2_ws/src가 바로 이것.
⚠️ 흔한 함정 ① —
rm -rf—-rf는 묻지도 따지지도 않고 강제 삭제합니다. 경로를 한 글자만 잘못 쳐도 복구 불가입니다(rm -rf / tmp처럼 공백 실수 치명적). 삭제 전ls로 대상을 먼저 확인하는 습관을 들이세요.
6. 파일 내용 확인
# cat — 전체 출력
cat file.txt # 전체 내용
cat file1.txt file2.txt # 두 파일 이어서 출력
cat -n file.txt # 줄 번호 포함
# less / more — 페이지 단위 보기
less file.txt # 위아래 스크롤(q로 종료) ← 큰 파일에 유용
more file.txt # 페이지 단위(스페이스로 넘김)
# head / tail — 앞/뒤 일부
head -20 file.txt # 앞 20줄
tail -20 file.txt # 마지막 20줄
tail -f /var/log/syslog # 실시간으로 새 줄을 따라가며 출력(-f follow)
# grep — 내용 검색(매우 자주 씀!)
grep "error" log.txt # "error" 포함 줄
grep -i "error" log.txt # 대소문자 무시
grep -r "function" ./src/ # 디렉토리 재귀 검색
grep -n "TODO" *.py # 줄 번호 포함
grep -v "debug" log.txt # "debug" 제외한 줄
tail -f는 로그를 실시간으로 지켜볼 때 핵심 — 로봇 노드 로그 디버깅에 자주 씁니다.grep은 "텍스트에서 찾기"의 만능 도구.ros2 topic list | grep clock처럼 다른 명령 출력에서 원하는 줄만 거를 때도 씁니다(→ 8절 파이프).
7. 시스템 & 프로세스
로봇 시스템은 여러 프로그램(노드)이 동시에 도는 구조라, 프로세스 관리가 중요합니다.
# ps / top — 프로세스 확인
ps aux # 실행 중인 전체 프로세스
ps aux | grep nginx # 특정 프로세스만 필터
top # 실시간 CPU/메모리 모니터링(q로 종료)
# kill — 프로세스 종료
kill 1234 # PID로 정상 종료
kill -9 1234 # 강제 종료(-9 시그널)
killall nginx # 이름으로 종료
# pkill — 이름으로 바로 종료(PID 안 찾아도 됨)
pkill python3 # python3 프로세스 종료
pkill -9 chrome # 강제 종료
pkill -f "python app.py" # 실행 인자까지 검색해서 종료
# df / du — 디스크 사용량
df -h # 전체 디스크(읽기 쉽게)
du -sh folder/ # 특정 폴더 크기
# free — 메모리, uname — 시스템 정보
free -h # 메모리 사용 현황
uname -a # 커널 버전·아키텍처 전체
💡 kill vs pkill —
kill은 PID(숫자)가 필요해 2단계(ps로 PID 찾기 →kill),pkill은 이름으로 1단계에 끝납니다. Day1·Day2 실습에서pkill -f ros_clock_ws_server.py처럼 스크립트 이름으로 정리할 때pkill -f가 특히 편리합니다.
8. 파이프 & 리다이렉션 — 리눅스의 진짜 힘
작은 명령들을 레고처럼 조합하는 게 리눅스의 철학입니다.
# | 파이프: 앞 명령의 출력을 뒤 명령의 입력으로
ps aux | grep python # 실행 중 python 프로세스만
cat log.txt | grep error | wc -l # 에러 줄 "개수" 세기
# > 리다이렉션: 출력을 파일로 저장
ls -l > filelist.txt # 덮어쓰기
ls -l >> filelist.txt # 이어쓰기(append)
# 2>&1: 표준에러도 같은 곳으로 (Day1에서 봤던 그것)
python3 server.py > server.log 2>&1 & # 출력+에러를 로그로, 백그라운드(&)
|(파이프) — "앞 결과를 뒤로 흘려보내기".grep·wc·sort·head와 조합하면 강력합니다.>/>>— 화면 대신 파일로.>는 덮어쓰기,>>는 이어쓰기.2>&1— 에러 출력(2번)을 표준 출력(1번)과 같은 곳으로 합치기. Day1의> log 2>&1 &가 바로 "출력·에러를 로그 파일로 모으고 백그라운드 실행"이었습니다.
9. 패키지 관리 (APT)
Ubuntu에서 소프트웨어 설치·관리는 apt로 합니다. Day1의 ROS 2 설치가 전부 이 명령이었습니다.
sudo apt update # 패키지 목록 최신화(설치 전 항상!)
sudo apt upgrade # 설치된 패키지 업그레이드
sudo apt install nginx # 설치
sudo apt remove nginx # 제거(설정은 남김)
sudo apt purge nginx # 설정까지 완전 제거
sudo apt autoremove # 불필요한 의존성 자동 정리
apt search python # 검색
apt show nginx # 정보 확인
⚠️ 흔한 함정 ② —
apt update생략 —install전에apt update로 목록을 갱신하지 않으면 "패키지를 못 찾음" 또는 옛 버전 설치가 납니다.update→install을 한 세트로.
10. 권한 & 사용자
리눅스는 멀티유저 시스템이라 파일마다 권한이 있습니다.
# chmod — 권한 변경
chmod 755 script.sh # rwxr-xr-x (소유자 실행가능, 나머지 읽기)
chmod 644 file.txt # rw-r--r-- (일반 파일 기본)
chmod +x script.sh # 실행 권한 추가
# chown — 소유자 변경
sudo chown -R www-data /var/www # 디렉토리 전체 소유자 변경
# sudo — 관리자 권한으로 실행
sudo apt install vim # 관리자 권한 설치
sudo -i # root 쉘로 전환
- 권한 숫자
755/644는 소유자/그룹/기타 각각의 읽기(4)·쓰기(2)·실행(1) 합입니다.7=4+2+1(rwx),5=4+1(r-x),4(r--). chmod +x는 쉘 스크립트를 "실행 가능"하게 만드는 가장 흔한 용도입니다(./script.sh로 돌리려면 필요).sudo는 "잠깐 관리자 권한 빌리기". 리눅스가 root 직접 로그인을 막고 sudo를 쓰게 하는 게 보안의 핵심입니다.
11. 네트워크
로봇은 네트워크로 데이터를 주고받습니다(Day1의 WebSocket·터널도 그 일부). 진단 명령을 알아둡니다.
ping google.com # 연결 확인
ip addr # IP 주소 확인
curl https://example.com # URL 내용 가져오기
wget https://example.com/file.zip # 파일 다운로드
ssh user@192.168.1.10 # 원격 서버 접속
scp file.txt user@server:/path/ # 원격으로 파일 전송
netstat -tuln # 열린 포트 확인
💡 가벼운 OS엔
ping/netstat이 없을 수 있습니다 →sudo apt install -y iputils-ping net-tools로 설치 후 사용. Day1에서 포트 확인에 쓴ss -tunlp도 같은 계열(netstat의 현대판)입니다.
12. 알아두면 편한 단축키
| 단축키 | 기능 |
|---|---|
Ctrl + C |
실행 중 명령 강제 중단 |
Ctrl + Z |
실행 중 명령 정지(stopped 상태) — bg로 백그라운드 재개, fg로 복귀 |
Ctrl + L |
화면 지우기(clear와 동일) |
Tab |
명령어·파일명 자동완성 |
↑ / ↓ |
이전/다음 명령 히스토리 |
history |
입력했던 명령 전체 목록 |
!! |
직전 명령 재실행 |
man ls |
ls 매뉴얼 보기 |
💡 Tab 자동완성과 ↑(히스토리) 만 손에 붙어도 터미널 속도가 2배가 됩니다. 긴 경로·명령은 직접 다 치지 말고 Tab을 누르세요.
1편 정리 — 오늘 손에 넣은 기초 체력
- 리눅스 = 커널 / 쉘 / 사용자 3층. 쉘은 REPL로 도는 통역사(서버는 bash).
- 모든 것은
/아래 한 나무 — ROS 2는/opt/ros/humble/에 산다. - 매일 쓰는 명령: 파일·디렉토리(ls·cd·cp·mv·rm) / 내용(cat·grep·tail -f) / 프로세스(ps·kill·pkill) / 패키지(apt) / 권한(chmod·sudo) / 네트워크(ping·ssh) / 파이프(
|·>·2>&1). - 함정 3가지:
rm -rf주의,apt update먼저,chmod +x로 스크립트 실행권한.
이 명령들은 외우는 게 아니라 쓰면서 손에 붙습니다. 다음 편에서 실제 상황으로 굴려 봅니다.
다음 편 예고
2편에서는 이 명령들을 실전 8개 시나리오로 묶어 손에 익힙니다 — 웹 프로젝트 디렉토리 세팅, 로그 파일 분석, 프로세스 모니터링, 디스크 정리, 권한·보안, 네트워크 진단, 파이프 조합, 패키지·서비스 관리. "명령 하나"가 아니라 "문제 해결의 흐름"으로요.
📚 Week1 Day2 전체 목차 (총 6편)
- 1/6 리눅스 기초 — 쉘·파일시스템·핵심 명령어 — 이번 글
- 2/6 리눅스 실전 8 시나리오
- 3/6 ROS 2 통신 4종 개념 — 노드·토픽·서비스·액션
- 4/6 ROS 2 토픽 Pub/Sub 직접 만들기
- 5/6 ROS 2 서비스·액션 구현
- 6/6 ROS 2 패키지 빌드 — Python·C++·colcon
'피지컬AI' 카테고리의 다른 글
| [Physical AI W1D2] 3/6 — ROS 2 통신의 4가지 길: 노드·토픽·서비스·액션 (0) | 2026.06.14 |
|---|---|
| [Physical AI W1D2] 2/6 — 리눅스 실전 8 시나리오: 명령어를 손에 익히기 (0) | 2026.06.14 |
| [Physical AI W1D1] 5/5 — ROS 2 /clock을 밖으로: WebSocket 서버 + Cloudflare Tunnel (1) | 2026.06.14 |
| [Physical AI W1D1] 4/5 — Colab에서 ROS 2 Humble + Gazebo headless 환경 만들기 (0) | 2026.06.14 |
| [Physical AI W1D1] 3/5 — 무엇을 배워야 하나: ROS 2부터 Sim-to-Real까지 학습 로드맵 (0) | 2026.06.14 |