리눅스나 macOS를 사용하다보면 터미널 명령어를 이용하게 된다. 대부분의 터미널 명령어는 교수님이 학부 시절때부터 사용했을 정도로 유서 깊은 역사를 가지고 있다. 그러나 세월이 흐르는 동안 더욱 진보한 도구들이 많이 출시되었다. 프로그램 설치가 엄격히 제한된 환경이 아니라면 한 번 써보는 것을 고려해볼만 하다.
zsh는 bash보다 편의성이 더욱 강화된 쉘이다. 이미 macOS 진영에서는 zsh로 기본 쉘을 교체하였으나 리눅스에서는 아직도 bash를 기본 쉘로 사용하고 있다. 터미널에서 오랜 시간을 보내야 한다면 zsh를 써보는 것을 추천한다.
vim 에디터로 텍스트 파일을 편집하는 상황을 생각해보자. 현재 디렉토리에는 편집하려는 파일 외에도 수많은 텍스트 파일이 있다. bash에서는 원하는 파일을 편집하기 위해 이름을 정확하게 타이핑해야 한다. 다행히 tab을 누르면 리스트를 보여주므로 파일 이름을 외워야 할 필요는 없지만, 파일 이름을 타이핑해야 하는 것은 마찬가지다.
zsh에서도 tab 키를 눌렀을 때 파일 리스트가 표시된다. 중요한 차이점은 방향키를 통해 리스트 내부를 돌아다닐 수 있다는 것이다. 이를 통해 명령어를 끝까지 타이핑해야 할 필요가 없어진다.
zsh는 oh-my-zsh이라는 플러그인 매니저를 활용해 기능을 다양하게 확장할 수 있다. (macOS에서만 사용이 가능한 것으로 아는 사람이 있는데 리눅스에서도 쓸 수 있다.) 플러그인의 종류를 모두 소개하기는 너무 많으므로, 유용한 몇 가지 사례만 소개하도록 하겠다.
문법 하이라이팅(명령어 오류를 미리 잡아낼 수 있어 유용하다.)
명령어 자동 제안
현재 git branch 표시
유닉스에는 디렉토리 용량을 확인하기 위해 du 명령어를 이용한다. 가끔 장비의 디스크 용량이 가득찼는데 원인을 알 수 없을 때가 있다. 이럴 때에는 디스크를 많이 차지하는 파일을 찾아내어 삭제해야 하는데, 보통 다음과 같이 du 명령어를 작성한다.
du -h <directory_name> | sort -n -r | head -n 20
웬만한 리눅스 숙련자가 아니라면 위 명령어를 구글링 없이 작성하기는 어려울 것이다. 이럴 때에는 ncdu를 대안으로 사용하면 좋다. ncdu는 방향키와 엔터를 통해 파일 시스템을 탐색하며, 디렉토리의 디스크 사용량을 직관적으로 알 수 있는 도구이다. brew, yum 등의 패키지 매니저에 포함되어 있어 설치도 간편하다.
CPU 사용량을 측정하기 위해 top을 사용하는데, htop의 UI가 훨씬 직관적이다. htop 뿐만 아니라 vtop, bashtop 등의 다양한 대체 도구가 있으므로 마음에 드는 것을 골라 쓰기 바란다.
삭막해보이는 top
힙해보이는 htop
man은 명령어의 사용법을 알기 위한 고전적인 방법이다. man ls
를 입력하면 다음과 같은 장문의 설명서를 읽을 수 있다. 생각없이 쓰던 ls에 저런 다양한 사용법이 있었다는 것을 알면 놀랄 것이다.
문제는 콘솔 창에서 저런 장문을 별다른 강조색도 없이 읽고 싶지 않다는 점이다. 주변의 사례를 볼 때 명령어의 사용법을 알기 위해 man부터 치는 사람은 거의 보지 못했다. 거의 구글링을 하거나 --help
플래그를 붙였을 때 나오는 설명을 읽는 정도였다.
tldr은 man의 내용을 요약해 훨씬 간결한 형태로 보여준다. 다음은 tldr ls
를 수행한 예이다.
tldr은 사용법이 다소 복잡한 명령어일 때 그 빛을 발한다. 다음은 man tar
, tar --help
, tldr tar
의 결과를 비교한 것이다.
--help
플래그가 사용법을 단순히 나열하는 것에 반해, tldr은 실용적인 패턴을 예시로 들기 때문에 원하는 정보를 얻기가 훨씬 쉽다. tar 같이 플래그나 옵션이 많은 명령어는 패턴을 암기하지 못해 구글링하게 되는 경우가 많은데, tldr 명령어를 이용하면 흐름을 깰 필요 없이 훨씬 빠르게 작업할 수 있다.
SourceTree와 같은 GUI를 사용하던 사람들은 터미널 환경에서 git을 쓰는 것이 부담스러울 수 있다. 이럴 때 gitUI를 사용하면 명령어를 직접 입력하는 것 보다는 편리하게 사용할 수 있다.
특히 맘에 드는 부분은 커밋 메시지 로그와, 지난 커밋의 변경 사항을 쉽게 확인할 수 있는 기능이다. 지난 커밋의 변경 사항을 알기 위해 github에 들어가거나, 복잡한 명령어를 입력할 필요가 없다.