Shell Programming 개요

앙금빵·2021년 6월 13일
0

리눅스

목록 보기
4/13
post-thumbnail

리눅스 시스템 접근 방법

  • 로컬 PC에서 터미털이나 GUI 등을 활용하여 작업 진행
  • 원격지에서 호스트 접속을 위한 프로토콜을 사용한 연결
  • 터미널을 사용하기 위해 SSH나 TELNET 등을 사용하여 접속
    SSH와 TELNET을 사용하면 명령 Shell인 sh나 bash 등으로 원격지에 명령어를 보낼 수 있다.

원격 터미널 접속의 필요성

  • 대부분 리눅스 서버는 회사에서 사내 서버로 한 장소에 묶어두거나, 호스팅 업체 및 클라우드 호스팅 등의 다양한 구성으로 이루어져 있음
    (i.e 관리자와 멀리 떨어져 있는 곳에 서버가 위치한 경우가 많다.)
  • 서버 작업을 처리해야 할 일이 있을 때 마다 매번 해당 서버가 위치한 곳으로 이동할 수는 없고, 이동해서 관리하자니 관리해야할 서버가 많아지면 각각의 서버로 이동하여 일일히 모니터를 연결하여 작업을 할 수 없는 노릇
  • 다양한 원격접속 프로그램을 사용하여 원격지에 있는 서버에 굳이 찾아가지 않고, 해당 서버 주소 (IP 등)만 알고 있다면 다른 PC를 통해 바로 접속할 수 있다.

  • 리눅스에는 일반적으로 RDP 프로토콜 지원 X 그래픽 데스크톱 환경에서 띄우기 위해 VNC나 XRDP, XDMCP와 같은 프로토콜을 사용해야 하며 연결이 가능해지도록 일련의 설정 필요
  • 특수한 경우가 아니라면 일반적인 터미널 연결을 위해 굳이 그래픽 데스크톱 환경을 띄워야 할 필요는 없을 것
  • 원격 접속을 이용하여 터미널 환경을 사용할 수 있도록 고안된 프로토콜이 Rlogin, Telnet, SSH 가 있으며 최근들어 가장 많이 사용되는 프로토콜은 SSH 이다.

SSH 란?

  • SSH(Secure Shell) = 보안을 중요시한 프로토콜
  • 흔히 알고 있는 리눅스 명령어는 SSH 명령어라고 부르기 보다, sh, bash 등의 Shell 명령어라 보는 것이 맞다. 대부분의 sh 및 bash라는 명령어 체계를 사용

Why not Telnet?

  • Telnet과 SSH 환경은 크게 다르지 않다.
  • Telnet은 보안적으로 매우 치명적인 결함 有

Telnet Protocol
암호화된 통신 불가능 → 패스워드(or 노출되어서는 안되는 데이터)로 추측되는 문자열이 입력 또는 출력될 때마다 탈취자가 파악할 수 있는 치명적인 문제 발생

SSH
암호화된 통신 가능

  • 특별한 경우가 아니면 Telnet Protocol 사용을 지양
    (
    최신 리눅스에서는 일반적으로 SSH 데몬이 구동되고 Telnet은 패키지 조차 설치되지 않았을 것)

Linux Shell이란?

  • Linux Shell 은 명령어와 프로그램을 실행할 때 사용하는 인터페이스
  • Shell은 Kernel과 User간의 다리 역할
  • User로부터 명령을 받아 그것을 해석하고 프로그램을 실행


Shell 의 기능

  • User와 Kernel 사이에서 명령을 해석하여 전달하는 명령어 해석 기능 有
  • 자체 내 프로그래밍 기능 내장, 프로그램 작성 가능 → 여러 명령을 사용해 반복적으로 수행하는 작업을 하나의 프로그램으로 제작 할 수 있다. Shell Program = Shell Script 로 부른다.
  • 사용자 환경 설정의 기능: 초기화 파일 기능을 이용하여 사용자의 환경을 설정할 수 있다.
    로그인 할 때 이 초기화 파일이 실행되서 사용자의 초기 환경이 설정된다.
  • Shell 을 공부 할 때 중요한 것이 환경변수의 이해이다.

Shell의 종류와 특징

기본 Shell 구성하기

  • 사용 가능한 Shell 리스트 확인하기 (내가 무슨 Shell을 쓸수 있는가?)
    $ cat /etc/shells
john@john-virtual-machine:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
  • 현재 작업 Shell 확인 (내가 무슨 Shell을 쓰고 있는가?)
    $ echo $SHELL

john@john-virtual-machine:~$ echo $SHELL
/bin/bash
  • 로그인 Shell 변경
    $ cat /etc/passwd
    $ chsh (기본 Shell 변경 → etc/passwd 에 변경내용 기록)

    john@john-virtual-machine:~$ sudo chsh john 
    #john 계정의 로그인 shell 변경 (change shell)

    john의 로그인 쉘을 변경하고 있습니다
    새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
            로그인 쉘 [/bin/bash]: /bin/sh # /bin/bash → /bin/sh 

    john@john-virtual-machine:~$ sudo grep john /etc/passwd 
    # grep 명령어를 통한 shell 확인
    # 내가 john 이라는 유저를 /etc/passwd 파일에서 확인 요청

    john:x:1000:1000:DKOS,,,:/home/john:/bin/sh
    # /bin/sh shell 변경 확인
  

grep 명령어 옵션

        grep [OPTION...] PATTERN [FILE...]
				-E        : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
        -F        : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
        -G        : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
        -P        : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
        -e        : 매칭을 위한 PATTERN 전달.
        -f        : 파일에 기록된 내용을 PATTERN으로 사용.
        -i        : 대/소문자 무시.
        -v        : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
        -w        : 단어(word) 단위로 매칭.
        -x        : 라인(line) 단위로 매칭.
        -z        : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
        -m        : 최대 검색 결과 갯수 제한.
        -b        : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
        -n        : 검색 결과 출력 라인 앞에 라인 번호 출력.
        -H        : 검색 결과 출력 라인 앞에 파일 이름 표시.
        -h        : 검색 결과 출력 시, 파일 이름 무시.
        -o        : 매치되는 문자열만 표시.
        -q        : 검색 결과 출력하지 않음.
        -a        : 바이너리 파일을 텍스트 파일처럼 처리.
        -I        : 바이너리 파일은 검사하지 않음.
        -d        : 디렉토리 처리 방식 지정. (read, recurse, skip)
        -D        : 장치 파일 처리 방식 지정. (read, skip)
        -r        : 하위 디렉토리 탐색.
        -R        : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
        -L        : PATTERN이 존재하지 않는 파일 이름만 표시.
        -l        : 패턴이 존재하는 파일 이름만 표시.
        -c        : 파일 당 패턴이 일치하는 라인의 갯수 출력.

참조

https://www.youtube.com/watch?v=38wy3gsiR6Q&list=PLApuRlvrZKog2XlvGJQh9KY8ePCvUG7Je&ab_channel=TTABAE-LEARN

https://jootc.com/p/201808031462
https://jootc.com/p/201808031460
https://jhnyang.tistory.com/57

profile
Cloud 관련 개인 공부 지식들을 기록하는 공간입니다.

0개의 댓글