Linux는 1991년 Linus Torvals가 개발한 운영체제이다. 오픈소스이며 누구나 코드를 볼 수 있기 때문에 가장 널리 사용되는 운영체제가 되었다. 시스템 서버는 대부분 Linux 기반으로 운영되기 때문에 개발자는 Linux를 잘 알아야 한다.
리눅스는 다음과 같이 tree 형태로 구성되어있다. FHS의 가장 위에는 /
(Root) 디렉토리가 있다. 하위 디렉토리들 역시 /
로 구분된다.
가장 중요하고 기본이 되는 디렉토리는 home directory이다. 이 디렉토리가 유저의 공간이기 떄문이다. home 디렉토리 경로를 나타낼 때는 ~
(tilda) 를 사용할 수 있다. Mac에서는 /home
디렉토리가 아니라 /Users
디렉토리에 유저의 home 디렉토리가 있다.
예) cd ~/bin
== cd /home/bin
디렉토리 경로에는 2가지 유형이 있다. absolute path와 relative path 이다.
절대적 경로, 완전한 경로라고 생각하면 된다. Absolute Path는 Root 디렉토리부터 시작하는 경로를 의미한다. 현재 나의 위치와 상관 없이 항상 정확히 해당 경로로 이동할 수 있다.
이름 그대로 "상대적인 경로"를 뜻한다. 현재 내 위치를 기반으로 움직이는 경로이다. 두 가지 심볼을 사용한다. .
, ..
이다. Single dot은 현재 디렉토리를 의미하고, Double dot은 현재 디렉토리의 상위 디렉토리를 의미한다. ../../
이렇게 되면 두 단계 상위 디렉토리라고 생각하면 된다.
리눅스는 설정을 주로 파일(config file)을 통해서 한다. 그 중 가장 중요한 설정 파일이 바로 Shell 설정 파일이다. zsh는 .zshrc
라는 설정 파일을 사용한다. Shell 설정 파일을 비롯하여 대부분의 설정 파일들이 유저의 home 디렉토리에 위치한다. 이러한 설정 파일을 통해 할 수 있는 것들 중 가장 중요한 것은 PATH 환경 변수 설정이다. 참고로 .파일
은 숨겨져 있는 hidden file을 의미한다. 이러한 파일을 모두 보기 위해서는 ls
명령어에 a
옵션을 추가한다. ex) $ ls -a
environment variable, 즉 환경 변수는 말 그대로 어떠한 값을 저장하고 있는 변수이다. 환경은 현재 돌아가고 있는 Shell을 뜻한다. 이러한 환경 변수들은 Shell이 돌아가는 동안 계속 존재하며 사용된다.
> echo $HOME
/Users/MiaJLee
HOME
환경 변수 값을 출력하는 것을 볼 수 있다. HOME
과 같은 환경 변수를 선언한 적이 없지만, 이미 Shell이 시작할때 자동으로 선언되었기 때문이다. 대표적인 환경 변수는 다음과 같다.
HOME
: 유저의 home 디렉토리 경로를 저장한 환경 변수USER
: 유저의 아이디를 저장한 환경 변수PATH
: PATH
값을 저장한 환경 변수PATH
환경 변수명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수이다. PATH 환경 변수 때문에 경로 없이도 명령어가 실행될 수 있는 것이다. 만일 경로가 지정되어있지 않으면 PATH 환경 변수에 저장되어 있는 경로들을 하나하나 보면서 프로그램을 찾고 실행한다.
> echo $PATH
/Users/MiaJLee/miniconda3/bin:/Users/MiaJLee/miniconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
PATH
값을 출력하면 위와 같이 나온다. 여러 경로들을 담고 있으며, 각 경로들을 :
를 사용해서 구분한다.
PATH
가 중요한 이유는 새로운 package를 설치하거나 시스템을 설정하거나 할때 PATH
설정이 제대로 되지 않았을 경우 실행이 안되는 경우가 많기 때문이다. PATH는 Shell 설정 파일에서 설정한다. Zsh의 경우 .zshrc
파일에서 설정하며 다음과 같이 설정한다.
export PATH="/Users/MiaJLee/bin/anaconda3/bin:$PATH"
export
는 JavaScript의 var
키워드처럼 변수를 선언할 때 사용하는 키워드라고 생각하면 된다. <PATH에 추가하고자 하는 경로>:$PATH
여기서 $PATH
부분에 PATH
변수의 값이 치환된다. 이렇게 선언을 하면 기존의 PATH
값의 맨 앞쪽에 새로운 경로가 추가된다.
⬆
키를 누르면 이전에 입력했던 명령어를 다시 불러낼 수 있다.⬆
키를 누르면 입력된 string이 포함된 이전 명령어만 불러낼 수 있다.Ctrl
+ a
: 커서가 해당 줄의 맨 앞으로 이동한다Ctrl
+ e
: 커서가 해당 줄의 맨 뒤로 이동한다.cmd
+ k
: 화면이 reset 된다. (Mac)리눅스 쉘 기본 명령어 : 정리 너무 잘해주신 벨로거...
cd
: 디렉토리를 변경ls
: 현재 디렉토리의 파일 목록을 나열mv
: 파일이나 디렉토리를 이동cp
: 파일이나 디렉토리를 복사cat
: 두 개 이상의 파일을 연결하여 출력less
: 파일 내용을 확인, 화면에 보여지는 만큼만 출력tail
: 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력 (default : 10행 출력)nohup
: 터미널을 종료해도 프로그램을 백그라운드에서 계속 실행rm
: 파일이나 디렉토리를 삭제mkdir
: 디렉토리를 생성clear
: 쉘 창의 기록을 모두 삭제 ( cmd + k
)pwd
: 현재 작업중인 디렉토리의 절대 경로를 반환chown
: 파일이나 디렉토리의 소유권자 및 그룹식별자 변경chmod
: 해당 파일이나 디렉토리의 허용 권한 수정grep
: 특정 파일 내에서 지정한 패턴을 가진 문자열을 찾고, 해당 문자열을 출력history
: 이전에 입력했던 명령어 리스트를 출력ps
: 현재 작동하는 프로세스의 목록을 출력|
: Pipe 라고 한다. 일반적인 명령어가 아니라 2개의 명령어를 이어주는 역할을 한다. command1 | command2
의 경우 command1
의 결과값을 command2
의 input으로 넘겨준다.
예를 들어, history
명령어는 이제까지 입력한 명령어들을 출력해주는 명령어다. |
을 사용해 grep
과 같이 사용하면, history
가 출력하는 값들 중 원하는 값만 필터링 할 수 있다. ex) history | grep ls
명령어를 어떻게 쓰는지 설명해준다. ex) man ls
Man page의 단점은 너무 길다는 것이다. 그래서 나온 유용한 패키지가 바로 tldr
(Too long Didn't)이다. 자주 사용하는 옵션이나 사용법만 간략히 알려준다. ex) tldr ls