본문 바로가기

전체 글502

13. shell - 하드링크 0. 시작하기전에 - 지금까지 리눅스의 파일시스템에 대해서 배웠다. - 이번 포스팅에서는 리눅스 시스템에만 존재하는 독특한 링크라는 개념에 대해서 알아보자. 1. 추가적인 파일 시스템 명령어 a) cp 명령어 - cp는 copy를 지칭하는 명령어로, 복사 기능을 가진 명령어다. - cp 명령어는 다음과 같은 방법으로 사용할 수 있다. cp 복사할파일명 부여할이름 - 위의 사진은 link.txt라는 프로그램을 link2.txt라는 이름으로 복사한 예시다. b) cp - rf 옵션 - 어떤 디렉토리를 복사한다고 할 때, 해당 디렉토리의 내부 파일 또는 디렉토리 또한 복사하고 싶을 것이다. - 이 경우 rf옵션을 사용한다. (r = 재귀적으로 적용한다는 의미, f = 묻지말고 다 복사하라는 의미) cp -rf.. 2021. 9. 10.
12. shell - 리눅스 파일 시스템 탐색 0. 시작하기전에 - 이전 포스팅에서 리눅스 파일 시스템에 대해서 알아보았다. - 가장 중요한 부분은 모든 자원(데이터, 디바이스, etc)을 파일로 취급하여 다룬다는 것이다. - 파일 시스템은 다양한 외부장치 또는 디바이스도 파일로서 처리하는데, - 이것이 가능한 이유는 추상화(abstraction)을 통한 가상파일시스템 인터페이스를 이용하기 때문이다. - 추상화라는 개념을 어려워 할 것 같은데, 추상화란 복잡한 기능이나 데이터의 공통적인 특성을 구조화(uniformation) 시킨 것이다. - 추상화를 사용하면 기본적으로 제공되는 기능이 있고, 세부적으로 customize 또는 optimize를 하고 싶다면 - 추가적으로 코드를 작성하여 기능을 수정할 수 있다. 1. 파일과 inode - 리눅스는 모.. 2021. 9. 10.
11. shell - 리눅스 파일 시스템 1. 파일 시스템이란? - 이전에 운영체제 포스팅에서 파일 시스템에 배운적이 있다. - 우선 파일 시스템이 무엇인지 복습을 해보자. - 파일과 관련된 대표적인 명령어 4가지 (open, read, write, close)가 있다. - 일반적으로 파일을 읽고(read) 쓰기(write) 위해 사용되는 경우가 많다. - 하지만, 네트워크의 입장에서 파일을 읽고 쓴다는 것은 무슨 의미일까? - 이는 네트워크를 통해 다른 서버로부터 데이터를 가져와 읽거나, 다른 서버로 데이터를 입력(쓰기)하는 것을 의미한다. - 이러한 관점에서 생각해보면, 외부장치도 데이터를 읽거나 쓰는 과정을 공통적으로 필요로 한다. ex) CD, USB, 마우스, 키보드, 모니터 etc. - 이와 같은 이유로, 각 장치에 따른 별도의 인터.. 2021. 9. 9.
10. shell - 프로세스 관리 및 제어 1. process 제어 명령어 - foreground process를 사용하면, 어떤 프로그램을 수행하는 중에는 다른 작업을 할 수 없다. - 만약 다른 작업을 해야한다면, 프로세스를 아예 종료하거나 잠시 중단시킬 수는 있을까? a) control + z (커맨드 입력 방식은 환경에 따라 다를 수 있으니, 참고하기를 바랍니다.) - 컨트롤 + z는 foreground에서 실행중인 프로세스를 잠시 멈추는 커맨드다. - 앞에 있는 숫자 1을 Job이라고 한다. ▶ Job - background process의 작업번호 - 여기서 알 수 있는 것은 foreground process가 background process로 넘어갔다는 점이다. - 진행중이던 프로그램을 멈추기 위해, 그동안의 수행기록을 지우는 것이.. 2021. 9. 9.
9. shell - foreground & background 프로세스 1. 리눅스 프로세스 - 이번 포스팅에서는 리눅스에서 사용하는 프로세스에 대해서 알아보자. a) 프로세스와 바이너리 ▶ 바이너리 - 코드 이미지 또는 실행파일 - 저장매체에 보관되어있는 파일 ▶ 프로세스 - 실행중인 프로그램 (메모리에 올라간 프로그램) - 가상 메모리 및 물리 메모리 정보 (상태 정보, 실행 중일 때만 알 수 있는 정보, 대표적으로 PCB) - 시스템 리소스 정보 (사용중인 시스템 자원에 대한 정보) - 스케쥴링 단위 (프로그램을 실행시키는 단위) b) 리눅스는 다양한 프로세스의 실행 환경을 제공한다. ▶ 유닉스의 철학 - 여러 프로그램이 각자의 일을 하며 서로 유기적으로 동작하여 전체 시스템이 움직이는 모델 - 이처럼 리눅스(유닉스)는 다양한 프로세스를 기반으로 작동하기 때문에, 그만.. 2021. 9. 9.
9. Array(배열) - Heap Sort(2) 0. 시작하기 전에 - 이전 포스팅에서 Heap 자료구조에 대해 간단하게 알아보았다. - 이제 Heap을 이용해 어떻게 정렬을 하는지 알아보자. 1. Heap 구현 a) 파이썬에서 Heap을 구현하는 방법 - 파이썬에서 Heap을 구현려면 2가지만 배우면 된다. ▶ heapq 라이브러리 ▶ heapify 함수 import heapq case = [9, 7, 5, 3, 1] heapq.heapify(case) print(case) #[1,3,5,9,7] 반환 b) heapq 라이브러리는 Min Heap만 만들 수 있다. - heapify 함수를 이용하면 Min Heap을 만들 수 있다. - 하지만, heapq 라이브러리에는 Max Heap을 만들어 주는 함수는 따로 존재하지 않는다. - 그러므로 약간의 노.. 2021. 9. 9.
8. Array(배열) - Heap Sort(1) 1. Heap Sort를 배우기 전에 - Heap Sort라는 이름에서 알 수 있듯이, Heap 자료구조를 이용해 배열을 정렬하는 알고리즘이다. - Heap Sort를 이해하기 위해서는 2가지 개념을 우선적으로 알아야한다. ▶ Tree 자료구조 https://devraphy.tistory.com/45 Data Structure - 트리(Tree) & 이진탐색트리(Binary Search Tree) 1. 트리(Tree) - 트리는 node와 branch를 이용하여 구성된 데이터구조로 사이클이 없다. - 트리는 이진트리(Binary Tree)형태의 구조를 이용하여 탐색(검색) 알고리즘 구현에 많이 사용된다. * 이진트리 - devraphy.tistory.com ▶ Heap 자료구조 https://devrap.. 2021. 9. 9.
8. shell - 리다이렉트와 파이프 1. Standard Stream - 리눅스의 표준 입출력을 말한다. - 리눅스에서는 command로 입력되어 실행되는 3가지 표준 입력스트림이 있다. a) stdin (Standard Input Stream) - 리눅스에서 사용하는 표준 입력스트림 - 기본적으로 터미널에서 입력을 받는 기능이다. b) stdout (Standard Output Stream) - 리눅스에서 사용하는 표준 출력 스트림 - 기본적으로 터미널 화면에 출력하는 기능이다. c) stderr (Standard Error Stream) - 리눅스에서 사용하는 표준 오류 출력 스트림 - 기본적으로 명령어를 틀리게 입력하는 등의 경우, 발생하는 에러를 터미널에 출력하는 기능이다. - 이처럼 모든 스트림은 기본적으로 console에 출력되.. 2021. 9. 7.
7. shell - 파일 권한 및 관리(2) 1. 파일 권한 및 관리를 위한 명령어 a) chmod - 파일 권한을 변경하는 명령어 - 파일 권한을 관리하다 보면, 필요에 의해 파일의 권한을 변경해야 할 때가 있다. - 이 때 사용할 수 있는 명령어가 chmod(change mode)이다. - chmod 명령은 다음과 같은 구조를 가진다. ▶ 더하기(+) 와 빼기(-)의 경우, 기존의 권한을 수정하는 방법이다. - 더하기(+): 기존 권한에 추가적으로 권한을 부여 - 빼기(-): 기존 권한에서 어떤 권한을 제거 ▶ 설정(=)은 기존 권한을 덮어쓰는 방식으로, 새롭게 권한을 설정 및 부여하는 방법이다. ▶ 특정 파일에 대한, 특정 사용자에 대한 권한을 변경하고 싶다면 다음과 같이 명령어를 작성할 수 있다. chmod g+rx test.c test.c.. 2021. 9. 7.
6. shell - 파일 권한 및 관리(1) 1. 권한 설정을 위한 기본 명령어 a) sudo 명령어 권한 설정하기 - sudo를 동반하여 사용하는 명령어는 운영체제의 시스템 설정을 건드린다는 의미다. - 그러므로 아무나 사용할 수 없고 함부로 사용해서도 안된다. - 이와 같은 이유로 sudo 명령어를 사용하기 위해서는 sudo 명령어 사용 권한이 있어야 한다. - sudo 명령어를 사용할 수 있는 사용자 관리 명부가 존재한다. - etc 디렉토리로 이동하여 다음과 같이 vi를 이용해 sudoers 파일을 열어준다. vi sudoers - 하지만 위의 사진과 같이 접근이 거부된 것을 확인할 수 있을 것이다. - sudoers 파일을 접근하기 위해서는 root권한이 필요하기 때문이다. - 그러므로 sudo 명령어를 함께 입력해준다. sudo vi s.. 2021. 9. 7.
7. Array(배열) - Quick Sort(퀵 정렬) 1. Quick Sort란? - Quick Select와 마찬가지로 정렬이 되어있지 않은 배열을 대상으로 사용하는 알고리즘이다. - Quick Select와 동일하게 Partitioning을 이용하여 배열을 정렬한다. a) Quick Sort 정렬과정 b) Quick Sort의 시간복잡도 c) Quick Sort의 안정성(Stability) - Quick Sort는 불안정한(unstable) 정렬 알고리즘이다. 2. 코드구현 from typing import List import random def quick_sort(case:List[int], begin_idx:int, last_idx:int) -> List[int]: length = last_idx - begin_idx + 1 if length 2021. 9. 6.
5. shell - 다중 사용자 1. shell 이란? - shell은 사용자와 컴퓨터 하드웨어 또는 운영체제 사이의 interface다. - 사용자가 컴퓨터와 소통할 수 있도록 사용자가 입력한 명령어를 해석하여 커널에게 전달하는 역할을 한다. 2. shell의 종류 a) Bash(Born again shell) - GNU 프로젝트의 일환으로 개발된 shell - 리눅스의 기본(default) shell b) Korn shell - UNIX에서 가장 많이 쓰이는 shell - 이 외에 C - shell, Bourne - shell 등이 존재한다. - shell 마다 명령어의 형식이 조금씩 다르다. - 하지만 UNIX를 기반에 두고 있기에 어느정도 일맥상통한 부분이 존재한다. 3. Bash의 기본 명령어 - 다중 사용자 - 터미널을 이용.. 2021. 9. 6.