운영체제와 리눅스 명령어 정리
운영체제란?
- a program that manages a computer's hardware
- 컴퓨터 시스템의 하드웨어적 자원, 소프트웨어적 자원을 효율적으로 운영 관리하여 사용자의 편의성을 증진시키는 시스템 소프트웨어
- 하드웨어 성능을 최적화하여 시스템의 생산성 증가
- 커널과 셀로 구성
콘솔, 터미널, 쉘의 차이점
콘솔
서버의 로컬 장치에서 직접 명령어를 작성할 수 있는 물리적인 입출력 장치
터미널
콘솔 + 원격제어 환경
서버의 로컬 또는 원격으로 접속할 수 있는 콘솔을 구현한 소프트웨어
cf. 터미널과 터미널 에뮬레이터
우리가 사용하는 CLI 창은 사실 엄밀히 말하면 터미널이 아닌 터미널 에뮬레이터임.
진짜 터미널은 PC가 등장하기 전 메인프레임 컴퓨터에 입출력을 담당하는 말단 기기(teletype)를 뜻함.
현재 사용중인 터미널에도 'teletype'의 흔적은 남아있음. 바로 /dev/tty
/dev/tty?
- 소프트웨어 터미널
- 우리는 tty2를 통해 컴퓨터 속을 그래픽 화면으로 살펴보고 있는 것.
따라서 콘솔과 터미널은 항상 함께 실행된다
쉘
- 실제로 명령어를 전달하고 결과를 전달받는 프로그램
- 사용자가 입력한 명령어를 OS로 전달하는 명령어 해석기
- bash, sh, csh 등 종류 다양
- GUI(Graphical User interface) 셀, CLI(Command line interface) 셀로 나뉨
- GUI(Graphical User interface) 셀: window, aqua(맥os) 등등
- CLI(Command line interface) 셀: cmd, powershell(window), bash(ubuntu 및 맥os), csh 등등
프로세스와 스레드
- 프로그램이란, 컴퓨터가 수행할 작업을 기록해둔 것
- 프로그램이 실행될 때, 운영체제는 프로세스 단위로 프로그램을 관리
- 즉 운영체제는 프로세스 단위로 메모리와 CPU 연산 등 컴퓨팅 자원 분배
메모리 관리
- 프로세스에 실제 메모리의 일부를 떼어서 주소 형태로 제공(가상 메모리)
- 프로세스는 컴퓨터 전체의 메모리가 아닌 가상 메모리에만 접근 가능(프로세스 격리)
- 따라서 서로 다른 프로세스간에는 접근할 수 없기에 프로세스간 통신을 위해 프로세스 통신 기법(IPC, Inter process communication) 사용
CPU 자원 관리
- 코어 단위로 프로세스에 제공
- 프로세스는 스레드라는 단위로 코어 하나씩 사용 가능
- 하나의 프로세스는 최소 1개의 스레드 가짐
- 하나의 프로그램이 여러 프로세스 갖는 경우: 멀티프로세싱
- 하나의 프로세스가 여러 스레드 갖는 경우 : 멀티스레딩
프로세스 관리와 시스템 콜
ps
현재 터미널과 관련된 프로세스 목록 출력
ps -ef
모든 터미널에서 현재 실행중인 프로세스 목록 및 부가정보 출력
UID | PID | PPID | C | STIME | TTY | TIME | CMD |
사용자명 | 프로세스 아이디 | 해당 프로세스가 붙어있는 teletype(터미널) |
프로세스 삭제하기
sudo kill -s KILL [PPID]
KILL 명령어 입력시 셀의 프로세스는 커널에게 이 명령을 전달하고, 커널은 권한 확인 후 작업 수행.
이때 프로세스가 커널에게 요청을 전달하는 기능을 시스템 콜 이라고 함.
[명령어] | grep [문자열]
특정 문자열을 포함한 라인만 선택해서 출력하기
리눅스 명령어
ls
현재 위치한 곳에서 어떤 파일과 폴더가 있는지 보여준다
ls -l
더 세부적인 정보를 보여준다
ls -l 특정 파일/폴더
지정한 파일/폴더의 세부 정보를 보여준다
ls -a
숨김 파일/폴더도 모두 보여준다
ls -al
숨겨진 파일/폴더 포함 모든 파일의 세부 정보를 보여준다
총 10글자. 맨 앞은 폴더(d)인지 파일(-)인지 |
링크의 수 | 해당 파일에 대한 소유권을 가진 소유 사용자 | 파일을 소유한 그룹 이름 | 파일 크기 | 파일 최종 수정 일시 | 파일/폴더명 |
rm, cp -r
-r은 하위 디렉토리까지 모두 삭제/복사하라는 뜻
가상환경
서로 다른 프로젝트에서 어떤 프로그램을 사용하려고 할 때 사용하는 프로그램의 버전이 각자 다를 수 있다. 이 경우 버전 문제가 발생하기에 개발하기가 불편하다.
따라서 가상환경이라는 독립된 공간에서 파이썬과 패키지를 설치하여 버전 충돌 없이 여러 프로젝트를 동시에 진행할 수있다.
파이썬 가상환경 만들기
https://dojang.io/mod/page/view.php?id=2470
아나콘다 명령어 치트시트
참고
https://blog.naver.com/asianchairshot/221383363419
'프로그래밍 > CS' 카테고리의 다른 글
에자일(Agile) 방식 (0) | 2023.07.31 |
---|---|
[Software Engineering] TDD(Test Driven Development) (0) | 2023.07.18 |