[Linux](리눅스)

윤경·2021년 2월 1일

Linux

목록 보기
1/1
post-thumbnail

📌 리눅스 장점

  • 이식성, 확장성 용이
    : 리눅스는 거의 C언어, 어셈블리 언어로 작성 되어있음.
    C언어 자체가 특정 기계에 비의존적이라 프로그램을 다른 기계의 시스템으로 포팅하기 쉬움.
    이런 이유로 OS 자체도 하드웨어에 적합하게 변형이 가능.

  • 텍스트 모드 중심의 관리와 다양한 관리 환경의 제공
    : 직접 설정 파일을 수정해 세밀한 시스템 설정 가능.
    소스코드를 수정해 프로그램을 시스템에 최적화 가능.
    간단한 파일 수정 작업을 몇 개의 명령어 실행만으로도 간편하게 가능.
    간단한 스크립트 파일을 작성해 자유롭게 시스템을 자동화 시킬 수 있음.

  • 풍부한 SW 개발 환경 제공
    : 유닉스, 리눅스 시스템은 거의 모든 프로그래밍 언어를 제공.
    모든 시스템 소스가 개방되어 있어 소프트웨어 개발에 개방적.

  • 다양한 네트워크 서비스 및 작업환경 지원
    : 다양한 웹서비스를 구축/서비스 할 수 있음.
    웹을 통한 작업 환경 구축 가능.

  • 뛰어난 안정성
    : 리눅스는 C언어 기반이라 프로그래밍, 포팅에 용이.
    국제적, 개방적인 개발 환경을 가지므로 커널 및 응용 프로그램에 중대한 버그가 있을 경우 상업적 소프트웨어에 비해 신속하게 이에 대한 패치가 개발돼 공개됨.
    또한, 커널, 파일 시스템, shell, 웹 서비스 프로그램 등 리눅스 시스템의 기반이 되는 모든 프로그램의 소스코드가 공개되어 있어 직접 시스템을 최적화 할 수 있음.

  • 시스템 보안성
    : 리눅스 공개 코드 상에서 보안 문제로 지적되는 경우 많음. 하지만 리눅스 커널은 긴 시간의 연구, 전세계 개발자들의 의견수렴을 지속적으로 거쳤기 때문에 기본적인 완성도가 높음. 또한 리눅스 시스템의 대부분 프로그램은 소스코드가 공개되어 있어 프로그램의 오류를 빠르게 해결할 수 있음. 따라서 어느 OS보다 보안성이 뛰어나다고 할 수 있음.

  • 폭 넓은 하드웨어 장치 지원
    : 리눅스 커널은 폭 넓은 하드웨어 장치들을 지원하는 드라이버들을 포함함.

  • 저수준 하드웨어로 구성된 시스템의 사용 가능
    : 리눅스는 서버 시스템으로 사용을 위한 최소한의 설치를 거치면, 하드 디스크를 차지하는 전체 운영체제의 용량이 적고 요구하는 하드디스크의 성능도 높지 않음. 따라서 구형 컴퓨터에서도 서버 시스템 운영이 가능. 또한 리눅스 커널은 모듈 방식을 적재해 사용할 수 있고 소스코드가 공개되어 있어 최적화도 용이. 따라서 저수준 하드웨어를 갖춘 시스템에서 리눅스는 최적 성능 발휘 가능. 다양한 분야의 임베디드 및 휴대용 기기의 OS로 사용되고 있음.

  • 시스템의 높은 신뢰성

  • 가격 대비 탁월한 성능

📌 셸(shell)

🔎 셸(shell)이란

리눅스의 셸은 명령어와 프로그램을 실행할 때 사용하는 인터페이스.

셸은 커널(kernel)과 사용자 간의 다리역할을 하는 것으로 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할.
셸은 커맨드라인 인터프리터라고 하여 우리가 입력하는 명령어를 읽고 실행하는 기능을 함.
windows의 명령 프롬프트와 비슷해 보이지만 훨씬 강력한 프로그래밍 기능을 지님.

🔎 셸의 기능

  • 사용자와 커널 사이 명령을 해석해 전달하는 명령어 해석기 기능
  • 셸은 자체 내에 프로그래밍 기능이 있어 프로그램을 작성할 수 있음. 셸 프로그래밍 기능을 이용하면 여러 명령을 사용해 반복적으로 수행하는 작업을 하나의 프로그램으로 제작할 수 있음. 셸 프로그램을 셸 스크립트라고 부름.
  • 사용자 환경 설정의 기능. 초기화 파일 기능을 이용해 사용자의 환경을 설정할 수 있음. 로그인 할 때 이 초기화 파일이 실행돼 사용자의 초기 환경 설정이 가능. (셸 공부 중 가장 중요한 것 중 하나가 환경 변수의 이해)

셸 스크립트

: 셸로 만든 프로그램.
기본 셸에서 제공하는 여러 명령어들을 사용해 프로그래밍 하기 때문에 문법이 매우 간편.
내장 명령어를 사용할 수 있어 셸 스크립트만이 만들 수 있는 프로그램도 존재.
쉘 프로그램을 만들기 위해 vi에디터를 이용할 수 있음.
bash의 경우 첫 줄에 #! /bin/bash => bash로 작성 되었음. bash를 기준으로 실행된다는 것.
chmod +x [파일명]으로 실행 권한을 부여.

🔎 셸의 종류, 특징

셸은 커널에서 분리된 별도의 프로그램이므로 다양한 종류의 셸이 존재하고 현재까지 지속적으로 개발 중에 있음

bash(배쉬)

현재 리눅스의 표준 셸. 우분투와 페도라가 기본적으로 사용하는 셸도 bash. 무료이므로 파급력이 좋음. bash는 리눅스뿐만 아니라 GNU 운영체제, 맥 OS X등 다양한 운영체제에서 사용 중.
프롬프트: 일반 유저는 $ 프롬프트를 사용하고 root 유저는 # 프롬프트를 사용

  • bash의 특징
  1. Alias 기능(명령어 단축 기능)
  2. History 기능 (⬆ or ⬇)
  3. 연산 기능
  4. Job Control 기능
  5. 자동 이름 완성 기능(tab)
  6. 프롬프트 제어 기능
  7. 명령 편집 기능 등...

🔎 셸 변수

변수란 데이터를 담기 위한 그릇으로 타입 선언이 없고 띄어쓰기를 포함하면 안됨.
변수의 값을 출력할 때 변수명 앞에 $를 붙이고 echo 명령으로 확인할 수 있음.

ubuntu@server:~$ name=yk
ubuntu@server:~$ echo $name => yk 출력
ubuntu@server:~$ unset name	// unset [변수명]: 변수 해제
ubuntu@server:~$ echo $name => 출력값 없음

🔎 셸 환경변수

환경변수란 프롬프트 변경, PATH 변경 등 셸의 환경을 정의하는 중요한 역할을 수행하는 변수.
환경변수는 미리 예약된 변수명을 사용.
전체 환경변수의 값은 env 명령으로 확인 가능.
링크텍스트

🔎 프롬프트(prompt)

PS1 프롬프트와 PS2 프롬프트의 차이점

윈도우에는 프롬프트가 한 종류뿐이지만 리눅스에는 두 종류(PS1, PS2)가 존재.
보통 우리가 작업하는 터미널은 PS1 프롬프트. 이때 명령어가 모두 입력되지 않았을 경우에 > 라는 기호가 뜸. 이러한 형태가 PS2 프롬프트임.

🔎 함수 fork()

fork()는 현재 실행중인 프로세스를 복사해 다른 프로세스를 생성.
복사해 생성하기 때문에 가지고 있던 메모리 등 시스템 자원을 모두 원래의 프로세스와 공유하게 됨.

fork()를 사용해 생성한 프로세스는 부모 프로세스(parent process), 새로 생긴 프로세스는 자식 프로세스(child process)라고 함.
모든 프로세스는 생성될 때 프로세스 아이디를 부여받음. fork() 함수를 이용해 자식 프로세스를 생성할 수 있는데 이때, 부모에게는 자식 프로세스의 pid를 반환하고, 자식에게는 0을 반환.
이를 이용해 자식 프로세스에게 특정 명령 가능.

// 프로세스 번호 PID가 저장될 변수 pid
pid_t pid;
// 자식 프로세스 생성. 성공시 0, 실패시 -1, 부모 프로세스일 때 양수 반환(자식 프로세스의 pid).
pid = fork();

📌 Kali Linux(칼리 리눅스)

칼리 리눅스란 취약점 점검 및 모의해킹을 수행하기 위한 해킹 툴이 설치된 오픈소스 리눅스 OS.
서버에 직접 설치하기 보다는 가상머신 형태로 많이 사용.
칼리 리눅스 이전 백트랙이라고 하는 모의해킹을 위한 리눅스 OS가 있었고, 칼리는 백트랙의 후속 버전.

profile
개발 바보 이사 중

0개의 댓글