전체 글 586

The linux command line - 29. Flow control: looping with while/until

29. Flow control: looping with while/until 이전 챕터까지 menu-deriven program을 만들었지만 여전히 많은 문제를 가지고 있음. 그 중 하나는 single choice만 받고 바로 종료되어버리는것. 잘못된 정보가 입력되면 다시 시도할 기회를 주지 않고 에러 코드와 함께 바로 종료된다. 사용자가 프로그램을 종료 할 때까지 메뉴 표시, 선택을 반본적으로 할 수 있으면 더 좋을것. 이는 많은 프로그래밍 언어에서 looping 개념으로 구현되어있는데 쉘에서도 looping을 위한 세 가지 명령어를 제공해줌. looping while simple example for while in shell script #!/bin/bash # while-count: display..

backend/ubuntu 2021.05.30

The Linux Command Line: 28. Reading keyboard input - 2. IFS, validation, menu

IFS 보통 shell은 read의 input을 쪼개서 전달한다. 이는 IFS(Internal Field Seperator)라는 shell variable로 설정된다. IFS는 기본값은 스페이스, 탭, newline characher이다. 이를 변경하여 read의 input을 나누는 필드를 변경할 수 있다. 예를들면 /etc/passwd 파일은 colon (:)을 필드 seperator로 사용한다. IFS를 single colon으로 변경하여 /etc/passwd의 내용을 read로 전달할 수 있다. 아래는 이를 구현한 스크립트. #!/bin/bash # read-ifs: read fields from a file FILE=/etc/passwd read -p "Enter a username > " use..

backend/ubuntu 2021.05.23

The Linux Command Line: 28. Reading keyboard input - 1. Read command

28. Reading Keyboard Input 지금까지 만든 프로그램들은 interactivity가 없었다. interactivity: user가 프로그램과 상호작용 할 수 있는 기능 대부분의 프로그램은 interactive 할 필요가 없지만, 특정 프로그램은 사용자에게 input을 직접 전달받아야한다. 이전 챕터에서 작성했던 예시 스크립트를 보자. #!/bin/bash # test-integer2: evaluate the value of an integer. INT=-5 if [[ "$INT" =~ ^-?[0-9]+$ ]]; then if [ "$INT" -eq 0 ]; then echo "INT is zero." else if [ "$INT" -lt 0 ]; then echo "INT is nega..

카테고리 없음 2021.05.16

linux command line: branching - shell script로 flow control 하기

27. Flow control: branching with if 위에서 만든 스크립트에서 user의 권한에 따라 스크립트의 내용을 변경해야 한다고 생각해보자. programming 용어로 branch가 필요하다. If statement pseudo code로 아래와 같은 내용을 생각 X = 5 If X = 5 then: Say "X equals 5." Otherwise: Say "X is not equal to 5"shell에서는 이를 if/else문을 이용해 나타낼 수 있음. x=5 if [ "$x" -eq 5 ]; then echo "x equals 5." else echo "x does not equal 5." fi이는 command line에서도 동일하게 사용할 수 있다. $ x=5 $ if [ ..

카테고리 없음 2021.05.09

The linux command line 26장: Shell script (top-down design)

26. Top-down design 프로그램이 점점 커지고 복잡해지면, 디자인하고 유지보수하기가 점점더 어려워짐. top-down design: 상위의 단계부터 정의하고 디테일한 단계로 내려오는 방식을 얘기함 크고 복잡한 작업을 작고 간단한 작업으로 쪼갤 수 있음 쉘스크립트를 포함한 많은 프로그램을 디자인할 때 쓰이는 방법 Shell functions 이전 블로그 포스트에서 만들었던 report program은 다음 단계로 쪼갤 수 있따. Open page. Open page header. Set page title. Close page header. Open page body. Output page heading. Output timestamp. Close page body. Close page 다음 ..

카테고리 없음 2021.05.02

linux: shell script로 프로그램 만들어보기

25. Starting a project 해당 챕터에서는 실제 프로그램을 만들어봄. report generator: system과 status에 대한 다양한 통계를 HTML 포맷으로 생성해주는 프로그램 First stage: minimul document Page body. 간단한 html을 만들어보자. (foo.html) 이 파일의 경로를 입력하면 firefox나 chrome 등의 브라우저에서 열 수 있다. (file://hoem/username//foo.html) 프로그램의 첫번째 스테이지는 standard output으로 이 HTML 파일을 보내게 하는 것이다. ~/bin/sys_info_page라는 파일을 만들고 수정해보자. #!/bin/bash # Program to output a system..

tools/linux 2021.04.25

Nand2tetris: 03. Memory

3.1. Sequential Logic Combinational Logic 지금까지는 시간에 대한 문제는 생각하지 않았음 input이 있고, output은 그냥 intput의 function 계산 이전에 다른 일들이 발생할 일이 없음 "즉시" 계산됨 -> 이를 "Combinational Logic" 이라고 함 하지만, 실제 세상에서는 "time"을 고려해야함 Hello, Time 크게 두가지를 고려해야됨 같은 hardware를 사용함 input은 변하고 output은 따라와야됨 ex. for loop State를 기억해야함 memory counters ex. for loop에서 sum을 계속 더할때 The Clock Physical time 실제 세상에서의 시간 컴퓨터 세상에서는 이런 복잡한 physic..

리눅스 프로세스 (Linux Process) - ps, aux, stat, top

10. Process 모던 os 는 보통 multitasking이다: 빠르게 프로그램을 스위칭하면서 한 가지보다 더 많은 일을 하고 있게 환상을 만드는 것 커널은 이를 process를 통해 관리: 프로세스는 리눅스가 CPU에서 다른 프로그램을 해당 순서까지 기다리게 관리해줌. 시스템이 시작되면 커널은 init이라는 프로그램을 실행시키는 프로세스를 시작함. (/etc에 있는 몇몇의 init script들을 실행) 대부분의 서비스들은 daemon program (유저 인터페이스 없이 백그라운드에서 실행되는 프로그램) 다른 프로그램을 실행시킬 수 있는 프로그램 (parent process가 child process를 생성함) 커널은 각각의 프로세스들이 정렬되게 정보를 유지함. ex) 각각의 프로세스는 proc..

카테고리 없음 2021.04.19

count files in linux: wc 명령어

count files in linux wc wc는 word count의 줄임말로 사용자가 지정한 행, 단어, 문자 수를 세는 프로그램. $ wc [-clmw] [file...]wc 옵션 파일명으로 사용되며 파일 이름을 적지 않으면 standard input으로 정보를 받아들여서 계산한다. 옵션은 다음과 같음 -l: line -w: word -c: character예시 주로 파일 안의 line을 읽을 때 사용한다. wc -l를 사용하여 디렉토리의 파일의 개수를 셀 수 있음. # 현재 디렉토리 내부의 파일 개수 ls | wc -k # find 한 파일의 개수 (서브 디렉토리안의 파일을 포함한 현재 디렉토리 안의 모든 파일 개수) find . -type f | wc -kex. /var/log 디렉토리에 확장자..

카테고리 없음 2021.04.11

알고리즘 기초: 이진트리 (Binary Search)란? (+파이썬코드)

Binary search 순차탐색: 특정 데이터를 찾기 위해서 앞에서부터 확인하는 방법 이진탐색: 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 시작점, 끝점, 중간점 ex. 이미 정렬된 10개의 데이터 중 값이 4인 원소를 찾는 예시 시작접: 0, 끝점: 9, 중간점 4 (index) 중간점을 기준으로 다시 끝점, 중간점을 옮김 시간복잡도: logN (단계마다 탐색범위를 2로 나누는 것) 이진탐색 소스: 재귀적 구현 def binary_search(array, target, start, end): if start > end: return None mid = (start + end) // 2 # 찾은 경우 중간점 인덱스 반환 if array[mid] == target: return mid # 중간점..