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

Я пытаюсь найти свое местоположение в моей Linux-системе и получил это

[980@b449 ~]$ which java /usr/bin/java [980@b449 ~]$ readlink -f $(which java) /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java 

в чем разница между двумя командами?

2 Solutions collect form web for “Местоположение Java из / usr / bin / java”

который 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 для удаления ссылки, поскольку вы удаляете любой другой файл.

readlink -f будет :

канонизировать путь, следуя каждой символической ссылке в каждом компоненте данного имени рекурсивно; должен существовать только последний компонент

which будет искать :

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

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

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

 readlink -f /usr/bin/java 

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

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

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

  • аудит системных вызовов symlink / symlinkat здесь не работает
  • Почему conda не использует символические ссылки для дублирования зависимостей?
  • Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога)
  • Найти все файлы / файлы, на которых есть ссылки на них?
  • Скопировать символическую ссылку И где она указывает на использование rsync
  • Почему / bin символическая ссылка на / usr / bin?
  • Использование ~ в цели символической ссылки или создание символической ссылки с переменной
  • Symlinks и EncFS
  • Захват имени файла, указанного символической ссылкой в ​​переменной
  • Как я могу получить доступ к каталогу вне chroot из него?
  • Как разделить FHS только для чтения и читать / писать каталоги на двух дисках с помощью Linux / systemd, без разбиения диска raed / write?
  • Interesting Posts

    autoconf save ./configure command line to config.h

    Принудительное последовательное соединение USB

    Автоматически переименовывать файл, если есть дублирующееся имя файла

    Копирование ОС с одного диска на другой, переходящего из MBR в GPT, – что нужно отслеживать?

    Почему PyCrypto требует компилятор C?

    Как найти количество вертикальных линий, доступных в терминале?

    Сделать vim открытыми файлами как номодифицируемые, при определенных условиях

    Помощь в применении плохо упакованных патчей?

    получить исходный код ядра

    Оптимальная настройка для Windows и Linux – совместное использование и разделение

    Проверка целостности данных моего сервера

    Отображение супер ключей для управления без Xmodmap

    Транспортировка непрерывного потока в grep в качестве поискового запроса для поиска в файле

    когда я могу просмотреть \ t как символ, который охватывает фиксированную ширину, вместо управляющего символа, который переходит к следующей позиции табуляции?

    Как запустить фоновый процесс из сценария оболочки и записать результат процесса?

    Linux и Unix - лучшая ОС в мире.