Linux 162

[Shell] JOIN 함수 구현 - 배열 요소를 구분 기호로 결합

개요최근 쉘 스크립트를 만들고 있는데, 배열의 요소를 구분 기호로 결합한 문자열을 만드는 join 함수가 필요해졌다.이 글에서는 구글링 해서 찾은 join 함수를 기록해 둔다. 스크립트join_ws() { local d=$1 s=$2; shift 2 && printf %s "$s${@/#/$d}"; } 사용법arr=("apple" "banana" "cherry")echo -e $(join_ws ',' "${arr[@]}")echo -e $(join_ws ' || ' "${arr[@]}")echo -e $(join_ws '\n' "${arr[@]}")실행시켜 보면 스크립트 대로 쉼표, 문자열, 줄 바꿈을 기준으로 잘 연결된 문자열을 확인할 수 있다. 동작 방식동작 방식을 분석하면 다음과 같다. 1...

Linux/Shell Script 2025.05.12

[Shell] 매개변수 배열 슬라이싱

개요쉘 스크립트를 하나 개발하고 있다. 실행 시 매개변수를 몇 가지 전달해야 하는데, 전달한 매개변수 배열의 슬라이싱이 필요하다.방법을 적어둔다. $@$@은 모든 매개변수를 접근하되, 별개의 구분된 문자열로 취급한다. 즉, 배열로 취급한다. (흔히 $@와 혼용되는 $*는 모든 매개변수를 공백으로 구분된 하나의 문자열로 취급한다.)때문에 배열 슬라이싱을 하기 위해서는 $@을 사용해야 한다. 슬라이싱쉘 스크립트에서 배열 슬라이싱 방법은 다음과 같다.${변수:인덱스:길이}인덱스와 길이는 음수를 허용하며, 음수를 사용하면 뒤에서부터의 인덱스에 해당한다. 아래는 케이스별 예시이다.$ string=01234567890abcdefgh$ echo ${string:7}7890abcdefgh$ echo ${string..

Linux/Shell Script 2025.05.09

[Linux] curl: (60) SSL certificate problem: unable to get local issuer certificate - 인증서 검증 무시

개요업무 중 제공되는 주피터 노트북 환경에서 개발한 API에 대한 동작 테스트가 필요하다. 때문에 API를 외부에서 호출해보려고 했는데, 호출 시 다음과 같은 에러가 발생했다.원인을 확인하고 해결 방법을 적어둔다.  원인확인해 보니 curl은 기본적으로 서버의 SSL 인증서를 확인하는데, 그 인증서가 신뢰할 수 있는 인증 기관에 의해 발행되지 않았거나, 모르는 기관에서 발급한 인증서일 경우 검증 에러가 발생할 수 있다고 한다.다시 말해 curl이 서버에서 제공한 인증서를 확인할 수 없을 때 발생할 수 있다.   해결관련해서 해결 방법은 크게 두 가지가 존재한다.- curl이 신뢰하는 인증 기관 목록(CA List; Certificate Authority List)에 접속 사이트의 인증서를 발급한 기관 추..

Linux 2025.04.02

[Linux] gzip - 압축률 확인

개요gzip으로 압축된 파일이 원본 대비 얼마나 압축되었는지 확인하고 싶다. 압축 파일과 압축 해제한 파일의 용량을 비교해 보면 되겠지만, 굳이 압축을 풀지 않고 확인할 수 있는 방법을 알아두면 편한 것 같다.방법을 적어둔다.  압축률 확인gzip 압축 방식에 대해서 작업을 할 때는 gzip 명령을 사용한다. gzip 명령은 파일 압축, 파일 압축 해제, 내용 확인 등의 기능을 제공한다. 그중 압축률 확인은 내용 확인 기능에 해당한다.gzip -l # -l : 압축 파일 내용 나열위의 사진의 경우 압축률이 77.1%인 것을 확인할 수 있다. 여러 압축 파일을 나열하면 각각의 파일 압축률과 전체 파일 압축률을 확인할 수 있다.   참고 문서http://igoni.kr/books/1-os/page/gzip

Linux 2024.11.11

[Nginx] proxy 사용 시 upstream timed out (110: Connection timed out) while reading response header from upstream

현상Nginx를 프록시 서버로 사용하고 있는데 간헐적으로 504 Timeout이 발생하는 것을 확인했다.504 Gateway Time-outnginx원인을 확인하고 해결 방법……이라고 하기 보다는 현상 해소와 관련된 설정값을 적어둔다.   원인관련 로그는 niginx 로그의 proxy-error.log에서 찾을 수 있다.2024/10/17 08:06:01 [error] 1345049#1345049: *1213 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.100.100.100, server: an.internal.example.biz, request: "POST /se..

Linux 2024.11.04

[Linux] uniq - 중복 제거

개요Linux 상에서 여러 행에 걸친 내용을 입력으로 중복된 내용을 제거한 결과를 확인하고 싶다. 방법을 알아보자.  uniquniq 명령은 중복된 내용의 행이 연속으로 나타나는 경우, 중복으로 취급한다.uniq [-option] [filename]때문에 보통 내용을 정렬하는 sort 명령어와 함께 사용된다.   사용 예시아래와 같은 텍스트를 예시로 중복을 제거해보자.batabcappleAbcBALLABcbat 1. 중복 제거sort test.txt | uniquniq 명령은 기본적으로 중복 여부 판단시 대소문자를 구분한다. 중복 항목이었던 bat가 제거된 상태를 확인할 수 있다. 2. 중복된 항목 표시sort test.txt | uniq -d중복된 항목인 bat만 표시되는 모습을 확인할 수 있다. 3...

Linux 2024.10.28

[Tomcat] 응답에 Server 속성값 지정

개요2024.09.05-[Nginx] server_tokens - 서버 정보 명시 여부 결정에서 nginx 사용 시 서버 정보를 노출하지 않도록 설정을 했었다. 비슷한 설정으로 이번 글에선 Tomcat 사용할 때 응답에 server 정보를 설정해 보자.  기본 설정Tomcat 사용할 때의 서버 정보는 conf/server.xml의 Connector 설정에서 지정할 수 있는 것 같다.  설치 후 기본 설정은 위와 같은데, 기본 설치 후 서비스를 시작하여 Tomcat 서버에 접속해 보면 응답 헤더는 다음과 같다.   server 속성응답 헤더에 server 정보를 임의로 지정할 때는 server.xml의 Connector 부분은 server 속성을 추가하면 된다. server 속성은 http 응..

Linux 2024.09.23

[Nginx] server_tokens - 서버 정보 명시 여부 결정

개요최근 API 서버를 구성하면서 nginx를 사용하고 있는데, response header에서 아래와 같이 서버 정보가 노출되어 잇어 삭제해달라는 요청이 있었다.관련 설정에 대해서 적어둔다.  server_tokensserver_tokens는 오류 페이지만 Server의 Response Header에서 nginx 버전의 출력 여부를 결정한다.server_tokens 값설명onnginx 버전 출력. 기본값offnginx 버전 미출력buildnginx 버전 및 빌드 이름 출력   설정 방법Ubuntu 기준으로 /etc/nginx/nginx.conf에서 값을 설정할 수 있다.user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/m..

Linux 2024.09.20

[Shell] 변수 기본값 설정

개요 쉘 스크립트에서 변수를 초기화화하면 환경변수 등으로 설정된 값을 사용하거나 그렇지 않은 경우가 존재할 수 있다. 때문에 쉡 스크립트에서 변수를 초기화할 때 기본값을 설정하는 방법을 제공해주고 있다. 이 글에서는 변수 선언 시 기본값을 설정하는 방법에 대해 적어둔다. 변수의 상태 쉘 스크립트에서 변수의 상태는 크게 세 가지로 구분할 수 있다. 선언된 변수 값이 NULL이 아닌 변수 값이 NULL인 변수 선언되지 않은 변수 쉘 스크립트는 변수의 상태와 사용한 확장자에 따라 기본값으로 초기화되는 조건이 달라질 수 있다. - / = 참조하는 변수가 선언되지 않은 경우에는 -, :, = 등의 확장자를 사용하여 변수의 기본값을 초기화한다. 확장자 설명 ${VAR-value} VAR이 선언되지 않은 경우, va..

Linux/Shell Script 2024.03.07

[Linux] sshpass - 원격 서버 crontab 설정하기

개요 Bash 쉘 스크립트에서 sshpass를 이용해 원격 서버의 crontab에 스케쥴링 설정을 추가하려고 한다. 방법을 적어둔다 + 기존 항목에서 추가할 항목을 확인하거나 수정하는 등의 작업은 다루지 않는다. 쉘로 crontab 설정 crontab_set_str='crontab에 설정할 내용' (crontab -l 2>/dev/null; echo "$crontab_set_str") | crontab - 동작 방식 1. crontab -l 2>/dev/null : 현재 crontab 항목 확인 2. echo "$crontab_set_str" : 기존 crontab 항목에 추가할 항목 출력. 1번을 함께 고려하면 기존 항목과 같이 출력하는 것이 된다. 3. crontab - : 전달받은 파일, 표준 입력..

Linux 2023.11.24