Установить приложение в /usr/local

Установить приложение в /usr/local

Некоторые приложения, которые устанавливаются автоматически, такие как Netbean, JDK, часто устанавливаются, /usr/localи я запускаю их от имени обычного пользователя (не root).

Но другое приложение, просто извлеките tar.gzфайл и запустите его. Под обычным пользователем я не могу использовать cpкоманду для копирования из Downloadкаталога в /usr/localкаталог, я должен использовать пользователя root ( suкоманда).

Но поскольку я копирую как пользователь root, этот каталог принадлежит root, поэтому я не могу запустить его под обычным пользователем. Это доставляет мне головную боль. Как мне запустить его под обычным пользователем, как и другие приложения, которые я перечислил выше. Или есть другой способ установить его?

решение1

/usr/localи его подкаталоги ( bin, lib, share, и т.д.) должны принадлежать (и, скорее всего, принадлежат) пользователю root и иметь права 755, чтобы любой мог выполнять там какие-либо действия.

Если вы что-то распаковали и скопировали, то проблема может быть в правах доступа к отдельным двоичным файлам, которые также должны быть 755, чтобы разрешить общее использование.

Помните, как $PATHэто работает. Ваш пример JDK может показаться запутанным в этом отношении, но обычный tarball, в который вы ./configureи make installбудете помещать исполняемые файлы в /usr/local/bin, библиотеки в /usr/local/lib, а всякие разные вещи, например документацию, где-то в /usr/local/share. Это соответствующие пути, и вам нужно следовать тому же шаблону. Другими словами, простое размещение чего-либо в любом месте /usr/local(например, в отдельном каталоге для пакета) или подкаталогах bin/ не сработает.

решение2

Есть две потенциальные проблемы, которые могут вас сбить с толку.

Первая проблема — разрешения на выполнение для каталогов

Разрешения на один из каталогов, которые вы скопировали в /usr/local, могут быть установлены неправильно. Разрешения на каталоги должны быть такими, чтобы пользователи, отличные от root, могли выполнять программы/скрипты из этих каталогов.

Вероятно, необходимо установить разрешения для каталога, чтобы «другие» пользователи могли запускать приложения из этого каталога.

Например

# don't have permissions on directory
root$ cd /usr/local
$ ls -ld somedir
drwxr-x--- 2 root root 4096 Apr 25 13:27 somedir

# have permissions on the script
root$ ls -l somedir/testscript.bash 
-rwxr-xr-x 1 root root 23 Apr 25 13:27 somedir/testscript.bash

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

Изменение прав доступа к каталогу позволяет им получить доступ к:

 user$ ls -ld somedir/
 drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/

 user$ somedir/testscript.bash 
 hi

Эту проблему можно решить, изменив разрешения в каталоге, распаковываемом из файла tar.gz, найдя все каталоги, в которых есть скрипты, и выполнив команду chmod +rx <dir>для этих каталогов.

Вторая проблема — разрешения на выполнение файлов

Разрешения на файлы из файла .tar.gz могли не быть установлены ранее, поэтому приложения или скрипты в архиве были бы распакованы без них. Просто chmod +x <script>разрешим эту проблему для файлов, которые имеют эту конкретную проблему.

### For example
user$ ls -ld somedir
drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/

user$ ls -l somedir/testscript.bash 
-rw-r--r-- 1 root root 23 Apr 25 13:27 somedir/testscript.bash

user$ somedir/testscript.bash
bash: somedir/testscript.bash: Permission denied

Связанный контент