Skip to content

Commit

Permalink
docs: Update shell & network
Browse files Browse the repository at this point in the history
  • Loading branch information
itnpeople committed Aug 31, 2023
1 parent 8d78780 commit 2356c5f
Show file tree
Hide file tree
Showing 2 changed files with 307 additions and 1 deletion.
300 changes: 299 additions & 1 deletion _posts/tip/0000-01-01-shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,20 @@ description: Development Tips - Shell Script
* [`sed`](#sed) : (행)추가, 변환, 제거 처리하여 출력
* [`tee`](#tee) : 표준출력 또는 파일에 쓰는 명령어
* [텍스트 파일 라인별 출력](#텍스트-파일-라인별-출력)
* [`ex`](#ex) : `vi`의 line-editor 모드 명령어
* [텍스트 파일 생성](#텍스트-파일-생성)
* [if 연산자](#if)
* [for ~ in ~](#for--in)
* [Use cases of Shell](#use-cases-of-shell)
* [key=value 파라메터](#keyvalue-파라메터)
* [Passwordless and Sudoers](#passwordless-and-sudoers)
* [`sudo sh EOF`](#sudo-sh-eof)
* [Check for IP validity](#check-for-ip-validity)
* [System Daemon](#system-daemon)
* [`systemd`](#systemd)
* [`systemctl`](#systemctl)
* [Kernel](#Kernel)
* [`apt`](#apt)
* [Kernel](#kernel)

## `curl`
> 다양한 통신 프로토콜을 이용하여 데이터를 전송하기 위한 라이브러리와 명령 줄 도구
Expand All @@ -36,6 +43,19 @@ description: Development Tips - Shell Script
▒ curl -HHost:httpbin.example.com --resolve httpbin.example.com:31390:192.168.0.99 --cacert httpbin.example.com/2_intermediate/certs/ca-chain.cert.pem https://httpbin.example.com:31390
~~~

* 파일 다운로드

```
▒ curl -O https://cube.k3.acornsoft.io/download-cubectl
▒ curl -o download-cubectl.sh https://cube.k3.acornsoft.io/download-cubectl
```

* 리모트 sh 파일 로컬 실행

```
▒ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.2 TARGET_ARCH=x86_64 sh -
```


* 기타 사용법

Expand All @@ -47,8 +67,121 @@ description: Development Tips - Shell Script
▒ curl -i https://httpbin.org/ip # -i : print with http-headers
~~~


## Standard IO

### Variables

* 특정 범위의 문자열 자르기 `${STR:offset:length}`

```
▒ str="Hello, World, Bash"
▒ echo "${str:0:5}"
Hello
▒ echo "${str:7}"
World, Bash
▒ echo "${str:(-4)}"
Bash
▒ echo "${str:(-4):2}"
Ba
```

* 첫번째 문자열 포함, 가장 짧게 매칭되는 문자열 삭제 : `${STR#PATTERN}`

```
▒ str="AAABBBCCC"
▒ echo ${str#A*B}
BBCCC
▒ echo ${str#*B}
BBCCC
▒ echo ${str#B*C}
AAABBBCCC
```

```
▒ str1="/data/harbor"
▒ str2="data/harbor"
▒ echo ${str1#/} = ${str2#/}
data/harbor = data/harbor
```

* 첫번째 문자열 포함, 가장 짧게 매칭되는 문자열 삭제 : `${STR##PATTERN}`

```
▒ str="AAABBBCCC"
▒ echo ${str##A*B}
CCC
▒ echo ${str##*B}
CCC
▒ echo ${str##B*C}
AAABBBCCC
```

* 마지막 문자열 포함, 가장 짧게 매칭되는 문자열 삭제 : `${STR%PATTERN}`

```
▒ str="AAABBBCCC"
▒ echo ${str%A*B}
AAABBBCCC
▒ echo ${str%*B}
AAABBBCCC
▒ echo ${str%B*C}
AAABB
```

* 마지막 문자열 포함, 가장 길게 매칭되는 문자열 삭제 : `${STR%%PATTERN}`

```
▒ str="AAABBBCCC"
▒ echo ${str%%A*B}
AAABBBCCC
▒ echo ${str%%*B}
AAABBBCCC
▒ echo ${str%%B*C}
AAA
```

* Null 이면 default 문자열 출력 `${STR:-value}`

```
▒ str=""
▒ echo ${str:="default value"}
default value
▒ echo ${str}
```

* Null 이면 default 문자열 출력 및 변수값 지정 `${STR:=value}`

```
▒ str=""
▒ echo ${str:="default value"}
default value
▒ echo ${str}
default value
```



### `cut`
> 파일 또는 표준입력 문자열을 바이트, 문자열, 필드 기준으로 문자열을 잘라 출력
Expand Down Expand Up @@ -140,6 +273,19 @@ cb-cluster-w-xzuz4
▒ cat aaa.txt | while read line; do if [[ "$line" != "" ]]; then echo -n "$line\n";fi; done
~~~

### `ex`

* 예 : `openssl.conf` 파일에서 `DNS.1 = localhost` 찾아 `DNS.2 = www.itnp.kr` 라인을 추가

```
▒ ex openssl.conf <<EOF
/DNS.1 = localhost/
:append
DNS.2 = www.itnp.kr
.
:x
EOF
```

## 텍스트 파일 생성

Expand Down Expand Up @@ -191,6 +337,94 @@ kubectl get nodes --no-headers | awk 'END { print NR }'
EOF
~~~

## for ~ in ~

```
▒ for IP in "192.168.122.20" "192.168.122.251"
do
echo "@ $IP"
done
```

* varables
```
▒ SERVERS='192.168.122.20 192.168.122.251'
▒ for IP in ${SERVERS}; do echo "@ $IP"; done
```

* carriage return
```
▒ SERVERS=$(printf "192.168.122.20\n192.168.122.251")
▒ for IP in ${SERVERS}; do echo "@ $IP"; done
```

* string split (delemeter)
```
▒ SERVERS=$(echo '192.168.122.20|192.168.122.251' | tr "|" "\n")
▒ for IP in ${SERVERS}; do echo "@ $IP"; done
```


## if

```
if [ expression ]; then
<statement>
elif [ expression ]; then
<statement>
else
<statement>
fi
if [ expression ]
then
<statement>
else
<statement>
fi
```

* Not
```
if [ ! -f "$filename" ]
fi
```

* 비교 연산자
* `-z` a : 문자열 길이가 0
* `-n` a : 문자열 길이가 0 이상
* a `–eq` b : a == b (equal)
* a `–ne` b : a != b (negative)
* a `–gt` b : a > b (greater then)
* a `–lt` b : a < b (less then)
* a `–ge` b : a >= b (greater or equal)
* a `–le` b : a <= b (less or equal)

```
# 매개변수가 1보다 작으면
if [ $# -lt 1 ]; then
fi
```

* 파일 검사

* `-e` : Exist (노드, 디렉토리, 블록장치, 소켓 등)
* `-d` : Directory
* `-f` : File
* `-w` : Writable
* `-x` : Execuable
* `-r` : Readable
* `-O` : 소유자가 현재 사용자
* `-G` : 소유자 그룹이 현재 사용자
* `-h` : 심볼릭 링크
* `-b` : 블록 디바이스
* `-S` : 소켓 디바이스
* `-c` : 캐릭터 장치 파일이면
* `-s` : 0보다 큰 파일
* a `-nt` b : a 가 b 보다 최신파일
* a `-ot` b : a 가 b 보다 이전파일
* a `-ef` b : a 와 b 가 같은 파일이


## Use cases of Shell

Expand Down Expand Up @@ -222,6 +456,55 @@ echo "AWS_FILE=${AWS_FILE}"
```


### Passwordless and Sudoers

* Passwordless

```
▒ USER="ubnutu"
▒ SERVERS='192.168.122.20 192.168.122.251'
```

```
▒ for IP in $SERVERS
do
scp ${HOME}/cubectl-key.pub ${USER}@${IP}:/home/${USER}/cubectl-key.pub
ssh ${USER}@${IP} <<EOF
cat /home/${USER}/cubectl-key.pub >> /home/${USER}/.ssh/authorized_keys
EOF
done
```

* sudoers

```
▒ for IP in $SERVERS
do
ssh -i ${HOME}/cubectl-key ${USER}@${SERVER_1} <<EOF
echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/${USER}-sudoer
EOF
done
```

### sudo sh EOF

```
▒ cat <<EOF | sudo sh -x
apt-get install -y uidmap
EOF
```

### Check for IP validity

```
▒ if [[ $IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "is ip address"
else
echo "fail"
fi
```


## System Daemon

### `systemd`
Expand Down Expand Up @@ -292,6 +575,21 @@ EOF'
▒ systemctl list-units --type target --all
```

## `apt`

* Interactive command/화면 없이 패키지 설치

```
▒ sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install iptables-persistent
```

* `purge` 설정파일도 함께 패키지 삭제, `remove`는 설정 파일은 유지하고 패키지 삭제

```
▒ sudo apt-get -y purge iptables-persistent
```


## Kernel

~~~
Expand Down
8 changes: 8 additions & 0 deletions _posts/tip/0000-01-02-network.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,14 @@ description: Development Tips - Linux Network
* `-A` : 체인의 가장 마지막에 룰을 추가
* `-I` : 룰 순서 설정, 입력하지 않으면 1(가장 처음)에 추가

* 저장
> https://ko.linux-console.net/?p=10360#gsc.tab=0
```
▒ sudo DEBIAN_FRONTEND=noninteractive apt-get -yq install iptables-persistent
▒ sudo iptables-save -t nat | sudo tee /etc/iptables/rules.v4
```


### Use cases

Expand Down

0 comments on commit 2356c5f

Please sign in to comment.