从 windows 转移到 Linux 的用户最开始有各种不适, 因使用习惯水土不服而放弃 Linux 的不在少数. 还没有领略到 Linux 的美好就退却, 对于这类人只能说可惜. 还有部分人在个人电脑上用 Linux, 总体感觉还不错; 工作时只能使用无特权的普通账户, 会遇到 "没 root 权限 -> 出现问题 -> 找答案 -> 提示用 root" 的死循环, 不免感到沮丧和抓狂. 本文主要面向对象第二类人, 简要介绍没有 root 权限时, 如何安装所需软件推动正常工作.
=============== 分割线 ======================
许多人都非常熟悉 Windows, 毫无疑问是目前桌面操作系统的王者. 随着高富帅和土豪种群的增长, Mac OS 的份额也逐步提升. 无论是 windows 还是 Mac OS, 用户接触的都是图形界面(Graphical User Interface,GUI). 转向 Linux 之后, 大部分人会优先使用带图形界面的系统作为过渡. 比如本人最开始使用 Ubuntu, 熟悉后才慢慢转向 CentOS 和 Fedora. 许多优秀的 Linux 桌面图形发行版, 如 Debian/Ubuntu/Mint,Fedora,OpenSUSE 等, 图形界面华美, 桌面体验良好, 可以给 Windows 用户很好的过渡. 这些 Linux 系统基本都开源且可免费使用(支持服务可能要付费), 是 Linux 入门级操作系统的首选.
Windows 上安装软件相当傻瓜化, 下载 exe 后双击运行, 点击鼠标一直 next 就完事. 安装过程中, 小白用户一般不会看引导页面种的内容 (估计字都认识, 连在一块不知道什么意思), 附带安装其他软件或者对系统做了额外改动也毫不知情. 当有人(一般是女生) 说电脑开机后反应很慢 / 失去响应, 过去一看电脑上瑞星, 360, 金山毒霸, 腾讯安全管家等各种软件都在右下角托盘刷着存在感. 对于这种情形, 只能表示理解, 进入安全模式把不用的软件都卸载掉, 电脑基本上就正常了.
回到 Linux 安装软件, 情况稍有不同. 首先是软件一般从软件仓库中获取, 即现在熟悉的应用市场; 再次基本上用命令行安装软件, 不是双击安装包(Mac OS 可以这样做). 熟悉命令行安装软件, 是迈向 Linux 世界基础的一步. apt/yum/dnf 等软件包管理工具, 会自动解决依赖问题, 让用户一行命令就获取到所需软件. 例如安装 g++, 执行
sudo apt-get install g++/sudo yum install -y gcc-c++
即可.
有些软件是别人自行写的, 给的源代码, 也没有提交到仓库, apt-get/yum/dnf 的安装方式就行不通. 这时需要先下载源代码, 解压(不能点右键解压, 对不少人是个难题), 然后按照说明文档 make && make install. 不管是从软件仓库, 还是手工编译源代码的方式, 对有 root 权限的用户问题都不大(问题常出现在依赖). 倒霉的是没有 root 权限, 还不得不安装软件才能正常工作的普通账号. 对这些普通账号, 需要额外的软件或依赖库时, 该如何自救解脱?
问题在权限, 有必要先了解一下 Linux 中文件和用户的权限. 对任意一个文件 (Linux 下一切皆文件, 包括目录, CPU 内存等设备), 可以使用 ls -l 查看其权限. 命令的每行首列输出类似(d|-)rwxrwxrwx, 这就是文件的权限标志. 第一个字母是文件类型, d 表示目录,- 表示普通文件, s 套接字, l 链接文件, 等等; 接下来有 9 列, 每 3 列一组, 总共 3 组, 对应文件属主(owner), 属主组员(group) 和其他用户 (other) 对该文件的权限. 每组的标志类似 rwx.rwx 是读 (read), 写(write) 和执行 (execute) 三种权限的缩写. 如果没有某种权限, 对应标志位是 -. 例如某个文件 foo.txt, 只有属主可读写, 其权限标志就是:-rw---. 注意, 非 root 用户下, 文件夹必须要有执行 (x) 权限才能进入.
再看用户的权限. root 用户是 bug, 电脑上所有的文件都是它的, 权限位设置对其无效. 非 root 用户默认 只对家目录有完全的控制权限, 对 / tmp 目录有读写的权限./tmp 目录如其名, 应该只在其中存放临时性文件, 该目录在系统重启时会被清空./var,/usr,/bin,/opt 等常见文件夹及子目录, 几乎所有用户都能访问其中的文件和内容, 执行可执行程序, 但只有 root 用户和属主有写入的权限.
了解完权限, 再看普通账户安装软件困难的原因. 大部分软件默认安装路径是 /usr/bin 或 /usr/local/bin, 安装时需要将可执行文件复制到这些目录下. 普通用户没有目录的写权限, 于是提示无权限导致安装失败. 切换到 root 模式后, 一切又都好使了. 根据普通账号的权限, 可以得出结论: 非 root 用户,(几乎)只能安装软件到家目录下.
下面是 Linux 下非 root 用户安装软件的一般流程:
获取源代码, 常用 wget 方式直接从 url 下载, ubuntu 可以用 apt-get source 来获取仓库中软件源代码;
解压源代码安装包, 多为 gzip 过的 tar 包, 一般使用 tar -zxvf xxx.tar.gz 即可;
切换到解压后的目录, 运行 ./configure../configure -help 可以列出配置项, 非 root 用户最重要的配置项是安装目录 prefix, 例如 ./configure -prefix=/path/to/bin. 在无法自动找到依赖库位置的情况下, 用 -with-xx-dir=xxx 的形式配置依赖库位置;
编译源代码并复制可执行文件到指定的安装目录: make && make install. 这两条命令可以分开执行, make 时指定 -j 参数并行编译, 能显著减少编译耗时(单进程编译 GCC 需要几个小时, 开启并行编译后可缩短到十几分钟);
使用 export PATH=/path/to/bin:$PATH 更新 PATH 变量. 命令行窗口运行此命令只对本次会话中有效, 可将其写到. bashrc 或者. bash_profile 中;
如果安装的是动态链接库, 则需要更新动态链接库路径: export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH. 最好将此命令写在. bashrc 文件中, 用户下次打开会话时自动执行.
示例可参考: Linux 下非 root 用户安装 Apache,PHP 和 MySQL https://www.tlanyan.me/install-apache2-php-mysql-with-none-root/
后记
Nodejs 的出现改变了 JavaScript 写程序的方式, 为前后端开发注入了新鲜的血液. Node 开发人员可以使用 npm(Node 默认的包管理器)方便的安装依赖包和可执行程序. 确实, 非 root 人员可以用 npm 安装软件, 但并不影响上文内容的正确性. 非 root 用户, 安装依赖包或程序时, 不能使用 - g 选项, 默认安装到家目录或项目的 node_modules 目录下, 依然受权限控制. brew,composer 等包管理器同理.
来源: http://www.bubuko.com/infodetail-2663160.html