티스토리 뷰

OS

Shell(쉘)

tioon 2023. 5. 28. 23:08

 

쉘(Shell)이란?

-컴퓨터 운영체제에서 사용자와 시스템간의 상호작용을 중개하는 프로그램, 많은 시스템 콜들을 안전하게 사용할 수 있게 해줍니다. 사용자와 커널 사이에서 동작하여  사용자가 하드웨어와 직접적으로 상호작용할 수 있게 하고 편리한 환경을 제공합니다.

 

쉘의 특징
  • 명령어 해석 
    -쉘은 사용자가 입력한 명령어를 해석하고 실행하는데, 이를 통해 다양한 작업을 수행할 수 있습니다.
  • 대화형 환경(interactive)
    -사용자가 명령어를 입력하면 즉시 결과를 반환하고, 사용자의 입력에 따라 동적으로 작업을 수행하게 됩니다. 이를통해 결과를 실시간으로 확인하고 작업을 수정하거나 조작할 수 있습니다.
  • 환경설정
    - 쉘을 통해 환경변수, 별칭(alias)등을 정의하고 관리할 수 있습니다. (별칭이란 사용자가 특정 작업의 명령어를 사용자에 맞게 명령어를 변경하여 사용하는것을 말합니다.)

 

한줄 명령어

 

  • newline(줄바꿈) - 엔터와 같으며, 각 줄에 따라 개별적으로 해석하고 실행합니다.
$ command1
$ command2
$ command3

 

  • ;(세미콜론) - 여러 명령어를 한 줄에 작성할때 사용되며,순차적으로 실행합니다.
$ command1; command2; command3

 

  • &&(논리적 AND 연산자) - 앞의 명령어가 성공적으로 실행된 경우에만 다음 명령어를 실행합니다.
$ command1 && command2

 

 

 

 

내장 명령어 (Builtin Command) vs 외부 명령어(External Command)

 

  • 내장 명령어

-쉘 자체에 내장되어 있는 명령어, 쉘의 메모리에 상주하고 바로 실행되며,운영체제의 기능을 직접적으로 사용합니다. 대표적인 예로는 cd, mkdir ,echo등이 있으며, 이들은 빠르고 효율적입니다.

 

  • 외부 명령어

-쉘 외부에 별도의 실행가능한 프로그램으로 존재하는 명령어이며,이러한 명령어는 특정 경로에 위치한 실행가능한 파일이며, 쉘이 이것을 찾아서 실행합니다.대표적인 예로는 ls , grep , git등이 있습니다.

 

 

 

 

 

 

변수선언

-쉘에서 값을 저장하고 나중에 참조할 수 있는 이름으로 사용되는 변수를 선언할 수 있습니다. 일반적으로 변수이름은 대문자, 소문자 밑줄로 구성이되며 등호를 사용해 생성할 수 있습니다.
($ 0~9 , $? , $! 등은 지정된 변수로 이미 시스템에서 사용중인 변수입니다.)

 

  • 변수생성(띄어쓰기 x)
name="John"

 

  • 변수 확인
echo $name

 

  • 변수삭제
unset name

 

 

 

 

IFS(Internal Field Separator)

-쉘에서 문자열을 필드로 분리하는데 사용되는 구분자(separator)입니다. 즉 문자열을 나눌 때 기준이 되는 문자를 정의하는 환경 변수입니다. 기본값으로는 공백,탭,개행 문자가 있습니다.

string="apple,banana,orange"
IFS=',' read -ra fields <<< "$string"

해당 예시를 보면 string에 ,(쉼표)를 기준으로 3개의 단어가 있습니다. 하지만 기본 IFS값에 쉼표가 없으니 IFS로 나눠도 한줄로 표시가 되게 되는데, IFS=','로 나누는 기준을 변경하게 되면,위의 string이 쉼표를 기준으로 나뉘어 출력됩니다.

 

 

 

 

 

변수 보간(Variable interpolation) vs 명령어 보간(Command interpolation)

-쉘에서 문자열 내에 변수나 명령어를 삽입하여 값을 확장하는 기능입니다

 

변수 보간
-문자열 내에서 변수를 사용해 변수의 값을 확장하는 기능입니다. 쉘에서 변수이름앞에 $기호를 사용해 수행합니다.

name="John"
echo "My name is $name"

 

명령어 보간

-문자열 내에서 명렁어를 실행하고 그 결과를 문자열에 삽입하는 기능입니다.역따옴포(' ')또는 $()로 감싸 사용됩니다.

current_dir=$(pwd)
echo "Current datetime is $current_dir"

 

 

환경변수 설정
  • export

-쉘에서 환경변수를 설정할 수 있는 명령어,

 

  • setenv(),putenv

-프로그램 내에서 환경변수를 설정하는 코드, c프로그램으로 조작할 수 있습니다.

 

 

globbing

-쉘에서 파일이름을 패턴매칭하여 해당 패턴과 일치하는 파일들의 목록을 가져오는 명령어입니다.

 

* - 어떤 문자열이든 다 찾는 기능 

ex) *.txt   ->   .txt인 파일 다찾음

 

? - 하나의 문자와 일치하는 것을 찾는 기능

ex) ?.txt   ->   이름이 한글자인 .txt파일을 다찾음

 

[] - 대괄호 안의 문자중 하나와 일치하는 것을 찾는 기능

[aeiou].txt   ->   파일이 모음으로 시작하는 .txt파일을 다찾음

 

 

 

파일 리다이렉션(file redirection)

-쉘에서 표준 입력,표준 출력 표준에러의 방향을 변경하여 파일로 입출력을 변경하는 기능입니다. 파일 리다이렉션을 사용해 명령어의 입출력을 터미널이 아닌 파일로 전환할 수 있는 기능입니다. (>>처럼 두개연속으로 있는것은 append(이어쓰기)입니다.

 

< (표준 입력 리다이렉션)

- 파일을 표준입력으로 리다이렉션하는 명령어, 파일의 내용을 명령어의 입력으로 사용함.

sort < input.txt  # input.txt 파일의 내용을 sort 명령어의 입력으로 사용

 

> (표준 출력 리다이렉션)

- 파일을 표준 출력으로 리다이렉션 하는 명령어, 명령어의 결과를 파일에 출력

ls -l > file.txt  # ls -l 명령어의 결과를 file.txt 파일로 저장

 

2> (표준 에러 리다이렉션)

-표준 에러를 파일로 리다이렉션, 명령어의 에러 메세지를 파일에 출력

command 2> error.txt  # command의 에러 메시지를 error.txt 파일로 저장

 

 

 

 

파이프(Pipe)

-쉘에서 두개 이상의 명령어를 연결하여 하나의 명령어의 출력을 다른 명령어의 입력으로 전달하는 기능, 여러명령어를 조합하여 더 복잡한 작업을 수행할 수 있습니다. 앞의 명령어 부터 순차적으로 수행되며, 앞의 명령어의 출력이 뒤의 명령어의 입력으로 전달됩니다.

ls -l | grep "example"

(ls -l로 현재 디렉토리의 파일 목록을 가져온후 , 그중에서 "example"이라는 문자열을 포함하는 파일만 필터링하는 명령어)

'OS' 카테고리의 다른 글

OS(운영체제)의 구조와 원리  (0) 2023.09.24
동시성(Concurrency)  (0) 2023.05.29
메모리 Stack변화  (0) 2023.05.15
Address Translation 변환 과정 (VA -> PA)  (0) 2023.05.15
Copy-on-Write (mmap)  (0) 2023.05.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함