리눅스 아키텍처와 명령어 (Ft. file system)
- 개발자라면?/Linux
- 2022. 9. 1.
운영체제 (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/
파일시스템
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'
- 삭제시 링크 목적지에는 영향 없음
- 공유폴더에서 작업하지 말자
- Hard
- Pipe 파일
- 출력 내용을 저장할 때 사용하는 파일
- Write, Read 2개의 point 가 있음
- 중간 process 로 이해
- write 전에 read 해도 문제 없음 (단, 빈 내용이 출력)
- 여러 곳에서 동시에 접근해도 됨
- Ex: "pf -ef | <name> more"
- 생성: mkfifo <name>
- 공유 폴더에서 작업하지 말자
- Device File
- 공유폴더에서 작업하지 말자
- Link 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: 파일 소유자 외에는 파일 수정을 못하게 하는 설정
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'실행시켜주면 된다.
(삭제도 마찬가지)
참고
'개발자라면? > 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 |