Linux OS: 개발한 프로그램이 배포되고 동작하게 되는 환경이 설치된 서버
Terminal: 명령어를 전달하는 수단
FHS
의 가장 위에는 /
디렉토리가 있다. Root 디렉토리 (directory)라고 하며, FHS의 뿌리가 된다.
시작점인 root 디렉토리 안에 여러 하위 디렉토리들이 있고 각 하위 디렉토리들안에 또 하위 디렉토리 들이 있다.
그리고 각 디렉토리들은 slash (/
) 로 구분한다.
예시)
/home/jake/bin
cd /
cd
명령어는 "change directory"의 약자로 특정 디렉토리로 이동할때 사용된다. cd
명령어 다음에 가고자 하는 디렉토리 경로를 입력하면 된다. /home/jake/bin
을 입력해야 한다.ls/
Absolute path: 절대적 경로
absolute의 의미는 "완전한" 에 가깝다.
Absolute path는 root 디렉토리 부터 시작하는 완전한 경로를 뜻한다.
/home/jake/bin
은 absolute path 이다.
Root 디렉토리에서 부터 시작하기 때문에 현재 위치와 상관 없이 항상 정확히 해당 경로로 이동 할 수 있다.
Relative path: "상대적인" 경로
relative path는 현재 내 위치를 기반으로 움직이는 경로다.
여기서 기억해야할 중요한 2가지 심볼:.
과 ..
.
(single dot) 은 현재 디렉토리를 이야기 한다.
예)
현재 /home/jake
디렉토리에 위치해 있는데 jake
디렉토리의 하위 디렉토리인 bin
디렉토리로 가고 싶다면 cd ./bin
명령어를 입력하면 된다. .
은 현재 디렉토리를 뜻함으로 cd /home/jake/bin
과 동일하다.
..
는 현재 디렉토리 바로 전 디렉토리, 상위 디렉토리를 뜻한다.
예)
현재 디렉토리가 /home/jake/
인데 /home/hong
디렉토리로 가고 싶다면 cd ../hong
명령어를 사용하면 된다.
/home/jake
디렉토리 에서 ..
는 상위 디렉토리 즉 /home
디렉토리를 뜻함으로 ../hong
== /home/hong
이 된다.
파일로 가는 경로
예)
/home/eun/bin
디렉토리 안에 test.py
라는 파일을 열고 싶으면 open /home/eun/bin/tesst.py
라고 실행하면 된다.
리눅스에는 설정을 파일을 통해서 한다.
그리고 여러 config file(설정 파일들)이 있다.
그 중 가장 중요한 설정 파일이 바로 shell 설정 파일이다.
각 shell 마다 고유 설정 파일이 있다.
Bash는 .bashrc
라는 설정파일을 사용하고 zsh는 .zshrc
라는 설정 파일을 사용한다.
[zsh 설정 파일의 위치]
Shell 설정 파일을 비롯한 많은 설정 파일들이 대부분 유저의 home 디렉토리에 있다.
Zsh 설정 파일도 home 디렉토리에 있다.
ls
명령어를 사용시.zshrc
파일이 보이지 않는 이유:
.zshrc
파일은.
으로 시작하는 파일이나 디렉토리여서 hidden file이기 때문이다.dot file을 볼려면
ls
명령어에a
옵션을 주어야 한다.
여기서a
는 all 의 약자인다.a
옵션을 쓰면 모두가 나열된다.ex)
ls -a
PATH
환경 변수에서 변수는 어떠한 값을 저장하고 있는 변수다.
앞에 environment, "환경" 은 무엇인가? 여기서 환경은 현재 돌아가고 있는 shell을 뜻한다.
환경 변수란 shell의 어떠한 설정 값을 가지고 있는 변수를 뜻한다.
그리고 이러한 환경 변수들은 shell이 돌아가는 동안 계속 존재하며 사용된다.
echo $HOME
이라고 입력하여 HOME
환경변수 값을 출력하면,
(이름에서 나오듯이 HOME
환경 변수는 유저의 홈 디렉토리 경로이다.)
echo $HOME /home/jake
HOME
이라는 환경변수를 선언한 적이 없지만 이미 존재하는걸 알 수 있다.
그 이유는 환경 변수들은 shell 이 시작할때 이미 자동으로 선언되었기 때문이다.
Shell은 이러한 환경변수 들을 통해 설정이 된다.
[대표적인 환경 변수]
-HOME
-USER
-PATH
PATH
값을 저장한 환경 변수PATH
환경 변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수 이다.ex)
ls
명령어
실제ls
명령어는/bin
디렉토리 안에 위치해 있다.
whereis
명령어를 사용하면 알 수 있다.
whereis ls /bin/ls
ls
명령어를 사용할때 경로를 입력하지 않고 그냥 ls
만 입력하는 이유는?명령어들도 프로그램이기 때문에 정확한 경로를 알아야 shell이 찾아서 실행할 수 있지만, PATH
환경 변수 때문에 실행이 잘 된다.
경로가 지정되지 않은 명령어는 shell이 PATH
환경 변수에 저장되어 있는 경로들을 보며 실행 하고자 하는 프로그램의 위치를 찾고 실행 시킨다.
PATH
값을 출력하면 다음과 같다.
echo $PATH /home/jake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
각 경로들을 :
를 사용해서 구분한다.
/home/jake/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
ls
의 경우 /bin
에 위치해 있음으로 PATH
값의 7번째 경로에서 찾는다.
만일 못찾으면 에러와 함께 종료된다.
PATH
가 중요한 이유는, 새로운 package를 설치하거나 시스템을 설정하거나 할때 PATH
가 설정이 제대로 안되면 실행이 제대로 안되는 경우가 많기 때문이다.
python 가상환경 매니저인 miniconda를 설치했는데
conda
가 실행이 안되는 경우conda
의 경로가PATH
에 설정이 안되어있을 확률이 높다.
PATH
는 shell 설정 파일에서 설정한다.
Zsh의 경우.zshrc
파일에서 설정하며 다음처럼 설정한다.export PATH="/home/jake/bin/anaconda3/bin:$PATH"
export
는 변수를 선언할때 사용하는 키워드다.
PATH
변수의 값이 중요한데, 다음 처럼 값이 선언되어 있다:
<PATH에 추가하고자 하는 경로>:$PATH
여기서
$PATH
부분은PATH
변수의 값이 치환된다.즉
/home/jake/bin/anaconda3/bin
라는 경로는PATH
에 추가 하고 싶으면 다음 처럼 추가하는 경로를 먼저 선언하고 그 다음:
, 그리고$PATH
를 선언 한다. 그럼 기존의PATH
값의 묀 앞쪽에 새로운 경로가 추가가 된다.
기본 명령어
cd
: 폴더 이동 ls
: 현재 경로 내 파일 목록 출력 mv
: 디렉토리 이동 cp
: 디렉토리 복사 cat
: 터미널에 디렉토리 내용 출력 less
: 스크롤할 수 있게 출력tail
: 파일 내용의 끝 부분만 출력하는 명령어nohup
: 백그라운드 실행 rm
: 디렉토리 제거 mkdir
: 디렉토리 생성 clear
: 터미널에 내용 삭제 pwd
: 현재 경로 출력 chown
: 소유자에 대한 소유권을 변경 chmod
: 디렉토리 혹은 폴더에 대한 권한 설정 grep
: 문자열을 찾는 기능 history
: 지금까지 입력한 명력어들을 출력 ps
: 현재 실행중인 프로세스 목록과 상태touch
: 디렉토리의 용량이 0인 디렉토리를 생성 |
command1 | command2
command1
의 결과값을 command2
의 input으로 넘겨준다.history
명령어는 이제까지 입력한 명령어들을 출력해주는 명령어다. history
만 실행하면 결과값이 화면에 출력 되지만 |
를 사용해 grep
과 같이 사용하면 history
가 출력하는 값들 중 원하는 값만 필터링을 할 수 가 있다.history | grep ls
man ls
tldr
(Too Long Didn't Read) 패키지를 쓰면, 자주 사용하는 옵션이나 사용법만 간략하게 알려준다.tldr ls