콘텐츠로 건너뛰기
Home » 도구와 팁 » Page 5

도구와 팁

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 명령 사용법

grep 간단 사용법🔍

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

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

더 보기 »grep 간단 사용법🔍

(연재) m.render – 가상 DOM 렌더링하기 – Mithril

m.render vs m.mount 미스릴은 virtual dom node를 생성하고, 이 가상 노드를 문서내의 특정 요소에 렌더링하거나 마운트한다. 가상 노드를 생성하는 컴포넌트를 작성하고, 해당 컴포넌트의 내용을 화면에 표시하기 위해서는 이미 존재하는 HTML 문서 내의 특정 DOM의 내부를 가상 노드로 채워주게 된다. 이 때 사용하는 함수로 m.render() 와 m.mount()가 있다. m.render()는 1회성으로 가상 노드를 렌더링하며, m.mount()는 특정 DOM에 가상 노드 컴포넌트를 마운트하는데, mithril은 마운트된 DOM 내에서 발생하는 이벤트를 체크하여 내부적으로 m.render()를 다시 호출해서 이벤트에 의해서 변경된 데이터가 UI에 반영될 수 있도록 자동으로 다시… 더 보기 »(연재) m.render – 가상 DOM 렌더링하기 – Mithril

(Javascript | mithril ) m.component – 앱을 컴포넌트화하기

본격 mithril 탐구. 가독성을 위해서 본 문서에서는 LiveScript로 예제를 작성합니다.

mithril 관련 글

  1. mithril 앱의 기본 구성 및 m()
  2. m.render – 가상 DOM 렌더링하기
  3. m.mountmithril을 이용한 양방향 바인딩 & 템플릿 렌더링
  4. m.prop 양방향 바인딩을 위한 데이터 래퍼
  5. m.withAttr 양방향 바인딩을 위한 이벤트 매퍼
  6. * m.componentmithril 앱을 컴포넌트화하기
  7. Todo
  8. m.route – 단일페이지 애플리케이션 및 라우팅 규칙
  9. m.request – 서버 API와 통신하기

m.componentcontroller + view로 이루어진 컴포넌트를 다른 컴포넌트 내에 임베드할 수 있게 하는 기능이다. 페이지마다 반복되거나, 페이지 내에서 반복되는 요소에 대해서 컴포넌트를 작성하여 재사용한다.
컴포넌트는 그 자체로 하나의 인스턴스가 아니라 컴포넌트를 사용할 때 그 사본이 생성되므로, 각각의 컴포넌트 인스턴스 간의 컨트롤러는 이벤트나 데이터가 간섭을 일으키지 않는다.
더 보기 »(Javascript | mithril ) m.component – 앱을 컴포넌트화하기

SublimeText Plugin 작성하기

SublimeText3 플러그인을 만들자.

서브라임텍스트3에서 작성하던 내용을 개인적으로 사용하는 위키(로컬에서 돌리고 있음)에 전송하는 기능을 서브라임 텍스트 플러그인으로 구현하고, 그 과정을 기록한다.

조건들

  • Sublime Text3의 스크립트 구동 언어는 Python3 버전이다.
  • 서브라임에서 제공하는 API를 사용하기위해서는 sublime 패키지가 필요하다.
  • 명령 클래스의 원형은 sublime_plugin 패키지에 정의되어 있다. 커스텀 플러그인은 이 클래스를 상속받아 작성하게 된다.
  • 현재 뷰(편집공간)는 이 클래스의 self.view 속성을 통해서 접근할 수 있다.
    더 보기 »SublimeText Plugin 작성하기

Mingw-bash에서 chocoloatey 패키지 전체 재설치하기

윈도에서 여러 프로그램을 패키징하여 명령줄에서 설치하고 있는 Chocolatey가 요즘 업데이트를 제대로 못하고 있는 거 깉아서 설치된 패키지를 강제로 최신버전으로 재설치하도록하는 한방 스크립트. 더군다나 패키지 리스트 출력시에 그지같은 문구를 추가로 삽입하고 있어서 sed1를 쓰지 않을 수 없었음. This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden characters #!/bin/sh # force reinstall all… 더 보기 »Mingw-bash에서 chocoloatey 패키지 전체 재설치하기

쉘에서 파일 디스크립터를 사용한 필터 구현

쉘에서 파일 디스크립터 사용하기

입출력을 반복하는 형태의 커뮤니케이션을 구현하기 위해서는 한 쌍의 FIFO 파이프를 만들어서 사용한다. 파이프는 mkfifo 명령을 통해서 이름이 붙은 파이프를 만들 수 있다. (이름이 붙은 파이프라는 것은 결국 임시파일이다.)

mkfifo /tmp/infifo
mafifo /tmp/outfifo

입력을 sed를 이용해 필터링하여 출력하는 예제는 다음과 같다.
더 보기 »쉘에서 파일 디스크립터를 사용한 필터 구현

여러 파일에 대해 한 번에 문자열 치환하는 방법들

문자열에 대한 찾기/바꾸기를 여러 파일에 대해 한 번에 적용하는 방법

Sublime Text 3 에서

Find > Find in Files... 메뉴를 사용하여 찾을 패턴, 찾을 폴더들 (,로 구분가능하며, 와일드카드 패턴으로 특정 확장자를 한정할 수 있다.) 지정하고 변경할 값을 만들어서 한 번에 적용 가능하다.
더 보기 »여러 파일에 대해 한 번에 문자열 치환하는 방법들

vim : 단어 및 선택 영역을 둘러싸기

Surround.vim이라는 멋진 플러그인이 있기는 하지만, 개인적으로는 vimrc에 오랫동안 넣고 쓰던 코드

기본원리

기본원리는 매우 간단한데, 괄호 등으로 감싸고자 하는 단어를 선택영역으로 만든 다음, 선택 영역을 해제하고, 이 영역의 마지막과 끝 영역으로 이동해서 괄호짝을 삽입해주면 된다.

  1. viw: 현재 단어 선택
  2. <esc>: 단어 선택 취소
  3. \>`: 마지막 선택영역의 끝으로 이동
  4. a)<esc>: 선택영역 뒤에 닫는 괄호 추가
  5. \<`: 선택영역의 시작지점으로 이동
  6. i(<esc>: 여는 괄호 삽입
  7. \>ll`: 두 글자가 추가되었으므로 다시 단어 끝부분을 이동하여 오른쪽으로 두 칸 이동

더 보기 »vim : 단어 및 선택 영역을 둘러싸기