Похоже, что файл optparse.py
из вашей установки Python 2.7 был поврежден. В частности, похоже, что он был перезаписан и заменен копией optparse.py
из Python 3.
Вывод dpkg -V
показывает много полей, проверяющих владельца, группу, режим и т. д. 5
в выводе указывает, что контрольная сумма MD5 файла в системе не совпадает с суммой в манифесте пакета. (Другими словами, содержимое было изменено после установки пакета.)
Не совсем уверен, как вы могли узнать, что могло вызвать это... Если вы установили модули Python от имени пользователя root, используя что-то, отличное от вашей ОС. дистрибутив пакета, это могло бы объяснить это... Возможно, если бы вы что-то установили, используя pip
? Хотя pip
обычно хорошо разделяет модули Python 2 и Python 3... Кроме того, я не понимаю, почему это касается конкретно optparse.py
...
В любом случае, чтобы решить эту проблему, вы можете попросить apt -get переустановить пакет, который должен исправить повреждение:
$ sudo apt-get install --reinstall libpython2.7-minimal
В ядро Linux встроена программа-эмулятор терминала. Он не проявляется как работающий процесс с дескрипторами открытых файлов. Он расположен поверх фреймбуфера и подсистемы входных событий, для доступа к которым он использует внутренние интерфейсы ядра. Он представляет себя для систем режима приложения -в виде последовательности устройств виртуального терминала ядра , /dev/tty1
и т. д., псевдофайла -под /sys
, который показывает активный номер KVT, и серия видеобуферных устройств в стиле CGA -, /dev/vcsa1
и так далее.
Обычно эмулятор терминала ядра распознает и #x2387; Alt + F Nключевые аккорды. Все это делается полностью в коде режима ядра -. (Вы можете собрать ядро без этого кода, используя параметр сборки ядра CONFIG_VT
.)
Однако прикладное программное обеспечение может отключить эту функцию. Например, сервер Xorg делает это. Когда он активен на экране -, он временно выключает или отключает большую часть эмулятора терминала ядра, распознает свои собственные аккорды клавиш(и #x2388; Управление + и #x2387; Alt + F N)и использует системные вызовы ioctl()
для переключения активного KVT под управлением программы. По сути, сервер Xorg использует переключение KVT как средство для согласования эксклюзивного доступа к фреймбуферу и HID, которые он использует совместно со встроенным в ядро -эмулятором терминала.
В дистрибутивах на основе systemd, таких как Enterprise Linux 7 и 8, есть генератор systemd -getty -. Подробнее об этом решении можно прочитать в блоге Lennart Poettering:http://0pointer.de/blog/projects/serial-console.htmlи на freedesktop https://www.freedesktop.org/software/systemd/man/systemd-getty-generator.html.
Простые тесты. При запуске консоли на ctrl
+ alt
+F2
:
[root@SpaceStation ~]# systemctl list-units | grep getty
getty@tty2.service loaded active running Getty on tty2
system-getty.slice loaded active active system-getty.slice
getty.target loaded active active Login Prompts
После входа в третью консоль(ctrl
+ alt
+F3
):
[root@SpaceStation ~]# systemctl list-units | grep getty
getty@tty2.service loaded active running Getty on tty2
getty@tty3.service loaded active running Getty on tty3
system-getty.slice loaded active active system-getty.slice
getty.target
Сгенерированный служебный файл выглядит так:
cat /usr/lib/systemd/system/getty@.service
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target
After=rc-local.service
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes
# On systems without virtual consoles, don't start any getty. Note
# that serial gettys are covered by serial-getty@.service, not this
# unit.
ConditionPathExists=/dev/tty0
[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
# Unset locale for the console getty since the console has problems
# displaying some internationalized messages.
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
[Install]
WantedBy=getty.target
DefaultInstance=tty
Наиболее важной строкой является ExecStart=-/sbin/agetty --noclear %I $TERM
, которая отвечает за запуск терминала.