Linux란 무엇일까?
내가 개발한 프로그램들이 배포되거 동작하게되는 환경이 바로 Linux이고 Linux에서 명령어를 전달하는 수단이 Terminal이다. 리눅스와 터미널은 현대개발자에게는 필수임! 그 내용을 자세히 한번 알아보자
(추가로 우분투도 뭔지한번 보자)
리누스 토발즈가 개발한 Unix기반 운영체제로
(개발계기도.. pc기다리다가 자기가 minix를 쓰기편하게 바꾼거..ㅎ..)
리눅스의 역사는 리처드 스톨만(Richard Stallman)의 GNU 프로젝트와 함께 시작한다.
GNU = Gnu is Not Unix
GNU 프로젝트는 IBM과 미국전신전화 등 컴퓨터 기업들이 유닉스를 상용화 해서 사용료를 요구하는 것에 반발해 시작되었다. GNU프로젝트를 위해 자유 소프트웨어 재단(FSF) 설립과 GNU 공개 라이선스(GPL)라는 규약을 만들어서 누구나 공개된 소스를 수정하고 배포할 수 있게 하는데 이러한 자유 소프트웨어 운동은 프로그래머들의 입장과 맞물리면서 이후 오픈 소스 운동을 낸다
->우리가 흔히 말하는 오픈소스라는 개념이 이때 시작되어 지금 보편화된것!
GNU프로젝트는 잘 되고 있었으나 커널(운영체제의 핵심)이 완성되지 않아 고심하던중 리눅스가 나타나게되고, 리눅스가 GNU프로젝트에 합류하며 GNU/Linux라는 운영체제가 탄생하게 되었다
기존의 유닉스는 높은 하드웨어 스펙을 기반으로 복잡하고 큰 네트워크 시스템을 위해서 만들어진 운영체제로 일반인들이 사용하기 어려웠다. 리눅스는 UNIX의 커널과 명령어 체계를 바꾸어서 일반인들이 보다 사용하기 쉬워지는 결과를 초래했다. 또한 기존의 개발자들에게도 익숙한 시스템이라 결국 많은 사람들에게 빠르게 확산될 수 있었다.
리눅스는 다중 사용자와 멀티 태스킹을 지원한다. 따라서 보안성이 높은 파일을 관리하기 용이하여 서버에서 많이 쓰이고 있다
리눅스는 자유 소프트웨어 라이센스를 갖는다. 즉 누구나 소스 코드를 이용하고 수정해서 재배포 할 수 있다는 것이고 이것이 곧 다른 운영체제와 가장 큰 차이점이다(맥북 생각해보자...'누구나'가 아니다)
이러한 리눅스 커널과 소프트웨어 등을 모아서 패키지 관리 프로그램으로 구성한 것을 리눅스 배포판이라고 한다. 수 많은 리눅스 배포판들은 서로 다른 목적과 환경에서 저마다 다른 옷을 걸쳤지만, 리눅스 커널이라는 하나의 심장을 공유하고 있다.
여기서 우분투란?
남아프리카의 언어인 우분투. 이것은 사람들간의 관계와 헌신에 중점을 둔 윤리 사상, 혹은 인본주의 사상으로서 아프리카의 전통적 사상으로 평화운동의 사상적 뿌리라고한다. 우분투 역시 단순히 이름만을 차용한 것이 아니라, '우분투'의 정신을 개발 철학으로 삼고 있다.
우분투는 데비안(Debian)리눅스를 기반으로 만들어졌으며, 고유한 데스크탑환경을 사용하는 리눅스배포판이다.
윈도우는 아직 리눅스 호환이 불안한 상황이라 우분투를 깔아서 사용하는것!
운영체제이므로 상당히 다각도에서 쓰인다
1. 안드로이드 기반의 스마트폰,임베디드 시스템(구글 네스트,삼성 TV,테슬라 컨트롤시스템 등)이 리눅스의 한 갈래
2. 서버! : 여러 이유로 대다수의 서버는 리눅스 기반으로 운영되고있음.
결론~
서버, 클라우드, 웹서버, VM, 임베디드, 프로그래밍 등등 IT 프로가 되고자 한다면 리눅스를반드시배우는걸 추천~ 백엔드 개발자들에겐 필수불가결일듯..?
리눅스 너로 정했다
위에서 보았듯이, 리눅스는 리눅스! 가 끝이 아니고.. 리눅스를 기반으로 배포판이 어마어마하게 많다.
리눅스 배포판의 다양화에 따라 리눅스 파일 시스템 계층구조 표준, 즉 표준 디렉터리에 대한 요구가 생겨났고 이를 FHS라고 한다. 현재 대부분의 리눅스 배포판은 FHS에 맞춰 개발되고 있다.
대부분의 리눅스 배포판은 이와같은 디렉터리 및 구조를 공통적으로 가진다고 할 수 있다.
디렉터리 | 설명 |
---|---|
/ | 파일 시스템 최상위 디렉터리 |
/bin, /sbin | 리눅스 핵심 명령어의 실행 파일ㄱ |
/boot | 리눅스가 부팅될때 필요한 파일 (부트 로더 설정 파일, 커널 이미지 등) |
/dev | 디바이스 드라이버들과 관련된 파일들을 저장하는 디바이스 디렉터리. 모든 하드웨어는 이 디렉터리에 있는 파일을 통해 접근 가능 |
/etc | 리눅스 시스템에서 가장 중요한 디렉터리. 시스템 중요 환경 설정 파일, 서버 프로그램 설정 파일, 시스템 초기화 스크립트 등 |
/home | 사용자 계정 홈 디렉터리 |
/lib | /bin, /sbin에 있는 프로그램들이 의존하는 라이브러리 파일들 |
/media | USB 메모리나 CD/DVD-ROM같은 탈부착이 가능한 저장 장치가 자동으로 마운트될 때 마운트 지점을 제공 |
/proc | 커널이 사용하는 가상의 파일 시스템(메모리, CPU같은 시스템 자원 관련 정보, 실행 중인 프로세스 관련 정보, 커널 관련 정보 등) |
/root | 루트 계정 디렉터리 |
/usr | 리눅스 핵심 명령 외 대부분의 사용자 명령, 게임, X 윈도우 시스템, 온라인 매뉴얼 등 |
/var | 시스템 운영 중에 필요한 가변 자료들. 주로 시스템 운영 로그, 스풀 디렉터리, 임시 파일 등. 메일 서버, 웹 서버, ftp 서버 운영 시에는 해당 하위 디렉터리에 사용자 메일박스, 웹 콘텐츠, 공유 파일을 기록하기 위해 사용 |
/
: root 디렉토리
~
: home 디렉토리
절대 경로 : Absolute path는 이름 그대로 절대적 경로. 경로를 표현하는 방식이 root 디렉토리 부터 시작한다는 점에서 "완전한"의 의미에 더욱 가까움. (ex. /home/eun/bin
)
상대 경로 : Relative path. 현재 자신의 위치를 기반으로 움직이는 경로. (ex. cd ..
)
.
: 현재 경로..
: 상위 경로환경 변수 : 경로에 대한 변수라고 생각하면 쉽다
여러분이 프로그램을 개발해서 배포하려는 상황.
대부분 C드라이브에 윈도우가 설치되어 있을 것으로 가정하고, C → program files/프로젝트 명으로 설치하도록 설정. 만약 사용자의 OS가 설치된 드라이브가 D라면 설치에 실패할 것. 이 경우 C:\program files
는 변수처럼 처리되어야 한다.
echo $변수명
: echo 뒤에 나오는 문자열은 화면에 출력된다. echo $PATH
의 실행결과는 다음과 같다. 즉, 경로에 대한 정보가 직렬화 된 문자열로 저장되어 있는 것. 명령어를 사용할 때 경로가 지정되어 있지 않으면 shell이 $PATH
에서 실행하고자 하는 프로그램이 존재하는지 여부를 하나씩 체크한다. 있으면 실행한다. 각 경로는 :
으로 구분된다.
/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
실제 ls
명령어는 /bin
디렉토리 안에 위치해 있다. whereis ls
를 입력해보자. 해당 명령어가 위치해 있는 경로를 별도로 지정해주지 않더라도 어디서든 사용이 가능한 이유 역시 환경 변수 덕분이다.
리눅스 커널을 빌드 시에 .config라는 파일이 생성된다.(초기에 커널이 빌드가 되지 않은 상태에서는 .config 파일이 없다.) 리눅스에서는 주로 파일을 통하여 설정 (config) (ex..bashrc
, zshrc
)
~
) 디렉토리에 있음..zshrc
, .bashrc
등에 등록)alias myip="ipconfig getiadder en0" # macOS
alias myip="hostname -I" # ubuntu
명령어 | 뜻 | 설명 |
---|---|---|
cd | change drectory | 폴더이동 |
ls | list segments | 현재 경로 내 파일 목록 출력 |
pwd | print working directory | 현재 경로 출력 |
mkdir/rmdir | make directory | 디렉토리 생성/제거 |
rm | remove | 파일/디렉토리 제거 |
cp | copy | 파일/디렉토리 복사 |
mv | move | 파일/디렉토리 이동 |
cat | concatenate | 터미널에 파일 내용 출력 |
touch | 파일 생성 및 날짜정보 변경 | |
chmod | change mode | 파일/디렉토리 권한 설정 |
pwd
#현재경로 출력
ls
#경로내 파일목록 출력
cd Desktop
#Desktop로 이동
ls
#Desktop의 파일목록 출력
(내건 너무 길어서..ㅠㅠ멘토님꺼 잠시 빌려옴)
mkdir wecode
# 폴더 생성
ls
# 폴더 생성 확인
cd wecode
# 폴더 이동
touch readme.md
# readme.md 생성
ls
# 파일 생성 확인
mkdir move
#폴더 생성
ls
# 폴더 생성 확인
vi readme.md
i
#하단에 insert모드(이경우 입력이 안됨) -> i입력시 글을 쓸수 있는 모드로 전환
내용 입력 후 ESC
:wq
#저장 후 종료(write quit)
cp readme.md readme2.md
#(원본 파일) (대상 파일)
ls
mv readme2.md ./move
# (이동할 파일) (경로)
cd move
ls
cd ..
rm -rf move
ls
파일이 다 삭제되었다.
한시간 짜리 세션이였는데 개념 하나하나 이해하는데만 거의 4시간을 잡은거 같다. 그래도 블로그로 정리하면서 확실히 잡힌듯!