본문 바로가기

수업

SHELL

OS     : 시스템을 제어 
Kernel : HW/SW를 OS가 제어할수 있도록 연결해주는 중계 프로그램 
shell  : 사용자가 kernel과 의사소통할수 있도록 연결해주는 명령어도구(해석기)

기본프로그램 : /bin 
응용프로그램 : /usr/bin

# /bin <==== 명령어 저장소
# /etc <==== 설정파일 저장소
===============================================================================

쉘 확인 명령
cat /etc/shells
chsh -l 

/bin/sh    복구쉘(커널쉘) 본쉘
/bin/ksh   unix 기본쉘
/bin/bash    linux   전용 응용쉘 (리차드스톨만)  ( ksh+sh )
/usr/bin/sh   unix 기본쉘 (별도 설치)   
/usr/bin/bash   linux   전용 응용쉘 (별도 설치)
/bin/dash    데비안전용쉘
/bin/csh   c프로그램 전용쉘
/bin/tcsh   csh확장쉘
/sbin/nologin    시스템쉘
/bin/zsh   칼리쉘 ,    (bash+ksh+tcsh)

======================================================================

쉘정의
shell  => 조개껍데기  =>  명령어 해석기  (kernel에게 명령 전달)

======================================================
init system-runlevel (시스템 구동 순서)

0   halt      종료
1   sigle      
2   tui (NFS 미지원)
3   tui (NFS 지원 )  FULL-TUI   ******
4   unuse
5   GUI  ( X11 )     ****** 
6   reboot      재부팅

종료 명령 :    poweroff, halt, shutdown -h now , init 0
재부팅    :    reboot, shutdown -r now          , init 6

booting (/boot/grub2/grub.cfg)

[centos6 부팅순서 ]
init (inittab => sysinit => rc5.d=> rc.local)

[ centos7 ]
/usr/lib/systemd   시스템 데몬 (/lib/systemd) 
/lib/systemd/system  데몬(이안에서 해결)

## 쉘의 구동 순서  ### ( ~,$HOME : 로그인한 사용자 홈디렉토리)

시스템 부팅 => /etc/profile (전체쉘) => $HOME/.쉘rc (계정쉘) => /etc/쉘rc (쉘설정)

   1./etc/profile      2.$HOME/.쉘rc      3./etc/쉘rc
쉘   O         X         O
계정   O         O         X

[csh의 순서]
vi /etc/profile 
echo "1./etc/profile"
vi /root/.cshrc
echo "2.$HOME/.cshrc"
vi /etc/csh.cshrc
echo "3./etc/csh.cshrc"
vi /etc/csh.login
echo "4./etc/csh.login"

echo : 출력명령 
===================================
[관리자계정]
usermod -s /bin/csh root 후 root 로그인 
3번과 4번 출력
csh 입력시
3번만 출력
[일반계정]
vi /home/sevas/.cshrc 
echo "$HOME/.cshrc"
sevas계정 로그인 

**순서**   
/etc/csh.cshrc => /etc/csh.login(로그인시만) => $HOME/.cshrc 


      전체설정            개인설정
로그인 : /etc/csh.cshrc => /etc/csh.login =>    $HOME/.cshrc
쉘구동 : /etc/csh.cshrc =>          $HOME/.cshrc

=======================================================================
root와 sevas를  
usermod -s /bin/bash root
usermod -s /bin/bash sevas 

  [bash의 순서]

vi /etc/profile         <<< 모든 기본쉘 적용
echo "1. /etc/profile"   

vi /root/.bash_profile      <<<  계정로그인시만 배쉬쉘 적용
echo "2. $HOME/.bash_profile"

vi /root/.bashrc      <<<  계정배쉬쉘 적용
echo "3. $HOME.bashrc"

vi /etc/bashrc         <<<  모든 배쉬쉘 적용
echo "4./etc/bashrc"

순서
/etc/profile => $HOME/.bash_profile => $HOME/.bashrc=>/etc/bashrc
   모든기본쉘            로그인시              계정배쉬쉘구동   모든배쉬쉘구동

쉘구동방법

/bin/bash or bash  = bash쉘 구동

$ 변수 호출 

env ( 시스템 환경 변수 확인 )
대표적인 시스템 변수
$USER  = 계정명
$HOME = 홈디렉토리
$SHELL = 쉘
$PWD   = 현재 디렉토리
==============================================
문제:  /etc/profile과  /etc/bashrc 에 내용을 삽입하여
다음과 같은 결과가 나오도록 하세요.

[root]
안녕하세요 root님         /etc/profile
현재위치는 /root 입니다      /etc/bashrc

[sevas]
안녕하세요 sevas님         /etc/profile
현재위치는 /home/sevas 입니다   /etc/bashrc

========================================================
변수
변수 : 변하는수   
상수 :변하지 않는수

변수호출 $
** 변수는 암묵적으로 대문자로 설정 **
' 함수호출(변수x)   '%d %f'
" 변수호출(변수O)   "$"

지역변수(로컬변수) : 쉘간 변수 공유 불가능
지정 : KOREA="sevas"
출력 : echo $KOREA
확인 : set |grep KOREA
제거 : unset KOREA
_= <==가장마지막에 사용된 명령어


환경변수(전역변수) : 쉘간 변수 공유 가능 (export)

지정: export KOREA="sivas"
출력: echo $KOREA
확인: set |grep KOREA (=)export |grep KOREA

변수확인

env(시스템환경변수)  (전역)
**set(지역변수부터)  (전역,지역)
export(전역변수부터) (전역)
declare          (전역,지역)

history (최근 명령어 확인)

!!             가장 최근 명령어 실행 
history +5 (==history 5)  최근 명령어 5개 출력
![번호]        번호열 명령 실행
![명령어]     특정문자가 들어간 가장 최근 명령 실행
history -c     history 내용 삭제

**history 내용은  /root/.bash_history 에 들어있음 **
====================================================
1.case 
/root/.bash_history  삭제

ln -s /dev/null  /root/.bash_history  

/dev/null = 없는 공간 
/dev/zero = 0으로 채워진 무한대 빈공간

2./etc/profile의 HISTSIZE를 변경 
vi /etc/profile   ==> HISTSIZE=0 으로 변경 
적용은  source /etc/profile   << /etc/profile 재시작 
HISTSIZE 확인   echo $HISTSIZE

===========================================================
변수치환 

echo $PATH
PATH = 명령어를 실행하기 위한 base경로

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

경로 : 경로  (:는 구분자)
단축 경로들이 지정되어있음

[실습]

PATH=""
ls  (안됨)

/usr/bin/ls
/usr/bin/ls -l

PATH="/usr/bin"
ls  (출력이됨)

whereis ls

*** $PATH 변수는 단축경로가 가능하게 함 ***

PATH=""
/usr/bin/ls 

PATH="/usr/bin"
ls

[실습]
mkdir /sevas
cp /bin/ls /sevas/baba
cp /bin/pwd /sevas/nana
재접후
echo $PATH
export PATH=$PATH:/sevas

echo $PATH   <=========PATH에 /sevas가 붙음

'수업' 카테고리의 다른 글

SHELL  (0) 2023.06.23
계정  (0) 2023.06.22
UUID  (0) 2023.06.21
MOUNT  (0) 2023.06.21
NCS  (0) 2023.06.20