Linux 154

[Apache Tomcat] WAR 배포

개요 2022.08.23 - [Ubuntu] Apache Tomcat 설치에서 설치한 Tomcat에 WAR로 패키징된 애플리케이션을 배포하려고 한다. 배포할 애플리케이션은 이미 maven 등으로 빌드해두었다고 가정한다. 이 글에서는 https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/에서 제공하는 예제 애플리케이션을 사용할 것이다. 배포 방법 1. 기본 이름(ROOT.war) 사용 Tomcat은 기본적으로 설치 경로(CATALINA_HOME)의 webapps 아래에 war 파일이 존재하면 자동으로 압축을 풀고 애플리케이션을 실행한다. 이 때 war 파일의 이름을 ROOT로 지정하면 별다른 설정 없이 애플리케이션을 실행할 수 있다. # webapps 디렉터리로..

Linux 2022.08.24

[Ubuntu] Apache Tomcat 설치

Apache Tomcat Apache Tomcat은 아파치 소프트웨어 재단에서 개발한 웹 애플리케이션 서버(WAS)이다. 웹 서버와 연동하여 실행할 수 있는 Java 환경을 제공하여 Java 서버 페이지와 Java Sevlet이 실행할 수 있는 환경을 제공한다. 이 글에서는 Ubuntu 20.04 LTS에서 Tomcat을 실행하기 위한 Java와 Tomcat 9를 설치해볼 것이다. 설치 방법 1. JDK OpenJDK 8를 설치할 것이다. # 저장소 업데이트 apt update apt install openjdk-8-jdk 2. Apache Tomcat 설치 Apache Tomcat 9 중 최신 릴리즈인 9.0.65를 설치하고자 한다. apt와 같은 패키지 관리자로 설치하는 방법도 있는 것 같지만, 이 ..

Linux 2022.08.23

[tree] 디렉터리 구조 확인

tree 디렉터리의 구조를 계층적으로 표시하는 도구 전체 구조를 대략적으로 파악할 때 유용하게 사용할 수 있다. 설치 ubuntu의 경우에는 apt를 이용해 설치할 수 있다. apt install tree 기본 사용 구조를 확인할 디렉터리를 지정하여 실행한다. 기본값은 현재 경로이다. tree 디렉터리만 출력 -d 옵션을 주어 실행하면 디렉터리 정보만 확인할 수 있다. tree -d # -d : 디렉터리 목록만 확인 depth 제한 -L 옵션을 주어 실행하면 탐색할 깊이를 제한할 수 있다. tree -L # -L : level. 디렉터리 구조를 보여줄 최대 깊이 # 예시 tree -L 1 파일 전체 경로 표시 전체 경로를 표시할 때는 -f 옵션을 주어 실행한다. tree -f # -f : 각 파일의 모든..

Linux 2022.08.12

[Ubuntu 20.04] Hostname 설정

Hostname 재부팅 시 서버의 Hostname이 다른 값으로 변경되는 일이 있어 명령어 또는 설정 파일을 통해 hostname 설정 방법을 정리해둔다. Hostname 확인 1. hostname 시스템의 호스트명을 보여주거나 설정한다. hostname 2. hostnamectl 시스템 호스트명을 제어한다. hostnamectl 출력 결과의 Static hostname은 /etc/hostname 파일에 설정이 저장되며 사용자에 의해 설정될 수 있다. 3. /etc/hostname 설정 파일에서 hostname을 읽어 들일 수도 있다. cat /etc/hostname Hostname 설정 1. hostname 명령 재부팅 전까지만 유지된다. hostname # 예시 hostname devOps-EC2-t..

Linux 2022.07.27

[Ubuntu/virtualenv] AttributeError: module 'virtualenv.create.via_global_ref.builtin.cpython.mac_os' has no attribute 'CPython2macOsArmFramework'

현상 Ubuntu 20.04 LTS에서 python virtualenv를 이용해 가상환경을 구성하려고 한다. pip도 설치되어 있지 않은 빈 OS 상태였기 때문에 아래와 같이 virtualenv 설치를 진행했다. # root 계정으로 전환 sudo -i # 패키지 저장소 업데이트 apt update # python3 pip 설치 apt install python3-pip # virtualenv 설치 pip install virtualenv # 설치 확인 pip list 설치 확인 시 아래와 같이 설치된 모습을 확인했다. 하지만 가상 환경 생성을 시도했을 때 명령어를 찾지 못해 다시 패키지를 설치하라는 안내가 출력되었다. 따라서 안내된 명령어로 다시 python virtualenv 설치했다. 그리고 아래와..

Linux 2022.07.20

[Shell Script] Pattern Matching

Pattern Matching *, ?, [ ]와 같은 glob 문자를 이용한 패턴 매칭은 파일명 매칭, case 문, 매개변수 확장 등과 같이 쉘 스크립트 전반에서 사용할 수 있다. Glob 문자 문자 의미 * empty를 포함해 모든 문자와 매칭된다. ? 임의의 문자 하나와 매칭된다. […] Bracket 표현식 내 하나의 문자와 매칭된다. Bracket 표현식 표현식 의미 [XYZ] X or Y or Z 문자에 대해 매칭된다. [X-Z] X부터 Z까지의 문자를 -로 표현할 수 있다. [[:class:]] POSIX character class와 매칭된다. [^…] ^문자는 NOT을 의미한다. 괄호 내 문자 이외의 문자와 매칭된다. [!…] ! 문자는 NOT을 의미한다. 괄호 내 문자 이외의 문자와 ..

Linux/Shell Script 2022.07.16

[Shell Script] Exit Status - 2

Exit Status 2022.07.05 - [Shell Script] Exit Status - 1 에 이어서 작성한다. pipe로 연결된 명령의 종료 상태 값 pipe로 여러 명령이 연결되어 실행될 때는 마지막 명령의 종료 상태 값이 사용된다. 아래 명령문의 경우 command1의 성공 여부와 상관없이 sed는 항상 참을 반환하기 때문에, 항상 종료 상태 값으로 0을 반환한다. command1 arg1 arg2 | sed -n '/:/,/^$/p' command1 명령 실패 시 비정상 종료 상태 값을 반환하려면, 파이프에 연결된 명령 중 하나라도 오류가 생길 경우 비정상 종료 상태 값을 반환하는 pipefail 옵션을 사용해야 한다. sh에서는 pipefail을 사용할 수 없으므로, 명령을 분리하거나 ..

Linux/Shell Script 2022.07.06

[Shell Script] Exit Status - 1

Exit Status 종료 상태 값은 명령이 정상적으로 실행을 완료했는지 아니면 오류가 발생했는지 판단할 수 있도록 한다. Shell에서 실행되는 모든 명령은 종료 상태 값을 반환하며 if, while, until, &&, ||은 종료 상태 값을 이용해서 참, 거짓을 판단한다. 명령이 정상적으로 종료된 경우, 0을 반환하고 그 이외의 값은 오류를 분류하는 용도로 사용된다. 명령의 종료 상태 값은 $? 변수로 알 수 있다. 앞선 명령이 정상 종료되어야 할 경우 앞서 실행된 명령에 오류가 발생했을 때 뒤의 명령이 실행되면 안 되는 경우, && 연산자를 이용해 명령을 연결하거나 test 명령을 이용하여 종료 상태를 확인한다. # && command1 ... && command2 # test command1 ...

Linux/Shell Script 2022.07.05

[Shell Script] Functions - 2

Functions 2022.07.02 - [Shell Script] Functions - 1에 이어서 마저 작성한다. 함수 정의 방법 함수를 nesting 해서 작성 함수 안에 함수를 작성할 수 있다. shell에서 함수는 모두 전역 함수가 되지만, nesting 함수는 외부 함수가 실행되기 전에는 정의된 상태가 아니기 때문에 실행하기 위해서는 외부 함수가 먼저 실행되어야 한다. 함수에서 연산 결과를 리턴하는 방법 프로그래밍 언어와 다르게 shell에서 return문은 연산 결과를 반환하는 데 사용하지 않고, exit과 같이 함수 종료 상태를 지정하는 용도로 사용된다. shell에서 함수는 일반 명령과 동일하게 사용되므로, 실행 결과도 외부 명령을 사용한 것처럼 받는다. 함수에 인수를 전달하기 외부 명령..

Linux/Shell Script 2022.07.03

[Shell Script] Functions - 1

Functions { ;}, ()를 이용해 명령 그룹을 만들면 같은 context에서 실행되어 명령 그룹 전체가 하나의 명령처럼 실행되는 것과 같은 화가를 가진다. 따라서 명령 그룹에 이름을 붙임으로써 함수를 정의하면 일반 명령과 동일하게 사용할 수 있다. { ;}는 현재 shell에서, ()은 subshell에서 실행되므로 보통 { ;}를 사용하여 함수를 정의한다. # 파이프로 인해 subshell에서 실행되어 echo $var는 값이 표시되지 않는다. echo hello world | read var; echo "$var" # 명령 그룹을 만들면 read, echo 명령이 같은 context에서 실행되어 값이 표시된다. echo hello world | { read var; echo "$var" ;}..

Linux/Shell Script 2022.07.02