我是生物信息学博士,主要是自学成才,我现在想要清理我的各种目录结构(即我的数据),但我也在考虑如何存储我正在使用的各种生物信息学包。由于没有接受过正式培训并且只参加过一门 Unix 课程,所以仍然有很多我不知道的内容,我认为这些内容是在“Unix 101”或类似课程中教授的。我做了一些谷歌搜索,但我并没有真正找到我的问题的答案,所以我想我应该在这里问他们。我正在 Mac 上工作,所以 OSX (Yosemite),如果这很重要的话。
当谈到下载和安装我正在使用的各种软件包时,我当前的解决方案是将完整下载的目录复制到/Users/sajber/software
仅包含所有文件make
(如果适用;有时下载目录中有现成的二进制文件)和然后将二进制文件复制到/Users/sajber/bin
.然后我将我的设置PATH
为包含/Users/sajber/bin
.我没有使用任何形式的包管理软件,所以我手动完成所有操作。
这是多么“错误”,我该如何改进呢?人们通常做什么,有某种标准吗?
我想过像以前一样将所有包保留在 中/Users/sajber/software
,而是将单个包添加到 中PATH
,如 中那样PATH=$PATH:/Users/sajber/software/<package>
。当我开始时,我最初是这样做的,但后来我的PATH
路径变得如此混乱,很难在不犯错误的情况下进行更改,所以我采用了当前的解决方案。现在我想到,.bash_profile
如果这是一个“更好”的解决方案,我可能只是进行更改,为每个包提供单独的一行(如上所述)以便于访问。
我还有一个/Users/sajber/scripts
用于存放各种 Python、R 和 bash 脚本的文件夹,该文件夹也添加到PATH
.我Git
在这个目录中有一个用于版本控制的存储库。这是你应该做事的方式吗?
抱歉,如果这些问题都是非常基本的!我只是不知道在 Unix 环境中做事的标准方法是什么,大部分都是自学的。
答案1
同意这样做没有什么错,有优点也有缺点。我发现区分我本地开发的脚本和从其他地方获得的程序很有用:
- 我本地开发的脚本有我需要参考的更改历史记录,而
- 我从其他地方获得的程序是由其他人维护的(有他们自己的更改历史记录)。
由于“我的”脚本在运行它们的地方进行更新是最方便的,因此拥有多个 bin 目录是有帮助的(至少对我来说)。
在我开始为我的程序创建包之前,我使用了/usr/local
后者,做
./configure && make && sudo make install
和大多数程式使用 autoconf 相关脚本默认采用此方案。
其他人当然会有自己的偏好:做最适合你的事情。
答案2
这样做并没有什么错。
答案3
这最初是一条评论,但变得太长太详细了……
对于个人使用的程序和脚本(即仅由您的用户 ID 使用),这样做没有任何问题。事实上,您正在做的事情是很好的做法,尽管您可能希望将二进制文件符号链接到 /Users/saberj/bin 而不是复制它们 - 这样会更容易跟踪每个二进制文件的来源(并且更容易)删除或升级它们)。
供系统上所有用户使用的程序应作为软件包安装(如果软件包可用)或使用 GNU 等工具安装到 /usr/local存放,它为未打包的软件提供了打包(包括轻松卸载)的一些好处。