코드잇에서 배웠던 유닉스 커맨드 라인 다시 훑어보기.
CLI 환경과 유닉스
기기에서 프로그램이 실행될 수 있도록 도와주는 역할인 운영체제. 대부분의 운영체제는 UNIX에서 시작했다. 우리에게 익숙한 MAC OS, Android, IOS 등 도 UNIX에서 파생된 것이다.
Kernel은 운영체제의 핵심 부분으로 우리가 흔히 말하는 Linux는 Linux kernel에 해당하며, 운영체제를 말할때는 GNU/Linux 라고 한다. GNU(GNU is Not Unix)는 UNIX의 코드를 단 한 줄도 사용하지 않고 만든 UNIX와 유사한 운영체제이다.
컴퓨터를 사용하는 방식에는 마우스 등을 사용하는 방식인 GUI(Graphic User Interface)와 키보드로 커맨드를 입력하는 방식인 CLI(Command Line Interface)가 있다. CLI는 그래픽이 필요없으므로 더 빠르게 실행되며, 마우스로 클릭하는 GUI에 비해 명령어로 입력하므로 실수할 확률이 낮다. CLI환경은 커맨드만으로 컴퓨터를 사용하는 환경을 뜻한다.
아래와 같은 커맨드를 사용할 수 있다.
- clear : 화면을 깔끔하게 하는 명령어
- date : 현재 날짜와 시간이 출력
- cal : 이번달 달력이 출력
- cal 2030 : 2030년 전체 달력이 출력
- cal -y : 올해의 전체 달력 출력
여기서 2030은 커맨드의 동작 대상을 지정하는 인자(Argument),
-y는 커맨드의 구체적인 동작 방식을 지정하는 옵션(Option)이며, 옵션은 -(하이픈)이 있다.
- cal -B 2 : 현재 날짜가 있는 달로부터 그 이전 달(이전 2개의 달)의 달력도 함께 출력
- cal -A 2 : 현재 날짜가 있는 달로부터 이후의 달(이후 2개의 달)의 달력도 함께 출력
- cal -j : 모든 날짜를 1월 1일을 기준으로 몇 번째 날짜인지 표시하는 방식으로 달력을 출력
여기서 2는 옵션에 주는 값, 즉 옵션의 값 또는 옵션의 인자라고 한다. 값을 줘야 하는 옵션은 값을 주지 않으면 실행되지 않는다.
여러 옵션을 동시에 쓸 때는 하이픈 하나 뒤에 여러 옵션의 이름을 써도 된다. 이 때 값을 줘야 하는 옵션을 더 뒤에 써줘야 한다.
ex) cal -B -jA 3
커맨드의 사용법을 알고 싶을때 man 궁금한커맨드 를 사용하면 공식 매뉴얼을 볼 수 있다.
ex) man cal
화살표를 이용하면 한 줄씩, 스페이스를 이용하면 한 페이지 아래 b를 누르면 한페이지 위로 이동, q를 누르면 나가진다.
디렉토리와 파일
절대 경로는 루트 디렉토리를 기준으로 어떤 파일이나 디렉토리가 가지고 있는 고유한 경로, 상대 경로는 나의 현재 위치를 기준으로 나타낸 경로이다.
예를 들어 현재 위치가 '/Users/jw' 일때, '/Users/jw/Pictures' 는 절대 경로로는 '/Users/jw/Pictures', 상대 경로로는 './Pictures' 로 나타낼 수 있다.
여기서 . 는 현재 위치, .. 는 부모 디렉토리를 나타낸다.
이것만 보면 절대 경로가 더 유용할 것 같지만, 소스 코드 내에서 경로를 표시할 때는 상대 경로로 써주는 게 좋다. 그래야 다른환경으로 옮겨지거나 부모 디렉토리 이름이 바뀌어도 문제 없이 실행이 가능하다!
경로 확인 / 변경
- ~ (틸드, Tilde) : 현재 사용자의 홈 디렉토리를 표시함
- pwd (Print the name of Working Directory) : 현재 작업중인 디렉토리의 이름이 출력
- cd (Change Directory) : 디렉토리를 변경
- cd .. : 상위 폴더로 이동
- cd / : 루트 디렉토리로 이동
- cd - : 바로 이전 경로로 이동
- cd ~ : 홈 디렉토리로 이동
디렉토리 / 파일
- ls (list) : 현재 디렉토리 안의 자식 디렉토리나 파일들의 리스트를 보여줌
- ls -l (long listing format) : 결과를 긴 리스트로 자세하게 보여줌 (파일 크기, 최종 수정된 날짜 등)
- -a (all) : 숨겨져 있는 자식 디렉토리나 파일을 볼 수 있음
- mkdir : 디렉토리 생성
- touch : 파일 생성
- rm : 해당 파일 삭제
- rm -r : 해당 디렉토리 삭제
- head : 파일의 맨 앞 부분(10줄)을 출력
- head -n 20 : 파일의 앞부분 20줄을 출력
- tail : 파일의 맨 뒷 부분(10줄)을 출력
- tail -n 20 : 파일의 뒷부분 20줄을 출력
커맨드를 자유자재로
- 위 아래 방향키 : 이전에 사용한 커맨드 확인
- Tab 키 : 디렉토리나 파일 이름 자동완성
- Ctrl + a : 커서가 맨 앞으로 이동
- Ctrl + e : 커서가 맨 뒤로 이동
- clear : 다 지우고 첫 번째 줄로 이동
Vim
vim을 입력하면 실행되며, Vim에는 4가지 사용 모드- 일반 모드 / 입력 모드 / 비주얼 모드 / 명령 모드가 있다. 어떤 모드에 있는지에 따라 같은 키를 눌러도 다른 명령이 실행되며, 다른 모드로 변경할 때는 항상 일반 모드를 거쳐야 한다.
일반 모드 | 입력 모드 | 비주얼 모드 | 명령 모드 |
커서 이동 | 텍스트 입력 | 텍스트 블록 지정 | 내용 저장 |
텍스트 붙여넣기 | 텍스트 복사 | vim 종료 | |
텍스트 삭제 | 특정 텍스트 검색 및 치환 | ||
작업 취소 |
Vim 일반 모드
- 방향키 : 커서 이동 가능
- 이동하고싶은 칸 수 + h j k l : 해당 칸 만큼 커서 이동. 순서대로 왼쪽 아래 위 오른쪽
- ctrl + g : 현재 커서 위치 표시
- 0 : 커서가 줄의 첫 번째 칸으로 이동
- $ : 커서가 줄의 마지막 칸으로 이동
- gg : 파일의 맨 첫 줄로 이동
- G : 파일의 마지막 줄로 이동
- x : 텍스트 한 칸씩 삭제
- 숫자 + x : 숫자 만큼 칸 삭제
- dd : 문장 삭제
- 숫자 + dd : 숫자 만큼 줄 삭제
- u (undo) : 이전 작업 취소
- p (paste) : 커서 다음 칸에 붙여넣기
- P(대문자) : 커서 이전 칸에 붙여넣기
Vim 입력모드
- i (insert) : 입력 모드로 전환
- a (append) : 커서를 한 칸 뒤로 옮기고 입력 모드로 전환
- o (open) : 커서를 다음 줄로 옮기고 입력 모드로 전환
- I : 커서가 첫 번째 칸으로 이동하고 입력 모드로 전환
- A : 커서를 맨 마지막 칸으로 옮기고 입력 모드로 전환
- O : 커서 위에 빈 줄이 생기고 입력 모드로 전환
Vim 명령모드
- w 저장할파일이름 (write) : 저장하기. 새로 작성할 때만 이름 적어주고, 수정했을 땐 w만 입력해주면 됨
- q (quit) : 나가기. vim 종료
- wq : 저장과 동시에 vim이 종료
- q! : 수정한 사항을 반영 않고 종료
- / : 텍스트 검색 명령 모드로 전환 (? 이용하면 뒤에서 부터 검색)
- 검색할 단어 입력 : 첫 번째 검색된 단어로 이동
- n : 다음 검색된 단어로 커서 이동
- N : 이전 단어로 커서가 이동
- : (콜론) : 텍스트 치환 명령 모드로 전환
- s/바꾸고 싶은 단어/바꿀 단어 (substitute) : 특정 텍스트를 치환
- %s/바꾸고 싶은 단어/바꿀 단어 : 각 줄의 첫 번째 단어를 치환
- %s/바꾸고 싶은 단어/바꿀 단어/g (global) : 전체 범위의 문장에 등장하는 모든 단어 치환
- %s/바꾸고 싶은 단어/바꿀 단어/gc (confirm) : 사용자가 하나씩 확인해가면서 변경. y 누르면 변경, n 누르면 변경 안함
Vim 비주얼 모드
- v (visual) : 비주얼 모드로 전환. 방향키 이용해 블록 지정
- V : 비주얼 모드로 전환. 줄 단위로 블록 지정. 방향키 이용해 줄 단위 블록 지정
- y (yank) : 복사하기
- d (delete) : 텍스트 잘라내기
명령어도 많고 복잡하다. 많이 쓰다보면 익숙해 지겠지....

'1. 프로그래밍 > 기타' 카테고리의 다른 글
IntelliJ - [ 여러 프로젝트 띄우기 ] (0) | 2023.02.14 |
---|---|
IntelliJ - [ 단축키 / 설정 ] (0) | 2023.02.07 |
카라비너 단축키 생성 (0) | 2023.01.17 |
내가 참고하려고 기록하는 맥북 설정 (0) | 2022.12.29 |
더미데이터 생성 - [ Mockaroo / Workbench 프로시저] (0) | 2022.05.16 |