Linux에서 look 명령을 사용하는 방법

리눅스 `look` 명령어는 파일 내에서 특정 단어나 구절로 시작하는 모든 줄을 검색하여 표시하는 데 사용됩니다. 주의해야 할 점은 리눅스 배포판마다 작동 방식에 차이가 있다는 것입니다. 이 글에서는 `look` 명령어의 다양한 활용법을 자세히 살펴봅니다.

Ubuntu의 `look` 명령어 작동 방식의 차이점

간단하면서도 강력한 명령어인 `look`은 본 가이드 작성 과정에서 유용하게 활용되었습니다. 하지만 호환성과 문서화 측면에서 몇 가지 문제점을 발견했습니다.

Ubuntu, Fedora, Manjaro 세 가지 배포판에서 `look` 명령어의 동작을 확인한 결과, 각 배포판에서 기본적으로 제공되지만, 동작 방식이 서로 달랐습니다. 특히 Ubuntu 버전은 다른 배포판과 상당히 다른 방식으로 동작했습니다. Ubuntu 매뉴얼 페이지에 따르면 동작 방식이 동일해야 하지만 실제로는 그렇지 않았습니다.

확인 결과, 전통적으로 `look` 명령어는 이진 검색 알고리즘을 사용하지만, Ubuntu 버전은 선형 검색을 사용하는 것으로 밝혀졌습니다. Ubuntu의 온라인 매뉴얼 페이지(Bionic Beaver 18.04, Cosmic Cuttlefish 18.10, Disco Dingo 19.04)에서는 바이너리 검색을 사용한다고 설명하고 있지만, 실제로는 선형 검색을 사용합니다.

로컬 Ubuntu 매뉴얼 페이지를 확인하면 선형 검색을 사용한다는 것을 명확하게 알 수 있습니다. 다행히 바이너리 검색을 강제로 사용하도록 하는 명령행 옵션이 있지만, 다른 배포판에서는 검색 방법을 선택할 수 있는 옵션이 없습니다.

man look

매뉴얼 페이지를 아래로 스크롤하면 이진 검색 대신 선형 검색을 사용하는 Ubuntu 버전의 `look` 명령어에 대한 설명이 있습니다.

가장 중요한 교훈은 명령어를 사용하기 전에 로컬 매뉴얼 페이지를 먼저 확인해야 한다는 것입니다.

선형 검색 vs 이진 검색

이진 검색은 선형 검색보다 빠르고 효율적인 검색 방식입니다. 특히 대용량 파일에서 작업할 때 그 차이가 더욱 두드러집니다. 이진 검색의 단점은 파일이 미리 정렬되어 있어야 한다는 것입니다. 파일이 정렬되어 있지 않다면, 파일의 복사본을 정렬한 후 `look` 명령어와 함께 사용해야 합니다.

본 가이드에서는 이 방법을 활용할 것입니다. Fedora, Manjaro를 포함한 대부분의 리눅스 배포판에서는 파일의 정렬된 복사본을 생성하여 작업해야 합니다.

단어 사전 파일 설치

`look` 명령어는 선택한 텍스트 파일뿐만 아니라 로컬 사전 파일 “words”를 이용하여 검색할 수도 있습니다.

Manjaro에서는 “words” 파일이 기본적으로 설치되어 있지 않으므로 다음 명령어를 사용하여 설치해야 합니다.

sudo pacman -Syu words

`look` 명령어 사용 예시

본 가이드에서는 에드워드 리어의 시 “Jumblies” 텍스트 파일을 사용하여 `look` 명령어의 다양한 사용법을 시연하겠습니다.

먼저 `less` 명령어를 사용하여 텍스트 파일 내용을 확인해 보겠습니다.

less the-jumblies.txt

다음은 시의 첫 부분입니다. Ubuntu를 사용하고 있으므로 파일은 정렬되지 않은 상태로 유지됩니다. Fedora와 Manjaro의 경우, 정렬된 복사본을 사용하여 작업을 진행할 것입니다.

“They”라는 단어로 시작하는 줄을 찾아 Jumblies가 무엇을 했는지 알아보겠습니다.

look They the-jumblies.txt

`look` 명령어는 다음과 같은 줄을 반환합니다.

대소문자 무시 검색

대문자와 소문자를 구분하지 않고 검색하려면 `-f` (대소문자 무시) 옵션을 사용합니다. 검색어를 “they” (소문자)로 변경하여 다시 검색해 보겠습니다.

look -f they the-jumblies.txt

이제 결과에 추가 줄이 포함됩니다.

“THEY”로 시작하는 줄은 모두 대문자로 되어 있어 검색어 “They”와 일치하지 않아 이전 결과에서는 누락되었습니다. 대소문자를 무시하면 해당 줄도 결과에 포함할 수 있습니다.

정렬된 파일과 함께 `look` 명령어 사용

리눅스 배포판에서 이진 검색을 사용하는 `look` 명령어의 전통적인 동작 방식을 따르는 경우, 파일을 정렬하거나 정렬된 복사본으로 작업해야 합니다.

Manjaro에서 “They”를 검색하여 결과를 확인해 보겠습니다.

보시다시피 결과가 반환되지 않았습니다. 하지만 시에는 “They”라는 단어로 시작하는 줄이 있다는 것을 알고 있습니다.

파일의 정렬된 복사본을 만들어 보겠습니다. `look` 명령어와 함께 `-f` (대소문자 무시) 또는 `-d` (영숫자 문자 및 공백만) 옵션을 사용하려는 경우 파일을 정렬할 때 해당 옵션을 사용해야 합니다.

정렬된 결과를 저장할 파일명을 `-o` (출력) 옵션을 사용하여 지정할 수 있습니다. 여기서는 “sorted.txt”로 저장하겠습니다.

sort -f -d the-jumblies.txt -o sorted.txt

이제 `sorted.txt` 파일에서 `look` 명령어를 사용하여 `-f` 및 `-d` 옵션을 적용해 보겠습니다.

이제 예상했던 결과가 올바르게 표시됩니다.

공백과 영숫자만 고려

영숫자 또는 공백이 아닌 문자를 무시하려면 `-d` (영숫자) 옵션을 사용합니다.

“Oh”로 시작하는 단어가 있는지 확인해 보겠습니다.

look -f oh the-jumblies.txt

`look` 명령어는 결과를 반환하지 않습니다.

다시 시도하여 영숫자 문자와 공백 이외의 다른 것은 무시하도록 명령해 보겠습니다. 즉, 구두점과 같은 문자와 기호는 무시됩니다.

look -f -d oh the-jumblies.txt

이제 결과가 표시됩니다. 따옴표와 느낌표가 검색을 방해하여 이전에는 이 줄을 찾지 못했습니다.

종료 문자 지정

`look` 명령어에 특정 문자를 종료 문자로 사용하도록 지정할 수 있습니다. 일반적으로 공백과 줄 끝이 종료 문자로 사용됩니다.

`-t` (문자 종료) 옵션을 사용하면 사용할 문자를 지정할 수 있습니다. 여기서는 아포스트로피 문자를 사용합니다. 백슬래시를 사용하여 이 문자를 인용하면 `look` 명령어가 문자열을 열지 않는다는 것을 알 수 있습니다.

검색어에 공백이 포함되어 있으므로 검색어를 인용 부호로 묶어 두 단어를 찾도록 지정합니다.

look -f -t \' "they call" the-jumblies.txt

결과는 검색어와 일치하며, 종료 문자로 사용한 아포스트로피로 끝납니다.

파일 없이 `look` 명령어 사용

명령줄에 파일 이름을 제공하지 않으면 `look` 명령어는 단어 파일을 사용합니다.

다음 명령어를 실행해 보겠습니다.

다음과 같은 결과를 얻을 수 있습니다.

단어 파일에서 “circle”로 시작하는 모든 단어가 표시됩니다.

마무리

`look` 명령어의 사용법을 익히는 것은 매우 간단합니다. 리눅스 배포판마다 `look` 명령어의 작동 방식이 다를 수 있다는 점을 기억하고, 이진 검색과 선형 검색 중 어떤 검색 방식을 사용하는지 확인하면 됩니다.