Debian без основних команд: "Немає такого файлу чи каталогу"


5

У моєму новому VPS працює Debian 5.0 (bash 3.2.29), і деякі команди, здається, відсутні. Наприклад, psкоманди тут немає, також немає ls(але dir працює). Чи не вистачає пакету, чи яка угода?

:~# type ps
ps is hashed (/bin/ps)
:~# ps
-bash: /bin/ps: No such file or directory

:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

:~# /bin/ps
-bash: /bin/ps: No such file or directory

Редагувати: Більше інформації від коментарів:

  • Це 64 біт
  • Не знаю жодної інформації про фактичну установку.
  • Це віртуальна машина під управлінням virtuozzo & plesk
  • readelf показує, що це /bin/psі /bin/lsє 32-бітним. І немає 32-бітового /lib/ld-linux-so.2. Як це сталося? Помилка встановлення чи що?

Для завершення:

# file /bin/ps
/bin/ps: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.0.0, stripped

# file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked     (uses shared libs), for GNU/Linux 2.0.0, stripped

# uname -mrvs
Linux 2.6.18-028stab069.6 #1 SMP Wed May 26 18:10:06 MSD 2010 x86_64


# readelf -l /bin/ps

Elf file type is EXEC (Executable file)
Entry point 0x8049040
There are 6 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x08048034 0x08048034 0x000c0 0x000c0 R E 0x4
  INTERP         0x0000f4 0x080480f4 0x080480f4 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /lib/ld-linux.so.2]
  LOAD           0x000000 0x08048000 0x08048000 0x071fa 0x071fa R E 0x1000
  LOAD           0x007200 0x08050200 0x08050200 0x005a0 0x01e5c RW  0x1000
  DYNAMIC        0x0076f8 0x080506f8 0x080506f8 0x000a8 0x000a8 RW  0x4
  NOTE           0x000108 0x08048108 0x08048108 0x00020 0x00020 R   0x4

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .interp 
   02     .interp .note.ABI-tag .hash .dynsym .dynstr 
  .gnu.version .gnu.version_r .rel.got .rel.bss .rel.plt
  .init .plt .text .fini .rodata 
   03     .data .got .dynamic .bss 
   04     .dynamic 
   05     .note.ABI-tag 

Рішення

Постачальник послуг перевстановив систему. Це було напевно щось фанкі. Споживання пам'яті також знизилося з приблизно 750 МБ до 120 МБ.


що echo $PATHповертає? чи працює дзвінок /bin/psбезпосередньо?
Найфл

$ PATH виглядає нормально. / бін / пс ж. Перший раз, коли type psвін працює, він повертаєтьсяps is /bin/ps
мандрагора

Перевірте , якщо виконавчі файли є: echo /bin/?s. Якщо вони є, заберіть файли /bin/lsта /bin/dir(або де вони dirє) на вашу машину та огляньте їх (для початку, запустіть fileїх та повідомте про вихід). Перевірте дозволи на файли (з dir -l /bin/?s).
Жиль

Це 32-бітна або 64-бітна система? Що echo $HOSTTYPEпоказує і uname -mrvsчи unameпрацює? Яке рішення для віртуалізації використовує VPS? Чи надає вона систему безпеки, наприклад SELinux? Чи бачите ви в цьому плані щось інше, що могло б мати відношення до VPS?
Жиль

Відповіді:


6

Коли exec*повертається -ENOENT, або двійковий файл відсутній, або інтерпретатор відсутній.

Очевидно, що /bin/psіснує, інакше це не було б у хеші в оболонці. Але динамічний лінкер, від якого він залежить, напевно, не існує у вашій системі. Якщо встановлені бітуси GNU, ви можете легко визначити, чи це так.

$ readelf -l / bin / ps
…
  INTERP 0x0000000000000270 0x0000000000400270 0x0000000000400270
                 0x000000000000001c 0x000000000000001c R 1
      [Запит інтерпретатора програми: /lib64/ld-linux-x86-64.so.2]
…

/lib64/ld-linux-x86-64.so.2 існує на моїй гібридній тестовій машині Debian Squeeze / Sid.

Одна з можливостей полягає в тому, що ви якось встановили 32-бітні пакети без необхідних 32-бітних бібліотек. Наприклад, якщо я спробую запустити 32-розрядний бінарний файл у 64-бітній системі,

# в іншій системі для 32-розрядної розробки
$ echo 'int main () {}'> 32bit.c
$ cc -m32 -o 32bit 32bit.c
# у 64-бітній системі без 32-бітних бібліотек
$ ./32bit
-bash: ./32bit: Немає такого файлу чи каталогу
$ readelf -l 32bit
…
  INTERP 0x000154 0x08048154 0x08048154 0x00013 0x00013 R 0x1
      [Запит перекладача програми: /lib/ld-linux.so.2]
…
$ ls /lib/ld-linux.so.2
ls: не вдається отримати доступ до /lib/ld-linux.so.2: такого файлу чи каталогу немає

Інша можливість полягає в тому, що ви намагаєтеся запустити бінарні файли LSB в системі без встановлених базових бібліотек LSB, наприклад, такий сценарій, як https://stackoverflow.com/questions/1562071 , або намагаєтесь використовувати пакети на основі Glibc у системі, що підтримує µClibc або безліч інших подібних ситуацій.

Мені потрібно запитати - як була встановлена ​​ця система? Ніщо з цього не буде правдою за замовчуванням, комусь доводилося гнатися з речами.


Ви маєте рацію (спасибі!) - це були 32-бітні бінарні файли. Оскільки постачальник послуг робить установку, я насправді не маю поняття, як вони її встановили. Чи розумна причина помилкова установка? Можливо, я повинен подати запит на повторну інсталяцію сервера.
мандрагора

2
Так, вам слід обов'язково звернутися до свого постачальника послуг VPS, щоб виправити це. Ви платите їм за працюючий віртуальний сервер, а не за зламаний.
CarlF

Гаразд, я зв’язався з ними вчора (CET) і сьогодні перевірив підтримку. У них працюють 3 хлопці. Тож здається, що горішком зламати :)
мандрагора
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.