[转载]Linux下非root用户如何安装软件

[转载]Linux下非root用户如何安装软件

来源:https://tlanyan.me/work-with-linux-without-root-permission/

这是本人遇到的实际问题,之前用到的所有机器,无论是自己的PC还是云服务器,root权限都是妥妥的,但是现在发现实验室的服务器原来自己并没有root权限2333

再看用户的权限。root用户是bug,电脑上所有的文件都是它的,权限位设置对其无效。非root用户默认 只对家目录有完全的控制权限,对/tmp目录有读写的权限。/tmp目录如其名,应该只在其中存放临时性文件,该目录在系统重启时会被清空。/var、/usr、/bin、/opt等常见文件夹及子目录,几乎所有用户都能访问其中的文件和内容,执行可执行程序,但只有root用户和属主有写入的权限

了解完权限,再看普通账户安装软件困难的原因。大部分软件默认安装路径是 /usr/bin/usr/local/bin,安装时需要将可执行文件复制到这些目录下。普通用户没有目录的写权限,于是提示无权限导致安装失败。切换到root模式后,一切又都好使了。根据普通账号的权限,可以得出结论:非root用户,(几乎)只能安装软件到家目录下。

下面是Linux下非root用户安装软件的一般流程:

  1. 获取源代码;常用wget/curl下载,也可以用类似apt-get source的方式获取仓库中软件源代码;
  2. 解压源代码安装包;例如对于gzip格式的tar包:tar -zxvf xxx.tar.gz
  3. 切换到解压后的目录,运行 ./configure;./configure --help可以列出配置项,非root用户最重要的配置项是安装目录prefix,例如 ./configure --prefix=/path/to/bin。在无法自动找到依赖库位置的情况下,用 --with-xx-dir=xxx 的形式配置依赖库位置;
  4. 编译源代码并复制可执行文件到指定的安装目录: make && make install。这两条命令可以分开执行,make时指定 -j 参数并行编译,能显著减少编译耗时(单进程编译GCC需要几个小时,开启并行编译后可缩短到十几分钟);
  5. 使用export PATH=/path/to/bin:$PATH更新PATH变量。命令行窗口运行此命令只对本次会话中有效,可将其写到.bashrc或者.bash_profile中;
  6. 如果安装的是动态链接库,则需要更新动态链接库路径: export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH。最好将此命令写在.bashrc文件中,用户下次打开会话时自动执行。

其实也不尽然是这样,比如很多软件是要通过setup.py配置的,这种就要使用Python运行。而且也不是所有的包下载下来之后都有README,有时候还是需要通过--help来看需要哪些参数.

除此之外,使用pip进行安装也可能会因为没有权限而不成功,这时候就需要在后面加上--user参数来指定安装到个人目录下了

posted @ 2019-12-17 17:48  别再闹了  阅读(13720)  评论(0编辑  收藏  举报