본문 바로가기

리눅스/Bash59

[bash] curl을 이용할 때 Error in the HTTP2 framing layer 에러 발생시 처리 방법 curl을 이용하여 통신할 때 특정 상황에서 다음 오류가 발생하는 경우가 있습니다. curl은 기본적으로 HTTP2 프로토콜을 이용하여 통신하고, 이 프로토콜을 이용하던 중 오류가 발생하면 다음의 에러가 나타납니다. Error in the HTTP2 framing layer 이 오류는 옵션을 추가하여 HTTP1 통신으로 처리하면 회피할 수 있습니다. curl --http1.1 xxx 2023. 8. 24.
[ssh] ssh 접속 배너 및 MOTD 대문 설정 서버에 ssh 로 접근했을 때 보여지는 ssh 배너 및 MOTD를 설정 하는 방법은 다음과 같습니다. 2023. 8. 20.
[bash] apt conflict 오류 apt 를 이용하여 라이브러리를 설치 할 때 다음과 같은 오류가 발생하는 경우가 있습니다. The following packages have unmet dependencies: libsasl2-modules-gssapi-heimdal : Conflicts: libsasl2-modules-gssapi-mit but 2.1.27~101-g0780600+dfsg-3ubuntu2.3 is to be installed libsasl2-modules-gssapi-mit : Conflicts: libsasl2-modules-gssapi-heimdal but 2.1.27~101-g0780600+dfsg-3ubuntu2.3 is to be installed E: Unable to correct problems, you .. 2023. 8. 19.
[bash] snappy 라이브러리 다운로드 설치 ubuntu 18.04에 패키지를 설치할 때 기본적으로 apt 를 이용하지만, 인터넷이 되지 않는 환경에서 작업을 해야 할 때는 설치 파일을 다운로드 해서 설치해야 합니다. 설치 파일은 다음 위치에서 확인할 수 있습니다. https://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/libsnappy1v5_1.1.8-1build1_arm64.deb.html 그리고 Download 항목에서 설치 파일 다운로드 링크를 확인할 수 있습니다. 이 파일을 받아서 dkpg 명령으로 설치할 수 있습니다. 파일로 다운로드를 받게 되면 사전에 필요한 라이브러리가 없어서 설치가 안될 수도 있습니다. 이럴때는 필요한 라이브러리를 순서대로 설치해 주어야 합니다. 스내피 라이브러리명인 libsnappy-.. 2022. 8. 24.
[ubuntu] 우분투 18 로그인시 출력되는 MOTD 제거 하기 우분투 18.04는 사용자가 로그인하면 Welcome to Ubuntu 라고 출력되며, System information이 포함된 MOTD(Message Of The Day) 화면을 출력합니다. 이 화면을 제거하는 방법은 motd 파일의 실행 권한을 제거하는 것입니다. 다음 명령어를 입력하면 로그인 메시지가 출력되지 않습니다. sudo chmod -x /etc/update-motd.d/* 2022. 8. 2.
[ssh] ssh 접속 배너 설정하기 ssh로 서버에 접속할 때 접속자에게 배너를 보여 줄 수 있습니다. 배너를 설정하는 방법은 다음과 같습니다. /etc/ssh/sshd_config 의 banner 설정 수정. 사용자가 생성한 파일의 경로 지정 banner 파일 생성 sshd 재시작 배너로 사용하기에 좋은 ASCII Art 를 만들어 주는 사이트를 참고해서 배너를 만들면 좋습니다. https://patorjk.com/software/taag/#p=testall&f=Ogre&t=banner Text to ASCII Art Generator (TAAG) patorjk.com 2022. 8. 2.
[curl] curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1) 오류 원인은 정확하게 알 수 없지만 curl을 이용하여 데이터를 확인한 결과를 다음 curl에 헤더값으로 사용하니 이상하게 다음과 같은 오류가 발생하였습니다. curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1) 오류는 다음과 같이 http1.1 옵션을 추가해서 해결하였습니다. 처음에 사용한 curl의 스트림이 계속 연결된 상태로 다음 스트림을 계속 사용해서 그런것 같습니다. curl --http1.1 http://host_url 2022. 6. 1.
[curl] curl의 --form으로 전달 된 POST 데이터 확인하는 방법 curl --form으로 데이터를 전달 할 때 실제로 전달되는 데이터 내용을 확인 하려면 --trace-ascii 옵션을 이용하여 확인할 수 있습니다. 이 옵션을 사용할 때 옵션 뒤에 저장할 파일명을 입력하면, 해당 파일명으로 로그가 저장됩니다. 2022. 5. 2.
[bash] 배쉬 쉘의 옵션 켜고 끄는 방법 배쉬 쉘에서는 set 을 이용해서 옵션을 켜고 끌수 있습니다. 자주 사용하는 옵션은 오류가 발생하면 스크립트를 종료하게 하는 -e와 디버깅 메시지를 출력하게 하는 -x 옵션이 있습니다. 만약 옵션을 켜고 사용하는 중에 잠시 옵션을 꺼야 한다면 마이너스(-) 대신 플러스(+)를 사용하면 됩니다. #!/bin/bash # 디버깅 메시지 출력 set -x echo "A" # 디버깅 메시지 종료 set +x echo "B" # 디버깅 메시지 출력 set -x echo "C" 2022. 2. 21.
[bash] crontab을 echo로 일괄로 설정하는 방법 크론탭을 설정할 때 여러개의 노드에 한번에 설정해야 하는 경우가 있습니다. 이럴 때는 크론탭이 설정되는 파일에 바로 입력해 주면 됩니다. CentOS기준으로 해당 파일의 위치는 /var/spool/cront/유저명 파일에 내용이 저장됩니다. 해당 위치에 정보를 설정하면 됩니다. 2021. 3. 26.
xmllint 명령어의 입력을 표준 입력(stdin)으로 사용하는 방법 xmllint의 입력을 표준 입력(stdin)으로 사용하는 방법은 하이픈(-)을 이용하는 것입니다. 리눅스에서 사용하는 명령어는 표준출력(stdout)과 표준 입력(stdin)을 하이픈으로 표현하기도 합니다. 명령어의 표준 출력과 표준 입력을 연결하는 파이프(|)에서 하이픈(-)을 이용하면 표준 출력이 표준 입력으로 전달됩니다. 사용하는 방법은 다음과 같습니다. # sample.xml 파일을 읽어서 xml 출력 포맷과 들여쓰기를 조정 $ xmllint --format sample.xml A B # 표준입력으로 전달하면 오류가 발생 $ echo "AB" | xmllint --format Usage : xmllint [options] XMLfiles ... Parse the XML files and outp.. 2020. 3. 11.
[ssh] 터널링시 channel 3: open failed: connect failed: Connection refused 오류 해결 방법 ssh 터널링을 이용하여 원격지의 포트에 접속할 때 다음과 같은 오류가 발생하는 경우가 있습니다. channel 3: open failed: connect failed: Connection refused channel 3: open failed: connect failed: Connection refused 터널링 명령어 이때 사용한 터널링 명령어는 다음과 같았습니다. 로컬호스트의 14000포트와 원격지(10.20.30.40)의 8088 포트를 연결하였습니다. ssh -L 14000:127.0.0.1:8088 -oPort=20022 user@10.20.30.40 해결방법 원인은 원격지에 127.0.0.1에 대한 루프백설정이 막혀있어서 발생한 오류였습니다. 따라서 터널링 명령을 다음과 같이 변경하면 됩니다.. 2019. 11. 1.
[bash] cd 명령어의 특수 심볼 cd는 디렉터리를 이동하는 명령어입니다. cd 명령어의 네가지 특수 심볼에 대해서 알아보겠습니다. # . 현재 위치 cd ./ # .. 부모 디렉토리 cd ../ # 홈 디렉토리(환경변수의 HOME) cd ~ # 이전 디렉토리(환경변수의 OLDPWD) cd - 2019. 10. 15.
[bash] 인트럽트 시그널을 처리하는 명령어 trap 쉘스크립트 프로그래밍에서 인터럽트 시그널이 입력될 때 어떤 처리를 해야 하는 경우 사용하는 명령어가 trap 입니다. 리눅스 운영체제마다 다양한 시그널을 가지고 있고, 현 운영체제의 시그널은 kill명령어로 확인할 수 있습니다. 운영체제의 인터럽트 시그널 종류 및 번호 확인 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SI.. 2019. 7. 3.
[bash] 터미널 화면을 제어하는 tput 명령어 tput 명령어는 터미널에서 화면을 제어할 수 있습니다. 커서의 위치, 화면의 배경색, 문자의 색상 등을 변경할 수 있습니다. 여기서는 간단한 사용법에 대해서 알아보겠습니다. * tput을 이용하여 화면을 clear 하고 내용을 출력하는 것을 반복하면 화면이 깜빡이는 것 처럼 보일 수 있습니다. 이는 화면 전체를 지우고 다시 처리하는 과정에서 발생하는 현상이기 때문에 화면 전체를 지우지 않고 필요한 부분으로 커서를 옮겨서 새로 출력하는 것이 좋습니다. (참고) 다음의 사이트에서 상세한 내용과 좋은 예제들을 확인할 수 있습니다. http://korea.gnu.org/manual/release/termutils/ 스크립트로 만든 휴대용 터미널 제어기 스크립트로 만든 휴대용 터미널 제어기 tput과 tabs .. 2019. 7. 3.
[bash] 배쉬쉘의 실수 연산 배쉬쉘은 기본적으로 정수(integer) 연산만 사용할 수 있습니다. 실수 연산을 사용하기 위해서는 bc 명령어를 이용해야 합니다. 실수 표현을 위해서는 -l 옵션을 이용해야 합니다. x=9 y=12 # 기본 설정은 정수 계산 $ echo "$x / $y" | bc 0 # -l 옵션으로 실수 표현 $ echo "$x / $y" | bc -l .75000000000000000000 # scale 설정으로 소수점 이하 출력 설정 $ echo "scale=3;$x / $y" | bc -l .750 # 소수점 이하 처리는 버림 $ echo "scale=1;$x / $y" | bc -l .7 2019. 7. 1.
[bash] 배쉬쉘 프롬프트 스트링 변경하기 배쉬쉘의 프롬프트 스트링(PS)은 4가지가 존재합니다. PS1: 기본 프롬프트 스트링. 기본값은 `\s-\v\$ ' PS2: 긴 문자 입력을 위해 나타나는 문자열. 기본 값은 `>` PS3: select 옵션을 처리할 때 나타나는 문자열 PS4: 실행을 디버깅할 때 출력되는 문자열 기본값은 `+` PS1을 설정하는 방법은 다음과 같습니다. 실행할 때 기본 설정으로 입력하고 싶으면 .bashrc 파일을 수정하면 됩니다. # 유저명@호스트명 경로> export PS1="\u@\h \w> " # 유저명@호스트명 [시간]>export PS1="\u@\h [\$(date +%k:%M:%S)]> " PS1, PS2, PS3, PS4: 설명: 바로가기PS1 설정: 바로가기 2019. 3. 18.
[ls] ls 명령어 조회시 컬러 옵션 이용 터미널에서 ls 명령을 이용할 때 파일 별로 구분을 위해서 color 옵션을 제공합니다. never 일때는 색상으로 구분하지 않습니다. $ ls --color=auto$ ls --color=alyways$ ls --color=never 보통 alias 로 ls 명령을 등록하고 사용하는데 LS_COLORS 환경변수를 이용해서 색상을 구분합니다. LS_COLORS="파일종류1=속성1;색1:파일종류2=속성2;색2" 의 형태로 입력하면 됩니다. LS_COLORS=rs=0:di=01;34:ln=01;36 LS_COLOR 설정 참고 -> http://linux-sxs.org/housekeeping/lscolors.html 2019. 2. 18.
[bash] 쉘스크립트에서 정규식을 이용하여 숫자포함여부 확인하기 배쉬에서 정규식 연산자는 =~ 를 이용합니다. 정규식을 이용할 때는 변수에 넣어서 처리하는 방법과 바로 이용하는 방법이 있습니다. #!/bin/bash // 변수를 이용하는 방법 re="^[0-9]+$" if [[ $1 =~ $re ]]; then echo "number" else echo "not number" fi // 연산자에 바로 이용하는 방법. 문자를 감싸주지 않음 if [[ $1 =~ ^[0-9]+$ ]]; then echo "number" else echo "not number" fi 2019. 2. 1.
[vi] vi에서 문자열 찾고 치환하는 방법 vi에서 문자를 검색하는 명령어는 두개 입니다. /: 전진검색?: 후진검색 vi의 명령모드(ESC 입력 상태)에서 두개중 하나를 입력하고 찾으려는 문자열을 입력합니다. ALTER TABLE temp; /ALTER 62,1 22% 이렇게 되면 찾는 문자가 하일라이트 됩니다. 이후 찾은 문자를 이동하는 방법은 다음과 같습니다. n: 앞으로 이동 N: 뒤로 이동 이렇게 문자를 검색하면 찾은 문자가 계속 하일라이팅 됩니다. 이를 초기화 하는 명령어는 다음과 같습니다. 다음의 두 명령어중 하나를 명령모드에서 입력하면 기존에 입력한 검색어가 초기화 됩니다. :noh:nohlsearch 2019. 1. 31.
[bash] 소켓 프로그램 테스트를 위한 넷캣(netcat, nc) 명령어 TCP/UDP 네트워크 프로그래밍을 하다보면 클라이언트나 서버를 임시로 작성해야 할 때가 있습니다. 그럴때 nc 명령어를 이용하면 따로 구현할 필요 없이 편리하게 사용할 수 있습니다 nc는 간단한 명령어로 클라이언트나 서버를 테스트해 볼수 있어서 편리한 명령입니다. 대기 명령어(서버, listen)# 9999 포트를 열어서 수신 대기 $ nc -l 9999 # 9999 포트를 열어서 다중 사용자의 수신 대기(연결이 끊어져도 계속 유지) $ nc -lk 9999 # 접속자의 IP 정보 출력 $ nc -lv 9999 접속 명령어(클라이언트, connect) nc 127.0.0.1 9999 2019. 1. 30.
[bash] 쉘프로그램 실행시 파라미터 개수 확인하기 쉘프로그램에서 전달받은 파라미터는 $ 기호를 이용하여 확인합니다. 이를 이용해서 프로그램 실행에 필요한 파라미터 개수를 확인하여 오류 여부를 전달 할 수 있습니다. $#: 전체 파라미터의 개수$0: 프로그램의 이름 $1: 첫번째 파라미터 ./sample.sh a b c d 라고 실행하면 $# = 4$0 = sample.sh$1 = a$2 = b $3 = c $4 = d가 됩니다. #!/bin/bash if [ $# -ne 원하는_매개변수_갯수 ] then echo "usage: $0 yyyymmdd hh" exit 1 fi 2019. 1. 21.
[bash] 순차적인 숫자 for 문 처리 배쉬의 for 문에서 순차적인 숫자를 출력하는 방법은 다음과 같습니다. #!/bin/bash for vTime in {00..23} do echo ${vTime} done [결과] $ ./for.sh 00 01 02 ...23 #!/bin/bash for vTime in {1..100} do echo ${vTime} done [결과] $ ./for.sh 1 2 ...100 #!/bin/bash for vTime in 00 01 02 03 04 do echo $vTime done [결과]0001..04 2018. 11. 13.
[bash] 이전에 실행한 명령을 확인하는 bash의 history 설정 하기 배쉬에 이전에 실행한 명령어를 확인하는 history 명령어가 있다. 기본적으로 history 명령을 실행하면 다음과 같은 형태로 나온다. 1001 crontab -e 1002 history | grep cp 1003 history 이를 표현하는 형식을 명령어를 실행한 시간을 출력하기 위해서 다음과 같이 변경하면 아래의 결과를 볼 수 있다. .bashrc, .bashrc_profile 파일에 아래의 내용을 추가하고 파일을 다시 읽어 들이면 된다. export HISTTIMEFORMAT="%Y-%m-%d %T" # 히스토리 포맷 변경 export HISTSIZE=5000 # 메모리에 읽어 들이는 명령어의 개수 export HISTFILESIZE=10000 # 파일에 저장하는 명령어의 개수 1016 2018.. 2018. 7. 27.
[bash] 문자열 분할(split) 하여 루프문 처리 Bash 스크립트에서는 공백(' '), 개행문자열('\n')을 이용하여 문자열을 분할하여 루프문을 처리할 수 있다. IFS 는 입력필드 구분자를 말한다. 이 값을 이용하여 루프문을 처리할 수 있다. #!/bin/bash vString="A-111-DK" IFS='-' read -ra vStr 2018. 6. 19.
[bash] 서브프로세스의 실행 종료를 대기하는 wait 커맨드 활용 wait 커맨드는 프로세스의 실행 종료를 대기하게 한다. 특정 프로세스를 대기하게 할 수도 있고, 전체 프로세스의 종료를 대기할 수도 있다. wait %Background ID # jobs 로 확인할 수 있는 백그라운드 번호로 대기wait PID # PID 번호의 프로세스 대기wait # 전체 서브 프로세스 종료 대기 #!/bin/bash a &b & c & waitecho "end" 위와 같이 스크립트를 작성해서 실행하면 a, b, c의 작업이 종료되고,"end"를 출력한다. 2018. 5. 31.
[bash] 함수의 결과로 문자열 반환 bash의 함수는 문자열을 반환할 수 없다.상태 코드만 반환이 가능하므로 echo 를 이용하여 결과문자를 출력하고 이를 결과로 저장해야 한다. 다음과 같이 이용하면 된다. [118k]$ function fncString {> if [[ $1 == "A" ]]; then> echo "a"> else > echo "b"> fi> }[118k]$ [118k]$ VARIABLE=$(fncString "A")[118k]$ echo $VARIABLEa[118k]$ VARIABLE=$(fncString "B")[118k]$ echo $VARIABLEb 2017. 12. 27.
[bash] echo 출력시에 글자 색상 지정하는 방법 echo 출력시에 특정 문자만 색상을 변경하는 방법은 다음과 같다. RED='\033[0;31m'GREEN='\033[0;32m'NC='\033[0m' echo -e ${RED}RED${NC}echo -e ${GREEN}GREEN${NC} https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux 2017. 12. 27.
[bash] 터미널 화면에서 GUI를 개발하기 위한 라이브러리 Ncurses 터미널용 GUI 를 개발하기 위해서 라이브러리를 찾아보던 중에 ncurses 를 이용하면 처리할 수가 있다고 해서 기록한다. 다행히 한글로 번역된 문서가 있어서 개발하는데 도움이 될 것 같다. https://ko.wikipedia.org/wiki/Ncurses프로그래밍 방법(한글) - https://wiki.kldp.org/wiki.php/NCURSES-Programming-HOWTO#s-1.1.1한글 출력 - https://bakyeono.net/post/2015-05-12-ncurses-korean-utf-8.htmlhttps://www.gnu.org/software/ncurses/ 2017. 11. 2.
[xmlllint] 리눅스 커맨드로 xml 문서 확인하기 리눅스 커맨드 상에서 xml 문서의 포맷을 검사하거나, xpath를 이용하여 문서를 탐색하기 위해서 xmllint 명령어를 이용한다. xmllint --format [파일경로]경로의 문서가 xml포맷에 맞는지 검사하고, 들여쓰기를 한 문서를 반환한다. xmllint --validate [파일경로]문서에 저징된 DTD에 맞는 문서인지 확인한다. xmllint --xpath [xpath 표현식] [파일경로]지정한 xpath에 따라 문서를 탐색하여 결과를 반환한다 http://xmlsoft.org/xmllint.html 2017. 9. 14.