게시:

리눅스(Linux)

리눅스(Linux)는 핀란드 출생의 리누스 토르발즈라는 인물이 개발한 Unix기반의 오픈소스 운영체제(OS)이다. 오픈소스이면서 안정적이기 때문에 슈퍼 컴퓨터, 임베디드 기기, 스마트폰 등 시스템을 운영하는데 가장 널리 사용되는 운영체제로 일반적인 시스템 서버는 대부분 Linux 기반이다.

리눅스 파일 계층 구조(Linux File Hierachy Standard)

리눅스의 파일 시스템 계층구조 표준(Filesystem Hierachy Standard, FHS)은 오픈소스인 리눅스를 재구성하여 만든 리눅스 배포판이 다양화남발됨에 따라 파일시스템 디렉토리(폴더) 레이아웃의 표준을 정의한 것이다.

FHS는 최상위에 Root(/) 디렉토리가 있는 Tree 구조로 되어 있다.
Root 디렉토리 안에는 하위 디렉토리들이 있고 하위 디렉토리 안에 또다른 하위 디렉토리가 있으며 상・하위 디렉토리 관계는 Slash(/)로 구분한다.

Linux File Hierachy Standard
Linux File Hierachy Standard

쉘(셸, Shell)

쉘(Shell)은 운영체제상에서 다양한 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 사용자와 컴퓨터 운영체제를 이어주는 역할을 한다고 이해하면 편하다.

쉘은 사용자의 명령어(Command)를 해석하여 일련의 명령을 수행하는데 일반적으로 명령 줄형(Command Line Interface, CLI)과 그래픽형(Graphic User Interface, GUI)으로 나뉜다. 일반적으로 널리 사용되는 익숙한 컴퓨팅 환경(윈도우 환경, 매킨토시 등)이 GUI이고 서버 환경에서 마주하는 검은 프롬프트 창이 CLI이다.

콘솔과 터미널(Console & Terminal)

콘솔(Console)은 운영체제 커널과 연결 가능한 문자 입출력 기능을 가진 하드웨어이다. 쉽게 컴퓨터 키보드로 생각할 수 있다. 터미널(Terminal)은 콘솔을 소프트웨어로 구현한 것으로 쉘을 실행시키기 위한 프로그램이다.

터미널 프롬프트(Terminal Prompt)

프롬프트(Prompt)는 컴퓨터가 명령어를 받아들일 준비를 마쳤다고 알려주는 메시지이다. 터미널에서는 $ 또는 #가 점멸(깜박깜박)하며 표시된다.

Terminal command line
Terminal command line

터미널 명령어(Terminal command)

기본 명령어

디렉토리를 이동하고 현재 디렉토리 내 파일 목록을 확인하거나 내용을 출력하는 명령어 등은 매우 빈번히 사용되므로 암기할 가치가 있다.

명령어
설명
사용법
echo 다음에 들어오는 문자열을 화면 출력함 echo “Hello world”
yes 다음에 들어오는 문자열을 계속 반복 출력
시스템 성능 테스트 시 사용
 
ctrl + c
또는
CMD(⌘) + c
진행 중인 작업중지  
, 이전 명령어나 이후 명령어로 이동할 수 있음  
ctrl + l
또는
CMD(⌘) + l
터미널 창의 모든 내용을 삭제함 clear + Return(↩︎)
clear 터미널 창의 모든 내용을 삭제함  
ls 현재 위치의 파일과 폴더 내역을 출력, list  
ls -a (옵션)숨김 파일까지 출력  
ls -l (옵션)소유자, 권한, 파일 크기 등 상세 정보까지 출력 ls -al
pwd 현재 작업 디렉토리를 출력
(Print Working Directory)
 
cd <dir> <dir> 디렉토리로 이동
(Change Directory)
 
cd - 뒤로가기  
cd .. 상위 디렉토리로 이동  
man <command> <command>의 사용법 출력  
less 파일을 스크롤하며 읽을 수 있는 형태로 출력 less <파일명>
tail 파일의 끝 부분만 출력, 옵션 생략시 10줄 tail <파일명>
history 이전에 사용한 명령어를 순차적으로 출력  
grep 문자열 검색(필터링) history | grep sudo
→ sudo가 포함된 명령어 이력만 검색

파일 조작 명령어

디렉토리 및 파일 생성・수정・이동・삭제 명령어와 파일의 권한을 변경하는 명령어도 자주 사용되며 중요하므로 암기할 가치가 있다.

명령어
설명
사용법
mkdir 디렉토리 생성, Make directory mkdir my_dir
touch 파일 생성 및 날짜정보 변경 touch readme.md
cp 파일 또는 디렉토리 복사, Copy cp readme.md readme2.md
mv 파일 또는 디렉토리 이동, Move mv readme2.md ./move
rm 파일 또는 디렉토리 제거, Remove rm -rf my_dir
cat 터미널에 파일 내용 출력, Concatenate  
chmod 파일 또는 디렉토리 권한 변경 chmod <그룹or사용자><+or-><권한명> <파일 또는 디렉토리>
chown 파일 또는 디렉토리 소유권 변경 chown <소유권자>:<그룹식별자> <파일 또는 디렉토리>

파일 경로

파일 경로를 나타낼 수 있는 방식은 두 가지가 있는데 환경변수를 지정해주어야 하는 경우나 참조 파일이 있는 경우 경로를 설정할 수 있어야 하기 때문에 경로 표기방법을 이해하는 것은 중요하다.

절대 경로(Absolute Path)

root 디렉토리를 기준으로 경로를 표현하는 방식이다. 완전한 방법으로 실수가 없는 방식이지만 계층 구조가 긴 경우 Path가 길어지고 매번 입력하기 번거롭다.

# dann 디렉토리 안의 bin 디렉토리로 이동
$ cd /home/dann/bin

참고: /는 Root 디렉토리를 뜻하며, ~는 Home 디렉토리를 뜻한다.

상대 경로(Relative path)

마지막으로 이동한 디렉토리인 현재 디렉토리를 기준으로 경로를 표현하는 방식이다. Dot notation을 활용하여 상대적인 위치를 간략히 표현할 수 있다.

# /home/dann에서 /home/dann/bin 디렉토리로 이동할 때
$ cd ./bin

# /home/dann 디렉토리에서 /home/tony 디렉토리로 이동할 떄
$ cd ../tony

참고: Dot notation(점 표기법)은 파일 시스템의 계층 구조를 탐색할 때 사용된다.
Single Dot(.)은 현재 디렉토리를 의미하고, Double Dot(..)은 상위 디렉토리를 의미한다.

설정(Config)

Shell 설정 파일을 비롯하여 많은 설정 파일들이 대부분 사용자의 Home(~) 디렉토리에 있다.

참고로 zsh이나 bash 등 많이 사용하는 Shell은 자주 사용하는 Command를 Config 파일에 Alias(별명)를 등록하여 커스텀 명령어를 사용할 수 있는 기능을 지원한다.

# bash config file
$ ~/.bashrc

# zsh config file
$ ~/.zshrc

# macOS IP Address alias($ myip) 
alias myip="ipconfig getiadder en0"

# Ubuntu IP Address alias($ myip)
alias myip="hostname -I"

환경 변수

환경 변수(Environment Variable)는 특정 프로그램을 실행할 때 매번 프로그램 파일의 위치를 입력하는 것이 불편하기 때문에 시스템에 사전 지정하는 경로를 말한다.

예를 우리가 자주 사용하는 명령어 중 하나인 ls의 위치를 확인하고자 whereis ls를 입력해보면 실제 ls 명령어는 /bin 디렉토리 안에 위치한 것을 알 수 있다. 해당 명령어가 위치해 있는 경로를 매번 지정해주지 않더라고 어디서든 쉽게 사용이 가능한 이유는 아래에서 설명할 PATH 환경 변수 덕분이다.

# Example
/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr
/sbin:/sbin!

더 알아보기: echo Command를 사용했을 때 명령문 뒤에 나오는 문자열은 터미널에 출력된다. echo $Path를 실행하면 경로에 대한 정보가 직렬화된 문자열로 표시된다. 경로가 미지정된 명령어를 사용하면 Shell은 $Path에서 실행하고자 하는 프로그램이 존재하는지 하나씩 체크며 각 경로는 :으로 구분된다.

PATH 환경 변수

PATH 환경 변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수이다. 경로가 미지정된 명령어를 사용하면 Shell이 PATH 환경 변수에 저장된 모든 경로를 하나씩 Reading하며 대상 프로그램을 찾아서 실행한다.

PATH가 중요한 이유는 시스템을 설정하거나 새로운 패키지를 설치할 때 PATH가 제대로 지정되지 않으면 프로그램이 실행되지 않는 경우가 많기 때문이다. 예를 들어 미니콘다 설치 후 Conda가 실행되지 않는 경우 PATH에 Conda 경로가 설정되어 있지 않을 가능성이 높다.

PATH는 Shell 설정 파일(config file)에서 설정하며 zsh의 경우 .zshrc 파일에 설정한다.

# .zshrc 내 Conda 환경 변수
export PATH="/home/<사용자이름>/bin/anaconda3/bin:$PATH"export <PATH에 추가하고자 하는 경로>:$PATH (export: 변수 선언과 유사한 기능)

댓글남기기