Information Security Study

240110 리눅스 셸(명령어 조회, 셸과 커널의 역할, 프롬포트, 터미널과 셸의 관계, 프롬포트 커맨드 단축키, 명령 이력 확인) 본문

네트워크 캠퍼스/Linux

240110 리눅스 셸(명령어 조회, 셸과 커널의 역할, 프롬포트, 터미널과 셸의 관계, 프롬포트 커맨드 단축키, 명령 이력 확인)

gayeon_ 2024. 1. 12. 09:59

리눅스 셸

 

$ uname

: 시스템 운영체제 종류(이름)를 출력한다.

 

$ uname -a

: 시스템 타입, 호스트 이름, 커널 버전, 빌드 날짜 및 시간, 아키텍처 정보를 출력한다.

 

$ date +'%d/%m/%y'

: 포맷에 맞춰 day, month, year를 출력한다.

 

$ date +'%A, %B %d, %Y'

: 포맷에 맞춰 요일, 달 일, 연도를 출력한다.

 

 

 

 

명령어 조회하기

대부분의 리눅스 명령어는 실행파일 형태로 작성되어 있는 경우가 많다.

$ date은 /bin/date 라는 명령어를 축약한 것이다.

 

 

 

$ /bin/date

: $ date와 같은 기능

 

 

 

$ cat /bin/date 명령으로 파일 내부를 읽을 수는 있지만 텍스트 파일이 아니기 때문에 알아볼 수는 없다.

이 파일 안에는 사전에 작성된 명령어가 기록되어있다.

 

 

 

$ type 명령어

: 명령어의 경로 조회

type 뒤에 기입된 명령어의 경로를 조회할 수 있다.

 

 

 

저장되어있지 않은 명령어를 작성하게 되면 경고를 띄운다.

 

 

 

 

셸과 커널의 역할

셸에 사용자가 입력한 명령은 다음 세 단계를 거친다.

  1. 매칭되는 명령어가 있는지 조회한다.
  2. 존재하는 명령어라면 커널에 전달한다.
  3. 커널이 실행하고 그 결과를 화면에 표현한다.

-> 은 사용자의 명령을 커널에게 전달한다.

 

 

 

겹치는 명령어의 실행 우선순위

만약 /bin/date 와 /bin/user/date 라는 두 개의 date가 존재한다면

경로가 짧은 /bin/date가 /bin/user/date보다 우선순위가 높다.

 

/bin/date가 더 짧기때문에 일반적인 상황에서 date라는 명령어를 입력하면

/bin/user/date는 무시되고 /bin/date가 실행된다.

 

 

 

셸과 커널이 분리된 이유

대부분의 경우 레이어나 계층을 분리하는 이유는

특정한 부분에서 오류가 발생했을때 일체형인 경우 유지보수가 힘들지만

분리형인 경우 문제가 생긴 부분만 교체하면 된다는 장점을 가지고 있기 때문이다.

 

분리형인 경우 다른 요소과 조합해 사용하기도 수월하다는 점이 있다.

 

 

 

프롬포트 이해하기

 

 

@을 기점으로 왼쪽은 사용자 이름, 오른쪽은 호스트 이름이다.

ubuntu는 사용자 이름이다.

 

 

 

$ whoami(우분투) 

$ who am i(centos 계열)

: 계정명을 출력한다.

 

 

 

$ hostname

: 현재 호스트의 이름을 출력한다.

호스트는 환경을 담당하는 운영체제 자체의 이름이다.

프롬포트에서 $는 일반 사용자 계정을 의미한다.

 

일반 사용자가 아닌 root계정은 #로 표시한다.

 

 

 

$ su -

: 루트 계정 접속

비밀번호 입력 시 root로 로그인이 된다.

 

 

logout 입력 시 일반 계정으로 돌아온다.

 

셸은 기본적으로는 대화형 방식을 수행한다.

사용자가 직접 명령어를 입력하여 제어하는 것을 대화형 방식이라 한다.

 

대화형 방식

- 사용자가 직접 명령어 입력

 

실행형 방식

- 기존에 작성된 스크립트를 실행하는 방식

 

 

 

셸의 종류

보통 bash와 zsh 두 종류의 셸을 사용한다.

 

보편적으로는 bash를 가장 많이 사용하고

sh 셸의 경우는 주력으로 사용되지 않지만 간접적으로는 많이 사용되고 있다.

 

 

$ sh

: sh셸 접속

일반적으로 사용되는 bash 셸에서 sh를 입력하면 sh셸로 접속할 수 있다.

 

bash를 다시 입력하면 원래대로 돌아오는듯 하지만

 

구조는 3중첩으로 bash(1) → sh(2) → bash(3)가 실행된 상태이다.

 

 

 

때문에 최상단에 bash가 열려있으나 로그인된 상태는 아니므로 logout 명령을 적어도

비로그인 상태 셸이니 exit를 입력하라고 뜬다.

 

 

 

 

exit를 연달아 입력하면 bash(3)종료 → sh(2)종료 → bash(1)로 복귀한다.

 

bash(1)이 켜진 상태에서 exit을 입력하면 더 이상 남은 셸이 없으므로 창이 닫히게 된다.

 

 

 

터미널과 셸의 관계

터미널이라는 프로그램을 이용해서

컴퓨터의 입출력을 받을 수 있고 해당 입출력 이 한다.

해석 후 유효한 명령인 경우 커널이 실행한다.

 

-> 터미널은 일종의 입출력 프로그램이라고 볼 수 있다.

 

* 터미널과 셸은 동일하지 않다!!

 

 

 

프롬포트 커맨드 삭제하기

※ 커서를 특정 단위나 지정으로 보내는 경우

 

ctrl + b

: 커서를 한 글자 왼쪽으로 이동

 

ctrl + f

: 커서를 한 글자 오른쪽으로 이동

 

ctrl + a

:커서를 맨 왼쪽으로 이동

 

ctrl + e

: 커서를 맨 오른쪽으로 이동

 

 

※ 단어단위로 보내는 경우

 

alt + b

: 커서를 한 단어 왼쪽으로 이동

 

alt + f

: 커서를 한 단어 오른쪽으로 이동

 

 

※ 삭제하는 경우

 

backspace 혹은 ctrl + h

: 커서 왼쪽 문자 하나 삭제

 

delete 혹은 ctrl + d

: 커서 오른쪽 문자 하나 삭제

 

ctrl + w 

: 커서 왼쪽 한 단어 삭제

 

 

 

프롬포트 커맨드 자르기 및 붙여넣기

ctrl + k

: 커서의 위치에서 끝까지 잘라내기

 

ctrl + u

: 커서의 위치에서 커맨드 라인의 첫 문자까지 잘라내기

 

ctrl + y

: 마지막으로 잘라내기한 내용 붙여넣기

 

 

 

각종 돌발 상황 대처

 

1. 키보드 입력이 안 되는 경우

 

ctrl + s

: 화면 표시 잠그기(입력 방지)

 

ctrl + q

: 화면 표시 잠금 풀기(입력 가능)

 

 

2. 실행한 명령을 중도에 중단시키는 경우

 

ctrl + c

: 커맨드라인 환경에서 실행중인 로직 중단

 

 

3. 프롬포트 문자가 깨지는 경우

 

ctrl + l(소문자 L) 혹은 clear 입력후 엔터

: 문자 초기화

 

위 명령어를 사용해도 깨는 경우에는

reset 입력후 엔터

 

 

 

자동완성하기

tab

: 일부 내용 작성 후 tab 키를 누르면 자동으로 완성된다.

 

두 번 누르면 여러 선택지가 나온다.

 

 

 

명령 이력 확인하기

ctrl + p 혹은 상단방향키

: 직전 명령 하나씩 조회

 

ctrl + n 혹은 하단방향키

: 다음 명령 하나씩 조회

 

ctrl + r

: 전체적 이력 검색

 

 

※ ctrl + r 이후 사용할 수 있는 명령어

 

<특정 문자 입력>

: 해당 문자를 포함하는 검색결과 조회

 

ctrl + r

:한 개 이전의 검색결과로 이동

 

엔터키

: 현재 검색 결과 실행

 

esc키

: 조회 취소 및 커맨드라인으로 복귀

 

ctrl + g

: 검색 결과 지우고 커맨드라인으로 복귀

 

$ history 숫자

입력시 가장 최근에 입력했던 <숫자>개의 명령을 보여준다.

 

※ history에 사용할 수 있는 확장 명령어

 

$ !번호

를 입력해 재호출할수도 있다.

 

$ !!

: 바로 직전 명령어를 수행한다.

 

$ !?문자열?

: 해당 문자를 포함한 명령어들 중 가장 최근 명령어 하나를 수행한다.