web-dev-qa-db-ja.com

基本的なコマンドのないDebian: 'そのようなファイルやディレクトリはありません'

私の新しいVPSはDebian5.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 

解決

5
mandrake

いつ exec* 戻り値 -ENOENT、バイナリが欠落しているか、インタプリタが欠落しています。

明らかに、/bin/psが存在します。そうでない場合、シェルでハッシュ化されません。しかし、それが依存するダイナミックリンカーはおそらくあなたのシステムには存在しません。 GNU binutilsがインストールされている場合、これが当てはまるかどうかを簡単に判断できます。

 $ readelf -l/bin/ps
…
INTERP0x0000000000000270 0x0000000000400270 0x0000000000400270 
 0x000000000000001c 0x000000000000001c R 1 
 [プログラムインタープリターの要求:/ lib64/ld-linux-x86-64.so.2] 
…

/lib64/ld-linux-x86-64.so.2は私のDebianSqueeze/Sidハイブリッドテストマシンに存在します。

1つの可能性は、必要な32ビットライブラリなしで32ビットパッケージをインストールしたことです。たとえば、64ビットのみのシステムで32ビットバイナリを実行しようとすると、

#32ビット開発用の別のシステム
 $ echo'int main(){} '> 32bit.c 
 $ cc -m32 -o 32bit 32bit.c 
#32ビットライブラリのない64ビットシステムの場合
 $ ./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にアクセスできません:そのようなファイルまたはディレクトリはありません

もう1つの可能性は、LSBベースライブラリがインストールされていないシステムでLSBバイナリを実行しようとしていることです。 https://stackoverflow.com/questions/1562071 のようなシナリオ、またはµClibcのみのシステムでGlibcベースのパッケージを使用しようとしている、または他の多数の同様の状況。

私は尋ねなければなりません—このシステムはどのようにインストールされましたか?これはデフォルトでは当てはまりません。誰かが物事をいじくり回さなければなりませんでした。

6
ephemient