while, until, select, select + case(메뉴만들기), 이중루프
반복문, for
bash 에서는 공백, tab, 줄바꿈을 별개의 데이터로 간주한다. -> IFS 변수에 정해져 있음
while
while (~ 하는 동안에, 결과 코드가 "0"이라면 정상실행)
do
명령을 수행
done
while 조건 또는 명령
do
실행할 구문 명령...
done
```
mkdir 0125 ; cd 0125
touch while1.sh ; chmod +x while1.sh
```
```
#!/bin/bash
while [ 1 ]
do
실행할 구문
done
while [ 0 ]
do
실행할 구문
done
```
while의 조건안에는 뭐가 있다하면 그냥 참이다.
지금 알아낸건데 (()) 안에서 변수에 $를 안써도 된다. 거의 변수의 안전영역 느낌이다.
심지어 (()) 안에서 0은 false이고 1은 true이다.
단 연산이 아닌 곳에서는 (())을 쓸수가 없다. 즉 명령어에 대해서 (())으로 감싸면 에러가 난다.
(())은 문자열 처리를 해줄 수 없다. 즉 문자열을 삽입하거나 연산하는 등의 과정은 못한다.
let var1=var2
let var1-=1
let도 (())와 같은 효과를 낸다.
[]은 여전히 조건문이다. [] 안에서는 -ge는 된다.
덧셈의 결과를 물어보는 계산식
문자열에서는 [[ ]] 를 사용할 수 있다. 사용하면 패턴, 정규표현식 사용이 가능해진다. 단 (( )) 처럼 변수에 $를 붙이지 않거나 연산이 가능하지 않은 [] 형태의 정규식 사용이 가능한 확장형일뿐이다. 그래서 여전히 변수명에는 $를 붙여주어야한다
응용하면 위와같이 작성할 수 있다.
그런데 빈 문자인지 체크하기 위해서 (( !ans )) 를 쓰는 것도 좋은 방법이다.
특이한점은 [Qq] 부분인데 이게 [[ ]] 의 이중 대괄호에서 사용되는 bash 만의 특수한 문법이다. 패턴 일치에서는 문자열 값과 비교할 정규표현식을 정의할 수 있다.
정리하자면
[[ ]] -> 정규표현식을 조건으로 내걸때
(( )) -> 숫자 연산을 하거나 조건을 걸고 싶을때
이렇게 만들어주면 된다.
until
until : ~까지 (참이 될 때까지 반복하겠다, 즉, 참이되면 종료하겠다)
루트가 로그인 되어 있을 때까지 루프!
루트로 로그인 되어 있다면 종료됨
select
루프이지만 메뉴를 생성할 수 있다. 사용자로부터 메뉴의 번호를 입력받아서 실행하도록 할 수 있으며 각 메뉴에는 자동으로 번호를 붙여준다.
```
select menu in 'ls -l' pwd date exit
do
$menu
done
```
사용자에게 입력을 받을때까지
하면 자동으로 입력을 받아서 처리해준다.
그런데 그냥 명력어 출력보다는 기능을 적어놓는게 더 좋을거 같다. 그래서 case문을 이용해서 이걸 처리하자
위와같이 select 내부에 case를 상비해서 처리해주는 방법이다.
마지막 종료시에는 break나 exit 둘다 사용가능하다.
네트워크
setup mode -> 장비를 새로 구매 했을 경우
또는 startup-config :
en : 관리자 모드
show
startup-config 가 없는 경우에는 장비의 defualt설정이 running-config에 올라가서 작동을 한다.
컴퓨터는 CPU + RAM 구조이다. 항상 장비들이 RAM으로 올라와 있어야 사용가능해진다.
그래서 사실 router나 switch는 일종의 컴퓨터와 동일한 아키텍처를 가지고 있고 라우팅이나 스위칭관련 운영체제가 탑재되어 해당 기능만을 할 수 있도록 만들어놓은 장비이다.
flash 메모리 : 운영체제
nvram 메모리 : startup-config (환경설정파일이 저장이 되는 곳)
환경설정을 하는 경우 해당 환경설정은 바로 startup-config로 들어가지않고 메모리의 일부 공간을 사용한 running-config에 입력이 됨
show flash : 운영체제 정보가 들어있는 곳
conf t
hostname AAA -> 호스트네임 변경하는 곳
== host AAA
do show running-config
요 running-config는 RAM에 들어간다.
```
ctrl + z
copy running-config startup-config
show startup-config
```
단 startup-config와 running-config가 같은건 아님
하지만 startup-config가 없는 경우에는 장비의 default 설정이 running-config 에 올라가서 작동을 함
암튼 이 스크립트를 다시 시작시키고 싶으면
```
setup
```
Router>
로 나오면 User mode이다. 제한된 기능만을 사용할 수 있고 간단한 장비 상태 조회가 가능
```
disable #en의 반댓말
```
02.Cisco_기본설정_1.pdf
cloud4soso - cloud4soso
cloud.4soso.net
Router#으로 나오면 privileged mode임 (권한모드, 관리자 모드)
모든 기능을 사용할 수 있는 상태가 된 것이고
장비의 터미널 환경, 가동 상태, 정보조회 등을 할 수 있는 모드
Router# configure terminal
Router(config)# : global configuration mode (전역환경설정모드, 환경설정모드)
장비의 환경설정이 시작됨
Router(config)# int f0/0
Router(config-if)# 하위 환경설정모드
interface fast ehternet 0/1 -> int f0/0
그냥 관리자 모드로 내려가기 : ctrl + z
프로세스가 실행되고 있는 경우 강제 취소 : ctrl + shift + 6 (ctrl + ^)
clock set
Router Banner 설정
banner motd(message of today)
login(motd 메시지다음 로그인 전)
incomming(텔넷)
exec(텔넷 제외 모든 접속)
Router 설정 저장
copy running-config startup-config
== copy run start
Router 설정 보기
show running-config
Router(config)#interface [Interface이름] [인터페이스포트번호]
Router(config-if)#ip address [ip주소] [서브넷마스크]
Router(config-if)#no shutdown
Router(config-if)#exit
위 순서대로 하면 해당 인터페이스가 활성화된다.
1841 연결된 인터페이스에 1.1.1.1 255.255.255.0
1941 연결된 인터페이스에 1.1.1.2 255.255.255.0
활성화 시킨 후 ping을 상대방 ip로 ping이 되도록 설정하기
환경설정을 저장
예시는 위와같이 설정해 나가면 된다.
위와같이 flash에서 운영체제만 지워버릴 수 있다.
하면 위와같이 가장 기본적인 운영체제로 들어간다.
.
TCP/IP 4계층을 활용
웹서버에서 사용자가 접속을 한다면
클라이언트에서는
1. http://www.naver.com/index.html 에서 자료가 출발하고
2. TCP형태로 Start Port는 임의의 port 주소이지만 Destination Port는 80으로 시작한다.(첫번쨰 이미지)
3. Start Ip는 내것인데 Destination IP는 알 수 없기에 DNS에 가서 IP를 물어본다. (두번쨰 이미지) -> Routing Table 사용
4. Ethernet에서 Start MAC(자기 MAC) 에서 Destination MAC(게이트웨이 주소의 MAC)으로 bit 신호를 변경 전송한다.(세, 네번째 사진) -> ARP Table 사용, 만약 해당 ip의 MAC주소가 확인되지 않으면 arp protocol이 작용한다.
접속 과정
5. bit 신호는 중간에 라우터에 도착하게 된다. 도착한건 자긴의 MAC주소이기 때문에 패킷을 열고 도착하고 싶은 주소를 확인한다. 만약 정보가 없으면 그 패킷은 패키한다. -> Routing Table(어디로 나가고 누구를 만나느냐?) 확인.
서버에서는
6. 서버에서는 패킷정보를 보고 arp table을 확인해서 데이터를 올린다.
7. IP를 보고 올린다.
8. 포트번호를 보고 올린다.
C:/Windows/System32/drivers/etc/services
이 컴퓨터가 쓰는 서비스들과 포트번호이다.
각 계층은 자기 주소가 아니면 Header의 decapsulation 하지 않는다.
각 계층은 상위 계층 또는 하위 계층으로 이동 시 참조를 해야되는 table에 정보가 없으면 해당 계층에서 data는 drop이 됨
OSI 4계층은 시스템 내에 여러 프로세스(가동 중인 프로그램)를 구분하기 위한 주소(client는 임의의 port사용, server는 지정하지 않으면 default port 주소 사용)
netstat -ano
-> 프로세스 번호들을 확인할 수 있다.
보면 같은 서비스라도 포트랑 PID가 모두 다르다
L3는 네트워크 통신을 하는 host 장비를 구분하기 위한 주소. 사람이 직접 지정을 한다. 장비에 등록이 된 routing table을 확인 후 패킷이 이동한다. -> 출구 인터페이스의 mac 주소를 붙여주고 도착지의 mac주소는 arp table을 확인 해서 L2 헤더를 만들게 된다.
L2는 네트워크 통신을 하는 host 장비를 구분하기 위한 주소. 장비가 자동으로 등록이 되도록 ethernet은 만들어져 있다.
Ethernet Protocol
= IP 주소(같은 네트워크 또는 다른 네트워크 판단)
Class IP
'Development(Web, Server, Cloud) > 22) LINUX - Cloud' 카테고리의 다른 글
Cloud 21일차 (0) | 2022.01.27 |
---|---|
Cloud 20 (0) | 2022.01.26 |
Cloud18 - 인스턴스 생성 쉘 만들기 (0) | 2022.01.24 |
Cloud17 + 반복문, 배열, (0) | 2022.01.21 |
Cloud16 + if 조건문, 복합테스트, 네트워크? (0) | 2022.01.20 |