[Ubuntu] 사용 중인 명령어가 포함된 패키지명 검색

[Ubuntu] 사용 중인 명령어가 포함된 패키지명 검색
Photo by Gabriel Heinzer / Unsplash

리눅스를 주제로 블로그를 운영하다보면, 어려운 점이 포스트를 읽은 사용자가 "저는 그런 명령어가 없어요!"와 같은 독자와 필자 간의 환경의 차이점이다. 최대한 많은 사용자에게 적용이 될 수 있도록 포스트를 작성하려고 노력하지만... 매번 시스템을 초기화해서 테스트를 해볼 수도 없는 노릇이니 최대한 그 갭 차이를 줄이려고 테스트환경을 명기해두거나 오류 시의 대처방안 등 여러 설명을 덧붙이곤 한다. 그래도 여전히 너무나 다양한 환경차이는 여전히 극복하기 어려운 것이 현실이다.

이번 포스트에서는 환경차이 중에서 CLI(Command-Line Interface) 환경에서의 명령어(Command)에 대한 갭차이를 줄여보고자 찾아본 자료를 기반으로 작성되었다.[1]


  1. 사실 해당 문서의 링크(참고문서 #1)만 보관해도 될 정도의 수준이지만, 웹상의 문서나 유튜브 동영상 같은 자료는 언제 삭제될 지 모르고.. 찾은 자료에 대해서 이렇게 포스트로 옮기다보면 기억에 각인되는 효과가 있어서 "설명"이라는 살을 덫붙여서 포스트로 만들었다. 만약 원저작자(helperchoi)님이 삭제를 요청하면 본 포스트는 언제든 삭제될 수 있다. ↩︎

A. 테스트 환경

  • OS : Ubuntu 22.04.2 LTS (Jammy Jellyfish)
  • Kernel : 5.19.0-46-generic

B. 명령어

$ which [명령어]
$ dpkg -S [which 결과]

C. 테스트

$ which curl
/usr/bin/curl
$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl

curl 명령어가 없을 수 있는 독자를 위해서 어떤 패키지를 설치해야하는지 안내를 하고 싶었다. 이 경우에는 dpkg -S 명령어를 이용해서 찾으면 된다!

위 경우라면 포스트에 아래처럼 넣어주면 될 것 같다.

curl 명령어가 없으면 아래의 명령어로 패키지를 설치하면 된다.

$ sudo apt install curl

D. 예외사항 - 1

그런데.. 여러 명령어를 테스트해보니 정상적으로 패키지명이 검색되지 않는 명령어들이 있었다. 이 경우는 보통 심볼릭링크와 관련이 있을 것으로 추정된다.

$ which vim
/usr/bin/vim
$ dpkg -S /usr/bin/vim
dpkg-query: no path found matching pattern /usr/bin/vim

vim 명령어를 조회해보니 명령어의 절대경로가 /usr/bin/vim으로 나온다. 그래서 dpkg 명령어로 조회해봤는데 /usr/bin/vim이 있는 패키지가 조회되지 않았다.

$ ls -l /usr/bin/vim
lrwxrwxrwx 1 root root 21  3월 10 10:14 /usr/bin/vim -> /etc/alternatives/vim
$ ls -l /etc/alternatives/vim
lrwxrwxrwx 1 root root 18  3월 10 10:14 /etc/alternatives/vim -> /usr/bin/vim.basic
$ ls -l /usr/bin/vim.basic
-rwxr-xr-x 1 root root 3783632  6월 22 13:08 /usr/bin/vim.basic
$ dpkg -S /usr/bin/vim.basic
vim: /usr/bin/vim.basic

그래서 ls 명령어로 확인해보니 해당 파일은 심볼릭링크로 연결되어있는 파일이었다.

/usr/bin/vim -> /etc/alternatives/vim -> /usr/bin/vim.basic로 다단계의 심볼릭링크로 연결되어있는데 실제로 해당 명령어의 실행파일은 /usr/bin/vim.basic이었던 것이다. 그래서 /usr/bin/vim.basic으로 검색해보니 정상적으로 조회가 됬다.

E. 예외사항 - 2

또 다른 예외로는 ifconfig 명령어였다. 머릿속의 기억으로는 Ubuntu에서 net-tools라는 패키지에 ifconfig 명령어가 포함되어 있는 것으로 알고있었다.

$ which ifconfig
/usr/sbin/ifconfig
$ dpkg -S /usr/sbin/ifconfig
dpkg-query: no path found matching pattern /usr/sbin/ifconfig
$
$
simplism@simplism-xnote:~$ ls -l /usr/sbin/ifconfig
-rwxr-xr-x 1 root root 79024  3월 25  2022 /usr/sbin/ifconfig

그래서 검색했더니 실행파일의 위치가 /usr/sbin/ifconfig였고... 검색했는데 검색실패! 그래서 실행파일이 심볼릭링크인가 봤는데 아니었다.

더 찾아보니...

$ dpkg -S ifconfig
net-tools: /sbin/ifconfig
net-tools: /usr/share/man/de/man8/ifconfig.8.gz
linux-hwe-5.19-headers-5.19.0-45: /usr/src/linux-hwe-5.19-headers-5.19.0-45/tools/hv/hv_set_ifconfig.sh
net-tools: /usr/share/man/man8/ifconfig.8.gz
net-tools: /usr/share/man/pt_BR/man8/ifconfig.8.gz
net-tools: /usr/share/man/fr/man8/ifconfig.8.gz
linux-hwe-5.19-headers-5.19.0-46: /usr/src/linux-hwe-5.19-headers-5.19.0-46/tools/hv/hv_set_ifconfig.sh
$ ls -l /sbin
lrwxrwxrwx 1 root root 8  3월 10 09:36 /sbin -> usr/sbin

경로를 제외하고 ifconfig로만 검색해보니 /sbin/ifconfig가 나왔다. 그래서 /sbin을 확인해보니.... /sbin -> /usr/sbin으로 심볼릭링크가 연결되어 있던 것이다!

결국 실행파일 자체가 심볼릭링크이거나 디렉토리 자체가 심볼릭링크인 경우에는 검색이 정상적으로 되지 않는 것이다.

E. 대응방안

위 ifconfig 명령어와 같이 which 명령어로 조회된 절대경로로 조회되지 않는 경우라면 경로를 제외한 명령어만으로 검색해보면 해당 명령어가 포함된 패키지를 찾을 수 있을 것 같다.

G. 참고문서

  1. 내가 원하는 명령어가 포함된 패키지를 찾는 방법, helperchoi, helperchoi, 2019/10/13

Read more

[Linux] Mariadb Docker container 설치

[Linux] Mariadb Docker container 설치

A. 사용환경 * OS : Rocky Linux 9.5 (Blue Onyx) * Docker : 28.0.4 * Portainer : 2.27.3 LTS B. 시작하기 전에... 어떤 소프트웨어를 사용하더라도 보통 Database는 거의 필수로 필요한 편이다.(요즘엔 SQLite도 많이써서... DB서버가 없어도 되긴하지만 어쨌든!) 업무적으로 사용할 소프트웨어들을 몇개 검토해봤는데, 대부분이 MySQL, Mariadb, PostgreSQL이더라. 일단, 바로 설치해서 사용해볼

By simplism
[Linux] Docker에 Portainer 설치

[Linux] Docker에 Portainer 설치

A. 사용환경 * OS : Rocky Linux 9.5 (Blue Onyx) * Docker : 28.0.4 B. Portainer란? docker를 사용할 때 명령어 기반으로 사용해도 되지만... 여전히 GUI는 필요하다.(ㅎㅎ) Portainer를 간단하게 설명하면 docker 관리소프트웨어(웹기반)정도로 이해해도 된다. Portainer 공식 홈페이지에서 확인해보면 기능이 아주 많은 것 같은데... 사실 나의 경우에는 아주 단순한 기능만

By simplism
[Linux] Rocky Linux 9에 Docker 설치

[Linux] Rocky Linux 9에 Docker 설치

사용환경 1. Hardware : VMware 2. OS : Rocky Linux 9.5 (Blue Onyx) A. 시작하기 전에.. Docker 테스트를 위해서 VMware에 가상서버를 생성하고 Rocky Linux를 설치했다. 개인적으로는 Ubuntu를 선호하는 편인데, 회사에서 사용할 서버라서 다른 사람들과 같이 사용하기 위해서 RHEL이나 RHEL과 호환되는 배포판을 선택해서 사용하는 편이다. B. Docker 설치 전 작업 01. OS

By simplism