로그인
쉘 함수와 환경변수, 명령어 앨리어스, 쉘 함수등을 취향에 맞추어 꾸미어 놓았더라도, 로그아웃을 하면 모든 설정값이 날아가버린다. 따라서 로그인 할 때마다 동일한 설정값을 적용되도록 하기 위해 홈디렉토리의 쉘 설정 파일에 필요한 내용을 저장해두어야 한다.
쉘 설정 파일
쉘 설정 파일을 이해하려면 쉘이 ‘로그인 쉘’ / ‘비로그인 쉘’ 이라는 두 가지 모드 중 하나로 동작한다는 사실을 이해해야 한다.
Unix시스템에 로그인 -> login 프로그램이 쉘을 시작 -> 쉘이 로그인 쉘임을 나타내는 플래그 생성
플래그가 설정되어있지 않은 쉘은 로그인 쉘로 행동하지 않는다.
쉘 종류 | 파일명 |
---|---|
Bourn 쉘 | ~/.profile |
C 쉘 | .cshrc - C쉘이 실행될 때 .login - 로그인쉘이 실행될 때 .logout - 로그인 쉘을 로그아웃 할 때 |
Korn 쉘 | ~/.profile |
Bash 쉘 | 로그인 - .bash_profile / .bash_login / .profile 비로그인 - .bashrc |
tcsh 쉘 | .tcshrc가 있으면 읽고 없으면 .cshrc를 읽음 |
쉘 설정 파일은 다음과 같은 일을 한다.
- 검색 경로 설정
- 터미널 종류 설정 및 다양한 터미널을 설정
- 환경변수 설정
- 로그인 시 실행 명령어 실행
쉘 설정을 변경하고 즉시 확인하는 방법
설정 변경중에 실수를 했다면 실제로 로그인 했을 때 다시 바로잡기 어려운 경우가 생길수도 있다. 때문에 rlogin이나 telnet을 이용해 같은 호스트로 재로그인하여 설정값을 확인해주는 작업이 필요하다. rlogin이나 telnet이 없다면 su - username으로 같은 효과를 얻을 수 있다.
$ vi .profile
# 원하는 대로 수정 작업 진행
$ rlogin localhost
# 같은 계정으로 재로그인
에러 메세지 출력
$ logout
Connection closed.
$ vi .profile
# 에러 수정
쉘 설정파일에는 절대경로를 사용해야 오류없이 실행이 가능하다.
ksh와 bash의 시작을 더울 빠르게
Korn 쉘을 이용하고 “ENV파일”을 가지고 있는 사용자, 그리고 bash를 이용하고 .bashrc 또는 .bash_login 설정 파일을 갖고 있는 사용자들은 앨리어스 선언이나 그 외 대화식 쉘만 읽어야 하는 부분을 비대화식 쉘도 읽어버려 속도가 느려지는 문제점이 생길 수 있다. 아래와 같은 테스트를 추가해 속도를 높이는 것이 가능하다.
case $- in
*i*);;
*) return 0;;
esac
# 아래의 명령어들은 대화식 쉘에서만 수행 됨
위 테스트는 쉘의 -i 옵션이 설정되었는가를 검사하여 만일 그렇지 않으면 0을 리턴하고 스크립트를 종료한다.
서로 다른 터미널 자동 설정
$TERM 변수 체크를 이용한 Switch문을 통해 명령어 분기를 하여 구현
좀 오래된 책인지 쉘 버전이 안맞는지 나한텐 없는 파일이 너무 많다…
로그아웃
로그아웃 하면서 명령어 실행
로그아웃 하면서 명령어를 실행하고 싶다면 (C 쉘을 사용하는 경우) .logout 파일을 만들어 홈 디렉토리에 저장하면 쉘 종료전에 이 파일을 읽는다. Bourn/Korn/Bash 쉘을 사용하는 경우 별도의 로그아웃 파일이 존재하지 않기 때문에 다음과 같이 .profile 파일을 수정하여 만들어줄 수 있다.
trap '. $HOME/.sh_logout; exit' 0
이렇게 작성해주면 홈 디렉토리에 .sh_logout이라는 파일을 로그아웃 전에 실행하게 된다. 이제 sh_logout을 만들어보자.
$vi ~/.sh_logout
clear
if [ -f $HOME/todo.tomorrow ]
then
echo "==== STUFF TO DO TOMORROW ===="
cat $HOME/todo.tomorrow
fi
이제 쉘이 종료될 때 trap이 .sh_logout을 읽을 것이다.
파일 자동 청소
만일 임시파일을 생성하는 시스템을 사용중이라면 .logout을 이용해 임시파일을 지워줄 수 있다. 다음 내용을 .logout에 추가해주면 된다.
(set nonomatch; cd -/temp %% rm -f) &
괄호 속의 명령어들은 서브 쉘에서 실행되기 때문에 cd때문에 현제 쉘의 작업 디렉토리가 바뀌지는 않는다. set nonomatch명령어는 만약 /temp 디렉토리가 존재하지 않더라도 에러 메시지를 노출하지 않도록 해준다.
Screen
다중화면을 제공해주는 기능이다.
$ screen -S "이름" #스크린 생성
$ screen -list #스크린 리스트 확인 및 pid확인
There is a screen on:
3956.이름 (2016년 12월 22일 14시 45분 53초) (Attached)
1 Socket in /var/run/screen/S-root.
CTRL-a + d 입력 #스크린 분리(detached)
$ screen -r pid확인 #스크린 재진입
내가 이용하는 tty는?
모든 로그인 세션은 각각 고유한 tty를 갖고 있. 이것은 Unix 장치 파일로서 터미널이나 윈도우에 대한 입력과 출력을 처리한다. 자신의 쉘이 사용하고 있는 tty를 알고 싶으면 아래의 명령어를 입력해주면 된다.
$ tty
/dev/pts/0