
Linux는 Linus Torvals가 개발한 운영체제이다. linux는 시스템을 운영하는데 가장 널리 사용되는 운영체제이다. Windows 시스템이나 application이 아닌이상 일반적으로 시스템 서버는 linux 기반으로 운영되고 있다. linux에 시스템을 실행하고 유지하고 관리하기 때문에 개발자는 linux 서버에 대해 잘 알고 있어야한다.
상단의 명령어들에 주의하며 공부해보자. 익숙해져서 어려워지지 않도록!
linux의 파일 구조는 다음과 같은 tree형태로 되어 있다.

먼저 가장 최상위에는 /라고 하는 root directory가 존재한다.(디렉토리=폴더) 시작점인 root 디렉토리 안에 여러 하위의 디렉토리들이 있고 각 하위 디렉토리들 안에 또 하위 디렉토리들이 있는 방식으로 구성되어 있다. 그리고 각 디렉토리는 /로 구분짓는다.

Mac의 경우 Users 디렉토리 안에 유저의 home 디렉토리가 있는걸 확인할 수 있다.
또한 home 디렉토리의 경로를 나타낼 때 ~를 사용해서 나타낼 수 있다. 예를 들어 cd ~ 명령어를 사용하면 home 디렉토리로 이동한다. 또한 cd ~/bin을 입력하면 home 디렉토리의 하위 디렉토리인 bin디렉토리로 이동한다.
디렉토리 경로에는 absolute path와 relative path 두가지가 있다.
이름 그대로 절대경로를 뜻하며, root 디렉토리부터 시작하는 경로를 뜻한다. root 디렉토리부터 내가 입력하고싶은 경로를 입력해주면 된다. 절대 경로이기 때문에 현재 내 디렉토리의 위치와는 상관없이 입력한 경로대로 이동할 수 있다.
상대적인 경로를 뜻한다. 상대적이기 때문에 현재 나의 위치를 항상 고려해주어야한다. 상대경로에서는 .과 ..을 기억해주자
.
.은 현재 위치를 뜻한다. 예를 들어 /Users/user에 위치해 있는데 user 디렉토리의 하위 디렉토리인 /bin 디렉토리로 이동하고싶다면 cd ./bin으로 입력해주면 된다.
..
..은 현재 디렉토리의 바로 상위 디렉토리를 이야기한다. /Users/user/bin 가 현재 위치라면 이 위치에서 ..을 입력해주면 /bin 디렉토리의 상위 디렉토리인 /user디렉토리로 이동하게 된다.
상대경로는 모든 경로를 다 써주어야하는 절대경로의 단점을 보완해서 사용한다. 하지만 항상 시점이 현재 나의 위치라는것을 기억해두어야한다.
File Path
파일에 대한 경로를 살펴보고싶다면 원하는 파일이 있는 위치로 이동하여 open명령어를 사용하면 원하는 파일을 열 수 있다.
리눅스에서는 설정을 주로 파일을 통해서 한다. 그리고 많은 설정에 관한 많은Configs file 즉, 여러 설정 파일들이 있다. 그 중 가장 중요한 설정 파일이 바로 shell 설정 파일이다. 각 shell마다 고유 설정 파일이 존재한다. Bash는 .bashrc라는 설정파일을 사용하고 zsh는 .zshrc라는 설정 파일을 사용한다.
Shell 설정 파일을 비롯한 많은 설정 파일들이 대부분 유저의 home디렉토리에 있다.
하지만 home 디렉토리에서 ls(목록 리스트를 보여주는 명령어)를 입력해도 .zshrc라는 파일이 보이지 않는데, 숨김처리가 되어있기 때문이다. 이렇게 파일의 이름 앞에 .이 써져있는것을 dot file이라고 부르며 자동으로 숨겨지게 된다. 이 숨겨진 파일을 보기 위해서는 ls -a라는 옵션을 준 명령어를 입력해준다. -a는 all을 뜻한다. (ls -al 옵션을 주면 모든 파일을 리스트 형식으로 보여준다.)

명령어를 입력해주면 위의 사진처럼 .zshrc파일을 확인할 수 있다. 이 파일을 통해 많은 설정을 할 수 있지만 가장 중요한 설정인 환경 변수 설정을 해줄 수 있다.
변수는 우리가 알고 있는 뜻 그대로 어떠한 값을 저장하고 있는 변수(variable)을 뜻한다. 그리고 환경은 현재 돌아가고 있는 shell을 뜻한다. 따라서 환경 변수란 shell의 어떠한 설정 값을 가지고 있는 변수를 뜻한다. 그리고 이러한 환경 변수들은 shell이 동작하는 동안 계속 존재하며 사용된다.
리눅스에는 여러 환경 변수들이 있는데 가장 대표적인 환경 변수들은 다음과 같다.
HOME : 유저의 home 디렉토리 경로를 저장한 환경 변수
USER : 유저의 아이디를 저장한 환경 변수
PATH : PATH값을 저장한 환경 변수
이 중 꼭 이해하는 변수가 PATH이다. PATH 환경 변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수이다.
PATH 명령어를 이해하기위해 ls로 예를 들어보자. ls 명령어를 사용할 때 정확한 경로를 입력하지 않고 그냥 ls만 입력해도 동작한다. 그런 이유가 바로 PATH 환경 변수때문이다. 명령어를 사용할 때 경로가 지정되어있지 않다면 shell이 PATH 환경 변수에 저장되어 있는 경로들을 하나 하나 보면서 실행 하고자 하는 프로그램이 위치해 있는지 찾는다. 그리고 찾으면 실행시킨다.
PATH값을 출력해보자.

/Users/user/miniconda3/bin:/Users/user/miniconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
하나의 긴 경로가 아닌 :을 사용해서 여러 경로들을 구분해놓았다. 그리하여 ls 명령어가 입력하면 shell이 PATH 환경 변수 값에 저장되어 있는 경로들을 맨 왼쪽 경로부터 하나씩 보면서 ls라는 프로그램을 찾을 수 있는지 확인하고 찾으면 실행된다. ls는 /bin위치에 있기 때문에 :/bin: 이 부분에서 프로그램을 찾아 실행하는것이다. 만일 경로를 못찾으면 못찾는다는 에러메세지와 함께 실행 없이 종료된다.
(경로를 찾기 위해서는 whereis명령어를 입력해보자. ex)whereis ls))
설정하기
Zsh의 경우 .zshrc파일에서 설정하며 다음처럼 설정한다.
export PATH="/Users/user/miniconda3/bin:$PATH"
export는 var처럼 변수를 선언할 때 사용하는 키워드다. PATH 변수의 값이 중요한데, 다음처럼 값이 선언되어있다.
<PATH에 추가하고자 하는 경로>:$PATH
여기서 $PATH 부분은 PATH 변수의 값이 치환된다.
즉, /Users/user/miniconda3/bin:$PATH라는 경로는 PATH에 추가하고 싶으면 경로를 먼저 선언하고 그 다음 :, 그리고 $PATH를 선언하는 것이다. 그럼 기존의 PATH값의 맨 앞쪽에 새로운 경로가 추가된다.
cd : 해당 디렉토리로 이동하는 명령어
ls : 파일과 디렉토리의 모든 정보를 제공
mv : 하나 또는 여러 파일을 한 위치에서 다른 위치로 이동
cp : 파일이나 디렉토리를 한 폴더에서 다른 폴더로 복사
cat : 터미널에서 파일을 열지 않아도 파일 내용을 볼 수 있다.
less : 터미널 세션을 방해하지 않으면서 파일 내에서 양방향으로 탐색 가능
tail : 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용의 일부를 출력
nohup : 리눅스에서 쉘스크립트 파일을 데몬형태로 실행시키는 명령어. 터미널을 종료해도 꺼지지 않는 백그라운드 프로세스를 실행시킬 수 있다.
rm : remove directory의 약자로써, 빈 디렉토리를 삭제할 때 사용하는 명령어. 비어이지 않은 경우에는 추가적으로 옵션을 입력해줘야한다.
mkdir : 새로운 디렉토리 생성
clear : 터미널 화면을 깨끗하게
pwd : Print Work Directory의 약자로서, 현재 작업중인 디렉토리가 어딘지 보여준다.
chmod : 시스템 파일 또는 객체의 엑세스 권한을 변경하거나 수정할 때 사용.
chown : chmod와 비슷하지만 엑세스 권한을 변경하는 대신 사용자가 파일 또는 디렉토리의 소유권을 변경할 수 있다. 루트 권한이 필요하다.
grep : 대량의 텍스트 파일에서 패턴을 검색할 때 사용하는 강력한 정규식 터미널 명령어. 찾고자 하는 패턴을 입력으로 받아 특정 패턴에 대해 지정된 파일을 검색한다.
history : 터미널 세션 기록을 확인
ps : 현재 시스템에서 실행중인 프로세스를 시각화해준다. 시스템 리소스를 분석하는데 자주 사용되며, 터미널을 통해 시스템 프로세스를 조작할 수도 있다.
| 를 사용한다. 2개의 명령어를 연결시켜주는 역할을 한다. 파이프를 사용하면 여러개의 동작을 수행하고자 할 때, 하나의 동작이 끝날때까지 기다리고 다음의 동작을 실행시킬 필요 없이 |로 연결만 시켜주면 다음 동작을 수행한다.
Manual Page로써, 명령어에 대한 설명들이 나와있는 Manual이다. 페이지가 너무 길어 읽기 힘들다는 단점이 있는데 tldr명령어를 사용하면 자주 사용하는 옵션이나 사용법만 간략히 아려준다.
package manager를 사용해서 설치해주어야 한다.
리눅스의 기초부분에 대해 추가적으로 학습하게되면 계속 수정해 나가면서 완성시킬 포스트.