Udemy X 글또 이벤트를 통해 협찬받은 강의에 대한 후기글입니다.
1. Intro
CLI 학습의 필요성을 설명하는 일은 쉽지 않다. 현대적인 프로그래밍 도구들 다수에서 GUI/IDE integration이 잘 되어있기 때문이다. 대부분의 서버 작업 & 명령줄 작업은 시각화된 메뉴화면을 보고 버튼 몇개 누르는 식으로 간단하게 실행할 수 있다. JAVA Build? intellij에서 Build > Build project를 클릭하면 빌드할 수 있다. git repository에 커밋하기? 플러그인을 설치한다음 계정 연동을 하고 버튼 몇개로 어떤 파일들을 커밋에 포함/제외시킬지, 커밋메시지는 어떻게 작성할지, 푸시/풀을 간단히 수행할 수 있다. CI/CD? 적절한 도구를 선정한뒤 플러그인/액션을 추가해서 파이프 단계에 끼워넣으면 대부분의 경우 큰 문제 없이 원활히 작동한다.
검은 바탕에 하얀 글씨의 모쌩긴 터미널에서의 작업은 사실상 처음 학습때를 제외하곤 사용할일이 잘 없다. 그렇다면 cli환경은 작업환경을 래핑한 도구가 많으니 우선순위에서 내려놓아야 할까? 그렇지 않다고 생각한다.
사용 편의성을 위해 추상화된 도구에 친숙해지면 정말 긴급할때 필요한 작업을 스스로 할 수 없기 때문이다. 예를 들어 서버의 로그 조회를 별도 환경에 의존하고 있었는데 에러/트래픽으로 인해 로그가 너무 많이 쌓임 또는 수집설정이 되어있지않는 에러를 조회해야함 같은 상황을 생각해보자. 결국 서버에 들어가서 raw log를 직접 확인하는 방법을 알고 있어야 할것이다. 또는 배포과정의 플러그인을 업데이트했는데 버그가 있어/로직이 바뀌어서 기존 방식으로 동작하지 않는다고 가정하자. 해당 플러그인이 어떤 명령어들을 자동화하는지 이해하고 있어야하고, 유사시 직접 사용할 수 있도록 스크립트를 작성할 수 있어야할것이다. 서버 모니터링을 화려하고 잘 조직화된 대시보드로 구상하였지만 실제 트래픽 부하시 제대로 메트릭이 업데이트되지않는다면 서버에서 직접 현재 리소스 사용량을 조회할 줄 알아야 할것이다. 이렇게 기본적으로 어떻게 사용되는지를 알아야 추상화된 도구를 사용해야한다고 생각한다.
개인의 작업환경에서는 작업환경시 어떤 도구를 선정할지는 자유롭지만, 대부분의 서버환경에서는 별도 도구의 설치나 GUI 사용이 불가능한 경우가 많다. 이럴때 CLI 숙달의 힘이 발휘된다고 생각한다.
그래서 본 강의를 신청하고 수강하였다.
2. 특장점
수강하며 다른 강의 대비 이 강의의 특징 및 장점을 정리해두고자 함
배경설명(Terminal,Command,Prompt) 충실
이전에도 몇번 명령어에 대한 강의를 수강한 적이 있었지만, 대부분의 경우 리눅스에 대한 설명(CLI로 조작해야함)을 언급한뒤 기초 명령어 실습으로 넘어가 명령어에 대해 집중하는 방식이 많았다.
해당 강의 또한 리눅스 소개 > 명령어 실습의 구조를 갖고있다. 하지만 그 중간에 터미널/커맨드에 대한 기초 사항이 포함되어있어 이부분이 좋았다. 익숙해지면 당연한거지만 시작할때는 모를수 있는 부분이기에 언급이 필요하다고 생각한다. 본인의 학습경험을 반추해보면
- 명령어/옵션은 대소문자를 구분한다 > 명령어의 동작원리 (which/PATH설명)
- 명령어의 구조 > args의 순서 및 작성 (short-long, short모아쓰기, 공백과=차이등)
- 터미널 사용시 유용한 단축키 > 줄/단어별 이동, 입력내용 취소 등
- 명령어 재사용 > history 및 !사용
이런 내용들이 강의 초반부에 설명되고 있어 유용하였다.
실습 시나리오 제공
명령어 공부의 어려운점 중 하나는 실사용시 어떻게 활용해야할지 모르겠다는 점이다. 대부분의 강의는 강의 말미에 실습했던 명령어와 주요 옵션들을 표로 제공하는선에서 마무리된다.(Cheatsheet) 그러면 그거만 쑥 훑어보고 알고있다고 착각한다. 그리고 실제 쓸때는 필요한 옵션/파이프의 조합법을 몰라 tar 압축 푸는법
, 리눅스 현재 디렉토리 용량 보는법
, netstat 현재 열린 포트 조회
등의 검색어를 통해 주문처럼 옵션을 외워서 사용하게 된다. Cheatsheet는 좋지만.. 음.. 음.. 볼때마다 전화번호부 외우는 느낌
그에 비해 이 강의에서는 매번 챕터 종료마다 별도의 Exercise set를 제공해서 시나리오를 주고 그에 적절한 명령어를 사용해보는 실습과정이 존재한다. Cheatsheet 보다는 확실히 이 방식이 이 명령어들을 어떻게 써야하는지도 알게되고, 기억에도 오래남을것이다. (아래는 전체 중 일부만 가져옴)
3. Outro
Linux Command Line 부트캠프: 리눅스 초보자부터 고수까지
이 강의는
- 명령어에 대해 처음 공부하는 사람들
- 기초 명령어는 알고있지만 연습 시나리오가 필요한 사람들
에게 적절한 강의라고 생각한다. 강의환경은 Linux/Bash/Terminal 기반으로 진행되는 반면 수강생은 대부분 MacOS/zsh/iTerm2 을 사용할 것으로 예상되기 때문에 해당 차이에서 기반한 몇몇 문제들(grep, sed와 같은 일부 명령어에 대한 옵션)이 존재하긴 하나 Q&A를 참고하면 잘 따라할 수 있을것이다.
TLDR 소개
명령어에 대한 옵션이나 활용법이 잘 떠오르지 않을때 보통 어떻게 대처하는가?
1. manual 페이지 참고
man [명령어] | grep '\-g'
man [명령어] 이후 /, 검색어, nnnn search
- man 결과의 example이나 description 살펴보기
2. 하고싶은것 구글링
본인의 경우 man
또는 구글링을 많이 참조했으나 TLDR
을 추천받곤 tldr을 잘 사용하고있어 명령어 주제 나온김에 간단히 정리하고자 한다.
TLDR은 기존의 man page를 좀더 간단하고 쉽게 보완하는 것을 목표로하는 문서화 오픈소스 프로젝트이며, 2013년 시작해 약 10년이상 유지되고 있다.
brew/pip을 통해 간단히 설치할수 있고, tldr [명령어]
를 통해 간단히 명령어의 정의와 사용사례를 확인할 수 있다.
기존 man처럼 몇페이지에 걸친게 아니라 깔끔하게 뭐하는 명령어인지, 사용사례는 어떤지만 보여줘서 매우 유용하게 사용하고있다.
또한 각 명령어 옵션의 shortform이 실제 단어의 어떤부분인지 []로 표현되어있기도 하여 기억하고 활용하기에도 좋다. 그전에는 마치 어릴때 스타크래프트 치트키 비엘에이씨케이 띄고 에스에이치이이피 띄고 더블유에이엘엘 외우던것처럼 ls -alh, netstat -tnlp, tar xvf 로 외워서 썼었는데 각 옵션이 어떤의미인지 확인할 수 있는점이 좋았다
- Test if a given variable is [eq]ual/[n]ot [e]qual/[g]reater [t]han/[l]ess [t]han/[g]reater than or [e]qual/[l]ess than or [e]qual to the specified number:
[[ $variable -eq|ne|gt|lt|ge|le integer ]]
- Change permissions recursively giving [g]roup and [o]thers the ability to [w]rite:
chmod -R g+w,o+w {{path/to/directory}}
설명이 지원되는 명령어는 다음 github-repository에서 확인할 수 있다. 한국어 번역또한 활발히 지원/업데이트되고 있다. 하지만 옵션의 shortform에 해당하는 실제단어의 영문을 보는게 좋아서 굳이 언어설정은 하지않았음