본문 바로가기
Linux

2.1 리눅스의 부팅 과정과 로그인 쉘

by 평범한kiki 2023. 1. 21.

* 리눅스 부팅 
- 리눅스 시스템이 부팅되면 가장 먼저 init(PID는 1) 프로세스 시작되고, init프로세스와 연결된 수많은 프로세스들이 자신만의 PID(프로세스id)를 가지고 생성되기 시작한다.
  요새는 upstart 스크립트도 사용 (/etc/init.d/..폴더쪽에 있다,예전에는 /etc/inittab)
- 런레벨 
  현재 유저 런레벨 확인 : runlevel or sudo systemctl get-default 
  /lib/systemd/system/default.target => Requires=multi-user.target으로 현재 이 시스템의 부팅 runlevel 설정
- 로그인 프롬프트
 /bin/login프로그램이 /etc/passwd 파일의 있는 유저아이디 검증 후 패스워드 검증 
  -> 맞으면 /etc/passwd에 있는 정보로 변수들을 초기화 후 유저라인 마지막에 설정된 프로그램실행. 일반적으로 /bin/bash

* 쉘 초기화 파일들 -> 185
- /etc/profil(쉘환경과 프로그램 시작설정)
  시스템 전역 쉘 변수 초기화(PATH,USER,LOGNAME,MAIL,HOSTNAME,HISTSIZE,INPUTRC)
  유저가 쉘에 로그인시 가장 먼저 /etc/profile 읽음  
  /etc/inputrc 파일, /etc/profile.d(특별한 프로그램들의 전역환경 설정 파일들 포함) 디렉토리 읽음
- /etc/bashrc or /etc/bash.bashrc
  쉘함수와 alias를 위한 시스템 전역 변수 정의
- ~/.bash_profile
  유저 개인의 환경 설정 파일(유저개인 PATH, 시작프로그램 추가 설정)   
- ~/.bashrc
  유저 자신의 개인적인 명령어 alias 정의
  /etc/bashrc 파일에서 전역변수 읽음 다음 읽음
- ~/.bash_logout
  유저 로그아웃 절차 포함
- source 명령
  리부팅 또는 재접속 없이 쉘 환경 설정 파일 즉시 적용하기  
  source [환경 설정 파일명]

* 명령라인 파싱
* 명령어 타입
- alias와 함수는 쉘의 메모리에 정의 되어 있다
- 명령타입 체크 순서
  alias -> 키워드 -> 함수 ->빌트인 내장명령 -> 실행파일(쉘은 명령이 실행되기 전 자식 프로세스를 찾고 디스크에 존재하는 실행 프로그램의 위치 찾기 위해 PATH변수 사용)

* 프로세스와 쉘
- 프로세스란 유일한 PID번호에 의해 식별될수 있는 실행 프로그램
- 쉘은 로그인 프로세스를 완료했을 때 시작하는 특별한 프로그램. 쉘은 프로세스이다.
  쉘은 PID 그룹에 의해 식별되는 그룹 프로세스에 소속된다. 오직 하나의 프로세스그룹은 하나의 터미널을 제어한다
- 실행중인 프로세스 ps -ef, ps aux --forest

* 시스템 콜이란
- 쉘은 빌트인 내부 코드나 디스크 저장장치에서 명령을 찾고 실핸되 명령정렬등을 커널을 통해 하는데 이것을 시스템 콜이라 한다

* 프로세스 생성과 시스템 콜
- fork 시스템 콜
  fork시스템 콜에 의해 프로세스가 생성된다. 콜 프로세스의 복사본을 생성
  fork () 함수는 현재 프로세스에 대해 자식 프로세스를 생성하는 함수. 이 두 프로세스는 CPU공유
  자식프로세스가 동작하는 동안 부모 프로세스는 잠시 멈춘다(wait)
- wait 시스템 콜
  자식프로세스 하나가 종료될때까지 부모프로세스를 대기상태로 유지, 프로세스가 정상적으로 종료하도록 보증하는 역할
  만약 wait가 성공한다면 자식프로스세 종료되고, 종료상태를 가지고 있는 자식프로세스의 PID리턴
- exec 시스템 콜
  프로그램이 발견되면 쉘은 명령의 이름과 함께 exec 시스템 콜을 호출
  커널은 이 새로운 프로그램을 메모리에 로드하며 자식쉘은 새 프로그램으로 오버랩된다.
  새 프로그램은 자식 프로새스가 되고 실행을 시작한다  
- exit 시스템 콜
  새 프로그램은 exit 시스템 콜을 실행하여 중지할수 있다. 
  종료상태는 0~255까지 숫자. 종료상태 0은 프로그램이 성공적 실행 의미, 나머지는 실행이 실패의미
  쉘에서 가장 마지막에 실행한 프로그램의 종료상태 변수의 값을 알고 싶으면 echo $?
- 프로세스 종료하기
  Ctrl + C, Ctrl +\ 종료
  kill 명령은 백그라운드 job 종료할때 터미널 반응 없는 프로그램 종료 시 사용

* 변수(본쉘)
- 전역변수
  env명령과 printenv명령으로 환경 변수 출력, 대문자사용
  which명령어:실행파일의 위치 알아보기, rpm -qf [파일명]:파일이 어떤 rpm 패키지에 포함되어 있는지 검색
- 지역변수
  현재 쉘에서만 사용
  옵션 없이 set빌트인 명령을 사용하면 환경변수를 포함하여 모든 변수들과 함수들의 목록 확인(지역,전역모두)
- 변수생성
  변수생성시 = 앞뒤로 공백없이, 대문자로 생성, 생성한 변수 제거는 unset 명령

ubuntu@instance-20221119-1126:~$ VAR="value"
ubuntu@instance-20221119-1126:~$ echo $VAR
value
ubuntu@instance-20221119-1126:~$ echo "$VAR"
value
ubuntu@instance-20221119-1126:~$ echo "${VAR}"
value

ubuntu@instance-20221119-1126:~$ unset VAR
ubuntu@instance-20221119-1126:~$ echo $VAR

- 지역변수를 환경 변수로 만들기

  export 빌트인 명령어

ubuntu@instance-20221119-1126:~$ export VAR="val"
ubuntu@instance-20221119-1126:~$ env | grep VAR
VAR=val
ubuntu@instance-20221119-1126:~$ set | grep VAR
VAR=val

  ubuntu 시스템에서는 이러한 용도로 사용할 수 있는 /etc/environment 파일이 있다. 내가 직접 환경 변수를 조작하는 상황에서 필요한 것을 추가 후 관리한다.

 

* 예약변수

- 본쉘 예약변수

 CDPATH, HOME, IFS, MAIL,MAILPATH,OPTARG,OPTIND,PATH,PS1,PS2

- bash shell 예약변수

  BASH, BASH_ENV, COMP_LINE, FUNCNAME,GROUPS , HOSTNAME, LANG

  , PPID, UID, PWD... 책 참조 하

- 특수 파라미터 변수들

$* 이 파라미터 변수는 1부터 시작하는 위치 파라미터의 확장이며, 큰따옴표로 구분하고, IFS 특수 변수의 첫번째 문자로 구분되는 각 파라미터의 값으로 하나의 단어를 확장며, 전체 파라미터값을 가지고 있다.  만약 IFS가 널이거나 해제되어 있으면 파라미터는 스페이스로 구분한다
$@ 이 파라미터 변수는 1부터 시작하는 위치 파라미터의 확장이며, 큰따옴표로 확장되면 각 파라미터는 하나의 구분 단어로 확장되고, 전체 파라미터값을 가진다
$# 이 파라미터 변수는 십진수의 위치 파라미터 전체 개수를 의미한다
$? 가장 최근에 실행된 포그라운드 파이프라이의 종료 상태를 가지고 있다
$- 실행되자마자 set 내장명령을 통해 또는 쉘 자체에 의해(-i플래그) 설정된 현재 옵션 플래그로 확장한다
$$ 현재 쉘의 프로세스 ID를 가지고 있다
$! 가장 최근에 백그라운드로 실행된 프로세스 ID를 가지고 있
$0 쉘 또는 쉘 스크립트의 이름을 가지고 있다
$_ 이 변수는 쉘이 시작되면 설정되는데 아규먼트 목록을 사용하여 실행된 쉘스크립트의 절대경로를 가지고 있다. 어떤 명령이 이전에 실행되었다면 이전에 실행된 명령에서 사용한 마지막 규먼트의 절대경로를 가지게 된다 


 

test.sh
#!/bin/bash

POS1="$1"
POS2="$2"
POS3="$3"

echo "1 : $POS1"
echo ${POS2}
echo "${POS3}"

echo "total count $#"
echo "args contents.. : $@"
echo "title name : $0"
echo $*



ubuntu@instance-20221119-1126:~/testbash$ bash test.sh wise ble ped gong chacha
1 : wise
ble
ped
total count 5
args contents.. : wise ble ped gong chacha
title name : test.sh
wise ble ped gong chacha


  

'Linux' 카테고리의 다른 글

[Linux] centos 여러버전 jdk 관리  (0) 2023.05.08
[Linux] centos wget  (0) 2023.05.08
2.7 bash shell  (0) 2023.02.18
2.6 본쉘  (0) 2023.02.05