Intereting Posts
Как интерпретируется «среднее значение нагрузки» в «верхнем» выходе? Это то же самое для всех распределений? Как увидеть интерактивный вывод при запуске nmap из сценария bash? Каково поведение переключателя контекста в середине сигнала тревоги ()? Ubuntu Precise – приостановить клинья GDM – помощь! Точки Dnsmasq несуществующие субдомены указывают на локальный IP-адрес diff, где строки в основном одни и те же, но не в порядке? Очистка после установки Настройте wget, чтобы не сбрасывать хорошие данные с пустыми данными Как написать sed однострочный, чтобы добавить символ после каждого третьего символа? Имитация нажатия клавиши PrintScreen Как установить драйвер RTS5139 Card Reader для использования в Fedora 19 Какой системный вызов используется для загрузки библиотек в Linux? Как импортировать историю bash с правильным временем и датой из вывода истории? Удаленная папка продолжает возвращаться Как добавить статический маршрут в Virtual Guest для доступа к сети хоста?

Местоположение 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 команды? /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 будет много других файлов, в которых у вас никогда не было бы никаких оснований, и которые не участвуют в обычной системе библиотечных мероприятий.