명령의 종류
- 빌트인 명령: 쉘이 자체적으로 해석하는 명령
- 외부 명령: /bin또는 /sbin과 은 파일 시스템에 존재하는 바이너리 파일에 해당하는 명령
- 환경변수 PATH에 등록된 순서에 따라 외부 명령을 찾는다.
type 명령을 통해 명령의 종류를 확인할 수 있음
$type -a echo # echo 명령의 종류를 모두 나열
- 이름이 동일한 명령의 경우에는 내부 명령이 외부 명령에 우선하여 실행
- 외부 명령 사용하고 싶을 때는 /bin/echo Hello
which 명령: 외부명령에 해당하는 바이너리 파일의 위치를 알려줌
alias(↔unalias)
기존의 명령을 다른 이름으로 사용할 수 있게 함
- alias show = cat
- alias # alias확인
- unalias # alias 삭제
쉘 확장 과정 보기
#set -x
작업 제어 연산자
다수의 명령으로 이루어진 작업을 제어하는 연산자
- semicolon(;)
- 왼편 → 오른편 순서로 명령을 차례로 수행
- $echo Hello ; echo world
- ampersand(&)
- 쉘은 주어진 명령을 background로 실행하고 그것이 종료할 때까지 기다리지 않음
- $sleep 20 &
- dollar question mark($?)
- 이전 명령의 종료 코드를 반환한다. Linux 명령은 성공적으로 종료하면 0을 반환하고(TRUE로 간주) 그렇지 않으면 0이 아닌 값을 반환한다.(FALSE로 간주)
- $touch file1
- $echo $?
- double ampersand(&&)
- 논리곱(logical AND)로 해석. &&의 왼편 명령이 성공적으로 종료하면(0을 반환하면 TRUE로 취급) 오른편 명령을 계속해서 실행한다.
- $echo first && echo second
- double vertical bar(||)
- 논리합(logical OR)로 해석. ||의 왼편 명령이 실패할 때만(0이 아닌 값을 반환하는 경우이며 FALSE로 취급) 오른편 명령을 실행한다.
- $echo first || echo second; echo third
- $rm file1 && echo It worked! || echo It failed!
- pound sign(#)
- escape character()
- Escape 문자
- $echo Hello \; world
- 명령행 끝의 back slash()
- 라인의 끝에 위치한 \는 명령행이 다음 행으로 계속 이어짐을 나타낸다.
- $echo This command line \
/> is split in three \
/> parts
쉘 변수
쉘에서 사용하는 변수
- $문자를 이용하여 그 값을 사용함
- 쉘 변수는 대소문자 구분
- 쉘에서 쌍따옴표를 사용하면 그 안의 스트링을 쉘이 해석함 (단, 따옴표는 내부 해석x)
- 모든 변수들의 값을 확인하려면 set 명령을 사용
- 변수를 삭제하려면 unset 명령을 사용
주요 변수들
- HOSTNAME
- USER
- UID
- 현재 사용자의 사용자 식별변호(User Identifier)
- SHELL
- HOME
- PS1
- 쉘 프롬프트 형태를 지정
- $echo $PS1
- $PS1 =’next command>’
- PATH
- 쉘 명령에 해당하는 프로그램을 찾는 디렉토리의 순서
- $echo $PATH
- /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:.
변수 사용
export
- 주어진 변수를 자식 쉘에 전달되도록 설정한다.
- export var4
- bash
- echo $var4
env
- 인자가 없으면 export된 변수들을 보여준다
- 명령을 인자로 주면 주어진 환경으로 실행
- env -i는 export된 것들을 모두 취소함
변수를 명확하게 구분해서 나타내려면 ${변수명} 형식으로 나타냄
- $echo Hello ${prefix}man and ${prefix}girl
이 때, 에러 메시지를 발생시키려면, set -u를 사용
쉘 임베딩
명령행에서 새로운 쉘을 실행시킬 수 있음
- $()를 사용하는 방법
- $echo $var1
- $echo $(var1=5;echo $var1)
- $echo $var1
- 백틱을 사용하는 방법
- $echo
cd/etc;ls -d * | grep pass
이전 쉘 명령
!!: 직전 명령을 다시 실행
!pattern: patter에 매칭되는 이전 명령을 다시 실행
history: 현재까지 사용한 명령들을 표시함
- 공백을 먼저 입력하고 명령을 사용하면 history에 저장되지 않는다.
!번호: 이전 명령들 중에서 번호에 해당하는 명령을 다시 실행
파일 이름 확장(file globbing)
asterisk(’*)는 글자가 없거나 하나 이상의 임의의 글자를 나타냄
물음표(?)는 임의의 한 글자를 나타냄
- $ls
- file1 file2 file3 File4 File55 FileA fileab Fileab FileAB fileabc
- $ls File* # File이라는 글자로 시작하는 파일
- $ls *dat # dat라는 글자로 끝나는 파일
- $ls File*dat # File로 시작하고 dat으로 끝나는 파일
- $ls File? # File로 시작하고 한글자로 끝나는 파일
- $ls File?4 # File로 시작하고 임의의 한글자 다음 4로 끝나는 파일
- $ls File?? # File로 시작하고 임의의 두글자로 끝나는 파일
문자 패턴
[]는 대괄호 사이에 있는 임의의 문자에 해당하는 것을 의미함
- ls File[5A] ⇒ FileA
- [a-z], [0-9]
- [!문자]
$ls file[a5][!Z]
echo *하면 파일이 다 나오므로 파일 이름 확장을 막으려면 echo /**