사용자와 컴퓨터 하드웨어 또는 운영체제간의 인터페이스
- 사용자의 명령을 해석해서, 커널에 명령을 요청해주는 역할
- 관련된 시스템콜을 사용해서 프로그래밍이 작성되어 있다
UNIX는 다중 사용자를 지원하는 시스템
sudo명령어
whoami: 로그인한 사용자 ID 알려줌
passwd: 로그인한 사용자 ID의 암호 변경
pwd: 현재 디렉토리가 위치가 나옴
아이디를 하나 만들면 home 디렉토리 안에 만들어진다.
useradd: 사용자 기본 설정 자동으로 하지 않음
adduser: 사용자 기본 설정을 자동으로 수행함
adduser kim:
일반 사용자가 시스템에 새로운 사용자의 권한을 준다?
다중 사용자 시스템에서 최고 권한자는 root다. 그래서 root라는 사용자로 해야 하는데,
dave2는 그냥 사용자 이름
sudo 명령어: root 권한으로 (잠깐 빌리 수 있는) 실행하기
- root계정으로 로그인하지 않은 상태에서 root권한이 필요한 명령을 실행할 수 있도록 하는 프로그램
- sudo를 쓰려면 해당 아이디가 sudo를 쓸 수 있도록 미리 설정이 되어야 한다.
su: 사용자 변경
- 보통 su- 와 함께 사용
- su root: 현재 사용자의 환경설정 기반, root로 변경
- su-root: 변경되는 사용자의 환경설정을 기반으로, root로 전환
.bashrc와 .profile 중점적으로 사용되는 환경설정 파일이다.
su root경우, 현재 사용자의 설정파일을 아이디만 바뀌는 셈이고
su - root는 해당 사용자의 홈 디렉토리로 가서 해당 사용자의 .bashrc .profile가서 설정을 재설정한다.
/etc/sudoers 설정 파일에서 다음과 같이 설정을 변경할 수 있음.
ㄴ이 설정 파일 안에 권한을 주려는 아이디를 넣어야함
- visudo가 설치되어 있다면, 해당 명령을 통해 설정 파일이 오픈되어 바로 수정 가능
유저 권한 설정
w! 저장
tab을 누르면 해당 명령어 리스트가 나옴
예) cd s (tab)하면
shift+v, y 복사
p 붙여넣기
중간정리
- 윈도우 같은 경우 파일을 삭제하면 휴지통에 들어가 듯, 그리고 휴지통에 가서 한 번 더 삭제해야 된다.
- 리눅스에서는 휴지통 같은 인터페이스가 default로 제공되지 않는다. 그래서 설정을 변경/삭제할 경우 기존 내용이 사라져서 원상복구가 어렵다. 그래서 통상적으론 root라는 최고 관리자보단 아이디를 하나 만들어서 특정 아이디만 sudo명렁 또는 권한을 사용할 수 있도록 한다. 이런 방식으로 리눅스를 많이 사용한다.
- 윈도우처럼 어떤 특정 파일만 관리자 권한으로 실행하는 것과 같다.
파일 관련 명령어
cd: 디렉토리 이동
cd ~ 본인 아이디의 홈 디렉토리로 이동
cd - 이동하기 전의 디렉토리로 이동
ls: 파일 목록 출력
. 현재 디렉토리
.. 상위 디렉토리 (상위 폴더)
ls와 와일드 카드
*는 임의 문자열
?는 문자 하나
참고: man 명령어 - 사용법 알아보기
manual이라는 의미. man rm을 입력력하면 메뉴얼이 나옴.
예) man ls
ls와 파일 권한
파일마다 소유자, 소유자 그룹, 모든 사용자에 대해
예) 1학년 1반의(그룹), 김철수(소유자)
- 각각 읽고, 쓰고, 실행하는 권한 설정을 할 수 있고
- 소유자 접근 권한 정보는 inode에 저장되어 있다
chmod: 파일 권한 변경
기호 문자를 사용하는 방법
예) chmod g+rx test.c
그룹 사용자에게 test.c라는 파일에 관해서 기존 권한에서 읽고(r) 쓰는(w) 권한을 추가해라
숫자를 사용하는 방법
예)
중요한 파일이니 mysecurity.pem에 대한 권한을 제한해 놓는다는 뜻.
- 주로 사용하는 옵션:
chmod -R 777 directory
예) chmod 777 test.c
디렉토리 안에 있는 모든 하위 파일들을 한번에 권한을 준다.
chown: 소유자 변경
cat: 파일 보기
-
해당 파일에 대한 내용 보고 싶을 때
-
head/tail: head는 파일 시작부분 10줄, tail은 끝 부분 10줄을 보여줌
- head mysql.cnf
- tail mysql.cnf
-
more: 한 화면이 넘어가기 전까지 파일 내용 출력됨
- more mysql.cnf
엔터치면 다음 내용 보여줌
-
rm: 파일 및 폴더 삭제 (remove의 약자)
- 주로 사용하는 명령어 형태: rm -rf 디렉토리명
- r옵션: 하위 디렉토리를 포함한 모든 파일 삭제
- f옵션: 강제로 팡리이나 디렉토리 삭제
기본적으로 리눅스에는 휴지통이 없기에 파일 지울 때 조심해야함.
리눅스 리다이렉션(redirection)과 파이프(pipe)
Standard Stream (표준 입출력)
리다이렉션 (redirection)
- 표준 스트림 흐름을 바꿔줄 수 있다
- > , < 을 사용함
- 주로 명령어 표준 출력을 화면이 아닌 파일에 쓸 때
예) 꺽쇠 방향으로..
(1) ls > files.txt (꺽쇠가 가능하게 해줌)
- ls로 출력되는 표준 출력 스트림의 방향을 files.txt로 바꿔줌
(files.txt에 ls로 출력되는 결과가 저장됨)
(2) head < files.txt
- files.txt의 파일 내용이 head라는 파일의 처음부터 10라인까지 출력해주는 명령으로 넣어짐
(files.txt의 앞 10라인이 출력됨)
(3) head < files.txt > files2.txt
- files.txt의 파일 내용이 head로 들어가서, files.txt의 앞 10라인을 출력
- head의 출력 스트림은 다시 files2.txt로 들어감
- head는 files.txt내용을 출력하지 않고, 해당 출력 내용이 다시 files2.txt에 저장됨
(결과적으로 files.txt의 앞 10라인이 files2.txt에 저장됨)
(4) 기존 파일에 추가는 >> 또는 << 사용
- ls >> files.txt
- 기존에 있는 files.txt 파일 끝에, ls 출력 결과를 추가해줌 (덮어쓰기가 아닌 추가)
파이프 (pipe)
두 프로세스 사이에서 한 프로세스의 출력 스트림을 또 다른 프로세스의 입력 스트림으로 사용할 때 사용됨
예)
(1) ls | grep file
- ls 명령을 통한 출력 내용이 grep 명령의 입력 스트림으로 들어감
- grep files는 grep명령의 입력 스트림을 검색해서 file이라는 문구가 들어 있는 입력 내용만 출력해줌
- 따라서, ls명령으로 해당 디렉토리 또는 파일명에 file이라는 문구가 있는지 출력해줌
참고: grep 명령어
grep: 검색 명령
- grep [-option] [pattern] [file or directory name]
예) issue 관련된 건 0개라는 결과가 나옴.
사용 예)
- grep python files.txt 👉 files.txt라는 파일에서 python라는 문구가 들어간 모든 행을 출력
- grep -n python files.txt 👉 files.txt라는 파일에서 python라는 문구가 들어간 모든 행을 라인까지 출력
- grep -r python foldername 👉 foldername라는 폴더내의 하위 폴더를 포함한 모든 파일 중 python라는 문구가 들어간 행을 출력
- grep -i python files.txt 👉 files.txt라는 파일에서 python라는 문구를 대,소문자 구분 없이 검색해서 출력
- grep -E "go|java|python"files.txt 👉 files.txt라는 파일에서 go, java, 또는 python이 있는 모든 행을 출력
프로세스 vs 바이너리
- 코드 이미지 도는 바이너리: 실행파일
ㄴ저장매체에 파일이 있고 메모리에 읽혀서 CPU에서 실행함
- 실행 중인 프로그램: 프로세스
- 가상 메모리 및 물리 메모리 정보 (상태 정보)
ㄴ모든 실행파일이 물리메모리가 감당 못함, 그래서 가상메모리 사용. 그 중에 일부 필요한 것만 물리메모리에 올려서 실행함.
- 시스템 리소스 관련 정보
- 스케쥴링 단위
- 리눅스는 기본적으로 다양한 프로세스가 실행되는 환경임.
- 유닉스 철학: 여러 프로그램이 서로 유기적으로 각자의 일을 수행하면서 전체 시스템이 동작하도록 하는 모델
foreground process / background process
- foreground process: 쉘(shell)에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스
(그런데 요즘엔 컴퓨터가 빨라서 왠만한 명령어는 바로됨)
- background process: 사용자 입력과 상관없이 실행되는 프로세스
(뒤에서 프로세스를 실행 시키는 방법 - alt+tab같은 느낌)
- 쉘(shell)에서 해당 프로세스 실행 시, 맨 뒤에 & 를 붙여줌
- 사용 예)
- [1]은 작업 번호 (job number), 57은 pid(process ID)를 나타냄
foreground process 제어하기
단축키!
- [CTRL] + z : foreground프로세스를 실행 중지 상태(suspend모드)로 변경
- 맨 마지막 [CTRL] + z로 중지된 프로세스는 bg 명령으로 background프로세스로 실행될 수 있음 (예: bg 3 번호로 재실행 가능)
- jobs 명령어 : 백그라운드 진행 또는 중지된 상태로 있는 프로세스를 보여줌
- [CTRL] + c : 프로세스 작업 취소 (해당 프로세스는 완전히 종료된다)
운영체제 소프트웨어 인터럽트가 해당 프로세스에 보내짐 - 그래서 프로세스 제어 가능함
프로세스 상태 확인 -ps 명령어
-
사용법: ps [option(s)] 내가 실행한 프로세스가 뜸
-
option(s)
-
데몬 프로세스(daemon proces): daemon은 악마를 의미함. 사용자 모르게 시스템 관리를 위해 실행되는 프로세스로 보통 시스템이 부팅될 때 자동 실행 (예: ftpd, inetd 등)
-
주요 ps출력 정보 항목
참고: ps명령어 사이트
참고 사이트1
참고 사이트2
프로세스 중지시키기
- kill 명령어
- 사용법
a. kill %작업 번호(job number)
b. kill 프로세스 ID(pid)
c. 작업 강제 종료 옵션 -9
예)
주로 사용하는 프로세스 명령
- ps aux | grep 프로세스명: 프로세스가 실행 중인지를 확인하고, 관련 프로세스에 대한 정보 출력
- kill -9 프로세스 ID(pid): 해당 프로세스를 강제로 죽임
- 명령 &: 터미널에서 다른 작업을 해야하거나, 프로세스 실행에 오랜 시간이 걸릴 경우 background로 실행
- [CTRL] + z: 프로세스 중지
- [CTRL] + c: 프로세스 종료(실행 취소)
가상 파일 시스템
- 파일 네임스페이스
- 전역 네임프세이스 사용
- /media/floofy/kim.jpg
- 예: cat tty
ㄴtty ← 가상파일 시스템 인터페이스 (가상 터미널 환경/디바이스에 연결되어 있음) ← 키보드로 input
리눅스 파일 시스템 (ext file system)과 inode
리눅스는 ext 알고리즘으로 구현한 파일 시스템을 사용
예) 윈도우는 fat32
참고: 리눅스 파일 구조
하드 링크와 소프트 링크
- cp명령: 파일 복사 (copy의 약자)
- 1MB사이즈를 가지고 있는 A파일을 B파일로 복사
- cp A B → A와 B는 각각 불리적으로 10MB파일로 저장
- rm명령: 파일 삭제 (remove)
하드 링크와 inode
소프트 링크와 inode
ㄴredirected path 원본 파일에 대한 정보 가지고 있음
- 소프트(심볼릭) 링크: ln -s A B
- Windows OS의 바로가기와 동일 (본 파일 삭제되면 이용 못함)
- ls -al하면, 소프트 링크 확인 가능
- rm A로 A를 삭제하면? B는 해당 파일 접근 불가
- 원본 파일과 소프트 링크된 파일은 inode값이 다름
하드 링크/ 소프트 링크 둘다 어느 하나 파일을 수정하면, 각 파일이름으로 동일한 내용 접근 가능
특수 파일
- 디바이스
- 블록 디바이스(Block Device) - 32byte/64byte(블록)
:HDD, CD/DVD와 같이 블록 또는 섹터 등 정해진 단위로 데이터 전송, IO송수신 속도가 높음
- 캐릭터 디바이스(Character Device)
:키보드, 마우스등 byte 단위 데이터 전송, IO송수진 속도가 낮음
- cd /dev, cat tty