Download presentation
Presentation is loading. Please wait.
1
Linux/UNIX Programming
문양세 강원대학교 IT대학 컴퓨터과학전공
2
디스크 파일 같이 저장된 것만 가리키는 것이 아니라, 모든 물리적인 구동장치(디바이스)를 가리킴
파일이란? (1/3) UNIX 파일과 디렉토리 파일 데이터를 읽을 수 있는 자원, 또는 데이터를 쓸 수 있는 모든 대상 넓은 의미로 보면 디렉토리도 파일로 볼 수 있음 디스크 파일 같이 저장된 것만 가리키는 것이 아니라, 모든 물리적인 구동장치(디바이스)를 가리킴 특히, 키보드(입력 자원, stdin)도 파일이고, 모니터(출력 대상, stdout)도 파일이고, 각 프린터(출력 대상) 역시 파일임
3
파일이란? (2/3) 파일의 종류 일반(ordinary) 파일: 데이터를 가지고 있으면서 디스크에 저장됨
UNIX 파일과 디렉토리 파일의 종류 일반(ordinary) 파일: 데이터를 가지고 있으면서 디스크에 저장됨 디렉토리(directory): 디스크에 저장되어 있으면서 다른 파일을 조직하고 액세스하는데 필요한 정보를 가지고 있음 특수(special) 파일 또는 디바이스(device) 파일: 물리적인 장치에 대한 내부적인 표현 (예: /dev/rsd0)
4
파일이란? (3/3) UNIX 파일과 디렉토리 files directories special files (devices)
5
파일의 구분: 문서(text) 파일, 이진(binary) 파일
문서 파일 vs. 이진 파일 (1/3) UNIX 파일과 디렉토리 파일의 구분: 문서(text) 파일, 이진(binary) 파일 문서 파일: 단지 ASCII 문자(키보드에서 입력할 때 생성되는 데이터)만을 가지고 있는 일반 파일 문서 파일은 문서, 프로그램 등을 작성하는데 사용됨 이진 파일: 문자가 아닌 데이터가 들어 있는 일반 파일 이진 파일은 일반적으로 프로그램에 의해서 처리될 때만 의미가 있는 데이터를 포함 (실행 파일 자체도 이진 파일에 해당함)
6
문서 파일 vs. 이진 파일 (2/3) 문서 파일과 이진 파일의 기술적 차이 컴퓨터에서 데이터는 비트(bit)의 연속으로 저장
UNIX 파일과 디렉토리 문서 파일과 이진 파일의 기술적 차이 컴퓨터에서 데이터는 비트(bit)의 연속으로 저장 비트(bit)는 하나의 2진수(0 or 1)로 구성 바이트(byte): 8개 비트의 문자열(8-bit string) 문서 파일: 바이트에 저장된 내용이 문자(ASCII Code, 한글 코드 등)로 해석됨 이진 파일: 바이트에 저장된 내용이 특수한 목적에 따라 다르게 해석됨
7
문서 파일 vs. 이진 파일 (3/3) UNIX 파일과 디렉토리
8
문서 파일 vs. 이진 파일 (3/3) UNIX 파일과 디렉토리
9
디렉토리 vs. 서브디렉토리 파일을 계층적으로 조직화하기 위해 디렉토리를 사용 (우리가 항시 작업하는 폴더 개념과 동일함)
UNIX 파일과 디렉토리 파일을 계층적으로 조직화하기 위해 디렉토리를 사용 (우리가 항시 작업하는 폴더 개념과 동일함) 디렉토리 그 자체도 파일이므로 한 디렉토리는 다른 디렉토리를 포함함으로써 계층을 이룸 부모 디렉토리는 다른 디렉토리를 가지고 있는 디렉토리 다른 디렉토리 안에 있는 디렉토리를 서브 디렉토리라고 함
10
운영체제 종류 및 버전에 따라 상이할 수 있음 UNIX File System은 Tree Structure이다.
유닉스 파일 시스템은 루트(root) 디렉토리라는 주(main) 디렉토리에 기반하여 하위 디렉토리들이 형성됨 운영체제 종류 및 버전에 따라 상이할 수 있음
11
디렉토리 이동하기 (1/2) UNIX 파일과 디렉토리 작업 디렉토리를 바꾸려면 cd(change directory) 명령을 사용 $ cd [directory] // directory: 이동하고자 하는 디렉토리의 이름 디렉토리 이름 없이 사용하면 자신의 Home 디렉토리로 이동 현재의 작업 디렉토리 확인을 위해서는 pwd(print working directory) 명령 사용 (pwd는 유닉스 명령 중에서 가장 자주 사용하는 것 중의 하나임) $ pwd
12
디렉토리 이동하기 (2/2) UNIX 파일과 디렉토리
13
디렉토리 생성 및 삭제 (1/2) 디렉토리 생성 (mkdir) $ mkdir directory
UNIX 파일과 디렉토리 디렉토리 생성 (mkdir) $ mkdir directory 디렉토리 삭제 (rmdir) $ rmdir directory // 삭제할 디렉토리 내용이 empty이어야 함 디렉토리 이름으로는 문자, 숫자, 특수 문자 등의 조합을 사용함 디렉토리 이름은 절대 및 상대 경로명을 사용하여 지정할 수 있음 $ mkdir ../../course/unix // “..”: parent directory $ cd ~/univ/course // “~”: home directory $ mkdir ~/course/mathematics $ rmdir ./course/unix // “.”: current directory
14
디렉토리 생성 및 삭제 (2/2) UNIX 파일과 디렉토리
15
디렉토리/파일 이동 (1/2) 디렉토리 이동 명령어 (mv) $ mv directory target-directory
UNIX 파일과 디렉토리 디렉토리 이동 명령어 (mv) $ mv directory target-directory 파일 이동 명령어 (mv) $ mv file target-directory mv의 목적(효과) 디렉토리/파일 이름을 다시 짓기 디렉토리/파일 옮기기 서브 디렉토리 전체 옮기기
16
디렉토리/파일 이동 (2/2) UNIX 파일과 디렉토리
17
디렉토리 내용 확인 (1/2) UNIX 파일과 디렉토리 디렉토리 내용 확인 명령어 (ls) $ ls [-options] [directories or files] “ls”의 기본 기능은 디렉토리에 있는 파일 이름을 알파벳 순서대로 보여주는 것 (디렉토리의 내용을 확인하는 것) $ ls $ ls –l // 파일 정보 자세히 보기 (long option) $ ls –a // 숨겨진 파일 보기(“.”로 시작) $ ls –t // 최종 갱신 시간 순으로 보기
18
디렉토리 내용 확인 (2/2) UNIX 파일과 디렉토리
19
디렉토리 내용 확인 (2/2) UNIX 파일과 디렉토리
20
Alias 사용법 (1/3) UNIX 파일과 디렉토리 “alias”를 사용하여 자주 쓰는 명령을 간단하게 지정할 수 있음 $ alias ll=‘ls –l’ $ alias la=‘ls –a’ $ alias cdprj=‘cd ~/course/unix/project’ Shell에 따라서 중간에 “=”을 빼야 할 수 있음 Example) $ alias ll ‘ls –l’ 현재 alias 지정된 내용을 보려면 alias 명령을 사용 $ alias
21
Alias 사용법 (2/3) UNIX 파일과 디렉토리
22
Alias 사용법 (2/3) UNIX 파일과 디렉토리
23
Alias 사용법 (2/3) UNIX 파일과 디렉토리
24
Alias 사용법 (3/3) UNIX 파일과 디렉토리
25
Alias 사용법 (3/3) UNIX 파일과 디렉토리
26
파일 내용 확인 (1/4) UNIX 파일과 디렉토리 cat: 파일 내용을 화면에 출력 (여러 파일 이름을 인수로 가질 수 있으며 ,작은 파일의 내용을 보기에 적당함) more: 화면 크기 단위로 파일 내용 보기 (큰 파일의 내용을 보기에 적당하며, 중간에 중단하고 싶은 경우 ‘q’를 입력함) head: 파일의 머리(head) 부분의 내용을 출력함 (“-n” 옵션을 사용하여 출력을 원하는 라인 수를 지정할 수 있음) tail: 파일의 끝부분(tail) 부분의 내용을 출력함 (“-n” 옵션을 사용하여 출력을 원하는 라인 수를 지정할 수 있음) file: 파일의 유형(텍스트 파일, 그림 파일, 실행 파일 등)을 확인함
27
파일 내용 확인 (2/4) UNIX 파일과 디렉토리
28
파일 내용 확인 (3/4) UNIX 파일과 디렉토리
29
파일 내용 확인 (4/4) UNIX 파일과 디렉토리
30
Copy(cp) 명령어 (1/4) UNIX 파일과 디렉토리 파일을 다른 파일로 복사 $ cp file1 file2 // file1을 file2에 복사 $ cp –i file1 file2 // interactive option (파일을 overwrite하는 것(file1이 file2에 overwrite되는 것)을 확인하기 위함) 파일을 다른 디렉토리로 복사 $ cp [-i] files directory // 파일들(files)을 directory에 복사 (“-i” option은 interactive option임) 디렉토리를 다른 디렉토리로 복사하기 $ cp -r dir1 dir2 (directory1의 모든 내용(서브 디렉토리 포함)을 directory2로 복사) (“-r” option은 recursive를 의미함)
31
Copy(cp) 명령어 (2/4) UNIX 파일과 디렉토리
32
Copy(cp) 명령어 (2/4) UNIX 파일과 디렉토리
33
Copy(cp) 명령어 (3/4) UNIX 파일과 디렉토리
34
Copy(cp) 명령어 (4/4) UNIX 파일과 디렉토리
35
UNIX에는 휴지통 기능이 없음 --> 삭제 시 주의 요망
Remove(rm) 명령어 (1/3) UNIX 파일과 디렉토리 파일 삭제하기 $ rm files // 파일들(files)을 삭제 $ rm –i files // interactive option (삭제 여부를 확인함) $ rm –f files // force option (파일 모드에 관계없이(“w” mode가 set되어 있지 않은 경우에도) 삭제함) 디렉토리의 내용 모두 삭제 (rmdir은 디렉토리가 empty인 경우에만 사용할 수 있음) $ rm -r directory (주어진 디렉토리의 내용(서브 디렉토리 포함)을 모두 삭제함) $ rm –rf directory (디렉토리 내의 서브 디렉토리 및 파일의 모드에 관계 없이 모두 삭제함) UNIX에는 휴지통 기능이 없음 --> 삭제 시 주의 요망
36
Remove(rm) 명령어 (2/3) UNIX 파일과 디렉토리
37
Remove(rm) 명령어 (3/3) UNIX 파일과 디렉토리
38
linux_unix (drwxrwxr-x)
실습 UNIX 파일과 디렉토리 1. 자신의 HOME 디렉토리 아래에 다음과 같은 구조의 디렉토리 및 파일을 생성하고, 이 구조를 다음 명령을 사용하여 파일로 저장 $ ls –lR linux_unix > PT1 $HOME linux_unix (drwxrwxr-x) dirA (drwxrwxr-x) dirB (drwxrwxr-x) file1 (-rw-rw-r--) fileA1 (-rw-rw-r--) dirAA (drwxrwxr-x) dirBA (drwxrwxr-x) dirBB (drwxrwxr-x) fileAAA1 (-rw-rw-r--) fileAA2 (-rw-rw-r--) fileAAB (-rw-rw-r--)
39
linux_unix (drwxrwxr-x)
실습 UNIX 파일과 디렉토리 위에서 생성한 디렉토리 구조를 다음 지시(빨간색)에 따라 수정하고 수정 후의 구조를 다음 명령어를 사용하여 파일로 저장 $ ls –lR linux_unix > PT2 $HOME linux_unix (drwxrwxr-x) 파일 이름 변경 dirA (drwxrwxr-x) dirB (drwxrwxr-x) data1 (-rw-rw-r--) fileA1 (-rw-rw-r--) dirBA (drwxrwxr-x) dirBB (drwxrwxr-x) fileAAB (-rw-rw-r--) 디렉토리 이동 디렉토리 및 파일 삭제
40
파일의 사용 권한 UNIX 파일과 디렉토리 파일 시스템에서 사용자 종류에 따른 액세스 권한을 제어하기 위해 유닉스는 각 파일에 대해 파일 사용 권한(Permission)을 설정 사용 권한은 1) 누가 파일에 액세스할 수 있는가, 그리고 2) 어떤 방법으로 액세스를 할 수 있는가를 제어 독립적인 세 개의 사용 권한 : 읽기(r), 쓰기(w), 실행 권한(x) 개인적인 파일에 대해 사용 권한 설정/변경 이유 다른 사용자의 액세스를 제한하기 위해 사용 자원(파일, 디렉토리)을 공유하기 위해 사용 자신의 실수로부터 보호하기 위한 것 (예: 삭제 되지 않도록 설정)
41
파일의 권한 관리 유닉스의 세 가지 조합의 사용 권한
UNIX 파일과 디렉토리 유닉스의 세 가지 조합의 사용 권한 사용자 개인을 위한 것 (owner) 사용자가 속한 그룹을 위한 것 (group) 시스템에 있는 모든 사람을 위한 것 (others) 각 파일과 디렉토리에 대해, 사용자 자신을 위해, 사용자가 속한 그룹을 위해 그리고 모든 사람을 위해 각각 분리된 읽기(r), 쓰기(w), 실행(x)의 권한을 부여할 수 있다는 의미 owner group others
42
others에게 r만 허용 (w, x는 허용 안 함)
파일 권한 알아보기 UNIX 파일과 디렉토리 “ls –l” 명령을 이용하여 사용 권한을 확인할 수 있음 (r: 읽기, w: 쓰기, x: 실행, -: 권한이 부여되지 않음) owner에 r, w, x 모두 허용 others에게 r, x 허용, w는 허용 안 함 group에 r만 허용 (w, x는 허용 안 함) owner에게 r, w 허용, x는 허용 안 함 others에게 r만 허용 (w, x는 허용 안 함) group에게 r, x 허용 (w는 허용 안 함)
43
파일 모드 UNIX 파일과 디렉토리 UNIX에서는 rwx의 사용 권한을 표현하기 위하여 세 자리 8진수 숫자 코드를 사용하는데, 이를 파일 모드(file mode)라 함 첫 번째 8진수는 사용자(owner)의 권한을, 두 번째 8진수는 그룹(group)의 권한을, 세 번째 8진수는 모든 사용자(others)의 권한을 나타냄 b b b b b b b b b b는 bit(0 or 1)를 의미함 owner group others 예제 755 rwx r-x r-x 644 rw- r-- r-- 400 r
44
파일 권한(모드) 변경 (1/2) UNIX 파일과 디렉토리 파일에 대한 권한(모드)를 변경하기 위해서 chmod(change mode) 명령을 사용함 $ chmod mode files_or_directories mode = three octal digits (예: 755, 644, 400) mode = [u|g|o]+[+|-][r|w|x]+ (예: u+x, g-x, o+r) 일반 사용자는 자신의 파일/디렉토리에 대한 권한 변경이 가능하며, 루트 유저(root)는 모든 파일/디렉토리에 대한 권한 변경이 가능함
45
파일 권한(모드) 변경 (2/2) UNIX 파일과 디렉토리
46
파일 권한(모드) 변경 (2/2) UNIX 파일과 디렉토리
47
linux_unix (drwxrwxr-x)
실습 UNIX 파일과 디렉토리 위에서 생성한 디렉토리 및 파일 권한 수정 후 다음 명령어를 사용하여 파일로 저장 $ ls –lR linux_unix > PT3 $HOME linux_unix (drwxrwxr-x) dirA (drwxrwxr-x) dirB (drwxrwxr-x) data1 (-r—r--rwx) fileA1 (-rwxrwxr--) dirBA (drwxr-----) dirBB (drwxrwxrwx) fileAAB (-rw-rw-r--)
48
파일 비교 (1/2) UNIX 파일과 디렉토리 명령어 cmp: 두 파일의 차이 여부를 판단하며, 차이가 있다면 파일 내 어디서 처음 달라지는지를 출력함 $ cmp file1 file2 명령어 diff: 두 파일을 줄 단위로 비교하여 그 차이를 출력함 (어느 줄, 어디서 달라지는지를 자세하게 출력하므로, 소스 비교 등을 할 때 활용) $ diff file1 file2
49
파일 비교 (2/2) UNIX 파일과 디렉토리
50
파일 비교 (2/2) UNIX 파일과 디렉토리
51
메타 문자 (1/2) *(asterisk): 모든 문자열와 대응
UNIX 파일과 디렉토리 *(asterisk): 모든 문자열와 대응 *는 0개 이상의 문자열에 일치시키며, 이는 모든 파일명을 대표하는 메타문자로 사용됨 상기 예에서, *가 있는 부분은 모든 파일명을 대표하므로 어떤 이름의 파일 이던 무관하며 파일 이름의 마지막 부분이 .c로 끝나는 파일 이름만 화면에 출력하게 됨
52
메타 문자 (2/2) ?(question mark): 하나의 문자와 대응
UNIX 파일과 디렉토리 ?(question mark): 하나의 문자와 대응 […](brackets) : 괄호 안 문자 중 한 문자와 대응되며, 괄호 안에 문자의 범위를 표현하기 위하여 “–”와 함께 사용할 수 있음
53
UNIX SHELL
54
Shell? UNIX Shell Shell이란 명령어 해석기(Command Processor or Command Interpreter): 사용자가 입력하는 명령을 읽고 해석하는 프로그램 프로그래밍 언어: Shell이 해석할 수 있는 스크립트(shell script)라는 프로그램을 작성 유닉스를 사용하는데 있어 주요한 인터페이스
55
Shell의 종류 (1/2) C Shell Bourne Shell
UNIX Shell C Shell UNIX에서 기본적으로 제공되는 shell로서, 일반적으로 가장 많이 사용함 C Sehll에는 크게 두 가지가 있음 첫 번째는 C Shell 자체로서 프로그램 이름은 csh (/bin/csh) C Shell 계열의 다른 하나는 tcsh이며, 다른 쉘들에 비해서 아주 뛰어난 기능을 제공하는 C Shell의 하나임 Bourne Shell 초기의 유닉스 Shell 중의 하나로 지금도 널리 사용되고 있음 Korn Shell은 Bourne Shell에 대해 호환성을 제공하는 확장판 Korn Shell의 중요한 특성: 이전 명령어 기억, 작업 제어 등 Bourne Shell의 아류들: Bash Shell, zsh 등
56
Shell의 종류 (2/2) UNIX Shell
57
표준 입력과 표준 출력 UNIX Shell 표준 입출력의 기본 개념 모든 프로그램은 어떤 자원으로부터든지 입력을 받아들일 수 있어야 하고 어떤 대상이든지 출력할 수 있어야 함 표준 입력(standard input): 데이타를 읽는 방법/디바이스 표준 출력(standard output): 데이타를 출력하는 방법/디바이스 두 가지 커다란 장점 표준 입출력을 사용하면 사용자 입장에서 엄청난 유연성을 가질 수 있음 프로그램을 설계하고 작성하는 일이 매우 쉬워졌음
58
표준 출력의 Redirection (1/2) Redirection: 표준 출력을 파일로 보내는 것
UNIX Shell Redirection: 표준 출력을 파일로 보내는 것 어떤 명령의 결과를 파일로 보내고 싶다면 그 명령어 다음에 “>” 문자를 사용하고 파일 이름을 사용 예) $ ls –l > dir_list 표준 출력 내용을 기존 파일에 Append하려면 “>>”를 사용 예) $ date >> dir_list
59
표준 출력의 Redirection (2/2) UNIX Shell
60
표준 출력의 Redirection (2/2) UNIX Shell
61
파이프라인(Pipeline) (1/4) UNIX Shell 표준 출력을 다른 프로그램의 입력으로 사용하고자 할 때 사용함 (프로그램의 결과를 다른 프로그램에 파이프 시킨다고 말함) 프로그램(명령어) 이름 다음에 “|”(수직 막대)를 사용 예) sort 프로그램의 결과를 lpr: Line Printer Daemon(데이타를 인쇄하는 명령어)로 보내려면: $ sort input | lpr Shell을 사용하는데 있어서 매우 유용한 기능의 하나임
62
파이프라인(Pipeline) (2/4) UNIX Shell
63
파이프라인(Pipeline) (3/4) UNIX Shell
64
파이프라인(Pipeline) (4/4) UNIX Shell
65
표준 입력의 Redirection (1/3) UNIX Shell 표준 입력(즉, 키보드 입력)을 파일로 Redirection 시키고 싶은 경우 (Shell에게 그 프로그램이 데이타 입력을 키보드로부터가 아니라 파일로부터 읽어 들이도록 말하는 것) 실행하고자 하는 프로그램(명령어) 다음에 “< ” 문자를 사용한 후 입력 파일의 이름을 적음 $ sort < input 표준 입력과 출력을 함께 Redirection하는 것도 가능 $ sort < unsorted > sorted
66
표준 입력의 Redirection (2/3) UNIX Shell
67
표준 입력의 Redirection (3/3) UNIX Shell
68
파이프라인 분리(tee) (1/3) UNIX Shell T자 관(tee) 자신에게 들어오는 입력 데이타를 표준 출력(stdout)으로 출력할 뿐 아니라 지정된 파일로도 보내는 장치 T관을 만들기 위해서는 tee 명령을 사용 $ tee [-a] files // “-a”는 append를 의미함 일반적으로 파이프라인과 함께 사용하여, 출력 결과를 화면(표준 출력)으로 display함과 동시에 파일로 저장하기 위하여 사용함 $ sort < unsorted | tee sorted
69
파이프라인 분리(tee) (2/3) UNIX Shell
70
파이프라인 분리(tee) (3/3) UNIX Shell
71
실습 4. 다음 순서로 수행하여, 결과 파일을 생성한다. (1) $ cp /tmp/NBIT/gen_rand_num .
통신 및 압축 명령어 4. 다음 순서로 수행하여, 결과 파일을 생성한다. (1) $ cp /tmp/NBIT/gen_rand_num . (2) (1)의 파일을 실행 정렬(알파벳순) 화면에 출력 PT4파일에 저장 (3) PT4읽어서 정렬(숫자역순) 화면에 출력 & PT4 파일에 append *(2),(3)은 한번의 명령어로 수행
72
히스토리(history) 기능 (1/5) UNIX Shell 명령 입력을 쉽게 하도록 C Shell에서 제공하는 기능으로서, 과거에 입력한 명령을 반복하여 입력할 때 매우 유용함 히스토리 치환 기능: 이전에 사용했던 명령을 다시 칠 필요 없이 고쳐서 재입력 하도록 해주는 것 히스토리 목록을 보기 위해서는 history 명령을 사용 $ history [n] // 최근 n개의 명령어 이력을 보여줌 히스토리 기능을 사용한 명령어 입력 방법 $ !! // 가장 최근에 수행한 명령어를 반복하여 수행 $ !n // n번째 수행한 명령어를 반복하여 수행 $ !pattern // 주어진 pattern으로 시작하는 가장 최근의 명령어 반복 수행
73
히스토리(history) 기능 (2/5) UNIX Shell
74
히스토리(history) 기능 (3/5) UNIX Shell
75
히스토리(history) 기능 (4/5) UNIX Shell
76
히스토리(history) 기능 (5/5) UNIX Shell
Similar presentations