셸 사용하기
학습 개요
셸은 명령 행 인터페이스를 제공한다.
셸 명령의 기본 사용법과 온라인 매뉴얼의 활용법을 살펴본다.
셸이 제공하는 강력한 기능으로 파이프, 입출력 리다이렉션, 명령 치환, 수식과 변수의 확장 및 환경 변수와 환경 설절 파일 등을 학습한다.학습 목표
- 셸 명령의 기본 사용법을 익히고 온라인 매뉴얼 기능을 활용할 수 있다.
- 히스토리 기능과 명령 행 자동 완성 기능을 사용할 수 있다.
- 셸의 특수문자, 명령 치환, 수식과 변수의 확장에 관해 설명할 수 있다.
- 셸의 환경 설정 파일을 나열하고 설명할 수 있다.
셸 개요
Shell
- 명령어 해석기 또는 명령 행 인터페이스
- 사용자와 커널 사이에서 명령어를 해석하여 처리
- 셸 명령을 사용하면 GUI로는 하기 힘든 다양한 기능을 수행할 수 있음
- 셸 명령을 프로그램으로 작성하여 처리할 수도 있음
- 셸 스크립트는 텍스트 파일로, 프로그래밍을 통한 셸 명령의 조합
- 반복적으로 수행되는 작업을 셸 스크립트로 작성할 수 있음
- 셸이 쉘 스크립트 파일을 읽어 처리할 수 있음
- 로그인을 하면 기본 셸이 주어짐.
Shell 사용하기
- 터미널에서 로그인을 해야 함
- GNOME 데스크톱에서 터미널 창을 실행 시켜 셸을 사용함
- '프로그램 > 시스템도구 > 터미널'
- 여러 터미널 창을 띄워 사용할 수 있음
- 셸은 명령 프로프트와 명령 행을 제공함
- 기본적으로 한 라인에 명령을 입력하고
Enter
를 쳐 명령을 수행함- 결과가 출력되면 명령 프롬프트가 다시 등장함
- 세미콜론(;)을 사용하면 한 라인에 여러 명령을 입력할 수 있음
Shell의 종류
- 많은 리눅스 배포판에서 bash를 기본 셸로 사용함
- 명령 프롬프드로 일반 사용자는 $, root 사용자는 #을 사용함
- 셸의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성, 명령 행 완성 기능, 명령 행 편집 기능 등에 차이가 있음
bash shell
- Bourne Again Shell로 Bourne Shell의 개선된 버전
- 많은 셸 스크립트의 문법이 Bourne Shell에 기반을 둠
- C Shell과 Korn Shell의 유용한 기능을 가져옴
- 실행 명령은 /bin/bash
- /etc/passwd 파일에 다음과 같은 라인이 있음
- jeaha:x:500:500:jeaha:/home/jeaha:/bin/bash
셸 선택하기
- 기본 셸을 변경할 수 있음
- chsh -s /bin/셸이름
- 터미널 창은 대화형 셸임
- 셸을 종료하면 exit 명령어 또는
ctrl + d
를 실행
- 셸을 종료하면 exit 명령어 또는
- 로그인 셸과 비로그인 셸을 구분해야 함.
logout
명령은 로그인 셸에서만 사용 가능- 셸 프롬프트에서 셸 프로그램을 실행하면 '서브 셸'이 실행 됨
셸 명령
셸 명령의 형식과 실행
- $명령어 옵션 인수
- 예)
usermod -L jeaha
- 옵션과 인수는 여럿일 수 있으며 선택적 또는 필수적
- 예)
- 명령어는 프로그램의 이름
- 가장 간단한 형태의 실행은 명령의 이름만 사용
who
,date
,ls
,pwd
chsh 명령
- 기본 셸을 바꾸는 명령
chsh [*option*] [*username*]
- 대괄호는 생략 가능, 이텔릭체는 적당한 내용으로 대체해야 함
- 복수는 여러 개가 가능하다는 의미
옵션과 인수
- 짧은 옵션 -
li -l
ls -lat
와ls -l -a -t
는 같은 것
- 긴 옵션 --
ls --all
- 인수는 명령의 수행 대상을 지정하는 것
cat -n /etc/passwd
grep "jeaha" /etc/passwd
- 옵션도 인수를 가질 수 있음
chsh -s /bin/sh jeaha
chsh --shell=/bin/bash jeaha
명령어의 종류
명령어 | 설명 |
---|---|
엘리어스 | alias 명령을 사용하여 만든 명령의 별칭 |
셸 예약어 | 예약된 단어로 do , while , case 등 |
함수 | 셸에서 수행되는 함수의 정의 |
내장 명령 | 셸 내부에 존재하는 명령으로 cd , echo , pwd 등 |
일반 명령 | 실행 파일이 존재하는 명령 |
환경 변수 PATH에 설정된 경로 중에 실행 파일이 존재하면 이름만으로 실행이 가능
- 아니면 절대경로를 사용해야 함
- 현재 디렉토리(.)는 보통 PATH에 포함되어 있지 않음
echo $PATH
로 저장된 경로를 확인할 수 있음
alias
자주 사용되는 명령의 단축 명령을 만드는 명령.
계속 유지하려면 셸의 환경 설정 파일에 기록해 두어야 함.
- alias
- alias la=
ls -a
- alias rm=
rm -i
type
명령이 어떻게 해석 되는지 알려주는 명령
- type cd
- type -a ls
which
실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력함
which rm
- 비슷한 명령으로
whereis
가 있음
man
메뉴얼 페이지를 보여줌
- 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말 제공
man passwd
또는man 5 passwd
- 명령어의 간단한 도움말을 보려면
명령 --help
를 사용할 수 있음.
섹션 | 내용 | 섹션 | 내용 |
---|---|---|---|
1 | 사용자 명령 | 5 | 시스템 설정 파일 |
2 | 커널의 시스템 호출 | 6 | 게임 |
3 | C 라이브러리 함수 | 7 | 파일 포멧, 인코딩 등 |
4 | 디바이스 드라이버 정보 | 8 | 시스템 관리 명령 |
history
이전에 수행했던 명령 행의 목록을 불러옴
history
또는history 10
히스토리 기능을 이용하여 명령을 실행하는 방법
- 이전에 수행했던 명령을 이용하여 명령을 수행할 수 있음.
- 다음을 입력하고 실행함.
- 명령 행 편집도 가능
입력 방법 | 설명 |
---|---|
!! | 직전 명령을 불러옴 |
!n | 히스토리 목록에서 해당 명령을 불러옴 |
!string | 지정된 문자열로 시작되는 최근 명령을 불러옴 |
up or down | 누를 때마다 직전 또는 직후 명령을 불러옴 |
명령 행 자동 완성
- 일부만 입력하고 나머지를 자동으로 완성하는 기능
- 처음 몇 자만 입력한 후, tab 키를 누르면 실행됨
- 명령어, 변수, 파일, 디렉토리 등을 구분하여 결정함
- 정보가 충분하지 않은 경우, tab 키를 한번 더 누르면 모든 가능한 경우를 보여주고 원래의 명령 행이 유지 됨
명령의 연결과 확장
특수문자
셸에서 특별한 의미를 가지는 문자
문자 | 의미 |
---|---|
\ | 특수 문자의 기능을 제거하는 escape 문자 또는 긴 명령 행을 분리할 때 사용 |
~ | ~ 또는 ~username 은 사용자의 홈 디렉토리를 의미 |
. | 현재 작업 디렉토리를 표시 또는 명령 행의 맨 앞에서 셸 스크립트를 실행하는 source 명령 |
.. | 현재 디렉토리의 부모 디렉토리 |
# | # 문자의 뒤에 나타나는 문자를 주석으로 처리 |
$ | $ *변수* 는 변수의 값을 추출 |
& | 명령& 는 명령을 백그라운드로 실행시킴 |
* | 파일 이름에서 사용할 때, 0 개 이상의 임의 문자열과 대응됨 |
? | 파일 이름에서 사용할 때, 1 개 문자와 대응됨 |
| | 앞 명령의 출력을 다음 명령의 입력으로 연결 시킴 |
<또는> | 입출력 리다이렉션에서, 즉 파일로부터 입력 받을 때 또는 파일로 출력할 때 사용 |
>> | 표준 출력을 파일의 끝에 덧붙일 때 사용 |
! | 명령 히스토리 기능을 이용할 때 사용 |
파이프
앞 명령의 출력 결과를 다음 명령의 입력으로 연결
명령1 | 명령2
cat /etc/passwd | sort | more
입출력 리다이렉션
명령 < 파일
: 명령 수행에 필요한 표준 입력 대신 파일로부터 얻음sort < /etc/passwd
명령 > 파일
: 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함grep typedef /usr/include/* > typedef.out
명령2 > 파일
: 명령 수행 중 표준 오류 출력을 파일에 덧붙임ls 2 >> error.txt
명령 치환
명령을 수행할 때, 명령의 인수로서 다른 명령의 결과를 사용
$(command)
또는 `command`
➜ UNIX git:(master) ✗ ls -l $(which passwd)
-rwxr-xr-x 1 root wheel 45312 Sep 22 09:29 /usr/bin/passwd
➜ UNIX git:(master) ✗ which passwd
/usr/bin/passwd
➜ UNIX git:(master) ✗ ls -l /usr/bin/passwd
-rwxr-xr-x 1 root wheel 45312 Sep 22 09:29 /usr/bin/passwd
➜ UNIX git:(master) ✗
인용 부호
- 빈칸을 포함하는 문자열을 개의 인수로 사용할 때 인용 부호가 필요함
- 작은 따옴표 ''는 특수 문자의 의미를 제거함
- 큰 따옴표 ""는 $, ``, , !를 해석하여 확장함.
➜ UNIX git:(master) ✗ echo "$(date)"
Fri Oct 16 19:29:05 KST 2020
➜ UNIX git:(master) ✗ echo "\$(date)"
$(date)
➜ UNIX git:(master) ✗ echo 'Today is $(date)'
Today is $(date)
➜ UNIX git:(master) ✗
수식과 변수의 확장
- 수식의 결과를 명령 수행 전에 전달
$[수식] 또는 $((수식))
- 변수의 값을 추출하여 명령 수행 전에 전달
$변수
➜ UNIX git:(master) ✗ echo "I am $[ 2020 - 1992 ] years old."
I am 28 years old.
➜ UNIX git:(master) ✗ echo BASH
BASH
➜ UNIX git:(master) ✗ ls -l $BASH
total 24
-rw-r--r-- 1 jeahasorrowkissed staff 10623 Oct 16 19:31 03_Use_Shell.md
drwxr-xr-x 4 jeahasorrowkissed staff 128 Oct 16 16:51 Lecture
drwxr-xr-x 11 jeahasorrowkissed staff 352 Oct 15 17:46 중간과제
셸 변수
셸 변수와 환경 변수
셸 변수는 셸의 환경을 설정하기 위함 값을 저장
- 모든 변수와 값을 출력하기 위해
set
명령을 사용
- 모든 변수와 값을 출력하기 위해
셸 변수
- 현재 셸에서만 사용이 가능하고 서브 셸로는 전달되지 않음(지역변수)
환경 변수
- 현재 셸뿐만 아니라 서브 셸로도 전달 (전역 변수)
- 보통 변수 이름으로 대문자를 사용함
- 터미널 창을 열어 셸을 시작하면 이미 많은 환경 변수가 설정되어 있음
- 모든 환경 변수와 값을 출력하기 위해
prrntenv
명령을 사용
변수 설정과 환경 변수로 만드는 방법
변수=값
export 변수
특정 환경 변수의 값 확인하는 방법
printenv 변수
echo $변수
는 모든 종류의 변수 값을 확인할 수 있음
➜ UNIX git:(master) ✗ FOO=bar
➜ UNIX git:(master) ✗ export FOO
➜ UNIX git:(master) ✗ sh
sh-3.2$ echo $FOO
bar
sh-3.2$ printenv FOO
bar
sh-3.2$ exit
exit
➜ UNIX git:(master) ✗ unset FOO
자주 사용되는 환경 변수
변수 | 내용 |
---|---|
HISTSIZE | 1개 셸에서 저장되는 명령 히스토리 목록의 최대 개수로 기본 값은 1000 |
HOME | 홈 디렉토리 |
사용자의 메일박스에 해당하는 파일로 보통 /var/spool/mail/username | |
PATH | 명령을 수행할 때 실행 파일을 찾기 위한 디렉초리 목록 |
PS1 | 셸 프롬프트를 표시하기 위한 문자열 |
SHELL | 사용 중인 기본 셸 |
PWD | 현재 작업 디렉토리 |
USER | 현재 사용자 계정 |
로그인과 셸의 환경 설정 파일
- 로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일
- 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
- 셸의 종류에 따라 다른 이름의 파일을 사용함
- bash 셸의 경우 다음과 같음.
파일 | 설명 |
---|---|
/etc/profile | 모든 사용자에게 적용. 로그인할 때 가장 먼저 수행 됨 PATH, MAIL, HISTZISE 등 전역의 환경 변수가 설정됨 |
~/.bash_profile | 로그인할 때 수행되며 개별 사용자에게 적용됨 보통 내부에서 ~./bashrc를 수행 |
~/.bashrc | 셸을 시작할 때마다 수행되며 개별 사용자에게 적용됨 보통 내부에서 /etc/bashrc를 수행 |
/etc/bashrc | 모든 사용자에게 적용. 셸을 시작할 때마다 수행됨 PS1, alias 설정, umask를 사용한 접근 권한의 초기값, 함수등 설정. |
~/.bash_logout | 로그아웃을 수행할 때 실행되는 스크립트 파일 |
728x90
반응형
'OS > Linux' 카테고리의 다른 글
[Linux] 사용자 관리 (0) | 2020.10.25 |
---|---|
[Linux] 시작과 종료 (0) | 2020.10.24 |
[Linux] 파일과 디렉토리 (0) | 2020.10.24 |
[Linux] 리눅스 설치준비 및 표준 디렉토리 (0) | 2020.10.16 |
[Linux] 리눅스 란 (0) | 2020.10.16 |