Некоторые приложения, которые устанавливаются автоматически, такие как 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