Linux Basics 개념
Category: System Programming
Tags: linux
LINUX/UNIX
리눅스/유닉스는 multiuser based OS로 많은 유저들이 동시에 접근 가능한 운영체제이다.
둘은 매우 비슷한 운영체제이지만, 그 중에서 리눅스는 유닉스의 장점을 포함하는 운영체제로, 유닉스를 개인 컴퓨터에서 사용할 수 있도록 하기 위해 개발되었다. 또한 리눅스는 다양한 배포판과 오픈소스가 있고, 무료로 이용이 가능하기 때문에 유닉스보다 더 큰 시장 점유율을 가지고 있다.
- 장점 : multi-user 환경, 멀티태스킹, 확장성, 유연성 등
- UNIX variants : MacOS, iOS, Darwin 등
UNIX Architecture
운영체제(OS) : 컴퓨터 하드웨어를 관리하고 프로그램을 실행하는 환경을 제공해주는 소프트웨어로, kernel과 컴퓨터에 다양한 기능들을 제공하는 소프트웨어를 모두 포함하는 개념
UNIX 운영체제 구조
- kernel : 운영체제의 가장 핵심적인 부분으로, 하드웨어 시스템을 통제하는 역할
- shell : 커널과 사용자를 연결해주는 인터페이스로, 사용자의 명령어를 해석해서 커널에 전달
- applications : 여러 가지 응용 프로그램 및 프로그래밍 언어를 지원
Logging in to UNIX system
UNIX는 로그인할 때 username, password 입력 받는데, 시스템은 사용자들에 대한 정보를 보관하는 /etc/passwd(패스워드) 파일을 열어서 해당 사용자 이름이 있는지 확인한다. 이를 통해 사용자들의 접근을 제한하고 보안을 유지한다.
ex. 학교 서버의 /etc/passwd 파일
username:password:userid:groupid::homedirectory:shellprogram
-
User ID : 로그인한 유저를 나타내는 아이디(숫자)로, 시스템 관리자에 의해 등록된다. uid가 0인 경우, superuser(root 권한자)를 나타낸다.
-
Group ID : 로그인한 유저가 속한 그룹을 나타내는 아이디(숫자)로, 특정 파일 공유 및 접근이 가능하다.
-> 유저와 그룹 아이디는 특정 파일에 대한 접근 권한을 확인하는데 사용된다 !
Pipes
프로세스가 나열되는 것, 어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 들어가는 것을 말한다. 일종의 interprocess communication의 한 방법으로, 파이프를 통해 프로그램을 연속으로 수행 가능하다.
ex. reverse.c : 파이프로 문자열을 거꾸로 출력하는 코드
Redirection
프로세스 스트림의 방향을 지정해주는 역할
- cmd > output : 명령어를 output으로 저장
- cmd < input : 파일로 부터 입력 받기
- cmd > > append : 명령어를 output 마지막에 추가
Files and Directories
-
루트 디렉토리를 중심으로 tree 구조로 구성
-
모든 장치 및 디렉토리를 파일(=읽고 쓸 수 있는 것)로 취급
Regular files(일반 파일), Directory files(디렉토리), Special file(I/O device 장치)
- 기본적으로 제공되는 디렉토리
.
: current directory (디렉토리 생성시 자동 포함)..
: parent directory (디렉토리 생성시 자동 포함)/
: root directory~
: home directory
- 디렉토리 경로 : 절대 경로, 상대 경로
- absolute path : 루트 디렉토리(
/
) 기준 →ex. /home/binnie/a.txt - relative path : 현재 디렉토리(
.
) 기준 →ex. usr/bin/xv
- absolute path : 루트 디렉토리(
-
디렉토리 파일 목록 보기 :
ls -la
type+permission / links / owner / group / filesize / date / time
ex. simple-ls.c : ls
명령어를 구현한 코드
ex. listing files in ascending order : ls
를 오름차순으로 구현
ex. simple-shell with multiple arguments
Standard I/O
모든 UNIX 프로그램은 3가지의 표준 스트림과 표준 파일 디스크립터를 제공한다.
Standard Stream : 입출력 통로, 리눅스 프로그램을 실행하면 3개의 표준 스트림이 자동으로 열린다.
- Standard Input (stdin, file descriptor 0) : 터미널에서 받아오는 입력
- Standard output (stdout, file descriptor 1) : 정상적인 실행 결과를 터미널에 출력
- Standard error (stderr, file descriptor 2) : 비정상 종료시 터미널로 반환
File Descriptors : 프로세스가 특정 파일에 접근할 때, 파일을 분류하기 위해 제공되는 고유 숫자
-
- unbuffered I/O : buffer 지정 필요한 입출력 함수
open(2)
,read(2)
,write(2)
,lseek(2)
,close(2)
-
- buffered I/O : buffer 따로 지정 없이 사용 가능한 입출력 함수
getc(2)
,putc(2)
,fopen(2)
,fread(2)
,fwrite(2)
ex. cat.c : cat
명령어를 구현한 코드
UNIX Time Values
Process : 현재 실행되고 있는 컴퓨터 프로그램, 프로그램이 메모리에 올라간 상태
Process time : 프로세스 관련한 시간 정보로, clock ticks(clock_t)에 의해 측정
-> clock time(총), user CPU time(user), system CPU time(kernel)
time ls
: 명령어의 running time을 확인
ps
: 현재 돌아가는 process 확인
pstree
: process tree 출력하는 명령어
@Advanced Programming in the UNIX environment, Third edition 내용을 참고함
맨 위로 이동하기