유닉스는 뛰어난 다중 사용자 기능을 제공하는 운영 체제다.
리눅스는 유닉스의 설계 철학을 계승하여 동일한 다중 사용자 기능을 제공하며,
이로 인해 다양한 사용자들이 동시에 시스템을 효율적으로 활용할 수 있다.
이에 대해 자세히 살펴보자.
현대의 개발자인 나로서는 한 컴퓨터를 여러 명이서 쓴다는게 잘 와닿지 않는다.
여기에는 시대적 배경이 존재하는데
유닉스가 개발됐던 시절에는 하나의 컴퓨터를 여러 사용자가 공유하는 것이 일반적이었다고 한다.
음 그렇군
따라서 한 컴퓨터를 야무지게 쓰기 위해 유닉스는 다양한 기능들을 제공하였다.
여러 사용자가 한 컴퓨터를 쓰기 위해선 컴퓨터 자원을 공유하면서도
서로 영향이 가지않게 독립적으로 유지할 필요가 있다.
이를 위해 유닉스 시스템에선 사용자 별로 계정을 두어
시스템에 접속할 때 로그인을 거친다.
이러한 계정 정보는 /etc/passwd/에 저장되며, 비밀번호는 암호화하여 /etc/shadow에 저장된다.
이제 사용자를 두었으니 파일이나 디렉토리 등에
owner(내가 누구?)와 group(재석아 넌 내편이지?), others(누구쇼) 별로 별도의 권한을 설정할 수 있게 하였다.
권한은 read, write, execute로 나눠서 설정할 수 있으며,
이를 통해 파일 및 디렉토리에 대한 접근을 제어할 수 있다.
이제 각 사용자는 나만의 공간에서 개발을 진행할 것이다.
하지만 두둥. 옆 사람이 먼저 프로그램을 돌려서 cpu를 선점하려고 한다.
이를 막기 위해 커널은 각 사용자가 실행하는 프로세스를
다른 사용자의 프로세스와 격리시켜 독립적으로 실행시킨다.
또한 커널은 프로세스를 스케줄링하여 모두 공평하게 cpu를 할당받을 수 있게 분배하고,
메모리 관리를 통해 프로세스 간의 메모리 충돌을 방지한다.
Time-Sharing System
다중 사용자 기능의 핵심으로
모두에게 cpu를 공평한 시간만큼 할당해주어
모든 사용자가 동시에 컴퓨터를 사용하는 것처럼 느끼게 하였다.
자신이 첫째가 아닌 사람은 이 쯤에서 드는 의문점이 있을 것이다.
하나의 컴퓨터를 어떻게 여러명이서 사용하지?
나도 어린 시절 항상 형의 옆에서 모니터를 구경만 할 뿐이었다.
실제로 옛날에는 메인 프레임이라는 컴퓨터가 한 대 있고,
터미널을 통해 메인 프레임과 상호작용했다(고 한다.)
여기서 터미널은 현대의 소프트웨어 터미널을 말하는게 아닌,
키보드와 모니터가 합쳐져 있는 형태의 하드웨어 장치 터미널을 말한다.
이 용어가 굳어 현대에도 각 호스트를 터미널이라고 부르게 된다.
오늘날에는 이런 하드웨어 터미널 대신 소프트웨어 터미널을 사용하여
다른 컴퓨터에 원격 접속할 수 있다.
이때 주로 사용되는 프로토콜이 바로 SSH(Secure Shell)이다.
SSH는 주로 프로토콜을 의미하지만, 이를 사용하기 위한 SSH 클라이언트 도구와
서버 소프트웨어를 포괄하기도 한다.
대표적인 SSH 도구로는 OpenSSH가 있다.
SSH는 원격 접속에서 네트워크를 통해 안전하게 데이터를 전송하기 위한 통합 시스템이다.
여기에는 보안 프로토콜뿐만 아니라 전송 기능도 포함되는데,
대표적인 도구로 SCP(Secure Copy)와 SFTP(Secure File Transfer Protocol)가 있다.
이제 원격 접속을 했으니 컴퓨터 속을 누비고 싶을 것이다.
유닉스 파일 시스템은 여러 사용자가 파일과 디렉토리를 공유할 수 있도록 설계되었기 때문에,
적절한 권한만 있다면 다른 사용자의 파일에 접근할 수 있다.
또한 NFS(Network File System)와 같은 네트워크 파일 시스템을 통해
한 컴퓨터가 아닌 여러 유닉스 시스템 간에도 파일을 공유할 수 있다.
이는 도커에서 로컬 환경과 컨테이너 환경을 마운트 시키는 것과 유사하다.
예를 들어, 개발자는 도커를 사용하여 호스트 시스템의 파일을 컨테이너 내부에서 접근할 수 있도록 설정할 수 있다.
여기까지가 대략적인 유닉스와 리눅스에 대한 설명이었다.
정리하면서 기존에 알고 있던 지식과 새롭게 알게 된 지식들을 융합할 수 있었다.
특히 유저 계정을 추가한다거나, chmod 777로 파일에 대한 권한을 설정할 때,
이것에 대한 효용성을 크게 느끼지 못하였었는데
이러한 시대적 배경이 존재하였음을 알게 되었다.