본문 바로가기

bash38

[MySQL] 외래키 제약으로 인한 오류가 발생할 때 체크 끄는 방법 Cannot change column used in a foreign key constraint 오류 처리 테이블의 칼럼 속성을 수정할 때 Cannot change column used in a foreign key constraint 오류가 발생하는 경우가 있습니다 이 오류가 발생하는 경우는 수정하고자 하는 테이블의 속성에 연결되 외부키의 속성이 변경되지 못해서 발생합니다. 이 경우 다음과 같이 해당 옵션을 끄고 작업을 처리할 수 있습니다. SET FOREIGN_KEY_CHECKS = 0; -- 수정 SET FOREIGN_KEY_CHECKS = 1; 2022. 12. 29.
[bash] 배쉬 쉘의 옵션 켜고 끄는 방법 배쉬 쉘에서는 set 을 이용해서 옵션을 켜고 끌수 있습니다. 자주 사용하는 옵션은 오류가 발생하면 스크립트를 종료하게 하는 -e와 디버깅 메시지를 출력하게 하는 -x 옵션이 있습니다. 만약 옵션을 켜고 사용하는 중에 잠시 옵션을 꺼야 한다면 마이너스(-) 대신 플러스(+)를 사용하면 됩니다. #!/bin/bash # 디버깅 메시지 출력 set -x echo "A" # 디버깅 메시지 종료 set +x echo "B" # 디버깅 메시지 출력 set -x echo "C" 2022. 2. 21.
[bash] ssh로 원격 서버에 명령어 실행시 환경 변수를 읽지 않는 문제 해결 ssh 로 원격 서버에 접속하여 명령을 실행할 수 있습니다. echo 같은 기본 명령어는 잘 실행되지만 하지만 .bashrc의 설정에 따라서 원격 서버의 .bashrc에 설정된 PATH 정보를 확인하지 않고 실행될 수 있습니다. 이럴때는 해당 내용을 수정하여 주면 됩니다. 설정 위치는 다음과 같습니다. /etc/bash.bashrc ~/.bashrc 2021. 3. 29.
[bash] crontab을 echo로 일괄로 설정하는 방법 크론탭을 설정할 때 여러개의 노드에 한번에 설정해야 하는 경우가 있습니다. 이럴 때는 크론탭이 설정되는 파일에 바로 입력해 주면 됩니다. CentOS기준으로 해당 파일의 위치는 /var/spool/cront/유저명 파일에 내용이 저장됩니다. 해당 위치에 정보를 설정하면 됩니다. 2021. 3. 26.
[bash] cd 명령어의 특수 심볼 cd는 디렉터리를 이동하는 명령어입니다. cd 명령어의 네가지 특수 심볼에 대해서 알아보겠습니다. # . 현재 위치 cd ./ # .. 부모 디렉토리 cd ../ # 홈 디렉토리(환경변수의 HOME) cd ~ # 이전 디렉토리(환경변수의 OLDPWD) cd - 2019. 10. 15.
[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.
[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.
[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] 문자열 분할(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][split] 파일을 라인단위로 나누기 위한 split 명령어 파일을 라인단위로 나누기 위한 split 명령어는 다음과 같이 사용한다. -l 100 : 100 줄단 위로 나눔-d : 숫자로 된 이름의 파일로 분할-a : 나누어진 파일 이름의 사이즈 origintxt 파일을 100줄 단위로 나눈다. $ split -l 100 origin.txtxaaxabxac... origintxt 파일을 100줄 단위로 나누는데, 파일이름을 숫자형식으로 한다. $ split -l 100 -d origin.txtx01x02x03... origintxt 파일을 100줄 단위로 나누는데, 파일이름을 숫자형식으로 하고, 파일이름의 사이즈는 4이다. $ split -l 100 -d -a 4 origin.txtx0001x0002x0003... https://ss64.com/bash/split.. 2017. 8. 1.
[ls] ls 명령어의 --time-style 옵션 이용하기 ls 명령어를 이용하여 파일 목록을 볼때 --time-style 옵션을 이용하면 파일 생성 시간을 사용자가 원하는 형태로 출력할 수 있다. 아래와 같은 형태로 출력이 가능하다. - 기본타입: full-iso, long-iso, iso- 타임포맷: date 포맷 형식 ls -alh --time-style=full-isodrwxrwxr-x 6 hadoop hadoop 4.0K 2017-06-27 01:43:40.754322656 +0000 . ls -alh --time-style=long-isodrwxrwxr-x 6 hadoop hadoop 4.0K 2017-06-27 01:43 . ls -alh --time-style=isodrwxrwxr-x 6 hadoop hadoop 4.0K 06-27 01:43 . .. 2017. 6. 27.
[bash][grep] grep 명령어 사용방법 grep 명령어는 파일에 일치하는 문자열이 있으면 출력하는 역활을 한다. -n : 라인번호 출력-f : 파일명 출력-v : 일치 하지 않는 것 출력 grep 으로 문자열이 일치하는지 확인할 때 다음과 같이 확인할 수도 있다. . : 문자열 하나[] : 괄호로 묶인 만자 중 하나가 존재하는지 확인cat raw.txt | grep "temp.ex" | grep "text.[a|b]"ex) tempaex 처럼 temp와 ex 사이에 하나의 문자만 존재하고, textka, textkb 처럼 text와 a, b 사이에 하난의 문자가 존재할 때 확인 grep 의 주요 옵션 - http://geundi.tistory.com/113 2017. 5. 24.
[bash] 쉘 스크립트에서 문자열에 특정 문자가 존재하는지 확인하여 처리 DB의 like 명령어 처럼 bash 에서도문자열에 원하는 문자가 존재하는지 확인하여 처리하는 것이 가능하다. 사용방법은 =~ 명령을 이용하여 문자열간에 비교를 하면 된다. =~ 명령어를 사용할 때는 꼭 [[ 를 사용해야 한다. [ 를 사용하면 오류가 발생한다. 2017. 5. 23.
[bash][grep] 문자열과 일치하는 내용을 가지는 파일 확인 하기(grep 사용) 특정 문자열과 일치하는 내용을 가지고 있는 파일을 확인하고 싶을 때 grep 을 이용하여 내용을 확인할 수 있다. -L, --files-without-match Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match. -l, --files-with-matches Suppress normal output; instead print the name of each input file from which output would normally have been printed. T.. 2017. 4. 10.
[bash][sed] 파일의 문자열 치환하기 파일에 지정한 문자열을 치환하기 위해서는 "sed" 커맨드를 이용한다. sed의 -i 옵션을 이용하여 파일의 문자열을 치환하여 저장한다. 사용방법은 다음과 같다. text1.txt 파일의 abcd 문자를 1234로 변경한다. * 마지막의 g 가 없으면 처음 발견한 문자만 치환하고, g가 있으면 파일내 모든 문자열을 치환한다. > sed 's/abcd/1234/g' text1.txt 2017. 1. 16.
[bash] 쉘 스크립트 작성시 로그 출력을 위한 간단한 함수 쉘 스크립트 수행시 로그 출력을 위해서 다음의 함수를 이용하면 좋다. 일자 시간을 출력하기 때문에 나중에 확인하기에도 좋다. # 로그 출력 함수 function fncPrintLog(){ vLogTime=`date '+%Y-%m-%d %H:%M:%S'`; vLogTime=${vLogTime:0:19} echo "[${vLogTime}] "${1}} fncPringLog "start."처럼 사용하면 되고 출력은 아래와 같다. [2016-11-08 05:07:01] start. 2016. 11. 8.
[bash][find] 로그파일 정리하기 크론탭이나 다른 방법으로 정기적으로 프로그램을 실행하고 로그를 출력하고 나면 나중에는 로그파일이 많아지게 된다. 이럴때 로그파일을 한번 정리해야 할 필요가 있을때 다음과 같이 find 명령어를 이용하여 처리하면 된다. 어제자 이름으로 생성된 파일을 압축하고, 7일전 파일은 삭제한다. * find로 검색한 파일을 압축할 때도 사용가능 #!/bin/bash cd /mnt/crontab/hive_metadb_check/ vYesterDayYYYYMMDD="*`date -d "yesterday" -u +\%Y\%m\%d`*"v7DayPrevYYYYMMDD="*`date -d "-7 day" -u +\%Y\%m\%d`*" # 어제자 로그 파일 정리 find ./logs/ -name "*${vYesterDayYYY.. 2016. 11. 7.
[MySQL][shell] 쉘 스크립트에서 mysql 명령어 사용하기 쉘 스크립트에서 mysql 명령어를 사용하는 방법은 -Bse 옵션이나, -e 옵션을 이용하면 된다. 사용하는 방법은 두개의 옵션이 동일하다. 하지만 결과가 아래와 같이 약간 다르게 나타난다. 결과값 방법에 따라 사용하면 되겠다. mysql -e "select * from TABLE;"mysql -Bse "select * from TABLE;" [user ~]$ mysql -e "select * from TABLE;"+--------+----------------+-----------------------------+| VER_ID | VERSION | COMMENT |+--------+----------------+-----------------------------+| 1 | 0.1.0 | TEST |.. 2016. 11. 7.
[bash] [script] 파일이 생성될 때까지 대기하는 스크립트 명령을 실행하기 위해서 hdfs나 로컬상의 경로에 파일이 생성되기를 기다려야 할 때 아래와 같이 사용한다. wc 명령으로 파일의 존재여부를 확인하여 5분에 한번씩 체크하면서 계속 대기한다. 2016. 10. 7.
[bash][find] find 로 파일 검색중 Permission denied 보지 않기 find 명령어로 파일 검색중 권한이 없는 폴더를 검색하게 되면 ' Permission denied'라는 에러메시지를 보게 된다. 이럴때는 sudo 명령을 이용하여 관리자 권한으로 폴더를 검색하던지에레메시지를 null로 보내서 에러메시지가 보이지 않게 하면 된다. find / -name 파일명 2>/dev/null 2016. 8. 26.
[bash][du] 폴더별 용량 확인하기 배쉬에서 du 명령어를 이용하여 파일의 용량 확인이 가능하다. du -sh ./683M./ du -sh */40M./a236M./b212M./c.gz60K./d.txt du -sh ./*40Ma/236Mb/ 2016. 8. 25.
[bash] 배쉬 스크립트의 종료 코드 배쉬 스크립트의 종료코드란 프그그램 수행중exit 명령으로 프로그램을 종료시키면서 사용자에게 프로그램 종료의 이유를 알리기 위하여 반환하는 값이다. exit 함수는 정수형 값을 반환할 수 있다. 이를 $? 명령어를 이용하여 확인이 가능하다. 사용자가 임의의 정수(255 이하)를 반환하는 것도 가능하며, 예약되어 있는 반환 값은 다음과 같다 0 : 정상적인 종료1 : 일반적인 에러127 : command not found130 : Ctrl + C 에 의 한 종료 https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/exitcodes.html#EXITCODESREFhttps://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/exit-.. 2016. 8. 22.
[bash] 스크립트에서 입력받은 파라미터의 개수를 확인하여 처리 쉘스크립트에서 전달받은 파라미터의 개수를 확인하는 방법은 다음과 같다. 원하는 파라미터의 개수가 아닌경우 오류를 출력한다. $# : 파라미터의 개수$1 : 첫번째 파라미터$2 : 두번째 파라미터 종료 명령에 전달하는 코드 값의 의미는 다음과 같다 0 : 성공1 : 일반적인 에러 2016. 8. 22.
[bash] 시작일자와 종료일자를 이용하여 루프문 돌리기 시작일자와 종료일자를 이용하여 지정한 일자간의 루프문을 반복하는 방법은 다음과 같다. 위의 것은 참고한 예제이고, 일반적으로 지정하는 일자형식에 맞게 변형하면 다음과 같다. 2016. 7. 13.