1) test.sh (pringout time and date & who logged on the server)

 

#! /bin/bash
#Test Shell Program

#pringout time and date
echo time and date :
date

#who logged on the server
echo who logged on the server :
who

 

 

 


 

 


 

 


2) test2.sh (Test how to use environment variables)

 

#!/bin/bash
#Test how to use environment variables

echo Display user information
echo user id : $USER
echo UID : $UID
echo HOME : $HOME

 

 

 


 

 


3) test3.sh (숫자 계산)

 

#!/bin/bash
num1=10
num2=20
num3=30
r_add=$(expr $num1 + $num2 + $num3)
r_sub=$(expr $num2 - $num1)
r_mul=$(expr $num1 \* $num2)
r_div=$(expr $num2 / $num1)
echo $r_add
echo $r_sub
echo $r_mul
echo $r_div



 

 

 


 

 


4) test4.sh (숫자 계산)

 

#!/bin/bash

num1=10
num2=20
num3=30

r_add=$[$num1 + $num2 + $num3]
r_sub=$[$num2 - $num1]
r_mul=$[$num1 * $num2]
r_div=$[$num2 / $num1]

echo $r_add
echo $r_sub
echo $r_mul
echo $r_div

 

 

 

5) shell파일에 인자 넘기기


#!/bin/bash

add=$[$1 + $2]
sub=$[$1 - $2]
mul=$[$1 * $2]
div=$[$1 / $2]

echo add : $add sub : $sub mul : $mul div : $div

=> 실행 :

. test6.sh 3 5

 

*환경 변수 확인

$env

 

*Path(global) 확인

$ env $PATH

또는

$ echo $PATH

 

Path를 만들때는 지우고 새로 만드는 것이 아니라, append를 해야 한다. 지울 경우에는 :

$ unset  ...

 


 

 

 


 

 


 

*쉘 인자 변수 및 특수 변수(중요)

$0 실행된 쉘 스크립트의 이름

$# 스크립트에 넘겨진 인자의 개수

$$ 현재 실행되고 있는 쉘 스크립트의 프로세스 번호

$1~$n

$? 이전 명령어가 제대로 실행됐으면(0으로 표시)

    이전 명령어에 에러가 있으면(127)

    코드종류:
    0 : 명령이 성공적으로 완료됨

    1 : 일반 알 수 없는 오류

    2 : 쉘 명령을 잘못 사용함

    126 : 명령을 실행할 수 없음

    127 : 명령을 찾을 수 없음

    128 : 잘못된 종료 매개변수

    128+x : 치명적인 오류로 리눅스 신호 x를 포함

    130 : <Cntl> + <C> 로 명령이 완료됨

    255 : 범위를 벗어난 종료 상태


 

여기서는 '127 : 명령을 찾을 수 없음'


 

 


 

 


*지역변수를 전역변수로 만들기 :


$echo $my_name

kosta


$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/aiadm/.local/bin:/home/aiadm/bin:/usr/local/bin

$ PATH=$PATH:/home/aiadm/lab/mybin/
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/aiadm/.local/bin:/home/aiadm/bin:/usr/local/bin:/home/aiadm/lab/mybin/

 

 

PATH=$PATH:/$HOME/lab/mybin

export PATH
 

 

 


 

 


*실행했던 user 확인 :

$ who

 

*오늘 날짜 확인 :

$ date

 

 

*서브쉘로 실행 / 쉘 자체를 실행

 

1) 서브쉘로 돌리기 위해서는

./test.sh

=>하지만 이렇게 할 경우 permission denied가 뜬다. 실행가능한 파일로 만들어주기 위해서는 chmod+x test.sh 하고 입력해주어야 한다.

 

2) 쉘 자체를 실행시키려면

. test.sh

 

 

*압축(tar) :

tar -cvf 하하하.tar (tar로 압축)

tar -zcvf 하하하.tar.gz (gzip으로 압축)

tar -xvf 하하하.tar(압축풀기)

 

*실행중인 프로세스 확인 :
ps -ef

ps -f

 

*실행중인 프로세서 Kill :
kill -9 숫자

(ex: kill -9 123)

 

*CPU 및 메모리 확인 :
top           

                                                                                                          

 

 

 


 

 


*환경변수 :

같은 시스템이더라도...

 

창을 새로 띄울때마다 Shell이 달라진다.

Shell이 가지고 있는 환경변수가 계속 달라진다.


'-' 가 붙어 있느냐 없느냐에 따라 차이가 큼

-는 로그인 Shell(환경변수를 모두 가지고 오겠다는것!!)

(ex: su - root <==> su root)


 

 


 

 


*서브쉘이란?
쉘 명령어를 괄호()로 묶어서 실행하면 (프로세스 리스트) 서브 쉘로 실행됨.

$ ((sleep 10); sleep 20) &

$ ps --forest

로 확인

uname -r

cd /lib/modules

uname -r

내가 사용하고 있는  linux 버전 확인

cd /lib/modules/$(uname -r) = cd /lib/modules/4.8.0-36-generic$ ls

cd ${pwd}

 

./<shell script>.sh => 서브쉘로 돌게 된다.


 

*co-processing 이용하기

coproc sleep 10

Subshell로 백그라운드로 돈다

 

 


 

 


 

*파일권한변경:
chmod

chown

 

 

*부모쉘과 자식쉘(Hirarchy 상으로 실행시킨 부모 쉘 확인):
ps --forest

 

 

 

여기서 process 22482(PID)를 실행한 것은 21687(PPID)이다.

 

*절대경로 확인(builtin인지 여부 확인):

type -a ...

(ex: type -a pwd)

 

*Shell이 가지고 있는 환경변수는 아래와 같이 표현한다:
(pwd; ls; cd /etc; pwd; cd; pwd; ls; echo $BASH_SUBSHELL)

 

Virtual Box 설치 (vbox5.2.4.zip)

 

 


 

 


 

 


*Shell Programming 특성 :

- Compile과정이 없음

- 중간에 에러가 났을 때 Next를 진행

- 명령어의 자동화툴


*러닝 맵:

- Linux로 좀 더 완성도 높은 제품을 만들기 위해서는 C프로그래밍을 알아야 한다(디바이스 제어, 포인터를 자유롭게 사용할 수 있어야...)
- 임베디드 C프로그래밍과 코드 최적화

 

Virtual Box에 ubuntu 실행

 

 

 

 

 

 

 

 


 

 


 

 

 

 

리눅스 런 레빌(Run Level)

*확인방법:
-> $runlevel

-> $who -r

 

 

-> 데비안/우분투 계열 :

-> 레드헛 계열 : 가장 많이 사용하는 Centos


/etc/init, /etc/init/rc-sysinit.conf, /etc/init/rc, /etc/init.d ...

/etc/는 서버의 기본 구성정보를 관리한다

 

메모리를 Mapping해주는 기능도 매우 중요하다,

RAM과 CPU 사이의 통신

swap 영역이 지정되어 있음...백업

 

Ubuntu를 띄우고

$ifconfig

를 입력하면 ip 정보를 확인할 수 있다.

그런데 로컬 PC CMD와 상이...

 

Ubuntu 창 상단에 장치 > 네트워크 설정으로 이동

어뎁터에 브리지 선택

 

 

command 창에 $sh 입력 :

(Shell Script를 작성 시 #!/bin/sh 을 앞에 추가하지 않으면 실행이 안 될 수 있다)

 


 

 

 


 

 


*쉘(Shell)이란?

- Shell은 사용자가 입력한 모든 명령어를 읽어서 실행하고 출력하는 프로그램!!

 

*Shell 종류:

- bash

- sh

- csh

- ksh

- zsh
- dash(ash을 Debian 버전으로 만들었으나 Debian의 기본 쉘이 아님)

 

*OS에서 어떤 Shell을 실행하는지 확인 방법 (여기서는 bash):
 

 

 

*커맨드 설명(온라인 메뉴얼) 확인방법 :


$man ...

(ex: $man pts)


 

+ Recent posts