Bash - 윈디하나의 솔라나라

목차

컨텐츠 수정중
컨텐츠 수정중입니다..

개요

Shellshock 주의

2014년 9월에 알려진 Bashdoor 로 알려져있는 Shellshock 버그로 인해, 반드시 Bash 4.3(027) 이후 버전을 사용할 것을 권장한다.

아래와 같이 실행되면 문제가 있으며 반드시 패치해야 한다.

windy@wl ~ $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
windy@wl ~ $ env X='() { (a)=>\' bash -c "echo date"; cat echo
/bin/bash: X: line 1: syntax error near unexpected token `='
/bin/bash: X: line 1: `'
/bin/bash: error importing function definition for `X'
2015년 X월  X일 화요일 오전 10시 21분 56초

패치한 경우 아래와 같이 실행된다.

windy@wl ~ $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
this is a test
windy@wl ~ $ env X='() { (a)=>\' bash -c "echo date"; cat echo
date
2015년 X월  X일 화요일 오전 10시 21분 56초
자세한 사항은 CVE-2014-6271, CVE-2014-6277, CVE-2014-6278, CVE-2014-7169, CVE-2014-7186, CVE-2014-7187 을 참조하자.

설치

자동 실행 스크립트 위치

기본 기능 설명

내장 명령

셸에 내장되어있는 명령에 대해 간단히 설명한다. 전체 내용은 셸 내장 명령을 참조하자.

변수

배시 기능

작업제어

TODO

커맨드라인 편집

커맨드를 입력하는 곳에서의 단축키에 대한 설명이다. Alt 키 대신 Esc 키를 사용할 수 있다.

히스토리

시그널

인자

인자를 해석하는 규칙에 대해 설명한다. bash는 -를 옵션 구분자로 인식하며, -- 다음에 나오는 -는 옵션으로 인식하지 않는다. (이 스펙은 getopt 의 스펙과 같다. 윈디하나의 솔라나라: 유틸리티 규약, getopt, gettext를 읽어보자) *와 ?는 bash에 의해 해석된 후 인자가 넘어간다.
windy@wl ~/argtest $ touch file1
windy@wl ~/argtest $ touch file2
windy@wl ~/argtest $ touch -- "-al"
windy@wl ~/argtest $ cat arg
#!/bin/bash
echo $@
windy@wl ~/argtest $ chmod +x arg
windy@wl ~/argtest $ ls -alhF
총 4
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 -al
-rwxr-xr-x   1 windy    staff         20  2월 19일  00:00 arg*
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 file1
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 file2
windy@wl ~/argtest $ ls
-al    arg    file1  file2
windy@wl ~/argtest $ ls * 1)
-rwxr-xr-x   1 windy    staff         20  2월 19일  00:00 arg
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 file1
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 file2
windy@wl ~/argtest $ ls -al -- -al 2)
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 -al
windy@wl ~/argtest $ ./arg *
-al arg file1 file2
windy@wl ~/argtest $ ls "*"
*: 해당 파일이나 디렉토리가 없음
windy@wl ~/argtest $ ./arg -- -f
-- -f
windy@wl ~/argtest $ rm -- -al 3)
windy@wl ~/argtest $ ls -lhF
총 4
-rwxr-xr-x   1 windy    staff         20  2월 19일  00:00 arg*
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 file1
-rw-r--r--   1 windy    staff          0  2월 19일  00:00 file2
windy@wl ~/argtest $
1) 이 챕터의 핵심이다. 셸이 * 을 해석해 넘겨준 '-al' 은 ls 에 의해 옵션으로 해석되었다.
2) 솔라리스의 /usr/bin/ls는 -- 를 처리한다.
3) touch, ls, rm 은 -- 을 [옵션의 끝]으로 인식해 처리한다. rm(1)에 -- 의 처리 방식에 대해 나와있다. (touch, ls의 경우 매뉴얼에는 명시되어있지 않지만 처리한다)
RSS ATOM XHTML 5 CSS3