찾을 수 없는 명령 처리기가 존재하는 명령에 대해 트리거되는 이유는 무엇입니까?

찾을 수 없는 명령 처리기가 존재하는 명령에 대해 트리거되는 이유는 무엇입니까?

Ubuntu 저장소에서 사용할 수 있는 버전이 너무 오래된 패키지(이 경우 Docker)가 있었기 때문에 적절한 소스에 Docker 저장소를 추가하고 거기에서 패키지를 설치했습니다.

이제 일반 사용자가 이를 실행하려고 하면 찾을 수 없는 명령 처리기가 시작됩니다.

user@host:~$ docker
The program 'docker.io' is currently not installed. You can install it by typing:
sudo apt-get install docker.io

바이너리가 내 경로에 있지만 괜찮습니다.

user@host:~$ which docker
/usr/bin/docker

그리고 이에 대한 실행 권한이 있습니다.

user@host:~$ /usr/bin/docker
Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.
....

나는 새로운 로그인 셸을 실행하려고 시도했지만 hash -r아무 소용이 없었습니다. 명령을 찾을 수 없는 처리기가 여전히 시작됩니다.

왜 그렇게 행동합니까? Ubuntu 저장소의 패키지가 이라고 하는데 docker.ioDocker 저장소의 패키지가 단지 이라고 불리기 때문인가요 docker?

를 완전히 제거하지 않고 이 문제를 해결할 수 있습니까 command-not-found?

편집: Docker 저장소에서 최신 버전을 설치한 방법:

sudo -i
apt-get purge docker.io
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo "deb https://get.docker.com/ubuntu docker main" >/etc/apt/sources.list.d/docker.list
apt-get update
apt-get install docker

EDIT2: 언급하는 것을 잊었습니다. /usr/bin/docker가 래퍼 스크립트가 아닌지 확인했습니다.

user@host:~$ file /usr/bin/docker
/usr/bin/docker:  ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=a5773ec80f810b977dc93bb10b4c6c6b8c2b1abd, not stripped

답변1

예를 들어 별칭 문제인 경우가 많습니다. bashrc/zshrc의 alias docker=docker.io... 또한 확인해볼 가치가 있는 점은 버전 A와 버전 B가 함께 설치되지 않아 패키지와 이름 지정 충돌이 자주 발생한다는 것입니다.

관련 정보