Skip to content

Latest commit

 

History

History
174 lines (109 loc) · 11.5 KB

2021-02-04-리눅스기반 CLI 기본 사용법과 개념.md

File metadata and controls

174 lines (109 loc) · 11.5 KB

CLI

Command Line Interface로 GUI 없이 문자열로 이루어진 인터페이스를 의미한다. 터미널은 CLI가 물리적으로 구현된 기계를 의미한다. 셸은 CLI로 구현된 터미널에서 실행 가능한 대화형 프로그램을 의미한다. 가상 터미널과 셸은 구분되는 개념이라고 하지만 보통 구분없이 사용한다.

vim

vim는 CLI에서 사용할 수 있는 텍스트 에디터이다. vi과 호환되며 보다 여러 기능이 추가되어 있어 vi 보다는 vim을 사용하는 듯 하다.

기본사용법

vim 편집은 모드전환을 통해 진행된다.

모드전환

  • i : 끼워넣기 모드 전환
  • esc : 노멀모드로 전환
  • 노멀모드에서 :wq + enter 쓰고(write) 종료(quit), ! 가 끝에 붙는 경우는 강제적으로 실행할 때 이다.
  • / + 검색하고 싶은 문자열 : 검색모드로 전환하여 검색

다양한 단축키 모음

단축키 모음

이미지 출처 : https://kldp.org/node/102947

vim cheat sheet: https://vim.rtorr.com/lang/ko

텍스트 복사 붙여넣기

복사를 시작하고 싶은 위치에 커서를 두고 → v로 비주얼모드 전환 → 화살표로 범위지정 → y 키로 yank(복사) → 붙이고 싶은 장소로 이동하여 (복사하고 싶은 숫자) shift + p 로 붙여쓰기

되돌리기를 하려다가?!

습관적으로 되돌리기를 하고 싶을 때, ctrl + z를 사용하게 된다. 하지만 vim에서는 일시정지를 의미한다. fg 명령어를 사용하여 일시정지된 애플리케이션을 다시 실행가능하다. vim에서 되돌리기를 할 때는 노멀모드에서 undo의 의미인 u를 사용한다.

fg와 bg

fg&bg

프로세스의 진행에는 백그라운드(back ground) 또는 포그라운드(fore ground)라는 두가지 모드가 있다. 우리가 화면에 나타나서 명령어를 입력하고 보는 작업을 fore ground, 뒷단에서 진행되는 작업을 back ground 라고 한다. fg, bg 명령어로 모드 전환이 가능하다. vim에서 ctrl + z 로 되돌리기를 하려다 일시정지 한 것은 back ground로 suspend 된 상태이다.

일반적으로 fore ground 모드로 진행되고, back ground로 진행할 때는 명령어 뒤에 & 를 붙여주면 된다.

표준 입출력, 표준 에러

유닉스, 리눅스에서는 모든 것을 파일 입출력으로 관리한다! 마우스, 키보드 등 모두 결국은 파일인 것이다.

  • 표준입력 : 프로그램에 입력되는 데이터의 표준입력으로 유닉스에서는 키보드로 설정되어 있다. 파일번호는 0번이다.
  • 표준에러 : 에러 입력을 의미하며 파일번호는 2번이다.
  • 표준출력 : 쉘에 나타나는 출력을 의미한다. 파일번호는 1번이다. 표준입력과 표준에러는 모두 표준출력으로 출력된다.

파이프라인, 리다이렉션

파이프라인

표준 출력을 다음 명령어의 표준 입력으로 들어가게 한다. 파이프라인으로 여러가지 명령어의 결과를 연결해서 사용할 수 있다.

  • | : 표준출력을 표준 입력으로 돌려준다. 연결 시켜준다!

리다이렉션

  • > : echo hello > hello.txt 표준출력대신 파일에 표준입력으로 넣어준다. 덮어쓰기
  • >> : echo hello2 >> hello.txt 표준출력대신 파일에 표준입력으로 넣어준다. 이어쓰기
  • 2> : 표준에러를 리다이렉션 한다.
  • >&2 : 모든 출력을 강제로 표준에러로 사용한다.
  • 2>&1 : 표준입력과 표준에러를 리다이렉션 한다.

명령어들

기본

  • pwd : 현재 경로 파악
  • cd : change directory 경로변경 -> 절대경로, 상대경로 둘다 가능 ( . : 현재 디렉토리, .. : 상위 디렉토리 )
  • ls : 디렉토리 정보 파악
    • -al : 모든 리스트 출력
    • -G : 타입에 따라 다른 색 출력
    • -d */ : 디렉토리만 출력
    • -t : 가장 최근에 수정된 파일대로 정렬
    • -S : 사이즈가 큰 파일부터 출력
    • -r : 순서를 거꾸로 출력
    • -R : 재귀적으로 현재 디렉터리 아래 모두 출력
  • mkdir : 디렉토리 생성
  • touch : 파일 만들기 (본 목적은 원래 따로 있다고 하지만 보통 파일을 새로 만들때 사용한다.)
  • mv <파일경로> <새로운경로> : 파일 이름 이동
  • cp <파일경로> <새로운경로> : 파일 복사
  • echo : 매개변수를 입력받아 표준출력으로 돌려준다.

사용하기 편리하게 만들어주는 명령어들

파일 내용을 다음 명령어에 출력

  • tail + F: 파일에 추가된 부분만 출력한다.
  • cat : 매개변수로 입력받은 파일 이름을 표준출력으로 돌려준다.

중간에서 이전 명령어 출력을 가공

  • sed : 원본을 손상하지 않으며 출력 내용을 변경한다. 삭제, 추가, 치환 등을 사용하여 출력 내용을 원하는대로 조정할 수 있다. (원본 내용을 변경하지 않는다고 설명되어 있는데 -i 옵션을 주면 원본 파일도 변경되는 듯 하다.)
  • grep : 매개변수에 있는 패턴이 표준입력에 있으면 표준출력으로 돌려준다. 파이프라인과 함께 해당 내용만 검색해서 걸러낼 때 유용하다.
  • sort : 정렬한다.
  • uniq : 중복된 내용을 제거한다.
  • cut : 내용을 잘라낸다.

이전 명령어 출력을 최종 가공

  • less : 스크롤할 수 있게 출력한다.
  • head <숫자> : 앞 부분만 출력하는 명령어이다.
  • tail <숫자> : 뒷 부분만 출력하는 명령어이다.

기타

  • history <숫자> : 입력했던 명령어 목록을 <숫자>만큼 볼 수 있다. 명령어의 이름을 입력해도 되고, history로 출력된 첫번째 컬럼의 번호를 !<번호> 로 입력해도 해당 명령어가 실행된다. 화살표 위아래 입력으로도 기존 입력했던 명령어를 불러올 수 있다. ctrl + r <명령어> 입력을 하면 해당 명령어가 들어간 명령어 중 이전에 사용되었던 명령어를 찾아준다.
  • \ : 여러줄에 걸쳐 명령어 실행이 가능하다.
  • tap키 : 자동완성된다. 여러번 누르면 자동완성의 다음 후보 단어로 바뀐다.
  • tee : 파이프라인과 같이 사용되며 출력과 동시에 파일에 기록해준다.
  • top : 시스템 부하 상태를 확인하는 명령어이다. 프로세스 상태를 확인할 수 있다.
  • chmod : 권한을 변경하는 명령어이다.
  • kill : 프로세스를 강제 종료시킬 수 있다.

Tips

옵션에 - 와 -- 를 쓰는 경우?

문자 하나인 경우는 - 를 쓰고 두글자 이상이면 -- 를 쓰는 경우가 많다고 한다. -로 이루어지는 옵션은 여러개 사용이 가능하다. 예를 들어 -a -l -h 등이라면 -alh로 사용이 가능하다.

✨나가기 버튼 - ^c, ^d, ^, ^z

^의미는 ctrl 과 함께 사용되는의 의미를 가진다. ^c 가 가장 많이 사용되는 듯하고, 안 될 경우 나머지 나가기 키를 사용해보자~!

  • ^c : SIGINT(siginterrupt)라는 신호를 프로세스에게 전달한다. 일반적으로 실행중인 작업이 중지되며 프로그램 구현마다 차이가 있을 수 있다. 가장 많이 사용되는 방법인 것 같다.
  • ^d : EOF(End Of File)의 시그널을 의미한다. 입력이 종료되었음을 알려준다.
  • ^\ : SIGQUIT 시그널을 의미한다.
  • ^z : SIGSTOP 시그널을 의미한다.

문자열 ""와 ''의 차이

""(쌍따옴표) 안에 들어있는 $변수 는 자동적으로 치환된다. 이스케이프 문자도 쌍따옴표 문자열 안에 있으면 인식한다.

''(홑따옴표) 안의 문자열은 치환되지 않으며 문자 그대로 전달된다. 하지만 홑따옴표 안에 홑따옴표는 사용할 수 없고, 이스케이프 문자를 사용해도 홑따옴표는 사용 불가하다.

환경변수

환경변수는 셸이 진행중인 환경의 시스템과 관련된 정보를 담은 변수들을 의미한다. 환경변수를 정의할 때는 export 명령어를 사용하고, 삭제할 때는 unset 명령어를 사용한다. key=value 의 형식으로 지정한다. 특정 명령어에서만 환경변수를 설정하려면 그 명령어 앞에 key=value 값으로 지정해주면 된다.

종료상태

프로세스는 종료상태를 리턴하게 되어있다. 0은 정상종료, 그외의 양수는 비정상종료를 의미한다. $? 는 직전 프로세스의 종료상태를 의미하며 해당 명령어를 통해 직전 프로세스의 종료상태를 알 수 있다.

정리

프로그래밍을 배우기 전에는 항상 GUI 프로그램만 사용했는데 프로그래밍을 배우면서 커맨드라인으로 작성하는 것이 상당히 부담스럽게 느껴졌다. 어떻게 종료하는지도 모르고 왜 되는지 안 되는지도 모르면서 검색해서 나오는 명령어를 따라치기 바빴다. 검색하면 이해할 수 있게 기본 개념과 명령어들을 정리해보았다. 정리하면서 부담감이 조금은 줄어든 것 같기도 하다. 😅 셸 스크립트 내용도 이후에 정리해보려고 한다.

References

리눅스/맥 커멘드라인 셸 입문자를 위한 생존 가이드

만화로 배우는 리눅스 시스템 관리1

vim 단축키 모음 이미지 출처 : https://kldp.org/node/102947

vim cheat sheat : https://vim.rtorr.com/lang/ko

피드백

  • vim을 공부한다면 vimtutor을 고려해보는 것도 좋다.

  • 환경변수에서 bash_profile, bachrc도 찾아보기

  • vim을 게임으로 연습할 수 있는 사이트 : https://vim-adventures.com/

  • 특히 유용한 명령어들

    • tail + F
    • less
    • sed -i 's/원래 문자열/변경할 문자열/g' 변경할 파일 -> 원본 파일 변경됨
    • sed 's/원래 문자열/변경할 문자열/g' 변경할 파일 -> 출력시만 변경되고 원본 파일 변경되지 않음