블로그

  • Linux – File and Directory

    1. 리눅스의 주요 디렉토리

    • ubuntu 리눅스를 기준으로 한 디렉토리 구성
    디렉토리설명
    /루트 디렉토리. 모든 파일과 디렉토리의 최상위 경로
    /bin필수 실행 파일(binary). 부팅과 기본 명령어(ls, cp, mv, cat 등)가 들어있음
    /sbin시스템 관리자용 시스템 바이너리 (fsck, reboot, mount 등)
    /boot커널 및 부팅 관련 파일 (vmlinuz, initrd, grub 등)
    /dev디바이스 파일. 하드웨어 장치를 파일처럼 다룸 (/dev/sda, /dev/tty 등)
    /etc설정 파일(설정 디렉토리). 시스템 전반의 설정 (passwd, fstab, network/, systemd/)
    /home일반 사용자들의 개인 홈 디렉토리 (/home/user)
    /lib, /lib64커널과 기본 명령어에 필요한 공유 라이브러리 파일 (.so)
    /mediaUSB, CD-ROM 등 자동 마운트 장치의 마운트 위치
    /mnt임시 마운트 지점. 수동으로 외부 장치를 마운트할 때 사용
    /opt추가 소프트웨어 패키지 설치 경로 (예: Google Chrome, VMware 등 외부 앱)
    /proc커널과 프로세스 정보 제공하는 가상 파일 시스템 (/proc/cpuinfo, /proc/meminfo)
    /root루트(root) 사용자의 홈 디렉토리 (/home/root가 아님)
    /run시스템 런타임 정보 저장. 부팅 중에 임시로 사용되는 데이터
    /srv웹 서버, FTP 등의 서비스용 데이터 디렉토리 (/srv/www, /srv/ftp)
    /sys커널과 하드웨어 정보를 보여주는 가상 파일 시스템. /proc과 유사
    /tmp임시 파일 저장소. 재부팅하면 삭제됨
    /usr사용자 애플리케이션과 파일이 위치함. 시스템과 사용자 공용 리소스
    /var로그, 캐시, 메일 큐, 프린트 스풀 등 가변 데이터 저장 (/var/log, /var/tmp)


     
     


     
     


     
     


     
     


     
     


     
     


     
     

    2. 파일 퍼미션 (File Permission)

    리눅스에서는 각 파일과 디렉토리에 대해 세 가지 사용자 그룹에게 권한을 설정합니다:

    1. 소유자(User) – 파일을 만든 사용자
    2. 그룹(Group) – 파일이 속한 그룹
    3. 기타(Others) – 위 둘을 제외한 나머지 모든 사용자

    각 사용자 그룹에 대해 설정할 수 있는 권한은 다음과 같습니다:

    기호의미설명
    rRead읽기
    wWrite쓰기
    xExecute실행


     
     


     
     


     
     


     
     

    3. 디렉토리 퍼미션

    권한의미
    r디렉토리 내용 목록 보기 (ls)
    w디렉토리에 파일 생성/삭제
    x디렉토리에 진입 가능 (cd)

    예를 들어 r-x만 있다면 디렉토리에 들어가서 내용을 볼 수는 있지만, 파일을 생성하거나 삭제는 불가


     
     


     
     


     
     


     
     


     
     


     
     


     
     

    4. 파일 및 디렉토리 관련 명령

    • ls: 파일 및 디렉토리 조회
    Bash
    ls
    ls -l
    ls -al
    ls -alR
    Bash
    • df: 파일 용량 조회
    Bash
    df
    df -h
    Bash
    • du: 디스크 용량 조회
    Bash
    du
    du -skm
    Bash
    • chmod: 파일, 디렉토리 퍼미션 변경
    Bash
    chmod 777 file
    chmod 755 directory
    chmod +x run.sh
    chmod u-x file
    chmod o-x directory
    Bash
    • chown: 파일, 디렉토 소유자 변경
    Bash
    chown root:root file
    chown www:www directory
    Bash
    • tar, gzip, zip: 파일 압축
    Bash
    tar cvzf compressed.tar.gz aa bb cc     # 압축 파일 생성
    tar tvzf compressed.tar.gz              # 압축된 파일 목록 출력
    tar xvzf compressed.tar.gz              # 압축 해제 
    Bash
    • cd, pwd : 디렉토리 이동, 현재 디렉토리 정보
    • mkdir, rmdir : 디렉토리 생성, 삭제
    • cp, mv : 파일/디렉토리 복사/이동
    • cat, more, less : 파일 내용 보기
    • which : 명령어 경로 조회
    Bash
    which ls
    which git
    Bash
    • find : 파일 찾기
      • 생각 이상으로 유용하고 자주 사용되는 명령
    Bash
    find . -name "*.png" -exec ls -l {} \;
    Bash

  • Linux Distributions

    0.


     
     
     
     
     
     
     
     

    1. 리눅스 배포판이란?

    A collection of software based on the Linux kernel

    • 리눅스 커널을 기반으로 다양한 소프트웨어를 조합하여 만든 완전한 운영체제
    • 리눅스 커널은 시스템의 핵심(Core)일 뿐이기 때문에, 배포판에는 실제 사용을 위한 다양한 프로그램들이 함께 포함


     
     
     
     
     
     
     
     
     
     
     
     

    2. 리눅스 배포판의 구성 요소

    일반적인 리눅스 배포판에는 다음과 같은 구성 요소가 포함됩니다:

    • 리눅스 커널 – 하드웨어 자원을 관리하는 운영체제의 핵심.
    • GNU 유틸리티 – 기본적인 시스템 명령어 및 도구 (bash, cp, ls 등).
    • 패키지 관리자 – 프로그램 설치 및 업데이트 도구 (apt, yum, dnf, pacman 등).
    • 그래픽 사용자 인터페이스(GUI) – GNOME, KDE, XFCE 등의 데스크탑 환경 (선택사항).
    • 사용자 애플리케이션 – 웹 브라우저, 파일 관리자, 오피스 프로그램 등.


     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    2. 대표적인 리눅스 배포판 예시

    배포판마다 특징과 대상 사용자가 다릅니다.

    배포판설명
    Ubuntu사용자가 많고 친숙하며 초보자에게 추천.
    Debian안정성이 높고, 다른 배포판의 기반이 됨 (예: Ubuntu).
    Fedora최신 기술 적용이 빠르고 Red Hat이 후원.
    CentOS / AlmaLinux / Rocky Linux서버용으로 안정적이며 기업 환경에 적합.
    Arch Linux최소한의 시스템, 고급 사용자에게 적합.
    Alpine Linux초경량 배포판, 보안 최적화, 도커 컨테이너에서 자주 사용
    Kali Linux보안 테스트용, 해킹 및 침투 테스트에 특화됨.
    • Alpine Linux: 초소형, 보안 중심의 Linux 배포판
      • BusyBox는 Linux/Unix 환경에서 매우 널리 사용되는 초경량 유틸리티 도구 모음
      • 하나의 실행 파일로 수많은 셸 명령어들을 구현
      • 임베디드 시스템이나 도커(Docker) 기반 컨테이너 이미지에서 핵심 구성 요소로 사용
      • 패키지 설치에 apk(Alpine Package Keeper) 사용


     


     
     


     
     


     
     


     
     


     
     
     
     
     
     
     
     
     
     
     
     


     
     

    3. 어떤 배포판을 선택할까?

    사용 목적에 따라 적합한 배포판이 달라집니다:

    • 리눅스 입문자: Ubuntu, Linux Mint
    • 서버 운영: Debian, CentOS, AlmaLinux
    • 보안/해킹: Kali Linux, Parrot OS
    • 직접 커스터마이징하고 싶은 경우: Arch Linux, Gentoo


     
     
     
     
     
     
     
     
     
     


     

     
     
     
     
     
     
     
      

    Tip. 배포판 정보 조회

    Bash
    cat /etc/os-release
    cat /etc/issue
    cat /etc/issue.net
    uname -a
    Bash


     
      
     
      
     
      
     
      
     
      
     
      

  • docker 실습 – container run — env

    Bash
    docker container run --name db --rm mariadb
    Bash

    Bash
     You need to specify one of MARIADB_ROOT_PASSWORD, MARIADB_ROOT_PASSWORD_HASH, MARIADB_ALLOW_EMPTY_ROOT_PASSWORD and MARIADB_RANDOM_ROOT_PASSWORD
    Bash

    MARIADB_ROOT_PASSWORD, MARIADB_ROOT_PASSWORD_HASH, MARIADB_ALLOW_EMPTY_ROOT_PASSWORD and MARIADB_RANDOM_ROOT_PASSWORD 중 하나를 명시하라는 메시지를 출력합니다.

    Bash
    docker container run \
      --name db \
      --env MARIADB_ROOT_PASSWORD=secretpw \
      --publish 3306:3306 \
      --rm \
      mariadb
    Bash

    Bash
    mariadb --host=127.0.0.1 --port=3306 --user=root --password=secretpw
    Bash
  • docker-compose down과 stop의 차이

    1. 개요

    도커 컨테이너를 종료할 때는 docker-compose down과 docker compose stop을 사용합니다.

    이 둘은 모두 컨테이너를 종료하는 데 사용되지만 명령에 따른 효과는 차이를 보입니다.

    본 글에서는 이 두 명령어의 차이점에 대해 서술합니다.

    2. docker-compose stop

    • 현재 docker-compose up 으로 실행 중인 **컨테이너를 “중지(stop)”**합니다.
    • 컨테이너는 삭제되지 않으며, 상태는 “중지됨(stopped)” 상태로 남아 있습니다.

    2.1. 실행 효과

    • 컨테이너 상태 : 중지 (삭제되지 않음)
    • 네트워크 : 그대로 유지됨
    • 볼륨 : 그대로 유지됨
    • 다시 시작 가능 : docker-compose start 로 빠르게 재시작 가능
    • 캐시 / 설정 유지 : ✅ 그대로 유지됨

    2.2. 실행 예시:

    Bash
    docker-compose stop
    Bash

    3. docker-compose down

    • Compose 환경 전체를 정리하고 종료
    • 모든 관련 리소스 (컨테이너, 네트워크, 기본 볼륨 등)를 삭제

    3.1 실행 효과

    • 컨테이너 상태: 완전 삭제
    • 네트워크 : 삭제됨 (사용 중인 전용 네트워크 포함)
    • 볼륨 : 기본은 유지됨, -v 옵션 시 삭제
    • 이미지 : 기본은 유지됨, --rmi 옵션 시 삭제 가능
    • 다시 시작 가능 여부 : up으로 재생성 필요

    3.2. 실행 예시:

    Bash
    docker-compose down
    Bash

    4. 요약

    • stop일시정지 (컨테이너는 남아 있음)
    • down완전종료 + 컨테이너/네트워크/옵션에 따라 볼륨 삭제
  • Training

     
     

     
     

     
     

     
     

     
     

     
     

     
     


    1. 개요

    Improving job performance is very important.

      
     

      
     

      
     

     
      
      
      
      
      
     


     

    2. Linux Operating System


     
     

    2.1. LInux Distributions


     
     
     

    2.2. File and Directory


     
     
     
     

    2.3. Process


     
     
     
     

    2.4. Shell Scripting


     
     


     
     
     
     

    2.5. Commands & Options


     
     


     
     


     
     

    2.6. Linux – Network Commands


     
     
     
     

    2.7. Linux – Service and Daemons


     
     


     
     

    2.8. Linux – misc.

    • editor: vim, nano


     
     
     
     

    3. Docker

    3.1. 도커 소개

    3.2. 실습환경 구축

    • docker desktop 설치

    3.3. 실습1: Hello world 실행

    Bash
    docker container run --rm hello-world
    Bash

    3.4. 실습2: Interactive Shell 실행

    Bash
    docker container run --interactive --tty ubuntu
    Bash

    3.5. 실습3: container run – env

    3.6. docker-compose – down과 stop의 차이

    3.7. 실습: Dockerfile로 디렉터리 볼륨 마운트하기

    • volume의 개념: 컨테이너와 스토리지의 life cycle을 분리
    • VOLUME 인스트럭션을 이용
      • docker volume ls
      • docker volume create volume_name
      • docker container run -v volume_name:$target

    3.8. 실습: bind mount 이용

    Bash
    docker container run --mount type=bind,source=$source,target=$target -d
    Bash

    3.9. 실습: docker를 이용해 user권한의 python webserver를 구동하기

    파일구조는 다음과 같다.

    Bash
    python-webserver/
    ├── Dockerfile
    └── app/
         └── server.py
    Bash

    3.9.1. Dockerfile

    Dockerfile
    # Dockerfile
    FROM python:3.10-slim
    
    # 시스템 사용자 및 그룹 생성
    RUN groupadd -r appuser && useradd -r -g appuser -d /app appuser
    
    # 앱 디렉토리 생성 및 복사
    WORKDIR /app
    COPY app/ /app/
    
    # 권한 부여
    RUN chown -R appuser:appuser /app
    
    # 비루트 사용자로 실행
    USER appuser
    
    # 서버 실행
    CMD ["python", "server.py"]
    Dockerfile


     
     

    3.9.2. server.py

    Python
    # app/server.py
    from http.server import HTTPServer, SimpleHTTPRequestHandler
    
    PORT = 8000
    print(f"Serving on port {PORT}")
    httpd = HTTPServer(("0.0.0.0", PORT), SimpleHTTPRequestHandler)
    httpd.serve_forever()
    Python


     
     

    3.9.3. 빌드 & 실행

    Bash
    # 빌드
    docker build -t python-webserver .
    
    # 실행 (포트 8000 바인딩)
    docker run -p 8000:8000 python-webserver
    Bash

    3.9.4. 개선 – detach

    Bash
    # 빌드
    docker build -t python-webserver .
    
    # 실행 (포트 8000 바인딩)
    docker run --rm --detach -p 8000:8000 python-webserver
    Bash


     


     
     
     
     
     

  • Git

    1. Introduction

    • 원저자: 리누스 토발즈
    • 발표일: 2005년 4월 7일
    • 라이선스: GNU GPL v2
    • 운영체제: 리눅스, 윈도우, OS X
    • 웹사이트: https://git-scm.com/
    • VCS (Version Control System)


     
     
     
     
     
     
     
     

    2. 설치

    • windows
      • Github Desktop (TODO: git cli 위치 찾아보기)


     
     
     
     
     
     
     
     

    3. 최초 설정

    • git config
      • user name
      • user email
      • editor


     
     
     
     
     
     

    4. Git 사용

    • 저장소 만들기
    • 기존 저장소 clone하기


     
     
     
     
     
     


     
     

    5. Git으로 할 수 있는 일들

    • 각 파일을 이전상태로 되돌리기
    • 프로젝트를 이전 상태로 되돌리기
    • 시간에 따른 수정내용을 비교
    • 문제가 발생한 위치를 추적


     
     
     
     
     
     


     
     

    6. Git CLI(Command Line Interface)

    Bash
    git clone http://OOOOO
    git add
    git pull
    git push
    git commit -m "Message"
    Bash


     
     
     
     
     
     


     
     

    7. Git GUI

    • Github Desktop


     
     
     
     
     
     
     
     
     
     

    8. Git File States


     
     


     
     
     
     
     
     

    Git – Branch

    • 코드 변경 이력을 분리해서 관리할 수 있는 기능
    • 기존 코드를 보존하면서 새로운 작업을 시도할 수 있는 독립된 공간
    • 예: main 브랜치는 배포되는 코드를 담고 있고, feature/login 브랜치는 로그인 기능을 개발하는 데 사용


     
     
     
     
     
     
     
     

    GitHub

    • Git을 기반으로 한 온라인 코드 호스팅 플랫폼
    • 주로 소프트웨어 개발자들이 코드를 저장, 관리, 공유하고 협업하기 위해 사용


     
     
     
     
     
     

    Github Desktop을 이용한 실습

    Bash
    git clone https://gitlab.netmaru.net/bitcoder/git-training
    Bash
    • clone
    • pull
    • commit / push
    • conflict / stash
    • .gitignore
       
       


     
     

    References


     
     

  • docker exec script

    기존의 docker exec 실행 과정:

    command line 인터페이스에서 docker exec를 실행하는 다음의 과정은 타이핑이 많고 다소 번거롭게 느껴졌다.

    Bash
    root:/# docker ps          # 컨테이너 목록에서 container_id를 알아냄
    CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS                 PORTS
                                                                                        NAMES
    82c74c62c057   node:18.19-alpine         "docker-entrypoint.s…"   47 hours ago   Up 6 hours             0.0.0.0:9970-9972->9970-9972/tcp, :::9970-9972->9970-9972/tcp                                                               node-18.19-alpine
    de21f0a597ce   alpine/node:latest        "/bin/sh /home/node/…"   2 days ago     Up 2 days              0.0.0.0:9990-9992->9990-9992/tcp, :::9990-9992->9990-9992/tcp                                                               alpine-node-1
    108328fc0449   postgres:latest           "docker-entrypoint.s…"   5 months ago   Up 8 days              5432/tcp, 0.0.0.0:5436->5436/tcp, :::5436->5436/tcp                                                                         postgres
    6c58225e976e   gitlab/gitlab-ce:latest   "/assets/wrapper"        6 months ago   Up 4 weeks (healthy)   0.0.0.0:32769->22/tcp, :::32769->22/tcp, 0.0.0.0:9780->80/tcp, :::9780->80/tcp, 0.0.0.0:32768->443/tcp, :::32768->443/tcp   gitlab
    
    root:/# docker exec -it 6c5822 /bin/bash   # 쉘 실행
    root@gitlab:/# 

    간소화 스크립트 코드 작성:

    그래서 다음과 같이 스크립트를 작성해보았다.

    #!/bin/bash
    
    # script file name: exec.gitlab.sh
    
    if [ $# -ge 3 ]; then
        echo "Usage: $0 [command]"
        exit
    fi
    
    container_name='gitlab'
    command="/bin/bash"
    
    if [ $# -ge 1 ]; then
        command=$1
    fi
    
    dockerid=`docker ps | grep -i $container_name | awk '{ print $1 }'`
    docker exec -it $dockerid $command

    실행 예:

    실행 예는 다음과 같다. 타이핑 수와 실행단계가 줄었다.

    root:/# ./exec.gitlab.sh ls     # ls 실행
    RELEASE  boot  gitlab  lib32   linuxrc  opt   run   sys  var
    assets   dev   home    lib64   media    proc  sbin  tmp
    bin      etc   lib     libx32  mnt      root  srv   usr
    root:/# ./exec.gitlab.sh pwd    # pwd 실행
    /
    root:/# ./exec.gitlab.sh        # 인자가 없다면 쉘 실행
    root:/#

  • Notion에서 Markdown 이용하기

     

    📝 Notion에서 지원하는 Markdown 기능

    Notion은 마크다운(Markdown)의 모든 기능을 지원하지는 않지만, 대부분의 마크다운 기능을 직관적인 방식으로 제공합니다.

    마크다운을 입력하거나 붙여넣기 하면 자동 변환되며, UI 버튼으로도 쉽게 조작할 수 있습니다.

     
     
     


    ✍️ Notion에서 지원하는 주요 Markdown 기능

    기능Markdown 문법Notion 사용법
    제목###### 등###### 입력 후 스페이스
    굵은 글씨**굵게** 또는 __굵게__**굵게** 또는 __굵게__
    기울임*기울임* 또는 _기울임_*기울임* 또는 _기울임_
    코드 (inline)`코드``코드`
    코드 (블록)“`js
    console.log()
    “`
    /code 또는 “` 입력
    리스트 (순서 없는)-*+-*+ 입력 후 스페이스
    리스트 (순서 있는)1. 2. 3.1. 입력 후 스페이스
    체크리스트- [ ] 할 일[] 입력 후 스페이스
    수평선---***___--- 입력


     
     
     


    Notion에서 Markdown 입력하기

    • 제목을 입력하려면 #스페이스를 입력합니다.

    • 굵은 글씨를 입력하려면 ** ** 사이에 글씨를 입력합니다.


     
     


    📦 마크다운 내보내기

    • Notion 페이지 → “내보내기” (Export) → Markdown & CSV 선택 시 .md 형식으로 다운로드 가능
    • 이미지와 내부 링크도 구조적으로 함께 export 됨

     
     
     


  • [Jupyter Extension] 주피터 익스텐션

    소개

    Jupyter Extensions(주피터 확장 프로그램)은 Jupyter Notebook 또는 JupyterLab의 기능을 확장하는 방법입니다.

    이 확장 기능을 활용하면 UI 변경, 코드 자동 완성, 실행 속도 향상, 새로운 도구 추가 등 다양한 기능을 추가할 수 있습니다.

     
     
     


    🌖 Jupyter Extension의 종류

    Jupyter 확장은 크게 세 가지 유형으로 나뉩니다.

    확장 유형설명사용 기술
    Notebook Server Extension백엔드 확장 (새로운 API, 데이터 처리 기능 추가)Python
    Notebook Frontend ExtensionJupyter Notebook UI 확장 (버튼, UI 요소 추가)JavaScript
    JupyterLab ExtensionJupyterLab용 확장 (더 강력한 기능, TypeScript 기반)TypeScript, React

     
     
     


    1️⃣ 🌖 Jupyter Notebook Extensions (클래식 노트북 확장)

    Jupyter Notebook을 확장하는 플러그인은 nbextensions라고도 불립니다. 이 확장 기능은 사용자 인터페이스(UI), 기능 추가, 코드 자동 완성 등을 지원합니다.

     
     
     


    2️⃣ 🌖 Jupyter Server Extension (백엔드 확장)

    Jupyter의 백엔드 기능을 확장하는 **서버 확장(Server Extension)**을 개발할 수 있습니다. 이 방식은 새로운 API를 추가하거나, 외부 서비스와 연결할 때 사용됩니다.

     
     
     


    3️⃣ 🌖 JupyterLab Extension (JupyterLab 확장)

    JupyterLab 확장은 TypeScript 및 React를 활용하여 UI와 기능을 커스터마이징하는 방식입니다. Jupyter Notebook보다 강력한 확장성을 제공하며, 플러그인 방식으로 동작합니다.


  • 주피터(Jupyter)란?, 특징, 사용분야

    🌖 Jupyter란?

    Jupyter는 데이터 과학, 머신러닝, 연구, 교육 등을 위한 대화형 컴퓨팅 환경을 제공하는 오픈 소스 프로젝트입니다.

    Jupyter의 핵심은 Jupyter Notebook이며, Python뿐만 아니라 Julia, R 등 다양한 언어를 지원합니다.

     
     
     


    🔹 특징

    1️⃣ Jupyter Notebook – 대화형 환경

    • 웹 기반 인터페이스에서 코드, 텍스트, 그래프 등을 한곳에서 실행 가능
    • Python, R, Julia 등 다양한 언어 지원
      • 이름 “Jupyter”는 Julia, Python, R에서 유래
    • Markdown 및 LaTeX 지원 → 코드뿐만 아니라 설명 문서까지 포함 가능

    2️⃣ JupyterLab – 업그레이드된 Jupyter 환경

    • Jupyter Notebook의 확장판으로, 여러 개의 노트북, 터미널, 텍스트 파일 등을 한 화면에서 관리 가능
    • 더 강력한 파일 탐색 기능 및 UI 제공

    3️⃣ JupyterHub – 다중 사용자 지원

    • 여러 명이 동시에 Jupyter Notebook을 사용할 수 있도록 지원
    • 팀 단위, 교육 기관, 연구소 등에서 많이 활용

    4️⃣ Jupyter Kernels – 다양한 프로그래밍 언어 지원

    • 기본적으로 Python을 사용하지만 Julia, R, C++, Scala, MATLAB, Go 등 100개 이상의 언어 지원
    • 커널을 추가하여 원하는 언어로 실행 가능

    5️⃣ Jupyter Widgets & Extensions – 확장 가능한 기능

    • 인터랙티브 위젯 → 슬라이더, 버튼 등을 활용하여 동적인 데이터 분석 가능
    • 다양한 nbextensions(확장 프로그램) → 자동 완성, 테마 변경 등 기능 추가 가능

     
     
     


    🔹 사용 분야

    ✅ 데이터 분석 & 시각화 → pandas, matplotlib, seaborn 활용

    ✅ 머신러닝 & 딥러닝 → scikit-learn, TensorFlow, PyTorch 지원

    ✅ 과학 연구 & 시뮬레이션 → 수학, 물리학, 생물학 등 다양한 연구 지원

    ✅ 교육 & 강의 자료 → 학생들이 직접 코드를 실행하면서 학습 가능

     
     
     


    참고자료