리눅스 아키텍처와 명령어 (Ft. file system)

    운영체제 (Operating System)이란?

    • 시스템
      • HW + SW (운영체제 + 모든 어플리케이션)
    • 운영체제
      • 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위해 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어
      • 입출력과 메모리 할당과 같은 하드웨어 기능의 경우 운영체제는 응용 프로그램과 컴퓨터 하드웨어 사이의 중재 역할을 햄
    • 운영체제의 구성요소
      • Kernal
      • 사용자 인터페이스 및 시스템 필수 프로그램
      • 기본적인 파일 및 시스템 유틸리티
      • 응용 프로그램 실행을 위한 라이브러리
      • 시스템 설정 파일들
    • OS 선택
      • Ubuntu: Embedded System 에 좋음, 무료
      • CentOS: 무료
      • RHEL(Red Hat Enterprise Linux): 유료

    기본 환경 설정

    가상 머신 설정 (Ubuntu 18.04 / Virtual Box VM 64bits)

     

    설치 환경 확인

     

    공유폴더 설정 및 확인

    경로: /media/sh_share/




    파일시스템

    출처: https://coding-factory.tistory.com/499

    Directory 디스크(비휘발) or RAM(휘발) 설명
    /   root directory 라고 함 (/root 와 다르므로 혼동 X)
    cd / 로 이동 

    UI 기준 Other Locations/Computer   >>> 마음대로 폴더를 만들 수 없음!! (Window 와 다름)
    bin   모든 사용자가 사용하는 필수 명령어
    명령어가 shell (실행파일) 저장되어 있는 장소

    Ex: ls, pwd, cat 등등
    sbin   Superuser 만 사용할 수 있는 명령어

    Ex: ifconfig (조회는 모두 가능, 설정은 super만 가능)
    boot   OS 부팅에 필요한 모든 파일
    etc   시스템의 설정이 저장되어 있는 곳

    Ex: Network 정보, Booting 시 자동실행 프로그램 등
    home   일반 사용자 home directory 생성되는 곳
    계정 생성 시 /home 의 하위에 계정과 같은 이름의 directory 가 생성됨

    Windows 기준: "C:\Users\user" 와 동일한 위치
    root   Super 사용자의 home directory
    lib   리눅스 상에서 자주 사용되는 라이브러리들이 있는 곳
    (프로그램 동작에 필수적인 파일이 있음)
    usr   Unix Systme Resources
    프로그램의 실행, 라이브러리, 헤더 파일 등의 파일이 설치되는 곳(읽기전용, 어플 수준의 프로그램이 존재)

    Ex: include <stdio.h> 에서 stdio.h 등
    opt   usr 의 보조 역할

    mnt   Mount directory(point)

    외부 저장매체가 마운트 되는 곳
    media   mount directory(point)

    Virtual Box: Window 와의 공유 폴더가 위치한 곳
    tmp   메모리상 저장(하드X)되는 곳 - real file system 이 아님!!!
    필요한 용도로 사용해도 되지만 휘발성이므로 주의하자
    var   파일 크기를 예측할 수 없는 파일 저장
    용량 부족 시 정리해주는 directory

    Ex: 시스템 log, mail 등등
    dev RAM (pseudo file system) 장치파일들이 저장되어 있는 장소
    리눅스는 장치를 파일처럼 취급해서 존재함
    디바이스 파일로 하드 디스크에 저장되지 않음

    Ex: terminal 를 사용시 가상 terminal 을 띄우고 장치에 connet 시킨다 (명령어 'tty' 로 확인 가능)
    proc RAM (pseudo file system) linux kernal 에서 proc 에 파일을 만듦
    run RAM (pseudo file system) linux 의 ipc mechanizm 을 저장
    sys RAM (pseudo file system) linux kernal 에서 sys 에 파일을 만듦
    kernal 이 정보를 알려주고 디바이스 드라이버관련
    tmp RAM (pseudo file system)  

     

    Linux File 종류

    • 일반파일
    • directory 파일
    • 특수 파일
      •  Link File
        • Hard
          • 삭제 시 링크 목적지도 삭제 될 수 있음
        • Symbolic
          • 일반적으로 사용 
          • 생성: 'ln -s'
          • 삭제시 링크 목적지에는 영향 없음
        • 공유폴더에서 작업하지 말자
      • Pipe 파일
        • 출력 내용을 저장할 때 사용하는 파일
        • Write, Read 2개의 point 가 있음
          • 중간 process 로 이해
          • write 전에 read 해도 문제 없음 (단, 빈 내용이 출력)
          • 여러 곳에서 동시에 접근해도 됨
          • Ex: "pf -ef | <name> more"
        • 생성: mkfifo <name> 
        • 공유 폴더에서 작업하지 말자
      • Device File
        • 공유폴더에서 작업하지 말자

     

    linux 에서 설정한 공유 폴더 접근하기 (/home/linux/ 기준)

    cd /media/sh_share

    절대경로와 상대경로란?

    • 절대 경로(absolute path): 최상위 디렉토리(root) 를 기준으로 하는 경로 ( cd /bin )
    • 상대 경로(relative path): 내가 현재 있는 디렉토리를 기준으로 하는 경로 ( cd ../home/linux )

    Linux 기본 명령어

    스크린샷 명령어 옵션








    ls: 목록 보기 (change directorycd )

       
    *주의 - .c 파일이 왜 실행파일로 표현되나*
       가상 머신의 공유폴더는 windows, linux 모두 인식해야 함
       이 때,  windows 와 linux 의 아키텍쳐가 다름!!
       따라서 작업은 linux home directory 에서 할 것!!
       (공유폴더에서 작업하면 꼬임, 리눅스 특수파일 등은 생성불가)


    b : block
    c : character
    d : directory
    l : link
    p: pipe
    ls -a: 숨긴 directory 포함한 목록 보기
    ls -l: 상세 목록까지 검색 (수정시간을 표현)
    장치 파일에서 실행하면 major number(136)와 minor number (노란색 0)를  확인 할 수 있다
    ls -alSh: 파일 크기 표현 + 크기순으로 정렬
        -h: 파일 크기를 G, M 단위 등으로 보기 편하게 출력
    ls -l | more : 한 페이지씩 출력 (enter: 한줄 이동, space bar: 페이지 이동)
    ls -l | less : 화살표, page up/down 키 활용 가능!!
    ls -F: 파일 종류포함 표현
        /: 폴더
        *: 실행 파일
       @: 링크 파일
       없음: 텍스트 파일
    ls -R <name>: 하위 파일까지 모두 출력

    ls > <name>: ls 결과는 name 에 저장하라(덮어쓰기)
    ls >> <name>: 붙여넣기 (내용 추가)


     


    cd <Directory>: <Directory> 로 이동

    pwd : 현재 경로 확인 (present working directory)
              ~ 은 기본 directory 를 의미

    '&&' or ';'  : 명령어를 순차적으로 실행
    cd .. : 상위 Directory 이동
    cd / : 최상위 폴더(root)로 이동
    cd ~ : 기본 directory로 이동
    cd - : 이전 directory 로 이동

    ifconfig: 네트워크 정보 확인

    inet 주소: tera term 등 위부에서 접속 불가
    (window 가 host 인 상태에서 그 위에 linux 를 guest 로 올린 상태이기 때문)
    >>> Virtual Box 의 환경설정에서 '어탭터에 브릿지'로 수정한 후 ifconfig 를 통해 ip 주소를 수정하고 연결하면 된다.


     
    mkdir <name>: directory 생성  
    touch <name>: 비어있는 파일 생성 * 있는 파일을 touch 하면  modify 시간이 수정됨
    gedit <name>: 파일 수정 / terminal 사용 불가
    gedit <name>&: 파일 수정 / terminal 사용 가능
     


    ps: 현재 terminal 에서 실행되고 있는 process

    kill -9 <PID>: 해당 Process 강제 종료
    ps -e: 실행되고 있는 모든 process 출력
    ps -f: 상세 정보포함 출력
             UID: User ID
             PID: Process ID
             PPID: Parent PID (process 를 실행한 parent)
             TTY: 실행하고 있는 terminal
    ps -fl: 보다 상세
             S : status (sleeping, running)



    빌드하기 (gcc)
    1. 공유 폴더에 .c 파일 하나 생성
    2. ubuntu 에서 공유 폴더에 접근하고
         'gcc <name.c>' 를 실행해서 빌드 >> .out 파일 생성
    3. gcc -o <hello.exe> <hello.c>: 특정 이름의 빌드파일 생성
    (리눅스는 확장자가 크게 중요치는 않다)


    실행하기
    방법1: /media/sf_share/ch1.Linux/a.out
    방법2: ./a.out


     
    cp <original> <copy> : file 복사하기

    cp <origin> </directory/.> : origin 과 같은 이름으로 복사하기

    cp <origin1> <origin2> <origin3> <copy>: 모두 copy 로 복사

    * 주의
    옵션없이 복사하면 같은 이름은 덮어쓰기됨
    cp -r <original> <copy>: directory 전체 복사

    cp -i <original> <copy>: 같은 이름이 있으면 확인하는 옵션
      mv <> <>: 이동 or 이름 바꾸기

    - 같은 directory 에서는 이름바꾸기
    - 다른 directory 에서는 이동
     
    mkdir <name>: directory 생성 mkdir -p <1/2/3/4>: 하위 directory 까지 한번에 생성

    오류를 줄일 수 있는 Tip
    삭제
    rm <name>: file 삭제
    rmdir <name>: directory 삭제
    rm -r <name>: file 이 있는 directory 삭제
    완전 삭제 (휴지통 아님)

    rm -i <name>: 삭제 전 확인하는 옵션

    man (section num) <name>: manual
       (section)
          1 - User Commands
          3 - Programer's Manual


    Ex: ls, printf, getchar
     
    exit: 종료 명령어  
    cat <name>: 내용 출력  
    less <name>: 출력
    more <name>: 출력
    head <name>: 첫 10줄 출력
    tail <name>: 마지막 10줄 출력
    head -<#> <name> : # 줄만큼 첫 data 출력
    tail -<#> <name>: # 줄만큼 마지막 data 출력
    file <name>: file 형식 출력  



    sudo addsuser <user>: user 추가  



    sudo deluser --remove-home <name>: 계정삭제  

    su <user>: user 전환

    옵션 없이 쓰면 기존 user 의 directory 에서 시작

    exit 로 기본 계정으로 나올 수 있음
    su - <user>: 전환할 user 의 directory 로 시작
    sudo -i : root 계정 진입

    이후 passwd 로 암호 설정 할 수도 있음
     
    env: 환경 변수 출력 (전역변수) 일반 변수를 선언하면 지역변수라 env 에서 검색되지 않음

    >> export <변수>: 전연변수 선언
      echo <??>: ?? 를 출력 echo $<?>: 변수의 '값' 출력

     

    Permission 

    개념

    • 특수 권한
      • SetUID: 실행파일을 순간적으로 신분 상승 (계정 X)
      • SetGIP: Group 권한을 순간적으로 신분 상승 
      • Stiky bit: 파일 소유자 외에는 파일 수정을 못하게 하는 설정

     

    출처:https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=geonil87&logNo=221022779618

    Permission Binary Octal 읽기 쓰기 실행
    --- 000 0 x x x
    --x 001 1 x x o
    -w- 010 2 x o x
    -wx 011 3 x o o
    r-- 100 4 o x x
    r-x 101 5 o x o
    rw- 110 6 o o x
    rwx 111 7 o o o

     

    명령어

      명령어 옵션 (Symbolic)

    chmod <대상><허가/제거><권한종류> <name> u : user (사용자)
    g : group (사용자 포함된 그룹)
    o : other (기타)
    a : 모두

    + : 권한 허가
    - : 권한 제거
    = 옵션 이외에는 취소 (절대옵션)

    r : read
    w: write
    x: execute
    chmod <octal> <name>: octal 을 조합해서 한번에 권한 허가/제거  

     


    Link 파일 만들기 (Windows 의 바로가기와 유사)


    * 주의 - 공유폴더에서는 만들 수 없음*

    링크 파일 생성

    ln -s <링크 목적지> <링크 시작>

            '-s': symbolic 파일


    Tips

    - Terminal

    기본 Directory 에서 terminal 실행하기
    >> Terminal 아이콘에서 'New Terminal' 클릭
    현재 위치한 Directory 에서 새로운 terminal 열기
    >> Terminal 창에서 'New Terminal'

    * Tab 생성도 가능
    * ctrl+d Tab 종료 단축키
    terminal clear

    - Window 와 Virtual Box 의 클립보드 공유 (복붙)

    - USB 연결은?
       Extential package 에서만 제공
       WSL 을 사용하면 가능 (MS 제공)


    - alias origin = new: 명령어의 단축키 생성(별명 만들기)

    Ex: rm 대신 rm -i 로 실수 방지 (단, terminal 에서 설정하면 그 terminal 한정 옵션!!)

    System 에 저장하려면?
    home directory 의 "gedit .bashrc"로 파일에 추가, 저장해주고 'source .bashrc'실행시켜주면 된다.
    (삭제도 마찬가지)

     


    참고

     

    KLDPWiki: 대문

    이곳 KLDP 위키에 처음 오셨고 좀 더 자세한 KLDPWiki의 사용법을 알고싶으시나요?

    doc.kldp.org

     

    '개발자라면? > Linux' 카테고리의 다른 글

    Make 빌드 시스템 2  (0) 2022.09.02
    Make 빌드 시스템 1  (0) 2022.09.02
    라이브러리의 동작과 제작  (0) 2022.09.02
    GNU  (0) 2022.09.02
    쉘 & 쉘스크립트  (0) 2022.09.01

    댓글

    Designed by JB FACTORY