[TIL] Unix 명령어와 JS 추상화 (feat. 퀵, 병렬정렬)

샤이니·2023년 3월 28일
1

learned.log

목록 보기
8/46

오늘의 나는 무엇을 잘했을까?

  1. 데일리 스크럼 방식을 바꿔 진행했다. 시간이 오래 걸리는 만큼, 서로 해당 개념에 대해 얼마나 확실하게 알고 있는지 파악할 수 있어서 효과적인 것 같다.

  2. 빠르게 듣고 드디어 알고리즘 공부를 했다. 한가지에만 너무 몰두하지 않고 취업을 위해 필요한 것들을 골고루 잘 분배해서 하는 것이 중요할 듯 하다.

오늘의 나는 무엇을 배웠을까?

[1] 실용적 유닉스 커맨드 라인

유닉스(Unix)와 운영체제 발전의 역사

  • 1970년대 초반에 개발된 C기 운영체제
  • 소프트웨어를 개발하고 실행할 수 있는 편리한 플랫폼
  • 쉽게 수정해서 다른 컴퓨터에 적용 가능
  • POSIX라는 유닉스의 표준이 있다.
  • 사용 혹은 변형 시, 회사에 라이센스 비용 지불해야함.
    • Unix-certified 공식 유닉스
    • 표준을 인증받지 않았지만, 사용하기에 기능적으로 거의 차이가 없는 정도라면 Unix-like, 유사 유닉스

유닉스 기반 OS

  1. 리눅스(Linux)

    • Free Software Foundation에서 GNU 개발
      • 유닉스의 코드를 하나도 사용하지 않고 개발된 유사한 운영체제
      • 누구나 쉽게 사용하고 변형할 수 있는 무료버전!
    • 운영체제의 핵심인 새로운 커널을 리누스 토발즈가 개발

    → 두개가 합쳐져 GNU/Linux가 완성되었다.

    • Ubuntu, Red hat, CentOS, Debian 등..
  2. macOS

    • 유닉스 기반 BSD → 4.3BSD 기반 NeXTStep을 Apple기기에 이식하는 것이 maxOS의 시초
    • 즉, macOS는 Unix - BSD - NeXTStep - macOS 순의 역사
    • macOS는 공식 유닉스

Commands

형태 : command [-option] argument

  • man command : 해당 커멘드의 매뉴얼 보여준다
  • 단축키s
    • Ctrl + A: 줄 가장 앞부분으로 커서 이동
    • Ctrl + E: 줄 가장 뒷부분으로 커서 이동
    • Alt + 왼쪽방향키 : 이전 단어로 커서 이동
    • Alt + 오른쪽방향키 : 다음 단어로 커서 이동
    • Ctrl + C : 이전 작업 취소
    • Tab 자동 완성 해준다.
  • clear 커맨드 깨끗하게 한다. but history는 남아있다.

파일 경로

  • 사용자의 홈 디렉토리 : ~로 단축 가능
    • ~ = /home/사용자이름
  • pwd - 현재 디렉토리 출력 (Print Working Directory)
  • cd 이동할경로
    • home directory는 ~ or 아무것도 안쓴다
  • ls - list , 현재 디렉토리의 모든 리스트
    • -a 숨겨진 파일/폴더까지 전부 출력
      • 숨겨진 파일 (.으로 시작)은 확장자가 없다! 사실 모든 파일은 확장자가 없어도 된다.
    • -l 자세한 정보까지 보여준다
  • 상대경로
    • . 현재 디렉토리
      • 상대 경로를 사용할 때 root 디렉토리에서 시작하는게 아닐 경우, 젤 앞의 ./ 안적어도 된다.
    • .. 상위 디렉토리
  • 파일/디렉토리 이름에 공백이 있을 경우
    • '', "", \ 사용 → 애초에 공백 안넣고 _로 표현하는게 더 좋다.

루트 디렉토리의 디렉토리들

  • /bin - 컴퓨터가 실행할 수 있는 프로그램. binary 파일이 있다 (컴퓨터가 시작하거나 자신을 수리하기 위해서 꼭 필요한 커맨드가 있다.)
  • /sbin - 관리자 전용 프로그램
  • /etc - 컴퓨터 설정파일들이 있다. 각종 프로그램의 설정파일, 관리자 권한 설정 파일 등
  • /home 또는 /Users - 사용자의 홈 디렉토리. 사용자의 모든 파일을 저장해놓는 곳
  • /usr - user에게 필요한 파일들을 저장한다. binary 파일이 있지만 사용자가 필요한 커맨드들이 있는 것!
    • /usr/local - 사용자가 직접 설치한 프로그램과 관련된 파일들이 있다.

파일 다루기

  • mkdr 이름 디렉토리 만들기
  • touch 파일명.확장자 파일이 없으면 새로 생성하고, 있으면 마지막 접근 시간이나 수정시간을 현재로 업데이트함!
  • cat 파일 내용을 간단하게 보고 싶을 때 사용, 여러개 가능
  • less 각 파일을 페이지 단위로 나눠서 보여줌
    • 다음장 space or f, 이전장 b, 첫장 g, 마지막장 G
    • q로 종료
  • head (기본)파일 처음 10줄 -n 숫자 옵션으로 줄 지정 가능
    head -n 5 파일명.확장
  • tail (기본)파일 처음 10줄
  • mv [작업할 대상의 경로][이동할 목적지 또는 변경할 이름]
    • 이미 있는 폴더면 이동됨
    • 파일 이름이 같으면 덮어쓰기 됨!!!
      • -i 옵션을 같이 쓰면 충돌이 일어났을 때 물어봄
  • cp [복사할 대상의 경로][복사할 위치]
    • 복사할 위치가 이미 있으면 복사되고 없으면 새로 생성된 뒤 복사됨
    • 이미 같은 이름의 파일이 있으면 덮어써짐 -i 쓰기
    • 디렉토리를 복사할 때는 -r 옵션을 적어야함
  • rm 삭제할파일 또는 디렉토리 경로
    • 디렉토리를 삭제할 때는 -r 옵션을 적어야함
    • -i 디렉토리 안의 각 파일별로 지울건지 상세하게 물어봄!
    • 영구적으로 지워짐
    • -f 강제로 지움

CLI 텍스트 에디터 - vim

  • vim 아무 argument가 없으면 파일 새로 생성, argument로 경로를 주면 그 파일을 수정!
  • 4가지 사용모드
    • 일반모드 - ESC키 : 커서 이동, 텍스트 붙여넣기(p), 작업 취소
    • 입력모드 - i : 텍스트 입력
    • 비주얼모드 - v(글자단위) or V(줄단위) : 텍스트 블록 지정, 텍스트 복사 가능(y키), 잘라내기(d)
    • 줄단위로 복사 or 잘라내기 - 커서 앞쪽에 두고 yy or dd
    • 명령모드 - : : 내용 저장, vim 종료
    • w 파일 저장 - 새로운 파일일때는 뒤에 파일명.확장자 적어야함
    • q vim 종료
    • 저장하지 않고 나가려면 q! 를 입력

외부 프로그램 설치

ex) wget 이라는 파일 → 외부에서 파일 다운 받을 때 사용하는 프로그램!

  • 우분투 apt
    • 설치 전 apt update를 꼭 항상 해줘야함
    • sudo 관리자 권한 일시적으로 갖게 해주는 명령어
    • 비밀번호는 ubuntu를 설치할 때 계정 생성 시 사용한 비밀번호 적으면 됨
    • sudo apt install 파일
    • sudo apt remove 파일
  • macOS homebrew

유닉스의 사용자 권한(permissions)

  1. 권한의 종류 3가지
    • 읽기(Read) : 파일의 내용을 읽을수 있는 권한
    • 쓰기(Write) : 파일의 내용을 변경 할수 있는 권한
    • 실행(Execute) : 파일을 실행시킬 수 있는 권한
  2. 접근 권한 사용자의 종류 3가지
    • user : 소유자에 대한 권한
    • group : 소유자그룹에 대한 권한
    • others : 기타 사용자에 대한 권한

권한 표시는 (rwx)(rwx)(rwx) 순이며 각 칸 당 user, group, others의 권한이다. 권한이 없을 경우 -로 표현한다.

  • 예시 rwxr-xr-x
    • user는 파일 읽기/쓰기/실행 권한을 모두 가진다
    • group은 파일 읽기와 실행권한만 가진다
    • other은 파일 읽기와 실행 권한만 가진다.

[2] JS 추상화

  1. ++x와 x++의 차이
let x = 1
console.log(x++) // 1
console.log(x) // 2

let y = 1
console.log(++y) // 2
console.log(y) // 2
  1. 옵서녈 파라미터

    parameter = '기본값'

    • 파라미터에 기본값을 전달하도록 전달하도록 하는 것!
      • 원래는 파라미터가 있는 함수에 아무런 값도 전달하지 않고 함수를 호출하는 경우에는 해당 파라미터는 undefiend로 출력? 넘어간다.
    • 파라미터들 중 가장 뒷쪽에서 선언해야함.
  2. 상수

    const 변경할 수 없다. 또한 선언만하고 값을 안주면 error

  3. switch문

    • 일치하는 값을 찾고 나서는 break이 등장하기 전까지 다 실행함
      • 즉, break가 없다면 밑의 다른 switch 조건도 실행하게 된다.
    • 자료형을 엄격하게 구분한다! 따라서 if문으로 변환 시 ===를 사용해서 변환해야한다,

[3] 알고리즘 문제 - 퀵, 병렬정렬

퀵 정렬

  • O(n logn), 단 최악의 경우는 O(n**2)
    • 최악의 경우 : 맨처음 pivot이 가장 크거나, 가장 작으면 모든 데이터를 비교하는 상황이 나온다.
  • 왠만하면 병합 정렬보다 빠름
  • pivot을 기준으로 작은 데이터는 왼쪽 큰 데이터는 오른쪽으로 모으는 함수를 작성함
  • 각 왼쪽, 오른쪽은 재귀용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복함
  • 함수는 왼쪽 + 기준점 + 오른쪽을 리턴함

병렬 정렬 (=합병정렬, merge 정렬)

  • 재귀용법을 활용한 정렬 알고리즘. O(n log n)

  • 대충 절반으로 잘라가면서.. split단계merge단계로 나뉘어짐

  • 출처 : 위키피디아

  • 백준 문제 : https://www.acmicpc.net/problem/24060

오늘의 나는 어떤 어려움이 있었을까?

unix와 js는 재미있엇음!
고급 정렬 2가지 (퀵정렬, 고급정렬)이 생각이 안나서 재학습 및 정리했다. 생각보다 병합정렬을 구현하는 것이 까다로워서 시간이 오래걸렸다.

  • 한가지 의문인 것은 python은 이미 sort 내장 함수를 지원하는데, 이런 정렬이 어떻게 쓰일지가 궁금하다. 아직 공부가 부족하다는 뜻이겠지..

내일의 나는 무엇을 해야할까?

  • Git 강의 완강
  • weekly mission 2시간 투자
  • 순차 탐색 & 이진 탐색 공부 -> 백준 1문제
  • 스터디 제안하기!

1개의 댓글

comment-user-thumbnail
2023년 3월 30일

좋은 글 감사합니다!!

답글 달기