Местоположение Java от/usr/bin/java

Не, если Вы не заботитесь о том, где это установлено. Используя предварительно созданные двоичные файлы будет хорошо работать, если они будут статически связаны, или у Вас уже есть все соответствующие библиотеки (запрашиваемых версий) в системе. RPMs в целом статически не связаны, но они действительно содержат информацию о зависимостях, таким образом, Вы могли проверить, есть ли у Вас все предпосылки прежде, чем идти далее.

В то время как я уверен Ваша установка поддержек диспетчера пакетов на другом префиксе (например, $HOME, где у Вас есть полный доступ для записи), это может все еще хотеть записать метаданные, журналы и других в системные пути. В этом случае можно все еще попробовать ручной путь путем преобразования файла в нормальный tarball. Выезд rpmunpack или rpm2targz сделать это. Я просто надеюсь, что у Вас уже есть любой в системе.;)

20
10.08.2014, 01:37
2 ответа

какие 2 команды? /usr/bin/java - мягкая (символическая) ссылка на /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
Разницы нет, так как это один и тот же файл.
Если вы наберете что-то вроде

ls -l /usr/bin/java

, вы можете получить результат, например:

lrwxrwxrwx. 1 root root 22 Aug  5 17:01 /usr/bin/java -> /etc/alternatives/java

, что означает, что вы можете иметь несколько java-версий на вашей системе и использовать альтернативы для изменения версии по умолчанию. В противном случае Вы можете просто добавить и удалить ссылки для изменения версии по умолчанию вручную.

Для создания символических ссылок используйте команду

ln -s /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java /usr/bin/java

Или в общем виде

ln -s <original file> <link to file>

И используйте rm, чтобы удалить ссылку, так как вы удалите любой другой файл.

21
27.01.2020, 19:44

readlink -f will:

canonicalize a path by follow every symlink in every component of the given name recursively; all but the last component must exist

which will search:

для исполняемого файла или скрипта в каталогах, перечисленных в переменной окружения PATH, используя тот же алгоритм, что и bash(1)

который не заботится о том, является ли то, что он находит, симлинкией или нет: только то, что он исполняемый. Это гарантирует, что путь, который она распечатает, всегда будет внутри одного из каталогов в PATH.

В вашей системе, /usr/bin/java является symlink к /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java. При таком объединении двух команд вы заменяете выводом , который в командной строке считывает ссылку -f для создания:

readlink -f /usr/bin/java

То есть , который нашел, где первый исполняемый файл с именем java находится в вашем PATH, и оболочка вставила этот путь в качестве аргумента к readlink -f. Затем readlink ищет путь вверх и находит, что это символическая ссылка link, и таким образом решает эту ссылку (и любые другие, которые она находит), чтобы получить полный прямой путь к самому файлу.

Почти для всех целей эти пути будут вам взаимозаменяемы - сим-ссылка java будет автоматически разрешена в реальный путь при ее использовании, и изменения в самом файле будут сделаны вашим менеджером пакетов, а не вами, так что вам никогда не придется его видеть. Вы можете запустить программу по любому из двух путей, или только с помощью java, и результат будет точно таким же, потому что это тот же самый реальный исполняемый файл, который запускается в конце.

Менеджер пакетов будет использовать symlink вместо того, чтобы помещать реальный файл внутрь /usr/bin, потому что JRE имеет целый набор файлов, которые ему нравятся друг другу в необычных конфигурациях, а symlink позволяет менеджеру пакетов представить вам, как пользователю, нормально выглядящую компоновку. Внутри /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64 будет много других файлов, с которыми у вас никогда не будет причин иметь дело, и которые не участвуют в обычных библиотечных аранжировках системы.

5
27.01.2020, 19:44

Теги

Похожие вопросы