본문 바로가기

Old Posts226

[Linux] Bash 문자열 변수 조작 (자르기, 치환, 삭제) Bash 스크립트를 작성하다보면 간단하게 문자열 변수를 조작하고 싶을 때가 있다. 예를 들어 따옴표로 감싸진 문자열 값에서 앞, 뒤에 있는 따옴표를 제거한 알맹이만 꺼내고 싶을 때가 있다. Bash에서는 문자열 변수를 간단하게 조작할 수 있는 몇 가지 기능을 제공한다. 1. 문자열 변수 연결 문자열 변수의 값들을 연결하는 Concat 동작은 간단하다. new_value=${old_value1}-with-${old_value2} 이런식으로 사용하면 'old_value1' 변수의 값과 'old_value2' 변수의 값 사이에 '-with-' 문자열을 추가한 형태의 새로운 문자열이 만들어진다. 2. 문자열 변수 자르기 프로그래밍 언어에서 문자열을 '슬라이싱(slice)'하는 경우가 종종 있다. Bash에서는 .. 2021. 6. 24.
[Java] 오버플로우 없이 정수 다루기 - BigInteger 사용법 및 예제 Java 혹은 C를 이용해서 프로그래밍하다보면 '오버플로우(Overflow)'라는 개념을 기억하고 있어야한다. 정수형 타입의 데이터를 저장하기 위해서 4바이트의 int 변수를 선언하게 된다. 문제는 int 타입의 변수는 -2,147,483,648 ~ 2,147,483,647 사이의 값만 저장할 수 있다는 점이다. 좀 더 큰 수를 저장하기 위해서 long 타입으로 선언하더라도 그 범위가 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807로 늘어날 뿐 모든 범위의 숫자를 정확하게 저장할 수 있는 것은 아니다 일반적인 경우라면 이 정도 범위의 숫자만으로도 문제가 없겠지만 과학 데이터를 다루는 프로그램이나 데이터의 숫자가 대륙의 스케일로 넘어가버리면 문제가 생기는 .. 2021. 6. 23.
[Java] 오버플로우 없이 실수 다루기 - BigInteger 사용법 및 예제 Java 혹은 C를 이용해서 프로그래밍하다보면 '오버플로우(Overflow)'라는 개념을 기억하고 있어야한다. 소수점을 가지고 있는 실수 타입의 데이터를 저장하기 위해서 double 혹은 float 타입의 변수를 선언하게 된다. 문제는 float 타입의 변수는 1.4E-45 ~ 3.4028235E38 사이의 값만 저장할 수 있다는 점이다. double 타입으로 선언하더라도 그 범위가 4.9E-324 ~ 1.7976931348623157E308 로 늘어날 뿐 모든 범위의 숫자를 정확하게 저장할 수 있는 것은 아니다. 게다가 부동 소수점 데이터의 경우 2진수로 데이터를 다루는 기본형 타입에서는 부정확한 결과가 나올 수도 있다. 따라서 정밀한 소수점 계산이 필요한 과학 데이터의 경우 double, float .. 2021. 6. 23.
[Linux] Bash 배열(Array) 사용법 및 예제 프로그래밍 언어에서는 여러 변수를 한꺼번에 다루기 위해서 '배열(Array)'이라는 자료구조를 사용한다. 배열을 사용하면 여러 데이터를 간단한 몇 줄로 처리할 수 있어 편리하다. Bash 역시 배열을 지원한다. Bash 배열(Array) 사용법 배열 선언하기 array_1=("value 1" "value 2" "value 3") array_2=(1 2 3) 다른 명령어의 결과를 배열로 만들려면 IFS=$'\n' ARR=(`cat test.txt`) cat test.txt로 출력되는 결과 값을 '\n' 값으로 분리해서 배열로 만들 수 있다. 배열 참조하기 array=("value 1" "value 2" "value 3") echo "${array[2]}" # 2번 인덱스에 대한 값 출력 echo "${ar.. 2021. 6. 22.
[Linux] 서비스 관리 명령어 'systemctl', 'service', 'chkconfig' 사용예 리눅스 시스템이 재부팅을 했을 때, 특정 데몬들을 자동실행하고 싶은 경우가 있다. 빅데이터 클러스터의 경우 ambari-agent 등의 데몬을 자동 실행하도록 설정해두면, 장비의 점검이 끝나고 재부팅이 되었을 때 Ambari 서버에서 쉽게 컴포넌트들을 재시작할 수 있다. 리눅스 서비스 (Linux Service) 윈도우에서 시스템이 재부팅되면 자동으로 실행되는 프로그램들이 있다. 마찬가지로 리눅스에서도 시스템이 부팅될 때 백그라운드에서 자동 실행되는 응용프로그램들이 있다. 백그라운드에서 동작하면서 사용자에게 어떠한 서비스들을 제공하기 위한 이런 데몬들을 '리눅스 서비스'라고 생각하면 된다. CentOS 7 - systemctl 명령 CentOS 7에서는 서비스와 관련된 설정을 세팅하거나 확인하기 위해 s.. 2021. 6. 21.
[Linux] time 명령어 - 실행시간 측정 특정 프로그램의 실행 시간을 측정하기 위해서 time 명령어를 자주 사용한다. $ time ./a.out 이런 식으로 time 명령어를 앞에 쓰고 실행할 커맨드를 뒤쪽에 써주면 뒤쪽에 써준 커맨드를 실행하는데 얼마나 걸렸는지 실행시간에 대한 정보가 출력된다. $ time ./a.out real0m1.646s user0m0.001s sys0m0.001s 출력되는 내용은 대략 이러하다. real, user, sys 3가지 시간 정보가 출력된다. real의 경우 총 실행시간을 의미한다. 실제 커맨드를 실행하는데 걸린 시간이다. user의 경우 user 영역에서 실행된 시간을 의미한다 sys의 경우 커널 영역에서 실행된 시간을 의미한다 2021. 6. 19.
[Linux] iptables 명령어를 이용한 IP 블럭 사용방법 서버를 운영하다보면 특정 IP 주소에서 들어오는 요청을 블럭해야 할 경우가 있다. 클러스터에서 특정 호스트를 강제로 제외시키고 싶은 경우나 원격 접속이 불가능한 상황을 테스트해야할 경우 등이 이에 해당한다. 특정 서버에서 ip 주소를 블럭하기 위해 iptables 명령을 이용할 수 있다. iptables 명령은 /sbin/iptables 에 있는 경우가 많다. iptables로 ip 주소 블럭하기 우선 서버에 루트 계정 혹은 sudo 권한이 있는 사용자로 로그인한다. 그리고 다음 명령을 실행한다. $ sudo /sbin/iptables -A INPUT -s $IP_ADDRESS -j DROP $IP_ADDRESS 부분을 접속 차단할 IP 주소로 바꿔주면 된다. 예를 들어 172.0.0.10 호스트에서 들.. 2021. 6. 18.
[Linux] Bash 스크립트에서 따옴표 제거 Bash 스크립트를 작성할 때 쌍따옴표(")로 둘러쌓인 값에서 쌍따옴표만 제거하고 싶을 때가 있다. "Hello" 라는 값에서 쌍따옴표만 제거하고 Hello 라는 값만 추려내고 샆은 경우가 이에 해당한다. 이 경우 Bash의 매개변수 치환(Parameter Substitution)을 이용하면 된다. 예를 들어 $ VAR="\"TEST\"" $ echo $VAR "TEST" "TEST"라는 문자열이 변수에 저장되어 있을 때, 앞뒤에 있는 쌍따옴표만 제거하기 위해서는 $ temp="${VAR%\"}" $ temp="${temp#\"}" $ echo "$temp" TEST 이런 식으로 입력하면 된다. ${VAR%\"} 를 실행하면 VAR 데이터에 저장되어 있는 값에서 뒤쪽에 오는 쌍따옴표가 제거된다. ${te.. 2021. 6. 17.
[Java] 문자열 생성 클래스 - String, StringBuffer, StringBuilder 차이점 자바에서 문자열은 독특한 특성을 가지고 있다. 바로 불변(Immutable)이라는 특성이다. String 타입의 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다. '+' 연산이나 concat 등의 메소드를 이용해서 문자열을 수정할 때, 기존에 존재하는 String 객체의 데이터가 수정되는 것이 아닌 연산의 결과로 만들어지는 문자열을 이용해 새로운 String 객체를 생성하는 형태로 동작한다. 문제는 '+' 연산이나 concat() 등의 메소드를 이용해 문자열을 수정할 때마다 새로운 String 객체가 생성된다는 점이다. 예를 들어 다음과 같은 코드가 있다고 생각해보자. String str = "String"; for (int i = 0; i < 100; i++) { str = str + i; }.. 2021. 6. 17.