1. 화면에 로그인 프롬프트가 나오기 전에 어떤 과정이 이루어지는가?
1 최초로 구동되는 프로세스는 PID 1의 init 프로세스이다.
2) 이 프로세스가 getty프로세스를 실행시킨다.
3) 이 프로세스들은 터미널 포트를 열어, 표준 입력과 표준 출력 그리고 표준 에러의 방향을 설정한 후, 화면에 로그인 프롬프트를 띄운다.
- 추가
이어서 /bin/login 프로그램을 실행하면 패스워드를 요구한다. 입력된 패스워드를 암호화해서 확인한 후에 초기 환경을 설정하고, 패스워드 파일의 맨 마지막에 기록되어 있는 사용자 쉘(/bin/bash)을 실행시킨다.
1) 배시는 시스템 파일인 /etc/profile을 찾아서 그 안의 명령어들을 실행시킨다.
2) 그런 다음, 사용자의 홈 디렉토리에서 초기화 파일인 .bash_profile의 내용을 읽어 들인다.
3) .bash_profile에 설정된 내용들이 수행되고 나면 기본 프롬프트인 달러 기호($)가 화면에 나타난다.
배시쉘이 사용자의 명령을 기다리는 것이다.
2. HOME, LOGNAME, PATH 변수의 설정은 어떤 과정에서 이루어지는가?
사용자의 홈 디렉토리에 있는 .bash_profile 파일을 실행(source)시킨다. 이 파일에서는 별명, 함수, 환경변수 및 시작 스크립트등을 설정하거나 정의한다.
3.현재 사용하고 있는 쉘을 알 수 있는 방법
$
echo $SHELL (현재 사용하고있는 쉘 알수 있는 명령어)
/bin/bash
4. 로그인 쉘을 변경 하기 위해 사용하는 명령어는 무엇인가?
일반 사용자는 다음과 같은 명령으로 로긴쉘을 바꿀 수 있고, 바꾼 내용은
다음번 로긴시부터 적용됩니다. (source /etc/passwd는 안되네..)
$
chsh (쉘 바꾸는 명령어)
Changing shell for test_user.
Password: (........)
New shell [/bin/bash]: /bin/tcsh
Shell changed.
$
이 때 사용자가 쉘로서 사용할 수 있는 프로그램의 리스트를 알아야 하는데,
그 내용을 담고있는 파일은 /etc/shells 입니다. (`chsh -l` 명령으로 확인이
가능합니다.) 이 파일에 열거되어있지 않은 프로그램을 지정하려 하면 에러를
내면서 설정되지 않지만, 혹여 설정이 된다고 해도 시스템 사용에 부분적으로,
또는 전반적으로 문제가 있을 수 있습니다. (시스템 설정 등에 따라 다릅니다.)
5. 로그인 쉘은 어느 파일에서 지정하는가?
/etc/passwd 에서 지정한다. (왜그런지는 1번 문제 답 참고)
6./etc/profile과 ~/.bash_profile의 차이점은 무엇인가? 어느 파일이 먼저 실행되는가?
/etc/profile 은 사용자가 로그인할 때, 시스템 전체적으로 공통된 초기화를 위해 관리자가 설정하는 파일이다.
이 파일은 배시 쉘이 시작할 때 실행되며, 시스템 상의 모든 본 쉘과 콘 쉘 사용자들에게 적용된다.
~/.bash_profile 파일은 개별 사용자에게 적용, ~/.bash_profile 파일을 사용자의 홈 디렉토리에서 찾으면 /etc/profile 다음에 읽어 들인다.
7. .bash_profile 파일을 다음과 같이 수정하라
a. 환영 메시지를 보낸다.
- echo "Hello ~~ "
b. 사용자의 홈 디렉토리가 경로에 포함되어 있지 않으면 포함시킨다.
- export PATH=$PATH:$HOME (포함되어 있지 않으면?? 그건 잘..)
c. stty 명령어를 사용해 백스페이스에 삭제 기능을 설정시킨다.
stty erase ^H 를 써주면 사실 되야하는데 안된다. 백스페이스를 누르면 이때부터 ^? 가 나오기시작...
stty erase ^?를 넣어주면 원래대로 작동
d. source .bash_profile을 입력한다. 여기서 source 명령어의 기능은 무엇인가?
- source(.) 명령어 이명령어는 스크립트의 이름을 인자로 갖는다. 스크립트는 현재 쉘의 환경에서 실행된다. 즉, 자식 프로세스를 새로 새성하지 않고 스크립트를 실행한다. 스크립트 내에서 정의된 모든 변수들은 현재 쉘 환경의 일부가 되며, 마찬가지로 현재 쉘에서 정의한 모든 변수들도 스크립트 환경의 일부가 된다.
8. BASH_ENV파일은 무엇인가? 이파일은 언제 실행되는가?
- CentOS에서는 보이지 않았았다.
배시 2.0 버전 이전에는 BASH_ENV 파일을 콘 쉘에서처럼 ENV파일이라고 불렀다. BASH_ENV(ENV)변수는 ~/.bash_profile 파일에 설정되어있다. 이변수에는 대화형 배시쉘이나 배시 스크립트가 시작할 때마다 실행할 파일이름을 지정한다. BASH_ENV(ENV)파일에는 특수 배시 변수와 별명들이 들어 있다. 이 파일의 이름은 관례상 .bashrc로 사용한다.
9. 주 프롬프트의 기본값은 무엇인가?
- /etc/bashrc에 정의되어있는 PS1 [\u@\h \W]\$ 이게 기본값 - \u는 유저 이름 \h는 호스트 이름 \W는 현재 작업디렉토리
a. 현재시각과 사용자의 홈디렉토리를 포함하도록 주 프롬프트를 변경시켜라
현재시각을 나타내는 것은 \T와 \t가 있다.
PS1="\T \W"
b. 보조 프롬프트의 기본값은 무엇인가? 이 프롬프트의 기능은 무엇인가?
기본은 > 어디정의 되어있는지는 모름. echo $PS2하면 나오긴하네..
기능은 명령어를 제대로 입력하지 않았을때 나타나는 역할
10. 다음 설정이 의마하는 바는 무엇인지 각각 설명하라
a. set -o ignoreeof - ^d를 사용하여 로그아웃하는것을 막는다. 로그아웃을위해 exit써야함
b. set -o noclobber - 리다이렉션에 의한 파일 덮어쓰기 방지
c. set -o emacs - emacs 사용
d. set -o vi - vi 사용