最近操作系统开始上实验课了,瞟了一眼实验目录,看到了“gcc”的字样,一下子勾起了不好的回忆。记得上学期上计组的时候,曾经尝试在自己电脑的虚拟机上安装 gcc ,然而每次的速度都是 0%,几个小时过去了也一动不动,非常让人崩溃。当时知道是软件源的问题,但是不知脑子抽了还是怎么,换源一直失败。后来决定还是用学校机房的电脑得了,于是就一直没管这个问题。不过现在是特殊时期(网课),所有的实验都得在自己电脑上做,所以还是决定花点时间解决这个问题。

换源

像往常一样,当我准备用 sudo apt update 查看更新的时候,一如既往卡在了 0% 这里,所以安装 gcc 的第一步是换源。找到 /etc/apt/ 文件夹下的 sources.list 文件,这个文件是包管理工具 apt 用来记录软件包仓库位置的配置文件。可以打开看一下,每一行的格式类似 deb http:*//mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse*deb 是档案类型,中间的是镜像地址,bionic 是版本号,剩下部分的则是软件包分类。

既然要换源,肯定是得编辑这个文件了。由于这个文件比较重要,所以我们先通过 sudo cp sources.list sources.list.bak 做一下备份。之后当我们想要编辑这个文件的时候,它会提示我们没有权限修改。因为我们默认是普通用户登录,文件对我们只开放 read-only 权限。这里有两种方式可以让我们修改这个文件。

修改文件读写权限

简单粗暴的方法,直接使用:

sudo chmod 777 /etc/apt/sources.list

修改文件权限为最高的 777。文件本来向普通用户只开放只读权限,这样设置就开放了读、写、执行权限,我们就可以修改文件内容了。(不过乱改重要文件的权限好像不太好?)

root 登录图形界面

说实话,如果单单为了修改文件而用这个方法的话,很麻烦,而且没有必要。不过,以 root 登录图形界面后,各种文件操作会更加方便(权限都是开放的),而且命令行也不再需要 sudo,所以勉强算是一种解决方法吧。

为了安全起见,Ubuntu 默认是不允许以 root 登录图形界面的,所以我们要做一些修改。

第一步:还是以普通用户登录系统,然后通过 sudo passwd root 创建 root 用户的密码(创建过的可以忽略这一步),接着 sudo su 切换到 root 用户。现在,我们的终端就切换到 root 了,不过登录身份还是普通用户。

第二步:通过 sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 以 root 身份打开文件(默认是 read-only,普通用户无法编辑),在文本最后添加如下两行并保存:

greeter-show-manual-login=true
all-guest=false

第三步:通过 sudo gedit /etc/pam.d/gdm-autologin 以 root 身份打开文件,注释掉下面这行并保存:

auth required pam_succeed_if.so user != root quiet_success

同样的方法打开 gdm-password 文件,注释内容同上。

第四步:通过 sudo gedit /root/.profile 以 root 身份打开文件,将文件末尾的 mesg n || true 替换成 tty -s&&mesg n || true,再保存。

第五步:重启系统就 ok 了。默认展示的只有普通用户的用户名,点击下面的 Not listed? 手动输入 root 用户名和对应密码,这样就可以以 root 登录图形界面了。

之后可以右键查看 sources.list 文件的属性,可以看到我们已经有读写权限了。

安装 gcc

接下来就简单了, sources.list 文件里的镜像默认不是国内的,所以我们把里面的内容清空(开头我们备份过了,出事了可以还原回来)。之后的步骤,网上有一些博客可能会说,需要自己手动把国内的镜像地址复制粘贴进去,其实不需要这么麻烦,官方是有提供换源方法的(当然也可以自己去网上找源,这里就不说了)。

搜索“software & update”(中文版的话是软件与更新“),点击打开。这里可以把第一个选项卡的都勾选上,之后在”download from“这里选择”others“:

这样就会弹出一个下载服务器列表,之后我们就可以手动选择国内的镜像了,比如阿里云。

当然也可以直接点击右侧的”select best server“,这样的话就是自动匹配速度最佳的服务器。这里会花大概几分钟来测试:

之后提醒你 reload,点击确定即可:

现在我们再来 sudo apt update,可以看到速度是非常快的,不存在卡顿的情况(简直太爽了有木有!):

之后安装 gcc 即可。不过我们这里不直接单独安装 gcc,而是通过 sudo apt install build-essential安装 Ubuntu 提供的 build-essential 软件包,它依赖了 gcc 和 g++,所以只要安装这个包的话,gcc、g++ 这些东西自动也会装上的。

最后我们再通过 gcc -v 查看是否成功安装了 gcc:

大功告成!