[Linux] tmux 설치 방법

tmux 란?

tmux는 terminal multiplexer의 약자로서, 하나의 터미널에서 여러 프로그램을 쉽게 전환하고 분리하며 다른 터미널에 다시 연결할 수 있습니다. 주요한 특징으로는 터미널을 빠져 나오거나 전환하더라도 기존 진행중이던 작업이 백그라운드에서 계속 실행되고 있기 때문에 갑작스럽게 터미널 연결이 끊기게 되더라도 중단없이 작업을 이어가실수 있습니다. 또한, tmux는 서버에 설치되기 때문에 다른 환경의 클라이언트에서 접속을 하더라도 동일한 기능을 사용할 수 있습니다. 기존에 사용되던 screen 이 tmux 로 대체되는 추세입니다.

tmux를 사용하기 전에 몇가지 알고 가셔야 되는 내용이 있습니다.

  • session : tmux 실행 단위. 여러개의 window로 구성.
  • window : 터미널 화면. 세션 내에서 탭처럼 사용할 수 있음.
  • pane : 하나의 window 내에서 화면 분할.
  • status bar : 화면 아래 표시되는 상태 막대.

tmux 설치

지금 부터 tmux를 설치해 보도록 하겠습니다. 현재(2020.08.21) 시점에서 tmux 최신버전은 3.1a 입니다. 아래에서는 패키지 관리자를 통해서 설치하는 방법이 아닌 직접 tmux 오픈 소스를 빌드 후 설치하는 방법을 설명합니다. 패키지 관리자를 통해서 설치하셔도 무관하지만 되도록 tmux 2.6 버전 이상을 사용하시는 것을 추천드립니다. 왜냐하면 해당 버전을 기준으로 설정 파일(~/.tmux.conf)을 세팅하는 방법이 달라졌기 때문입니다.

tmux 다운로드: https://github.com/tmux/tmux/wiki

필요한 패키지 설치

설치 과정

설치 확인

카테고리: Linux | 댓글 남기기

[Docker] macOS에서 설치하는 방법

맥에서 도커를 설치해 봅시다. 먼저 brew 를 이용해서 도커를 설치합니다.

설치가 완료되면 버전 정보를 확인합니다.

버전 정보 확인시에 맨 마지막에 출력되는 콘솔 로그를 확인해 보면 도커 데몬에 접속할 수 없다고 하는데요. 엄밀히 말하면 앞서 brew 명령어로는 도커 클라이언트만 설치된 것입니다.

다음의 경로에서 Docker.dmg 파일을 다운로드하여 설치를 완료합니다.
https://download.docker.com/mac/stable/Docker.dmg

다운로드가 완료되면 Docker.dmg 파일을 마운트 후 Applications로 끌어당겨 설치를 진행합니다.

설치가 완료된 후 도커 버전을 확인해보면 도커 서버/클라이언트가 설치된 것을 확인할 수 있습니다.

카테고리: Docker | 댓글 남기기

[Linux] gcc -E 옵션

gcc --help를 입력하여 -E 옵션에 대한 설명을 살펴보면 아래와 같습니다.

GCC 10.2 Manual 에 34p에 gcc -E 옵션에 대한 설명은 다음과 같습니다.

Stop after the preprocessing stage; do not run the compiler proper. The output
is in the form of preprocessed source code, which is sent to the standard output.
Input files that don’t require preprocessing are ignored.

결과적으로, gcc -E 옵션은 preprocess 단계에서의 소스 코드를 확인할 수 있습니다.
실제로 바이너리에 포함되는 라이브리러 등의 정보 등을 확인할 때 -E 옵션을 유용하게 활용할 수 있습니다.

카테고리: Linux | 댓글 남기기

[Linux] Process Address

프로그램은 실행 가능한 바이너리와 바이너리가 실행되기 위해 필요한 데이터(라이브러리 등)으로 구성된다.
프로그램은 사용자에 의해서 실행되면 커널로 부터 CPU, 메모리 자원을 할당받고 프로세스로 실행된다.
이때 프로세스는 Process Address Space 구조에 의해 코드/데이터/힙/스택 영역으로 구분된 메모리 영역을 할당받는다. (https://jhnyang.tistory.com/32)

프로세스가 실행 중에 쓰레드를 생성하면 코드/데이터/힙 메모리 영역은 공유하고 스택 메모리에 해당 쓰레드를 위한 스택만 생성한다.
리눅스 커널은 메모리를 관리할때 프로세스가 요청하는 메모리를 가상 메모리는 할당하지만 실제 메모리는 사용할때 할당된다. (첨부된 메일의 memory.c 코드를 통해 확인)
해당 이슈처럼 과도하게 쓰레드가 생성되는 경우(과도하게 생성되었다기 보다 사용이 완료된 쓰레드 자원이 정리되지 않은 것으로 보임) 실제 시스템에 메모리는 충분하지만 스택 메모리를 할당하기 위한 가상 메모리 주소 공간이 부족할 경우가 발생할수 있다.
그렇기 때문에 해당 이슈는 JVM에서 java.lang.OutOfMemoryError: thread creation failed 로그를 출력하고 새로운 쓰레드 생성을 위한 스택 메모리를 할당하지 못하는 것이다.

카테고리: Linux | 댓글 남기기

[Ubuntu 16.04] DNS 설정

일반적인 리눅스 환경에서는 /etc/resolv.conf 파일에 DNS 주소값을 세팅합니다.
그러나, 우분투가 12.04 부터는 /etc/resolvconf 디렉토리와 /etc/network/interfaces 등을 종합하여 /etc/resolv.conf를 덮어씌웁니다.
아래와 같이 /etc/resolvconf 디렉토리에 있는 base 파일에 DNS 서버를 설정하면, /etc/resolv.conf 에 설정내용이 반영됩니다.

$ cat /etc/resolvconf/resolv.conf.d/base
nameserver 208.67.222.222

수정 후에는 아래의 명령어를 수행하여 DNS 변경사항을 시스템에 반영합니다.

$ sudo resolvconf -u

카테고리: Linux | 댓글 남기기

[bash] 경과시간 출력하기

bash 스크립트로 작업을 처리하고선 그 경과 시간을 측정하고자 하려고 한다.

스크립트 특성상 다양한 방법이 있겠지만, date, bc, awk 를 이용해서 만들어 봤다.

date 를 이용해서 nanosecond 시간을 얻어서 그 차이를 구한다.

그리고 bc 를 이용해서 부동소수의 초단위의 시간을 계산하고, 그 결과를 awk 에 넘겨서 출력 포맷팅을 만들었다.

위의 실행 결과는 다음과 같다.

참고:

출처: https://netmaid.tistory.com/34 [Service for Every Master]

카테고리: Linux | 댓글 남기기

make 컴파일 에러시 쉘 스크립트 중단

소개

리눅스에서 쉘 스크립트가 수행되는 도중 에러가 발생하면 멈추게 하고 싶었다.

$? 특수변수 사용

쉘 스크립트에는 $? 라는 예약된 특수변수가 있다.
이 특수변수는 이전에 실행된 자식 프로세스의 main() 함수 리턴값을 의미한다.
성공시 0, 실패시 non-zero 을 리턴한다.

이를 스크립트에 넣으면 다음과 같은 코드가 된다.

make 어쩌구 저쩌구
if [ $? -ne 0 ]; then
echo "Fail(make) ... $?"
exit 1
fi

makefile은 error가 나면 중지되겠지만,
make를 호출한 script는 make의 다음 문장을 계속 수행하겠지요.
bash의 경우 -e 옵션을 주면 error가 발생하면 종료하게 됩니다.
예를 들어 #!/bin/bash -e 를 script의 첫줄에 써주면 됩니다.

카테고리: Linux | 댓글 남기기

[Synology NAS] 리다이렉트(redirect) 설정

시놀로지 DSM 6.x 에서 도메인 포워딩 또는 리다이렉트를 설정하는 방법
* /usr/syno/share/nginx 로 이동
* WWWService.musrache 파일을 편집
* sudo synoservice –restart nginx

예를 들어 http://wiki.joannes.kr 으로 접속한 도메인을 https://wiki.joannes.kr 연결하도록 한다면 아래의 내용을 적절한 위치(마지막 부분)에 추가

WWWService.mustache 수정

카테고리: Memo | 댓글 남기기