리눅스 커널만으로는 운영체제를 활용할 수 없으며, 사용자와의 인터페이스를 제공하는 윈도 시스템, 컴파일러, 편집기 등 다양한 응용 프로그램을 함께 제공해야 한다.
→ 리눅스 커널에 이러한 응용 프로그램을 제공하는 것이 바로 GNU 프로젝트이다.
정확하게 표현하자면 리눅스는 GNU/리눅스 라고 해야한다.
리눅스 커널은 www.kernel.org 에서 누구나 소스와 패치를 내려받을 수 있다.
우분투
시스템 관리 작업에서 sudo 사용하기 때문에, root 계정의 암호를 만들지 않아도 된다.
(sudo 명령어는 유닉스 및 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램이다.)
리눅스의 특징
- 리눅스는 공개 소프트웨어이며 무료로 사용할 수 있다.
- 유닉스와의 완벽한 호환성을 유지한다.
- 서버용 운영체제로 많이 사용된다.
- 편리한 GUI 환경을 제공한다.
리눅스의 구조
- 커널 : 커널은 리눅스의 핵심으로 프로세스 관리, 메모리 관리, 파일 시스템 관리, 장치 관리 등 컴퓨터의 모든 자원을 초기화하고 제어하는 기능을 수행한다.
- 셸 : 셸은 리눅스의 사용자 인터페이스로 사용자와 커널 사이의 중간자 역할을 담당하는 특별한 프로그램이다. 셸은 사용자가 입력한 명령을 해석하여 커널에 넘겨준다. 그러면 커널이 명령을 수행한 후 수행 결과를 돌려주고, 셸은 다시 사용자가 이해할 수 있는 형태로 바꿔 출력한다. 리눅스는 배시 셸(bash shell)을 기본으로 한다.
- 응용 프로그램 : 리눅스는 각종 프로그래밍 개발 도구, 문서 편집 도구, 네트워크 관련 도구 등 매우 다양한 응요 프로그램을 제공한다.
리눅스를 사용한다 → 내 컴퓨터에 Mac OS나 윈도우를 대신 linux를 쓴다는 얘기가 아닌, 프로그래밍을 하고 서비스 운영을 할때 리눅스로 돌아가는 서버를 다루는 등 개발중에 리눅스 작업을 한다는 것.
리눅스와 타 OS의 차이
위의 운영체제들은, 일반인, 즉 개발자가 아닌 사람들 end-user들을 대상으로 만든 운영체제이다.
그래서 GUI인 환경에서 개발자들이 만들어놓은 기능들을 사용만 하도록 하는데, 환경을 제공한다.
→ 비교적 배우기 쉽다, but 꽤나 제한적인 부분들이 많다.
요리를 직접 하는 것을 좋아하는 사람들한테는 전자레인지용 냉동 도시락같은 느낌.
Linux는 날것의 식재료와 같으며, 리눅스는 오픈소스 운영체제이다.
Linux는 다양한 서버용, PC용 리눅스 뿐 아니라, 모바일이나 IoT기기용으로 무궁무진하게 파생된다. 예시→ 안드로이드 : 리눅스를 일반인 스마트폰 사용자들이 편리하게 사용할 수 있는 모바일 OS로 개조한 것이다.
Linux의 커널 = 곧 Linux
리눅스가 칼이라면, 커널은 칼날이다.
물리적 컴퓨터, 즉 하드웨어 요소들을 OS의 최하단, 기계를 상대하는 최전선에서 직접 다루고 관리하는 것이 커널이다.
운영체제라는 소프트웨어의 존재이유이자 핵심이다.
우리가 컴퓨터란 기계에게 명령을 내리고, 결과를 받아올 수 있는건 이 커널 덕분이다.
실제 사용법
GUI버전은 내 PC를 리눅스로 쓸게 아닌이상, 개발 실무에서는 의미가 없다.
CLI로 명령어를 입력하는 식으로 배워야한다.
우분투
리눅스를 사용하려면, 리눅스 환경, 즉 리눅스가 깔린 기기가 필요하다. → 아래 3가지 방법 중 하나를 선택해서 환경을 준비한다.
- 가상머신 소프트웨어 (VirtualBox, VMware Workstation Player (www.vmware.com/kr))
- 온라인 IDE/터미널 (Goorm IDE)
- 윈도우 10의 WSL
나는 Goorm IDE를 사용해보겠다.
Goorm IDE에 대시보드에서, 새 컨테이너를 생성을 누르고, 컨테이너 종류들 중 Blank를 선택한다.
빈 우분투 환경이 컨테이너로 설치된다.
생성 후 대시보드로 이동해서, 터미널 실행을 눌러주면, 구름 IDE 서버에 가상 리눅스 환경이 만들어지고, 이처럼 브라우저에 바로 사용 가능하다.
🗃 리눅스의 주요 디렉토리
⌨️ 리눅스의 중요 명령어들
pwd
print working directory (포지션이 어딘가)
현재 위치한 디렉토의 절대경로를 표시합니다.
ls
list (라식)
현재 위치한 디렉토리 내 파일/디렉토리 목록을 표시합니다.
cd {경로}
🚪 change directory (쑥 들어가기) 뒤에 덧붙여진 경로로 이동하는 명령어에요.
→ cd / = 최상위 디렉토리로 이동,
→ cd /var = 현재 디렉토리에서, var라는 디렉토리로 이동
근데 위처럼 매번 전체 주소를 적으려면, 깊이 들어갈수록 돌아다니기 번거로워진다.
⇒ 상대적 위치로 이동을 한다.
그럼 밖으로 나가려면? → cd .. 를 하면된다.
처음에 있던 폴더로 다시 돌아가려면, 절대주소를 입력할수도 있고,
한 번 위로 올라갔다가 이 폴더로 들어갈 것으로 입력해도 된다.
mkdir {디렉토리명}
📂 make directory
디렉토리를 생성합니다.
mkdir myfolder
리눅스에서는 자동완성기능이 있어서, cd (myfolder/) 칠때 my까지 치고 Tab을 누르면 자동완성이 된다.
touch {파일명}
파일을 생성한다.
vi {생성할 또는 열어볼 파일명}
📝 vi 에티터 실행
해당 파일명의 파일이 있으면 열고 없으면 새로 생성(:wq로 저장해야 만들어짐)한다.
보통은 다른곳에서 작성한 파일들을 리눅스 환경에 다운받는 방식으로 작업하기 때문에, 리눅스 내에서 직접 파일을 생성하거나, 편집하는 일은 필수적으로 마주치지는 않을 것이다.
윈도우에서 텍스트파일을 만들때는, 메모장이나 워드패드 등을 사용한다.
but 리눅스에서는 vi라는 에디터가 널리 쓰인다. (Vim 모드의 오리지널이다.)
vi 를 입력하고 hello.txt를 입력한다.
→ 이 상태에서는 키들을 눌러도 입력이 되지 않는다.
글자 입력 모드가 아닌 명령어 받기 모드이기 때문이다.
입력모드 진입 명령어인 i를 눌러서 입력 모드로 바꾼다. →이제 입력이 가능해진다.
hello world를 입력후 esc로 입력 모드에서 명령어 모드로 빠져나온 후에 :wq를 입력해서
저장과 동시에 에디터를 닫는다.
이제 다시 ls를 이용해서 디렉토리 내부를 살펴보면, hello.txt파일이 생성되어 있고,
이를 vi hello.txt를 입력해서 다시 열어볼 수 있다.
(변경 저장없이) 그냥 닫으려면 :q를 입력하면 된다.
해당 디렉토리에 바로 파일이 생성되고 에디터가 열린다.
이 vi 에디터는 키들마다 명령어가 있어서, 따로 공부해야한다.
cp {복사할 대상} {붙여넣을 경로 또는 새 파일명}
📑 copy
파일을 복사합니다. 디렉토리를 복사할 시에는 cp 뒤에 -r을 붙여야 해요.
cp original.txt copied.txt
cp original.txt ../anotherfolder/
vi hello2.txt를 열어보면, 내용도 똑같이 입력되어 있다.
mv {옮길 대상} {대상 디렉토리 또는 새 파일명}
move
파일이나 디렉토리를 옮기거나 이름을 변경할 때 사용합니다.
mv original.txt ../anotherfolder/
mv original.txt renamed.txt
rm {삭제할 대상}
remove
파일이나 디렉토리를 삭제합니다. 디렉토리를 삭제할 때는 rm 뒤에 -r (recursive=재귀적으로 모두 지워준다)을 붙여야 하죠. → 왜냐면 안에 다른 것들이 들어있을 수 있기 때문이다.
rm fileTodelete.txt
rm -r folderToDelete
웹에서 다운받아올때는? web에서 받아온다(get), → wget {다운로드할 것의 주소를 입력}
웹사이트에서 아무 이미지의 주소를 따다가 디렉토리에 다운로드 받는다.
그러면 어떤 프로그램을 설치할때는 어떻게 해야할까요?
윈도우의 겅우 .exe파일을 다운받아 실행하고 맥은 Application에 앱을 넣거나
개발자들의 경우 homebrew를 사용하기도 한다.
리눅스는 계열, 종류마다 이 기능의 명령어가 다르다.
sudo {명령어} → 우분투 등의 이 sudo 명령어는 윈도우로 치면 관리자 권한으로 실행
최고관리자 권한이 있어야 실행할 수 있는 명령들 앞에 붙여넣어요. 실행시 비밀번호를 요구하기도 하죠.어떤 명령어 입력시 Permission 관련 오류가 뜬다면 sudo 명령어 필요한거에요.
sudo apt update
sudo rm -r importantFolder
→ 리눅스 커널에 이러한 응용 프로그램을 제공하는 것이 바로 GNU 프로젝트이다.
정확하게 표현하자면 리눅스는 GNU/리눅스 라고 해야한다.
리눅스 커널은 www.kernel.org 에서 누구나 소스와 패치를 내려받을 수 있다.
'Linux' 카테고리의 다른 글
[VMware] Ubuntu 설치 (16.04 LTS, 18.04 LTS, 20.04 LTS) (0) | 2022.03.19 |
---|