코딩 기록 저장소

[23-01/유닉스 시스템] 배시 셸 활용하기 본문

학교 공부/유닉스 시스템

[23-01/유닉스 시스템] 배시 셸 활용하기

KimNang 2023. 4. 27. 02:18

1. 셸 기본 사용법 익히기

셸의 종류와 변경

■ 셸

- 사용자와 커널 사이의 중간 역할

- 사용자가 입력한 명령을 처리하고 실행 결과를 알려줌 ( 커널에게 해석한 결과 알려주고 일을 시킴)

- 편리한 사용을 위해 다양한 기능 제공함 (해석하고 처리함)

 

■ 셸의 종류

- 본 셸(sh), 콘 셸(ksh), C 셸(csh), 배시 셸(bash) 등 

- 종류 확인하기

- 프롬프트로 확인 : C셸은 % / 본 셸, 콘 셸, 배시 셸은 $

로그인 하게되면 통상적으로 프롬프트 나타남

- 명령으로 확인

 

memo : echo $SHELL    echo - 화면에 답을 해라 / $SHELL - 셸에 대한 종류 출력하도록

memo : $umask => 022 0022 배시 셸

 

■ 로그인 셸과 서브셸

- 로그인 셸 : 사용자가 로그인 직후 자동 생성되는 셸

- 서브셸 : 사용자가 직접 실행한 셸

memo : 또 다른 셸 실행 & 사용 가능

memo : 로그인 셸 - 로그인할 때 ? $있는 상태에서 'csh', 'ksh' 하면됨 / exit - 'logout', Ctrl + 'D' 이러한 명령어 쓸 수 있음

 

■ 문자열의 출력

● echo

- 셸 명령과 유틸리티 모두 제공

- 지정한 문자열 출력

print

- 셸 명령

- 옵션이 제공되어 echo보다 편리

memo : 일반적으로 명령은 두가지로 구분함

셸 내장 명령 실행 - 단순 셸 가지고 명령 / 유닉스 유틸리티 실행 - 어떤 프로그램, 서버조작 프로그램 조작, 유틸리티 프로그램

 

셸 특수 문자

■ * 특수 문자

memo : 와일드 카드

- 가장 자주 사용되는 특수 문자 -> 임의의 문자열을 나타냄

명령 의미
ls * 현재 디렉토리의 모든 파일 목록 나열하고, 하위 디렉토리가 있으면 그 아래의 모든 파일 목록도 보여줌.
cp * / tmp 현재 디렉토리의 모든 파일을 /tmp 디렉토리 아래로 복사함.
이때 하위 디렉토리는 복사되지 않음.
ls -F h*
memo : -F ← 파일의 종류
h, h1, haha와 같이 파일명이 h로 시작하는 모든 파일의 이름과 파일 종류를 출력함. h도 해당함.
cp *.c ../C
memo : .. ← 상위 디렉토리
확장자가 c인 모든 파일을 상위 디렉토리 밑의 C 디렉토리로 복사함.
ls -l h*d 파일명이 h로 시작하고 d로 끝나는 모든 파일의 상세 정보를 출력함. hd, had,hard, h12345d 등 이 조건에 맞는 모든 파일의 정보를 볼 수 있음.

 

■ ?와 [ ] 특수 문자

- 모두 하나의 문자를 나타내는 데 사용

- ?는 임의의 한 문자, [ ] 괄호 안에 포함된 문자 중 하나

- [ ] 다른 특수 문자와도 혼합해 사용할 수도 있음

명령 의미
ls hello?.c hello 다음에 임의의 한 문자가 오고 파일의 확장자가 c인 모든 파일의 이름을 출력함. hello1.c, helloa.c, hello_.c등이 해당됨.
단 hello.c는 해당되지 않음.
ls -l hello[123].c hello1.c, hello2.c, hello3.c 파일이 있으면 해당 파일의 상세 정보를 출력함.
ls -l hello[1-3].c ls -l hello[123].c와 결과가 같음. 즉, hello1.c, hello2.c, hello3.c 파일이 있으면 해당 파일의 상세 정보를 출력함
ls [0-9]* 파일명이 숫자로 시작하는 모든 파일 목록을 출력함
ls [A-Za-z]*[0-9] 파일명이 영문자로 시작하고 숫자로 끝나는 모든 파일 목록을 출력함

 

■ ~와 - 특수 문자

- 디렉토리를 나타내는 특수 문자

- ~ 단독 사용 → 사용자의 홈 디렉토리

- -는 cd 명령으로 디렉토리를 이전하기 직전의 작업 디렉토리

명령 의미
cp *.c ~/C 확장자가 c인 모든 파일을 내 홈 디렉토리 아래의 C 디렉토리로 복사함
cp ~user2/hw/report1.
memo : user2 디렉토리.
user2라는 사용자 홈 디렉토리 아래의 hw 디렉토리에서 
report1 파일을 찾아 현재 디렉토리로 복사함
cd - 이전 작업 디렉토리로 이동함 

 

■ ;과 | 특수 문자

- 명령과 명령을 연결

- ;은 연결된 명령을 왼쪽부터 차례로 실행

- |는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달

- |는 여러 명령을 연결해 사용 가능

명령 의미
cal ; ls ; pwd 달력을 출력한 후, 현재 디렉토리의 파일 목록을 출력하고, 마지막으로 현재 작업 디렉토리의 절대 경로를 보여줌
ls -al / | more 루트 디렉토리에 있는 모든 파일의 상세 정보를 한 화면씩 출력함
who | wc -l who는 현재 접속 중인 사용자 정보를 한 사람당 한 행씩 출력.
wc는 파일의 문자수, 단어수, 행 수를 세는 명령으로 -l 옵션은 파일의 행 수를 출력함. 따라서 두 명령을 결합하면 현재 접속 중인 사용자의 수가 출력됨.

 

■ ' '와 " " 특수 문자

- 문자열 안에 사용된 특수 문자의 의미를 없애는 기능

- 작은 따옴표는 모든 특수 문자를 처리

- 큰 따옴표는 $,`,\를 제외한 모든 특수 문자들을 일반 문자로 처리

명령 의미
echo '$SHELL' $SHELL 문자열이 화면에 출력됨.
echo "$SHELL" 셸 환경 변수인 SHELL에 저장된 값인 현재 셸의 종류가 화면에 출력됨. ( ex : /usr/bin/bash )

 

■ ` 특수 문자

- 명령 실행 결과를 문자열로 받고 싶을 때 사용

- 작은 따옴표와 혼동 주의

명령 의미
echo "Today is" `date`
memo: "내용" - 그대로 화면에 출력
`내용` - 실행 결과를 문자열로
다음 문자열이 출력됨.
Today is Thurs day, April 27, 2023 12 : 31 : 45 AM KST
ls /platform/ `uname -m` uname -m 명령의 실행 결과를 문자열로 바꾸어 디렉토리 이름으로 사용함.

 

■ \ (₩) 특수 문자

- \ (역 슬래시)는 특수 문자를 일반 문자처럼 사용

- 특수 문자 앞에 사용되며 특수 문자의 효과를 제거

- 키보드에서 \ 대신 ₩를 사용

명령 의미
ls ?l h₩* h*라는 이름을 가진 파일의 상세 정보를 출력함. ₩없이 h*를 사용하면 h로 시작하는 모든 파일의 상세 정보를 출력함.
echo ₩$SHELL $SHELL을 화면에 출력함. echo '$SHELL'과 결과가 같음.

 

■ >, >>, < 특수 문자

- 입출력 방향을 바꾸는 특수 문자

명령 의미
ls -l > res
memo : res - 파일 이름 만들면서 저장
ls -l 명령의 실행 결과를 화면이 아닌 res 파일에 저장함

 

2. 입출력 방향 변경

표준 입출력 장치

- 시스템이 명령의 입력과 출력에 사용하는 기본 장치

memo : 어떻게 입력을 받을 것인가?

memo : 표준 오류 - 표준 입력 못마땅할때

지금까지는 명령을 키보드로 입력하고 그 결과를 모니터를 통해 확인함

if 명령 실행 결과 파일로 저장한다면?

키보드로 입력할 내용을 미리 파일로 저장했다가 실행할 수는 없을까?

-> 이 모든 것이 가능함

 

■ 파일 디스크립터

- 입출력 장치를 변경할 때 사용

memo : 먼저 여기서 파일 디스크립트란?

이 컴퓨터에는 우리가 어떠한 파일에 접근하거나 실행하거나 했을 때 그 작업에 일련 번호를 붙임

관리 번호를 붙이는 것을 디스크립터

파일 디스크립터 파일 디스크립터 대신 사용하는 이름 정의
0 stdin 명령어의 표준 입력
1 stdout 명령어의 표준 출력
2 stderr 명령어의 표준 오류

 

출력 리다이렉션 : >, >>

파일 덮어 쓰기 : 명령 > 파일명

파일에 내용 추가하기 : 명령 >> 파일명

- 파일 덮어쓰기 : >

    - 새로운 파일로 생성, 기존 파일의 내용은 없어짐

- 파일에 내용 추가하기 : >>

    - 기존 파일의 끝에 내용 추가

 

● 사용법

 

오류 리다이렉션 : 2>

명령 2> 파일명

- 표준 오류 메시지를 파일에 저장

 

● 사용법

 

입력 리다이렉션 : <

명령 < 파일명

- 표준 입력을 키보드에서 파일로 변경

 

사용법

 

3. 배시 셸의 환경 설정

변수 출력

■ 변수

- 시스템이나 사용자에 의해 사용되는 정보를 저장하기 위한 저장소

- 셸 변수는 관례적으로 대문자를 사용

 

■ 셸 변수

- 현재의 셸에서만 사용 가능한 변수

- 확인 명령 : set

 

■ 환경 변수

- 모든 셸에서 사용 가능한 변수

- 확인 명령 : env

 

변수 정의

■ 셸 변수 : 변수 = 값

 

■ 환경변수

- 변수 = 값 : export 변수명

- export 변수 = 값

 

■ 변수 값 확인

- set, env 명령으로 확인

- Echo $변수명

 

변수 해제

■ unset 변수명

 

컨트롤 키

- 일반적으로 가장 많이 사용하는 키 = Ctrl + C, 인터럽트키

컨트롤 키 stty명 의미
Ctrl + C intr 현재 명령 중지
Ctrl + D eof 파일의 끝(혹은 입력의 끝)
Ctrl + ₩ quit Ctrl + C가 동작하지 않을 경우
현재 명령 중지
Ctrl + S stop 화면 출력 정지
Ctrl + Q start 화면 출력 다시 시작
Ctrl + ? erase 마지막 문자 삭제
Ctrl + U kill 전체 명령행 삭제
Ctrl + W werase 마지막 단어 삭제
Ctrl + Z susp 현재 명령 일시 중단

 

4. 배시 셸 명령 다루기

나만의 명령 만들기 : alias

alias [ 별칭 = 명령 ]

- 명령어에 다른 이름을 정의하여 사용

- 긴 명령어 대신 짧은 별칭을 사용

- 자주 사용하는 옵션 자동 수행

- 여러 명령을 하나의 명령으로 대체 가능

- 단 명령에 인자가 필요한 경우, 인자를 넘겨주지는 못함

 

■ alias 명령

- 앨리어스의 설정

- 앨리어스의 해제

- 앨리어스에 인자 전달하기

 

■ 앨리어스의 설정

- 파일 이름과 종류를 동시에 출력 -> 옵션 -F 사용

- 파일 삭제 시 복구가 불가능 함 -> -i 옵션을 사용하여 삭제 여부 확인

 

 

■ 앨리어스의 해제

- 앨리어스를 삭제하기 위해서는 unalias 명령 사용

 

■ 앨리어스에 인자 전달하기

- 배시 셸에서 인자를 전달하려면 함수를 이용

 

이전에 입력한 명령 사용하기

- 이전 명령 보기 : fc

- 명령 재실행하기 : !

- 명령 편집하기 : 화살표 키, 또는 Esc + k

- 명령 탐색하기 : Esc + /

 

■ 이전 명령 보기 : fc

- 사용자가 입력한 명령을 사용자 홈 디렉토리 아래의 특수한 파일에 저장

 

■ 명령 재실행하기 : !

- 히스토리의 장점 : 명령을 재입력하지 않고 반복 실행 가능

 

- 이전에 실행했던 명령을 반복 실행하는 기능

- 이벤트 지정자를 이용하여 명령 실행

명령 설명
!! 마지막 명령 실행
!n n번재 명령 실행
!-n 현재 명령에서 뒤로 n번째 명령
!문자열 주어진 문자열로 시작하는 명령 중 마지막 명령
<이벤트명령>:p !!, !n 등 이벤트 지정자로 지정한 명령을 실행하지 않고 화면에 출력
!?문자열? 주어진 문자열을 포함하는 명령 중 마지막 명령. ?는 선택항목
^문자열1^문자열2 마지막 명령의 문자열1을 문자열2로 대체하여 다시 실행

 

■ 명령 편집하기 : 화살표 키, 또는 Esc + k

- 이전 명령을 편집하여 다시 실행

- 방법

>> ↑ 또는 ↓ 화살표키를 이용하여 이전 명령을 불러옴

>> ← 또는 → 화살표키를 이용하여 수정할 위치로 커서 이동

>> [Del] 또는 [←] 키를 이용하여 수정할 내용 삭제 후 새로운 내용 입력

 

- 명령어 편집기로 vim 사용 설정

- 명령어 편집 시작 키

>> 가장 최근의 명령이 나타남

>> Vim j, k 명령을 이용하여 이전, 다음 명령 호출

>> Vim h, l 명령을 이용하여 명령 중 수정할 위치로 이동

>> Vim 편집 명령 (x, cw등)을 이용하여 명령 편집

 

■ 명령 탐색하기 : Esc + /

- Vim 편집기의 문자열 탐색

- 탐색은 Esc + Esc /를 이용

- 명령 수행은 Enter 키

- 편집하려면 h, l, x, r 명령 이용

 

5. 프롬프트 설정하기

배시 셸 프롬프트의 설정

● 프롬프트

- 명령 입력을 기다리는 시스템의 상태 표시

 

● 기본 프롬프트 모양

- 배시 셸, 본 셸, 콘 셸 : $

- C 셸 : %

 

프롬프트 설정

- 환경 변수 PS1에 저장된 값을 프롬프트로 사용

- PS1 값 확인

 

배시 셸 프롬프트의 설정

 

컬러 프롬프트의 설정

- 이스케이프 시퀀스

- 컬러 프롬프트 정의 형식

- 컬러 프롬프트 설정하기

memo : 잘 사용 안함

 

■ 이스케이프 시퀀스

- 단말기의 제어를 위해 정의된 문자열

- 셸에 출력되지는 않음

 

■ 컬러 프롬프트 정의 형식

PS1 = '₩[₩e[x;y;nm₩] 프롬프트 ₩[₩e[x;y;0m₩]'

- ₩[ ~₩]: 이 사이의 문자들은 화면에 출력되지 않음

- \e : 이스케이프 문자. 단말기 제어의 시작을 알림 (\e ~ m 사이에 프롬프트 컬러 색상 지정)

- x;y 컬러 번호 (x는 글자, y는 배경)

- n : 특수 기능 (밑줄, 역상 등)

- 프롬프트 : 프롬프트로 사용할 문자열

 

6. 환경 설정 파일 설정하기

환경 설정 파일의 종류

■ 환경 설정 파일

- 사용자가 로그인할 때마다 자동으로 실행되는 명령을 저장

- 시스템 초기화 파일

    - 환경 변수 설정

    - 기본 명령어  경로 설정

    - 기본 터미널 설정

    - 사용자 접속시 관리자의 인사말 출력

- 사용자의 초기화 파일

    - 기본 프롬프트 설정

    - 사용 권한 설정

    - 명령어 경로 설정

    - 사용자 앨리어스 설정

    - 기타 환경 설정

 

사용자 초기화 파일 만들기

- 사용자 홈 디렉토리에 위치

- 사용자별 환경 설정 : 프롬프트, 경로, 앨리어스 등

 

사용자 초기화 파일 실행하기

- .profile or .bashrc 파일을 처음 작성하거나 내용을 수정했을 시

→ source 명령어를 사용 → .profile이나 .bashrc를 실행