AIFFEL - Linux OS

JoBoB·2023년 11월 6일
0

AIFFEL - Python

목록 보기
1/10
post-thumbnail

AIFFEL에서 공부한 Linux OS에 대해 정리해보자


디저털 월드로!

  • echo : 입력한 내용을 출력
echo 'Hello?'
  • pwd : Present Working Directory, 현재 directory 위치 출력
pwd

/ : 리눅스에서 폴더 구분 방법 (BackSlash)

home directory
리눅스에서 멀티 사용자에게 할당하는 독립적인 공간
보통 /home/username (= ~) 표현 (맨 앞에 backslashroot 폴더)


root : 현재 사용자명
wt~ : 호스트명 ( IP주소를 URL로 부르듯이 별칭 부여, hostname 명령어로 확인 가능)
#은 최고 관리자를 의미
$는 일반 사용자를 의미


  • ls : 현재 디렉토리 내 파일 및 폴더 출력

현재 home directory에서는 aiffel, data 폴더와 파일로 구성되어 있다.

옵션
-a : 숨긴 파일까지 모두 보여줌 (--all)
-l : 자세한 정보들 출력
-h : 파일 크기 출력
-t : 수정시간 순 정렬
-r : 뒤집어 정렬

-rt : 오래된 파일이 위로 오도록 정렬

ls (directory_name)

project 안에 폴더와 파일 출력 ( project에서 ls 진행한 것과 동일 )


  • cd : change directory, 위치 이동을 할 때 사용하는 명령어
cd (이동할 directory)

현재 'AIFFEL'에서 'project'로 이동

상대경로와 절대경로

상대경로 : 내 위치에 따라 영향을 받는 경로 ( . , .. )
절대경로 : 내 위치와 관계없이 절대적인 경로 ( /home/jobob 등 )


리눅스 운영체제

운영체제 ( Operating System : OS )

하드웨어와 소프트웨어를 관리하는 실행 관리자를 의미
작업 순서를 결정 ( CPU, GPU 등에 작업 할당 )

  • 집사장에 비유해서 설명하면, 집사장이 관리직에게 의,식,주를 분배해서 저택을 돌아가게 한다.

  • OS (kernael) 또한 cpu, memory 같은 자원을 분배해서 application 들에게 작업을 할당한다.

  • 프로그램은 명령 코드의 집합, OS 와 Application 으로 구성


  • 이 때, 메모리는 크게 RAM (휘발성 메모리), ROM (비휘발성 메모리) 로 구성되어 있고
  • ROM은 SSD와 HDD로 나눠진다.

Kernel & Shell

Kernel : 하드웨어에 접근이 가능하며, 자원을 효율적으로 분배하는 OS의 가장 핵심적인 역할 담당 ( Ubuntu가 OS, Linux가 kernel 이다. )

Shell : 커널이 사용하는 명령어와 프로그래밍 언어를 서로 해석 및 전달

GUI Shell : 그래픽(아이콘)을 통해 소통 = Windows Interface 등
CLI Shell : I/O를 통해 소통 = cmd창, Power Shell 등


터미널 ( Terminal )

터미널 의미
과거 : 컴퓨터의 끝부분에서 I/O가 일어나는 단말 하드웨어
현재 : Terminal 기기에 기능을 모사하는 소프트웨어 (terminal emulator라고 볼수 있음)

emulator : 장치를 모방하는 프로그램


프로세스 관리 & 시스템 콜

  • ps : 실행 중인 프로세스 목록 출력

옵션
-e : 모든 프로세스
-f : 추가정보

출력 내용
UID : 해당 프로세스를 실행한 사용자 ID
PID : 프로세스 ID
PPID : 상위 프로세스 ID
C : cpu 사용률
STIME : 프로세스 시작 시간
TTY : 프로세스가 있는 터미널 번호
TIME : cpu 사용시간
CMD : 프로세스 실행 명령어


  • sudo : Super User DO ( Shut Up and DO )
             관리자 권한으로 실행
sudo kill -s KILL 31

kill : 프로세스에 신호를 보내는 명령어
-s : 보낼 내용 기입
KILL 31 : PID가 31인 프로세스 다운

system call : 프로세스가( application ) hardware에 접근하기 위해 kernel에게 요청할                   때 사용하는 인터페이스


  • grep : 로그나 텍스트 파일에서 찾고 싶은 문자열을 찾아서 문자열 출력
[directory or log ] | grep 'want to find word' 

'grep --help' 로그에서 'grep'이라는 문자열 찾아서 출력


프로그램과 환경변수

  • which : 명령어 전체 경로 ( 셀 제공 명령어는 경로 출력 X )
which [확인하고 싶은 명령어]

ls 명령어는 /usr/bin/ls 경로에서 실행

반면 cd 명령어는 셀 제공 명령어라서 디렉토리 경로에서 찾을 수 없어 출력 불가

명령어가 실행되는 과정
1. 셀 내에서 제공하는 명령어인지 먼저 확인 ( cd 등 )
2. 셀 내부에서 없다면, 설치된 프로그램에서 확인 후 실행
3. 설치 프로그램에서 없다면, 오류문 출력


$ ( 환경변수 )

  • 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값
  • OS의 환경 설정과 관련된 정보를 가지고 있다.
  • Shell에 저장된다.
  • env : 설정된 모든 환경 변수 출력

  • echo $ [환경변수] : 환경변수 값 출력
echo $PATH 

$PATH 라는 환경변수를 출력

경로들을 ':' 로 구분해서 출력, 동일한 이름의 프로그램이라도 앞에 있는 경로를 우선

+) 여기서 나오는 /bin directory는 ls (list), cp (copy), mv (move) 등 기본적인 shell     명령 실행 파일


  • export PATH=[ 추가할 경로 ]:$PATH

export : shell 변수를 환경변수로 저장

$PATH에 ' /aiffel: ' 경로 추가

일시적인 수정, shell 창을 닫게 되면 일시적으로 추가한 경로 삭제
영구적인 변경은 window에 경우, 환경변수 설정 창을 켜서 $PATH 변경 필요


패키지 관리자

프로그램과 라이브러리를 설치하고 관리하고 삭제도 해줄 수 있는 관리자
( Windows - Chocolatey / Ubuntu - APT )

+) 라이브러리 : 소프트웨어 개발시, 프로그램이 사용하는 비휘발성 자원들
                     ( 데이터, 문서, 코드, 함수, 클래스 등 )


  • apt-get : APT 관리자를 통해 공인 저장소에서 패키지 설치 및 제거
# 설치와 실행
sudo apt-get update    # 공인 저장소에 있는 패키지 목록 최신화
sudo apt-get install [설치할 패키지]    # 패키지 다운로드
[다운로드한 패키지]    # 다운받은 패키지 실행

# 삭제
sudo apt-get remove [삭제할 패키지]    # 패키지 삭제
sudo apt-get purge [삭제할 패키지]    # 설정 파일까지 모두 삭제

사용자와 권한

Unix 계열 컴퓨터들은 사무용과 서버용으로 많이 사용되어 여러 사용자가 한번에 작업
-> 사용자 (user)를 나누고 권한을 관리해야 함

ps -ef   # 프로세스가 어떤 사용자로부터 실행되었는지 확인 가능

몇몇 권한들은 사용자에게 없고 오직 최고관리자( superuser )만 가지고 있음
( 호칭 : Windows - Administrator / Unix - root )

최고관리자 권한을 얻기 위해 Windows는 '관리자 권한으로 실행', Unix는 'sudo' 사용


group
파일이나 폴더를 특정 사용자들끼리 공유하기 위해 사용
사용자들을 관리하기 위한 단위

cat /etc/group
  • cat : 하나 이상의 text 파일을 순서대로 출력

/etc/group directory에 있는 값들을 출력


접근권한
차후에 cloud shell 에서 정리


약간의 하드웨어

CPU ( Central Processing Unit ) : 중앙 처리 장치

기계어 : CPU가 처리하는 명령어
           ( Assembly 어 : 기계어와 매칭되는 저급 언어 )

GPU : 코어 여러 개를 병렬로 동작
        딥러닝의 행렬 계산 처리와 같이 간단한 계산에 특화
        ( CPU가 박사 10명이면, GPU는 초딩 1000명 )

차후 추가


셀 편의 기능

Ctrl - Shift - c / Ctrl - Shift - v : 복사 붙여넣기

명령 불러오기

  • ↑ / ↓ : 이전 명령 실행 가능
  • history : 실행했던 명령 표시
                ![명령어 번호] = 명령 실행

Ctrl - a / Ctrl - e : 커서 앞,뒤로 이동

clear : 화면 지우기


셀 심화 - 연습문제

현재 제 data 부분은 workplace/titanic.txt 에 들어있습니다.

Q1. tail을 활용하여 첫번째 줄을 배제한 나머지 줄에서 여성과 남성의 수 출력

cd workplace
ls -l
tail -n +2 titanic.txt | cut -d ',' -f 6 | sort | uniq -c
  • tail : 파일에 마지막 부분을 출력하는 명령어

옵션
-n [라인 수] : 파일의 마지막 줄부터 지정한 라인 수 까지 출력한다.
-c [바이트 수] : 파일의 마지막 줄부터 지정한 바이트 수까지 출력한다.

  • cut : 특정 데이터 부분만 출력하는 등 데이터 가공 시 사용

옵션
-c : 문자열 자르기
-d : 필드를 구분하는 문자인 구분자를 설정하는 옵션
-f : 지정된 필드를 출력하는 옵션

  • sort : 파일의 내용을 정렬

  • uniq : 중복된 행이 있으면 삭제 ( 분산 중복은 찾지 못하니 sort 필수 )

옵션
-c : 같은 라인이 몇번 나오는지 출력

tail을 통해, 2번째 줄에서 마지막 줄까지만 반환하고
cut을 통해, 구분자를 ',' 로 삼아 6번째 열 (sex) 만 반환
sort를 통해, 정렬하고
uniq를 통해 중복 행들의 개수 반환


Q2. 성이 Brown인 사람의 숫자를 세어보기

cat titanic.txt | grep '"Brown' | wc -l
  • wc : 특정 파일 내에서 여러 기준에 따라 개수 출력

옵션
-c : 바이트의 개수 출력
-l : 행의 개수 출력
-w : 단어의 개수 출력

성만 출력해야 하기에, "을 추가하여 이름이 있는 부분을 filtering
이제 출력된 행의 개수를 세서 성의 개수를 센다.

profile
딥러닝을 메인으로 나아가고자 하는 뉴비입니다

0개의 댓글