이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
유닉스 커맨드의 개요
커맨드(command) : 검은 화면에 키보드로 입력하는 명령어
CLI(Command LIne Interface) : 커맨드를 통해 컴퓨터를 사용하는 방식
GUI(Graphical User Interface) : 우리가 일반적으로 사용하는 방식. 화면을 마우스를 통해 사용하는 방식
커맨드를 사용하는 경우
- 라이브러리를 다운로드 받고 설치할 때
- 협업시 코드를 관리할 때
- 웹 개발 시 환경을 설정하고 서버를 실행할 때
유닉스 커맨드의 사용
웹사이트를 제작하고 인터넷에 웹사이트를 배포할 때 유닉스 커맨드가 자주 사용됩니다.
인공지능 프로그램등을 개발할 때, 기능이 뛰어난 서버 컴퓨터를 사용해야 하는데 컴퓨터에 접속하기 위해 유닉스 커맨드를 사용합니다.
유닉스(Unix)란?
1970년대 초반에 개발된 운영 체제
- 소프트웨어를 개발하고 실행할 수 있는 편리한 플랫폼입니다.
- 쉽게 수정해서 다른 컴퓨터에 적용할 수 있습니다.
- 유닉스를 기반으로 탄생한 다양한 운영체제가 있습니다. (우분투, 맥, 리눅스)
유닉스(Unix)와 리눅스(Linux)
유닉스
- 개발 목적 : 개발자들이 소프트웨어를 개발하고 실행할 수 있는 편리한 플랫폼을 제공하기 위해 개발했습니다.
- 장점 : 사람이 이해하기 쉬운 고급 프로그래밍 언어, C언어로 대부분 작성되고 수정해서 다른 컴퓨터에 적용하기에 용이합니다.
- 리눅스가 등장한 배경 : 유닉스가 만들어진 벨 연구소가 당시 AT&T 회사 소속으로 유닉스를 사용하거나 변형할 때 AT&T에 라이선스 비용 지불이 필요했습니다.
→ 소프트웨어를 더 쉽고 자유롭게 공유해야 프로그래밍이 더 발전할 수 있다고 생각하는 공유의 문화가 있었다.
→ GNU(GNU is Not Unix) : 무료 버전이라는 장점이 있었지만 커널이라고 하는 운영 체제의 핵심 부분이 잘 완성되지 않고 있었다는 단점이 있었다.
→ 리누즈 토발즈라는 학생이 커널 하나를 완성했고, 리눅스라는 이름으로 공개했다.
→ GNU / Linux - 유닉스라는 좋은 운영체제가 만들어지고, 이를 자유롭게 변형하고 배포할 수 있는 리눅스 까지 만들어지면서 프로그래밍 업계 전체에 큰 영향을 미치게 되었습니다.
유닉스 커맨드의 종류
실제 사용할 수 있는 커맨드의 종류에는 1000개가 넘습니다.
이번 내용 정리에는 핵심적인 10~20개만 다룰 예정입니다.
주로 다루는 커맨드
- 커맨드라인 사용법
- 파일과 폴더 다루기
- 프로그램 설치
Mac OS
- 리눅스는 유닉스를 기반으로 만들어진 운영체제
- 유닉스를 기반으로 만들어진 운영체제에는 리눅스 이외에도 다른 것도 있었는데 바로 그 운영체제가 BSD이다.
- NeXT라는 회사에서 4.3BSD를 기반으로 NeXTStep이라는 운영 체제를 개발했다.
- 오늘날의 Mac OS는 Unix→BSD→NeXTStep→Mac OS라는 과정을 거쳐 탄생했습니다.
모든 운영 체제의 공통점
- 리눅스, 리눅스의 변형 OS, Mac OS
- 유닉스에는 POSIX라는 표준이 있음
- Unix-certified (공식 유닉스) : mac os, hp unix, AIX
- Unix_like (유사 유닉스) : Ubuntu, Red Hat, CentOS, debian
+) WSL(Windows Subsystem for Linux)이란?
리눅스용 윈도우 하위 시스템 : 윈도우 운영체제에서 리눅스 환경을 실행할 수 있게 해주는 기능
유닉스 커맨드 사용의 기본
터미널, shell, bash
- 터미널
- 실제로 커맨드를 입력하는 검은 창.
- 인풋을 받고 아웃풋을 출력해주는 프로그램.
- shell
- 커맨드를 해석해주는 프로그램.
- 컴퓨터는 사실 date나 cal 같은 단어를 이해하지 못해서 이런 커맨드들을 컴퓨터가 이해할 수 있는 형태로 바꿔줘야 하는데 그 역할을 바로 shell이 합니다.
- shell이 date같은 커맨드를 컴퓨터가 이해할 수 있는 형태로 바꿔서 전달해 주면, 컴퓨터가 실제로 커맨드를 '실행'하고 결과를 되돌려 줍니다.
- shell은 여러 종류가 있고, 종류에 따라 커맨드를 해석하는 방식이나 제공하는 인터페이스가 조금은 다를 수 있습니다.
- bash (Bourne again shell)
- 가장 보편적이고, 많은 유닉스 운영 체제에서 사용하는 기본 shell. (Ubuntu의 기본 shell이기도 하다.)
커맨드
커맨드의 입력 형태는 커맨드, 옵션, 아규먼트 순서로 작성합니다.
- 커맨드
- 옵션 : 커맨드를 어떻게 실행할 것인지에 대해 정하고 커맨드 실행되는 방식을 바꿀 수 있다. 옵션은 - 과 특정 알파벳을 조합하여 작성한다.
- 아규먼트(argument) 또는 인자 : 커맨드를 실행하는 대상
기본 커맨드
- date (날짜, 시간 출력)
- cal (달력)
- cal 10 2025 (2025년 10월 달력 출력)
- cal -j 10 2025 (2025년 1월부터 몇일인지 누적된 값에 대한 달력 형태로 출력)
- cal -y 2025 (2025년 달력 출력)
- cal -yj 2025 (2025년 1월부터 12월 31일까지 몇일인지 누적된 값에 대한 달력 형태로 출력)
- man
위 커맨드를 통해 유닉스에서 제공하는 공식 메뉴얼을 볼 수 있습니다.
커맨드 입력은 man과 궁금한 내용의 커맨드명을 아규먼트로 넘겨주어 조합합니다.
아래는 man cal이라는 커맨드를 사용했다.
- 메뉴얼 창의 구성
- name 섹션 : 커맨드의 이름과 커맨드가 무엇을 하는지 간단한 설명이 되어있다.
- synopsis 섹션 : 커맨드 문법. 즉, 쓸 수 있는 옵션과 아규먼트의 형태가 수록되어있다.
- description 섹션 : 커맨드에 대한 일반적인 설명, 옵션에 대해 각각의 설명과 수록되어있다.
- 메뉴얼 창을 나갈때는 q를 입력하여 메뉴얼 창을 종료한다.
- clear
위에서 작성한 커맨드가 너무 많아 정리하고 싶을 때 커맨드를 지우기 위해 사용한다.
커맨드 히스토리가 사라지지는 않는다.
터미널 사용시 팁(맥 기준)
- ^(위쪽 방향키) : 이전에 실행했던 커맨드를 다시 불러옵니다.
- 커서 이동 단축키
- 커맨드+A : 줄의 가장 앞부분으로 커서가 이동
- 커맨드+E : 줄의 가장 뒷부분으로 커서가 이동
- option+<(왼쪽 방향키) : 단어크기로 커서가 이동
- 커맨드+C : 현재 작성하던 줄을 넘기고 새로운 명령 줄로 이동
- 탭(tab) : 커맨드 및 아규먼트 자동 완성 기능
유닉스에서의 디렉토리와 파일
유닉스 디렉토리의 구조
유닉스 디렉토리의 구조는 뒤집어진 나무의 모습과 같습니다.
상위 디렉토리(부모 디렉토리) : 디렉토리안에 디렉토리가 있을 때 바깥에 있는 디렉토리를 말합니다.
하위 디렉토리(자식 디렉토리) : 디렉토리안에 디렉토리가 있을 때 안에 있는 디렉토리를 말합니다.
사용자의 홈 디렉토리 : 사용자 계정마다 할당된 개인적인 디렉토리를 말합니다. (각종 문서, 바탕화면, 다운로드 파일들이 홈 디렉토리에 저장되어 있다.)
- 리눅스는 홈 디렉토리가 home으로 맥은 홈 디렉토리가 Users로 되어있습니다.
파일 경로를 통해 이동하기 위해 디렉토리나 폴더의 위치를 문자열로 표기할 줄 알아야합니다.
/를 활용하여 경로를 만들어 디렉토리를 이동하고 폴더를 들어갈 수 있습니다.
디렉토리와 파일을 다룰 때 사용하는 커맨드
- pwd (print working directory) : 현재 위치하고 있는 디렉토리의 경로를 출력합니다.
- cd (change directory) : 다른 디렉토리로 이동할 때 사용
- 아무 아규먼트 없이 cd를 하거나 cd ~를 할 경우 사용자의 홈 디렉토리로 이동합니다.
- - 을 사용하면 이전 경로로 돌아갑니다.
- / 를 사용하면 루트 디렉토리로 이동합니다.
- ls (list) : PATH에 해당하는 디렉토리 / 파일 정보를 보여줍니다.
- 아규먼트를 안 주면 현재 디렉토리 정보를 보여줍니다.
- 옵션
- a 옵션 : a 라는 옵션을 활용할 경우 숨겨진 디렉토리, 파일까지 모두 보여줍니다.
- ㅣ옵션 : l(소문자 L) 옵션은 long format을 사용해서 파일 종류, 파일 권한, 파일 소유자, 마지막 수정 시간, 파일 사이즈 등 여러 추가 정보를 보여줍니다. (d로 시작하면 디렉토리, -로 시작하면 파일)
- ls -al : 위에 옵션들을 모두 사용하는 커맨드
절대 경로와 상대 경로
경로를 아규먼트로 받는 모든 커맨드에 절대 경로, 상대 경로 모두 사용 가능합니다.
절대 경로(Absolute Path)
루트(root) 디렉토리부터 시작하여 어떤 파일이나 디렉토리까지의 전체 경로를 표시하는 것
절대 경로는 시스템의 최상위 디렉토리부터 시작하기 때문에 항상 동일한 파일이나 디렉토리를 가리키며, 경로를 찾을 때 다른 경로의 영향을 받지 않습니다.
- 절대경로가 유용한 경우
- 여러 번 상위 디렉토리로 이동해야 하는 경우
- 멀리 떨어져 있는 디렉토리로 이동해야 하는 경우
- 절대 경로의 예
- Windows : C:\Users\username\documents\file.txt
- Unix/Linux : /Users/username/documents/file.txt
상대 경로(Relative Path)
현재 자신이 위치하고 있는 디렉토리를 기준으로 경로를 나타내는 것 (절대경로보다 더 많이 사용된다.)
- 현재 디렉토리는 . 으로 표시합니다.
- 상위 디렉토리는 .. 으로 표시합니다.
- 홈 디렉토리는 ~ 로 표시합니다.
- 홈 디렉토리를 펼쳐서 쓰면 /home/username (Ubuntu) 또는 /Users/username (macOS)입니다.
예시
- 현재 디렉토리의 상위 디렉토리에 있는 file.txt로 이동 → ../file.txt
- 현재 디렉토리에서 documents 디렉토리 내의 file.txt로 이동 → documents/file.txt
디렉토리나 파일의 이름에 공백이 있을 경우
- 작은 따옴표 사용
- 큰 따옴표 사용
- 역슬래시 사용 : 공백 대신에 \를 추가합니다.
하지만 사실 파일이나 디렉토리 이름에는 애초에 공백을 안 사용하는게 더 편리하고 바람직합니다.
따라서, 공백 대신에 _같은 기호를 활용하는게 좋습니다.
디렉토리 만들기 : mkdir(make directory)
디렉토리를 생성합니다.
여러 경로를 한꺼번에 줘서 여러 디렉토리를 한꺼번에 만들 수도 있습니다.
파일 만들기 : touch(touch file)
경로에 해당하는 파일을 생성합니다.
(원래는 파일의 마지막 접근 시간 / 수정 시간을 업데이트하는데 쓰이는 목적으로 가지고 있습니다.)
파일 내용 작성하기 : vim
vim 텍스트 에디터를 실행합니다. (엄청나게 많은 기능과 단축키가 있고, 모든걸 키보드로 해결해야 합니다.)
vim의 4가지 사용 모드
- 일반 모드: 커서 이동, 텍스트 붙여 넣기, 작업 취소를 할 수 있습니다.
- 입력 모드 : i를 입력하면 텍스트를 입력할 수 있습니다.
- 비주얼 모드 : v를 입력하고 텍스트 블록 지정이나 텍스트 복사를 할 수 있습니다.
- 명령 모드 : : 입력하고 내용 저장이나 종료를 할 수 있습니다.
- 명령 모드에서 파일을 저장하려면 w, vim을 종료하려면 q를 쓰면 됩니다. 저장하는 동시에 종료하고 싶다면 :wq를 사용합니다.
vim 관련 단축키
- 텍스트 입력: 입력 모드(i) → 텍스트 입력
- 텍스트 한 줄 복사: 일반 모드 → 복사하고 싶은 줄에 커서 위치 → yy
- 텍스트 한 줄 잘라내기: 일반 모드 → 잘라내고 싶은 줄에 커서 위치 → dd
- 특정 영역 복사: 비주얼 모드(V는 줄 단위, v는 글자 단위) → 복사하고 싶은 영역 커서로 설정 → y
- 특정 영역 잘라내기: 비주얼 모드(V는 줄 단위, v는 글자 단위) → 잘라내고 싶은 영역 커서로 설정 → d
- 텍스트 붙여넣기: 일반 모드 → 붙여넣고 싶은 위치에 커서 위치 → p
- 파일 저장: 명령 모드(:) → w + enter
- 파일 저장 + vim 종료: 명령 모드(:) → wq + enter
- vim 종료 (내용 저장되지 않음): 명령 모드(:) → q! + enter
파일 내용 살펴보기 : cat
경로에 해당하는 파일들의 내용을 출력합니다.
파일이 여러 개인 경우 내용을 모두 붙여서 출력합니다.
파일이 많은 경우 파일 내용 살펴보기 : less
PATH에 해당하는 파일을 페이지 단위로 나눠서 보여줍니다.
- 줄 이동: 위쪽 / 아래쪽 방향키
- 다음 페이지: space 아니면 f
- 이전 페이지: b
- 마지막 페이지: G
- 처음 페이지: g
파일의 첫 몇줄만 확인하고 싶은 경우 : head
PATH에 해당하는 파일의 처음 10줄을 출력합니다.
- n 옵션: 출력되는 줄 개수를 바꿉니다. (5줄만 보고싶다면 head -n 5 파일명 사용)
파일의 마지막 몇줄만 확인하고 싶은 경우 : tail
PATH에 해당하는 파일의 마지막 10줄을 출력합니다.
- n 옵션: 출력되는 줄 개수를 바꿉니다. (15줄을 보고싶다면 tail -n 15 파일명 사용)
디렉토리와 파일의 이름을 변경하고 옮기기 : mv(move)
디렉토리/파일을 이동하거나 이름을 변경하고 mv PATH1(작업할 대상의 경로) PATH2(이동할 경로 또는 변경할 이름) 형태의 커맨드를 사용합니다.
- 두 번째 아규먼트(PATH2) 가 이미 존재하는 디렉토리의 경로일 경우 PATH1에 해당하는 디렉토리/파일을 그 안으로 이동하고, 그렇지 않으면 PATH2로 이름 변경합니다.
- i 옵션: 이동/이름 변경을 할 때 똑같은 이름의 디렉토리/파일이 있으면 덮어씌워집니다. 확인을 하면서 mv 를 하려면 i 옵션을 사용하면 됩니다.
디렉토리와 파일 복사 붙여넣기 : cp(copy)
디렉토리 및 파일을 복사해주며, cp PATH1(복사할 대상의 경로) PATH2(복사할 위치) 형태의 커맨드를 사용합니다.
- 두 번째 아규먼트(PATH2) 가 이미 존재하는 디렉토리의 경로일 경우 PATH1에 해당하는 디렉토리/파일을 그 안으로 복사하고, 그렇지 않으면 PATH2라는 이름으로 복사합니다.
디렉토리를 복사할 때는 cp -r 디렉토리명 디렉토리명_copy 커맨드를 작성해야 합니다. (-r 옵션을 꼭 지정해주어야 한다.)
- r 옵션: 디렉토리를 복사할 때는 꼭 r 옵션을 써야 합니다.
- i 옵션: 복사할 때 똑같은 이름의 파일이 있으면 덮어씌워집니다. 확인을 하면서 cp를 하려면 i 옵션을 사용하면 됩니다.
디렉토리와 파일 삭제하기 : rm(remove)
경로에 해당하는 파일/디렉토리들을 지워주고 rm PATH1(삭제할 파일 또는 디렉토리의 경로) PATH2 PATH3 형태의 커맨드를 사용합니다.
- 옵션
- r 옵션: 디렉토리를 삭제할 때는 꼭 r 옵션을 써야 합니다.
- i 옵션: 삭제할 때 각 파일을 정말 지울 것인지 물어봅니다.
- f 옵션: 지울 것인지 절대 확인하지 않고 바로 지웁니다.
기초 및 파일과 디렉토리 커맨드 정리
커맨드명 | 커맨드 입력 방법 | 커맨드 설명 |
pwd (print working directory) | pwd | 현재 디렉토리 (working directory)의 경로를 출력 |
cd (change directory) | cd [PATH] | path 경로에 해당하는 디렉토리로 이동 |
ls (list) | ls [-al] [PATH] | path에 해당하는 디렉토리 / 파일 정보를 보여줌 |
mkdir (make directory) | mkdir PATH | 디렉토리를 생성함 |
touch (touch file) | touch PATH | 경로에 해당하는 파일을 생성함 |
vim | vim [PATH] | vim 텍스트 에디터를 실행함 |
cat (concatenate) | cat PATH1 PATH2 … | 경로에 해당하는 파일들의 내용을 출력함 |
less | less PATH | PATH에 해당하는 파일을 페이지 단위로 나눠서 보여줌 |
head | head [-n count] PATH | PATH에 해당하는 파일의 처음 10줄을 출력함 |
tail | tail [-n count] PATH | PATH에 해당하는 파일의 마지막 10줄을 출력함 |
mv (move) | mv [-i] SOURCE_PATH DEST_PATH | 디렉토리/파일을 이동하거나 이름을 변경함 |
cp (copy) | cp [-ri] SOURCE_PATH DEST_PATH | 디렉토리/파일을 복사함 |
rm (remove) | rm [-rif] PATH1 PATH2 ... | 경로에 해당하는 파일/디렉토리들을 지워줌 |
커맨드를 이용한 외부 프로그램 설치하기
sudo
- 유닉스 운영 체제에서 특정 작업을 하려면 관리자 권한이 필요할 때가 있는데, sudo 커맨드를 사용하면 잠시 관리자 권한을 획득할 수 있습니다.
- 특히, 설치 관련 작업을 할 때 필요합니다.
→ sudo 커맨드는 일시적으로 일반 유저에게 관리자 권한을 부여하는 커맨드
이번 글에서는 전 글에 이어 유닉스 커맨드의 개요 / 유닉스에서의 디렉토리와 파일을 다루는 커맨드 / 기초 및 파일과 디렉토리 커맨드 정리 / 외부 프로그램 설치 커맨드가 포함된 내용을 정리했습니다.
실용적 커맨드는 데이터를 다루는 경우에 필수적으로 개념을 숙지하고 할 필요가 있으며, 꼭 활용할 상황이 있어 커맨드를 외우고 가면 좋을 것 같습니다.
이번 글도 읽어주셔서 감사합니다.
출처 및 참고자료 : 코드잇 사이트 강의 '실용적 유닉스 커맨드' https://www.codeit.kr/topics/practical-unix-commands
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!