[WECODE] Linux&Terminal

여주링·2020년 11월 29일
0

WECODE

목록 보기
4/10
post-custom-banner

Linux란 무엇일까?
내가 개발한 프로그램들이 배포되거 동작하게되는 환경이 바로 Linux이고 Linux에서 명령어를 전달하는 수단이 Terminal이다. 리눅스와 터미널은 현대개발자에게는 필수임! 그 내용을 자세히 한번 알아보자
(추가로 우분투도 뭔지한번 보자)

1.리눅스란 무엇일까?

리누스 토발즈가 개발한 Unix기반 운영체제로
(개발계기도.. pc기다리다가 자기가 minix를 쓰기편하게 바꾼거..ㅎ..)
리눅스의 역사는 리처드 스톨만(Richard Stallman)의 GNU 프로젝트와 함께 시작한다.

GNU = Gnu is Not Unix
GNU 프로젝트는 IBM과 미국전신전화 등 컴퓨터 기업들이 유닉스를 상용화 해서 사용료를 요구하는 것에 반발해 시작되었다. GNU프로젝트를 위해 자유 소프트웨어 재단(FSF) 설립과 GNU 공개 라이선스(GPL)라는 규약을 만들어서 누구나 공개된 소스를 수정하고 배포할 수 있게 하는데 이러한 자유 소프트웨어 운동은 프로그래머들의 입장과 맞물리면서 이후 오픈 소스 운동을 낸다
->우리가 흔히 말하는 오픈소스라는 개념이 이때 시작되어 지금 보편화된것!
GNU프로젝트는 잘 되고 있었으나 커널(운영체제의 핵심)이 완성되지 않아 고심하던중 리눅스가 나타나게되고, 리눅스가 GNU프로젝트에 합류하며 GNU/Linux라는 운영체제가 탄생하게 되었다

Linux의 특징

1.유닉스기반

기존의 유닉스는 높은 하드웨어 스펙을 기반으로 복잡하고 큰 네트워크 시스템을 위해서 만들어진 운영체제로 일반인들이 사용하기 어려웠다. 리눅스는 UNIX의 커널과 명령어 체계를 바꾸어서 일반인들이 보다 사용하기 쉬워지는 결과를 초래했다. 또한 기존의 개발자들에게도 익숙한 시스템이라 결국 많은 사람들에게 빠르게 확산될 수 있었다.

2. 다중 사용자와 멀티 태스킹을 지원

리눅스는 다중 사용자와 멀티 태스킹을 지원한다. 따라서 보안성이 높은 파일을 관리하기 용이하여 서버에서 많이 쓰이고 있다

3.자유 소프트웨어

리눅스는 자유 소프트웨어 라이센스를 갖는다. 즉 누구나 소스 코드를 이용하고 수정해서 재배포 할 수 있다는 것이고 이것이 곧 다른 운영체제와 가장 큰 차이점이다(맥북 생각해보자...'누구나'가 아니다)
이러한 리눅스 커널과 소프트웨어 등을 모아서 패키지 관리 프로그램으로 구성한 것을 리눅스 배포판이라고 한다. 수 많은 리눅스 배포판들은 서로 다른 목적과 환경에서 저마다 다른 옷을 걸쳤지만, 리눅스 커널이라는 하나의 심장을 공유하고 있다.

여기서 우분투란?
남아프리카의 언어인 우분투. 이것은 사람들간의 관계와 헌신에 중점을 둔 윤리 사상, 혹은 인본주의 사상으로서 아프리카의 전통적 사상으로 평화운동의 사상적 뿌리라고한다. 우분투 역시 단순히 이름만을 차용한 것이 아니라, '우분투'의 정신을 개발 철학으로 삼고 있다.
우분투는 데비안(Debian)리눅스를 기반으로 만들어졌으며, 고유한 데스크탑환경을 사용하는 리눅스배포판이다.
윈도우는 아직 리눅스 호환이 불안한 상황이라 우분투를 깔아서 사용하는것!

2.리눅스는 언제쓰일까?

운영체제이므로 상당히 다각도에서 쓰인다
1. 안드로이드 기반의 스마트폰,임베디드 시스템(구글 네스트,삼성 TV,테슬라 컨트롤시스템 등)이 리눅스의 한 갈래
2. 서버! : 여러 이유로 대다수의 서버는 리눅스 기반으로 운영되고있음.

  • 안정성
  • 유연성(오픈소스로 사용자가 소스코드를 비교적쉽게 변경가능)
  • 무료
  • 원래는 CLI(Command Line Interface)를 기반으로 사용자들을 위해 GUI(Graphic User Interface)기능 추가함->GNOME(그놈)
  • 서버(로컬서버,AWS등에 설치된 인스턴스등)에 설치된 리눅스 환경을 사용할 수 있다
    ->프로젝트를 aws에 배포하려는데 해당 서버에는 리눅스밖에 없음.->리눅스를 사용할 줄 모르면 여러프로그램 다 설치후 이용가능하니..
  • 비용절감을 원하는 기관,기업등에서 많이 사용(자체적으로 문제 해결이 가능하고 주로 제한된 업무만을 수행하는 환경이기 때문에 리눅스로 충분히 대체가능)

    결론~
    서버, 클라우드, 웹서버, VM, 임베디드, 프로그래밍 등등 IT 프로가 되고자 한다면 리눅스를 반드시 배우는걸 추천~ 백엔드 개발자들에겐 필수불가결일듯..?

리눅스 너로 정했다

3.리눅스의 핵심개념

3-1.리눅스 파일 시스템 계층구조 표준(FHS: Filesystem Hierarchy Standard)

위에서 보았듯이, 리눅스는 리눅스! 가 끝이 아니고.. 리눅스를 기반으로 배포판이 어마어마하게 많다.
리눅스 배포판의 다양화에 따라 리눅스 파일 시스템 계층구조 표준, 즉 표준 디렉터리에 대한 요구가 생겨났고 이를 FHS라고 한다. 현재 대부분의 리눅스 배포판은 FHS에 맞춰 개발되고 있다.
대부분의 리눅스 배포판은 이와같은 디렉터리 및 구조를 공통적으로 가진다고 할 수 있다.

디렉터리설명
/파일 시스템 최상위 디렉터리
/bin, /sbin리눅스 핵심 명령어의 실행 파일ㄱ
/boot리눅스가 부팅될때 필요한 파일 (부트 로더 설정 파일, 커널 이미지 등)
/dev디바이스 드라이버들과 관련된 파일들을 저장하는 디바이스 디렉터리. 모든 하드웨어는 이 디렉터리에 있는 파일을 통해 접근 가능
/etc리눅스 시스템에서 가장 중요한 디렉터리. 시스템 중요 환경 설정 파일, 서버 프로그램 설정 파일, 시스템 초기화 스크립트 등
/home사용자 계정 홈 디렉터리
/lib/bin, /sbin에 있는 프로그램들이 의존하는 라이브러리 파일들
/mediaUSB 메모리나 CD/DVD-ROM같은 탈부착이 가능한 저장 장치가 자동으로 마운트될 때 마운트 지점을 제공
/proc커널이 사용하는 가상의 파일 시스템(메모리, CPU같은 시스템 자원 관련 정보, 실행 중인 프로세스 관련 정보, 커널 관련 정보 등)
/root루트 계정 디렉터리
/usr리눅스 핵심 명령 외 대부분의 사용자 명령, 게임, X 윈도우 시스템, 온라인 매뉴얼 등
/var시스템 운영 중에 필요한 가변 자료들. 주로 시스템 운영 로그, 스풀 디렉터리, 임시 파일 등. 메일 서버, 웹 서버, ftp 서버 운영 시에는 해당 하위 디렉터리에 사용자 메일박스, 웹 콘텐츠, 공유 파일을 기록하기 위해 사용

3-2.PATH

  • / : 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 를 입력해보자. 해당 명령어가 위치해 있는 경로를 별도로 지정해주지 않더라도 어디서든 사용이 가능한 이유 역시 환경 변수 덕분이다.

3-3.Configs

리눅스 커널을 빌드 시에 .config라는 파일이 생성된다.(초기에 커널이 빌드가 되지 않은 상태에서는 .config 파일이 없다.) 리눅스에서는 주로 파일을 통하여 설정 (config) (ex..bashrc, zshrc)

  • shell 설정 파일을 비롯한 많은 설정 파일들이 대부분 유저의 home(~) 디렉토리에 있음.
  • .으로 시작하는 파일 및 디렉토리는 숨김파일로 간주(dot file)
  • ls에 a 옵션을(all) 주어야지만 볼 수 있다
  • allias 별칭을 통해 사용자가 단축어를 지정할 수 있음(.zshrc, .bashrc 등에 등록)
alias myip="ipconfig getiadder en0" # macOS
alias myip="hostname -I" # ubuntu

3-4.많이 쓰는 명령어

명령어설명
cdchange drectory폴더이동
lslist segments현재 경로 내 파일 목록 출력
pwdprint working directory현재 경로 출력
mkdir/rmdirmake directory디렉토리 생성/제거
rmremove파일/디렉토리 제거
cpcopy파일/디렉토리 복사
mvmove파일/디렉토리 이동
catconcatenate터미널에 파일 내용 출력
touch파일 생성 및 날짜정보 변경
chmodchange mode파일/디렉토리 권한 설정

4.직접 해보기

1.터미널에서 현재 경로 확인 후 바탕화면으로 이동

pwd #현재경로 출력
ls #경로내 파일목록 출력
cd Desktop #Desktop로 이동
ls #Desktop의 파일목록 출력
(내건 너무 길어서..ㅠㅠ멘토님꺼 잠시 빌려옴)

2.폴더 생성 후 폴더 내부에 readme.md, move 디렉토리 생성

mkdir wecode # 폴더 생성
ls # 폴더 생성 확인
cd wecode # 폴더 이동
touch readme.md # readme.md 생성
ls # 파일 생성 확인
mkdir move #폴더 생성
ls # 폴더 생성 확인

3.vi 에디터로 내용 작성 후 저장

vi readme.md
i #하단에 insert모드(이경우 입력이 안됨) -> i입력시 글을 쓸수 있는 모드로 전환
내용 입력 후 ESC
:wq #저장 후 종료(write quit)

4.README.md 복사 후, 복사 된 파일 move 디렉토리로 이동

cp readme.md readme2.md #(원본 파일) (대상 파일)
ls
mv readme2.md ./move # (이동할 파일) (경로)
cd move
ls

5.move폴더 및 파일 삭제

cd ..
rm -rf move
ls
파일이 다 삭제되었다.

한시간 짜리 세션이였는데 개념 하나하나 이해하는데만 거의 4시간을 잡은거 같다. 그래도 블로그로 정리하면서 확실히 잡힌듯!

profile
🌱Backend Developer👩‍💻
post-custom-banner

0개의 댓글