[Linux] Shell, 환경변수 설정

JIWON·2025년 5월 16일

Linux

목록 보기
5/20
post-thumbnail

🖥️ Shell

1️⃣ 개요

: 사용자와 커널 사이의 중재자 역할을 수행하는 도구 또는 프로그램

💠 셸의 기능

  • 명령어 해석기 : 사용자와 커널 사이에서 명령을 해석해서 전달하는 역할

  • 프로그래밍

    • 쉘은 자체 내에 프로그래밍 기능이 있어서 프로그래밍 가능
    • 여러 명령을 사용해서 반복적으로 수행하는 작업을 하나의 프로그램으로 만들 수 있음
    • 이렇게 작성된 셸 프로그램을 셸 스크립트 라고 한다
  • 사용자 환경 설정


2️⃣ 셸의 종류

🔸 bourne Shell :

  • 최초의 셸
  • 현재는 콘셸이나 배시셸의 심볼릭 링크이다.

🔸 C Shell :

  • 본셸의 기능을 확장
  • 셸 스크립트 작성법이 C언어와 유사해서 C Shell
  • 본 셸과 호환이 안됨

🔸 Korn Shell :

  • 본 셸과 호환성을 유지
  • 우분투에서는 기본으로 설치되어 있지 않아서 별도로 설치를 해야 한다

🔸 Bash Shell :

  • 본 셸을 기반으로 만들어진 셸
  • 본 셸과 호환성을 유지하면서 C Shell과 콘 Shell의 장점을 포함
  • GPL을 따르는 공개 소프트웨어로 리눅스의 기본 셸로 제공되고 있고 우분투에서는 사용자 계정의 기본 셸로 사용함

🔸 Dash Shell :

  • 본 셸을 기반으로 만들어진 셸
  • 가벼워서 우분투에서는 6.10 버전부터 본셸 대신 대시 셸을 사용
  • ls -l /bin/sh

3️⃣ 셸의 기본 사용법

💠 셸 지정 및 변경

🔸현재 셸을 확인하는 방법

  • 프롬프트를 확인해서 $이면 본셸이나 콘셸 또는 배시셸이고 %이면 C셸

  • grep 명령으로 특정 사용자 정보를 확인

    • grep jiwon /etc/passwd -> 우분투는 배시셸

🔸셸 변경 방법

  • 우분투의 기본셸은 bash이지만 사용자가 다른 셸로 변경이 가능

  • chsh 라는 명령으로 셸을 변경할 수 있다

  • chsh [옵션][사용자게정]

  • 옵션

    • -s shell경로 : 지정하는 셸(절대 경로로 설정)로 로그인 셸 변경
    • -l : /etc/shells 파일에 지정된 셸을 출력

🔸셸 변경 하기

1. 사용가능한 셸 확인 : cat /etc/shells

2. 셸변경

# 절대경로가 아니라서 에러
chsh -s sh jiwon

# 절대 경로
chsh -s /bin/sh

3. 셸 변경 확인 (bash -> sh)

grep jiwon /etc/passwd


4️⃣ Shell 내장 명령

실행 파일은 cat 명령으로 확인할 수 없고 file 명령으로 확인
file /usr/bin/pwd : 이 경우 실행 가능한 파일이라고 메시지를 출력

cd : 대표적인 셸 내장 명령
file cd : 내장명령이므로 파일을 확인할 수 없다고 메시지 출력

💠 출력 명령

🔸echo 명령 : 화면에 한 줄의 문자열을 출력

  • echo [-n] [문자열 또는 변수]
  • 옵션 -n : 마지막에 줄바꿈을 하지 않음
  • 실습
    • echo linux
    • echo "linux ubuntu"

🔸printf 명령 : c언어의 printf와 동일

  • printf [형식] [인수]
  • 실습
    • printf "text\n"
    • printf "%d\n" 100

5️⃣ 특수문자

🔸* : 임의의 문자열을 나타내는 특수문자

  • 0개 이상의 문자로 대체
  • 사용 예:
    ls * : 현재 디렉토리의 모든 파일과 서브 디렉토리를 나열, 서브디렉토리의 내용도 출력한다
    cp * /tmp : 현재 디렉토리의 모든 내용을 /tmp 디렉토리 아래로 복사

🔸? : 1글자에 해당

  • 사용 예:
    ls t?.txt : t로 시작하는 두 글자의 텍스트 파일만 조회

🔸[] : 여러 문자 중 하나

  • 사용 예:
    ls -l tmp[135].txt : tmp1.txt , tmp3.txt, tmp5.txt 만 조회
    ls -l tmp[1-3].txt : tmp1.txt , tmp2.txt, tmp3.txt 만 조회
    ls [0-9] * : 숫자로 시작하는 모든 파일 목록 조회
    ls [a-zA-Z가-힣]* : 문자로 시작하는 파일 목록 조회

🔸~ : 현재 사용자의 홈 디렉토리

🔸- : 현재 디렉토리로 이동하기 직전의 디렉토리

🔸; : 연결된 명령을 왼쪽부터 차례대로 실행

  • 사용 예:
    date ; ls ; pwd

🔸| : 앞의 명령의 결과를 뒤로 전달

  • 사용 예:
    ls -al /| more : ls -al /의 결과인 루트 디렉토리에 모든 내용을 more에 전달해서 화면단위로 출력

🔸' ' : 모든 특수문자를 일반 문자로 간주

🔸" " : $ ,` , \를 제외한 특수문자를 일반문자로 간주

  • 사용 예:

🔸` ` : 감싸인 문자열을 명령어로 해석

  • 사용 예:
    echo "Today is `date`"

🔸\ : 특수문자의 효과를 없에주는 역할

  • 사용 예:
    ls t\* : t*이라는 파일의 내용을 조회

6️⃣ 입출력 방향 변경 명령

💠 표준 입출력 장치

리눅스에서 셸이 작업을 수행하는데 필요한 정보를 받아들이는 장치를 표준 입력 장치라고 하고, 실행결과를 내보내는 장치를 표준 출력 장치라고 한다. 기본적으로 표준 입력 장치를 키보드로 설정되어 있고, 표준 출력 및 표준 오류장치는 모니터로 설정되어 있다

리눅스는 장치도 파일로 관리하므로 셸은 작업 중 필요한 파일에 일련번호를 붙여서 관리하고 이를 File Discriptor 라고 한다. 표준 입출력장치도 파일로 관리되기 때문에 File Discriptor가 부여되어 있다.


💠 redirection

표준 입출력을 파일로 변경하는 것redirection이라고 한다.

🔸출력 redirection - 내용 덮어쓰기

  • > , 1> : 출력의 방향을 변경하는 명령어로 새로 출력(덮어쓰기)
  • 프로그램 출력을 파일에 저장
  • 파일을 덮어쓰지 않도록 설정 : set -o noclobber , 해제 : set +o noclobber
  • 사용 예:
    ls -l > res

파일이 없으면 만들어주고 파일이 있으면 기존 내용이 없어지고 명령의 수행 결과로 대체됨.


🔸출력 redirection - 내용 변경없이 추가

  • >> : 출력의 방향을 변경하는 명령어로 파일에 내용을 추가
  • 사용 예:
    ls -l >> res

🔸 에러 redirection

  • 2> : 표준 오류 메시지를 파일에 저장

  • 정상적으로 명령이 수행되면 내용을 기록하지 않는다.

  • 사용 예:
    ls out1 2> ls.err


🔸표준 출력과 오류를 한꺼번에 redirection

명령 > 표준출력파일경로 2> 에러출력파일경로

  • 사용 예:
    ls /abc > ls.out 2> ls.err : 에러인 경우
    cat ls.err : 에러메시지 출력

  • 사용 예:
    ls / > ls.out 2> ls.err : 정상인 경우
    cat ls.out : 정상 출력


🔸오류메시지 버리기
/dev/null 이라는 특수파일로 내용을 출력

  • 사용 예:
    ls /abc 2> /dev/null : 원래 에러메시지가 보이지만 이 명령어를 사용하면 에러메시지가 안보인다

🔸파일 1개에 오류메시지와 정상적인 출력을 동시에 수행
명령어 > 표준출력경로 2>&1


🔸 입력 redirection

  • < , 0< : 표준입력을 바꾸는 기능
  • 프로그램 입력을 파일에서 읽는 기능
  • 사용 예:
    tr a-z A-Z < today.txt

⚙️ Bash Shell 환경설정

1️⃣ 변수

💠 Shell 변수와 환경변수

🔸 Shell 변수
현재의 셸에서만 사용 할 수 있는 변수

🔸 환경 변수
모든 셸에서 사용 할 수 있는 변수

💠 주요 Shell 환경변수

HISTSIZE : 히스토리 저장 크기
PATH : 명령을 탐색할 경로
HOME : 사용자의 홈 디렉토리 경로
PWD : 작업 디렉토리의 절대 경로
LANG : 사용하는 언어
SHELL : 로그인 셸
LOGNAME : 사용자 계정 이름

💠 Shell 변수와 환경변수 출력

  • env : 환경 변수 전부 출력
  • set : 모든 변수와 함수를 출력

💠 변수 생성, 수정

🔸 셸 변수 정의
변수명=문자열

만약 SOME = test 처럼 공백이 들어가면 에러가 발생한다

💠 변수 확인

  • echo $변수

  • set | grep 변수명 : 셸 변수와 환경 변수 모두 조회하므로 조회가 됩니다

  • env | grep 변수명 : 환경 변수만 조회하므로 현재는 조회되지 않습니다.

💠 환경변수 설정

🔸 환경 변수 정의

export [옵션] [셸변수] : 셸 변수 -> 환경 변수

🔸 환경 변수를 셸 변수로 변환

export -n 변수명 : 환경 변수 -> 셸 변수

💠 변수 해제

🔸 변수 해제

unset 변수

0개의 댓글