테이블의 칼럼 속성을 수정할 때 Cannot change column used in a foreign key constraint 오류가 발생하는 경우가 있습니다 이 오류가 발생하는 경우는 수정하고자 하는 테이블의 속성에 연결되 외부키의 속성이 변경되지 못해서 발생합니다. 이 경우 다음과 같이 해당 옵션을 끄고 작업을 처리할 수 있습니다. SET FOREIGN_KEY_CHECKS = 0; -- 수정 SET FOREIGN_KEY_CHECKS = 1;
배쉬 쉘에서는 set 을 이용해서 옵션을 켜고 끌수 있습니다. 자주 사용하는 옵션은 오류가 발생하면 스크립트를 종료하게 하는 -e와 디버깅 메시지를 출력하게 하는 -x 옵션이 있습니다. 만약 옵션을 켜고 사용하는 중에 잠시 옵션을 꺼야 한다면 마이너스(-) 대신 플러스(+)를 사용하면 됩니다. #!/bin/bash # 디버깅 메시지 출력 set -x echo "A" # 디버깅 메시지 종료 set +x echo "B" # 디버깅 메시지 출력 set -x echo "C"
배쉬쉘은 기본적으로 정수(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
배쉬쉘의 프롬프트 스트링(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 설정: 바로가기
배쉬에서 정규식 연산자는 =~ 를 이용합니다. 정규식을 이용할 때는 변수에 넣어서 처리하는 방법과 바로 이용하는 방법이 있습니다. #!/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
TCP/UDP 네트워크 프로그래밍을 하다보면 클라이언트나 서버를 임시로 작성해야 할 때가 있습니다. 그럴때 nc 명령어를 이용하면 따로 구현할 필요 없이 편리하게 사용할 수 있습니다 nc는 간단한 명령어로 클라이언트나 서버를 테스트해 볼수 있어서 편리한 명령입니다. 대기 명령어(서버, listen)# 9999 포트를 열어서 수신 대기 $ nc -l 9999 # 9999 포트를 열어서 다중 사용자의 수신 대기(연결이 끊어져도 계속 유지) $ nc -lk 9999 # 접속자의 IP 정보 출력 $ nc -lv 9999 접속 명령어(클라이언트, connect) nc 127.0.0.1 9999
쉘프로그램에서 전달받은 파라미터는 $ 기호를 이용하여 확인합니다. 이를 이용해서 프로그램 실행에 필요한 파라미터 개수를 확인하여 오류 여부를 전달 할 수 있습니다. $#: 전체 파라미터의 개수$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
배쉬의 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
wait 커맨드는 프로세스의 실행 종료를 대기하게 한다. 특정 프로세스를 대기하게 할 수도 있고, 전체 프로세스의 종료를 대기할 수도 있다. wait %Background ID # jobs 로 확인할 수 있는 백그라운드 번호로 대기wait PID # PID 번호의 프로세스 대기wait # 전체 서브 프로세스 종료 대기 #!/bin/bash a &b & c & waitecho "end" 위와 같이 스크립트를 작성해서 실행하면 a, b, c의 작업이 종료되고,"end"를 출력한다.
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
파일을 라인단위로 나누기 위한 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..
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 . ..
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
특정 문자열과 일치하는 내용을 가지고 있는 파일을 확인하고 싶을 때 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..
쉘 스크립트 수행시 로그 출력을 위해서 다음의 함수를 이용하면 좋다. 일자 시간을 출력하기 때문에 나중에 확인하기에도 좋다. # 로그 출력 함수 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.
크론탭이나 다른 방법으로 정기적으로 프로그램을 실행하고 로그를 출력하고 나면 나중에는 로그파일이 많아지게 된다. 이럴때 로그파일을 한번 정리해야 할 필요가 있을때 다음과 같이 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..
쉘 스크립트에서 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 |..
배쉬 스크립트의 종료코드란 프그그램 수행중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-..
- Total
- Today
- Yesterday
- build
- 알고리즘
- SQL
- nodejs
- 다이나믹
- oozie
- emr
- S3
- bash
- java
- airflow
- Linux
- Hadoop
- Python
- HIVE
- mysql
- AWS
- 파이썬
- HDFS
- yarn
- 오류
- SPARK
- error
- 하이브
- ubuntu
- 정올
- hbase
- 하둡
- 백준
- Tez
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |