이건 깃헙의 TIL에도 올렸지만 한 번 더 블로그에 정리하고자...
쉘 개요
쉘 사용법을 전반적으로 요약, 아직 생략된 부분이 있다. 차차 업로드 할 것
쉘은 명령어 해석기 이면서 스크립트 언어
어떤 리눅스 배포판을 사용하든지 기본 셸로는 Bash셸이 제공된다.
- 명령행 : 명령을 입력할 수 있는 라인
- 터미널 띄우면 명령 프롬프트가 표시된다.
- 기본 프롬프트는 $, 루트 사용자는 #이다.
셸 선택하기
- 기본 셸 변경 :
chsh -s 쉘의 이름
- 터미널 창은 대화형 셸, 종료시엔 exit 혹은 ctrl + d
- 셸 프롬프트에서 셸 실행시 서브셸 실행된다. (sh)
- 서브셸의 실행시 자식 프로세스로 실행된다.
- chsh시 사용자가 생략되면 사용자 본인을 대상으로함. 다른 사용자의 셸을 바꾸려면 권한이 있어야 한다.
chsh의 옵션
-l
: /etc/shells에 기록된 가용한 셀을 나열한다.
-> 현재 centos에서 실행시 chsh 안됨.-s shell
: 로그인 쉘을 변경. chsl -s /bin/lssh 과 같이-u
: 도움말 출력
셸 명령
가장 간단하게 명령을 수행하는 방법은 명령어의 이름만을 타이핑 하는 것이다.
기본적인 셸 명령의 형식 : 명령어 옵션 인수(command option arguments)
- 짧은 옵션 (-)
- ls -l
- ls -lat와 ls -l -a -t는 같은 것
- 긴 옵션 (—)
- ls —all
- 인수는 명령의 수행 대상을 지정하는 것
cat -n /etc/passwd
grep 'Garin' /etc/passwd
- 옵션도 인수를 가질 수 있음 ex )
chsh -s /bin/sh garin
명령의 종류
셸의 모든 명령이 환경 변수 PATH에 포함되어 있는 디렉터리에 실행 파일로 존재해야 하는 것이 아닌
셸 자체에 내장된 내장명령도 있음.
종류
- 에일리어스 : alias 명령을 사용하여 특정 명령을 옵션과 함꼐 짧은 별칭으로 정의해 둘 수 있다.
- 셸 예약어 : 셸에서 예약된 단어로. 셸 스크립트 작성 시 사용되는 do, while, case, else등을 말한다.
- 함수 : 셸에서 수행될 수 있는 일련의 명령을 함수롤 정의한 것
- 내장 명령 : 셸 내부에 만들어져 있는 명령으로 cd, echo, pwd등 man builtin을 실행하면 내장 명령의 사용법을 확인할 수 있다.
- 일반 명령 : 파일 시스템에 실행 파일로 존재하는 명령어
환경 변수 PATH에 설정된 경로 중에 실행파일이 존재하면 이름만으로 실행이 가능하다. 아니면 절대 경로를 사용해야 한다.
현재 디렉터리 (.)는 보통 PATH 에 포함되어 있지 않음
echo $PATH로 저장된 경로를 확인할 수 있다.
단축 명령 만들기 : alias
자주 사용되는 명령의 별칭을 만드는 것
alias 변수='명령어'
ex ) alias rm='rm -i'
해제시에는 unalias rm
과 같이 수행
실행 프로그램 찾기 : which
실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력
which rm
명령의 해석 방법 알기 : Type
특정 명령을 어떻게 해석하는지 알기 위해
실행파일의 위치를 보여줌
여러 유형으로 명령이 존재하는 경우 -a 옵션을 이용
ex ) type -a ls
실행 프로그램 확인 : whereis
찾고자 하는 명령을 whereis 명령의 인수로 지정하여 실행하면
명령의 실행 프로그램이 어디에 있는지 찾아서 알려 준다.
ex ) whereis which
온라인 매뉴얼 페이지 보기 : man
명령의 사용법이나 설정 파일 등에 관한 온라인 도움말을 제공
명령 히스토리
이전에 수행했던 명령의 이력을 조회할 수 있다.
history명령
이전에 수행했던 명령행의 목록을 불러옴
- history , history 10등
다음의 기능을 이용하여 명령 실행 가능
기본적으로 탭을 이용하여 자동완성을 제공한다.
명령의 연결과 확장
특수문자
셸에서 특별한 의미를 가짐
- 백슬래시 () : 특수 문자의 기능을 제거하는 이스케이프. 혹은 긴 명령 행을 분리할 때 사용
- 틸트(~) - 또는 —username은 사용자의 홈 디렉터리를 의미
- 도트 (.) : 현재 작업 디렉터리를 표시한다.
또는 명령 행의 맨 앞에서 쉘 스크립트를 실행하는 source명령 - 더블도트(..) : 현재 디렉터리의 부모 디렉터리
- 파운드 (#) : # 문자와 뒤에 나타나는 문자를 주석으로 처리
- 달러($) : $ 변수는 변수의 값을 추출
파이프와 입출력 리다이렉션
파이프 문자를 사용하면 한 명령의 출력을 다음 명령의 입력으로 연결시킬 수 있음 (파이프라인)
ex ) cat /etc/passwd | sort
명령을 수행할 때 필요한 입력을 표준입력(키보드)로 읽어 들이지 않고 파일로부터 입력을 얻을 수 있다.
왼쪽 화살 괄호를 사용하면 표준 입력을 지정된 파일로 리다이렉션하는 기능을 제공한다.
명령의 결과를 화면에 출력하지 않고 파일에 기록할 수도 있다.
오른쪽 화살 괄호를 사용하여 표준출력을 지정된 파일로 리 다이렉션 할 수 있다.
명령 치환
명령을 수행할 때, 명령의 인수로서 다른 명령의 결과를 사용
S(command)
or command
(백틱에 주의)
인용 부호
- 빈칸을 포함하는 문자열을 1개의 인수로 사용할 때 인용부호를 사용한다.
- 작은 따옴표는 특수 문자의 의미를 제거한다.
- 큰 따옴표는 $, ``, , ! 를 해석하여 확장한다.
echo $(date)"
→ 날짜 출력echo "\$(date)"
→ $(date)출력echo 'Today is $(date)'
→ Today is $(date)출력
수식과 변수의 확장
셸은 셸 변수를 사용하여 정보를 저장할 수 있다.
셸 변수는 문자열 정보를 갖는다.
현재 사용중인 셸에서 설정되어 있는 모든 변수를 확인하려면 옵션이나 인수를 사용하지 않고 단순히 set 명령을 사용.
수식의 결과를 명령 수행 전에 전달한다.
$[수식] 또는 $((수식))
변수의 값을 추출하여 명령 수행 전 전달 한다.
환경 변수
셸 변수와 유사하나 새로운 서브셸이 만들어 질 때에 전달된다. 마치 전역변수처럼 사용이 된다.
보통 대문자를 사용하며 단순히 env 또는 printenv명령을 사용.
변수 설정과 환경 변수로 만들기 위해선
변수=값
->export 변수
특정 환경 변수의 값을 확인
printenv 변수
echo $변수
는 모든 종류 변수 값을 확인할 수 있음