개발한 프로그램이 배보되고 동작하는 환경이 Linux OS 가 설치된 서버이고,
리눅스에서 명령어를 전달하는 수단이 Terminal 이다.
리눅스는 1991년 Linus Torvals 가 개발한 운영체제이다. 리눅스는 오픈소스이며 누구나 코드를 볼 수 있다. 리눅스는 시스템 운영에 가장 널리 사용되는 운영체제이다. 윈도우 시스템이나 어플리케이션이 아니라면 일반적으로 시스템 서버는 리눅스 기반으로 운영되고 있다.
리눅스의 파일 구조는 트리 형태로 되어있다.
FHS 의 가장 위에는 /
디렉토리가 있다. root 디렉토리라고 하며 '폴더'와 동일한 개념이다.
각 디렉토리는 slash /
로 구분한다. 윈도우에서는 back slash \
로 구분한다. 예를 들어 root 디렉토리 안에 home 이라는 하위 디렉토리가 있고 그 안에 eun 이라는 하위 디렉토리가 있고 그 안에 bin 이라는 디렉토리가 있다면 "bin 디렉토리까지의 경로" 는 다음과 같다.
/home/eun/bin
cd /
ls
root 디렉토리에서 ls 를 입력해서 하위 디렉토리들을 보면 home
디렉토리가 있다. (맥은 user
디렉토리) home 디렉토리는 유저의 공간이기 때문에 주로 home 디렉토리에서 많은 것을 하게 된다. home 디렉토리는 아주 중요하기 때문에 cd
명령어를 실행할 때 디렉토리 경로를 생략하고 cd 만 입력하면 자동으로 home 디렉토리로 이동한다.
tilda ~
를 사용해서 home 디렉토리를 나타낼 수 있다. 예를 들어 cd ~
명령어를 사용하면 home 디렉토리로 이동할 수 있다. cd ~/bin
명령어를 사용하면 home 디렉토리의 하위 디렉토리 bin 디렉토리로 이동할 수 있다.
absolute path
: 절대적 경로, 완전한 경로
: root 디렉토리부터 시작하는 경로
: root 디렉토리부터 시작하기 때문에 현재 나의 위치와 상관없이 항상 정확히 해당 경로로 이동할 수 있다.
relative path
: 상대적 경로
: 현재 내 위치를 기반으로 움직이는 경로
: .
와 ..
를 기억해야 한다.
: .
single dot 은 현재 디렉토리를 의미한다. 현재 위치가 /home/eun
이고 eun 디렉토리의 하위 디렉토리인 bin 디렉토리로 가고 싶다면 cd ./bin
명령어를 입력하면 된다. cd home/eun/bin
이렇게 모두 입력하기 귀찮기 때문에 편리하라고 만들어진 특별한 심볼이다.
: ..
는 현재 디렉토리의 상위 디렉토리를 의미한다. 현재 디렉토리가 /home/eun/
인데 /home/yerikim
디렉토리로 가고 싶다면 cd ../yerikim
명령어를 사용하면 된다.
/home/eun/bin
디렉토리 안의 test.py
파일을 열고 싶으면 open /home/eun/bin/test.py
라고 실행하면 된다.리눅스에서는 설정을 주로 파일을 통해서 한다. 그리고 여러 config file(설정파일) 들이 있다. 그 중 가장 중요한 설정파일이 shell 설정파일이다. 각 shell 마다 고유 설정파일이 있고 Bash 는 .bashrc
라는 설정파일을 사용하고 zsh 는 .zshrc
라는 설정파일을 사용한다.
shell 설정파일을 비롯한 많은 설정파일들이 대부분 유저의 home 디렉토리에 있다. Zsh 설정파일도 마찬가지이다. 하지만 ls
명령어를 사용하면 zshrc
파일이 보이지 않는다. 그 이유는 .zshrc
파일 이름이 .
으로 시작하기 때문이다. .
으로 시작하는 파일이나 디렉토리는 자동으로 숨겨지게 된다. 이러한 파일을 "dot file" 이라고 한다.
dot file 을 보려면 ls
명령어에 -a
옵션을 줘야 한다. -a
는 all 의 약자이다. 숨겨진 파일이든 안 숨겨진 파일이든 나열하라는 뜻이다.
그렇다면 설정파일을 통해 무엇을 설정하는 것일까? 아주 많은 설정들을 할 수 있지만 그 중 가장 중요한 것은 PATH
설정이다.
환경변수란, shell(현재 돌아가고 있는 환경) 의 설정값을 가지고 있는 변수를 뜻한다. 환경변수들은 shell 이 돌아가는 동안 계속 존재하며 사용된다. echo $HOME
이라고 입력하면 HOME
환경변수 값이 출력된다. 이름에서 나오듯이 HOME
의 환경변수는 유저의 홈 디렉토리 경로이다.
> echo $HOME
/home/eun
HOME
이라는 변수를 선언한 적이 없지만 이미 존재하고 있다. 환경변수들은 shell 이 시작할 때 자동으로 선언되기 때문이다. shell 은 환경변수들을 통해 설정된다.
HOME
: 유저의 home 디렉토리 경로를 저장한 환경변수USER
: 유저의 아이디를 저장한 환경변수PATH
: PATH
값을 저장한 환경변수이 중에서 PATH
환경변수가 가장 중요한데, PATH
환경변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경변수이다.
명령어의 위치를 확인하고 싶다면 이렇게 한다. ls 명령어의 위치를 확인해보자.
> where ls
/bin/ls
우리가 ls 명령어를 입력할 때를 생각해보자. 명령어들도 프로그램이기 때문에 정확한 위치를 지정해야 shell 이 명령어를 찾아서 실행할 수 있다. 경로 없이도 실행이 되는 이유는 PATH
환경변수 때문이다. 명령어를 사용할 때 경로가 지정되어있지 않으면 shell 이 PATH
환경변수에 저장되어 있는 경로들을 확인해서 실행하고자 하는 프로그램의 위치를 찾은 후 실행시킨다.
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
각 경로들은 :
를 사용해서 구분한다.
ls
명령어가 입력되면 shell 이 PATH
환경변수값에 저장되어 있는 경로들을 맨 왼쪽 경로부터 하나씩 보면서 ls
라는 프로그램을 찾을 수 있는지 확인하고 찾으면 실행한다. ls
는 /bin
에 위치해 있기 때문에 PATH
값의 7번째 경로에서 찾을 수 있다. 만일 못 찾는다면 못 찾는다는 에러메세지와 함께 실행 없이 종료된다.
PATH
가 중요한 이유는 새로운 package 를 설치하거나 시스템을 설정할 때 PATH
설정이 제대로 안되면 실행이 안되는 경우가 많기 때문이다. 예를 들어 python 의 가상환경 매니저인 miniconda 를 설치했는데 conda
가 실행이 안되는 경우 conda
의 경로가 PATH
에 설정이 안되어있을 확률이 높다.
PATH
는 shell 설정파일에서 설정한다. Zsh 의 경우 .zshrc 파일에서 설정하며 이렇게 한다.
export PATH="/home/eun/bin/anaconda3/bin:$PATH"
export 는 자바스크립트의 var
처럼 변수를 선언할 때 사용하는 키워드이다. PATH
변수의 값은 이렇게 설정한다.
<PATH에 추가하고자 하는 경로>:$PATH
$ 에는 PATH
변수의 값이 치환된다.
history-substring-search
플로그인을 설치했으면 입력하고자 하는 명령어 중 일부분을 입력 후 ↑ 버튼을 누르면 입력된 stirng 이 포함된 이전 입력된 명령어만 불러낼 수 있다.mv
: 파일 이동을 할 수 있다. 같은 폴더에서 파일 및 디렉토리를 이동할 경우 이름을 변경한다.cp
: 파일 및 디렉토리를 복사한다.cat
: 두 개 이상의 파일을 연결해서 출력할 때 사용한다.more
: 특정 파일의 내용을 확인하는 페이지에서 바로 vi로 파일을 열어 편집을 할 수 있다. less
: more
과 유사하다.head
: 파일의 앞부분부터 확인한다.tail
: 파일의 마지막 부분부터 확인한다. 특정 파일에 지속적으로 추가되는 내용을 확인할 때 용이하다.nohup
: 터미널을 종료해서 프로그램이 계속 실행된다. 데몬 형태로 쉘스크립트파일을 실행시킨다고 생각하면 된다.rm
: 파일 및 디렉토리를 삭제한다. 이때 rm -f [FILE]
를 통해 삭제확인과정을 거치지 않고 바로 삭제할 수 있다. (디렉토리만을 지울 때는 rmdir
명령어로 지울 수 있다.)mkdir
: 새 디렉토리를 만들 때 사용한다.chown
: 어떤 파일 및 디렉토리의 소유자를 변경한다.chmod
: 어떤 파일 및 디렉토리의 사용권한을 변경한다.grep
: 정규 표현식에 의한 패턴 매칭 방식으로 특정 문자열을 찾을 수 있다. history
: 접속한 사용자가 쉘에 입력한 내용을 기록하는 것이다.ps
: 현재 실행 중인 프로세스의 목록을 볼 수 있다.|
history
명령어는 이제까지 입력한 명령어들을 출력해주는 명령어다. history
만 실행하면 결과값이 화면에 출력되지만 |
를 사용해 grep
과 같이 사용하면 history
가 출력하는 값들 중 원하는 값만 필터링을 할 수 있다. 이렇게 -> history | grep ls
man ls
tldr
이라는 유용한 package 가 나왔다. (Too long didn't read) tldr
명령어는 자주 사용하는 옵션이나 사용법만 간략하게 알려준다.tldr ls
/
이렇게 적는다. root 로 이동하려면 터미널에 cd /
이렇게 적어준다. cd
2. 홈 하위의 폴더(or) 파일로 이동하려면 cd ~/bin