레이블이 sed인 게시물을 표시합니다. 모든 게시물 표시
레이블이 sed인 게시물을 표시합니다. 모든 게시물 표시

python 패키지 이름 모를때 삭제하기

# /usr/local/bin/aaa 파이썬 프로그램을 실행할 수 있는데,
# pip 로 aaa 를 삭제하려고 하면 설치되지 않았다고 나온다.
pip uninstall aaa
WARNING: Skipping aaa as it is not installed.

# aaa 패키지를 정보를 보면 찾을 수 없다고 나온다.
pip show aaa
WARNING: Package(s) not found: aaa

# 원인은 실행파일 이름과 실제 패키지명이 달라서다.
# 삭제를 위해선 실제 패키지명을 알아야 하는데 pip 로 파악할 수 없었다.

# [패키지 설치 경로 찾아서 삭제하기]
# 우선 다음 스크립트를 실행해 python 패키지 모듈 경로를 파악한다.
cat << zzz | python | sed -e 's/\[//g' -e 's/\]//g' -e 's/,/\n/g'
import sys
print(sys.path)
zzz

# 보통 /usr/local/lib/python3.9/site-packages/ 같은 곳에서 
# aaa (실행파일명)으로 시작하는 파일을 찾아본다.
fd "^aaa" /usr/local/lib/python3.9/site-packages/
/usr/local/lib/python3.9/site-packages/aaa
/usr/local/lib/python3.9/site-packages/aaa-bbb
... 생략

# aaa-bbb 가 실제 패키지 이름인것을 유추해볼수 있다.
# aaa-bbb 소스 내에서 aaa 를 사용하는지 확인해본다.
# 이제 pip 로 삭제본다.
pip uninstall aaa-bbb

k8s configmap 사용하기

# 젠킨스 빌드 후 버전 정보를 configmap(key-value 데이터 저장하는 오프젝트)을 통해
# 운영 중인 k8s pod 에 전달하려고 한다.

# 우선 pod 또는 deployment(pod 와 replica를 생성하고 제어하는)에
# configmap 볼륨(volumes)을 추가한다.
# 마운트(volumeMounts)를 설정하면 파일로 사용할 수 있다.
# 환경변수(env)를 설정하면 환경변수 값으로 설정돼 사용할 수 도 있다.

# ysoftman-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ysoftman-test
  name: ysoftman-test-deployment
spec:
  replicas: 1
  revisionHistoryLimit: 0
  selector:
    matchLabels:
      app: ysoftman-test-deployment
  template:
    metadata:
      labels:
        app: ysoftman-test-deployment
    spec:
      containers:
        - name: ysoftman-test
          image: ysoftman.test.com/ysoftman/ysoftman-test
          imagePullPolicy: Always
          ports:
            - containerPort: 443
            - containerPort: 8080
          command: ["./ysoftman-test", "-myopt1=test"]

          # 파일로 configmap 을 사용할 경우
          # 컨테이너에 /configmap 로 configmap 을 마운트
          volumeMounts:
          - name: configmap
            mountPath: "/configmap"
            readOnly: true
          # 환경변수로 설정해 사용할 경우
          env:
              # configmap 로부터 가져와 다음 환경변수이름으로 저장된다.
            - name: ysoftman-version-env
              valueFrom:
                configMapKeyRef:
                  # ysoftman-configmap 을 참조한다.
                  name: ysoftman-configmap
                  # ysoftman-configmap 의 ysoftman-version.json 키의 값을 가져온다.
                  key: ysoftman-version.json
      # configmap 이 있는 볼륨
      volumes:
          # 컨테이너 /configmap 에 마운트될 볼륨 이름
        - name: configmap
          configMap:
            # configmap 이름
            name: ysoftman-configmap


# 적용
kubectl apply -f k8s/ysoftman-deployment.yaml


# 젠킨스 빌드 후 k8s configmap 에 버전 정보 저장
# ysoftman-configmap-template.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: ysoftman-test
  name: ysoftman-test-configmap
data:
  # key : value 로 데이터 설정
  ysoftman-key1: 123
  ysoftman-key2: "lemon_juice"
  
  # value 내용이 많다면
  # x.x 처럼 파일 이름처럼 키이름 설정하고
  # | (literal 스타일로 멀티라인 지정) 지시자�로 value 를 명시하면
  # 컨테이너에서 마운트해 파일로 접근할 수 있다.
  ysoftman.version: |
    aaa = "lemon"
    bbb = 123

  # 내용이 json 인 경우
  ysoftman-version.json: |
    {
      "VersionName":"v1.0.0",
      "VersionTime":"2020-09-01_14:30:10_KST"
    }

  # 버전값 부분을 sed 로 바꿀 수 있도록 유니크한 스트링으로 명시
  ysoftman-version2.json: |
    {
      "VersionName":"__versionname__",
      "VersionTime":"__versiontime__"
    }



# 실제 버전값은 젠킨스의 환경변수로 가지고 있기 때문에
# sed 로 버전값 부분을 변경해서 실제로 적용할 파일을 생성한다.
vn="v1.0.1"
vt="2020-09-02"
sed -e "s/__versionname__/${vn}/g" -e "s/__versiontime__/${vt}/g" < ysoftman-template.yaml > ysoftman-configmap.yaml

# 적용
kubectl apply -f k8s/ysoftman-configmap.yaml

# configmap 업데이트되면 kubelet(k8s 노드에서 동작하는 에이전트)이
# configmap 동기화시간+캐시시간 이후에 pod 에 반영된다.
# 결과 확인
# 이제 pod shell 로 들어가면
# 다음 위치에 파일이 존재한다.
/configmap/ysoftman-version.json

# 환경 변수로도 설정돼 있다.
echo $ysoftman-version-env

# configmap 데이터를 업데이트 하면 볼륨 마운트된 파일 자동으로 갱신되지만
# 환경변수는 deployment 의 env 값 설정 부분을 다시 수행(pod restart)
# 해야 하기 때문에 파일로 접근하는것이 좋다.

# 참고

Windows 윈도우용 리눅스 툴 패키기

grep, awk, sed, touch 등 리눅스계열의 툴들을 윈도우에서도 사용할 수 있다.

다운로드 http://gnuwin32.sourceforge.net/br

Tip. 전체 패키지 쉽게 설치하기
GetGnuWin32 을 먼저 다운받아 압축을 푼다.
download.bat 실행하여 패키지를 다운 받고
install.bat 실행하여 패키지를 설치한다.

Linux ls find grep sed 를 이용한 유용한 명령들

# 디렉토리 내의 모든 파일들을 대상으로 문자열 찾기
# -r : 재귀수행(하위 디렉토리)
# -n : 라인번호# --include=*.txt : txt 확장자 파일만 대상
# ysoftman : 찾을 문자열
# . : 시작할 디렉토리
grep -rn --include=*.txt ysoftman .

# jpg 파일들만 검색해서 다른 디렉토리로 복사하기
# find . : 현재 디렉토리를 포함한 하위 디렉토리에서
# -name *.jpg : 확장자가 jpg 인 파일을 찾아
# -exec cp -v {}  /home/ysoftman/ \; : 찾은결과 {} 에서 /home/ysoftman 로 -v 복사상태를 표시하며 복사(-exec 는 항상 공백\; 로 끝나야한다.)
find . -name *.jpg -exec cp -v {} /home/ysoftman/ \;

# sed test1
# 하위 디렉토리(파일을 제외)만 출력하기
# ls -lR ./ ysoftman : ./ysoftman 디렉토리에서 -l : 리스트, -R : 하위 디렉토리
# | grep ":$" : 앞의 출력 결과를 파이프로 넘겨받아 : 로 끝나는 부분만 출력
# | sed 's/:/\//' : 앞의 출력 결과를 파이프로 넘겨받아 처음 부분을 [subdir] 로 바꿔서(추가) 출력
ls -lR .. | grep ":$" | sed "s/^/[subdir]/"
# sed_test.txt 내용에서 ysoftman 찾으면 출력 끝내기
cat sed_test.txt | sed "/ysoftman/q"

# sed test2
# 임시 텍스트 파일 생성
TEMP_FILE="sed_test.tmp"
echo 'aaa line1
bbb line2
ccc line3
ddd line4
eee line5
fff line6
ggg line7
hhh line8
iii line9
jjj line10' > ${TEMP_FILE}
# 라인2만 삭제하고 출력
# d 삭제
echo 'delete line 2 and print'
cat ${TEMP_FILE} | sed  "2d;"
# 2~4 라인만 출력
# -n sed 가 입력받은 각라인의 에코 출력하는것을 막는다. 조건에 해당하는것만 출력하도록 한다.
# '2,4p' 2~4라인 프린트2~4라인 프린트
echo 'print only line 2~4'
cat ${TEMP_FILE} | sed -n "2,4p"
# 3~5 7~8 라인만 출력
# ; 는 조건의 끝을 나타낸다.
echo 'print only line 3~5, 7~8'
cat ${TEMP_FILE} | sed -n "3,5p;7,8p;"
# ccc ~ ggg 패턴 사이의 내용 출력
echo 'print only pattern ccc ~ ggg '
cat ${TEMP_FILE} | sed  -n "/^ccc/,/^ggg/p;"
# ccc ~ ggg 패턴 사이의 내용만 삭제하고 출력
echo 'delete pattern ccc ~ ggg and print'
cat ${TEMP_FILE} | sed "/^ccc/,/^ggg/d;"
# 임시 텍스트  파일 삭제
rm -f ${TEMP_FILE}

# sed test3
# @뒤로 삭제
# Substitute 형식 : s/regular expression/replacement/flag
out=`(echo "ysoftman @open (12345)" | sed "s/@.*$//")`
echo "$out"___result
# 공백@ 뒤로 삭제
out=`(echo "ysoftman @open (12345)" | sed "s/ @.*$//")`
echo "$out"___result
# 컬문자의 경우
reset_color='\033[0m'
green='\033[0;32m'
# 공백이 아닌 컬러 문자가 포함되어 공백 뒤 삭제가 안된다.
echo -e "ysoftman ${green}color${reset_color} string " | sed "s/ color.*$//"
# 중간에 컬러 문자를 제거해줘야 한다.
echo -e "ysoftman ${green}color${reset_color} string " | sed "s,$(printf '\033')\\[[0-9;]*[a-zA-Z],,g" | sed "s/ color.*$//"