리눅스 (셸, Shell)

·2025년 6월 29일

들어가기에 앞에 이전에 "쉘"이라 주로 썼었는 데, 사실 "셸"이라는 표기법이 맞다고 한다.

1. 셸

1) 셸이란

  • "사용자가 커널의 서비스 기능을 사용할 수 있도록 하기 위한 통로이자 사용자 인터페이스(cli,gui)"

2) 셸의 역사

  • 71년. 최초 버전의 유닉스에 도입된 최초의 유닉스 셸은 켄 톰프슨의 "톰프슨 셸"
  • 77년. 유닉스7버전에 포함된 스티븐 본의 "본셸(Bourne Shell)"
  • 70년 후반. C언어 기반으로 개발된 빌 조이의 "C셸"
  • 83년 대. C셸의 수 많은 기능이 추가된 데이비드 콘의 "콘 셸"
  • 89년. 브라이언 폭스의 "bash셸"

3) 현재 셸을 확인하기

  • ps -p $$($$는 현재 셸이 실행 중인 프로세스 ID를 뜻하는 쉘 내장 변수를 의미)
  • echo $SHELL

4) 지원하는 sheel확인

  • cat /etc/shells
  • chsh -l

5) 셸 변경은 chsh -s

6) 특정 사용자의 셸 확인
cat /etc/passwd | grep 이름 으로 확인할 수 있다.

 ⚠️⁉️ passwd는 뭐가 작성돼 있나?

  • 각 줄은 하나의 사용자 계정 정보를 나타냄.
  • 시스템 로그인이나 사용자 식별 등에 사용
  • 형태는= username:x:1000:1000:User Name:/home/username:/bin/bash
    필드1: username =사용자 계정 이름
    필드2: x = 암호 필드 (x는 /etc/shadow 사용 중이라는 뜻, shadow는 일반 사용자는 접근 불가, root유저로 가능하다)
    필드3: UID =사용자 ID (0은 root)
    필드4: GID =기본 그룹 ID
    필드5: comment = 설명 필드, 일반적으로 전체 이름
    필드6: home directory =사용자 홈 디렉터리 경로
    필드7: login shell =로그인 시 사용할 셸 경로 (/bin/bash 등)

7) 로그인 셸, 비로그인 셸, 인터렉티브셸, 비인터렉티브셸
ㄱ) 로그인 셸 이란 "사용자가 id,passwd를 입력 후 셸에 진입하는 방식"을 의미.

  • 시스템 전역 설정 파일은 "/etc/profile" , "/etc/profile.d"를 읽어 실행

ㄴ) 비로그인 셸 이란 "말 그래도 로그인 없이 셸을 실행하는 것을 의미"
추가적으로 이미 로그인을 해도 bash명령어를 사용해, 셸을 다시 실행하거나 or x윈도우에서 터미널을 실행하는 것도 이에 해당함.

ㄷ) 인터렉티브 셸 이란 "사용자가 대화형으로 셸을 통해 명령을 입력 -> 결과를 받을 수 있는 상태의 셸"을 의미

ㄹ) 비인터렉티브 셸 이란 "셸 스크립트에서 셸을 실행하는 경우"를 의미.

8) 셸의 기능
ㄱ. 자동완성(tab)
ㄴ. history
ㄷ. alias
ㄹ. 셸 키보드 단축키
ㅁ. 명령어 치환의 기능(역따옴표 혹은 $를 사용)
ㅂ. 표준 입출력 기능
ㅅ. 리다이렉션 기능( >, >>, <, << ) : 입출력 재지정 기능
ㅇ. 파이프 기능 ( | )
ㅈ. 그룹 명령 기능

  • ; = 나열한 순서대로 명령어를 실행 할때 사용.
  • || = 앞의 명령어가 실행되면 앞의 명령어를, 실패시 뒤의 명렁어를 실행
  • && = 앞의 명령어가 실행이 성공한 경우에만 뒤의 명령어를 실행.

ㅊ) 작업 제어기능(fg,bg,stopped)
ㅋ) 산술 논리 제어 기능(expr 명령어를 사용)
ㅌ) 프롬프트 제어 기능
ㅍ) 확장된 내부 명령어

9) 셸 프로그래밍
ㄱ) 셸 프로그래밍이란 "특정 목적을 달성하기 위한 셸 스크립트를 작성하는 활동"을 의미하며, "셸 스크립팅"이라 부르기도 한다.
ㄴ) ㄱ을 간단히 요약하면 "셸의 여러 명령어를 작성한 파일"
ㄷ) 형식 : 첫 줄에 "#!"를 붙여 "나 스크립트 파일이다"를 알림
ㄹ) 실행 방법: 현재 쉘에서 바로 실행하는 것과 별도의 프로세스로 실행하기

  • 별도의 프로세스를 이용하려면 chmod(체인지모드)로 권한을 부여 ex) chmod +x hello.sh
  • "." 현재 경로를 표현해 사용하기 ex) ./hello.sh
profile
# h

0개의 댓글