goorm 6일차

박경현·2022년 8월 8일
0

리눅스라는 O/S에 대해서 깊게 살펴봤던 날이다.
커널과 쉘이 무엇이고 얼마나 많은 역할을 하는지 알게된 날이었다.

Linux접속방법

O/S Booting

o/s 프로그램을 메모리에 로드 한후 o/s를 실행하여 o/s가 동작하는 초기과정을 의미
처음 pc키면 몇 초 기다리는데 이때 O/S Booting된다고 생각하면 편하다!

직접접속 - 리눅스를 Desktop으로 쓸때 자주 씀

직접 Linux에 접속
ID/password입력을 통한 접속
자동 로그인 - 별도의 id/password 입력 안 해도 됨
비추!!

원격접속

네트워크를 이용한 접속
	일반적인 Linux접근사용 방법
	SSH(secure shell) client프로그램 이용
		SSH - 네트워크를 이용하여 원격 접속을 가능하게 하며 특히 공개키 암호화방식으로 접속하여 					보안이 강화된 접속 방법, 22번 포트를 활용 
				SSH client 프로그램
				 	windows - putty, xshell등
					Mac, Linux -  terminal프로그램 사용
	
    원격 접속을 위해서는 리눅스에 SSH sever프로그램이 동작하고 있어야가능 ->> 중요!!!
		Ubuntu는 ssh 서버프로그램이 기본 설치 되어 있지않다, 설치 후 별도 설치 필요
		CentOS는 ssh 서버 프로그램이 기본 설치 및 부팅시 자동 실행!
	SSH 클라이언트 프로그램사용방식은 CLI

Linux 구조

(리눅스를 운영한다는것은 shell을 이용하여 운영)

User space (커널을 제외한 프로그램이 동작하여 영역으로 사용자 모드로 프로그램 동작)

  • GNU C Limbrary(glib) - linux기본 라이브러리, 리눅스용 어플리케이션이 기본으로 사용되는 함수 집합

  • 사용자 라이브러리/어플리케이션- 사용자 s/w

  • shell - 사용자가 kernel에게 명령 전달 및 실행결과 확인용 프로그램
    터미널프로그램(윈도우프로그램)이 결국 shell을 동작시켜주는 GUI프로그램
    (터미널 != 쉘)

Kernel space(실행모드가 보호모드로 동작하여 일반 어플리 케이션이 직접 커널 영역 내용 사용 금지)

  • Kernel - H/W(cpu, I/o device, memory)제어

  • System Call Interface - 커널과 쉘 또는 라이브러리, 어플리케이션간 통신을 수행하는 함수 집합
    (커널과 일반 유저 어플리케이션이 통신할수있게 해주는 함수집합)

Linux kernel 구조

  1. 작업관리자 -> 커널의 핵심!

    CPU동작과 관련된 처리 담당
    프로그램 실행(process 생성) 및 관리 - Context
    Scheduler(스케쥴러)- multi process제어를 위한 기능, cpu동작에 연관 -> 핵심임
  2. 메모리 관리자 -> 이게 중심에 있고 작업관리자 파일시스템 네트워크 관리자 등 다 연결됨

    가상 메모리 관리
    리눅스의 모든 프로세스는 가상 메모리에서 동작한다
    가상 메모리와 물리 메모리 연결 관리를 수행
  3. 파일 시스템 -> 많이 하게 될내용!

    리눅스는 모든 I/O device를 파일 형태로 관리
    파일 시스템을 통해 I/O device 내용 관리
    입력,출력,입출력을 파일형태로 관리 -> 장치에 상관없이 동일한 명령을 적용 할 수 있다
    (a b 장치가 서로 명령어가 다르다면 피곤함ㅜ 그래서 명령 자체를 동일시 시킴!)
  4. 네트워크 관리자
    네트워크 프로토콜 스택

  5. 디바이스 관리자

    H/W 연결 관리 프로그램(Device Driver)
    리눅스에서 관리하는 디바이스 유형
    	 블럭 디바이스
    	 캐릭터(character)디바이스

    쉘 명령은 커널 내용중 작업 관리자 메모리 관리자 파일 시스템에 대한 내용이 주를 이루고 필요에 따라 네트워크 관리자 디바이스 관리자를 사용할 수 있다.

리눅스 사용자 이해 (가장 이해 빠르게됨)

관리자(Supervisor)

	리눅스 시스템에 대한 모든 권한을 갖는 사용자
	관리자 ID는 root로 고정되어있으며 변경하거나 추가 관리자등록은 불가능
	배포판에 따라 관리자 login을 허용하지않는 배포판도 존재 - ubuntu
    
	shell명령 프롬프트는 # 으로 표기되어있다 , $는 일반 사용자!
	관리자 기본 홈 디렉토리는 /root사용(루트 밑에 루트라고 읽음)
	로그인 또는 관리자 계정 전환시 홈 위치는 /root
    
	왠만하면 로그인 하지말고 일반 유저로 로그인 하고 필요에 따라 
	관리자 권환 (sudo명령)획득 하거나 필요시 관리자 전환(su명령)을 통해 관리자 사용!
	
	sudo 명령 - 관리자 권한 획득 후 명령 수행 - sudo <명령>:명령은 관리자 권한정도의 명령
		입력하는 비밀번호는 로그인 사용자 비밀번호 사용!, 일반유저로 로그인 시에만 사용!
	
	su - root사용자로 전환, 비밀번호는 root 사용자 비밀번호 입력
	su - [<사용자 ID>] 대괄호는 옵션!! , su - worker / su - 이렇게 적으면 root임!

	우분투에서 apt-get update 라고 적으면 permission denied라고 함 -> 접근권환없다!
	명령을 수행할 권한이없다! -> 이럴때 sudo apt-get update라고 하는거!	

일반 사용자

	관리자외 별도로 등록된 사용자를 의미
	일반유저의 권한의 작업만 수행가능
	shell명령 프롬프트는  $임!
	일반 유저 홈 디렉토리는 /home/<사용자ID>
	로그인시 홈 위치는 /home/<사용자ID>
	pwd명령
		현재 디렉토리 경로 출력 명령

Shell

linux kernel과 사용자 사이의 상호 작용을 위해 사용하는 리눅스 응용프로그램

쉘은 독립된 리눅스 응용 프로그램이므로 필요시 쉘을 변경하여 사용할 수 있다

현재 리눅스 기본 표준 shell은 bash(Bourne-again shell)사용(표준 shell은 sh)
리눅스 쉘의 종류는 다양하다 chs, zsh(MAC), bash,sh…

터미널 프로그램은 쉘을 실행하기 위한 윈도우 프로그램
현재 쉘을 확인하는 명령 - echo $SHELL -> /bin/bash라고 뜸 -> 
  • shell prompt

    		shell명령을 입력할 수 있도록 대기 상태를 의미
    		shell prompt가 표시되어야 다음 명령을입력할 수 있고,
    		shell prompt가 표시되지않으면 현재 명령을 수행하고 있다는 의미
  • shell prompt 형태

    		사용자@host이름: 현재 디렉토리 <$|#>
    		사용자 - 현재 사용자
    		호스트이름 - 현재 사용중인 linux system이름, ip address형식 또는 도메인으로 표기하기도 함(원격접속일때)
    		현재 디렉토리: 현재  위치한 디렉토리 이름
    		$ 아니면 #: 일반 유저 또는 관리자 
    		~: 현재 사용자의 홈디렉토리를 의미 
    		whomi : 현재 사용자 확인 명령어
    		쉘은 명령 history기능 제공
    			history
    				쉘에서 입력한 명령 히스토리 관리 -> 화살표
    				쉘에서 입력한 명령이 차례대로 쌓여진다
    				히스토리 관리대상명령개수는 환경설정에서 변경가능 -> 기본 1000개의 명령 히스토리 관리
    			
  • 쉘 단축키

    			ctrl + l - 터미널 화면을 지울 때 사용
    			ctrl + w - 입력명령을 단어 단위 삭제
    			ctrl + u - 입력 명령 전체 삭제
    			ctrl + c - 현재 동작중인 프로그램 강제 종료
    			ctrl + d - 현재 동작 중인 프로그램 종료 -> 정상 종료
    			명령 자동 완성 
    				- > tab - 입력된 문자를 갖는 명령에 대한 	자동ㅇf  완성 -> his까지 입력하고 탭 치면 하나만 있어서 history 변경
    				- > tab키 tab키 - 입력된 문자를 모두 포함하는 명령 목록 출력 -> 명령어 여러개면 명령어 종류 알려줌

알아두면 좋은 내용들

질문한것과 오늘 배운 내용 중 재밋는 내용들을 따로 모았다

소켓을 사용한 프로그램은 직접 채팅 프로그램을 위한 프로토콜을 만들어야한다!

System call interface에 직접 명령어를 만들려면 커널프로그래밍을 해서 별도로 추가해야함!
-> 운영 관점에서는 굳이 필요가 없다!

MAC OS인데 M1 M2면 virtual box를 사용할수없다! -> AMG여서 intel과 코어가 달라서!!
가상머신을 돌리는 프로그램이 따로 있긴 함 - utm을 사용하면 됨

32비트 cpu환경에서 커널 space 2GB, user space 2 GB메모리 할당 -> 4기가가 최대여서
-> 각각의 프로그램당 4기가씩 할당 -> 물리적으로 한계 있어서가상메모리를 씀! -> 실제로는 거의 다 못씀
물리메모리에서 현재 쓰지 않는 메모리는 스왑 파티션영역으로 옮겨버림!!! -> 메모리 관리자에서 스와핑에서함

입출력 장치는 서로 다른 명령어를 설정해두기는 함 -> 모든 입력은 다같은 명령어를 의미 / 모든 출력은 다같은 명령어를 의미

마우스를 이용한 작업은 실제로 굉장히 느리다!! -> GUI를 이용해서 직관적이지만 너무 느림 한계가있다 그래서 서버로만 쓰는 리눅스에서는 GUI의미가없다!

우분트 터미널에서 xeyes는 눈이 마우스 따라다니는 변태적인 눈임 -> 이건 강제 종료필요!

터미널에 history는 1000개가 넘어가면 가장 오래된것부터 사라짐! , 리부팅 해도 남아있다
아스키코드 -> 유니코드(2바이트), UTF-8대표적인 문자 encoding 1-3바이트 크기로 문자 저장, 영어/한글 혼용시 주로 사용
CP949 - 윈도우가 사용하는 문자 인코딩 방식 다른 o/s와 호환성이 떨어진다

셀프 피드백

양심상 오늘 오후에 파일 구조 설명해줄실때 졸아서ㅜㅋㅋ 그 부분은 안적었다

오늘은 리눅스의 전체부터 구체적은 부분들까지 살펴봤는데 운영체제가 아직은 완벽하게 익숙하지는 않아서 질문을 많이 할 수 밖에 없네ㅜㅋㅋ

터미널로 쉘을 운영할수있으며 이걸로 시스템 콜인터페이스를 이용해 커널을 조작할 수 있다!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글