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-битные. И нет 32bit /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 МБ.

1 ответ1

6

Когда exec* возвращает -ENOENT , либо отсутствует двоичный файл , либо отсутствует интерпретатор.

Очевидно, что /bin/ps существует, иначе он не был бы хеширован в оболочке. Но динамический компоновщик, от которого он зависит, вероятно, не существует в вашей системе. Если GNU binutils установлен, вы можете легко определить, так ли это.

$ readelf -l /bin/ps
…
  INTERP         0x0000000000000270 0x0000000000400270 0x0000000000400270
                 0x000000000000001c 0x000000000000001c  R      1
      [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
…

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

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

# on another system for 32-bit development
$ echo 'int main(){}' > 32bit.c
$ cc -m32 -o 32bit 32bit.c
# on a 64-bit system without 32-bit libraries
$ ./32bit
-bash: ./32bit: No such file or directory
$ readelf -l 32bit
…
  INTERP         0x000154 0x08048154 0x08048154 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /lib/ld-linux.so.2]
…
$ ls /lib/ld-linux.so.2
ls: cannot access /lib/ld-linux.so.2: No such file or directory

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

Я должен спросить - как была установлена эта система? Ничто из этого не будет правдой по умолчанию, кому-то приходилось дурачиться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .