Skip to content
Jang HyungSuk edited this page Jan 9, 2022 · 3 revisions

수업

호눅스의 수업을 들으면서 기억에 남는 키워드들을 정리해보려고 한다.

코코아 때 한번 말씀을 해주신 내용이 많았는데 까먹은 내용이 많았다. 마스터즈 시작 전에 코코아 위키를 한번 보고 복습을 하자고 마음만 먹고 안 한 것을 반성하게 된다.


키워드 : 프로세스. 운영체제, 커널과 쉘, vim

프로세스

프로세스란 실행중인 프로그램을 의미한다. 프로세스 내부에는 최소 하나의 쓰레드(메인쓰레드)가 존재한다.

프로세스의 메모리구조

  1. code 영역 : 소스코드가 올라가는 곳
  2. data 영역 : static 메서드, static 변수가 올라가는 곳
  3. heap 영역 : 동적 할당을 위한 메모리 영역 (자바의 객체, c언어의 malloc)
  4. stack 영역 : 메서드, 지역변수를 위한 메모리 영역

출처

운영체제의 역할

운영체제는 Mac OS, Linux, Window와 같은 것이 있다.

image 이미지출처

운영체제의 역할은 다음과 같다.

  1. 사용자와 컴퓨터 간의 인터페이스 역할

운영체제가 없다면 사용자는 0과 1로 하드웨어를 직접 제어해야 한다. 이는 일반적인 사용자들은 할 수 없는 작업이다. 운영체제를 통해 우리는 컴퓨터에 편리하게 명령을 내릴 수 있다. 또한 하드웨어 인터페이스를 제공해주어 마우스, 키보드, 모니터 등의 하드웨어를 제조사에 상관없이 사용할 수 있도록 호환성을 보장해준다.

  1. 하드웨어 보호

운영체제 없이 사용자가 하드웨어를 0과 1로 제어를 할 수 있다. 실제로 과거에는 운영체제 없이 이렇게 제어를 했다. 아무리 똑똑한 사람이라도 실수를 하게되는데 하드웨어를 조작하는 과정에서 실수를 하게 되면 하드웨어가 고장나게된다. 우리는 바로 하드웨어 조작을 하지 않고 운영체제를 통해 조작을 해서 하드웨어를 보호할 수 있다.

  1. 응용 프로그램 관리

응용 프로그램은 자원을 효율적으로 관리해준다. 현재 우리는 수많은 응용프로그램을 동시에 작업을 하는 경우가 많다. 이 때 운영체제가 한정된 자원을 최대한 활용해서 자원을 알맞은 순서로 응용프로그램에 분배하고 다시 회수하는 작업을 해준다.

출처

커널과 쉘

쉘은 사용자의 응용프로그램과 커널 사이에 위치하고 있다. 응용 프로그램의 명령을 커널에 전달해주는 역할을 한다.

커널

실제 cpu와 메모리 등의 하드웨어를 관리하는 역할을 한다. 프로세스, 메모리, I/O, 파일, 네트워크. 보안 등을 관리한다.

vim

핵심VIM명령어 출처

h  l  k  j
좌 우 상 하

e // 오른쪽 한 단어의 앞 부분으로 커서 이동
b // 왼쪽 한 단어의 앞 부분으로 커서 이동
^ // 줄 앞으로
$ // 줄 끝으로

H // 화면 제일 상단
M // 화면 중단
L // 화면 제일 하단
gg // 최상단
G // 최하단
[lineNum] G // 지정한 라인으로 이동
ctrl+d // 반 화면 아래로
ctrl+u // 반 화면 위로

i // insert모드
o // 커서 아래에 행 삽입 후 insert모드
r // 커서 위치 한 글자만 수정
R // 커서 위치부터 Replace모드
ESC // 종료

dd // 라인 삭제
de // d 삭제 + e 오른쪽 한 단어까지 이동 -> 오른쪽 한 단어 삭제
u // 되돌리기

yy // 커서 라인 복사
p // 붙여넣기 -> 최근의 d명령 or y명령을 붙임

/[검색] -> n 으로 넘김

출처

쉘 스크립트

find 명령어

find . -name "*.cs"

find . -type f -name "*.cs"

FINDRESULT=$(find . -name "*.cs")
echo ${FINDRESULT[@]} // 파일의 이름이 배열로 담김

파이프

// command1의 표준 출력을 command2의 표준 입력으로 전달
command1 | command2

// file.txt 내용을 grep a의 입력으로 전달
cat file.txt | grep a

리다이렉션

리다이렉션 내용
< 파일 읽기
> 파일 쓰기(overwrite)
>> 파일 쓰기(insert)
구분 파일 디스크립터
표준 입력 0
표준 출력 1
표준 에러 2
command > outfile
command >> outfile
command >& outfile
command >>& outfile

// 출력 문구를 리다이렉션 해서 안띄움
sample.sh > /dev/null

나는 직접 전체탐색하며 cs파일을 옮겼는데 쿠킴은 간단한 리다이렉션을 통해 zip 을 수행했다. 이걸 보고 깜짝 놀랐다!! 😱

find . -name "*.cs"  | zip -@ "$FILENAME"".zip"  > /dev/null

참고-쿠킴gist

zip -@ 옵션이 무엇인지 궁금해서 찾아보니까 아래와 같은 것을 알 수 있었다.

zip -@ 참고1 zip -@ 참고2