리눅스에서는 사용자가 커널을 직접 조작할 수 없게 되어 있음.
둘 사이에서 명령어를 받아들이고 커널의 실행 결과를 출력하는 소프트웨어 필요 → 셸
셸은 커널의 인터페이스에 해당.

터미널 에뮬레이터와 셸은 완전히 다른 소프트웨어.
ex) 윈도에서 리눅스로 원격 로그인하면 터미널 에뮬레이터는 윈도 머신,
셸은 리눅스 머신에서 돌아감.
터미널 에뮬레이터는 입출력 화면을 제공만 하는 소프트웨어.
리눅스 머신에서 돌아가는 셸의 입출력을 제공하는 소프트웨어가 바로 터미널 에뮬레이터.
윈도에서는 물리 디스크가 2개 있다면 디렉터리 트리도 2개이다.
하지만, 리눅스에서는 언제나 시스템 전체에 단 하나의 트리만 가지게 됨.
디스크가 여러 개 있을 때 루트 디렉터리의 어딘가에 해당 디스크의 디렉터리가 연결됨.
→ 디스크의 디렉터리를 연결하는 것을 마운트라고 함.
FHS(Filesystem Hierarchy Standard) 표준 사양을 따름.
리눅스의 파일 시스템에서는 파일에 별명을 붙이는 것이 가능 → 링크라고 부르며 별명을 붙이는 것을 ‘링크를 생성한다’ 라고 함.
하드 링크와 심볼릭 링크 두 종류가 있음. 보통 심볼릭 링크가 많이 사용되며 하드 링크가 필요한 경우는 많지 않음.
$ cp /etc/crontab file1
$ ln file1 file2
$ cat file2
// (file1의 내용 출력)
하드 링크란 한 파일 원본에 이름을 여러 개 붙이는 기능
$ rm file1
$ ls
file2
$ cat file2
// (file1의 내용 출력)
파일 자체는 모든 하드 링크가 없어져야 삭제됨
디렉터리는 하드 링크 X, 서로 다른 디스크에 걸쳐서 만들 수 없음.
심볼릭 링크는 제한 없음
ln 명령어를 사용할 때 -s 옵션 붙이면 심볼릭 링크 생성.
$ cp /etc/crontab file1
$ ln -s file1 file2
$ ls -l
어떤 파일에 연결되었는지 화살표로 표시됨.
심볼릭 링크란 원본 파일에 대한 정보가 담긴 작은 특수 파일이며 하드 링크와 달리 원본과 구별됨.
심볼릭 링크를 남겨두고 원본 파일을 삭제하면 링크가 깨지고, 깨진 파일 실행하면 오류 발생.
링크가 유용한 경우
긴 경로 명을 짧게
$ ln -s local/work/code/project/source source
$ cd source // <- 긴 경로명에 쉽게 이동 가능
여러 버전의 프로그램이 있는 경우
프로그램을 설치 할 때 디렉터리 이름에 버전 정보를 붙여 여러 버전의 소프트웨어를 배치하는 경우가 있음
latest → v1.0.1
v1.0.0
v1.0.1
소프트웨어를 사용할 때 각 버전의 경로를 직접 지정하지 않고 심볼릭 링크인 latest를 사용하면 연결된 버전 사용 가능.