TIL[58]. Linux & Terminal

jake.log·2020년 8월 25일
0

Linux & Terminal

목록 보기
1/1

Linux & Terminal

1. Linux란?

Linux OS: 개발한 프로그램이 배포되고 동작하게 되는 환경이 설치된 서버

Terminal: 명령어를 전달하는 수단

2. 리눅스의 기본 명령어들과 파일시스템 구조

  • Linux Directory Structure

FHS의 가장 위에는 / 디렉토리가 있다. Root 디렉토리 (directory)라고 하며, FHS의 뿌리가 된다.

시작점인 root 디렉토리 안에 여러 하위 디렉토리들이 있고 각 하위 디렉토리들안에 또 하위 디렉토리 들이 있다.

그리고 각 디렉토리들은 slash (/) 로 구분한다.

예시)
/home/jake/bin

cd /

  • cd 명령어는 "change directory"의 약자로 특정 디렉토리로 이동할때 사용된다. 
  • cd 명령어 다음에 가고자 하는 디렉토리 경로를 입력하면 된다.
  • 만일 root 디렉토리의 하위 디렉토리인 home 디렉토리 의 하위 디렉토리인 jake 디렉토리의 하위 디렉토리인 bin 디렉토리로 가고자 한다면 /home/jake/bin 을 입력해야 한다.

ls/

  • list의 약자이며 해당 디렉토리의 내용물들을 나열해준다.

3.Directory 경로

Absolute Path

Absolute path: 절대적 경로

absolute의 의미는 "완전한" 에 가깝다.
Absolute path는 root 디렉토리 부터 시작하는 완전한 경로를 뜻한다.

/home/jake/bin 은 absolute path 이다.
Root 디렉토리에서 부터 시작하기 때문에 현재 위치와 상관 없이 항상 정확히 해당 경로로 이동 할 수 있다.

Relative Path

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 라고 실행하면 된다.

4. Configs

리눅스에는 설정을 파일을 통해서 한다.

그리고 여러 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

5. 환경변수 (PATH)

PATH 환경 변수에서 변수는 어떠한 값을 저장하고 있는 변수다.

앞에 environment, "환경" 은 무엇인가? 여기서 환경은 현재 돌아가고 있는 shell을 뜻한다.

환경 변수란 shell의 어떠한 설정 값을 가지고 있는 변수를 뜻한다.
그리고 이러한 환경 변수들은 shell이 돌아가는 동안 계속 존재하며 사용된다.

echo $HOME 이라고 입력하여 HOME 환경변수 값을 출력하면,
(이름에서 나오듯이 HOME 환경 변수는 유저의 홈 디렉토리 경로이다.)

echo $HOME
/home/jake

HOME 이라는 환경변수를 선언한 적이 없지만 이미 존재하는걸 알 수 있다.
그 이유는 환경 변수들은 shell 이 시작할때 이미 자동으로 선언되었기 때문이다.
Shell은 이러한 환경변수 들을 통해 설정이 된다.

[대표적인 환경 변수]

-HOME

  • 유저의 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

각 경로들을 : 를 사용해서 구분한다.

  1. /home/jake/bin
  2. /usr/local/sbin
  3. /usr/local/bin
  4. /usr/sbin
  5. usr/bin
  6. /sbin
  7. /bin
  8. /usr/games
  9. /usr/local/games
  10. /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 값의 묀 앞쪽에 새로운 경로가 추가가 된다.

6. Shell Commands

기본 명령어

  • cd : 폴더 이동
  • ls : 현재 경로 내 파일 목록 출력
  • mv : 디렉토리 이동
  • cp : 디렉토리 복사
  • cat: 터미널에 디렉토리 내용 출력
  • less: 스크롤할 수 있게 출력
  • tail: 파일 내용의 끝 부분만 출력하는 명령어
  • nohup : 백그라운드 실행
  • rm: 디렉토리 제거
  • mkdir: 디렉토리 생성
  • clear: 터미널에 내용 삭제
  • pwd : 현재 경로 출력
  • chown : 소유자에 대한 소유권을 변경
  • chmod : 디렉토리 혹은 폴더에 대한 권한 설정
  • grep : 문자열을 찾는 기능
  • history: 지금까지 입력한 명력어들을 출력
  • ps : 현재 실행중인 프로세스 목록과 상태
  • touch : 디렉토리의 용량이 0인 디렉토리를 생성

7. Piping

  • |
    • Pipe 라고 부른다.
    • Pipe는 일반적인 명령어가 아니라 2개의 명령어를 이어준다.
    • command1 | command2
    • command1의 결과값을 command2의 input으로 넘겨준다.
    • 예를 들어, history 명령어는 이제까지 입력한 명령어들을 출력해주는 명령어다. history 만 실행하면 결과값이 화면에 출력 되지만 | 를 사용해 grep 과 같이 사용하면 history가 출력하는 값들 중 원하는 값만 필터링을 할 수 가 있다.
    • ex) history | grep ls

8. Man page

  • Manual page를 줄여서 man page 라고 한다.
  • 명령어를 어떻게 쓰는지 설명해 준다.
  • ex) man ls
  • Man page의 단점은 너무 글이 많다. tldr (Too Long Didn't Read) 패키지를 쓰면, 자주 사용하는 옵션이나 사용법만 간략하게 알려준다.
  • ex)tldr ls
profile
꾸준히!

0개의 댓글