【问题标题】:Netbeans set root as authorNetbeans将root设置为作者
【发布时间】:2019-02-20 08:12:42
【问题描述】:

我正在运行 Linux Mint 18.3 cinnamon 64 位

我刚刚下载了 Apache NetBeans IDE 9.0

不需要运行任何脚本来安装它,我只需要运行以下命令来启动它:sudo /opt/netbeans/bin/netbeans 然后输入我的密码,netbeans 就会打开。 然后我为该程序制作了一个启动器,因为我不想每次打开 netbeans 时都输入命令和密码。 但是启动器没有用。 我意识到我没有将“sudo”放在启动器将执行的命令中,所以我放了它。而且没有用。

我认为它不起作用,因为启动器执行 sudo /opt/netbeans/bin/netbeans 但没有输入密码。 经过一些研究,我最终在/etc/sudoers 的末尾添加了star_man ALL=(ALL) NOPASSWD: /opt/netbeans/bin/netbeans,它终于可以工作了。但是当我创建一个新项目时,Netbeans 将 root 设置为它创建的每个文件的作者。

例如,当我在我的项目目录中输入ls -l 时,它会输出:

-rw-r--r-- 1 root root 3527 sep 15 20:01 build.xml
-rw-r--r-- 1 root root   82 sep 15 20:01 manifest.mf
drwxr-xr-x 3 root root 4096 sep 15 20:01 nbproject
drwxr-xr-x 3 root root 4096 sep 15 20:01 src

Root 是目录中每个文件的组和所有者。

这导致当 Netbeans 生成文档文件时,它会使用“root”而不是我的用户名。

更新: 我只能以 root 身份启动 netbeans (sudo ./netbeans)。

当我从终端运行不带sudo 的neatbean 时,它看起来像是正在启动:screen shot

然后它就关闭了。

这是输出:

>Log Session: Sunday, September 16, 2018 at 12:58:20 PM Eastern Daylight Time
>System Info: 
  Product Version         = Apache NetBeans IDE 9.0 (Build incubator-netbeans-release-334-on-20180708)
  Operating System        = Linux version 4.15.0-34-generic running on amd64
  Java; VM; Vendor        = 10.0.1; Java HotSpot(TM) 64-Bit Server VM 10.0.1+10; Oracle Corporation
  Runtime                 = Java(TM) SE Runtime Environment 10.0.1+10
  Java Home               = /opt/java/jdk-10.0.1
  System Locale; Encoding = es_DO (nb); UTF-8
  Home Directory          = /home/star_man
  Current Directory       = /opt/netbeans
  User Directory          = /home/star_man/.netbeans/9.0
  Cache Directory         = /home/star_man/.cache/netbeans/9.0
  Installation            = /opt/netbeans/nb
                            /opt/netbeans/ide
                            /opt/netbeans/extide
                            /opt/netbeans/java
                            /opt/netbeans/apisupport
                            /opt/netbeans/websvccommon
                            /opt/netbeans/profiler
                            /opt/netbeans/harness
                            /opt/netbeans/javafx
                            /opt/netbeans/platform
  Boot & Ext. Classpath   = 
  Application Classpath   = /opt/netbeans/platform/lib/boot.jar:/opt/netbeans/platform/lib/org-openide-modules.jar:/opt/netbeans/platform/lib/org-openide-util.jar:/opt/netbeans/platform/lib/org-openide-util-lookup.jar:/opt/netbeans/platform/lib/org-openide-util-ui.jar
  Startup Classpath       = /opt/netbeans/platform/core/core-base.jar:/opt/netbeans/platform/core/org-netbeans-libs-asm.jar:/opt/netbeans/platform/core/asm-all-5.0.1.jar:/opt/netbeans/platform/core/org-openide-filesystems.jar:/opt/netbeans/platform/core/org-openide-filesystems-compat8.jar:/opt/netbeans/platform/core/core.jar:/opt/netbeans/nb/core/org-netbeans-upgrader.jar:/opt/netbeans/nb/core/locale/core_nb.jar
-------------------------------------------------------------------------------
INFO [org.netbeans.modules.netbinox]: Install area set to file:/opt/netbeans/
!SESSION 2018-09-16 12:58:21.698 -----------------------------------------------
eclipse.buildId=unknown
java.version=10.0.1
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=es_DO

!ENTRY org.eclipse.osgi 4 0 2018-09-16 12:58:21.706
!MESSAGE Error reading configuration: Permission denied
!STACK 0
java.io.IOException: Permission denied
    at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.base/java.io.File.createTempFile(File.java:2090)
    at org.eclipse.osgi.storagemanager.StorageManager.initializeInstanceFile(StorageManager.java:188)
    at org.eclipse.osgi.storagemanager.StorageManager.open(StorageManager.java:708)
    at org.eclipse.osgi.internal.baseadaptor.BaseStorage.initFileManager(BaseStorage.java:226)
    at org.eclipse.osgi.internal.baseadaptor.BaseStorage.initialize(BaseStorage.java:160)
    at org.eclipse.osgi.baseadaptor.BaseAdaptor.initializeStorage(BaseAdaptor.java:123)
    at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:192)
    at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.internalInit(EquinoxLauncher.java:67)
    at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.init(EquinoxLauncher.java:37)
    at org.eclipse.osgi.launch.Equinox.init(Equinox.java:178)
    at org.netbeans.modules.netbinox.Netbinox.init(Netbinox.java:61)
    at org.netbeans.core.netigso.Netigso.prepare(Netigso.java:145)
    at org.netbeans.NetigsoHandle.turnOn(NetigsoHandle.java:115)
    at org.netbeans.ModuleManager.enable(ModuleManager.java:1331)
    at org.netbeans.ModuleManager.enable(ModuleManager.java:1148)
    at org.netbeans.core.startup.ModuleList.installNew(ModuleList.java:315)
    at org.netbeans.core.startup.ModuleList.trigger(ModuleList.java:251)
    at org.netbeans.core.startup.ModuleSystem.restore(ModuleSystem.java:276)
    at org.netbeans.core.startup.Main.getModuleSystem(Main.java:156)
    at org.netbeans.core.startup.Main.getModuleSystem(Main.java:125)
    at org.netbeans.core.startup.Main.start(Main.java:282)
    at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:98)
    at java.base/java.lang.Thread.run(Thread.java:844)
java.lang.RuntimeException: Permission denied
    at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:194)
    at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.internalInit(EquinoxLauncher.java:67)
    at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.init(EquinoxLauncher.java:37)
    at org.eclipse.osgi.launch.Equinox.init(Equinox.java:178)
    at org.netbeans.modules.netbinox.Netbinox.init(Netbinox.java:61)
    at org.netbeans.core.netigso.Netigso.prepare(Netigso.java:145)
    at org.netbeans.NetigsoHandle.turnOn(NetigsoHandle.java:115)
    at org.netbeans.ModuleManager.enable(ModuleManager.java:1331)
    at org.netbeans.ModuleManager.enable(ModuleManager.java:1148)
    at org.netbeans.core.startup.ModuleList.installNew(ModuleList.java:315)
    at org.netbeans.core.startup.ModuleList.trigger(ModuleList.java:251)
    at org.netbeans.core.startup.ModuleSystem.restore(ModuleSystem.java:276)
    at org.netbeans.core.startup.Main.getModuleSystem(Main.java:156)
    at org.netbeans.core.startup.Main.getModuleSystem(Main.java:125)
    at org.netbeans.core.startup.Main.start(Main.java:282)
    at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:98)
    at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.io.IOException: Permission denied
    at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.base/java.io.File.createTempFile(File.java:2090)
    at org.eclipse.osgi.storagemanager.StorageManager.initializeInstanceFile(StorageManager.java:188)
    at org.eclipse.osgi.storagemanager.StorageManager.open(StorageManager.java:708)
    at org.eclipse.osgi.internal.baseadaptor.BaseStorage.initFileManager(BaseStorage.java:226)
    at org.eclipse.osgi.internal.baseadaptor.BaseStorage.initialize(BaseStorage.java:160)
    at org.eclipse.osgi.baseadaptor.BaseAdaptor.initializeStorage(BaseAdaptor.java:123)
    at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:192)
    ... 16 more

我发现~/.netbeans 下的每个文件和目录都有root 作为所有者和组。我认为这可能是问题,所以我用~/.netbeans $ sudo chown -R myusername: .netbeans/ 更改了所有者和组。我仍然只能以 root 身份运行 netbeans。

【问题讨论】:

  • 这似乎更像是Super UserUnix & Linux Stack Exchange 的问题。
  • 我不明白为什么不能在这里
  • @LewisMojica 你的问题在这里肯定没问题,它显然属于What topics can I ask about here? 中特别提到的一个类别:如果你的问题一般涵盖……程序员常用的软件工具;并且是软件开发独有的实用、可回答的问题……那么您来对地方提出问题了!
  • 本题与编程工具无关;这是关于一般的 Unix 权限。
  • @skomisa - 你错过了另一部分:“并且是......一个软件开发独有的实用、可回答的问题”。我认为声称管理 ACL 和设置权限是软件开发独有的有点牵强。

标签: java linux netbeans linux-mint


【解决方案1】:

这是一个基本的 unix 权限问题。

出于我无法理解的原因,您使用 sudo 启动了 netbeans IDE。
- 你不应该那样做。
- 你不应该需要这样做!

当您使用sudo 运行某些东西时,您通常以root 用户身份运行。 (这就是sudo 所做的!)

因此,很自然,某些东西(在本例中为使用sudo 运行的netbeans 应用程序)将创建“root”用户拥有的文件和目录。因此,当您尝试以普通用户身份更新它们时,操作系统会说“不:您不拥有这些文件/目录,因此您无法修改它们。”。

解决方案:使用chown 命令根据需要更改文件和目录的所有权。

怎么样?阅读man chown,或查找有关如何更改文件所有权的教程。

  • 提示:你需要在 chowning 时使用sudo ...
  • 提示 2:使用 sudo 时要非常非常小心,因为如果您犯了错误,sudo 有能力破坏您的系统。

【讨论】:

  • 感谢您的回答!。我只能以 root 身份运行 netbean (sudo ./netbeans)。如果我尝试“./netbeans”,它不会启动。
  • 我发现 ~/.netbeans 下的每个文件都有 root 作为所有者,所以我用 chown 将所有者和组从 root 更改为我的用户名,但我仍然只能以 root 身份运行它跨度>
  • 部分堆栈跟踪表明您的 Netbeans 正在尝试在没有写入权限的目录中创建一个临时文件(可能是锁定文件)。找到该目录并修复其所有权和/或权限。
  • 因为你是在 Linux 上运行,所以检查 ~/.netbeans 和子目录。
  • 我执行了sudo chown -R myusername: ~/.netbeans,所以~/.netbeans下的每个文件和目录的所有者都是myusername。还是不行。
猜你喜欢
  • 2020-01-30
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多