리눅스에서 yum의 provides 명령어를 사용하면 패키지를 검색할 수 있습니다. 어떤 라이브러리나 실행 파일이 필요할 때, 그 파일이 어떤 패키지에 포함되어 있는지 알아낼 때 유용합니다. yum provides yum provides [패턴] 예시) 라이브러리를 포함하는 패키지 검색 특정 프로그램을 실행하기 위해 libcrypt.so.1 라는 라이브러리가 필요하다고 가정하겠습니다. 실제로 어떤 프로그램이 라이브러리 의존성 문제로 실행되지 않으면 필요한 라이브러리 이름을 출력하면서 이 라이브러리를 찾을 수 없다는 메시지가 출력됩니다. 그럴 때 해당 라이브러리를 포함하고 있는 패키지를 repository에서 찾아볼 수 있습니다. 와일드카드(*)를 사용해서 검색합니다. yum provides */libcr..
아마존 리눅스 2023에서는 yum 대신 dnf로 PostgreSQL을 설치합니다. PostgreSQL 클라이언트 및 라이브러리를 설치하고 PostgreSQL 데이터베이스 서버를 순차적으로 설치하면 됩니다. 설치 가능한 postgresql 버전을 확인하려면 search 명령어를 사용합니다. dnf search postgresql postgresql15를 설치해보겠습니다. 1. 먼저 postgresql15를 설치합니다. PostgreSQL 데이터베이스 클라이언트 프로그램과 라이브러리를 포함하는 패키지입니다. dnf install postgresql15 2. postgresql15 서버를 설치합니다. 데이터베이스 서버 관련 파일을 포함하는 패키지입니다. dnf install postgresql15-serve..
컴퓨터 프로그램은 기본적인 기능을 수행하기 위해 운영체제와 상호 작용해야 합니다. 예를 들어, 파일을 읽거나 쓰고, 메모리를 할당하거나 해제해야 합니다. 이런 작업을 수행하기 위한 인터페이스들이 있는데요. 이런 기본적인 인터페이스를 제공하는 게 glibc입니다. 리눅스에서 glibc는 GNU 프로젝트의 C 라이브러리를 나타냅니다. GNU 프로젝트는 1983년에 시작된 공개 소프트웨어 프로젝트로 현재 리눅스 배포판에는 대부분 glibc가 포함되어 있습니다. GLIBC glibc는 C와 C++ 프로그램이 운영체제와 상호작용할 수 있도록 시스템 호출, 기본 데이터 구조, 알고리즘, 스레드 지원, 수학 함수, 입력/출력 등과 같은 기본 런타임 기능을 제공합니다. 때문에 대부분의 리눅스 배포판은 기본 C 라이브러..
리눅스에서 nm 명령어는 객체 파일이나 실행 파일에 어떤 심볼(함수, 변수 등)이 포함되어 있는지 확인할 때나 링킹 오류가 발생했을 때 원인을 파악하기 위해 주로 사용됩니다. 예를 들어, nm으로 확인할 수 있는 심볼은 이런 겁니다. 아래와 같은 c 프로그램이 있을 때 #include int globalVar = 10; int add(int a, int b) { return a + b; } int main() { printf("Hello, World!\\n"); return 0; } 이 코드를 컴파일하고 nm으로 심볼을 확인하면 아래와 같은 결과를 얻을 수 있습니다. ... 00000000004005b6 T add ... 00000000004005ca T main ... 0000000000601038 D..
리눅스에서 watch는 주어진 명령어를 주기적으로 실행하고 그 결과를 화면에 표시합니다. CLI의 특성상 실시간 변화를 모니터링하는 게 불편한데, watch를 이용하면 이런 불편함을 해소할 수 있습니다. 리눅스 watch 기본 구문 watch [옵션] 명령어 n : 업데이트 간격을 초 단위로 설정합니다. 기본값은 2초입니다. 예를 들어, watch -n 5 date 은 5초마다 현재 시간을 표시합니다. d : 이전 화면과의 차이점을 표시합니다. 변화가 있는 부분을 명확하게 볼 수 있습니다. t : 상단의 헤더 정보를 표시하지 않습니다. g : 출력이 변경될 때까지 명령어를 실행하고 변경이 발생하면 watch가 종료됩니다. 예시) 폴더 내 변화 관찰 watch ls 폴더에 파일이 새로 생기는 걸 기다릴 때..
리눅스에서 systemctl은 시스템 및 서비스 관리자인 systemd의 컨트롤 도구입니다. systemctl을 이용해서 mysql, mariadb, postgresql 등의 DBMS 서비스를 시작하고 중지할 수 있습니다. 윈도우로치면 서비스랑 비슷합니다. 그런데 간혹 등록된 서비스의 이름을 모를 때가 있습니다. 이럴 때 등록된 서비스 목록을 확인할 수 있습니다. 1. 활성화된 모든 서비스 목록 보기 systemctl list-units --type=service 2. 활성화되지 않은 서비스를 포함하여 모든 서비스 보기 systemctl list-unit-files --type=service 예를 들어, systemctl에 등록된 postgresql의 서비스명이 뭔지 잘 모르겠으면 아래와 같이 grep ..
윈도우 PC에서 프로그램을 설치할 때 .exe 파일을 다운받아 실행하는 것에 익숙합니다. 그런데 어떻게 exe 파일을 실행하는 것만으로 PC에 프로그램이 사용 가능한 형태로 설치되는 걸까요? 이 과정을 지원하는 게 윈도우 인스톨러입니다. 윈도우 인스톨러란? 윈도우 인스톨러(Windows Installer)는 마이크로소프트에서 개발한 설치 및 설정 엔진입니다. .msi 파일의 내용을 해석하여 해당 프로그램의 모든 요소와 컴포넌트를 정확한 위치에 설치하고 필요한 설정을 해줍니다. 일반적으로는 msi가 아닌 exe를 실행하겠지만, 사실 exe 안에 msi가 포장된 형태이기 때문에 결국은 msi 파일을 실행합니다. 윈도우 인스톨러는 여러 기능을 제공합니다. 예를 들면, 설치 과정 중 발생할 수 있는 문제를 대비..
코어 덤프란? 코어 덤프는 프로그램이 비정상적으로 종료될 때 그 시점의 메모리 상태와 레지스터 값, 스택 트레이스 등의 정보를 담고 있는 파일입니다. 어떤 이유로 프로그램이 죽었는지 디버깅할 때 활용됩니다. 코어덤프는 바이너리로 저장되지만 GDB 같은 디버거로 덤프 파일의 내용을 읽을 수 있습니다. 코어 덤프 생성 예시 리눅스에서 임의로 코어 덤프가 떨어지는 소스 코드를 컴파일하고 실행하여 확인해 보겠습니다. 우선 코어 덤프 파일이 생성되도록 터미널에서 아래의 명령어를 실행합니다. 이 명령은 현재 셸에 대해 코어 덤프 파일 크기의 제한을 해제합니다. [root@localhost coredump]# ulimit -c unlimited NULL 포인터를 참조하려고 시도하여 Segmentation Fault를..
윈도우에서 사용하던 USB를 맥북에 꽂아서 사용하려고 해 본 적 있으신가요? 그렇게는 사용이 안 됩니다. 왜냐하면 각 운영체제에서 지원하는 파일 시스템이 다르기 때문입니다. 파일 시스템은 컴퓨터의 데이터 저장 방식을 결정하는 요소입니다. 파일 시스템의 종류는 여러가지 지만 윈도우, 리눅스, 맥 운영체제 별로 가장 많이 사용되는 파일 시스템을 하나씩만 정리해 보겠습니다. 운영체제 별로 단 하나의 파일 시스템만 언급하는 건 정확하진 않지만, 이 글에선 운영체제 별로 파일 시스템이 다르다는 것, 파일 시스템은 각각 다른 특징을 가지고 있다는 것 정도를 이해하는 걸 목표로 합니다. 파일 시스템이란? 파일 시스템(File System)은 운영 체제가 데이터를 저장하고 검색하는 방법을 정의하는 구조나 규약입니다. ..
윈도우 OS에서 화면에 나타나는 윈도우(창)들은 각각 고유한 핸들(Handle)을 가지고 있습니다. 핸들을 통해 운영체제나 응용 프로그램은 해당 객체를 제어하거나 상호작용을 수행할 수 있습니다. 핸들을 통해 인식한 윈도우의 영역이 어떤 클래스명을 가지고 있는지 확인할 수 있습니다. 1. Spy++을 실행합니다. 2. Ctrl + F 키를 눌러 Find Window를 활성화 시킵니다. 3. 중앙의 Finder Tool 바로 오른쪽으로 타겟을 지정할 수 있는 동그란 아이콘이 있습니다. 이걸 드래그하여 클래스 명을 확인할 윈도우 지점에 드롭합니다. 4. 메모장의 왼쪽 상단 영역은 클래스 이름이 Notepad인 걸 알 수 있습니다. 하나의 윈도우여도 각 부분 별로 클래스 이름이 다를 수 있습니다. 예를 들어,..