파일 권한 조작
- 파일 권한은
chmod로 바꿀 수 있고, 숫자 방식과 문자 방식이 있음chmod {numcode} {filename}chmod [대상][연산자][권한] 파일- 대상:
u(소유자),g(그룹),o(기타),a(모두) - 연산자:
+(추가), (제거),=(설정) - 권한:
r(읽기),w(쓰기),x(실행)
- 대상:
chown {소유자} {파일}: 소유자 변경chown {소유자}:{그룹} {파일}: 소유자와 그룹 동시 변경 가능
chgrp {그룹} {파일}: 그룹만 변경-R로 재귀 변경 가능
압축과 아카이브
tar 명령어 기본
옵션 의미 설명 cCreate 새 아카이브 생성 xExtract 아카이브에서 파일 풀기 tList 아카이브 내용 목록 보기 zgzip gzip으로 압축/해제 jbzip2 bzip2로 압축/해제 (더 높은 압축률) fFile 아카이브 파일명 지정 (필수) vVerbose 처리 중인 파일명 표시 -CDirectory 풀기 대상 디렉토리 지정 압축 안하고 뭉치기만 하기
1 2
# 아카이브만 생성 (c: create, f: file) tar cf /factory/backup/factory-backup.tar /factory/line-A/
압축도 하기
1 2
# 아카이브 + gzip 압축 (czf: create, gzip, file) tar czf /factory/backup/factory-backup.tar.gz /factory/line-A/
파일명 바꿔주기
1 2
# 오늘 날짜를 파일명에 포함하여 백업 tar czf /factory/backup/sensors-$(date +%Y%m%d).tar.gz /factory/line-A/sensors/
압축 풀지 말고 구경만 하기
1 2
# 아카이브 안에 뭐가 있는지 확인 (t: list) tar tf /factory/backup/sensors-$(date +%Y%m%d).tar.gz
압축 풀기
1 2 3 4 5
# 복원 테스트 디렉토리 만들기 mkdir -p /tmp/restore-test/ # 지정 디렉토리에 풀기 (x: extract, -C: 대상 디렉토리) tar xzf /factory/backup/sensors-$(date +%Y%m%d).tar.gz -C /tmp/restore-test/
gzip만 써도 됨
1 2 3 4 5 6 7 8 9 10 11
# CSV 파일 하나를 gzip으로 압축 cp /factory/line-A/sensors/temp-data.csv /tmp/temp-data.csv ls -lh /tmp/temp-data.csv # gzip 압축 (원본이 .gz로 대체됨!) gzip /tmp/temp-data.csv ls -lh /tmp/temp-data.csv.gz # 압축 해제 (원본으로 복원) gunzip /tmp/temp-data.csv.gz ls -lh /tmp/temp-data.csv
zip도 있어
- 압축률이 조금 떨어지는 대신 윈도우에서 익숙하게 쓰던 그거임
- 리눅스 권한은 보존되지 않을 수 있음
- 부분 압축해제 가능
1 2 3 4 5 6 7 8 9
# zip 설치 (컨테이너에 없을 수 있음) apt update && apt install -y zip unzip # zip으로 압축 zip -r /factory/backup/factory-lineA.zip /factory/line-A/ # 크기 비교: tar.gz vs zip ls -lh /factory/backup/factory-backup.tar.gz ls -lh /factory/backup/factory-lineA.zip
패키지 관리
apt 핵심 명령어
명령어 역할 비유 apt update패키지 목록 갱신 앱스토어 새로고침 apt install 패키지패키지 설치 앱 다운로드 및 설치 apt remove 패키지패키지 삭제 앱 삭제 apt autoremove불필요한 의존성 정리 앱 캐시/잔여 파일 정리 apt search 키워드패키지 검색 앱스토어에서 검색 apt show 패키지패키지 상세 정보 앱 설명 보기 apt list --installed설치된 패키지 목록 설치된 앱 목록 보기 이것저것 설치하기:
apt install -y curl wget net-tools jq tree htop도구 역할 공장에서의 활용 curlHTTP 요청 보내기 REST API 호출, 센서 API 테스트 wget파일 다운로드 업데이트 파일, 펌웨어 다운로드 net-tools네트워크 진단 설비 네트워크 상태 확인 jqJSON 처리 센서 JSON 데이터 파싱 tree디렉토리 구조 보기 프로젝트 구조 파악 htop시스템 모니터링 서버 CPU/메모리 사용량 확인 curl로 외부 API 호출, 출력은 깔끔한 JSON으로 나온다
1 2
# curl로 테스트 API 호출 (-s: silent 모드) curl -s https://httpbin.org/get | jq .
디렉토리 구조 예쁘게 보기. 함 해보세요 딱 익숙한 그 모양 나옴
1
tree {폴더} -L 2
htop: 시스템 리소스 모니터링. 윈도우 작업 관리자 같은 거임.지금 열린 포트 확인
1 2
# 열린 포트 확인 (-t: TCP, -l: listening, -n: 숫자 표시, -p: 프로세스) netstat -tlnp
패키지 검색, 정보 보기
1 2 3 4 5
# MQTT 관련 패키지 검색 apt search mqtt # 패키지 상세 정보 보기 apt show curl
패키지 삭제 후 정리
1 2 3 4 5 6 7 8 9
# htop 삭제 apt remove -y htop # 불필요한 의존성 정리 apt autoremove -y # htop이 삭제되었는지 확인 htop # bash: htop: command not found 나오면 삭제된거임
다양한 설치 방법
curl로 다운로드하기
1 2 3 4 5 6 7
# -f: 실패 시 에러 반환 # -s: 진행 상황 숨기기 # -S: 에러는 표시 # -L: 리다이렉트 따라가기 # -o: 저장할 파일명 지정 curl -fsSL {from_url} -o {to_filename} ls -la {to_filename}
wget으로 똑같은 거 하기
1 2
wget {from_url} -O {to_filename} ls -la {to_filename}
python 쓰기
1 2 3 4 5 6 7 8 9 10
# Python과 pip 설치 apt install -y python3 python3-pip # MQTT 클라이언트 설치 (스마트팩토리 핵심) pip3 install paho-mqtt --break-system-packages python3 -c "import paho.mqtt.client; print('MQTT 라이브러리 설치 성공')" # 시계열 DB 클라이언트 설치 pip3 install influxdb-client --break-system-packages python3 -c "import influxdb_client; print('InfluxDB 클라이언트 설치 성공')"
node 설치
1 2 3 4 5 6 7 8 9
# Node.js와 npm 설치 apt install -y nodejs npm node --version npm --version # PM2 프로세스 매니저 설치 (전역) # -g: 전역(global) 설치 — 어디서든 사용 가능 npm install -g pm2 pm2 --version
빌드 도구 설치
1 2 3
# build-essential = gcc, g++, make 등 컴파일에 필요한 도구 모음 apt install -y build-essential gcc --version
프로세스 관리
ps aux: 전체 프로세스 목록 보기grep 연계하여 검색 가능
1 2 3 4 5
# bash 프로세스만 찾기 ps aux | grep bash # python 프로세스만 찾기 ps aux | grep python
- 명령어 끝에
&를 붙이면 백그라운드로 실행되어 터미널을 점유하지 않음 jobs로 지금 실행중인 백그라운드 작업들을 확인할 수 있음실시간 업데이트 tail
1 2
# -f: follow 모드 — 새 내용이 추가되면 실시간으로 표시 tail -f /factory/sensor-live.log
top: 실시간 작업관리자. q를 눌러 종료.특정 프로세스 종료하기
1 2 3 4 5 6 7 8
# 먼저 PID 확인 ps aux | grep sensor-sim | grep -v grep # PID로 종료 (SIGTERM — 정상 종료 요청) kill PID번호 # 프로세스가 안 죽으면 강제 종료 (SIGKILL) kill -9 PID번호
터미널 종료해도 일은 계속 하기
1 2 3 4
# nohup: 터미널이 닫혀도 프로세스 유지 # > /dev/null 2>&1: 출력 버리기 # &: 백그라운드 실행 nohup /factory/sensor-sim.sh > /dev/null 2>&1 &
네트워크 기초
ip addr show: 컨테이너의 IP 주소 확인ip route: 라우팅 확인cat /etc/resolv.conf: DNS 설정 확인외부 네트워크 연결 테스트
1 2
# 구글에 3번만 ping ping -c 3 google.com
HTTP 요청 자세히 보기
1 2
# -v: verbose 모드 — 요청/응답 헤더까지 모두 표시 curl -v http://httpbin.org/get
JSON 응답 파싱 (jq 활용)
1 2 3 4
# -s: silent 모드 (진행 표시 숨기기) # jq가 설치되어 있어야 합니다 (Lesson 16에서 설치했다면 OK) apt install -y jq 2>/dev/null curl -s http://httpbin.org/headers | jq .
wget으로 curl이랑 똑같이 요청하기
1 2 3
# -q: quiet 모드 # -O -: 파일 저장 대신 stdout으로 출력 wget -q http://httpbin.org/get -O -
TCP 리스닝 포트 확인
1 2 3 4 5
# -t: TCP만 # -l: 리스닝(대기 중) 상태만 # -n: 포트 번호를 숫자로 표시 # -p: 프로세스 정보 표시 ss -tlnp
호스트 이름 해석 확인
1 2 3 4 5
# /etc/hosts 파일 확인 — 로컬 DNS 역할 cat /etc/hosts # hostname 확인 hostname
curl로 API 요청 보내기
1 2 3 4 5
# 설비 상태 데이터를 POST로 전송하는 시뮬레이션 curl -X POST http://httpbin.org/post \ -H "Content-Type: application/json" \ -d '{"equipment":"CNC-01","status":"running","temperature":72.5}' \ -s | jq .
curl로 요청 보내서 응답 코드만 보기
1 2 3 4
# -o /dev/null: 본문 버리기 # -w "%{http_code}": 상태 코드만 출력 curl -s -o /dev/null -w "%{http_code}" http://httpbin.org/get echo # 줄바꿈
도커 허브가 뭔데요
- 일단 레지스트리는 깃허브 같은 거임. 도커 이미지를 올려서 공유하는 곳. 레지스트리는 여러 종류가 있고, 기본적으로 쓰는 건 도커 허브.
- 도커 허브에 올라온 이미지는 3종류로 나뉜다
- 도커 공식 이미지
- 검증된 퍼블리셔 이미지
- 아무나 올린 이미지
- 도커 이미지 이름 포맷
[레지스트리]/[네임스페이스]/[리포지토리]:[태그]
- 태그는 버전을 나타내긴 하는데, latest가 항상 최신이 아닐 수 있음. 사실 default에 더 가까운 의미임. 자동으로 갱신되지 않는다.
