[Linux] 정규 표현식

728x90

1. 정규표현식 정의

  • 검색에서 사용할 매칭되는 같은 문자들의 패턴

2. 메타 문자

  • 정규 표현식에서는 문자 그대로의 의미 이상으로 해석되는 메타문자 (문자들의 집합) 사용

※ 메타문자 연산자와 효과

연산자 효과
. 모든 문자 1개와 일치
? 앞에 존재하는 문자가 있을수도, 없을수도 있을 경우 사용
* 앞에 존재하는 문자가 0번 혹은 그 이상 반복되는 문자를 찾을 때 사용
+ 앞에 존재하는 문자가 1번 혹은 그 이상 반복되는 문자를 찾을 때 사용
[] 대괄호 사이에 존재하는 문자들 중 하나에 일치
[a-z] a부터 z까지 모든 영문자 소문자와 일치
^ 대괄호 사이에 존재할 때는 부정 [^a], 대괄호 밖에서는 문자 열의 시작과 일치
$ ^와 반대로 문자열의 끝과 일치할 경우
{N} 정확히 N번 일치
{N,} N번 또는 그 이상 일치
{N, M} 적어도 N번 일치하지만 M번 일치를 넘지 않음
\b 단어 끝의 공백 문자열
\B 단어 끝이 아닌 곳에서의 공백 문자열
\< 단어 시작에서의 공백 문자열을 의미. \<linux : linux 문자열로 시작하는 단어를 포함한 라인(vi, grep)
\> 단어 끝에서의 공백 문자열을 의미. linux\> : linux 문자열로 끝나는 단어를 포함한 라인

 


3. 확장 브래킷

※ 확장 브래킷과 각 브래킷 별 의미

브래킷 의미
[:alnum:] [A-Za-z0-9] 알파벳 문자와 숫자로 이루어진 문자열
[:alpha:] [A-Za-z] 알파벳 문자
[:blank:] [\x09] 스페이스와 탭
[:cntrl:] 컨트롤 제어 문자
[:digit:] [0-9] 숫자
[:graph:] [!-~] 공백이 아닌 문자(스페이스, 제어 문자들을 제외한 문자)
[:lower:] [a-z] 소문자
[:print:] graph와 유사하지만 스페이스 문자를 포함
[:punct:] [!-/:-@[-'{-~] 문장 부호 문자
[:space:] [\t\v\f] 모든 공백 문자(newline 줄바꿈, 스페이스, 탭)
[:upper:] [A-Z] 대문자
[:xdigit:] 16진수에서 사용할 수 있는 숫자
   
   
   

4. Vim에서 정규 표현식을 사용한 검색 예시

  • vim에서 ESC키를 누르고 /검색할 문자열 형태를 입력하고 엔터를 누르면 검색 가능
  • /없이$ : 없이로 끝나는 문자열 검색
  • /...자 : 4개 문자로 구성된 문자열 중 마지막 문자가 “자”로 끝나는 문자열 검색
  • /l*ve : l로 시작되는 문자부터 ve로 끝나는 모든 문자열 검색
  • /[Ll]ove : Love, love
728x90

댓글()

[Linux] 리눅스의 부팅 과정과 로그인 쉘 #2

IT_Engineer/Unix & Linux (Bash)|2020. 11. 20. 08:59
728x90

4. 변수

  • 변수 타입
    • 쉘 변수들은 대문자로 정의하며 2가지의 변수 타입을 가지고 있음
    • 전역 변수
      • 전역 변수 또는 환경 변수들은 모든 쉘에서 사용할 수 있으며, env 명령을 사용하면 환경 변수들을 출력해볼 수 있음
      • echo $PATH : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  이런식으로 나오는데 쉘은 명령어를 찾을 때마다 이 디렉토리를 순서대로 검사함
      • 추가하고 싶으면 vi ~/.bash_profile 에서 export PATH=$PATH:/path/to/add 로 추가
    • 지역 변수
      • 지역 변수는 현재의 쉘에서만 사용할 수 있음. 옵션 없이 set 빌트인 명령을 사용하면 환경 변수를 포함해 모든 변수들과 함수들의 목록을 보여줌
    • 다음 변수는 배시 쉘 프로그래밍 부분에 작성(문자열 변수, 정수형 변수, 상수형 변수, 배열 변수)
  • 변수 생성
    • 변수들은 기본적으로 대문자로 생성. 숫자를 포함할 순 있지만 숫자로 시작할 수 없음
    • = 앞뒤로 공백이 없어야 한다. VAR="value" 이런식!
    • 변수를 출력할 경우엔 echo 를 사용.  echo $VAR, echo "$VAR", echo "${VAR}" 모두 동일 기능 수행
    • ★ 큰따옴표(““)를 쓰면 $str의 실제 값을 출력할 수 있고(변수의 값) 작은따옴표(‘‘)를 쓰면 그냥 $str이란 문자열 자체를 출력함!
    • 밖에 큰따옴표를 쓰고 작은따옴표는 안에 쓰는 경우가 많음

4.1 지역 변수를 환경 변수로 만들기

  • 현재 쉘에 만든 변수들은 현재 쉘에서만 사용할 수 있음. 이 경우 export 빌트인 명령을 사용하면 지역 변수를 환경 변수로 만들 수 있음
  • 해제는 unset
  • 자식 쉘에서 export 명령을 사용한다고 해서 부모 쉘에 영향을 주지는 못함
  • ★ 특수 파라미터 변수들 (중요)
    • $* : 1부터 시작하는 위치 파라미터의 확장, 큰 따옴표로 구분하고 IFS 특수 변수의 첫 문자로 구분되는 각 파라미터의 값 하나의 단어를 확장하며, 전체 파라미터값을 가짐 만약 IFS가 NULL이거나 해제되어 잇으면 파라미터는 스페이스로 구분
    • $@ : 1부터 시작하는 위치 파라미터의 확장 큰 따옴표로 확장되면 각 파라미터는 하나의 구분 단어로 확장, 전체 파라미터값을 가짐
    • $# : 십진수의 위치 파라미터 전체 개수를 의미
    • $? : 최근 실행된 포그라운드 파이프라인의 종료상태를 가지고 있음(0은 정상적으로 종료)
    • $- : 실행하자마자 set 내장명령 또는 쉘 자체에 의해 설정된 현재 옵션 플래그로 확장
    • $$ : 현재 쉘의 프로세스 ID
    • $! : 가장 최근에 백그라운드로 실행된 프로세스의 ID를 가지고 있음
    • $0 :쉘 또는 쉘 스크립트의 이름을 가지고 있음
    • $_ : 아규먼트 목록을 사용해 실행된 쉘스크립트의 절대 경로를 가지고 있음

5. 본 쉘

  • 본 쉘 shbang 라인 : 쉘 스크립트의 첫 라인에 #!/bin/sh를 입력해서 커널에게 이 파일은 본 쉘 스크립트라고 인지해야 함
  • 주석은 #을 사용
  • 와일드 카드 : ``,?,[] 는 파일명 확장을 위해 사용되고, <,>,2>,>>,| 문자들은 표준 IO를 위해 사용된다. 문자들이 인터프리터에 의해 해석되지 않도록 하기 위해선 인용부호(', '')로 감싸주면 됨
  • read : 사용자의 입력을 읽고 read 명령의 오른쪽에 적는 변수에 사용자 입력값을 할당
  • read word echo "입력한 단어는: $word"
  • 조건문
    • if~then 문장을 사용하며 if문의 끝에는 반드시 fi를 적어 if문이 끝났음을 표시
    if [표현식] then 명령 문장 블록 elif [표현식] then 명령 문장 블록 else 명령 문장 블록 fi
    • case문
    • case "$color" in blue) echo $color is blue ;; green) echo $color is green ;; red|orange) echo $color is red or orange ;; *) echo "Not a color" # default esac
  • 루프문 : while, until, for 3가지 종류가 존재
    • while : 뒤에 오는 명령이나 표현식이 treu면 계속해서 do와 done 사이 문장 실행
    • until : while와 비슷하지만 until 뒤에 오는 명령이 false가 될 때까지 do와 done 사이 문장 실행. 거의 사용하지 않음
    • for : 단어목록을 통해서 반복, for 다음으로 변수 이름이 오고 in 다음 단어 목록이 온다. 그리고 do와 done 키워드 사이의 문장을 수행
  • 파일 테스팅 : test은 상태 표현식을 판단하기 위해 사용
    • 파일, dir, plain 텍스트, 읽을 수 있는 파일 등의 속성을 테스트하기 위해 옵션을 가지고 있음
    • d : 디렉터리인지 테스트
    • f : 파일인지 테스트
    • r : 현재 사용자가 읽을 수 있는지 테스트
    • s : 파일 크기가 0보다 큰지 테스트
    • w : 현재 사용자가 파일에 쓰기 가능한지 테스트
    • x : 현재 사용자가 파일을 실행할 수 있는지 테스트
    #!/bin/sh if [ -f file ] then echo "file exists" else echo "file not found" fi if [ -d file ] then echo "file is a directory" else echo "file is not a directory" fi if [ -s file ] then echo "file is not of zero length" else echo "file size is zero length" fi if [ -r file -a -w file ] then echo "file is readable and writable" else echo "file is not read/write" fi
    • 함수
    • #!/bin/sh lister(){ echo "현재 디렉터리는 'pwd'입니다" echo "현재 디렉터리 파일은 아래와 같습니다" ls } lister

5.1 배쉬 쉘 문법과 구조

  • 대부분의 리눅스에서 기본 쉘로 bash(Bourne Again SHell) 쉘을 사용하고 있음
  • 로그인 과정
    1. init 프로세스 생성
    2. getty 프로세스 생성
    3. 로그인 프롬포트를 보여줌
    4. /bin/login 프로그램이 실행되고 로그인 아이디를 입력하면 로그인 패스워드 입력을 기다림
    5. 입력받은 패스워드가 정확하면 환경 설정이 초기화되고 로그인 쉘을 시작
    6. /etc/profile 시스템 파일을 찾아 명령 라인에서 실행
    7. 유저의 홈디렉터리에 있는 유저의 초기 파일인 .bash_profile 파일 실행, .bashrc 라는 환경 파일을 실행
    8. 달러($) 기호를 모니터에 보여주며 유저의 명령을 기다림

5.2 배시 쉘 옵션 설정을 위한 set, shopt 명령

  • set 명령어는 특수한 빌트인 내장 옵션들을 켜고, 끄는 역할을 함
  • set -o : 쉘의 설정값 출력
  • set -o option : 옵션을 사용, set +o option : 옵션을 사용하지 않음
  • set -[a-z] : 옵션을 사용하는 단축형
  • set +[a-z] : 옵션을 사용하지 않는 단축형
  • shopt 명령은 배시 쉘에서 사용되는 set 명령으로 새로운 버전의 쉘 옵션 내장명령어. p 옵션을 사용해 모든 옵션을 출력해볼 수 있으며, u 옵션을 사용해 옵션 셜정을 off할 수 있고, s 옵션을 사용해 on할 수 있음

5.3 배열

  • 배시 쉘은 1차원 배열 생성을 지원. 배열은 하나의 변수 이름에 숫자 목록, 이름 목록, 파일 목록 등의 단어 목록 집합을 할당할 수 있음. 빌트인 함수 declear -로 x[0] 형태로 생성
  • 배열의 요소를 가져올 때에는 ${배열명[index]} 형식을 사용하며 ar 옵션을 사용하면 읽기전용 배열이 생성
  • 배열 요소의 개수를 파악할 경우엔 ${#names[*]}을 사용
  • 배열의 인덱스를 사용해 특정 인덱스에만 값을 넣을 수 있음

5.4 함수

  • 쉘의 컨텍스트 안에 명령들의 그룹 이름을 사용한다(자식 프로세스가 생성되지 않음)
  • 함수가 한번 정의되면 쉘 메모리에 적재되기 때문에 함수가 호출될 때 디스크로부터 읽어들일 필요가 없음/ 함수는 스크립트의 모듈을 향상시키기 위해 사용
  • 실행될 때 프롬프트에서 정의될 수 있지만 대부분 유저의 초기화 파일(.bash_profile)에 정의 그리고 함수는 호출되기 이전에 반드시 정의되야 함
  • 함수 정의
    • 본 쉘 방식 : 함수명을 적고 빈 괄호를 적은 다음 함수 정의
    • function 키워드를 사용. 컬리 브레이스({) 앞뒤에는 반드시 공백이 있어야 함
    • 정의 부분은 세미콜론(;)으로 분리된 명령어들로 구성되며, 마지막 명령어는 세미 콜론(;)으로 끝나야 함
  • declare -F 명령을 실행하면 정의되어 있는 함수명을 출력할 수 있으며, unset -f 함수명을 사용해 현재 쉘에서 정의한 함수를 제거할 수 있다

6. exec 명령

  • 새로운 프로세스를 시작하지 않고 현재 프로그램을 대신하여 사용 가능 표준 출력 또는 표준 입력은 서브쉘을 생성하지 않고 exec 명령으로 변경 가능 만약 파일이 exec 명령으로 오픈되면 파일의 끝까지 한 라인씩 읽게 됨

7. 파이프

  • 파이프 심볼(|)의 왼쪽 명령의 결과를 가져와서 오른쪽 명령의 입력으로 사용하도록 함
  • who | wc -l
    • 파이프는 3단계의 처리를 수행
    • who 명령의 결과값이 커널 버퍼로 보내지고, wc -l 명령은 버퍼로부터 데이터를 읽은 다음, 결과를 모니터 스크린으로 보냄
728x90

댓글()

[Linux] 리눅스의 부팅 과정과 로그인 쉘 #1

IT_Engineer/Unix & Linux (Bash)|2020. 11. 19. 08:59
728x90

1.init

  • init과 연결된 수많은 프로세스들이 자신만의 프로세스 ID(PID)를 가지고 생성되기 시작
  • init의 PID는 1
  • init 프로세스가 시스템을 초기화하고 터미널 라인을 오픈하기 위한 작업을 시작하고, 표준 입력과 표준 출력, 표준 에러를 설정
  • ps -ef 를 입력하면 PID와 같이 출력
    • 표준 입력 (0): 키보드로부터 입력받는 것
    • 표준 출력 (1) / 표준 에러(2) : 모니터로 출력하는 것
  • 그 이후 로그인 프롬포트를 보여줌
  • init 프로세스는 /etc/rc.d/init.d 에 런레벨 별로 설정되어 있는 쉘 스크립트를 실행. 이 스크립트들은 chkconfig 명령을 사용해 부팅 시 자동으로 실행할지, 실행하지 않을지 설정
  • 부팅 시 수행할 런레벨은 /etc/inittab에 설정되어 있음 (우분투 : /etc/init/rc-sysinit.conf!)
  • 런레벨은 0부터 6까지 존재, 주로 텍스트 모드 런레벨인 3번(주로 서버)과 그래픽 모드 런레벨인 5번을 주로 사용(주로 데스크탑) 현재는 level 2를 사용
  • rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d에 설정 파일이 들어가있음 (runlevel configuration)
  • K로 시작하는 것은 kill, S로 시작하는 것은 Start를 의미하며 파일의 prefix를 수정하면 바로 반영

2. 로그인 프롬프트

  • /bin/login 프로그램이 /etc/passwd 파일에 있는 첫 번째 필드를 체크하기 위해 유저 아이디를 검증하고, 존재하면 패스워드 검증
  • 패스워드가 맞다면 /etc/passwd 파일의 마지막에 설정되어있는 SHELL 변수에는 로그인 쉘을, USER와 USERNAME 변수에는 로그인 이름을 할당
  • 로그인이 끝나면 /etc/passwd 파일에서 유저 라인의 마지막 단계에 입력되어 있는 프로그램을 실행. 일반적으로 배시 쉘로 설정되어 있음
  • 쉘 초기화 파일들
    1. /etc/profile
      • 시스템 전역 쉘 변수 초기화
      • 유저가 쉘에 로그인하면 가장 먼저 이 곳의 파일을 읽음. 이 파일에는 PATH, USER, LOGNAME, MAIL, HOSTNAME, HISTSIZE, INPUTRC 등의 쉘 변수들이 선언되어 있음
      • 전역 리드라인 초기화 파일인 /etc/inputrc 파일을 읽어들이도록 되어 있으며, 프로그램들의 전역 환경을 설정하는 파일을 포함하고 있는 /etc/profile.d 디렉터리를 읽어들이도록 구성되어 있음
    2. /etc/bashrc
      • 쉘 함수와 Alias를 위한 시스템 전역 변수 정의
    3. ~/.bash_profile
      • 유저 개인의 환경 설정 파일
      • 시스템 전역이 아닌 유저 자신만의 PATH와 시작 프로그램을 추가적으로 설정
    4. ~/.bashrc
      • 유저 개인의 Alias 및 변수 설정 파일
      • 유저 자신의 개인적 명령어 앨리아스를 정의할 수 있으며, /etc/bashrc 파일에서 시스템 전역 변수를 읽은 다음, 특별한 프로그램을 위한 변수를 설정할 수 있음
    5. ~/.bash_logout
      • 로그아웃 설정 파일
      • 로그아웃 절차를 포함하고 있음. ex) 로그아웃하면 터미널 윈도우가 사라짐
    6. source 명령
      • 쉘 환경 설정 파일 즉시 적용하기. . 명령도 같은 기능을 수행
    7. zsh의 경우 ~/.zshrc 에 설정 파일이 존재!
  • 명령 라인 파싱
    1. 히스토리 치환
    2. 명령라인은 토큰 또는 단어 단위
    3. 히스토리 업데이트
    4. 인용 진행
    5. 앨리아스 치환 / 함수 정의
    6. 리다이렉션, 백그라운드, 파이프 설정
    7. 변수 치환이 수행
    8. 명령 치환이 수행
    9. globbing 이라는 파일명 치환이 수행
    10. 명령이 실행
  • 명령어 타입
    1. alias
    2. 키워드
    3. 함수
    4. 빌트인 내장명령
    5. 실행 파일

3. 프로세스와 쉘

  • 프로세스 : 유일한 PID 번호에 의해 식별될 수 있는 실행 프로그램
    • 실행 프로그램의 데이터와 스택, 프로그램 포인터와 스택 포인터 그리고 프로그램을 실행하기 위해 필요한 모든 정보들로 구성
    • 쉘 : 로그인 프로세스를 완료했을 때, 시작하는 특별한 프로그램으로 프로세스임
  • 커널 : 프로세스를 제어하고 관리

3.1 시스템 콜

  • 쉘 스크립트로부터 명령을 실행했을 때, 빌트인 내부 코드 / 디스크 저장장치에서 명령을 찾고 실행된 명령을 정렬
  • 커널 영역의 기능을 사용자 모드가 사용 가능하게,
    즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해줌
  • fork 시스템 콜 : 콜프로세스의 복사본을 생성
    • 자식 프로세스는 fork가 호출된 다음 실행하고 두 프로세스는 CPU 공유. 자식 프로세스는 부모 프로세스의 환경, 오픈된 파일, 실제적 유저 ID, umask, 현재 작업 디렉터리, 시그널의 복사본을 가짐
    • 명령을 실행했을 때 아래와 같은 Flow를 가짐
      1. 쉘은 명령 라인을 파싱하고 첫 단어가 빌트인 명령인지, 디스크에 존재하는 실행 명령인지 판단
      2. 빌트인 명령 -> 곧바로 처리
      3. 디스크에 존재 -> 부모 쉘의 복사본을 만들기 위해 fork 시스템 콜 호출
      4. 자식 프로세스는 명령을 찾기 위해 PATH에 정의되어 있는 경로 검색하고 리다이렉션, 파이프, 명령 치환, 백그라운드 프로세싱을 위한 파일 디스크립터를 설정
      5. 자식 프로세스가 동작하는 동안 부모 프로세스는 잠시 멈춤
  • wait 시스템 콜 : 자식 프로 세스 하나가 종료될 때까지 부모 프로세스를 대기상태로 유지
    • wait가 성공하면 자식 프로세스가 종료되고, 종료상태를 가지고 있는 자식 프로세스의 PID를 리턴
    • 자식 프로세스가 종료되기 전 부모 프로세스가 종료된다면, init 프로세스는 자식 프로세스를 고아가 된 좀비 프로세스로 만듬
    • 부모를 대기상태로 만드는 것 + 프로세스가 정상적으로 종료하도록 보증하는 역할
  • exec 시스템 콜 : 터미널에 명령을 수행한 다음, 쉘은 새로운 쉘 프로세스를 fork. 자식 쉘은 타이핑된 명령을 수행
    • 쉘은 프로그램을 위해 PATH를 검색 -> 프로그램이 발견되면 명령의 이름과 함께 exec 시스템 콜을 호출
    • 커널은 이 프로그램을 메모리에 로드하며 자식 쉘은 새 프로그램으로 오버랩
    • 새 프로그램은 자식 프로세스가 되고 실행을 시작(모든 환경 변수, 오픈 파일, 유저 정보를 물려받음)
  • exit 시스템 콜 : 중지
    • 자식 프로세스를 종료할 때 자식 프로세스는 sigchild 시그널을 보내고 자식의 종료상태를 부모 프로세스가 받아들이도록 대기
    • 종료상태는 0~255의 숫자이며 0은 성공적으로 실행되었단 뜻
    • 0이 아닌 종료상태는 프로그램 실행 실패했다는 뜻
  • 프로세스 종료하기
    • CTRL-C 또는 CTRL-\\ 키를 이용해 종료할 수 있으며, kill 명령을 사용해 종료할 수 있음.
728x90

댓글()

[Linux] 쉘과 명령어 기초 #4

IT_Engineer/Unix & Linux (Bash)|2020. 11. 18. 09:00
728x90

! 시스템 관리자 명령어 정리

유저와 그룹

  • user : 현재 로그인하고 있는 유저들을 출력. who -q와 동일
  • groups : 현재 쉘에 접속해 있는 유저가 속해 있는 그룹을 출력. GROUPS 환경 변수를 출력, 그룹 이름이 아닌 그룹 번호만 가지고 있음
  • chown, chgrp : 소유자, 소유자 그룹 변경
  • useradd, userdel : 유저를 추가, 삭제할 때 사용하는 명령
    • adduser : useraddd에 심볼릭 링크되어 있음
    • 유저를 추가한 다음, passwd [유저 아이디]를 통해 패스워드 지정
    • 유저를 삭제할 때, 유저 디렉터리까지 삭제하고 싶으면 r 명령을 사용
  • usermod, groupmod : 그룹 이름이나 아이디 변경시 사용
  • id : 유저의 아이디, 그룹아이디, 소속된 그룹명 등을 출력
  • lid : 유저가 소속되어 있는 그룹 출력
  • who : 현재 로그인되어 있는 유저 목록 출력
  • `w`` : 모든 유저에 대한 정보 출력. who 명령의 확장
  • logname : 현재 유저의 로그인명
  • su : 한 유저가 다른 유저로 전환. 유저가 주어지지 않으면 기본적으로 슈퍼 유저(root)로 설정
  • sudo : 슈퍼 유저(root) 또는 다른 유저로 명령을 실행
    • /etc/sudoers 파일에 정의되어 있음
  • passwd : 유저의 패스워드를 생성/변경
  • ad : /var/log/wtmp 파일로부터 유저의 로그인 시간을 시간 단위로 출력
  • last : /var/log/wtmp로부터 모든 유저의 마지막 로그인 시간을 출력. reboot 아규먼트를 사용하면 reboot한 날짜, 시간을 출력
  • newgrp : 자신이 소속된 그룹을 새 그룹으로 변경/추가하지만 현재 쉘을 빠져나오면 초기화됨

터미널

  • tty : 현재 유저의 터미널 출력 -> /dev/ttys000 라고 나옴
  • stty : 터미널 설정을 출력하거나 변경할 수 있음
  • setterm : 터미널의 설정갑을 변경
  • tset : 터미널 설정을 초기화 하고 터미널 타입을 출력
  • mesg : 다른 유저가 자신의 터미널에 접근하는 것을 제어, mesg y : 자신의 터미널에 쓰기 허용, 기본 설정. mesg n : 자신의 터미널에 쓰기 불허
  • wall : 접속해 있는 모든 유저에게 메시지를 전송할 때 사용
  • write : 유저를 지정해 메시지를 발송할 경우 사용

정보와 통계

  • uname : 커널 정보와 같은 시스템 정보를 출력해 볼 수 있음
  • arch : 시스템 아키텍처를 출력. uname -m 명령과 동일
  • lastlog : /var/log/lastlog 파일을 참고해 모든 유저의 마지막 로그인 시간을 출력
  • lsof : 오픈된 파일의 목록을 출력. i 옵션을 사용하면 오픈되어 있는 네트워크 소켓 파일들을 출력할 수 있음
  • strace : 주어진 명령을 실행할 때 호출하는 시스템 콜과 시그널을 추적하는 명령
  • ltrace : 주어진 명령을 실행할 때 호출하는 라이브러리 콜을 추적하는 명령
  • nc : TCP와 UDP 포트 커넥션과 리슨을 출력. 포트 접속을 위해서는 호스트명과 포트번호를 아규먼트로 사용하면 되고, z 옵션과 포트번호 범위를 지정하면 포트로 접속이 가능한 상태인지 체크할 수 있으며, 검색할 포트 범위는 1-80 형식을 사용함
  • free : 메모리와 캐시 사용량을 Byte 단위로 출력
    • 해당 명령어를 사용하면 used free shared buffers cached이 나타남. 이와 관련된 내용은 링크를 참고
  • procinfo : /proc 파일 시스템에 대한 정보를 출력
  • lsdev : 설치된 디바이스 장치들의 목록을 출력
  • du : 디스크 파일 사용량을 출력. 재귀적으로 출력하며 특정 디렉터리를 지정 가능.
    • h : 킬로바이트 단위로 출력 / sh : 현재 디렉터리 아래의 전체 용량을 출력
  • df : 파일시스템의 파티션 사용량을 출력.
    • h : M, G 단위로 출력
  • dmesg : 부팅 시 콘솔에 출력된 메세지들을 출력
  • stat : 주어진 파일의 각종 정보를 출력
  • vmstat : 버추얼 메모리 통계 출력
  • netstat : 현재 네트워크 통계와 정보를 출력. 현재 오픈되어 있는 포트 목록을 출력하고자 한다면 lptu 옵션을 사용
  • uptime : 현재 시간과 시스템이 종료/재부팅되지 않고 계속 운영되고 있는 기간, 현재 접속자 수, 평균 부하를 출력. load average가 3 이상이면 시스템 성능이 현저히 떨어짐
  • hostname : 시스템의 호스트명을 출력
  • hostid : 호스트 머신을 32비트 16진수 숫자의 식별자로 출력
  • readelf : elf 바이너리 파일의 정보 출력
  • size : 바이너리 실행 파일 또는 아카이브 파일의 세그먼트 크기를 출력

시스템 로그

  • logger : 시스템 로그를 기록하는 명령이며, 로그는 /var/log/messages 시스템 로그 기록 파일에 저장
  • logrotate : 시스템 로그 파일을 관리하기 위해 사용하며, 로테이트, 압축, 삭제, 이메일 발송 등의 기능을 사용
    - 일반적으로 cron을 사용해 주기적으로 logratete를 실행해 로그 파일을 관리
    - 환경 설정 파일로는 /etc/logrotate.conf 파일을 사용

잡 컨트롤

  • ps : 현재 실행중인 프로세스 통계(PID, 프로세스 실행 시간, 실행 유저 등)를 출력.
          트리 형식으로 출력하기 위해선 -forest 옵션을 사용
    • ps -ef 를 자주 사용
  • pgrep, pkil : 이름 또는 다른 속성을 사용해 시그널 프로세스를 검색
  • pstree : 프로세스 목록을 트리 형식으로 출력, p 옵션을 사용하면 프로세스 아이디도 출력
  • top : 전반적인 시스템 상황을 출력하며 기본값으로 3초마다 refresh
  • nice : 스케줄링 우선권을 조정해 프로그램을 실행하는 명령
    • 아무런 옵션도 주어지지 않을 경우 nice는 상속받은 현재의 스케줄링 우선권을 출력
    • 조정수치가 생략되면 명령의 nice 값은 10이 됨. 음의 수치까지 부여할 수 있으며 -20 ~ 19까지 조정할 수 있음
    • renice 명령으로 실행 중인 프로세스의 우선권을 변경할 수 있으며, skill, snice 명령으로 시그널을 보내거나 프로세스 상황을 리포팅 할 수 있음
    • Ss, S<, Ss+, SN 등으로 표기
  • nohup : 적은 명령에 대해 Hangup(프로세스 중단) 신호를 무시한 채 수행하도록 하는 명령
    • nohup.out 파일에 출력 내용을 추가
    • 자동으로 백그라운드로 보내지 않기 때문에 명령행 뒤에 & 문자를 추가해 실행하거나 명시적으로 백그라운드로 실행
    • 실행 파일을 백그라운드로 실행(&)하고 현재 쉘을 종료해도 실행 파일의 수행이 중단되지 않음
    • bash 쉘 옵션 중 huponexit은 현재 쉘을 빠져나갈 때 SIGHUP 시그널(정지 신호)을 모든 job에게 보내는 옵션인데, 이 옵션의 기본값은 off라 현재 쉘을 종료하더라도 백그라운드로 실행된 프로세스는 종료되지 않고 계속 실행
    • nohup python execute.py > output & 등으로 사용
  • pidof : 실행중인 프로세스 아이디를 검색, 출력
  • fuser : 파일 또는 소켓을 사용하고 있는 프로세스를 출력
  • cron : 수퍼유저용/일반유저용 스케줄러
    • /etc/crontab 파일에 설정이 존재하며, 설정별 실행할 파일들은 /etc/cron.hourly 디렉터리에 위치

프로세스 관리와 부팅

  • init : 모든 프로세스의 부모 프로세스(PID 1번)이며 부팅시 /etc/inittab 파일에 런레벨을 결정
  • service : 시스템 서비스를 시작하고 중지하기 위해 사용
    • 리눅스 시작스크립트 원본 경로는 /etc/rc.d/init.d 또는 심볼릭 링크된 /etc/init.d이며, 부팅 시 7개의 런레벨별 시작 스크립트 위치는 /etc/rc.d 디렉터리 아래에 런레벨별 디렉터리 명으로 존재
    • service cron restart 등으로 사용

네트워크

  • ifconfig : 네트워크 인터페이스 환경을 출력하고 튜닝하는 유틸리티. eth0은 첫번째 이더넷 카드를 의미하고, lo는 로컬호스트 루프백을 의미
    • ifconfig eht0 down : 네트워크 사용 중지. 시작은 up
  • iwconfig : 무선랜 네트워크 인터페이스 환경을 출력해주는 명령이며, ifconfig와 유사하지만 무선랜 장치만 보여줌
  • ip : 라우팅, 디바이스, 라우팅과 터널 정책을 출력하고 조작할 때 사용
  • route : 커널 라우팅 테이블 정보를 출력하거나 변경. ip route list와 동일한 내용 출력
  • chkconfig : 시스템 서비스를 위한 런레벨 정보를 업데이트하고 검색
  • tcpdump : 네트워크 패킷을 실시간으로 출력해볼 수 있음
    tcpdump tcp port 21 을 실행하면 21번 포트로 통신하는 패킷들을 출력

파일시스템

  • mount : 파일 시스템을 마운트하기 위해 사용. 파일 시스템을 가지는 디바이스는 하드 디스크의 파티션, 플로피 디스크, CDROM, USB 같은 외장 디바이스, 램디스크 등이 해당
    • etc/fstab 파일을 보면 여러 설정 내용을 볼 수 있는데, 이 설정 파일을 부팅시 자동으로 읽어들여 마운트하고 부팅 후 파일 시스템과 디바이스를 지정하지 않고 수동으로 마운트하기 위해 사용
    • /etc/mtab 파일에는 현재 마운트되어 있는 파일 시스템 또는 파티션 정보가 저장되어 있음
    • mount -o loop -t iso9660 -r cd_image.iso /media/cdimg
  • umount : 마운트된 파일 시스템을 즉시 마운트 해제할 때 사용. 언마운트와 동시에 시디롬 드라이브에서 시디롬을 꺼내려면 eject 명령을 사용
  • sync : 업데이트된 모든 버퍼의 데이터를 강제로 하드 드라이버에 즉시 저장. 버퍼와 하드 드라이버 동기화 수행
  • losetup : 루프 장치를 정규 파일 또는 블럭 장치와 연결, 루프 장치와 분리, 루프 장치의 상태 파악을 하는 데 사용됨. 루프 장치 인자만 줄 경우에 해당하는 루프 장치의 상태를 보여줌
  • mkswap, dd : mkswap 명령은 스왑 파일 또는 스왑 파티션을 생성할 때 사용
    • dd if=/dev/zero of=swapfile bs=1024 count=8192
    • mkswap swapfile 8192
    • sync
    • swapon swapfile
  • swapon : 파일이나 파티션을 스왑으로 사용하도록 하는 명령
  • swapoff : 파일이나 파티션을 스왑으로 사용하지 않도록 하는 명령
  • mkfs.ext3 : 파티션이나 파일을 ext3 파일 시스템으로 만들 때 사용, mkfs 명령과 함께 t 옵션값으로 ext3를 지정해 파일 시스템을 생성
  • hdparam : 하드 디스크의 설정을 보여주거나 설정을 조정
  • fdisk [디바이스명] : 저장용 디바이스의 파티션 테이븡를 생성하거나 변경
    • /dev/hda : 첫 IDE 하드 드라이브
    • /dev/sda : 첫 SATA, SCSI 하드 드라이브
  • fsck.ext3 : ext3 파일 시스템을 체크, 수리, 디버그하는 명령. 단 mount된 파티션에 대해 파일 시스템 체크를 하면 해당 파티션에 문제가 발생할 수 있으므로 마운트를 해제한 다음, 파일 시스템 체크를 해야함!
  • badblocks : 저장 디바이스의 물리적인 배드 블록을 체크
  • lsusb : 장착되어 있는 USB 디바이스 목록 출력
  • lspci : 장착되어 있는 pci 디바이스 목록 출력
  • mkbootdisk : 시스템 구동을 위한 독립적인 부트 플로피 디스크를 만듬. iso 옵션을 사용해 부팅이 가능한 iso 파일로 만들 수 있음
  • mkisofs : iso9660 파일 시스템, 즉 CD 이미지를 만들 수 있음
  • chroot : root 디렉터리를 변경. 지정한 루트 디렉터리를 사용해 명령과 인터렉티브 쉘을 실행. 보안적 측면에서 유용함
  • lockfile : procmail 패키지에 포함되어 있음. lcokfile 명령으로 세마포어 잠금 파일, 디바이스, 리소스 등을 생성해 파일 접근을 관리할 수 있음. 잠금 파일이 존재하면 다른 프로세스의 접근이 제한됨
    • /var/lock 디렉터리에 잠금 파일을 생성하고 체크하며 rm -f [잠금파일명] 명령으로 삭제할 수 있음

백업

  • dump : 정교한 파일 시스템(ext2/ext3) 백업 유틸리티이며, -f 옵션을 사용해 네트워크 파일 시스템도 백업 가능
    dump 명령은 저수준 디스크 파티션을 읽고 바이너리 포맷의 백업 파일을 만듬. 이 파일들은 restore를 사용해 복원
  • fdformat : 플로피 디스크를 로우레벨 저수준으로 포맷

시스템 리소스

  • ulimit : 시스템 리소스 사용의 상한 제한값을 설정
    - f 옵션을 사용해 파일 크기 제한, c 옵션으로 코어덤프 크기를 제한
    - a옵션을 사용해 현재 시스템의 상한값을 출력해볼 수 있음

모듈

  • lsmod : 설치된 커널 모듈 목록을 출력. cat /proc/modules도 동일
728x90

댓글()

[Linux] 쉘과 명령어 기초 #2

IT_Engineer/Unix & Linux (Bash)|2020. 11. 16. 09:00
728x90

! 쉘(Shell) 이란?

  • 쉘(Shell)
    - 운영체제에서 제공하는 명령을 실행하는 프로그램,
    - 운영체제의 관리하에 있는 파일, 프린팅, 하드웨어 장치, 애플리케이션과의 인터페이스 제공
    - 키보드로부터 명령을 입력받아 OS가 그 명령을 수행하도록 하는 프로그램
  • 쉘 스크립트 : 인터프리터로서 리눅스 시스템 명령어들의 집합을 묶어서 프로그램화한 것
  • du -h * | sort -nr > $HOME/script.txt

! 쉘(Shell) 명령어

  • du : 용량을 알아보기 위한 명령어
  • | (shift + \) : 결과값을 다음 명령으로 연결해 다음 명령의 아규먼트로 사용
  • sort : 알파벳 또는 숫자 기준으로 정렬. -n : 숫자값을 기준으로 정렬, -r : 반대의 순서(내림차순)
  • > : 리다이렉션은 앞의 명령 결과를 다음에 나오는 파일명으로 저장
  • 리눅스 bash 쉘에서 $ 표시는 일반유저의 쉘을 의미하고 # 표시는 root 유저의 쉘을 의미
  • 쉘 스크립트를 작성할 때 스크립트의 최상단에 본 쉘인 경우 #!/bin/sh,
    배시 쉘인 경우 #!/bin/bash,
    파이썬일 경우 #!/bin/python 와 같이 실행할 언어를 지정
  • which 명령어 : 실행 파일의 위치
  • whereis는 명령의 실행 파일, 소스, 맨페이지의 위치를 검색하는 명령
  • 리눅스 파일 시스템
  • 쉘 스크립트 준비운동
  • 쉘 스크립트 구성요소
  • 리눅스 기본 명령어들의 형식
  • 다중 명령어 사용
  • 명령 히스토리

! 리눅스 디렉터리 여행

  • pwd : 현재 디렉터리 위치 보기
  • ls : 파일과 디렉터리 목록 보기
    • ls -l로 출력된 컬럼의 의미는 아래와 같음
    • [파일/디렉터리 퍼미션][하드 링크파일 수][소유자][그룹][파일 크기][수정 시간][파일명]
  • cd : 현재 쉘의 디렉터리 변경, 이동
  • less, more, cat : 텍스트 파일 보기
    • less는 q를 누르면 원래 셀 위치의 다음 라인으로 돌아오고, more는 q를 누르면 원래 쉘 위치로 돌아오지 않음, cat은 쉘 프롬포트를 리턴
  • file : 파일 타입 보기
  • tree : 디렉터리의 트리 구조 print
    • d : 디렉터리만 / a : 모든 것 / f : 파일만 / L : 디렉터리 깊이 지정
    • tree -L1 / : 최상위 root(/) 부터 깊이가 1인 디렉터리와 파일 출력

! 파일/디렉터리 퍼미션

  • 파일에 대한 접근 권한을 설정하는 것으로 `` 문자는 일반 파일, d 문자는 디렉터리, c 문자는 캐릭터 디바이스, b는 블록 디바이스, l 은 심볼릭 링크 파일, s는 소켓 파일
  • 그 다음 3개의 문자 단위는 파일 소유자의 read, write, execution, 그룹의 read, write, execution, 모든 사용자의 read,write,execution을 표시

! 하드 링크 파일 수

  • 하드 링크 : 리눅스상에서 동일한 파일시스템 내의 파티션에서 동일한 inode 정보를 가지는 파일
                    하드 링크가 복사는 아님!!!
  • ln 원본파일 하드링크파일명 명령을 사용해 하나의 링크 파일을 생성하면 원본 파일과 하드 링크 파일은 동일한 inode 정보를 가지게 되고, 어느 하나의 파일이 변경되면 두 파일 모두 동일한 내용과 크기로 변경
  • 심볼릭 링크 : ln -s 원본파일 심볼릭링크파일명을 사용하며 원본 파일의 이름만 링크. 원본 파일을 삭제하면
                      심볼릭 링크 파일은 가리킬 파일명이 삭제되었기 때문에 의미없는 파일이 됨

! 리눅스 기본 디렉터리 구성

  • / : 루트 디렉터리
  • /boot : 리눅스 커널과 부트로더가 위치하는 디렉터리
  • /etc : 시스템 환경 설정 파일이 위치한 디렉터리
    • /etc/passwd : 유저의 각종 정보 저장
    • /etc/shadow : 유저 패스워드를 암호화하여 저장
    • /etc/fstab : 시스템이 부팅될 때 참고하는 마운트할 디바이스 테이블을 저장
    • /etc/hosts : 네트워크 호스트 이름과 IP 주소
    • /etc/rc.d/init.d 또는 /etc/init.d : 부팅시 시작할 여러가지 시스템 서비스 스크립트
    • /etc/resolv.conf : 시스템에서 외부로 접속할 때 참고할 네임서버
    • /etc/sysconfig/i18n : 부팅시 언어셋 변수와 폰트 변수를 설정
    • /etc/sysconfig/iptables : 리눅스 방화벽 iptables 환경 설정
    • /etc/sysconfig/network : 부팅시 네트워크를 지우너할 것인지와 호스트명을 설정
    • /etc/sysconfig/network-scripts/ifcfg-eth0 : 부팅시 사용할 첫 이더넷 카드의 정보 저장
  • /bin, /usr/bin : 실행 프로그램들. /bin엔 기본적인 실행 프로그램, /usr/bin엔 사용자들이 사용할 실행 프로그램
  • /sbin, /usr/sbin : 시스템 관리자를 위한 프로그램. 대부분 root를 위한 프로그램
  • /usr : 사용자 애플리케이션을 지원하기 위한 다양한 파일이 위치
  • /usr/local : 소프트웨어 설치시 또는 로컬머신에서 사용할 파일들이 위치. 소스파일을 기본 옵션으로 컴파일하면 /usr/local 디렉터리에 기본 설치가 되며 이 때 실행 파일은 /usr/local/bin에 위치
  • /var : 운영 중인 시스템의 변화를 체크할 수 있는 로그 파일들이 위치
    • /var/log : 로그 파일이 위치하는 디렉터리
    • /var/spool : 메일 메세지와 프린트 작업과 같이 프로세스를 위한 큐를 잡아놓기 위해 사용되는 디렉터리
  • /lib : 공유 라이브러리 파일
  • /home : 유저별 홈디렉터리가 존재하는 개인 홈디렉터리. useradd(adduser) 명령을 사용해 유저를 생성하면 "/home/유저아이디 형식으로 유저 홈디렉터리가 생성. 이때 기본적으로 생성되는 파일들은 /etc/skel 디렉터리 아래의 파일들임
  • /tmp : 임시 파일들이 저장되는 디렉터리
  • /dev : 리눅스 시스템에서 사용하는 디바이스 장치 파일들
  • /proc : 이 디렉터리는 파일을 포함하지 않음. 현재 시스템 CPU 정보를 출력하기 위해 /proc/cpuinfo 파일을 출력
    • 현재 프로세스의 정보가 저장되어 있음
    • ps -ef를 입력하고 나오는 pid 이름으로 되어있는 폴더를 들어가보면 다양한 정보들이 나와있음
    • 해당 폴더에서 cat status를 입력하면 정보들이 나오는데 주로 봐야하는 것은 VmRSS, VmSwap 등이 있음. 스왑이 되면 어떻게 되는지 문서를 볼 것
  • /media, /mnt : 마운트 포인트를 위해 사용되는 디렉터리
    • 마운트 : 디바이스 장치를 사용하기 위해 프로세스와 연결하는 

 

728x90

댓글()

[Linux] 쉘과 명령어 기초 #1

IT_Engineer/Unix & Linux (Bash)|2020. 11. 13. 09:00
728x90

※ 사전 지식
리눅스
는 CLI (Command Line Interface - 명령어 기반 인터페이스),
그리고 그 명령어는 현재 머물고 있는 디렉토리를 대상으로 내려진다.

1. 디렉토리와 파일

현재 머물고 있는 디렉토리를 확인하기 위한 명령어는 pwd

$ pwd /root

 

'mkdir + 폴더이름' 명령어를 활용하여 폴더 생성

$ mkdir hello_gi

 

해당 디렉토리에 있는 내용 확인 명령어 : ls

  • 명령어 뒤에 '-' 기호를 붙여서 파라미터(옵션)를 줄 수 있음
$ ls
$ ls -l          #디렉토리 내용 자세히 확인
$ ls -al        #전체 내용 확인

 

디렉토리 이동 : cd (change directory) + 이동할 폴더명

$ cd hello_gi/  # 후 pwd 를 확인하면 디렉토리가 이동된 것을 확인할 수 있음
$ pwd         # Print Working Directory 의 약어, 현재 어떤 디렉토리경로에 있는가를 절대경로로 표시하는 명령어
$ cd ..         # 상위 폴더로 이동

 

디렉토리 삭제 : rm (remove directory)

$ rm 파일명        # 파일삭제 가능
$ rm -r hello_gi/    # 폴더를 삭제할 경우는 rm과 폴더명 사이에 -r 옵션 필요
$ ls                    # ls를 통해 디렉토리가 삭제된 것을 확인할 수 있음

 

커맨드창 정리

$ clear

 

매뉴얼은 '—help' 와 'man 명령어'를 통해서 확인 가능

$ rm --help   # 명령어 --help 를 사용하면 세부 옵션 및 매뉴얼 보기 가능
$ man rm     # man 명령어는 전용 매뉴얼 페이지로 이동 # 스크롤은 방향키로 조종할 수 있음

/explain       # 매뉴얼 페이지에서 /찾고싶은 단어를 입력하면, 해당 단어를 찾아 스크롤 이동 및 표시
/n              # n(next) 키를 누르면 다음 단어로 이동, p(previous) 키를 누르면 이전 단어로 이동

 

sudo

  • super user do 의 약자
  • 권한이 필요해서 실행이 안 되는 경우, super user의 권한으로 실행하게 함
$ apt-get install git    # git을 설치하는 명령어 입력해도 설치는 X, are you root?라고 물음
$ sudo apt-get install git       # 앞에 sudo를 붙여서 명령어를 입력하면 설치 가능

 

에디터

  • 정보를 저장한 파일을 만들기 위해선 에디터 사용 필요
  • vi가 많이 사용됨, 초심자에게는 nano 에디터를 추천
  • 터미널에 nano를 입력하면 nano 에디터 실행 > html 태그를 입력 후 파일 저장
  • 터미널에 'vi 파일명'을 입력하면 vi 에디터 실행
$ nano
$ vi g1         # g1 파일이 없는 경우, 하단에 new file이라고 뜨면서 에디터 실행
                # g1파일이 있는 경우, 내용을 가져오고 에디터 실행

 


패키지 매니저

기본적으로 내장되어 있지 않은 프로그램을 설치해야 할 때 사용

리눅스의 대표적인 패키지 매니저 : apt, yum

  • 레드햇(RedHat) 계열 or CentOS : yum (yellow dog updater. Modified)
  • 데비안(Debian) 계열 or 우분투(Ubuntu) : apt (Advanced Packing Tool)
  • apt 앞에는 sudo를 항상 붙여주어야 함
  • 설치에 앞서 항상 설치할 수 있는 목록을 최신화(update)
  • upgrade 와 update의 차이 (apt와 yum이 다름)
  • apt apt update : 단순히 패키지 업데이트가 존재하는지 저장소 경로를 통해 확인(저장소만 업뎃) apt upgrade : 실제로 패키지를 최신 패키지로 변경하는 작업
  • yum : update와 upgrade 명령어 모두 패키지의 실제 업데이트 작업 수행
  • yum upgrade = yum -obsoletes update
    (패키지 업데이트되면서 더 이상 사용되지 않는 관련 파일이나 패키지를 삭제)
# 패키지 매니저 별 최신화 명령어

$ sudo apt-get update
$ yum update                 # yum -y update : 현재 설치된 모든 패키지 업데이트, 모든 대답 : yes
$ sudo apt-get update      # 저장소 경로를 통한 업데이트 (저장소 업데이트만 진행)
$ sudo apt-get upgrade    # 실제로 패키지를 최신 패키지로 변경
$ yum update                 # 패키지 업데이트 여부 확인 후 새로운 파일로 갱신
$ yum upgrade               # yum update 하면서 더이상 사용하지 않는 파일/패키지 삭제

 

728x90

댓글()

[LINUX] About Linux

IT_Engineer/Unix & Linux (Bash)|2020. 11. 12. 11:24
728x90

※ 사전 지식, 컴퓨터 운영체제(OS) 란? 

컴퓨터의 하드웨어나 소프트웨어를 제어하며, 사용자가 컴퓨터를 쓸 수 있게 만들어주는 프로그램


 

1. 리눅스 환경

  • 리눅스는 핀란드 헬싱키 대학의 학생이었던 리누스 토발즈의 취미 생활로 탄생
  • 공개 OS 소프트웨어라서 그룹이나 회사 등에서 커널 기반(CLI) 의 운영체제
    (Kernel : 하드웨어 자원을 효율적으로 관리하기 위한 요소)를 받아 OS를 직접 제작하여 사용

2. 그런데 왜 배워야 하는가?

 

  • 서버, 클라우드, 웹서버, VM, 임베디드, 프로그래밍 등등 IT 프로가 되고자 한다면, 리눅스 공부가 필수
  • 환경 성능이 높으며 첨단 반도체사가 리눅스 커널에 직접 참여하여 최신 디바이스 드라이버 제공
  • 다양한 국가와 사람들의 삶의 방식이 있듯이, 컴퓨터에도 다양한 OS 운영체제가 존재하고 그들의 생태계가 존재함
    - 유럽 각국에서는 공공기관에서 MS 윈도우를 퇴출 시키고 있는 국가가 많음
  • 불법 소프트웨어가 설치된 컴퓨터를 리눅스 환경으로 교체하여 재활용 가능
  • 기관, 기업 등에서 비용 절감이 가능
    - 자체적으로 문제 해결이 가능하고 주로 제한된 업무만을 수행하는 많은 기관 및 환경에서 사용 가능
    - 값 비싼 Windows 보다 Linux 를 사용하므로써 큰 비용 절감 효과

3. 리눅스의 종류

  1. 데비안(Debian)

  • 데비안 프로젝트에서 만들어 배포하는 오픈소스 운영체제
  • 37500여 꾸러미를 갖춘 저장소를 관리
  • 패키지 설치 및 업그레이드가 단순하여 간편
  • 안정성과 보안에 중점을 두고 있으며, 다른 리눅스 배포판의 기반으로 사용
  • 데비안을 기반으로 하여 만들어진 대표적인 예 : 우분투
    - 우분투는 리눅스를 처음사용하는 사람들에게 추천되는 종류 중 하나
    - 윈도우 유저들도 쉽게 접할 수 있도록 만들어진 OS
  •  

  2. 레드햇(red hat)

 

  • 리눅스 배포판 제작회사로 레드햇을 제작
  • 레드햇을 기업용으로 유료로 변경
  • 일반 사용자를 위한 오픈소스 프로젝트인 페도라 제작
  • 클라우드 인프라구축이 쉽고 간편 Windows보다 고성능

 

 

 

  3. 안드로이드

 

  • 가장 널리쓰이는 리눅스 (모바일)
  • 구글에서 리눅스를 기반으로 개발한 운영체제
  • C, C++, Python, java 등의 프로그래밍 언어를 지원

 

 

  4. 그 외 기타

 

  • 슬랙웨어, cent OS, 젠투, 민트 등 아주 많은 종류의 배포판을 가지고 있습니다.

4. 리눅스의 특징 및 기능

  • Free
    • OS 구입에 따른 비용을 지출하지 않아도 됨
  • Unix Like
    • 유닉스처럼 리눅스는 C 언어로 작성됨
    • 유닉스처럼 리눅스는 멀티유저/멀티태스킹을 지원하는 네트워크 OS
    • 유닉스처럼 리눅스는 프로그래밍 개발환경에 매우 적합
    • 유닉스처럼 다양한 하드웨어 플랫폼을 지원
  • Open Source
  • 뛰어난 신뢰성, 동급 최고의 성능
  • 다양한 업무 환경을 만족시키는 다양한 배포판의 존재
  • 다중 사용자, 다중 처리 시스템
    - 각각의 응용 프로그램은 다른 응용 프로그램에 보호적으로 동작
    - 하나의 응용 프로그램 오작동이 전체 시스템을 다운시키는 것을 완벽하게 보호
  • 풍부한 응용프로그램의 제공
  • 누구나 자유롭게 사용할 수 있는 운영체제(오픈소스 기반)
  • 강력하면서 안정적인 네트워크 지원
    - 최다 프로토콜의 지원과 가장 많은 네트워킹 서비스와 기능을 제공
  • GUI 방식의 X 윈도우 지원
  • 뛰어난 안정성과 보안성
    - 리눅스에서의 버그와 보안 결점은 단 몇 시간 안에 보고

5. Linux vs Windows 비교하자면,

1. 개발환경

  • Linux 는 ASP 스크립트 언어 지원, MS SQL 데이터 베이스 사용
    Windows 는 PHP 언어 지원, MySQL 데이터 베이스 사용
  • 리눅스 서버는 HTML 중심의 홈페이지를 운영하거나 CGI, PHP를 주로 사용할 경우 권장
    윈도우즈 기반의 서버는 ASP와 My SQL을 사용하여 프로그램을 개발하는 방식의 홈페이지를 운영할 경우 권장

2. 응용 프로그램의 환경 파일

  • Linux는 운영체제 및 응용 프로그램의 환경을 설정하는 것으로 대부분 텍스트 파일을 이용
    Windows에서는 많은 환경 설정을 레지스트리라는 특별한 데이터베이스를 이용

3. 다중 사용자 환경을 고려한 운영체제

  • Linux는 여러 사용자가 동시에 서버에 접속하여 사용하도록 고안된 OS
    Windows는 개발 당시부터 한 명의 사용자가 한 대의 컴퓨터를 사용하는 단일 사용자 환경 OS

4. 리눅스는 커널 기반의 운영체제

  • Linux는 커널 기반의 운영체제 (리눅스의 커널은 사용자 환경과 커널을 분리)
    Windows도 커널이 존재하지만 사용자 인터페이스와 커널이 결합 (GUI)

cf. 참고 자료

https://www.redhat.com/ko/topics/linux/what-is-linux

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4

https://namu.wiki/w/%EB%A6%AC%EB%88%85%EC%8A%A4

https://t1.daumcdn.net/cfile/tistory/24748E35550B9A820C

https://t1.daumcdn.net/cfile/tistory/260B603B550B989839

 

728x90

댓글()