Linux는 1991년 Linus Torvals가 개발한 운영체제
( 대학교 2학년 전공 수업때 만든 운영체제에서 시작했다고 함....ㄷㄷ oh차원이 다른 천재oh )
Linux는 오픈소스이며, Unix와 호환이 좋아서 시스템을 운영하는데 가장 널리 사용되는 운영체제 이다.
커널
: 리눅스의 핵심, 프로세스 관리, 메모리 관리, 파일 및 장치 등 컴퓨터의 하드웨어를 모두 제어하는 영역
셀
: 커널과 사용자 간의 접점으로 셀을 통해 우리는 컴퓨터가 원하는 동작을 하도록 할 수 있다. ( 대표적인 셀은 BASH, zsh 가 있음 )
응용 프로그램
: 각종 프로그램 시스템을 위한 프로그램, 사용자의 문서 편집 도구, 브라우저 네트워크 도구 등 다양한 프로그램을 말한다.
Linux의 파일 구조는 위 그림처럼 tree형 구조로 이루어져있다.
root 영역은 /
로 경로를 표시하고, 그 아래에 하위 경로가 존재하며, 하위경로는 중첩이 가능하다.
/
: 마운트 되는 리눅스 파일 시스템이 있는 최상위 디렉토리인 root
디렉토리, 리눅스의 모든 디렉토리들의 시작점이다.
디렉토리들을 절대경로로 표기할 때에는 반드시 이 디렉토리로부터 시작해야 한다.
/home
: 사용자의 home
디렉토리, useradd
명령어로 새로운 사용자를 생성하면 (대부분은) 사용자의 ID와 동일한 이름의 디렉토리가 자동으로 생성된다.
그 외 다양한 디렉토리에 대한 설명은 여기 참고
절대 경로!! (사실 의미는 절대 경로 보다는 완전한 경로에 더 가깝다.)
Absolute path는 root 디렉토리 부터 시작하는 경로를 뜻한다.
항상 root 디렉토리에서 부터 시작하기 때문에 현재 나의 위치와 상관 없이 항상 정확히 해당 경로로 이동 할 수 있다.
상대 경로!!
현재 내 위치를 기반으로 움직이는 경로이다.
여기서 기억해야할 중요한 2가지 심볼이 있다! .
과 ..
!!!
.
(single dot) : 현재 디렉토리..
(double dot) : 현재 디렉토리 바로 전 디렉토리, 즉 현재 디렉토리의 상위 디렉토리디렉토리 경로는 아니지만, 파일로 가는 경로도 디렉토리 경로와 동일하다
cd / => / (root 디렉토리)로 이동
cd 또는 cd ~ => cd만 입력해도 home 디렉토리로 이동
pwd => 현재 내 위치가 어디인지 확인
ls => 현재 디렉토리에 있는 내용을 출력
cd
: change directory 의 약자로 특정 디렉토리로 이동할때 사용
ls -a
명령어로 현재 디렉토리에 있는 숨겨진 내용을 출력
위 그림에서 .
은 현재 경로, ..
상위 경로를 의미한다.
만약 현재 위치 /Users/solmii
에서 Users
디렉토리로 나가고 싶다면, 절대 경로인 cd /Users
을 입력해도 되고, 상대 경로인 cd ..
를 입력해도 된다.
그 다음 현재 위치인 /Users
에서 다시 /Users/solmii
경로로 이동하고 싶다면, 절대경로인 cd /Users/solmii
을 입력해도 되고, 상대 경로인 cd ./solmii
를 입력해도 된다.
/Users/solmii
에서 root 경로 /
로 나가고 싶다면, 절대 경로를 이용해서 cd ../..
이라고 작성할 수도 있다.
Linux에서는 그대로 home 디렉토리는 /home
이지만, Mac에서는 /home
디렉토리가 아니라 /Users
디렉토리에 유저의 home 디렉토리가 있다.
shell 프로그램의 환경설정 파일은 보통 .
파일(닷파일)이라고 부르며, 이렇게 .
으로 시작하는 파일이나 디렉토리는 자동으로 숨겨지게 된다
각 shell 마다 고유 설정 파일이 있다.
Bash는 .bashrc
라는 설정파일을 사용하고 zsh는 .zshrc
라는 설정 파일을 사용한다.
터미널에서 꼭 이해해야 하는 변수에는 PATH
환경 변수가 있다.
환경 변수(environemnt variable)란 무엇일까?
변수는 우리가 흔히 아는 variable, 어떤 값을 저장하고 있는 변수이다.
앞에 붙은 environemnt은 환경 = 터미널 환경 = 현재 돌아가고 있는 shell 을 의미한다.
즉, 환경 변수란 shell의 어떠한 설정 값을 가지고 있는 변수를 의미한다.
그리고 이러한 환경 변수들은 shell 이 시작할때 이미 자동으로 선언되었기 때문에, 우리가 따로 선언한 적이 없어도 이미 존재하고 있는것을 알 수 있다.
리눅스의 대표적인 환경 변수
HOME
: 유저의 home 디렉토리 경로를 저장한 환경 변수USER
: 유저의 아이디를 저장한 환경 변수PATH
: PATH
값을 저장한 환경 번수이 중 PATH
환경 변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수로, 매우매우X100 중요하다!
예를 들어, 앞의 예제에서 우리가
정확한 경로 없이 ls
, pwd
라는 명령어만 입력해도 잘 실행이 됐지만, 사실은 명령어들도 결국 프로그램이기 때문에 어디에 위치해 있는지 정확한 경로를 알아야 shell이 찾아서 실행할 수 있다.
이렇게 경로 없이 명령어만 입력해도 잘 실행된 이유가 바로 PATH
환경 변수 때문이다.
명령어를 사용했는데 만일 경로가 지정되어 있지 않으면, shell이 PATH
환경 변수에 저장되어 있는 경로들을 하나 하나 보면서 실행 하고자 하는 프로그램이 위치해 있는지 찾고, 실행시킨다.
> echo $PATH
/home/eun/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PATH 값을 출력해보면 다음과 같은데, 여러 경로들을 담고 있으며 각 경로를 :
로 구분하고, 특정 명령어가 실행되면 위의 경로를 맨 왼쪽(1번)부터 하나하나 보면서 명령어 프로그램을 찾는 것!
( 만일 못찾으면 못찾는다는 에러 메세지와 함께 실행 없이 종료됨! )
PATH 가 중요한 이유는, 새로운 package를 설치하거나 시스템을 설정하거나 할때 PATH가 설정이 제대로 안되면 실행이 제대로 안되는 경우가 많기 때문이다.
(예를 들어, python 가상환경 매니저인 miniconda를 설치했는데 conda가 실행이 안되는 경우 conda의 경로가 PATH에 설정이 안되어있을 확률이 높다.)
<작성중>