[Physical AI W1D2] 1/6 — 리눅스 기초 체력: 쉘·파일시스템·핵심 명령어

2026. 6. 14. 17:13·피지컬AI

[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
'피지컬AI' 카테고리의 다른 글
  • [Physical AI W1D2] 3/6 — ROS 2 통신의 4가지 길: 노드·토픽·서비스·액션
  • [Physical AI W1D2] 2/6 — 리눅스 실전 8 시나리오: 명령어를 손에 익히기
  • [Physical AI W1D1] 5/5 — ROS 2 /clock을 밖으로: WebSocket 서버 + Cloudflare Tunnel
  • [Physical AI W1D1] 4/5 — Colab에서 ROS 2 Humble + Gazebo headless 환경 만들기
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (342) N
      • 여러가지 (11) N
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (21)
        • 도커 (2)
        • AWS (19)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (2) N
        • 정보처리기사 (0)
        • 정보보안기사 (1)
        • 네트워크관리사 (1) N
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
      • 피지컬AI (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring WebFlux
    역운동학
    FastAPI
    java
    SAA
    그리디
    운동학
    항해99
    Spring Boot
    네트워크
    완전탐색
    클라우드
    Redis
    로봇팔
    자바
    피지컬ai
    AWS
    WebFlux
    celery
    EC2
    rclpy
    AWS네트워크계층으로읽기
    ROS2
    동차변환행렬
    취업리부트
    docker
    프로그래머스
    moveit
    TF
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[Physical AI W1D2] 1/6 — 리눅스 기초 체력: 쉘·파일시스템·핵심 명령어
상단으로

티스토리툴바