메뉴 닫기

다목적 커맨드라인 퍼지 파인더 fzf

혹시 여러분은 터미널에서 파일 하나 찾으려고 ls 치고, cd 치고, 또 ls 치고… 아니면 location, find, grep 명령을 사용하고 계신가요? 아니면 예전에 썼던 명령어 다시 쓰려고 화살표 위 키를 열 번씩 누르고 계신가요?
저도 그랬습니다. 그런데 fzf를 알고 나서부터는 터미널 쓰는 방식 자체가 바뀌었어요. 오늘은 이 도구를 소개해드리려고 합니다.

 

 

1. fzf가 뭔지?

fzf는 ‘Fuzzy Finder’의 줄임말로, 말 그대로 다목적 커맨드라인 퍼지 파인더입니다. 이름 그대로 딱 정확한 이름을 몰라도, 대충 비슷하게만 입력하면 원하는 걸 실시간으로 찾아주는 도구예요.

예를 들어 ‘document_final_v2.txt’라는 파일을 서버 내에서 찾고 싶은데 정확한 이름이 기억 안 나면, ‘docfin’ 정도만 쳐도 fzf가 알아서 후보를 필터링해서 보여줍니다. 그리고 방향키로 슥슥 움직이면 실시간으로 리스트가 좁혀지는 걸 볼 수 있어요.

한마디로 정의하면, ‘뭔가를 찾는 모든 순간에 쓸 수 있는 인터랙티브 검색 도구’ 입니다.
꼭 파일 뿐 아니라 히스토리 검색, 프로세스 죽이기, Git 브랜치 전환 등 활용 범위가 정말 넓습니다.
 

2. 뭐가 좋은지?

일반 grep이나 find는 정확한 패턴을 알아야 검색이 됩니다. 오타 하나만 나도 결과가 안 나오죠.
근데 fzf는 이름처럼 fuzzy하게. 즉, 애매하게 입력해도 어지간하면 찾아냅니다.
거기다 결과가 실시간으로 화면에 뜨고, 타이핑할 때마다 리스트가 계속 좁혀지는 걸 눈으로 볼 수 있어서 체감 속도가 확실히 다릅니다.
아마 익숙해지면 다른 방식으로 못 돌아갈걸요?
 

3. 설치 방법

우분투 기준으로는 이렇게 설치하면 됩니다.

1) 설치
sudo apt update
sudo apt install fzf

2) 키 바인딩
echo ‘source /usr/share/doc/fzf/examples/key-bindings.bash’ >> ~/.bashrc
echo ‘source /usr/share/doc/fzf/examples/completion.bash’ >> ~/.bashrc
echo ‘bind -x ‘\””\ej”: “cd $(find . -type d | fzf)”‘\”’ >> ~/.bashrc && source ~/.bashrc && bind -P | grep ‘\\ej’
source ~/.bashrc

혹은 최신 버전을 쓰고 싶다면 git으로 직접 받는 방법도 있습니다.
git clone –depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

설치 스크립트를 실행하면 중간에 몇 가지 물어보게되는데,
키 바인딩 설정할지, 자동완성 기능 켤지 등등.. 저는 그냥 다 yes로 넘겼습니다. 나중에 후회 안 합니다.
 

4. 사용 방법

설치가 끝났으면 일단 터미널에 이렇게 쳐보세요.
fzf

현재 디렉토리 하위의 모든 파일 목록이 쭉 뜨면서 검색창이 나타납니다.
여기에 아무 글자나 입력해보세요. 실시간으로 필터링되는 게 보일 겁니다.
방향키로 이동하고 엔터 누르면 그 파일 경로가 출력됩니다.

이것만으로는 ‘그래서 뭐?’ 싶을 수 있는데, 진짜는 지금부터입니다.
 

5. 유용한 활용법 세가지

1) 명령어 히스토리 검색

이게 진짜 신세계입니다. 터미널에서 ‘Ctrl + R’을 눌러보세요.
(bash 기본 히스토리 검색도 ‘Ctrl+R’이지만, fzf가 설치되면 이게 훨씬 강력한 버전으로 바뀝니다.)

예전에 썼던 긴 명령어가 있다면..
예) docker run -d -p 8080:80 –name my-nginx -v $(pwd):/usr/share/nginx/html nginx

이런 걸 다시 치기 귀찮잖아요.

>Ctrl+R 누르고 ‘docker run’ 정도만 입력하면 예전에 썼던 명령어들이 쭉 뜨고, 방향키로 골라서 엔터 치면 바로 실행됩니다.
저는 이거 하나 때문에 fzf를 씁니다.

2) 파일 찾아서 바로 열기

‘Ctrl + T’를 누르면 현재 디렉토리 기준으로 파일 목록이 fzf 화면으로 뜹니다. 원하는 파일을 검색해서 고르면, 그 파일 경로가 커맨드라인에 바로 삽입됩니다.
(이런건 파일명의 시작이 뭔지 알면 Tab으로 해결되지만 모를때 유용)
예) vi [Ctrl+T 누르고 파일 검색해서 선택]

이러면 vi를 입력한 상태에서 파일 경로만 fzf로 채워넣을 수 있어서, 긴 경로를 손으로 칠 필요가 없어집니다.

3) 디렉토리 이동

‘Alt + J’를 누르면 하위 디렉토리 목록이 뜨고, 검색해서 고르면 바로 그 디렉토리로 이동(cd)합니다.
* 참고 : 원래는 기본 Alt + C 인데, 저는 Ubuntu Desktop 사용자라 미리 바인딩되어진 캘린더(달력)과 충돌납니다.
그래서 위에 키 바인딩하는 곳에서 Alt + J 로 동작하게 수정하였습니다.

[Alt+J 누르고 project 입력]
-> 후보 디렉토리들 실시간으로 좁혀짐
-> 원하는 거 엔터
-> 그 디렉토리로 바로 이동

깊은 폴더 구조 안에서 매번 ‘cd folder1/folder2/folder3’ 이렇게 치던 걸 생각하면 정말 편합니다.

4) 다른 명령어와 조합

fzf의 진짜 재미는 다른 명령어와 파이프로 엮을 때 나옵니다.
몇 가지 예시를 들면..

(실행 중인 프로세스를 찾아서 바로 종료하기)
kill -9 $(ps aux | fzf | awk ‘{print $2}’)

‘ps aux’로 나온 프로세스 목록을 fzf로 검색해서 고르면, 그 프로세스의 PID를 뽑아서 바로 kill 해줍니다. 프로세스 이름 기억 안 나도 대충 검색해서 찾을 수 있어요.

(Git 브랜치 빠르게 전환하기)
git checkout $(git branch | fzf)

브랜치가 많은 프로젝트에서 특히 유용합니다.
브랜치 이름 전체를 안 외워도 일부만 쳐서 찾아 전환할 수 있습니다.

5) 최근 열었던 파일 vi로 열기

vi $(find . -type f | fzf)

이런 식으로 find, ps, git, docker 등 텍스트 목록을 출력하는 거의 모든 명령어와 조합할 수 있습니다. 응용은 무궁무진합니다.
 

6. 마무리

처음엔 ‘이게 뭐가 그렇게 대단하다는 거지?’ 싶었는데, 막상 ‘Ctrl+R’ 하나만 익숙해져도 터미널 작업 속도가 확 달라집니다.
특히 서버 여러 대를 오가면서 명령어를 반복적으로 쓰는 분들이라면 무조건 추천합니다.
아직 안 써보셨다면 설치도 간단하니 일단 사용해 보세요. 무엇이든 그렇지만, 익숙해지면 업무 속도가 더욱 향상될 것입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다