리눅스가 대체 뭐야????
이야기는 많이 들어봤는데..리눅스가 그래서 무엇인지 몰랐다.
macOS, windows와 같은 운영체제라는 것은 알고 있었지만 그래서 이것이 개발자에게 왜 필요한 것인지, 왜 언급이 되는 것인지는 알지 못했다.
그래서 따로 찾아보며 하나씩 정리해보기로 했다.
Linux는 오픈소스 운영체제이다.
운영체제?
OS라고도 부르는 운영체제는, 시스템의 하드웨어와 리소스를 관리하는 소프트웨어이다.
앱과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결한다.
예를들어, 자동차 엔진을 변속기와 차축,바퀴에 연결해 엔진이 차를 움직일 수 있도록 해주는 것이다.
흠.... 어떤 과정을 거쳐서 하드웨어를 조작하는 걸까?
사용자와 운영체제간에 대화를 가능하게 해주는 명령어 해석기
우리가 명령어를 입력하면 컴퓨터 내부에서는 Shell이 이것을 받아들이고 명령어를 해석한다.
조금 더 자세한 과정은 다음과 같다.
1. 사용자가 명령어 입력
2. 쉘이 명령어를 해석
3. 커널을 통해 명령을 수행 후 결과 전송
4. 쉘이 전송결과를 해석
5. 사용자가 해석된 결과를 확인
운영체제의 핵심으로, 소프트웨어와 하드웨어간의 커뮤니케이션을 관리하는 프로그램이다.
쉘에서 사용자가 입력한 명령어를 해석하였다면, 명령을 수행하기 위해 하드웨어를 조작해야 한다.
이때 커널을 사용한다. 즉, 해석한 명령어를 바탕으로 커널을 통해 하드웨어를 조작하는 것이다.
우선 리눅스를 사용한다는 것의 의미부터 짚고 넘어가자.
나는 맥북 유저인데, macOS를 버리고 Linux를 새로 깔아서 써야 하는 거야?
아니었다. (다행..) 개발을 하면서 리눅스 관련작업을 한다는 것 뿐이다.
즉, 개발자가 개발한 프로그램이 배포되고 동작하게 되는 환경이 Linux OS가 설치된 서버이다.
윈도우,맥OS,android등은 사용자 엔드유저를 위해 만든 운영체제이다.
따라서 사용만 하면 되도록 초점을 맞추어 만들어져 있다.
일반 사용자는 배우기 쉽고 사용하기 편리하다는 장점이 있다.
하지만 프로그래머들에게는 제한적인 부분들이 많다.
사용자가 쉽게 사용할 수 있도록 GUI (Graphic User Interface)로 다 구성해두었는데, 실제로 개발자들에게는 CLI(Commaind Line Interface)로 할 수 있는 작업이 훨씬 많다.
더 쉽게 비유하자면, 다른 OS들은 바로 사용할 수 있는 완제품이라면, 리눅스는 직접 만져보고 개조해 원하는 대로 만들어낼 수 있는 조립식 제품이라고 할 수 있다.
자바스크립트는 싱글 스레드 언어이지만, 리눅스는 멀티스레드이기 때문에 동시에 여러가지 일을 처리할 수 있다.
설계된 코드도 마음껏 들여다 볼 수 있고 개조도 자유롭게 할 수 있다.
따라서 여러 버전들이 자유롭게 만들어져있다.
흠... 좋다는 건 알겠는데, 막연하다.
그래서 개발과는 어떤 직접적인 연관이 있다는 걸까?
윈도우는 유료이고,맥OS맥에서만 사용할 수 있다.
리눅스는 무료에 마음대로 개조해 사용할 수 있는데, 예를 들어 안드로이드 역시 리눅스를 모바일환경에서 사용할 수 있도록 개조한 버전이다.
리눅스의 가장 대표적인 배포 버전이 우분투 이다.
리눅스를 직접깔아서 사용할 수 없다면, 다음과 같은 방법들이 있다.
1. 가상머신 소프트웨어
맥OS가 리눅스와 호환성이 좋기 때문이다.
맥OS는 유닉스 운영체제에 기반한 OS이기 때문에 명령어도 같은 유닉스 계열인 리눅스의 명령어와 동일하다.
앞서 개발한 프로그램이 배포되고 동작하는 환경이 Linux OS 서버라고 했다.
이 Linux 서버가 원하는 동작을 하도록 하려면 명령을 내려야 하는데, 이 명령어를 전달하는 수단이 바로 terminal
이다.
z shell은 bash shell보다 각종 플러그인을 많이 지원하며, macOS기본 터미널과 리눅스를 대체한다.
리눅스의 기본 구조와 명령어에 대해 알아보자.
FHS : FIlesystem Hierarchy Standard
리눅스의 기본 파일구조는 트리 구조이다.
OS도 프로그램이기 때문에 동작하기 위해 변수가 필요하다.
print working directory
현재 나의 위치를 절대경로로 알려준다.
change directory
make directory
파일 생성, 날짜 정보 변경
파일 삭제
파일 복사
파일 이동
concatenate
터미널에 파일 내용 출력
change mode
파일/디렉토리 권한 설정
파일을 편집할 수 있는 에디어 활성화