我有一些即将发布的软件(研究生项目),我想知道在 UNIX 机器上安装软件的最佳实践是什么。
我最初是通过/usr/local/bin我的项目链接的,但最近我考虑通过附加到.bashrc特定用户的文件来安装它,特殊情况是如果用户是 root,它会附加到全局路径而不是特定于用户的路径。
这为我带来了一些简单的功能添加,因为我可以通过将单个变量添加到.bashrc安装用户的文件夹中来快速链接到其他资源。
然而,我开始怀疑这个决定。
附加到路径还是不附加到路径,这就是问题。无论是 中的符号链接更高贵/usr/local/bin,还是拿起武器并附加到不断增长的路径变量中。
更多信息:
它是一个带有 TCL 前端的 C++ 后端。TCL 前端还启动了一个 java 存档(在我职业生涯的早期创建)。除此之外,还有 TCL 前端的扩展,可以使用自己的 TCL 解释器来运行另一个程序。我需要使用解释器向程序提供 bwidget tcl 包。因此,提供 bwidget 包并启动 jar 文件需要有一个链接到的位置。此外,我需要让用户感到轻松,因为他们主要是化学用户,不太熟悉 UNIX,可能使用 mac。
该平台需要在 Mac 或 Unix 上运行。
理想情况下,我希望用户能够使用单个命令启动 TCL 脚本,而不是让他们记住位置。
这是一个以前封闭源代码的项目,现在是开源的,我们希望用户能够轻松编译和安装该程序
我正在使用 make 创建安装选项。
我有一个 ruby on Rails 应用程序,我需要为 rake 任务安排一个 crontab。
*/5 * * * * RAILS_ENV=production /usr/local/bin/rake -f /usr/local/www/mysite-web-production/current/Rakefile my_site:export_products >> /var/log/export_feed.log 3>&1
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用(当我手动执行它时它可以工作,但不能作为 crontab)并且它向我显示/usr/bin/env: ruby: No such file or directory. 我没有使用RVM。我在 Linux 上使用 ruby 1.9.3 和 Rails 3。
我使用的是 Ubuntu 12.04。
最近不小心删除了python,导致大量的包被卸载。我重新安装了它们,但现在遇到了问题。
$ echo $PATH
/home/paul/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/paul/.rvm/bin
Run Code Online (Sandbox Code Playgroud)
请注意,没有/sbin或/usr/local/sbin!
我不知道那是怎么发生的!
因此,
$ sudo apt-get autoremove -y
...
dpkg: warning: 'ldconfig' not found in PATH or not executable
...
$ sudo shutdown now
sudo: shutdown: command not found.
Run Code Online (Sandbox Code Playgroud)
我去找找了 /etc/environment(我没有碰过)有
$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
Run Code Online (Sandbox Code Playgroud)
我已经重新启动(几次)。为什么我的路径没有/sbin?
更新
我尝试创建一个新用户
$ sudo adduser paul-test
$ su -- paul-test
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
还,
$ sudo su
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
所以有些东西/sbin对我来说是致命的。
我查过了.bashrc …
考虑一下:
$ cd /tmp
$ echo "echo YES" >> prog/myprog
$ chmod +x prog/myprog
$ prog/myprog
YES
$ myprog
myprog: command not found
Run Code Online (Sandbox Code Playgroud)
我可以临时修改PATH为myprog按名称调用,如下所示:
$ PATH="$PATH":$(readlink -f prog) myprog
YES
Run Code Online (Sandbox Code Playgroud)
...但是我不能用这种方法链接命令:
$ PATH="$PATH":$(readlink -f prog) myprog && myprog
YES
myprog: command not found
Run Code Online (Sandbox Code Playgroud)
...显然修改后的PATH显然没有传播到第二次调用。
我知道我可以这样做:
$ PATH="$PATH":$(readlink -f prog) bash -c "myprog && myprog"
YES
YES
Run Code Online (Sandbox Code Playgroud)
...但是我必须调用一个额外的bash过程 - 更糟糕的是,我必须引用。
有没有什么方法可以将单行中的链接命令临时附加到 PATH 中,而不必调用 extrabash和引用?尝试反引号,它们不起作用:
$ PATH="$PATH":$(readlink -f prog) `myprog && myprog` …Run Code Online (Sandbox Code Playgroud) 我设置自定义$PATH在~/.bashrc用PATH=$HOME/.bin:$PATH。当我geany从终端启动它时,它能够找到位于$HOME/.bin. 当我使用 XFCE 启动器启动 Geany 时,它不会选择自定义路径并且我的自定义构建工具不起作用。是否可以设置自定义路径以便启动器将其选中?我宁愿不必创建自定义.desktop文件。
虽然是有“的.bashrc”等同文件中读取所有炮弹?如果我知道当我使用快捷方式启动程序时使用什么 shell 以及该 shell 是如何启动的,就会提供答案。据推测,它不是交互式 bash shell,否则.bashrc将被获取。
我在我的主目录中安装了 eclipse,并将其路径PATH放在~/.profile.
所以它的工作原理
$ eclipse
Run Code Online (Sandbox Code Playgroud)
但是当用 调用它时sudo,eclipse没有找到:
$ sudo eclipse
sudo: eclipse: command not found
Run Code Online (Sandbox Code Playgroud)
这PATH不sudo eclipse用于搜索eclipse?是用户root的PATH吗?
谢谢。
我正在运行Debian buster/sid. 我错误地运行似乎破坏了很多东西apt-get dist-upgrade(我认为这就是它所做的)。所以桌面管理器\桌面环境根本不再加载,我只得到一个命令行外壳。
Aptitude 和 apt-get 与 dpkg 一样已损坏。
apt update、aptitude update 和 apt-get update 失败并在尝试运行时出现很多错误,但是我的 /etc/apt/sources.list 看起来不错
deb http://ftp.ie.debian.org/debian unstable main contrib non-free
deb-src http://ftp.ie.debian.org/debian unstable main contrib non-free
deb http://ftp.ie.debian.org/debian experimental main contrib non-free
deb-src http:// ftp.ie.debian.org/debian experimental main contrib non free
deb https://dl.winehq.org/wine-builds/debian sid main
deb https://dl.winehq.org/wine-builds/ubuntu sid main
Run Code Online (Sandbox Code Playgroud)
更新错误如下:
Err:2 http://ftp.ie.debian.org/debian unstable InRelease
Couldn't execute /usr/bin/apt-key to check /var/lib/apt/lists/partial/ftp.ie.debian.org_debian_dists_experimental_InRelease
Run Code Online (Sandbox Code Playgroud)
和
E: Problem executing scripts APT::Update::Post-Invoke-Success '/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S …Run Code Online (Sandbox Code Playgroud) 我安装parcellite在 Ubuntu(从http://parcellite.sourceforge.net/下载)
从源代码安装后sudo make install,我可以看到它安装在以下位置。
但是,当我尝试运行它时,它会尝试从另一条路径运行它。这是为什么?
user$ which parcellite
/usr/local/bin/parcellite
user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory
Run Code Online (Sandbox Code Playgroud)
$PATH 如下
/home/user/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
我尝试如下更改可执行文件的所有权。问题仍然存在。
user$ ls -l /usr/local/bin/parcellite
-rwxr-xr-x 1 root root 452K Oct 7 21:00 /usr/local/bin/parcellite
user$sudo chown user:user /usr/local/bin/parcellite
user$ ls -l /usr/local/bin/parcellite
-rwxr-xr-x 1 user user 452K Oct 7 21:01 /usr/local/bin/parcellite
Run Code Online (Sandbox Code Playgroud)
我安装了旧版本的parcellite。但我在安装新版本之前将其删除。
更新:@Fox 的解决方案有效。但是知道为什么which命令给出了正确的路径,尽管hash没有更新?
我登录服务器进行科学计算。它运行“科学 Linux 7.4 版”。
为了访问不同的软件,我必须运行像“模块加载 x”这样的命令。例如,要使用 python,我需要编写“模块加载 python”。我对这个模块系统了解不多,但据我所知,它只是修改了一些环境变量。输入“module show python”显示
module-whatis This module sets up PYTHON 3.6 in your environment.
conflict python
append-path MODULEPATH /global/software/sl-7.x86_64/modfiles/python/3.6
setenv PYTHON_DIR /global/software/sl-7.x86_64/modules/langs/python/3.6
prepend-path PATH /global/software/sl-7.x86_64/modules/langs/python/3.6/bin
prepend-path CPATH /global/software/sl-7.x86_64/modules/langs/python/3.6/include
prepend-path FPATH /global/software/sl-7.x86_64/modules/langs/python/3.6/include
prepend-path INCLUDE /global/software/sl-7.x86_64/modules/langs/python/3.6/include
prepend-path LIBRARY_PATH /global/software/sl-7.x86_64/modules/langs/python/3.6/lib
prepend-path PKG_CONFIG_PATH /global/software/sl-7.x86_64/modules/langs/python/3.6/lib/pkgconfig
prepend-path MANPATH /global/software/sl-7.x86_64/modules/langs/python/3.6/share/man
Run Code Online (Sandbox Code Playgroud)
当我加载 python 时,我也可以访问 conda(其可执行文件位于 /global/software/sl-7.x86_64/modules/langs/python/3.6/bin)。
通常我不能在没有先加载 python 模块的情况下运行 conda。但最近我注意到这发生了变化,现在我可以在不加载 python 模块的情况下运行 conda。这让我很困惑,所以我输入了“which conda”来查看是否可以找到正在运行的可执行文件,但是当我这样做时,它说在我的 PATH 变量上的任何目录中都找不到 conda。
尽管我仍然可以运行 conda,但“which”怎么可能找不到 conda 可执行文件?
一些应用程序告诉我向 PATH 环境变量添加一些东西,我知道一种方法是通过在 处创建一个文件~/.zshrc,但我想知道变量PATH=...存储在哪里?
当我打字时,echo $PATH我得到:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Applications/Xamarin Workbooks.app/Contents/SharedSupport/path-bin
Run Code Online (Sandbox Code Playgroud)
从/etc/paths我得到的文件中:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Run Code Online (Sandbox Code Playgroud)
那么哪个文件附加了额外的路径?
回复评论:
我得到了:(原谅我把用户名改成了alice)
grep: /Users/alice/.profile: No such file or directory
grep: /etc/environment: No such file or directory
grep: /etc/zsh/zprofile: No such file or directory
grep: /Users/alice/.zshrc: No such file or directory
grep: /Users/alice/.profile: No such file or directory
Run Code Online (Sandbox Code Playgroud)