https://codeup.kr/problemsetsol.php?psid=23

 

코드업

코드업은 프로그래밍을 배우고 싶은 사람들을 위한 온라인 학습 플랫폼입니다.

codeup.kr

 

문제집 : C언어 기초 100제

(정보컴퓨터 교사 연구회/카페에서 만든 C언어 기초 100제 입니다. 초급자 코스로 추천합니다.)

Y
1001
기초100
53.7%
Y
1002
기초100
65.9%
Y
1003
기초100
57.2%
Y
1004
기초100
56.2%
Y
1005
기초100
41.8%
Y
1006
기초100
45.5%
Y
1007
기초100
46.4%
Y
1008
기초100
39.3%
Y
1010
기초100
51.3%
Y
1011
기초100
58.3%
Y
1012
기초100
57.2%
Y
1013
기초100
54.2%
Y
1014
기초100
54.7%
Y
1015
기초100
44.1%
Y
1017
기초100
54.2%
Y
1018
기초100
51.3%
Y
1019
기초100
34.2%
Y
1020
기초100
40%
Y
1021
기초100
61.3%
Y
1022
기초100
62.7%
Y
1023
기초100
44.8%
Y
1024
기초100
34.3%
Y
1025
기초100
46.2%
Y
1026
기초100
61%
Y
1027
기초100
53.9%
 
1028
기초100
69.6%
 
1029
기초100
41.8%
 
1030
기초100
78.2%
 
1031
기초100
77.1%
 
1032
기초100
84.5%
 
1033
기초100
77.1%
 
1034
기초100
84.5%
 
1035
기초100
82.6%
 
1036
기초100
72.6%
 
1037
기초100
64.2%
 
1038
기초100
35.2%
 
1039
기초100
60.7%
 
1040
기초100
81.2%
 
1041
기초100
62.5%
 
1042
기초100
48.3%
 
1043
기초100
75.4%
 
1044
기초100
44.5%
 
1045
기초100
37.3%
 
1046
기초100
39.5%
 
1047
기초100
72%
 
1048
기초100
70.1%
 
1049
기초100
60.5%
 
1050
기초100
71.8%
 
1051
기초100
69.4%
 
1052
기초100
78%
 
1053
기초100
68.1%
 
1054
기초100
64.8%
 
1055
기초100
79.6%
 
1056
기초100
69.1%
 
1057
기초100
68.9%
 
1058
기초100
57.2%
 
1059
기초100
79.4%
 
1060
기초100
70%
 
1061
기초100
77.1%
 
1062
기초100
86.9%
 
1063
기초100
74.5%
 
1064
기초100
50.1%
 
1065
기초100
45.9%
 
1066
기초100
50.8%
 
1067
기초100
52.6%
 
1068
기초100
52.9%
 
1069
기초100
42.5%
 
1070
기초100
52.2%
 
1071
기초100
36.4%
 
1072
기초100
43.4%
 
1073
기초100
42.2%
 
1074
기초100
55.3%
 
1075
기초100
56.5%
 
1076
기초100
41.6%
 
1077
기초100
55.4%
 
1078
기초100
47.3%
 
1079
기초100
30.5%
 
1080
기초100
39%
 
1081
기초100
53.7%
 
1082
기초100
42.9%
 
1083
기초100
45.7%
 
1084
기초100
48.1%
 
1085
기초100
32.7%
 
1086
기초100
64%
 
1087
기초100
57.8%
 
1088
기초100
59.7%
 
1089
기초100
58.8%
 
1090
기초100
27.9%
 
1091
기초100
44.7%
 
1092
기초100
60.7%
 
1093
기초100
45.6%
 
1094
기초100
33.9%
 
1095
기초100
51%
 
1096
기초100
47.6%
 
1097
기초100
35.4%
 
1098
기초100
36.8%
 
1099
기초100
22.5%

4장 파일과 디렉터리
4.1 파일 시스템
4.2 리눅스의 파일 계층 구조
4.3 파일의 종류

 

파일시스템은 파일을 관리하는 시스템이고 운영체제마다 다름

 

 

코딩 입문하는 친구와 함께 코딩 자율학습단에 참여하고싶어서 책을 구매했다.

혼자 공부하려고 책을 구매하면 진도가 하염없이 밀리다가 결국 완독하지 못하고 방치하게 되는데, 코딩 자율학습 시리즈는 코딩 자율학습단이라는 학습 관리 프로그램에 참여가 가능한 것이 큰 장점인 것 같다.

친구는 sql, 나는 리눅스를 공부하기로 했다.

리눅스 수업은 2학년 때 들었지만 거의 기억이 나지 않아서 다시 제대로 공부하고자 골라보았다.

 

 

친절한 설명은 당연하고, 각 장마다 배운 내용을 복습해볼 수 있는 퀴즈와 마무리 정리 챕터가 있어서 효율적으로 공부할 수 있다.

한달동안 꼭 완독하고 cs지식을 탄탄히 쌓아가고싶다.

완독 후 다음 책은 스프링부트를 해보고싶다.

https://product.kyobobook.co.kr/detail/S000214004379

 

코딩 자율학습 리눅스 입문 with 우분투 | 런잇 - 교보문고

코딩 자율학습 리눅스 입문 with 우분투 | 기초부터 탄탄하게! 실습하며 배우는 리눅스 입문서리눅스에 처음 도전하는 분을 위한 입문용 책입니다. 따라 하기 쉽도록 입문자 눈높이에서 이해하기

product.kyobobook.co.kr

 

3장 셸

3.1 터미널과 셸
3.2 셸 스크립트
3.3 명령어

 

셸(shell)이란?

운영체제가 제공하는 명령어 기반 인터페이스 (CLI)이다.

 

3.1 터미널과 셸

 

3.1.1 터미널

 

터미널: 컴퓨터와 사용자 간에 상호작용 할 수 있게 연결하는 장치

 

초기 컴퓨터의 입력장치는 천공카드

1960~70년대에는 키보드와 모니터가 결합된 터미널을 널리 사용

https://techrecipe.co.kr/posts/67199

 

검은 배경에 흰 글씨…터미널이 탄생한 배경 - 테크레시피

PC를 이용한 애플리케이션 개발이나 파일 조작 등을 할 때, 사용자가 텍스트 기반으로 명령어를 입력해 컴퓨터 시스템이나 애플리케이션을 제어하기 위한 호스트 애플리케이션 터미널(Terminal)이

techrecipe.co.kr

계산은 메인프레임이라는 대형 컴퓨터에서 하고 단순 입출력 도구였음

 

윈도우의 명령 프롬프트같이 소프트웨어로 동작하는 터미널은 가상 터미널 프로그램이라고 한다.

 

가상머신에서 리눅스를 실행하면 리눅스 창이 가상 머신의 터미널이고 가상머신의 리눅스에서 터미널 프로그램을 실행하면 그것은 가상머신의 가상 터미널이다..

 

터미널의 역할: 입출력 인터페이스 제공, 세션관리

 

 

 

3.1.2 셸

 

셸을 통해 사용자가 운영체제에 명령을 내리고 결과를 확인한다.

터미널은 컴퓨터-사용자 간 상호작용 하는 하드웨어

셸은 운영체제-사용자 간 상호작용 하는 소프트웨어

 

셸의 역할: 명령어해석, 스크립트 실행, 프로그램 실행 관리, 환경설정관리

 

1971년 켄 톰프슨이 유닉스용 셸인 톰프슨 셸 개발 (단순히 결과 해석, 출력만)

1977년 스티븐 본의 본 셸 (현대적인 셸, 흐름제어 및 변수 등을 사용할 수 있게 개선해 스크립팅이 가능했음)

 

이후로 Csh, Ksh, Ash, Bash 등 개발함

 

Bash를 배우면 거의 모든 리눅스를 다룰 수 있다.

 

 

 

3.1.3 터미널과 셸의 관계

 

터미널은 사용자와 컴퓨터가 상호작용하기 위한 매체

CLI기반 운영체제는 셸을 실행하고 사용자는 셸을 통해 운영체제에 여러 명령을 내릴 수 있다.

터미널은 쉘을 실행하고 명령을 입력할 수 있게 해주는 포장(Wapper) 프로그램이다.

 

네트워크로 연결된 운영체제에 원격으로 터미널을 연결하는 방법은 과거에는 텔넷, 근래에는 보안 기능이 추가된 SSH 등의 방법이 있다.

 


3.2 셸 스크립트

 

여러 명령을 한 파일에 모아 실행하는 방식이므로 자동화가 가능

다른 프로그램이 셸 스크립트를 실행할 수도 있다. 예) cron, crond, crontab

중요한 작업을 셸 스크립트로 만들어 휴먼 에러(human error)를 방지

 

셸은 프로그래밍 언어라고 하기는 어렵지만, 프로그래밍언어의 요소들을 이용해 정교한 작업 수행 가능

 

3.2.1 실습

 

~$ echo "hello"

 

echo는 입력한 텍스트나 변수를 화면에 출력하는 기능이다.

 

nano 셸 편집기를 이용해 hello라는 이름의 셸 스크립트 작성

~$ nano hello.sh

ctrl+x 하면 파일이 닫히며 저장 확인 메시지가 뜬다.

 

chmod로 파일 읽기 권한을 준 후 셸 스크립트를 실행해보았다.

 

 

hello라는 이름의 셸 스크립트 처음에 적은 #!/bin/bash의 의미:

더보기

shabang이라고 한다.

확장자가 없거나 확장자가 sh가 아닌 파일도 셸 스크립트로 동작하게 해준다.

스크립트를 처리할 인터프리터를 지정하는 역할을 한다.

적지 않으면 /bin/sh 에 스크립트 실행을 맡기는데, 리눅스 배포판에 따라 해당 경로가 bash일 수도 아닐수도 있기 때문에 반드시 첫 줄에 지정해주는것이 좋다.

형식은 #!/인터프리터절대경로 이다.

 

첫 줄에 shabang을 지정한것과 아닌 것을 비교해보았는데 둘 다 실행이 잘 되어 찾아보니 /bin/sh가 bash여서 실행이 된 것 같다

음..좀 더 공부가 필요할 것 같다

 


3.3 기본 명령어

 

3.3.1 명령어 기본 형식

 

$ 명령어 [옵션] [인자]

옵션은 따로 적어도 되고 한번에 적어도 된다.

$ ls -a -l
$ ls -al

같은 결과가 나온다.

 

3.3.2 man

 

manual의 약자

man cat 하면 cat 명령어의 사용법을 알려줌

--help는 간단한 설명서고 man은 자세한 설명서다

 

3.3.3 ls

 

진짜 많이 쓰는 명령어다

list

파일 목록 조회 명령어

-a: 모든 파일 (숨긴 파일까지)

-l: 파일 속성을 포함한 모든 파일

-t: 최신생성순

-R: 하위 모든 디렉터리 순회

-h: kb, mb, gb등의 단위를 써서 파일 출력

 

ls a*: a로 시작하는 파일 조회

 

3.3.4 cd

이것도 많이씀

change directory

 

3.3.5 pwd

현재 경로를 절대경로로 조회

 

3.3.6 cat

파일의 내용을 연결하거나 조회

cat [option] [filename]

-n: 파일 내용에 줄 번호를 출력함

 

파일 이름을 둘 이상 입력하면 두개의 파일이 연속해서 출력됨

 

3.3.7 exit

현재 실행중인 셸을 종료

exit [종료코드]

 

종료코드란: 프로세스의 유언...

 

3.3.8 nano

텍스트 편집기

nano [filename]

있는 파일 이름을 입력하면 그 파일을 열고 없으면 새 파일을 생성한다.

vim emacs에 비해 다루기 쉽지만 기능이 단순함

 

리눅스 수업에서 vim을 다뤄봤는데 nano가 훨씬 간편하긴 하다.

 

 

1분퀴즈

1. o

2. ? x

3. o

4. x

5. x

6. o

모두정답이당

ls는 현재 로그인한 사용자의 파일만 조회하는게 아닌 모든 사용자의 파일을 조회함

2장 리눅스 실습 환경 구축하기

2.1 리눅스 실습환경 구축 방법
2.2 실습: 가상 머신에 리닉스 설치하기

 

2.1 실습환경 구축

 

구축 방법은 컴퓨터에 직접 설치하거나 가상머신을 사용하거나 클라우드서비스로 리눅스인스턴스를 생성하는 방법이 있다.

가장 간단한건 가상머신을 사용하는것이다

 

책에 따라 우분투 데스크톱  24.04lts 버전과 버츄얼박스 7.0.18버전을 설치했다.

버츄얼박스 구버전은 아래에서 찾을 수 있다.

Download_Old_Builds_7_0 – Oracle VirtualBox

 

Download_Old_Builds_7_0 – Oracle VirtualBox

Download VirtualBox (Old Builds): VirtualBox 7.0 The Extension Packs in this section are released under the VirtualBox Personal Use and Evaluation License. All other binaries are released under the terms of the GPL version 3. By downloading, you agree to t

www.virtualbox.org

 

 

가상머신이 추가되었다. 전원을 켠다.

 

 

 

 

 

부팅하니 에러나서 가상머신을 지웠다가 다시 설정했더니 우분투 설정 화면이 제대로 떴다.

 

 

책의 매뉴얼에 따라 가상 확장 머신까지 설치를 완료했다.

 

파트 1 시작이다.

 

1장 리눅스 소개

1.1 운영체제란
1.2 리눅스 배포판
1.3 리눅스의 쓰임과 학습 이유

 

1장 리눅스 소개

 

1.1 운영체제란

 

운영체제: 하드웨어와 소프트웨어 자원을 관리하는 시스템 소프트웨어

 

운영체제는 사용자-애플리케이션과 하드웨어의 사이에 있다.

 

시스템 소프트웨어(운영체제, 장치드라이버) 위에 응용 소프트웨어(애플리케이션)가 있다.

사용자가 직접 사용할 수 있는 웹 브라우저나 엑셀 등이 애플리케이션이다.

 

다양한 하드웨어에서 작동할 수 있어야 하고, 다양한 어플리케이션이 작동할 수 있는 환경을 만들어주는 등 하는 일이 많아서 규모가 크다.

 

운영체제의 기본 기능은 하드웨어 자원 관리이다.

 

1.1.1 운영 체제의 구성 요소

 

▶ 커널

하드웨어를 초기화해 사용할 수 있게 하는 운영체제의 핵심

커널이 제공하는 기능은 커널 서브시스템이라고 한다.

 

- 주요 커널 서브시스템

1. 프로세스 관리

2. 메모리 관리

3. 파일 시스템 관리

4. 장치 드라이버

5. 네트워킹

 

▶ 장치 드라이버

하드웨어 장치(그래픽 카드, 마우스, 키보드 등)를 초기화하고 운영체제와의 통신을 담당하는 소프트웨어

 

컴퓨터에서 장치를 사용하려면 적합한 장치 드라이버가 필요하다.

 

파일 시스템

file:  정보를 저장하는 기본 단위

file system: HDD, SSD등 저장 장치에 파일을 저장하고 관리하는 소프트웨어

 

- 주요 파일 시스템

1. FAT: 마이크로소프트에서 개발, 파일 할당 테이블(FAT)를 이용해 파일 관리

2. NTFS: FAT를 개선

3. EXT4: 확장 파일 시스템의 4번째 버전, 리눅스에서 주로 사용

4. XFS: Silicon Graphics, Inc에서 개발한 고성능 파일 시스템, 현재 대부분의 리눅스 운영체제에서 지원함

5. ZFS: 솔라리스 운영체제에서 사용

 

네트워크 시스템

- 네트워크 드라이버: 장치 드라이버

- 네트워크 스택: 네트워크 트래픽을 처리하는 네트워크 프로토콜을 구현한 소프트웨어

- 네트워크 프로토콜: 통신 규약

 

 

1.1.2 운영체제의 역할

 

▶ 프로그램 실행과 멀티태스킹

- 프로세스: CPU가 프로그램의 실행 코드를 실행중인 프로그램

CPU는 한번에 한 프로그램만 실행할 수 있다. 그러나 여러 프로세스를 실행할 수 있게 하는 방법이 있다.

여러 프로세스를 동시에 처리하는 대신 돌아가면서 실행한다.

 

프로세스 여러 개 중 하나를 선택해서 처리하는것: 프로세스 스케줄링

어떤 프로세스를 선택할지 결정: 스케줄링 알고리즘

스케줄링을 실행하는 주체: 프로세스 스케줄러

프로세스 스케줄링을 통해 여러 프로세스를 동시에 처리하는 것: 멀티태스킹

 

스레드(thread)는 프로세스 내에서 실행되는 가장 작은 실행 단위

 

멀티 태스킹(multi tasking): 멀티 프로세싱(multi processing)과 멀티 스레딩(multi threading)

 

 

▶ 인터럽트

하드웨어가 소프트웨어에 보내는 신호

주로 하드웨어에 이벤트가 발생했을 때 보낸다.

인터럽트를 어떻게 처리하는 지는 장치드라이버에 정의한다.

 

인터럽트는 하드웨어에서 발생시키는 신호이므로 운영체제는 소프트웨어의 실행 상태에 관계 없이, 하던 일을 멈추고 인터럽트를 처리할 수 있어야한다.

 

▶ 메모리 관리

운영체제에서 실행되고 있는 수많은 프로그램이 요구하는 메모리를 관리하는 역할

메모리 주소 체계는 물리 메모리 주소, 가상 메모리 주소 등으로 구분하여 관리한다.

스와핑: 디스크에 저장된 데이터를 메모리로 복구해 사용하는것

 

더보기

가상메모리주소는 CPU가 생성하는 주소이고 물리 메모리 주소는 실제 RAM의 위치이다.

https://rebro.kr/178

 

[운영체제(OS)] 8. 메모리 관리(Memory Management)

[목차] 1. Address Binding 2. Swapping 3. Contiguous Allocation 4. Fragmentation 5. Paging 6. Translation Look-aside Buffer 7. Structure of the Page Table 8. Segmentation 참고) - https://parksb.github.io/article/12.html - KOCW 공개강의 (2014-1. 이

rebro.kr

 

메모리 할당 방법은 고정 분할, 가변 분할이 있는데 가변 분할은 first-fit, best-fit, worst-fit 세 가지 방법이 있다.

 

이외에도 메모리 관련한 용어는 단편화, 페이징, 세그멘테이션 등

 

사용자 인터페이스 제공

사람이 컴퓨터 시스템을 사용하게 하는 방법

- GUI 그래픽 사용자 인터페이스

- CLI 명령어 기반 인터페이스

 

 

 

1.2 리눅스 배포판

운영체제의 목적에 맞게 리눅스 커널에 여러 프로그램을 묶어 제공하는 패키지

리눅스 커널을 사용하는 운영체제만 리눅스라고 한다.

공통적으로 GNU 소프트웨어(유닉스와 호환되는 자유 소프트웨어: coreutils, bash, 등)를 탑재한다.

https://www.gnu.org/philosophy/free-sw.ko.html

 

https://www.gnu.org/philosophy/free-sw.ko.html

“자유 소프트웨어”의 핵심은 구속되지 않는다는 관점에서의 자유에 있는 것이지 무료라는 금전적인 측면에 있는 것이 아닙니다. 우리가 의도하는 이러한 자유의 의미를 쉽게 이해하기 위해

www.gnu.org

 

-종류

레드햇 리눅스 (대표적인 유료 배포판, 기업에서 주로 사용)

CentOS (무료, 새로운 배포판이 출시됨)

Ubuntu (대표적인 무료 리눅스, 많이 사용)

Debian

openSUSE 등

 

1.3 리눅스의 쓰임과 학습 이유

 

 서버

 클라우드컴퓨팅

임베디드 시스템 (운영체제가 가벼움)

모바일 기기 (안드로이드 등의 기반이 됨)

 

 

+ Recent posts