리눅스(명령어 위주로 정리)
터미널 : 컴퓨터와 사용자 간에 상호작용할 수 있게 연결하는 장치
Shell : 운영체제와 사용자 간 상호작용을 지원하는 소프트웨어 ex) Bash
Shell Script : 셸에서 동작 가능한 명령어를 모아놓은 파일
#!/bin/bash : bin에 있는 bash를 쉘로 사용하겠다. (#!)
명령어
manual : man
section # : 1(shell cmd), 2(system call), 3(lib function)
ls : list
ls -a : all file
ls - l : including several characteristics(list)
ls -t : from new file to old file sorting
ls -R : recursive
ls -h : readable size file io
cd : change directory
pwd : print working directory
cat : catch file contents
exit : terminate on-process
nano : basic editor of linux
리눅스의 파일 계층 구조 : 모든 파일이 하나의 계층 구조로 관리, 하나의 루트와 하위 파일
파일 종류
일반 파일 : 텍스트, 동영상, 사진 등
디렉터리 : 디렉터리도 파일의 한 종류
심볼릭 링크 파일 : 어떤 파일을 가리킴, 포인터와 유사
블록 디바이스 파일 : 블록 장치(HDD, SDD 등)을 제어하기 위한 파일
문자 디바이스 파일 : 문자 장치(키포드, 마우스, 프린터 등)을 제어하기 위한 파일
파이프 파일 : 프로세스 간 통신에 사용되는 파이프를 나타내는 파일
소켓 파일 : 프로세스 간 통신에 사용되는 소켓을 나타내는 파일
루트 디렉터리와 하위 주요 디렉터리
/bin : 기본 실행 명령어 저장
/dev : 디바이스 파일
/etc : 시스템 설정 파일
/home : 사용자 홈 디렉터리
/lib : 시스템 라이브러리 설치
/mnt : 시스템 디스크 등을 임시 마운트
/proc : procfs 마운트
/root : root 사용자 홈 디렉터리
/sbin : 시스템 관리자용 명령어 위치
/sys : sysfs 마운트
/tmp : 시스템 임시 파일 위치
/usr : 시스템 소프트웨어 설치
mkdir : make dir
rmdir : del dir
cp org cpy : copy
cp -f : 덮어쓰기 가능
cp -r : recursive
mv org (dir or file) : 디렉터리 이동 또는 파일 덮어쓰기
mv -f : 덮어쓰기 시 묻지 않고 시행
mv -i : 덮어쓰기 시 실행 여부를 물어봄
rm : remove file
rm -d : remove directory
rm -f : force
rm -i : inform
rm -r : recursive
소프트 링크와 하드 링크
아이노드 : 파일에 대한 메타 정보 저장 단위(경로에 대한 정보는 없음)
덴트리 : 파일 계층 구조를 유지하는 데 사용(경로에 대한 정보 포함)
소프트 링크 : 일종의 바로가기, 포인터와 유사한 개념, 별도의 파일
하드 링크 : alias와 유사, 같은 파일을 지지칭
ln : linke
ln -s : s-link
ln : h-link
stat : 파일 상세 정보 표기
사용자 권한(일반, 관리)
su : switch user
sudo : super user do
runuser : switch to user
run -l : 다른 사용자 셸
run -g : 기본 그룹 지정
run -s : 기본 셸 지정
run -P : 프로세스 ID 지정
run -f : 환경변수 지정
/etc/passwd에 user info 저장 : usrname:x:usrID:usrGID:explain:HOMEDIR:SHELL
사용자 그룹 : GNAME:x:GID:USR LIST
adduser : add user
--home : 홈 디렉터리 지정
--shell : login shell 지정
--ingroup : 지정 그룹에 저장
deluser : delete user
--remove-home : 홈 디렉터리 삭제
-- remove-all-files : 홈 디렉터리 포함 사용자 파일 모두 삭제
addgroup : add group
delgroup : delete group
whoami : print current user
passwd : password
passwd -d : 비번 제거
passwd -e : 비번 만료
passwd -l : lock
passwd -u : unlock
passwd -x : 최대 만료일 설정
passwd -n : 최소 만료일 설정
passwd -w : 만료일 전 경고일 설정
파일 소유권
chown : 소유권 변경
-R : recursive
-v : verbose
-c : 변경 정보만 출력
chmod : 권한 변경
-R : recursive
-v : verbose
-c : 변경 정보만 출력
w : 4, r : 2, x : 1 => 8진수 체계
---...--- : 사용자-그룹-나머지
의미 표기법(a+r : 모든 유저에 읽기 기능 추가)
u : user
g : group
o : other
a : all
+ : add
- : del
= : equal
r : read
w : write
x : execute
프로세스 관리
프로세스 : 메모리에서 실행중인 프로그램
부모 프로세스와 자식 프로세스 : init 프로세스(최초의 프로세스-모든 프로세스의 부모 프로세스, PID 1) -> 부모 -> 자식
종료 시점을 알 수 있는 방법 : 부모 프로세스의 무한 대기, 주기적인 확인, SIGHLD 시글널의 수신
좀비 프로세스 : 프로세스가 종료되었지만 종료 처리가 되지 않아서 메모리 상에 존재할 때
고아 프로세스 : 부모 프로세스가 자식 프로세스보다 먼저 종료된 경우
ps : process state
-e : entire
-f : good form
-u : user process
-p : PID 프로세스
-o : 원하는 필드만 출력
--sort : 주어진 필드를 기준으로 정렬
--forest : 트리구조
kill : process 종료, 이름 또는 프로세스 이름
killall : 여러 프로세스 종료
프로세스의 동작
프로세스 스케줄링, 스케줄링 알고리즘(공평성, 우선순위, 효율성, 응답 시간), 컨텍스트 스위칭(PCB로 저장 후 전환)
프로세스 상태(실행/실행 대기, 중단 상태, 종료 상태, 수면 상태)
프로세스와 스레드 : 프로세스는 IPC를 이용하여, 스레드는 메모리 영역을 공유하여 통신한다. 스레드는 프로세스에 속한다.
표준 스트림 : 표준 입력(0), 포준 출력(1), 표준 에러(2)
foreground와 background : 사용자가 보이는 곳과 안 보이는 곳, 상호작용 가능 여부
ping : ICMP echo 요청 패킷을 대상에게 송신
-c : count
-i : interval
-s : packet size
-q : quite mode
fg : to foreground
bg : to background
IPC
파이프 : 두 프로세서 간 데이터를 전송할 때 사용, 단방향
메시지큐 : 정해진 큐에 메시지를 넣고 빼는 방식, 작은 데이터
소켓 : 네트워크로 연결된 다른 시스템에서 작동하는 프로세스오의 통신에서 사용, TCP/UDP
공유 메모리 : 데이터 자체를 공유, 동기화 필요(동시 참조 문제 등), 세마포어
시그널 송수신
시그널을 이용하여 프로세스간 통신이 이루어지기도 한다.
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
kill 명령어로 signal을 전잘하는 것이 가능하다.
-l : 목록
-번호
-이름
-s 시그널이름
killall도 유사하게 사용
9장, 10장, 11장, 12장 Bash(***)
VAR_NAME = value <- string type
$VAR_NAME, ${VAR_NAME}, "$VAR_NAME"
let "formula" : string 처리가 아닌 수처리
if 조건; then
command
elif 조건; then
command
else
command
fi
조건 : [표현식], 이중 괄호 표현은 다양하게 지원한다.
-, !=, <>, -n, -z, -eq, -ne, -le, -lt, -gt, -ge
AND(-a), OR(-o), NOT(!)
case 표현식 in
패턴1)
명령;;
for 변수 in 목록
do
명령
done
for ((초기;조건;증감))
do
명령
done
while 조건
do
명령
done
while ((조건))
do
명령
done
until 조건
do
명령
done
until ((조건))
do
명령
done
function function_name(){
}
function_name(){
}
$1, $2, $3 ~ $255 <= 매개변수
$# : 매개변수 개수
$0 : 파일이름
$*, $@ : 모든 위치 매개변수를 하나의 문자열로 인식, 위치 매개 변수를 각각 인식
$? : 최근 함수 반환값 또는 종료 코드 등
$$ : 현재 스크립트의 PID
export : 다른 셸에서도 사용할 수 있도록 공유
환경변수
quote : single(string), double(expanded)
systemctl : daemon 관련
grep
find
stat
wc
df
du
tar
read
tr
make 사용법
CMake 사용법
Git 사용법
Docker 사용법 - 범위 작음, pdf 참고
임베디드 엔지니어 교과서 참고할 것
'VEDA 복습' 카테고리의 다른 글
VEDA 35일차 - 임베디드 리눅스 프로그래밍 (1) | 2025.05.02 |
---|---|
VEDA 34일차 - 임베디드 리눅스 프로그래밍(라즈베리파이) (0) | 2025.05.01 |
VEDA 33일차 - GDB, CMake, Git, Docker (1) | 2025.04.30 |
VEDA 32일차 - 라이브러리 제작+GDB (0) | 2025.04.29 |
VEDA 31일차 - Makefile (2) | 2025.04.28 |