Java установлена в листинге, но выполнение создает "./java: нет такого файла или каталога"
Я только что запустил script ниже, и он извлекает и распаковывает JDK в нужное место. Проблема в том, что каждая команда java
(скопированная в /urs/bin ) дает ошибки. Затем я дважды проверяю, перейдя в каталог установки JDK с помощью cd
(теперь я в JDK/bin) и введите: ./java -version
и получите: ./java: No such file or directory
, но java
есть! ls -l
на JDK показывает, что все клиенты java
находятся внутри корзины.
#!/bin/bash
#Author: Yucca Nel http://thejarbar.org
#Will restart system
#Modify these variables as needed...
tempWork=/tmp/work
locBin=/usr/local/bin
javaUsrLib=/usr/lib/jvm
sudo mkdir -p $javaUsrLib
mkdir -p $tempWork
cd $tempWork
#Update this line to reflect newer versions of JDK...
wget http://download.oracle.com/otn-pub/java/jdk/7u2-b13/jdk-7u2-linux-i586.tar.gz
#Extract the download
tar -zxvf $tempWork/*
#Move it to where it can be found...
sudo mv -f $tempWork/jdk1.7* $javaUsrLib/
sudo ln -f -s $javaUsrLib/jdk1.7*/bin/* /usr/bin/
sudo rm -rf $tempWork
#Update this line to reflect newer versions of JDK...
export JAVA_HOME="$javaUsrLib/jdk1.7.0_02"
if ! grep "JAVA_HOME=$javaUsrLib/jdk1.7.0_02" /etc/environment
then
echo "JAVA_HOME=$javaUsrLib/jdk1.7.0_02"| sudo tee -a /etc/environment
fi
sudo /sbin/reboot
exit 0
Запуск ls -l /usr/lib/jvm/jdk1.7.0_02/bin/java
дает мне: [email protected]:~$
-rwxr-xr-x 1 yucca yucca 5654 2011-11-17 22:38 /usr/lib/jvm/jdk1.7.0_02/bin/java
также выполнялся: file /usr/lib/jvm/jdk1.7.0_02/bin
с выходом:
/usr/lib/jvm/jdk1.7.0_02/bin: directory
Ответы
Ответ 1
Вы работаете на 64-битной системе без 32-битной среды выполнения.
Предполагая проблему ubuntu/debian:
apt-get install libc6-i386
Или вы должны установить 64-битную версию пакета в эту виртуальную машину (это, вероятно, лучшее решение).
Сообщение об ошибке поступает из компоновщика/загрузчика времени выполнения. если вы выполните readelf -l java
, вы найдете строку, например:
[Requesting program interpreter: /lib/ld-linux.so.2]
Что вы ожидаете от 32-битного приложения, и у вас, вероятно, нет установленной 32-битной среды - проверьте с ls -l этого program interpreter
.
и пример для 64-битной программы будет выглядеть (ваша система может различаться):
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Если это не так, и у вас установлен 32-битный libc, вы можете попробовать ldd java
, который даст список, например:
linux-gate.so.1 => (0xf76ef000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf76b3000)
libjli.so => /home/bubba/java/jdk1.7.0_02/bin/./../jre/lib/i386/jli/libjli.so (0xf769f000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7699000)
libc.so.6 => /lib32/libc.so.6 (0xf751f000)
/lib/ld-linux.so.2 (0xf76f0000)
если есть строки, которые говорят not found
, тогда вы должны добавить pagkages, предоставляя это, но, как вы можете видеть из этого ldd
, все зависимости - это основные библиотеки, которые должны присутствовать практически во всех Linux-системах.
Ответ 2
Я получал
bash:/usr/bin/java: нет такого файла или каталога
Проблема заключалась в том, что я установил версию i586
Java на x86_64
Debian.
Исправление: я удалил его и установил версию x64
Java. Сейчас все работает нормально.