리눅스 셸
IT위키
더 많은 작업
- 사용 가능한 셸 확인
# cat /etc/shells /bin/sh /bin/bash /sbin/nologin
- 사용자별 셸 정보
# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin phpmyadmin:x:501:501::/home/phpmyadmin:/bin/bash
| 파일 | 내용 |
|---|---|
| /etc/shells | 시스템에서 로그인 셸로 쓸 수 있는 셸의 목록. chsh -l 도 이 파일을 보여 준다. chsh 로 바꿀 수 있는 셸은 여기 적힌 것뿐이다
|
| /etc/passwd | 사용자마다 쓰는 로그인 셸이 마지막(일곱째) 필드에 있다 |
| /etc/default/useradd | useradd 로 계정을 만들 때의 기본값. SHELL=/bin/bash 처럼 기본 셸을 정한다
|
| /etc/login.defs | UID·GID 범위, 비밀번호 만료 기본값 등 계정 생성 정책. 셸 목록은 없다 |
| ~/.bash_profile, ~/.bashrc | bash 의 사용자별 환경 설정 |
- 지금 실행 중인 셸은 ps 로 확인한다(CMD 칸에 bash 같은 셸 프로세스가 보인다).
echo $SHELL은 로그인할 때 정해진 로그인 셸의 경로를 보여 줄 뿐이라, 로그인한 뒤 csh 처럼 다른 셸을 실행해도 값이 바뀌지 않는다. 로그인 셸 변경은chsh -s /bin/zsh로 한다.
| 명령 | 보여 주는 것 |
|---|---|
cat /etc/shells, chsh -l |
사용 가능한 셸 목록 |
echo $SHELL |
내 로그인 셸 하나(환경 변수 SHELL 의 값) |
ps |
지금 실행 중인 셸 프로세스(예: bash, csh) |
ls /etc/shells |
파일 이름 /etc/shells 만 나온다. ls 는 파일 내용을 보여 주지 않는다 |
cat /etc/passwd |
계정마다 지정된 로그인 셸. 사용 가능한 셸 목록이 아니다 |
| 기호 | 뜻 | 예 |
|---|---|---|
| & | 명령을 백그라운드로 실행한다 → 리눅스 프로세스, 리눅스 bg | find / -name a.txt &
|
| * | 와일드카드. 길이 0 이상의 아무 문자열 | ls *.txt
|
| ? | 와일드카드. 아무 문자 한 개 | ls file?.txt
|
| [ ] | 괄호 안 문자 중 한 글자. [ac] 는 a 또는 c, [a-c] 는 a 부터 c 까지의 범위, [!abc]·[^abc] 는 괄호 안 문자를 뺀 한 글자다. 범위는 하이픈(-)으로 쓰고 물결(~)은 범위 기호가 아니다 |
ls file[1-3], ls [a-c].txt → a.txt b.txt c.txt
|
| ! | 히스토리 확장. 앞서 쓴 명령을 다시 실행한다 → 리눅스 history | !!, !vi
|
| ; | 명령을 차례로 실행한다 | cd /tmp; ls
|
| | | 파이프. 앞 명령의 출력을 뒤 명령의 입력으로 | ps -ef | grep sshd
|
| > >> < << | 리다이렉션. 출력을 파일로 덮어쓰기(>)·이어쓰기(>>), 파일을 입력으로(<), 히어 도큐먼트(<<) | ls > list.txt
|
| ~ | 현재 사용자의 홈 디렉터리 | cd ~
|
| ' ' (작은따옴표) | 안에 든 모든 특수 문자의 기능을 무시하고 글자 그대로 쓴다 | echo '$HOME' → $HOME
|
| " " (큰따옴표) | 공백과 대부분의 특수 문자를 무시하지만 $(변수), `(명령 치환), \(이스케이프)는 살린다 | echo "$HOME" → /root
|
| \ (역슬래시) | 바로 뒤 한 글자의 특수 기능을 없앤다 | echo \$HOME → $HOME
|
| ` ` 또는 $( ) | 명령 치환. 안의 명령을 실행한 결과로 바꾼다 | echo `date`
|
| $ | 변수 값을 꺼낸다 | echo $HOME
|
| / | 셸 기호가 아니라 경로의 디렉터리 구분자다 | /etc/passwd
|
명령 사이에 넣는 기호에 따라 실행 방식이 달라진다.
| 기호 | 뜻 | 예 |
|---|---|---|
| 명령1 & 명령2 & | 명령1 을 백그라운드로 보내고 곧바로 명령2 도 백그라운드로 실행한다. 둘이 동시에 돈다 | tail -f a.log > a.txt & tail -f b.log > b.txt &
|
| 명령1 ; 명령2 | 명령1 이 끝나면 결과와 관계없이 명령2 를 실행한다 | cd /tmp; ls
|
| 명령1 && 명령2 | 명령1 이 끝나고 성공(종료 코드 0)했을 때만 명령2 를 실행한다(AND 목록) | make && make install
|
| 명령1 || 명령2 | 명령1 이 실패했을 때만 명령2 를 실행한다(OR 목록) | cd /data || mkdir /data
|
- && 는 백그라운드 기호가 아니다. 앞 명령이 끝나기를 기다리므로
tail -f처럼 끝나지 않는 명령 뒤에 && 를 두면 뒤 명령은 실행되지 않는다 - 줄 끝에 && 를 두면 셸은 이어질 명령을 기다리며 다음 줄 입력(> 프롬프트)을 받는다. 백그라운드로 돌리려면 줄 끝에 & 하나를 둔다 → 리눅스 jobs
| 셸 | 등장 | 만든 이 | 계열 |
|---|---|---|---|
| sh(본 셸, Bourne shell) | 1977년 개발, 1979년 유닉스 7판 | 스티븐 본(벨 연구소) | 본 셸 계열의 시작 |
| csh(C 셸) | 1978년 BSD | 빌 조이(UC 버클리) | C 셸 계열의 시작 |
| tcsh | 1981년 무렵 C 셸에 통합, 1983년 공개 | 켄 그리어 | C 셸 확장 |
| ksh(콘 셸) | 1983년 발표 | 데이비드 콘(벨 연구소) | 본 셸 확장 |
| bash | 1989년 | 브라이언 폭스(GNU 프로젝트) | 본 셸 호환 + csh·ksh 기능 |
| zsh | 1990년 | 폴 팔스타드 | 본 셸 확장 |
| dash | 1997년 (데비안) | 허버트 쉬 | 본 셸(POSIX sh) 경량판 |
- sh·csh·ksh·tcsh·bash 가운데 가장 나중에 나온 것은 bash다. 흔히 본 셸 → C 셸 → (tcsh, 콘 셸) → bash 순으로 정리한다.
- bash 는 Bourne-Again SHell 의 줄임말로, 본 셸과 호환되면서 C 셸의 히스토리·별명, 콘 셸의 명령행 편집 기능을 받아들였다.
| 기능 | 하는 일 | 예 |
|---|---|---|
| 명령행 완성 | 파일명·디렉터리명·명령의 앞 글자만 입력하고 [Tab] 키를 누르면 나머지를 자동으로 채운다. 후보가 여럿이면 [Tab] 을 두 번 눌러 목록을 본다 | cd /us[Tab] → cd /usr/
|
| 앨리어스(alias) | 긴 명령에 짧은 별명을 붙인다. hd 라고 치면 홈 디렉터리 내용을 보이게 하는 것처럼 새 이름으로 명령을 만드는 기능이다 | alias hd='ls -al ~' → 리눅스 alias
|
| 히스토리 | 입력한 명령을 기록해 두고 [↑]·[↓] 키나 !! 로 다시 실행한다. 기록은 ~/.bash_history 에 남는다 | history, !! → 리눅스 history
|
| 명령행 편집 | 입력 중인 명령줄 안에서 커서를 옮기고 고친다 | Ctrl+A(줄 처음), Ctrl+E(줄 끝), Ctrl+U(지우기) |
| 작업 제어 | 실행 중인 작업을 백그라운드로 보내거나 다시 불러온다 | &, Ctrl+Z, bg, fg → 리눅스 jobs |
- csh
- 버클리대학의 빌 조이가 개발한 것으로 C언어를 기반으로 만들어졌으며 강력한 프로그램 작성 기능을 가지고 있다. 히스토리 기능, 별명(Alias) 기능, 작업 제어 등의 유용한 기능을 포함하였다.
- ksh
- 데이비드 콘(David Korn)이 개발한 셸로 본셸을 확장해서 만들어졌으며, 작업제어, 히스토리, 앨리어스 및 명령행 편집기능을 지원한다.
- bash
- 브라이언 폭스가 본셸을 기반으로 GNU 프로젝트를 위해 개발한 셸로 현재 GNU 운영체제, 리눅스, Mac OS X 등에 표준 셸로 사용 되고 있다.
- tcsh
- 켄 그리어가 테넥스라는 운영체제에 명령행 완성기능을 반영하게 되었고, 1981년 C셸과 통합하여 만들었다. C셸의 기능을 강화시킨 셸로 명령어 완성기능, 명령행 편집기능 등을 추가로 지원한다.
- dash
- POSIX와 호환되는 /bin/sh를 가능한 작게 구한 셸로 빠른 작업 수행이 특징이지만 history 명령 등은 지원하지 않는다.