elsa in mac

Terminal 사용을 좀 더 편리하게 해주는 CLI 도구들 본문

Terminal

Terminal 사용을 좀 더 편리하게 해주는 CLI 도구들

elsa in mac 2024. 1. 10. 22:04

Terminal 을 사용하면, 기본적으로 제공되는 각종 CLI 도구들을 사용하게 됩니다. 

GUI가 없었던 과거, 사용자가 컴퓨터에 명령을 내리고 그 결과를 보기 위해서는 두 가지가 필요 했습니다. 하나는 컴퓨터에 접근하기 위한 Hardware인 Terminal과 컴퓨터의 운영체제에 명령을 내리고, 그 결과를 보기 위한 Software인 Shell 이 그것 이지요. 비약적인 기술의 발전으로 과거 Terminal 보다 작아진 컴퓨터 덕분에 Termnial 이라는 하드웨어는 사라졌고, 대신 터미널의 역활을 하는 앱이 생기게 됩니다.  오늘날 우리가 그냥 터미널 앱이라고 부르는 것 들이 그것이죠. 정확한 명칭은 터미널 에뮬레이터 입니다. shell도 역사 속에서 많은 발전을 하게 됩니다.  

오직 텍스트로만 표현되는 TUI(Terminal 혹은 Text-based User Interface)는 오늘날 상업적인 컴퓨팅 마켓의 근간인 GUI의 뿌리입니다. 텍스트 기반이기 때문에 GUI와 달리 표현의 제한이 많고, 그러한 이유로 프롬프트의 구성과 배치, 단축어와 키-맵핑등이 굉장히 철학적이면서 실용성이 강조된 특징을 갖고 있습니다 만, 초심자들이 사용하기에는 내공이 쌓이는데 시간이 좀 오래 걸리고, 일정 수준 이상의 공학적 지식 수준을 요구하기에 남녀노소 누구나 컴퓨터를 사용할 수 있는 GUI가 태동할 수 있는 동기가 되게 됩니다.  

CLI(Command Line Insterface)는 엄밀히 말하면 TUI와 구분되지만, 오늘날에는 그 개념을 구분하지 않고 사용합니다. GUI는 주로 상업적으로 기업들이 발전시켜 나갔고, TUI쪽은 아무래도 학계와 오픈소스 진영에서 발전시켜 나가게 됩니다. 

교과서적인 이러한 기본 CLI Tool들은 그 역사가 오래된 만큼 사용상에 편의성이 적은게 사실입니다. 그래서, 많은 개발자들은 그동안 기존의 CLI 도구들의 성능을 확장한 버전을 만들어 왔지요. 이번 포스트에서는 macOS에서 이미 많은 이들이 사용하고 있는 추천할 만한  CLI 도구를 몇 가지 소개 합니다.

우선, 포스트에서 소개할 도구들을 설치하려면 homebrew를 설치해야 합니다. 이미 Termnial 사용에 익숙한 사용자들이라면 기본적으로 사용하고 계시겠지만, 이제 막 시작하시는 분들이라면.. 반드시 설치해야할 필수 도구 입니다.  (homebrew의 설치와 기본 사용 방법을 알기 원하시면 여기를 봐주세요)

1. 파일 뷰어 cat을 대처할 bat(better cat)
cat은 concaternat의 약자로 text file의 내용을 터미널에 출력해주는 기본 명령어 중 하나 입니다. 하지만, 치명적인 단점이 몇 가지 있는데, 파일의 내용을 화면에 전부 뿌리기 때문에, scroll 을 통해 이전 화면의 내용을 살펴봐야 하는 불편함이 있습니다. 몰론 옵션을 사용하면 되기는 하죠, 두 번째는 소스코드를 볼때, syntax highlighting 기능이 없기 때문에 가독성이 떨어집니다. 이러한 불편함을 해결한 도구가 bat입니다. 

brew install bat

위의 스샷에서 첫번째는 cat, 두번째는 bat으로 동일한 소스파일을 확인했을 때의 차이 입니다. 굳이 설명이 필요 없는 차이를 보여 줍니다. bat은 systax-highlighting에 대한 theme를 제공합니다. bat --list-themes를 명령하면 수십 개의 theme 이름과 예를 볼 수 있으며, 입맛에 맞는 theme를 확인했다면, .bashrc나 .zshrc에 아래와 같이 BAT_THEME를 설정해 주면 됩니다. 손에 익은 cat으로 bat을 사용하고 싶다면. alias를 해 주면 됩니다. 

export BAT_THEME=1337
alias cat="bat"

 

2. ls 을 대처하는 exa
ls 는 list의 약자로, 디렉토리(폴더)의 파일 목록을 확인하는 명령어 입니다. 옵션에 따라 다양한 출력 형식을 보여 줍니다. exa는 eza의 fork 버전으로, 컬러풀한 가독성과 디렉토리 계층 구조를 보다 직관적으로 확인할 수 있습니다. Nerd font를 설치했다면, 파일의 확장자에 따른 아이콘도 함께 볼 수 있습니다. 

brew install exa

위의 스샷은 ls -al 과 exa -al 의 차이를 보여 줍니다. 

옵션을 통해, 위와 같이 디렉토리의 하부 구조를 tree 형식으로 확인할 수도 있습니다. -L 옵션뒤에 depth를 정의함으로 써, 얼마나 깊이 tree로 확인할지를 결정할 수 있습니다.  역시, ls가 손에 익었다면, alias ls = "exa"를 통해, ls로 사용하시면 됩니다. 

위의 스샷은 exa -aT -L2 --color=always --group-directories-first --icons 옵션을 준 결과 입니다.  매번 이렇게 긴 옵션을 사용할 수는 없으니, 아래와 같이 .bashrc 나, .zshrc에 alias를 설정하고 사용하면 편합니다. -L 옵션은 디렉토리의 depth를 의미합니다. tree를 1단계로 보여줄지, 아니면 3단계까지 보여줄지에 따라 -L옵션의 수준을 정의하면 됩니다. 

alias ls="exa"
alias ll="exa -lah"
alias la="exa -a"
alias lt="exa -aT -L1 --color=always --group-directories-first --icons"
alias lt2="exa -aT -L2 --color=always --group-directories-first --icons"
alias lt3="exa -aT -L3 --color=always --group-directories-first --icons"

 

3. top vs bottom vs btop++
top은 table of processes의 약자로 현재 컴퓨터의 실시간 프로세스의 활동, 리소스 점유율을 확인하는 명령어 입니다.  상세한 내용이 표시되기는 하지만, 역시나 직관성과 unit들이 전문적이기 때문에 한 눈에 파악하기기 힘듭니다.  bottombtop++ 은 cross-plaform 프로세스/시스템 실시간 모니터링 도구로 보다 직관적으로 시스템 정보를 확인할 수 있습니다. 둘 중에 맘에 드는 것을 설치하고 사용하면 되겠죠.

brew install bottom
brew install btop

top
bottom
btop++

첫번째 스샷은 top, 두번째 스샷은 bottm, 그리고 세번째가 btop++ 화면 입니다. 설치 시에는 bottom은 설치시에는 bottom으로 설치하지만 command는 약자인 btm을 사용합니다. 위의 스샷은 화면을 작게 했기 때문에, 일부만 표시되지만, 화면을 넓히면 보다 상세한 정보를 확인할 수 있습니다.  비쥬얼적으로는 btop이 가장 좋아 보입니다. TUI의 진수를 보는것 같네요.

4. rm vs rip
rm 은 remove의 약자로, 파일이나 디렉토리를 삭제할 때 사용하는 기본 명령어 입니다. rip은 rm-improved의 약자로 rm 보다, 안정성과 성능 무엇보다도, 휴지통 개념을 갖고 있는 삭제 도구 입니다. 즉, rip을 통해 파일이나 폴더를 제거하면, 기본적으로 해당 파일이나 폴더를 임시 폴더인 /tmp/로 이동 시키기 때문에, 실수로 삭제한 경우 되돌리기를 할 수 있습니다. 

brew install rm-improved

스샷을 보면, 우선 폴더에 README.md 파일이 하나 있는 것을 확인할 수 있습니다. rip README.md로 삭제를 했지만, rip -u 를 실행하면, 원래 위치로 복구되는 것을 알 수 있습니다. /tmp/ 폴더는 macOS를 종료하면 사라지기 때문에, mac을 끄기 까지는 실수로 삭제한 파일이나 폴더를 되돌려 놓을 수 있게 됩니다.

5. man page를 colorful 하게 : most

man은 CLI 명령에 대한 설명서를 표시해 주는 명령어 입니다.  아래는 man으로 ls 명령어에 대한 기술서를 출력한 예 입니다. 

이쁘게 잘 표시를 해 주었지만, 좀 밋밋하죠.. most를 설치하면, 아래와 같이 colorful 한 manual을 표시할 수 있습니다.  화면 하단에 친절한 명령키도 보여 주고요..

설치는 

brew install most

.bashrc 혹은 .zshrc의 파일에 아래와 같이 PAGER를 most로 설정해 줘야 합니다. 

export PAGER="most"

.bashrc나, .zshrc를 수정하고 나면, 반드시 source ~/.bashrc 나 souce ~/.zshrc 를 해줘야 적용이 됩니다. 

6. cd vs zoxide
cd 명령은 change directory의 약자로 디렉토리를 변경하는 명령어 입니다.  하지만, 디렉토리의 구조를 따라 순차적으로 접근해야만 합니다. 무슨 말인고 하니, 예를 들어 ~/A/B/C  이런 구조의 디렉토리가 구성되어 있다고 가정하고, 현재 ~에 있다고 하면 ~에서 C 디렉토리로 진입하려면, cd A , cd B , cd C 이렇게 순차적으로 들어가야 합니다. 아니면, cd A/B/C 이렇게 해줘야 하죠. 어떤 방법이던 hierachy를 준수해야 합니다. 하지만, zoxide의 경우에는 어느 곳에 있던 한 번에 C 디렉토리로 진입할 수 있습니다. 물론 C 디렉토리에 한 번 이상 갔다와야 합니다. CLI 명은 zoxide 이지만, 실제 사용에서는 z 로 사용 합니다. 

brew install zoxide

위의 스샷을 보면, ~/.config/workspace/A_dir 에서 하부 디렉토리 구조를 확인할 수 있습니다. A_dir/B_dir/C_dir/D_dir 이런 계층 구조를 갖고 있습니다. 하지만,  z D_dir 명령 한번으로 D_dir로 변경된 것을 확인할 수 있습니다. 이는 비단 이동할 디렉토리의 부모노드에 있을 때만 동작하는 것이 아닙니다. 어떤 Volume에 있던 상관없이 z 명령 한 번으로 이동할 수 있습니다. cd 대신, z 명령어를 사용하게 되면, 사용자가 자주 이용하는 디렉토리의 정보들이 누적되며, 이는 auto-suggestion의 확률을 점점 높여 주게 됩니다. cd 가 손에 익어서 바꾸기 어렵다면, z를 cd로 alias 해서 사용하면 됩니다. 

위의 스샷은 z를 cd로 alias 한 후의 사용 예 입니다. (이하 설명에선 cd alias 상태) ~ 에서 D_dir로 한번에 이동하고, cd suri_project 한 번으로, /Volumes/Kali/suri_project로 이동된 것을 확인할 수 있습니다.  

이동할 폴더 명을 전부 다 키인 하지 않아도 됩니다. 아래 스삿과 같이 cd su 까지만 키인을 했을때, suggestion 이 발동하고, 해당 디렉토리가 맞다면 그냥 cd su 에서 enter를 치면 됩니다.

이런 식으로 점점 해당 디켁토리에 대한 변경과 접근이 경험이 누적되면, 나중에는 cd s 만 처도 suri_project 폴더로 이동할 수 있게 됩니다.  오늘 소개한 CLI 중에 가장 추천하는 필수 도구 입니다.

7. the fuck
왜 대뜸 욕이냐구요 ? 엄.. 욕이 아닙니다. the fuck은 사용자가 터미널에서 명령을 내렸을 때, 오타가 있거나 옵션이 잘못 설정된 경우, 자동으로 수정제안을 해 주는 유용한 도구 입니다. 왜 이름이 fuck 일까요 ? 아마 명령에 오타가 있어 Enter키를 눌렀을때, 오류가 나면 그 때 입에서 튀어나오는 말 중 하나였기 때문이 아닐까 나름 해석을 해 봅니다.

brew install thefuck

위의 스샷을 보면, history | grep git 이라는 명령을 내려야 하는데, 오타를 냈습니다. hustory, grap  이렇개 두 곳에 오타가 있는 거지요. 보통은 이런 경우, 다시 명령을 다 처야 합니다만, 그냥 fuck 명령을 내리면, 위와 같이 정정된 명령을 제안하고, 사용자가 enter키를 누르면 그대로 정정된 명령을 실행하게 됩니다.  나름 몇 가지 제안 항목을 갖게 될 수 있기 때문에, 위/아래 방향키로 선택할 수 있는 기능을 갖고 있고, 원치 않을 경우 즉, 제안 내용이 모두 옳지 않을 경우는 ctrl-c 키를 누르면 됩니다.

8. lazydocker
다음은 docker를 사용하는 분들에게 유용한 CLI 도구인 lazydocker 입니다. lazydocker는 git 관리 도구인 lazygit을 개발한 jesse Dufield 님이 만든 도구로, 터미널에서 매우 빠르게 docker image나 container등을 관리할 수 있는 도구 입니다.

brew install lazydocker

docker로 할 수 있는 거의 모든 기능을 TUI에서 사용할 수 있습니다.

9. lazygit
lazydocker와 마찬가지로 git 관련 명령등을 쉽게 이용할 수 있는 도구 입니다.  lazydocker와는 다르게 한글화가 되어 있다는 거..

10. ranger
이번 포스트에서 소개할 10번째 마지막 CLI 도구는 Terminal file Manager인 rager 입니다.

brew install ranger

cd나 zoxide의 경우에는 사용자기 익히 알고 있는 디렉토리명으로 현재 위치를 바꾸는데, 유용하지만, 디렉토리 hierachy를 확인하는 경우에는 부족합니다. 경우에 따라서는 Finder 처럼 한 단계 한 단계 들어가면서 확인할 필요가 있을 수 있지요. 이 경우 ranger가 유용합니다.  (user guide)

기본적으로 Vi 에디터의 키맵을 준수하고 있기에, h/j/k/l를 사용하여 빠르게 상위/하위 디렉토리로 이동할 수 있습니다. 방향키가 있는 키보드의 경우 방향키를 이용하면 됩니다. 하위 디렉토리나 상위 디렉토리로 이동하기 위해 enter나 space로 선택할 필요 없이, 해당 방향 키를 누르는 것 만으로 빠르게 이동할 수 있습니다. 위의 스샷에서 볼 수 있듯이 내부 preview 영역을 갖고 있기 때문에 text 파일 내부를 볼 수 있고, image파일이나 동영상 파일들의 경우, 파일 속성정보를 확인할 수 있습니다.  파일아니 폴더를 선택하고 edit, copy, paste, cut 등은 물론, 검색, 북마크, 압축, 압축해제 등 파일과 관련된 작업을 마우스 없이 키보드로 모든 작업을 빠르게 할 수 있습니다. 

foot 터미널을 사용하는 사용자라면, package manager에서 설치하는 버전 대신, github에서 소스를 받아 빌드하는 것을 추천합니다. 이 경우, foot 에서 sixel을 이용하여, image preview 기능을 이용할 수 있습니다.  rc.conf 파일에서 아래와 같이 설정한 후, ranger를 다시 실행하면 됩니다. 

set preview_images true
set preview_images_method sixel

Foot 터미널에서 ranger로 이미지 파일을 preview 할 수 있다

 

* 그 밖에... 그러나 정말 멋진 것들
오늘 소개한 CLI 도구들은 간단하고, 단편적인 도구들 입니다. 터미널을 켜면 GUI에서 마우스를 필수적으로 사용하듯 반드시 사용해야할 도구 들이죠..  하지만, 정말로 기가막힌 CLI 도구들은 따로 있습니다. Neovim, Tmux, Emacs, Helix.. 등등.. 이 도구들은 사용법을 알려면 책을 한/두권씩 읽어야 할 만큼 방대한 규모를 갖고 있는 친구들이라 여기서 다 소개할 수는 없고, 별도로 포스팅을 해야 합니다.  시간 나는대로 또 소개하는 글을 써 보겠습니다.


과거에는 많은 사람들이 컴퓨터를 사용하기 위해 터미널을 사용했고, 그래서 학원이나 대학 강좌 혹은 책등을 통해 shell을 배웠어야 했습니다. 그것이 불과 30~40년 전이니, 얼마나 비약적으로 발전을 한 것인지.. 하지만 지금은 특수한 목적이나 개인적인 취향/취미 혹은 저 처럼 그냥 늘 써왔던 고인물들 빼고 누가 터미널에 관심이나 있을까요 ? 하지만 놀랍게도 전 세계의 수 많은 이들이 여전히 터미널을 사용합니다.

요즘 Retro가 유행하던데..
모바일기기와 터치 인터페이스가 익숙한 요즘 젋은 세대들에게 어쩌면 컴퓨팅-라이프 에서도 Retro 바람이 분다면 관심을 좀 받을수 있을까요 ?. 에 또, 기계식 키보드 사랑하는 덕후님들은 꼭 터미널 써야 합니다. 그래야 본인의 키보드에 더 애정을 갖게 됩니다.

암튼 터미널을 이제 막 사용하고자 하는 분들이라면 조금은 도움이 될 것 입니다. 

공유하기 링크
Comments