Linux Shell

2026. 6. 13. 20:27리눅스


Ⅰ. Linux Shell



(Shell)
구분 설명
개념 사용자가 운영체제의 커널과 상호작용할 수 있도록 해주는 명령어 해석기
사용자의 입력 (명령)을 받아 해석하고, 커널에 전달하여
실행 결과를 다시 사용자에게 보여주는 역할 수행
사용자와 커널 사이의 인터페이스 (Bridge)로서,

사용자가 시스템 자원을 간접적으로 제어할 수 있도록 도움
주요 역할 항목 설명
명령어 해석 사용자가 입력한 명령을 분석하고 커널에 전달
프로그램 실행 명령에 따라 프로세스를 생성하고 실행
입출력 관리 키보드 (입력)와 화면 (출력) 간의 데이터 흐름 제어
스크립트 실행 쉘 스크립트 (.sh)를 통해 명령어를 자동으로 순차 실행
환경 설정 관리 환경 변수 (PATH, HOME 등) 설정 및 초기화
파일 입력 지원 명령 입력뿐 아니라 파일을 통한 명령 실행 가능

(ex. sh script.sh)
동작 구조 사용자 입력 -> 쉘 (Shell) -> 커널 (Kernel) -> 하드웨어 (CPU, 메모리 등)

-> 결과를 쉘로 전달 -> 사용자 출력
쉘 (Shell)은 사용자의 명령을 해석하여 커널에 전달하고, 실행 결과를 다시 사용자에게

출력하는 명령 해석기이자 인터페이스 역할 수행
주요 기능 기능 설명
명령 실행 기능 사용자의 명령을 실행하고 프로세스 관리
환경 관리 기능 환경 변수 설정 및 경로 (PATH) 지정
프롬포트 기능 명령을 입력받는 대기 상태 표시 (ex. $, #)
히스토리 관리 이전 명령을 저장하고 재실행 가능(history)
리다이렉션 & 파이프 표준 입출력 방향 변경 (ex. >, <)
스크립팅 기능 명령어들을 파일로 작성해 자동 행
종류 sh (Bourne Shell)
csh (C Shell)
ksh (Korn Shell)
tcsh (TENEX C Shell)
bash (Bourne Again Shell)
ash (Almquist Shell)
zsh (Z Shell)

Ⅰ - Ⅰ.  기능

 

ls -l 명령을 통해 파일 목록 확인

 

(쉘은 특수 문자 및 기호를 메타 캐릭터로 처리하여 커널에게 전달)

 


Ⅰ-Ⅱ. 쉘 유형

 

- CentOS Stream 9에서는 'sh', 'bash' 쉘을 제공하고, 그 외의 쉘은 별도로 설치해야함

 

 

chsh -l 명령을 통해 사용 가능한 쉘 목록을 출력하여 sh와 bash 쉘 밖에 없다는 것 확인

 

 

yum list csh ksh tcsh ash zsh 명령을 통해 csh, ksh, tcsh, ash, zsh 쉘 검색

 

● sh (Bourne Shell)

sh 

(Bourne Shell)
구분 설명
개발자, 연도 1974년 스티븐 본 (Stphen Bourne)
특징 Unix 시스템의 최초 표준 쉘
거의 모든 쉘 스크립트의 기반이 됨
장점 모든 쉘 스크립트의 기초
POSIX 표준의 근간
단점 히스토리, alias, 작업 제어 기능 없음

 

● csh (C Shell)

csh

(C Shell)
구분 설명
개발자, 연도 1980년 빌 조이 (Bill Joy)
특징 sh (Bourne Shell)의 기능적 한계 극복하고 사용자 편의성을 높이고자 개발됨
C 언어 문법과 유사한 스크립트 작성 지원
장점 명령 히스토리 , alias, 작업 제어 기능 최초 도입
단점 스크립트 문법 복잡
오류 처리 미약

 

● ksh (Korn Shell)

ksh

(Korn Shell)
구분 설명
개발자, 연도 1980년 데이비드 콘 (David Korn)
특징 sh (Bourne Shell)과 호환 가능
csh (C Shell)의 편리한 기능 통합함
장점 강력한 스크립팅 기능과 향상된 작업 제어 능력을 제공하여

Unix 계열 시스템에서 많이 사용
효율성과 유연성을 동시에 갖춘 쉘로 평가받음
단점 일부 시스템에서 상용

 

● ash (Almquist Shell)

ash 

(Almquist Shell)
구분 설명
개발자, 연도 1980년대 말 케네스 알름퀴스드 (Kenneth Almquist)
특징 sh (Bourne Shell)을 기반으로 개발된 경량급 쉘
작고 효율적이기 때문에 리소스가 제한적인 임베디드 시스템이나 

리눅스 배포판에서 기본 쉘로 주로 사용됨
Ubuntu와 같은 일부 리눅스 배포판에서는 /bin/sh가 bash가 아닌 dash

(Debian Almquist Shell)로 링크되어 경량성 추구함
장점 빠르고 가벼움
단점 기능 제한적

 

● tcsh (TENEX C Shell)

tcsh 

(TENEX C Shell)
구분 설명
개발자, 연도 1983년 켄 그리어 (Ken Greer)
특징 csh (C Shell)을 기반으로 명령줄 완성 (Tab 자동 완성 기능)과

명령줄 편집
(history editing) 기능 추가하여 사용 편의성 크게 향상시킴
단점 여전히 csh (C Shell) 기반의 문법 복잡성 유지

 

● bash (Bourne Again Shell)

bash

(Bourne Again Shell)
구분 설명
개발자, 연도 1989년 브라이언 폭스 (Brian Fox)
특징 GNU 프로젝트 위해 제작됨
현재 가장 널리 사용되는 쉘
대부분의 리눅스 배포판에서 기본 쉘로 채택
sh (Bourne Shell)과의 완벽한 호환성 유지
csh (C Shell)과 ksh (Korn Shell)의 유용한 기능 모두 흡수
강력한 스크립팅 기능, 작업 제어, 명령어 자동 완성, 히스토리 관리 등

현대 쉘이 갖춰야 할 거의 모든 기능 제공
단점 비교적 무거움

 

● zsh (Z Shell)

zsh

(Z Shell)
구분 설명
개발자, 연도 1990년 폴 팰스타드 (Paul Falstad)
특징 sh (Bourne Shell), csh (C Shell), ksh (Korn Shell) 등 기존 쉘의 장점 모두 흡수
독자적인 강력한 기능을 추가한 현대적인 쉘
강력하고 유연한 자동 완성 기능, 다양한 테마 지원, Oh My Zsh와 같은

확장 플러그인을 통한 뛰어난 사용자 커스터마이징 능력 제공
최근 macOS의 기본 쉘로 채택됨
단점 복잡한 설정 (초보자 진입 장벽 높음)

Ⅰ- Ⅲ. 쉘 관련 환경 파일

 

● 계정 로그인 관련 쉘 파일

 

- 계정으로 로그인하고 쉘이 실행될 경우, 모든 계정에 읽혀지는 쉘 관련 파일

 

●  /etc/profile

/etc/profile 구분 설명
개념 시스템 전체에 공통적으로 적용되는 로그인 환경 설정 파일
시스템에 사용자가 로그인할 때 최초로 실행되는 환경 설정 파일
역할 사용자가 로그인할 때 처음 실행되어 모든 사용자에게 기본적인 환경변수와 PATH 설정 적용
ex) PATH, USER, MAIL, HISTSIZE, umask 등의 기본값 지정
실행 시점 사용자가 로그인 쉘 (bash --login, 콘솔 로그인, SSH 접속 등)을 시작할 때 단 한 번만 실행
특징 모든 사용자 공통 적용 (시스템 전역)
개별 사용자 설정 파일 (~/.bash_profile, ~/.profile)보다 먼저 실행
다른 환경 설정 스크립트 (/etc/profile.d/*.sh)를 자동으로 불러옴

 

●  /etc/profile.d/*.sh

/etc/profile.d/*.sh 구분 설명
개념 /etc/profile이 실행될 때 자동으로 함께 실행되는 서브 설정 스크립트 모음 디렉터리
시스템 관리자가 모듈별로 환경 설정을 분리해서 관리할 수 있도록 하는 공간
역할 /etc/profile이 실행될 때 /etc/profile.d 디렉터리 내 모든

.sh 스크립트가 순서대로 실행되도록 함
특징 환경 설정을 모듈화하여 관리 가능 (ex. Python, Java, Go 설정 파일 각각 분리 가능)
패키지별 환경 변수 설정 독립적으로 구성 가능
관리자는 /etc/profile을 직접 수정하지 않고도 새 프로그램을 설치할 때

환경을 /etc/profile.d 아래 스크립트로 추가 가능

 

● /etc/bashrc 또는 /etc/bash.bashrc

/etc/bashrc

or

/etc/bash.bashrc
구분 설명
개념 비로그인 쉘 (ex. 터미널에서 새 창 열 때, 쉘이 실행될 때)이 실행될 때

읽히는 전역 설정 파일
터미널을 새로 열거나 GUI 환경에서 새 쉘 세션을 열 때 실행되는 것
역할 로그인 과정과 관계없이 쉘 동작에 필요한 옵션, alias, 프롬포트, 함수, 히스토리 등을 설정
bash 전용 설정 파일로, 다른 쉘 (zsh 등)에서는 적용 불가능
로그인 쉘이 아닌 상황에서 설정 적용할 때도 사용 가능
실행 시점 비로그인 (no-login) 쉘 시작 시 (ex. 터미널 창 새로 열 때)
보통 ~/.bashrc에서도 이 파일을 source하여 사용자별 설정으로 확장함
특징 실행 환경 (세션) 설정함
alias, 프롬포트, 히스토리 옵션, 함수 정의 등을 설정하기에 적합함

 

 

 

ls -l /etc/profile 명령을 통해 /etc/profile 파일의 상세 정보 (권한, 소유자, 수정 날짜, 크기 등) 확인

 

ls -l /etc/profile.d 명령을 통해 /etc/profile.d 디렉터리 내 파일을 상세 목록 형식으로 확인

 

ls -l /etc/bashrc 명령을 통해 /etc/bashrc 파일의 상세 정보 확인

 

ls -a 명령을 통해 현재 사용자의 홈 디렉터리 내 숨김 파일을 포함하여 모든 파일의 목록 확인

 

ls -a /home/user1 명령을 통해 /home/user1 사용자의 홈 디렉터리 내 숨김 파일을 포함하여 모든 파일의 목록 확인

 

 

● 계정 로그인 및 쉘 실행시 읽혀지는 파일 순서

계정 로그인 

및 

쉘 실행 시 

읽혀지는 파일 순서
구분 설명
개념 사용자가 로그인하거나 쉘을 실행할 때 시스템은 환경 변수, alias, 초기 설정 등을

불러오기 위해 특정 설정 파일들을 순서대로 읽어들임
시스템 전역 설정과 사용자 개별 설정으로 나뉨
로그인 시 읽히는

파일
순서 및 역할
순서 파일 경로 역할 적용 범위
1 /etc/profile 시스템 전체에 공통적으로

적용되는 기본 환경 변수 설정
모든 사용자
2 ~/.bash_profile 로그인한 사용자에게 적용되는

개별 환경 변수 설정
현재 로그인한 사용자
3 ~/.bashrc 로그인 쉘 및 서브 쉘 실행 시

적용되는 alias, 함수 설정
현재 사용자
4 /etc/bashrc 시스템 전역으로 적용되는

bash 공통 환경 변수 및 함수 정의
모든 사용자

 

● 계정 로그아웃 관련 쉘 파일

계정 로그아웃

관련 쉘 파일
구분 설명
개념 사용자가 로그아웃 (Log out)할 때에도 쉘은 특정 파일을 읽어

정리 작업 (clean-up)과 히스토리 저장 (history save) 등을 수행
로그아웃 시

실행되는 파일
파일 경로 역할 설명
$HOME/.bash_logout 로그아웃 시 자동 실행되는 스크립트 ex) 임시 파일 삭제
ex) 세션 정리 등
$HOME/.bash_history 로그인 중 사용했던 명령어들 저장 로그아웃 시 히스토리

파일에 기록됨
정리 흐름 로그아웃 -> .bash_logout 실행 -> .bash_history에 명령어 저장

 

 

cat .bash_logout 명령을 통해 홈 디렉터리에 있는 .bash_logout 파일 내용 확인

 

vi .bash_logout 명령을 통해 vi 편집기 사용하여 .bash_logout 파일의 내용을 echo "ssh disconnect" 로 수정

 

echo "ssh disconnect" 명령을 통해 로그아웃 시 자동으로 실행되어 화면에 "ssh disconnect" 문구 출력하도록 설정

 

exit 명령을 통해 현재 세션 (SSH 연결) 종료하며 로그아웃 수행

 

 

● 쉘 관련 파일 읽혀지는 순서 확인

 

ssh root@localhost 명령을 통해 같은 컴퓨터에 root 사용자로 원격 호스트에

 

안전하게 접속하기 위해 사용되는 보안 프로토콜인 SSH 접속 시도

 

=> /etc/profile -> /etc/profile.d/* -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc 순으로 파일 읽힘

 

 

● .bash_history 파일

.bash_history 구분 설명
개념 bash 쉘에서 사용자가 입력한 명령어들의 기록을 저장하는 파일
사용자가 로그아웃하거나 쉘을 종료할 때 자동 갱신

역할
역할 설명
명령어 기록 저장 사용자가 입력한 모든 명령을 세션 종료 시 .bash_history에 저장
명령어 재사용 history 명령어나 !번호, !!, !문자열 형태로 명령 재실행 가능
작업 추적 과거 작업 내용 확인, 명령 복원, 실수 확인 등에 활용
자동 완성 지원 일부 쉘 기능 (ex. Ctrl + R)이 .bash_history 기반으로 동작
현재 세션과 과거 세션을 잇는 다리 역할
동작 원리 사용자가 명령어 입력하면 bash가 임시 히스토리 버퍼 (메모리)에 저장 -> 세션이 종료되면

이 버퍼의 내용을 ~/.bash_history 파일로 저장 -> 다음 로그인 시 이 파일을

불러와 history 목록으로 복원

특징
항목 내용
파일 위치 ~/.bash_history (사용자 홈 디렉터리)
적용 범위 사용자 개별 단위 (전역 아님)
자동 생성 여부 사용자가 bash 로그인 시 자동 생성
갱신 시점 쉘 종료 / 로그아웃 시점 

기록 확인 방법

history, cat ~/.bash_history, less ~/.bash_history 등
수동 저장 history -w

(현재 메모리 기록을 파일로 저장)
즉시 추가 history -a

(현재 입력한 명령을 바로 파일에 추가)
관련 환경 변수 변수명 의미
HISTFILE 명령어 기록을 저장할 파일 경로
HISTSIZE 메모리에 저장되는 명령어 개수
HISTFILESIZE .bash_history 파일에 저장되는 최대 명령어 수
HISTCONTROL 중복 또는 공백으로 시작하는 명령 제외 설정
HISTTIMEFORMAT 히스토리 목록에 시간 표시

 


Ⅰ- Ⅳ. 리눅스 변수

 

● 쉘 변수 (지역 변수)

쉘 변수

(Shell Variable,

지역 변수)
구분 설명
개념 사용자가 현재 사용 중인 쉘 세션 내부에서만 임시로 생성하고 사용할 수 있는 변수
쉘 (터미널)에서 직접 만든 변수
현재 세션 내에서만 유효
로그아웃하거나 쉘을 종료하면 사라짐
역할 명령 실행 중 임시 데이터 저장용으로 사용
스크립트나 명령 실행 시 필요한 값을 일시적으로 보관
환경 변수로 export시키면 하위 프로세스에서도 접근 가능
특징 항목 내용
생성 방법 변수명=값 (공백 없이)
접근 방법 $변수명 or ${변수명}
적용 범위 현재 쉘 한정
서브 쉘 접근 불가능 (하위 프로세스에서는 사용 불가)
저장 위치 메모리 (RAM)에 임시 저장
지속성 쉘 종료 및 재부팅 시 사라짐
삭제 방법 unset 변수명

 

 

 

a1 = 100, a2 = 200, a3 = hello, a4 = "hello linux" 명령을 통해

 

각각의 변수 a1, a2, a3, a4를 선언하여 100, 200, hello linux, "hello linux"와 같은 값 할당

 

echo $a1 명령을 통해 a1 변수에 저장된 값 화면에 출력

 

echo $a1 $a2 $a3 $a4 명령을 통해 a1, a2, a3, a4 변수에 저장된 값을 차례대로 화면에 출력

 

set | grep ^a 명령을 통해 현재 쉘에 정의된 변수 중 a로 시작하는 모든 변수 확인

 

env | grep ^a 명령을 통해 a로 시작하는 변수들의 환경 변수 설정 유무 확인

 

unset a1 a2 a3 a4 명령을 통해 지정된 a1, a2, a3, a4 변수 삭제

 

echo $a1 $a2 $a3 $a4 명령을 통해 변수들이 삭제된 것 확인

 

set | grep ^a 명령을 통해 변수들이 삭제된 것 확인

 

 

cat /etc/NetworkManager/system-connections/ens33.nmconnection 명령을 통해

 

현재 시스템에서 네트워크 연결을 관리하는 데몬인 NetworkManager가 관리하는

 

네트워크 인터페이스인 ens33에 대한 상세 연결 설정 내용 확인

 

 

vi .bashrc 명령을 통해 vi 편집기를 .bashrc 파일에 내용 추가

 

( .bashrc 파일은 사용자의 홈 디렉터리에 위치하는 숨김 파일이고, bash 쉘의 환경 설정을 정의하는 스크립트 파일)

 

 

[ .bashrc 파일에 추가한 내용 ]

 

export MYSQL_ROOT_PASSWORD=centos 명령을 통해 

 

현재 쉘 세션과 하위 프로세스들이 MYSQL의 root 계정 비밀번호로 centos 사용하도록 설정

 

 

echo $MYSQL_ROOT_PASSWD 명령을 통해 vi 편집기 사용하여 수정한 .bashrc 파일 내용이 적용되었는지 확인

 

-> 현재 쉘에 .bashrc 파일이 적용되지 않아 화면에 아무것도 출력되지 않음

 

source .bashrc 명령을 통해 .bashrc 파일에 저장된 내용을 현재 쉘에 적용

 

echo $MYSQL_ROOT_PASSWD 명령을 통해 vi 편집기 통해 수정한 .bashrc 파일의 내용이 적용되었는지 확인

 

 

vi .bash_profile 명령을 통해 vi 편집기 사용하여 .bash_profile 파일 내용 수정

 

( .bash_profile 파일은 사용자의 홈 디렉터리에 위치하는 숨김 파일이고,

 

인터랙티브 로그인 쉘이 시작될 때 딱 한 번만 읽히고 실행되는 bash 쉘 환경 설정을 담고 있는 스크립트 파일)

 

 

[ .bash_profile 파일 수정 내용 ]

 

export MYSQL_ROOT_USERNAME=root 명령을 통해

 

현재 쉘 세션과 하위 프로세스들이 MYSQL의 사용자 이름으로 root를 사용하도록 설정

 

 

echo $MYSQL_ROOT_USERNAME 명령을 통해

 

vi 편집기 사용하여 수정한 .bash_profile 파일의 내용이 적용되었는지 확인

 

-> 현재 쉘에 .bash_profile 파일이 적용되지 않아 아무것도 출력되지 않음

 

source .bash_profile 명령을 통해 .bash_profile 파일에 저장된 내용을 현재 쉘에 적용

 

echo $MYSQL_ROOT_USERNAME 명령을 통해

 

vi 편집기 사용하여 수정한 .bash_profile 파일의 내용이 적용되었는지 확인

 

env | grep MYSQL 명령을 통해 현재 쉘에 설정된 MYSQL 단어가 포함된 줄만 출력

 

 

mkdir -p test 명령을 통해 새로운 test 디렉터리 생성

 

(-p 옵션으로 인해 상위 디렉터리가 존재하지 않을 경우, 같이 생성)

 

cd test 명령을 통해 root 디렉터리에서 test 디렉터리로 이동

 

cat << EOF > nslookup.sh 명령을 통해 EOF 가 나오기 전까지 입력했던 내용을 nslookup.sh 파일에 저장

 

nslookup.sh 파일은 nslookup 명령어를 사용하는 쉘 스크립트 

 

(nslookup 명령은  'Name Server Lookup'의 약자로 DNS 서버로부터 정보 얻기 위해 사용되는 네트워크 관리 도구)

 

특정 도메인 이름의 IP 주소를 조회하거나, 특정 IP 주소의 도메인 이름을 찾는 등 DNS 관련 정보 확인할 때 사용됨

 

cat nslookup.sh 명령을 통해 nslookup.sh 파일에 저장된 내용 확인

 

 

[ nslookup.sh 파일의 내용 ]

 

#!/bin/bash를 통해 nslookup.sh 파일이 Bash 쉘 스크립트임을 확인

 

host www.google.com  명령을 통해 www.google.com  도메인의 IP 주소 등 DNS 정보 조회

 

=> nslookup.sh 파일은 실행 시 www.google.com  도메인의 DNS 정보를 터미널에 출력함

 

file nslookup.sh 명령을 통해 파일이 ASCII 텍스트 실행파일임을 확인

 

source nslookup.sh 명령을 통해 스크립트를 실행하여 www.google.com  도메인의 IPv4, IPv6 주소 확인

 

 

ls 명령을 통해 test 디렉터리에 nslookup.sh 파일이 잘 설치되었는지 확인

 

source nslookup.sh 명령을 통해 스크립트를 실행하여 www.google.com  도메인의 IPv4, IPv6 주소 확인

 

sh nslookup.sh 명령을 통해 sh쉘로 스크립트 실행

 

bash nslookup.sh 명령을 통해 bash쉘 직접 지정해 스크립트 실행

 

 

ls -l 명령을 통해 현재 디렉터리의 파일 상세 목록 확인

 

chmod 744 nslookup.sh 명령을 통해 nslookup.sh 파일의 권한 변경

 

( 7 : 소유자 = 읽기 + 쓰기 + 실행, 4 : 그룹 = 읽기, 4 : 기타 사용자 = 읽기)

 

ls -l 명령을 통해 파일의 권한이 잘 변경되었는지 확인

 

source nslookup.sh 명령을 통해 환경 변수 유지하며 nslookup.sh 스크립트를 source로 실행

 

./nslookup.sh 명령을 통해 독립된 프로세스에서 스크립트 실행

 

 

echo $PATH 명령을 통해 쉘이 실행 파일을 찾을 때 검색하는 디렉터리 목록인 PATH 환경 변수 출력

 

cp -p nslookup.sh /usr/local/sbin/ 명령을 통해 nslookup.sh 파일 원본의 소유자,

 

그룹, 권한, 타임스탬프 등을 보존하며 /usr/local/sbin/으로 복사 

 

ls -l /usr/local/sbin/ 명령을 통해 파일이 잘 복사되었는지 확인

 

nslookup.sh 명령을 통해 도메인의 IP 주소 확인

 

./nslookup.sh 명령을 통해 현재 디렉터리에 있는 nslookup.sh 스크립트 실행

 

cd 명령을 통해 test 디렉터리에서 홈 디렉터리로 이동

 

rm -rf test 명령을 통해 test 디렉터리와 그 안에 있던 모든 파일 삭제

 

 

 

'리눅스' 카테고리의 다른 글

Linux 파일 시스템 생성 및 마운트  (0) 2026.06.13
Linux 디스크 파티션 작업  (0) 2026.06.13
Linux 프로세스 관리  (0) 2026.06.13
Linux 디렉터리 구조와 명령어  (1) 2026.06.13
VMware과 MobaXterm 환경 세팅  (0) 2026.06.13