Shell Script

yknam·2020년 2월 3일
0

linux

목록 보기
2/2

startup 프로그램작성

Running crontab -e will allow you to edit your cron.
Adding a line like this to it:

@reboot /path/to/script

sudo + password

echo '비밀번호' | sudo -S 명령어

권한수정

sudo chown -R yknam:yknam conf/
sudo chmod -R 744 conf/

sudo with password

echo <password> | sudo -S <command>
echo ykn9080 | sudo -S ./filebeat

pid by tcp

fuser -n tcp 3306
kill -9 $(fuser -n tcp 11434) # find and kill

pid찾고 kill하기

# pid찾기
pgrep -f 'process_name'

# pid찾아 지우기 
kill -9 $(pgrep -f 'process_name')

# 정확한 이름을 알경우
kill -9 $(pidof 'process_name')

# 동일명 중 처음것만 지울경우
kill -9 $(pgrep -f 'process_name' | head -1)

# 대소문자 구분없앰 -i 추가
kill -9 $(pgrep -fi chrome)

nginx 설정

  • log: /var/log/nginx/access.log
  • default.conf: /etc/nginx/conf.d/default.conf
  • start: systemctl restart nginx
  • 참고링크

password와 함께 입력

sudo -S <<< "ykn9080" cat /var/lib/mysql/winubuntu.log

ssh접속등록

1. Generate a rsa keypair: # ssh-keygen
2. then copy it on the server with one simple command:
ssh-copy-id userid@hostname

local script를 remote에서 실행

ssh root@imcmaster.pro <ts.sh

ssh alias 생성

nano ~/.bash_aliases
alias scotch='ssh nick@scotch.io'
alias example2='ssh root@example.com'
alias example3='ssh userxyz123@64.233.160.0 -p 56000'
alias droplet1='ssh ec2-user@droplet1.digitalocean.com -i /path/to/special/privatekey/droplet1.pem'

//reboot
source ~/.bash_aliases

reference

Script 생성

1. 파일생성 : cat > <scriptname>.sh
2. 작성후 저장 :ctr-d
3. 권한변경: chmod 700 <scriptname>.sh
4. 실행: ./ss.sh

test.sh Example

1. 시작: #! /bin/bash
2. 권한수정: chmod +x test.sh
3. 실행: ./test.sh
4. 변수: id='ykn', echo $id
	변수배열: daemon=("httpd" "mysql") echo ${daemon[1]}
	filelist=($(ls)) echo ${flielist[*]}
5. 연산자: num=`expr \( 3 \* 5 \) / 4 + 7 ` echo $num
6. 문자비교
문자1 == 문자2            # 문자1 과 문자2가 일치
문자1 != 문자2            # 문자1 과 문자2가 일치하지 않음
-z 문자                   # 문자가 null 이면 참
-n 문자                   # 문자가 null 이 아니면 참
문자 == 패턴              # 문자열이 패턴과 일치
문자 != 패턴              # 문자열이 패턴과 일치하지 않음

7. 수치비교
값1 -eq 값2             # 값이 같음(equal)
값1 -ne 값2             # 값이 같지 않음(not equal)
값1 -lt 값2             # 값1이 값2보다 작음(less than)
값1 -le 값2             # 값1이 값2보다 작거나 같음(less or equal)
값1 -gt 값2             # 값1이 값2보다 큼(greater than)
값1 -ge 값2             # 값1이 값2보다 크거나 같음(greater or equal)
값1 -gte 값2            # 값1이 값2보다 크거나

8. 파일검사
-e 파일명               # 파일이 존재하면 참
-d 파일명               # 파일이 디렉토리면 참
-h 파일명               # 심볼릭 링크파일
-f 파일명               # 파일이 일반파일이면 참
-r 파일명               # 파일이 읽기 가능이면 참
-s 파일명               # 파일 크기가 0이 아니면 참
-u 파일명               # 파일이 set-user-id가 설정되면 참
-w 파일명               # 파일이 쓰기 가능 상태이면 참
-x 파일명               # 파일이 실행 가능 상태이면 참

9. 조건: 
if [ $? == 0 ]
then
  echo "게이트웨이 핑 성공!"
else
  echo "게이트웨이 핑 실패!"
fi

10. 반복: 
for database in $(ls)
do
  echo ${database[*]}
done

File내의 문자교체
$ cat hello.txt
The is a test file created by nixCrft for demo purpose.
foo is good.
Foo is nice.
I love FOO.
Consider using https:// for all your needs.

sed -i 's/foo/bar/g' hello.txt
option: /g->전체교체, /gI -> foo의 대소문자구분없음 
sed 's+https://+https://www.cyberciti.biz+g' hello.txt  /->+교체가능

dockerinstall server: docker hub에서 image pull한후 compose up함

#!/bin/bash
SVR_OR_CLIENT=$1
COMPOSE_DIR="imcclient"
CONTAINER_IMC="imcc1"
if [ $SVR_OR_CLIENT == "server" ] 
then
	COMPOSE_DIR="imcserver"
	CONTAINER_IMC="imc1"
fi
#which host?
SERVER_SRC="namubuntu"
if [ $(hostname)=="imcserver" ]
then
	SERVER_SRC="docean"
fi


echo "Remote Exec2) pull images from Dockerhub"
docker login --username=<username> --password=<password>
docker-compose up -d

echo " Changing configuration of container"

docker exec -i ${CONTAINER_IMC} sh -c "sed -i 's+const current_url=server_url.*+sconst current_url=server_url.${SERVER_SRC}+g' config/index.js"
docker exec -i ${CONTAINER_IMC} sh -c "sed -i 's+datasrc:basic.mongodb.*+datasrc:basic.mongodb.${SERVER_SRC}+g' config/index.js"

mongoDB location 설정 및 Volume 생성, compose up

#! /bin/bash

echo "Step1: Change mongodb source"
echo "푸시할 서버를 지정하면 mongodb 소스로케이션 config파일을 자동 수정함.
ipa=$(hostname)

case "$ipa" in
imcserver) sed -i 's+datasrc:basic.mongodb.local+datasrc:basic.mongodb.docean+g' config/index.js;;
namubuntu) sed -i 's+datasrc:basic.mongodb.local+datasrc:basic.mongodb.namubuntu+g' config/index.js;;
*) a="not registerd system!!";;
esac

echo "Step2: Create Volumes"
arr=("mongodbdata" "jsondata" "svrnode_modules")
for var in "${arr[@]}"
do
  docker volume create  $var
done

echo "Step3: docker-compose up"
docker-compose up --build -d 

dockerpush.sh

#! /bin/bash

USERNAME=$1
PASSWORD=$2
SERVER_OR_CLIENT=$3 # server/client/all
COMMIT_BEFORE_PUSH=$4 #true/false

# 1,2: push할 server id,pass, 
# 3: push내용이 server, client, or both?
# 4: true: container의 수정한내용을 commit해서 image를 수정할 것인가?
# script example: sudo bash dockerpush.sh yknam ykn9080 server false

paramWarning() {
# warning if not input variables
if [ -z $USERNAME ]
then
        echo "Error: missing parameter."
        echo "sudo bash $0 yknam ykn9080"
        exit 1
fi
}
paramWarning
#sudo -i
docker login --username=$USERNAME --password=$PASSWORD
if [ $SERVER_OR_CLIENT == "server" ] || [ $SERVER_OR_CLIENT == "all" ] ; then
        if [ $COMMIT_BEFORE_PUSH = true ] ; then
                echo "Committing imc1 and imcmongo1 before push"
                docker commit imc1 yknam/imcserver:latest
                docker commit imcmongo1 yknam/imcmongo:latest
        fi
        echo "Pushing imcserver and imcmongo to dockerhub"
        docker push yknam/imcserver:latest
        docker push yknam/imcmongo:latest
fi
if [ $SERVER_OR_CLIENT == "client" ] || [ $SERVER_OR_CLIENT == "all" ]; then
        if [ $COMMIT_BEFORE_PUSH = true ] ; then
                echo "Committing imcc1 before push"
                docker commit imcc1 yknam/imcclient:latest
        fi
        echo "Pushing client to dockerhub"
        docker push yknam/imcclient:latest
fi

remoteExec.sh

#! /bin/bash

#arr=("clientdata" "clientdist" "clientimages" "clientnode_modules" "clientjs")
#ARR=("$@")
#ARR=(jsondata mongodbdata)
BACK_DIR=$1
SVR_OR_CLIENT=$2
shift
shift
ARR=("$@")
#server or client?
COMPOSE_DIR="imcclient"
CONTAINER_IMC="imcc1"
if [ $SVR_OR_CLIENT == "server" ]
then
        COMPOSE_DIR="imcserver"
        CONTAINER_IMC="imc1"
fi
#which host?
SERVER_SRC="namubuntu"
if [ $(hostname)=="imcserver" ]
then
        SERVER_SRC="docean"
fi
# echo $BACK_DIR ${ARR[@]}

echo "Remote Exec1) Volume creation & data mapping"
for var in "${ARR[@]}"
do
        #create volume
        docker volume create $var
        #volume directory clear
        rm -rf /var/lib/docker/volumes/$var/_data/*
        #extract vol data & copy to vol directory
        tar xvf ~/docker-compose/${BACK_DIR}/$var.tar -C /var/lib/docker/volumes/$var/_data
        # move vdir up one level and del vdir
        cd  /var/lib/docker/volumes/$var/_data/vdir
        mv ./* ../
        rm -rf /var/lib/docker/volumes/$var/_data/vdir
done

echo "Remote Exec2) pull images from Dockerhub"
docker login --username=<username> --password=<password>
cd ~/docker-compose/${COMPOSE_DIR}
docker-compose up -d

echo "Remote Exec3) Changing configuration of container"

#echo ${CONTAINER_IMC} ${SERVER_SRC}
#docker exec -i ${CONTAINER_IMC} sh -c "ls"

docker exec -i ${CONTAINER_IMC} sh -c "sed -i 's+const current_url=server_url.*+sconst current_url=server_url.${SERVER_SRC}+g' config/index.js"
docker exec -i ${CONTAINER_IMC} sh -c "sed -i 's+datasrc:basic.mongodb.*+datasrc:basic.mongodb.${SERVER_SRC}+g' config/index.js"
profile
50대 개발자 노드, 자바스크립트

0개의 댓글