본문 바로가기
Study (Data Science)/Python

Fund 3. Terminal(Linux OS), Hardware

by 콜라찡 2022. 11. 24.

Computer Hardware

 

반도체의 제작과정을 너무 잘 보여줘서 링크! : https://www.youtube.com/watch?v=6-tKOHICqrI&t=4s 

  •  CPU(Central Processing Unit, 중앙처리장치 : 반도체인 실리콘 웨이퍼 위에 집적회로(Integrated Circuits, IC)를 포토리소그래피(photolithography) 공정을 통해 회로를 인쇄해 만듬
    • 기계어 : CPU칩이 처리할 수 있는 명령어
    • Compile : 우리가 쓰는 프로그래밍 언어(C, C++, Python)를 기계어로 바꿔주는 것.
    • 제조사 : 삼성(Exynos등), 애플(A,M시리즈등), 퀄컴 등..
    • 구분 : 32bit, 64bit : CPU가 한번에 읽고 쓸 수 있는 데이터의 크기. 프로세스 할당가능한 메모리주소 범위에 영향을 줌. 크면 클수록 그만큼 프로세스를 많이 돌릴 수 있다는 뜻. 32bit면 이론적으로는 2^32=약 42억개의 메모리 주소공간만 사용 가능하고, 1개 주소공간이 1byte일 때, 1*42억 = 약 4GB 의 메모리 용량이 나오므로 RAM역시 이 이상을 사용할수 없다는 제한사항이 생기게 됨.
    • 트렌드 : 요즘은 초당 처리속도인 Clock을 향상시키기 보다는 4GHz 클럭을 유지하면서 동시에 더 많은 스레드를 처리할 수 있도록 코어 수를 늘리는 방향으로 제조되고 있음. 내컴은 6코어. 
    • 한계 : 클럭을 높이면 소비전력이 높아지는데 그만큼 cooling이 어렵고, 그 외의 방법을 찾아면 공정이 너무 어렵고 등등 복잡한 물리적이고 경제적인 이유로,, 특정 작업에 특화된 다른 연산장치들 (GPU, TPU)가 만들어짐.
      • GPU(Graphical Processing Unit) : 그래픽 연산 특화 장치. CPU가 박사급 몇명이라면 GPU는 그래픽만 잘하는 단순노동 외무자 수천명을 모아놓은 집적체. 단순노동은 단순노동자가 더 잘함.
      • TPU(Tensor Processing Unit) : 구글이 딥러닝 전용으로 만든 칩.
      • ASIC(Application-Specific Integrated Circuit) : 어플리케이션 특화 집적회로.
      • FPGA(Field-Programmable Gate Array) : 때에 따라 직접 customized programming 하여 쓰는 칩.
  • RAM(Random Access Memory) : 단기 저장장치. 주 저장장치 : 전원이 꺼지면 데이터가 사라짐. 비쌈. 얘가 더 빨라서 CPU와 일하기가 좋아 이 친구가 전원을 끄면 없어지는데도 불구하고 주 저장장치가 되었음.
  • HDD(Hard Disk Drive),SSD(Solid State Drive) : 장기 저장장치. 보조저장장치 : 전원이 꺼져도 데이터는 그대로.

 

 

Cloud Computing

 

아마존이 닷컴버블 초기에 연휴마다 고객이 몰려 서버가 다운되자, 대량 서버를 사들임. 평소에는 그만큼 고객이 없어 유지보수비용이 많이 들자 남는 서버를 렌트해주기 시작. 이름하여 Amazon Web Services. 물리적인 서버를 임대하는 것이 아니라 자기들이 가지고 있는 물리적인 서버 하나를 여러개의 가상 서버로 쪼갠 후 판매했고, 본격적인 상업적 클라우드 컴퓨팅 시대가 시작됨. 이렇게 쪼개는 작업을 가상화(Virtualization)이라고 하고, 실질 물리적 서버를 Host, 가상서버를 Guest라고 함. 가상화의 종류로는 guest 자체 os가 돌아가는 가상Machine과, os는 공유하고 프로세스나 자원을 host마다 따로 두는 Container가 있음. 이 때, Docker라는 프로그램이 도와 컨테이너들과 클라우드간의 소통을 해주게 됨.


 

 

Linux Command

  • Terminal (or console) : TV. 컴퓨터에 정보를 입력하고 출력하는 소프트웨어 및 하드웨어로써의 장치
  • Shell : Broadcasting. 프로그램의 종류. 커널과 소통할 수 있게 함.
  • Kernel : 운영체제 (OS)의 알맹이. 각종 디바이스를 통합관리하면서 그 연산자원을 수많은 어플리케이션들에게 분배
  • Program: 컴퓨터가 수행할 작업을 기록해 놓은 것.
  • Process : 프로그램이 수행될 때의 단위. 운영체제가 이를 기준으로 메모리와 CPU 등을 분배함.
    • 메모리관리 : os가 메모리 전체 중 일부만 virtual memory로 떼어서 제공해주고, 다른 커널메모리를 보호함.            (=process isolation)
    • CPU관리 : 메모리는 주소로 프로세스에게 할당. cpu는 코어단위로 프로세스에게 할당. 코어는 메모리를 할당하는 '작업단위', Thread는 메모리를 활용하는 '실행단위'. 
      • Multiprocessing : 하나의 프로그램 안에서 여러개의 프로세스를 활용하는 것.
      • Multithreading : 하나의 프로세스 안에서 여러개의 스레드를 활용하는 것.

 

From the diagram above, we can see that in multithreading (middle diagram), multiple threads share the same code, data, and files but run on a different register and stack. Multiprocessing (right diagram) multiplies a single processor — replicating the code, data, and files, which incurs more overhead. Multithreading is useful for IO-bound processes, such as reading files from a network or database since each thread can run the IO-bound process concurrently. Multiprocessing is useful for CPU-bound processes, such as computationally heavy tasks since it will benefit from having multiple processors; similar to how multicore computers work faster than computers with a single core. (https://towardsdatascience.com/multithreading-and-multiprocessing-in-10-minutes-20d9b3c6a867)

 

  • system call : 프로세스가 커널에게 요청을 전달하는 것. 우리가 kill, ctrl+c(interrupt) , term(terminate;explain before end of this process) 같은 명령들을 CLI에 입력하면, 우리가 프로세스에게 신호를 보내게 되는 것. 프로세스는 이 신호를 받고 커널에게 요청함. 프로세스 관리는 OS의 고유 권한이기 때문에, 우리가 말해도 커널의 도움이 필요함.
  • which python : which 는 어디있는지 찾아주는 명령어
  • echo $PATH : 환경변수 $를 사용하여 참조경로를 나타내어 줌.
 

The Benefits of Environment Variables and how to use them - Hyperlane

We are very excited to release an often requested feature: Multi-Factor Authentication account protection! by Michael Vrancken, Oct 13, 2020

hyperlane.co

 

  • 패키지 관리자 (package manager) : 공인 저장소에서 프로그램과 라이브러리(다른 프로그램들이 참조하여 사용할 수 있는 코드)를 패키지 단위로 설치하고 관리할 수 있도록 하는 프로그램
    • APT(Advanced Packaging Tool)  - 우분투
      • apt-get: APT 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거.
        • sudo apt-get install htop
        • sudo apt-get remove htop 
    • PIP(Python Package Installer) - 파이썬

 

 

(참고) 명령어 모음


필수(❤️) 및 권장(👍) 명령어들은 한번씩 실행하거나, 사용법을 검색해 보는 것을 추천합니다.

  • 셸 환경
    • 👍history: 셸 명령어 이력을 출력합니다. 이전 명령 표시. !번호 하면 그 번호 명령 재실행.
    • 👍man: 프로그램의 매뉴얼 페이지를 출력합니다.
    • 👌which: 명령어의 전체 경로를 출력합니다.
    • 👌export: 셸 변수나 함수를 현재 환경으로 내보냅니다.
    • 👌env: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 실행합니다. 명령어가 제공되지 않은 경우 현재 환경의 정보를 출력합니다.
  • 텍스트 처리
    • ❤️echo: 뒤이어 입력한 내용을 출력합니다.
    • ❤️cat: 하나 이상의 텍스트 파일을 순서대로 출력합니다.
      • cat(concatenate;이어붙이다) :  리눅스는 모든것이 파일 기준이라 주소록의 그룹명 또한 txt 파일 형식으로 저장되어 있음.
    • 👍sort: 입력된 텍스트를 줄 단위로 정렬합니다.
    • 👍less: 텍스트 파일의 내용을 자유롭게 조회하고 검색합니다.
    • 👍head: 텍스트 파일의 앞 몇 줄만 출력합니다.
    • 👍tail: 텍스트 파일의 마지막 몇 줄만 출력합니다.
      • 인덱스가 0부터가 아니라 1부터 시작하므로, 2번째줄부터 출력하고 싶을 때에는 +2.
      • tail -n +2 titanic.csv
    • 👍cut: 텍스트를 구분자(delimiter)에 따라 나눕니다.
      • -b, --bytes : 바이트 기준으로 잘라냄
      • -c, --characters : 문자열
      • -d, --delimiter : 지정한 문자를 구분자로 사용. 기본 tab
      • -f, --fields : 필드기준
      • -z, --zero-terminated : 라인의 구분자를 개행문자가 아닌 NUll 사용
    • 👍uniq: 텍스트 중 중복 값들을 제거합니다.
    • 👍grep: 정규식을 활용해 텍스트를 검색합니다.
    • 👍wc: 텍스트를 단어, 줄, 문자 등 단위로 셉니다.
    • 👌comm: 텍스트 파일을 비교합니다.
    • 👌zcat: 압축된 텍스트 파일을 출력합니다.
    • 👌sed: 정규식을 활용해 텍스트를 변형합니다.
    • 👌awk: 텍스트를 스캔하고 변형합니다.
  • 파일 제어 및 이동
    • ❤️ls: 현재 디렉토리 내의 파일 및 폴더들을 출력합니다.
      • ls -- all = ls - a : list for all file (include. hidden file)
        • ls -alrt가 유용할때가 많음. 
        • -l: 각 파일 및 폴더의 권한, 소유자, 크기, 수정일시 등 자세한 정보를 출력합니다.
        • -h: 파일 크기를 바이트 수 대신 사람이 알아볼 수 있는 단위(1K, 234M, 2G 등)로 표시합니다.
        • -t: 파일 수정시간 순으로 정렬해서 출력합니다. 최신 파일이 위쪽으로 표시됩니다.
        • -r: 정렬 순서를 뒤집어 출력합니다. -rt의 형태로 쓰면 최신 파일이 아래쪽으로 표시되어 유용할 때가 있습니다.
    • ❤️cd: Change Directory의 약자로, 뒤에 따라오는 폴더로 내가 있는 셸의 현재 위치를 이동시킵니다.
    • ❤️cp: 파일을 복사합니다.
    • ❤️mv: 파일을 이동합니다.
    • ❤️rm: 파일을 삭제합니다. 폴더를 삭제하기 위해서는 -r (recursive) 옵션을, 빈 폴더가 아니더라도 내부까지 삭제하려면 -f (force) 옵션을 함께 사용해야 합니다.
    • 👍chown: 대상 파일의 소유 사용자와 그룹을 변경합니다.
      • chown  : 대상 파일의 소유 사용자와 그룹을 변경할 수 있음. drwxr-xr-x는 해당 파일이 디렉토리이고(d), 소유자는 읽고(r) 쓰고(w) 실행(x)하는 모든 동작이 가능하지만, 소유 그룹 소속 사용자와 기타 사용자들은 읽고 실행하기만 가능하다는 것을 표시함.
    • 👍chmod: 대상 파일의 권한을 변경합니다.
    • 👍find: 파일을 찾습니다.
    • 👍pwd: Present Working Directory의 약자입니다. 현재 내가 >위치한 디렉토리 위치를 출력합니다.
    • 👌ln: 파일에 대한 링크를 생성합니다.
    • 👌touch: 파일 접근 및 수정 시간을 변경합니다. 빈 파일을 만드는데도 사용할 수 있습니다.
    • 👌tar: 파일 및 폴더를 하나의 아카이브 파일로 통합하고 압축합니다.
    • 👌mount: 새로운 저장장치를 파일시스템으로서 추가합니다.
    • 👌rename: 여러 파일들의 이름을 규칙에 따라 한번에 변경합니다.
    • 👌df: 파일시스템의 남은 용량을 표시합니다.
  • 시스템 및 프로세스 제어
    • ❤️sudo: 이어지는 명령을 최고 관리자 권한으로 실행합니다.
    • ❤️apt-get: APT 패키지 관리자를 통해 공인 저장소에서 패 >키지를 가져다 설치하거나 제거합니다.
    • 👍ps: 현재 프로세스 목록을 출력합니다.
      • ps -e : 현재 터미널과 관련된 프로세스 목록 보여줌. (ps -ef : 부가정보까지 보여줌)
        • PID는 process ID 번호이고, TTY는 해당 프로세스가 붙어있는 teletype(터미널)입니다. 0번 가상 터미널(pts, pseudo teletype slave)에 우리가 방금 실행한 ps 명령어와, 해당 명령어를 실행한 셸 bash가 떠있습니다. TTY 칸에 ?가 표시된 프로세스들은 터미널에 부착되지 않은 프로세스들입니다 (from.aiffel)
    • 👍kill: PID에 해당하는 프로세스에 시그널을 보냅니다.
    • 👌fg: 배경에서 실행되는 작업을 전경(foreground)으로 가져옵니다.
    • 👌bg: 작업을 배경(backgound)으로 보냅니다.
    • 👌jobs: 전경 및 배경 작업의 목록을 표시합니다.
  • 기타
    • ❤️ssh: 원격으로 셸에 접속합니다.
    • 👍tmux: 여러 개의 셸 세션을 관리하고, 터미널 접속이 끊어지더라도 셸 세션을 유지합니다.
    • 👍watch: 이어지는 명령을 주기적으로 실행하여 표시합니다.
    • 👍curl: 주어진 URL과 통신합니다.
    • 👍wget: 네트워크를 통해 파일을 다운로드합니다.
    • 👍scp: SSH를 통해 원격으로 파일을 전송합니다.
    • 👌ssh-keygen: SSH 공개키 비밀키 쌍을 생성합니다.
    • 👌ssh-copy: SSH 공개키를 해당 서버에 등록합니다.
    • 👌rsync: 원격으로 파일을 동기화합니다.
    • 👌xarg: 명령어를 구성하여 실행합니다. 이전 명령에서 인자를 넘겨받아 실행하거나, 다중 프로세스를 사용하여 명령을 병렬로 실행하는 등의 작업이 가능합니다.
    • 👌cron: 주기적으로 실행될 명령을 등록합니다.
    • 👌htop: 프로세스 목록 및 자원 사용량을 시각적으로 표시합니다.
  • 확장자 관련
    • /home: 사용자별 홈 디렉토리들이 있는 곳
    • /root: 최고 관리자 계정의 홈 디렉토리
    • /mnt: 저장장치(HDD, SSD)가 붙는 위치
    • /media: 이동식 미디어(USB 드라이브)가 붙는 위치
    • /tmp: 재부팅 시 삭제될 임시 파일들을 저장하는 폴더
    • /dev: 컴퓨터에 연결된 하드웨어 및 가상 기기(device)들을 가리키는 파일들
    • /proc: 현재 실행 중인 프로세스들을 가리키는 파일들
    • /etc: 각종 설정 파일들
    • /bin: 실행 가능한 프로그램(binary)들
    • /sbin: 시스템 관리용 프로그램들
    • /usr: 다중 사용자 모드에서 사용 가능한 파일 및 프로그램들 (root 계정만 있는 단일 사용자 모드에서는 사용 불가)
    • /var: 캐시, 로그 등 시스템 구동 간 계속 내용이 바뀌는 파일들

 


Practice

  • Titanic.csv에서 male & female 각각 몇명인지 count 하기
    • tail titanic.csv | cut -d ',' -f 6 | sort | uniq -c
      • 타이타닉 자료 가져오는데 첫번째 인덱스 빼고 두번째 줄부터 가져오고 |
      • cut 하는데 -d(delimiter) 지정한 문자열 , 을 구분자로 사용해서 나눈 후에, -c(characters) 문자열로 다시 나누고,
      • sort 할때
      • 문자열 겹치는것 빼고 세줘
  • Brown이 성인 사람 몇명인지 count 하기
    • cat titanic.csv | grep 'Brown' | wc -w
      • cat txt파일을 순서대로 출력하는데
      • 'Brown'이라는 글자가 들어간 것 grouping 해주고
      • wc (word count) -w 파일의 갯수를 세어줘

728x90

댓글