손상된 터미널, 터미네이터 및 적절한

손상된 터미널, 터미네이터 및 적절한

Ubuntu 18.LTS가 있는데 실수로 트리거되었습니다.

대안 업데이트 --config python3.6

이제 터미널, 터미네이터 및 apt가 작동하지 않는 것 같아서 시스템이 손상된 것 같습니다.

터미네이터

Traceback (most recent call last):
  File "/usr/bin/terminator", line 23, in <module>
    import psutil
ModuleNotFoundError: No module named 'psutil'

단말기

Traceback (most recent call last):
  File "/usr/bin/gnome-terminal", line 9, in <module>
    from gi.repository import GLib, Gio
ModuleNotFoundError: No module named 'gi'

쉬운

예를 들어 저장소를 추가해 보세요(이 모든 프로그램의 기본값인 것 같아서 3.5를 설치해 보았습니다).

 internetmosquito@internetmosquito-PE72-7RD  ~  sudo add-apt-repository ppa:deadsnakes/ppa
Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 12, in <module>
    from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
ModuleNotFoundError: No module named 'softwareproperties'

이제 pyenv를 사용하여 다양한 버전의 Python을 설치했다고 말씀드리고 싶습니다.

 ✘ internetmosquito@internetmosquito-PE72-7RD  ~  pyenv versions
  system
  2.7.13
* 3.8.3 (set by /home/internetmosquito/.pyenv/version)
  3.9-dev

대부분은 /home/internetmosquito/.pyenv/versions에 설치됩니다.

 internetmosquito@internetmosquito-PE72-7RD  ~  ls -ltra /home/internetmosquito/.pyenv/versions
total 20
drwxr-xr-x  6 internetmosquito internetmosquito 4096 jun 13  2020 3.9-dev
drwxr-xr-x  6 internetmosquito internetmosquito 4096 jun 16  2020 3.8.3
drwxrwxr-x 13 internetmosquito internetmosquito 4096 sep 27 20:35 ..
drwxr-xr-x  6 internetmosquito internetmosquito 4096 feb  9 01:05 2.7.13
drwxr-xr-x  5 internetmosquito internetmosquito 4096 feb  9 02:12 .

이제 /usr/bin/python을 확인하면 다음이 표시됩니다.

 internetmosquito@internetmosquito-PE72-7RD  ~  ls -ltra /usr/bin/python*
lrwxrwxrwx 1 root root      16 mar 13  2020 /usr/bin/python3-config -> python3.8-config
lrwxrwxrwx 1 root root       9 mar 13  2020 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root     388 mar 28  2020 /usr/bin/python3-pasteurize
-rwxr-xr-x 1 root root     384 mar 28  2020 /usr/bin/python3-futurize
-rwxr-xr-x 1 root root     152 abr  9  2020 /usr/bin/python3-pbr
lrwxrwxrwx 1 root root      33 jul 28  2020 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config
-rwxr-xr-x 1 root root 5486352 jul 28  2020 /usr/bin/python3.8
-rwxr-xr-x 1 root root 3629032 ago  4  2020 /usr/bin/python2.7
lrwxrwxrwx 1 root root      25 feb  8 23:49 /usr/bin/python3 -> /etc/alternatives/python3
lrwxrwxrwx 1 root root      24 feb  9 00:50 /usr/bin/python -> /etc/alternatives/python

Python 3.5를 사용하는 "제 생각에는" 터미네이터가 없는 것 같습니다...

 internetmosquito@internetmosquito-PE72-7RD  ~  cat /usr/bin/terminator 
#!/usr/bin/python3

내 python3 구문 분석은 실제로 내 Python과 동일합니다 ...

 internetmosquito@internetmosquito-PE72-7RD  ~  python
Python 3.8.3 (default, Jun 16 2020, 18:30:59) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
 internetmosquito@internetmosquito-PE72-7RD  ~  python3
Python 3.8.3 (default, Jun 16 2020, 18:30:59) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

대안을 다시 업데이트하려고 하면 이 메시지가 나타납니다...

 internetmosquito@internetmosquito-PE72-7RD  ~  sudo update-alternatives --config python3
There is only one alternative in link group python3 (providing /usr/bin/python3): /usr/local/bin/python3.7
Nothing to configure.

거기에 왜 python3.7이 언급되어 있는지 모르시나요? /usr/local/bin에 여러 개의 비단뱀이 있습니다.

✘ internetmosquito@internetmosquito-PE72-7RD  ~  ls -ltra /usr/local/bin/python*
lrwxrwxrwx 1 root root       17 dic 24  2018 /usr/local/bin/python3.7-config -> python3.7m-config
-rwxr-xr-x 2 root root 14925232 dic 24  2018 /usr/local/bin/python3.7m
-rwxr-xr-x 2 root root 14925232 dic 24  2018 /usr/local/bin/python3.7
-rwxr-xr-x 1 root root     3097 dic 24  2018 /usr/local/bin/python3.7m-config
-rwxr-xr-x 2 root root 14642520 feb  9 00:46 /usr/local/bin/python3.5m
-rwxr-xr-x 2 root root 14642520 feb  9 00:46 /usr/local/bin/python3.5
-rwxr-xr-x 1 root root     3071 feb  9 00:46 /usr/local/bin/python3.5m-config
lrwxrwxrwx 1 root root       17 feb  9 00:46 /usr/local/bin/python3.5-config -> python3.5m-config
lrwxrwxrwx 1 root root        9 feb  9 00:46 /usr/local/bin/python3 -> python3.5
lrwxrwxrwx 1 root root       16 feb  9 00:46 /usr/local/bin/python3-config -> python3.5-config

가장 중요한 것은 lsb_release도 작동하지 않는다는 것입니다!

 internetmosquito@internetmosquito-PE72-7RD  ~  lsb_release -a                 
Traceback (most recent call last):
  File "/usr/bin/lsb_release", line 25, in <module>
    import lsb_release
ModuleNotFoundError: No module named 'lsb_release'

얼마나 많은 것들이 손상되었는지조차 모릅니다... Ubuntu를 다시 설치해야 한다는 의미가 아닌 정상으로 돌아가는 방법에 대한 제안이 있습니까?

감사해요!

@Stewart의 답변을 기반으로 업데이트되었습니다.

나는 여기에 게시한 결과를 얻기 위해 Xterm을 사용하고 있습니다. 그런데, 저는 20.04가 아니라 18.04에 있어요

그럼 당신의 제안으로 돌아가서

 internetmosquito@internetmosquito-PE72-7RD  ~  file $(which terminator) $(which xterm) $(which gnome-terminal)
/usr/bin/terminator:     symbolic link to ../share/terminator/terminator
/usr/bin/xterm:          ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=abd5692fa8891e01f24e8ae7f40f218662f098d9, for GNU/Linux 3.2.0, stripped
/usr/bin/gnome-terminal: Python script, ASCII text executable

내 gnome 터미널도 Python을 기반으로 하는 것 같나요?

internetmosquito@internetmosquito-PE72-7RD  ~  file $(which add-apt-repository) $(which apt) $(which apt-cache) $(which dpkg)
/usr/bin/add-apt-repository: Python script, ASCII text executable
/usr/bin/apt:                ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c460d1db846110f4ae24cb54b4cfee967d022c09, for GNU/Linux 3.2.0, stripped
/usr/bin/apt-cache:          ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2e75b0850b2936259281b093ecf906bf70a1d7b8, for GNU/Linux 3.2.0, stripped
/usr/bin/dpkg:               ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=978cfb3eb2e5cee720ae1c551c12595f1aa211f5, for GNU/Linux 3.2.0, stripped

적절한 등을 확인하십시오.

internetmosquito@internetmosquito-PE72-7RD  ~  file $(which add-apt-repository) $(which apt) $(which apt-cache) $(which dpkg)
/usr/bin/add-apt-repository: Python script, ASCII text executable
/usr/bin/apt:                ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c460d1db846110f4ae24cb54b4cfee967d022c09, for GNU/Linux 3.2.0, stripped
/usr/bin/apt-cache:          ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2e75b0850b2936259281b093ecf906bf70a1d7b8, for GNU/Linux 3.2.0, stripped
/usr/bin/dpkg:               ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=978cfb3eb2e5cee720ae1c551c12595f1aa211f5, for GNU/Linux 3.2.0, stripped

이제 Python 3을 확인하려고 하면

 internetmosquito@internetmosquito-PE72-7RD  ~  ls -go $(which python3)  
-rwxrwxr-x 1 424 jun 13  2020 /home/internetmosquito/.pyenv/shims/python3

따라서 pyenv가 설치한 Python을 가리키는 것 같습니다.

답변1

먼저 Python에 의존하지 않는 터미널을 사용하는 것이 좋습니다. gnome-terminal아니면 xterm작동합니다:

$ file $(which terminator) $(which xterm) $(which gnome-terminal)
/usr/bin/terminator:     Python script, ASCII text executable
/usr/bin/xterm:          ELF 64-bit LSB pie executable, ...
/usr/bin/gnome-terminal: ELF 64-bit LSB pie executable, ...

, 및 는 add-apt-repositoryPython 스크립트일 수 있지만 여전히 작동하지 않으며 작동해야 합니다.aptdpkg

$ file $(which add-apt-repository) $(which apt) $(which apt-cache) $(which dpkg)
/usr/bin/add-apt-repository: Python script, ASCII text executable
/usr/bin/apt:                ELF 64-bit LSB pie executable, x86-...
/usr/bin/apt-cache:          ELF 64-bit LSB pie executable, x86-...
/usr/bin/dpkg:               ELF 64-bit LSB pie executable, x86-

apt일부 깨진 링크를 포함하여 깨진 패키지를 다시 설치/재구성하는 데 사용할 수 있습니다 . 저는 Debian에서 테스트 중이지만 Debian과 Ubuntu의 핵심 Python 패키지는 같은 사람이 관리하므로 여러분에게도 비슷할지는 의문입니다. 여기에서 관련 패키지를 찾고 있습니다.

$ ls -go $(which python3) 
lrwxrwxrwx 1 9 Dec 23 07:05 /usr/bin/python3 -> python3.9

$ dpkg -S $(which python3) $(which python3.9)
python3-minimal: /usr/bin/python3
python3.9-minimal: /usr/bin/python3.9

$ apt-cache show python3 | grep Depends:
Depends: python3.9 (>= 3.9.1-1~), ...
Pre-Depends: python3-minimal (= 3.9.1-1)

$ apt-cache show python3.9 | grep Depends:
Depends: python3.9-minimal (= 3.9.1-4)...

이제 우리는 어떤 패키지가 이 링크와 이와 관련된 바이너리를 처리하는지 알고 있습니다. 귀하의 경우 Ubuntu 20.04를 사용하고 있으므로 python3.8대신 python3.9.

나는 다음을 사용하여 문제를 해결하려고 노력할 것입니다.

sudo apt reinstall python3 python3-minimal python3.8 python3.8-minimal

특별한 점은 /var/lib/dpkg/info/<package>.{pre,post}{inst,rm}바이트 컴파일 및 사용(해당하는 경우)을 수행하는 스크립트를 다시 호출한다는 것입니다 update-alternatives.

이것이 작동하지 않으면 출력을 살펴보겠습니다 update-alternatives --config python3. 데비안 테스트에서 나는 다음을 얻습니다:

$ update-alternatives --config python3
update-alternatives: error: no alternatives for python3

동일한 결과를 얻으면 대안이 더 이상 Python3을 관리하지 않는다는 의미입니다. 이것이 언제 변경되었는지는 확실하지 않으며, 이를 이해하지 못한다면 이것이 컴퓨터 문제의 원인일 수 있습니다. 이전 python3 버전이 제거되면 prerm담당 버전이 update-alternatives --remove python3실행되지 않습니다. 실행해보고 update-alternatives --config python3어떤 옵션이 사용 가능한지 확인하세요. 옵션이 있고 python3.8우선순위가 가장 높은 경우 이 옵션을 다시 실행 sudo하고 을 선택하십시오 auto.

$ update-alternatives --config python3
There are 3 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                    Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.8      1111      auto mode
  1            /usr/bin/python3.5      1101      manual mode
  2            /usr/bin/python3.8      1111      manual mode
  3            /usr/bin/python3.7      1081      manual mode

그러나 나는 python3.8그것이 귀하의 목록에 없는 것으로 생각하며 이것이 귀하에게 문제가 있는 이유입니다. Debian Buster(2018년에 출시됨)에도 python3.7이 있으므로 python3.5는 꽤 오래되었습니다. 이제 패키지가 링크를 자체적으로 관리 하므로 python3실행 시 update-alternatives --config python3좋은 링크를 오래된 링크로 바꿀 수 있습니다 . 이 경우 python3을 수동으로 제거합니다.

sudo update-alternatives --remove-all python3

그런 다음 Python 패키지를 다시 설치하십시오.

새 버전이 출시될 때마다 python3아카이브의 모든 종속 패키지에 대해 테스트를 실행하는 데 약간의 시간이 소요됩니다. 패키지가 실패하면 버그 보고서가 제출되고 관리자는 패키지가 최신 버전에서 작동하는지 확인하기 위해 최선을 다합니다 python3. 일반적으로 여러 포인트 버전을 설치할 필요는 없습니다. terminator최신 python3. 공식 배포 범위를 terminator벗어나고 python3.5.

관련 정보