셸(shell)
셸은 사용자와 리눅스 커널 사이에서 중간자 역할을 수행한다.
명령어 해석기 기능, 프로그래밍 기능, 사용자 환경 설정 기능을 제공한다.
본 셸(sh), C 셸(csh), 콘 셸(ksh), 배시 셸(bash) 등이 있다.
로그인 셸은 /etc/passwd 파일에 지정하며 chsh 명령으로 변경할 수 있다. (셸을 절대 경로로 지정)
로그인 셸에서 여러 개의 서브 셸을 생성할 수 있다. 서브 셸이 종료되면 이전 셸 환경으로 돌아가며 로그인 셸을 종료하면 접속이 해제된다.
셸 특수문자
특수문자 | 기능 | 예시 |
* | 임의의 문자 또는 문자열 | $ ls t* |
? | 임의의 한 문자 | $ ls t?.txt |
[ ] | 문자의 범위 표시에 해당하는 하나의 문자 | $ ls [0-9]* |
~ | 홈 디렉터리 | $ cd ~user1 |
- | 이전 작업 디렉터리 | $ cd - |
; | 행에 여러 개의 명령 입력 (명령어와 명령어 사이를 구분) |
$ date;ls;pwd |
| | 왼쪽 명령의 결과를 오른쪽 명령의 입력으로 전달 | $ ls -al | more |
' ' | 모든 셸 문자 무시 | $ echo '$HOME' |
" " | $,`,\을 제외한 모든 셸 문자 무시 | $ echo '$HOME' |
` ` | ` `사이에 있는 셸 명령 실행 | $ echo `date` |
\ | 특수문자 기능 제거 | $ echo "\$HOME" |
파일 디스크립터(file descriptor)
셸은 작업 중 필요한 파일에 일련 번호를 붙여 관리하는데 이를 파일 디스크립터라고 한다.
파일 디스크립터 | 파일 디스크립터 대신 사용하는 이름 | 정의 |
0 | stdin | 명령의 표준 입력 |
1 | stdout | 명령의 표준 출력 |
2 | stderr | 명령의 표준 오류 |
입출력 방향 바꾸기(리다이렉션)
출력 리다이렉션 : >, >>
예시) ls -al > ls.out --- ls -al 명령의 결과를 ls.out 파일에 저장
>일 경우 파일이 없으면 새로운 파일 생성, 있으면 덮어쓰기
>>일 경우 파일이 없으면 새로운 파일 생성, 있으면 이어서 작성(append)
오류 리다이렉션 : 2>
예시) find ~ -name tmp.txt 2> /dev/null --- find 명령 중 나온 오류를 /dev/null 파일에 저장
/dev/null에 저장된 것들은 모두 지워짐(복구 불가)
입력 리다이렉션 : <
예시) cat < out.txt --- cat 명령의 입력으로 out.txt 파일을 지정(out.txt 파일의 내용이 출력 됨)
셸 변수와 환경 변수
셸 변수 : 지정한 셸에서만 사용할 수 있다. 지역 변수와 유사
환경 변수 : 전체 셸에서 사용할 수 있다. 전역 변수와 유사
동작 | 설정 방법 | 예시 |
변수 정의 | 셸 변수 : 변수명=문자열 환경 변수 : export 변수명=문자열 export 변수명=셸변수명 (변수명과 문자열 사이에 공백이 존재해선 안 됨) |
$ data=321 $ export PS1="Linux $" |
변수 정의 해제 | unset 변수 (환경 변수 -> 셸 변수 : export -n 명령 사용) |
$unset data |
전체 변수 출력 | set, env set : 셸 변수, env : 환경 변수 |
$ set $ env |
특정 변수 출력 | echo $변수 | $ echo $HOME |
<주요 환경 변수>
환경 변수 | 의미 | 환경 변수 | 의미 |
HISTSIZE | 히스토리 저장 크기 | PATH | 명령을 탐색할 경로 |
HOME | 사용자 홈 디렉터리의 절대 경로 | PWD | 작업 디렉터리의 절대 경로 |
LANG | 사용하는 언어 | SHELL | 로그인 셸 |
LOGNAME | 사용자 계정 이름 |
에일리어스(alias)와 히스토리(history)
에일리어스 : 명령에 다른 별칭을 붙인다.
에일리어스 생성 | alias 이름='명령' (이름과 명령 사이에 공백이 존재해선 안 됨) |
$ alias ls='ls -lF' |
에일리어스 삭제 | unalias 에일리어스 | $ unalias ls |
히스토리 : 사용한 명령을 기억했다가 재실행 하는 기능
히스토리 목록 보기 | history |
이전 명령 불러오기 | !c : c로 시작하는 가장 최근에 실행한 명령 재실행 !120 : 120행 라인의 명령 재실행 |
명령 편집 | 화살표 키를 사용하여 명령을 불러오고 수정할 수 있다 |
프롬프트 설정
환경 변수 PS1에 프롬프트로 사용할 문자열을 저장한다.
터미널을 제어하는 특수문자를 사용하면 컬러 프롬프트를 만들 수 있다.
예시) PS1='\[\e[35;43m\]\u@\h $\[\e[0;0m\]' --- 우분투 리눅스 기준
<우분투의 이스케이프 문자>
이스케이프 문자 | 기능 |
\a | ASCII 종소리 문자(07) |
\d | '요일 월 일' 형식으로 날짜를 표시 ex) Wed May 1 |
\e | ASCII의 이스케이프 문자로 터미널에 고급 옵션 전달 |
\h | 첫 번째 .(마침표)까지의 호스트 이름 ex) server.co.kr에서 server |
\H | 전체 호스트 이름 |
\n | 줄 바꾸기 |
\s | 셸 이름 |
\t | 24시간 형식으로 현재 시간 표시(HH:MM:SS) |
\T | 12시간 형식으로 현재 시간 표시(HH:MM:SS) |
\@ | 12시간 형식으로 현재 시간 표시(오전/오후) |
\u | 사용자 이름 |
\v | 배시 셸의 버전 |
\w | 현재 작업의 디렉터리(절대 경로) |
\W | 현재 작업 디렉터리의 절대 경로에서 마지막 디렉터리명 |
\! | 현재 명령의 히스토리 번호 |
\[ | 출력하지 않을 문자열의 시작 부분을 표시 |
\] | 출력하지 않을 문자열의 끝 부분을 표시 |
환경 설정 파일
시스템 환경 설정 파일과 사용자 환경 설정 파일로 구분된다.
시스템 환경 설정 파일은 시스템을 사용하는 전체 사용자의 공통 환경을 설정하는 파일로 모든 사용자가 로그인할 때마다 무조건 실행된다.
시스템 환경 설정 파일은 일반 사용자가 수정할 수 없으며 시스템 관리자가 관리한다.
로그인 시 [시스템 환경 설정 파일 -> 사용자 환경 설정 파일]의 순서로 실행하여 사용자 환경을 설정한다.
<배시 셸의 시스템 환경 설정 파일>
파일 | 기능 |
/etc/profile | 본 셸이나 본 셸과 호환되는 모든 셸에 공통으로 적용되는 파일. 배시 셸은 /etc/bash.bashrc 파일을 실행한다. 배시 셸이 아닌 경우 프롬프트를 #(root)나 $(일반 사용자)로 설정 /etc/profile.d/*sh 파일을 실행한다. |
/etc/bash.bashrc | 시스템 공통으로 적용된다. 기본 프롬프트를 설정한다. sudo 명령과 관련된 힌트를 설정한다. |
/etc/profile.d/*sh | 언어나 명령별로 각각 필요한 환경을 설정한다. 필요시 설정 파일을 추가한다. |
<배시 셸의 사용자 환경 설정 파일>
파일 | 기능 |
~/.profile | 경로 추가 등 사용자가 정의하는 환경을 설정한다. .bashrc 파일이 있으면 실행한다. |
~/.bashrc | 히스토리의 크기를 설정한다. 기본 에일리어스나 함수 등을 설정한다. |
~/.bash_aliases | 사용자가 정의한 에일리어스를 별도 파일로 저장한다. |
~/.bash_logout | 로그아웃 시 실행할 필요가 있는 함수 등을 설정한다. |
사용자 환경 설정 파일을 수정했을 때 이를 적용하려면 로그아웃했다가 다시 로그인하거나, source 또는 .(마침표) 명령을 사용하여 환경 설정 파일을 실행해야 한다.
'development > Linux' 카테고리의 다른 글
[우분투 리눅스] 파일 시스템과 디스크 관리 (0) | 2022.07.27 |
---|---|
[우분투 리눅스] 프로세스 관리하기 (0) | 2022.07.23 |
[우분투 리눅스] 파일 접근 권한 관리하기 (0) | 2022.07.20 |
[우분투 리눅스] vi 기초 사용법 (0) | 2022.07.12 |
[우분투 리눅스] 디렉터리와 파일 기초 명령어 (0) | 2022.07.12 |