Hong의 모든 글

젠킨스 포트 변경 – Changing Jenkins HTTP port

젠킨스(Jenkins)의 웹서비스 포트는 8080입니다.

우분투 리눅스에서 젠킨스의 포트를 변경하려면 아래의 파일을 수정해야합니다.

sudo vim /etc/default/jenkins

8080이 기본 포트인데 다른 적당한 포트로 변경해 줍니다.

파일 안에서 아래의 줄을 찾아서 포트를 변경하면 됩니다.

# HTTP_PORT=8080
HTTP_PORT=9090

변경했으면 젠킨스를 재시작합니다.

sudo /etc/init.d/jenkins restart

초간단 Node.js 업그레이드 방법

Linux 서버에 설치된 Node.js를 버전업하는 방법입니다.

요약

  • npm으로 n 이라는 영어 1글자 짜리 이름의 패키지를 설치
  • n으로 stable, lastest 등을 선택해서 원하는 버전으로 업그레이드

stable(안정판), latest(최신판)중에서는 안전하게 stable을 선택하는 것이 좋습니다.

명령어

아래에 적어둔 명령어를 따라서 순서대로 하면 됩니다.
root 권한이 있어야 합니다.

node -v  # node.js 버전 확인
sudo npm cache clean -f  # npm 캐시 삭제
sudo npm install n  # n패키지 설치
sudo n stable  # stable로 설치
# 결과는 아래와 같음
# installed : v16.13.1 (with npm 8.1.2

R언어 Windows에서 한글 메세지가 깨져 보일때

R과 Rstudio를 Windows에서 사용하다보면 한글로 나와야 할 메세지가 깨져 보일 때가 있습니다. 특히 에러메시지나 경고메세지가 보일 때 그렇습니다.

아래 그림에서 보이는 것 처럼 마름모꼴 도형으로 깨져 보입니다.

언어설정을 영어로 변경한다

언어 설정을 영어로 변경하면 영어로는 메세지를 볼 수 있습니다.

Sys.setenv(LANG = "en_US.UTF-8")

윈도우에서 경고 메세지를 한글로 보는 방법은 없다

깨진것을 고쳐서 한글로 보는 방법은 아직 없습니다. 영어로 바꿔서 봐야 합니다. 다음과 같이 모든 메세지를 영어로 변경해주면 됩니다.

원인은 R이 UTF-8을 쓰고 Windows가 euc-kr을 쓰기 때문이다

R은 멀티바이트 언어 즉, 로마 알파벳 계열을 사용하지 않는 언어인 한국어, 중국어, 일본어같은 것을 표현할 때 메세지를 모두 UTF-8을 사용하는데 윈도우는 내부에서 UTF-8을 처리할 수는 있지만 화면에 표현할 때는 무조건 euc-kr를 사용합니다. 애플리케이션에 따라서는 이 문제를 해결한 것들이 있지만 Rstudio는 그 처리를 해주지 않습니다.

그래서 영어로 봐야 합니다.

리눅스 E: Sub-process /usr/bin/dpkg returned an error code (1)

apt를 사용하다보면 에러 메세지가 보일 때가 있습니다.

E: Sub-process /usr/bin/dpkg returned an error code (1)

무슨 종류의 에러인지 메세지만 보고 알기 어려워 해결법 찾기가 어렵지만 알고보면 간단합니다.

설치한 패키지의 의존성이 파손된 것입니다.

다음의 명령으로 의존성 문제가 생긴 것을 해결해주면 됩니다.

sudo rm /var/lib/dpkg/info/*
sudo dpkg --configure -a
sudo apt update -y

리눅스에서 두 CSV파일을 컬럼으로 조인하기 – Joining two text files based on a specific column

리눅스에서 텍스트파일 조인하기

리눅스 코맨드로 csv 2개를 결합하는데 특정 컬럼의 값을 기준으로 조인해서 붙이고 싶을 때가 있습니다.

DB에서 SQL로 조인하는 것처럼 하는 것 말입니다.

리눅스에서 이런 것은 오래전부터 당연히 되지만 명령이 복잡하고 선행 조건이 있습니다. 그래서 외우기 보다는 된다는 것만 알고 스니펫을 적어 두고 찾아서 쓰는 것이 더 편할 수 있습니다.

자세히 봐놓지 않으면 무척 헷갈리고 실제로 해보면 잘 안되기 때문에 천천히 읽어보시기 바랍니다.

조건

언어 설정을 한국어/한글로 바꾸기

우선 파일 안에 한글이 있고 조인을 할 컬럼에 한글이 포함되어 있다면 현재 환경의 언어 설정을 한글로 지정해줍니다. 조인할 파일에 한글이 아예 없으면 안 해도 됩니다.

export LC_ALL="ko_KR.utf8"

파일의 줄바꿈을 CRLF에서 LF로바꾸기

파일을 리눅스나 유닉스에서 생성했다면 문제가 없겠지만 윈도우에서 생성했거나 외부에서 가져왔을 때 텍스트 파일의 줄바꿈 문자를 바꿔줘야합니다.

조인할 두 파일에서 조인에 사용할 컬럼은 모두 정렬되어 있어야합니다. 그것은 명령에서 처리하면 됩니다.

우선 전체 코드는 다음과 같습니다.

#!/bin/bash

# 환경에 언어를 설정하기. 한글 소팅 때문)
$ export LC_COLLATE="ko_KR.utf8"

# 내용 확인
$ cat 1.txt

# 1       홍길동
# 2       전우치
# 4       변학도
# 3       이몽룡
# 5       성춘향

# 내용 확인
$ cat 2.txt

# 성춘향  18세
# 이몽룡  19세
# 전우치  20세

# 결합하기
$ join -t $'\t' -1 2 -2 1 -o 1.1,1.2,2.2 -a1 <(sort -k 2 1.txt | tr -d '\015') <(sort -k 1 2.txt | tr -d '\015') | sort -k 1

# 1       홍길동
# 2       전우치  20세
# 3       이몽룡  19세
# 4       변학도
# 5       성춘향  18세

1.txt는 탭으로 2개의 컬럼이 구분된 파일이고 1번 컬럼은 번호, 2번 컬럼은 사람의 이름입니다.

2.txt는 탭으로 2개의 컬럼이 구분된 파일이고 1번 컬럼은 이름, 2번 컬럼은 나이입니다.

여기에서 하려는 것은 1번의 이름과 2번의 이름을 결합한 다음 1.txt 파일에 컬럼에 나이 컬럼을 하나 추가해서 붙이는 것입니다.

위의 코드에서 마지막 결과물처럼 만들려는 것입니다.

명령어는 아래와 같은데 복잡하므로 분해해서 설명합니다.

join -t $'\t' -1 2 -2 1 -o 1.1,1.2,2.2 -a1 <(sort -k 2 1.txt) <(sort -k 1 2.txt) | sort -k 1

-t $’\t’ : 구분자를 탭으로 하겠다는 것입니다. join 명령어는 구분자를 단일문자만 받기 때문에 \t를 쓰려면 저렇게 앞에 $를 쓰고 따옴표로 둘러싸줘야 합니다.

-1 2 : 이것은 1번 파일에서는 2번째 컬럼을 기준 키로 쓰겠다는 뜻입니다.

-2 1 : 2번 파일에서는 1번째 컬럼을 기준 키로 쓰겠다는 것입니다.

-o 1.1,1.2,2.2 : 출력을 할 때 1.1 (1번째 파일의 1번 컬럼), 1.2 (1번째 파일의 2번 컬럼), 2.2 (2번째 파일의 2번 컬럼)입니다. 콤마로 출력할 컬럼을 구분하고 마침표로 파일 순번과 컬럼 순번을 입력하는 것입니다.

-a1 : 1번 파일을 기준으로 그 다음의 파일을 붙이라는 뜻입니다. 이것을 안 쓰면 결합할 파일에서 출력할 때 키가 겹치는 것만 남습니다. SQL에서는 이너조인(inner join)과 같이 됩니다. 이 옵션을 빼고 실행해 보시면 차이를 금방 알 수 있습니다.

<(sort -k 2 1.txt) : 1번 파일을 컬럼 2번을 기준으로 정렬하라는 것인데 <를 앞에 붙이고 소괄호로 둘러싼 것은 정렬된 파일을 미리 만들지 않고 동적으로 정렬하기 위한 것입니다.

<(sort -k 2 1.txt) : 위에서 설명했습니다.

sort -k 1 : 결과물을 다시 1번 컬럼을 기준으로 정렬합니다.