콘텐츠로 건너뛰기
Home » 21세기소년 » Page 7

21세기소년

21세기소년 / IT / 정보기술 / 인터넷 / 프로그래밍 / 미래 / 과학 / 과학지식 / 물리 / 화학 / 천문 / 생물학 / 이과생이나 관심가질 법한 자질구레한 이야기들

GNU find 명령 사용법

GNU find는 디렉토리 트리를 따라 각각의 파일 이름을 주어진 표현식들에 적용하여 매칭되는 결과를 프린트하거나 이를 이용해 별도의 명령을 실행할 수 있다. 간단한 파일 찾기 명령이라고 생각할 수 있지만, find는 실제로 엄청 다양한 일을 할 수 있으며 쉘을 통한 시스템 관리에 있어서 가장 유용하고 필수적인 도구라 할 수 있다. 실제로 grep의 경우 이를 drop in으로 대체하려는 프로젝트들도 많이 있지만, GNU find의 경우에는 이를 100% 커버할 수 있는 대체품이 아직 나오지 않은 상황이다. fd라는 툴이 빠른 속도와 편의성을 개선하여 인기를 얻고 있지만 모든 기능을 대체할 수는 없다.

참고로, GNU find는 그 이름에 있어서 너무 일반적인 동사를 사용하고 있어서 관련 자료를 찾으려 할 때 상관없는 문서가 너무 많이 검색된다. 이 때에는 “GNU find”라고 검색하는 것이 도움이 될 것이다. 이 글의 이후에서는 find를 쓰도록 할 것이다. 또한 윈도에서도 find.exe 라는 도구가 포함되어 있는데, 이것은 grep 처럼 파일에서 텍스트를 검색하는 도구이다. msys를 설치하면 윈도 명령 프롬프트에서도 GNU find를 사용할 수 있지만, 둘의 이름이 갖기 때문에 한쪽의 이름을 바꿔둬야 한다.

사용법

<strong>find</strong> [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

더 보기 »GNU find 명령 사용법

BASH의 문자열 확장에 관해

셸 스크립트를 사용하면서, 가장 헷갈리는 부분 중 하나가 문자열 값들이 어떻게 확장되는가 하는 점이다. 여기서는 조금 자세하게 엔터키를 누르는 그 순간에 어떤 ‘마법’이 벌어지는지 보려고한다. 몇 가지 간단한 예제들에서도 이 현상은 우리가 알지 못하는 사이에 쓰고 있는 셈인데, 이를테면 echo 같은 명령에서 이것이 일어난다.

확장 (expansion)

명령을 입력하고 엔터를 누르는 매 순간에 bash는 우리의 명령을 수행하기 이전에 몇 가지 텍스트 관련 처리를 먼저 하게 된다. 이미 echo * 등의 명령에서 어떻게 단순한 글자가 변경되는지를 본 적이 있다. 예를 들어 *는 쉘에서 여러가지 의미를 가지게 된다. 이것이 실제로 벌어지는 것을 우리는 확장(expansion)이라 부른다. 확장을 통해 우리가 무언가를 입력하고, 그것은 다시 다른 무언가로 확장된 후, 실제 명령은 그것을 통해 수행된다. 이를 들여다보기 위해 echo 명령을 좀 더 살펴보자. 이는 아주 단순한 빌트인 명령으로 그저 텍스트를 화면에 출력한다.

$ echo this is a test
this is a test

간단하다. 넘겨지는 모든 인자가 출력된다. 다음은 어떤가?

$ echo *
Desktop Document ls-output.txt Music Pictures Public Templates Videos

더 보기 »BASH의 문자열 확장에 관해

클로저 내부에서 self를 캡쳐하는 방법 – Swift

항상 [unowned self]를 써야 할까요?

http://stackoverflow.com/questions/24320347/shall-we-always-use-unowned-self-inside-closure-in-swift 의 내용중 일부를 번역하였습니다.

아니오, 분명히 [unowned self]를 쓰지 말아야할 상황이 존재합니다. 특정한 클로져가 호출되었을 때에 그 시점까지 self가 파괴되지 않고 살아있음을 보장할 필요가 있을 때가 있단 말이죠. 예를 한가지 들어봅시다. 비동기 네트워크 요청을 하고, 요청에 대한 응답을 받았을 때 self로부터 어떤 무언가를 호출해야 한다고 가정해봅시다. 비동기 요청이 끝나는 시점 이전에 해당 객체가 해제되어 사라졌다면
프로그램이 뻗고 말겁니다.
그렇다면 언제 unowned selfweak self를 써야하는가? 바로 강한 참조 사이클이 만들어질 때입니다. 이는 두개 이상의 객체가 서로 순환하면서 서로를 순서대로 참조해나갈 때 생길 수 있습니다. 이 경우 사이클 내의 객체들은 어떤 경우에도 항상 참조수 1 이상을 갖기 때문에 파괴되지 않고 리소스를 낭비하게 됩니다.더 보기 »클로저 내부에서 self를 캡쳐하는 방법 – Swift

grep 간단 사용법🔍

grep은 주어진 파일(들)이나 표준입력에서 주어진 패턴과 매칭되는 라인들을 필터링하여 출력해주는 유틸리티로 여러 파일에서 특정한 문자열을 한 번에 찾을 수 있게하는 도구이다.

grep의 사촌쯤 되는 fgrep, egrep도 있는데 이들은 각각 grep의 -F, -E 옵션으로 통합되었으며 현재는 오래된 스크립트에서 호출하는 상황을 위해호환성 유지 측면으로만 남겨져 있다고 생각하면 된다.

더 보기 »grep 간단 사용법🔍

Swift의 프로퍼티에 대한 이해

프로퍼티(property)는 직역하자면 “재산”, “소유물” 등으로 번역되는데, 보통은 속성이라고 번역하여 쓰는 것이 일반적이다. (“속성”이라는 의미의 attribute와 혼동이 있을 수 있지만, 일단 언어의 기능으로 한정했을 때에는 크게 상관은 없을 것 같다.) 프로퍼티는 클래스나 구조체 혹은 열거체(enum 타입)의 객체 인스턴스가 그 내부에 가지고 있는, 객체의 상태에 관한 정보를 말한다. 이렇게 말하면 Swift의 프로퍼티는 마치 C 구조체의 멤버 변수와 다름 없다고 생각될 수 있는데, 조금 차이가 있다. Swift의 프로퍼티 개념은 Objective-C의 선언 프로퍼티의 개념을 이어 받은 것이라 볼 수 있다. 따라서 프로퍼티에 대해 생각할… 더 보기 »Swift의 프로퍼티에 대한 이해

예제 – Todo 앱 만들어보기

mithril 프레임 워크를 사용해서 간단한 Todo 앱을 만들어 보겠습니다. 입력필드와 Add버튼이 있어서, 할일을 입력하고 Add 버튼을 클릭하면 새 할일이 생성됩니다. 할일들은 목록으로 표시되며, 각각의 할일은 체크 박스를 포함합니다. 체크박스에 체크하면 완료한 항목이 되어 취소선이 그어지게 됩니다. 앱을 크게 세 개의 컴포넌트로 구성하고자 합니다. App – 메인 앱 컴포넌트로 할일의 배열과 새 일의 제목이 될 텍스트 값을 가지고 있습니다. Inputs – 입력 필드 부분을 표현합니다. Lists – 할일 목록 부분을 표현합니다. 먼저 개별 작업을 표현할 클래스를 정의합니다. 제목과 완료 여부 정도만… 더 보기 »예제 – Todo 앱 만들어보기

컴포넌트와 가상노드 – mithril

mithril 앱은 기본적으로 가상 DOM을 사용하여 웹페이지 상의 UI를 생성합니다. 기본적으로 m.render() 함수를 사용해서 페이지 내의 DOM Element 내에 어떤 UI를 그려내거나, m.mount()를 사용해서 해당 DOM Element가 가상 DOM으로 구성되는 UI를 관리할 수 있도록 합니다. 이 두 함수는 UI를 구성하는 방법으로 사용되지만, 그 기능이나 용도가 조금 다릅니다.

더 보기 »컴포넌트와 가상노드 – mithril