본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.


  • 사용 가능한 셸 확인
# 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 셸의 히스토리·별명, 콘 셸의 명령행 편집 기능을 받아들였다.

bash 의 편의 기능

편집 원본 편집
기능 하는 일 예
명령행 완성 파일명·디렉터리명·명령의 앞 글자만 입력하고 [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 명령 등은 지원하지 않는다.