셸,shell

사용자의 명령(유닉스,Unix의 경우 유닉스_명령)을 받아 실행하는 프로그램.
보통 사용자,user커널,kernel의 사이에 위치.

기능
작업_제어,job_control (= 프로세스 제어)
입출력 리다이렉션(I/O redirection) 리디렉션,redirection
{
AKA 리다이렉션

명령 > 파일명 
명령의 출력을 파일로 저장한다. (=캡쳐한다, capture) 기존 파일 내용이 있다면 지워진다. (=덮어쓴다, overwrite)
셸이 csh나 tcsh이면 다음 명령으로 덮어쓰기를 방지할 수 있다.
set noclobber
Bash에서도 추가되었는데..문법? TBW
표준 에러(stderr)는 저장되지 않는다.
표준 에러도 저장하려면
명령 >& 파일명
을 쓰면 된다.
csh인가? bash도 되는가? CHK
본 셸과 bash에서는 이렇게 적을 수 있다.
명령 &> 파일명

에러만 저장하려면, 본 셸 호환 셸에서
명령 2> 파일명
을 쓴다.

출력을 아예 버리려면, /dev/null이라는 특별한 파일로 리디렉트한다.
명령 > /dev/null

명령 >> 파일명
명령의 출력을 파일에 추가한다.
파일이 없으면 생성됨? TBW


명령 < 파일명
파일에서 입력을 받는다.


}

파이프
{
|
정렬하려면 sort_명령으로 보내면 된다.
du | sort -rn 
명령은 현재 디렉토리의 항목 중 큰 것 부터 보여준다.

}
스크립팅
DOS의 경우 batch file

종류
Thompson shell .... https://en.wikipedia.org/wiki/Thompson_shell
Mashey shell = PWB shell - modified Thompson .... https://en.wikipedia.org/wiki/PWB_shell
Bourne shell (sh) - 본_셸,Bourne_shell
Bourne again shell (bash) .... WpEn:Bash_(Unix_shell) = https://en.wikipedia.org/wiki/Bash_(Unix_shell)
csh
tcsh
Korn shell (ksh)
ash (of BSD)
zsh (of BSD)
rc (of Plan 9)

Unix외
파워셸,PowerShell?

셸을 바꾸는 명령은 chsh_명령이다.

리눅스에서 특정 셸을 로그인 셸로 쓸 수 있으려면, 파일_/etc/shells에 등록해야 한다.

Bash 단축키

C-u: 커서 위치부터 행의 처음까지 삭제
C-c: 실행 중 중지
C-z: 일시정지(suspend). 재개하고자 할 때는 fg_명령을 입력. (foreground를 뜻하는)
C-s: 터미널 출력 멈추기
C-q: 멈춘 출력 재개하기

이 키들이 작동하지 않으면 터미널이 잘못 설정되어 있기 때문이다. stty_명령으로 고칠 수 있다.
문법: stty function key
예를 들어, 위의 명령들이 동작하지 않으면,
$ stty erase ^H
$ stty kill ^U
$ stty intr ^C
$ stty susp ^Z

내장 명령 built-in command

cd같은 명령들은 외부 실행 파일이 존재하지 않고 셸에 내장되어 있다.

명령을 백그라운드로 보내기, 혹은 백그라운드에서 실행하기

명령 뒤에 & 문자를 넣는다.
$ gcc a.c &
[1] 21457
1은 작업 번호다.
21457은 프로세스 ID(pid)이다.
물론 작업 번호가 숫자가 작으므로 PID보다 기억하기 쉽다.

백그라운드 명령을 포그라운드로 가져오기

foreground로 가져오기
fg명령을 쓴다. 작업 번호 앞에 %을 붙여서 쓰거나, PID를 그대로 쓴다.
위의 경우,
$ fg %1
$ fg 21457

백그라운드 작업 없애기

kill_명령을 쓴다.
$ kill %1

역사

Shell이라는 단어는 멀틱스,Multics에서 유래.
https://multicians.org/shell.html
https://news.ycombinator.com/item?id=25207957 -- .*rc는 RUNCOM에서 유래? CHK

ssh

ssh pagename 뭘로하지?

Good sites