如何仅使用配置文件和 bash 脚本设置一个全新的 Ubuntu 桌面
点文件
链接点文件
安装软件
设置桌面环境
把所有东西整合起来
GitHub 上开源文件最吸引我的地方之一,就是能够看到其他人是如何处理(有些人可能会觉得)琐碎的事情的,比如配置他们自己的.bashrc和其他人使用的配置文件。虽然我现在不像刚接触 Linux 时那样热衷于“美化”系统了,但每当我发现某个配置设置能让系统更美观、更高效,从而带来更好的体验时,我仍然会感到非常兴奋。
我最近遇到了一些类似的事情,尤其是在Tom Hudson 的dotfiles 文件中。Tom 似乎喜欢编写脚本,其中一些脚本包括自动创建符号链接、安装 Ubuntu 软件仓库中的应用程序和其他程序。这让我想到,我能否自动化地设置一台新机器,使其与我当前的机器配置相同?
我这个人喜欢拆东西研究它的工作原理,所以偶尔也会把笔记本电脑弄坏。(通常是我不在家,而备份硬盘又不在家的时候。)在那些罕见但又非常不方便的情况下,当我的电脑彻底报废时(此处应有掌声),如果能有一种快速简便的方法把它重新组装起来,恢复到我想要的状态,那就太好了。
与创建磁盘映像并在之后恢复相比,一组 Bash 脚本更容易创建、维护和迁移。它们不需要任何特殊工具,只需要一种外部传输方式。这就像传递配方,而不是整个环形蛋糕。(嗯,蛋糕。)
此外,像这样的功能在设置虚拟机(VM)甚至是虚拟专用服务器(VPS)时都非常有用。(现在想想,它们或许更适合我进行一些破坏性实验……吃一堑长一智!)
本文将介绍如何使用 Bash 脚本自动配置运行 Ubuntu 桌面系统(我使用的是 Ubuntu LTS 18.04)的计算机。虽然部分语法可能有所不同,但文中大部分内容也适用于所有 Linux 桌面发行版。Bash 脚本主要涵盖三个方面:链接点文件、从 Ubuntu 或其他来源安装软件以及设置桌面环境。我们将逐一介绍这些方面,并重点讲解关键内容,以便您能够开始编写自己的脚本。
点文件
点文件是大多数 Linux 爱好者对配置文件的称呼。它们通常位于用户的主目录(在 bash 脚本中用内置变量`/home` 表示$HOME),并控制各种程序的界面和行为。文件名以 `.` 开头.,这在 Linux 中表示隐藏文件(因此称为“点”文件)。以下是一些常见的点文件及其用途。
.bashrc
该.bashrc文件记录了交互式非登录 shell 在启动时执行的命令列表。交互式 shell 和非交互式 shell 的区别可能有点复杂,但在这里我们无需过多关注。就我们的目的而言,只要你打开一个新的终端,看到提示符,并且可以在其中输入命令,该文件.bashrc就执行了。
此文件中的几行代码可以通过创建别名来减少击键次数,或者显示包含实用信息的提示,从而帮助您提高工作效率。它甚至可以运行用户创建的程序,例如Eddie。更多功能,您可以查看我.bashrc在 GitHub 上的文件。
.vimrc
该.vimrc配置文件配置了所有文本编辑器之王——Vim。(如果您还没有掌握键盘快捷键的强大功能,我强烈推荐一款有趣的 Vim 学习游戏。)
在编辑器中,我们可以设置编辑器偏好设置,例如显示设置、颜色和自定义键盘快捷键。你可以在 GitHub 上.vimrc查看我的代码.vimrc。
根据您使用的程序,其他一些 dotfile 文件可能也很有用,例如.gitconfig或.tmux.conf。浏览 GitHub 上的 dotfile 文件是了解哪些文件可用以及哪些文件对您有用的好方法!
链接点文件
我们可以使用脚本为所有配置文件创建符号链接(或简称“符号链接”)。这样,我们可以将所有文件保存在一个中央仓库中,方便管理,同时还能在程序期望找到配置文件的位置提供一个占位符。通常(但不总是)这个位置是用户主目录。例如,由于我将配置文件存储在 GitHub 上,我将它们保存在一个路径类似于 ` ~/github/dotfiles//etc/github.com/config ~/.vimrc...
为了以编程方式检查和处理所有现有文件和符号链接,然后创建新文件和符号链接,我们可以使用这个简洁的 shell 脚本。我之所以称赞它,是因为我直接照搬了Tom 的 setup 脚本的核心部分,所以它的出色之处并非我的功劳。
该symlink.sh脚本的工作原理是尝试为我们目录中的每个点文件创建符号链接$HOME。它首先检查符号链接是否已存在,或者是否存在同名的普通文件或目录。如果是前者,则删除符号链接并重新创建;如果是后者,则重命名文件或目录,然后再创建符号链接。
安装软件
探索 shell 脚本的一大乐趣在于,你会发现仅用命令行就能完成如此多的事情。我最初接触电脑是通过图形操作系统,因此我发现使用终端工作效率极高,令人耳目一新。
在 Ubuntu 系统中,我们通常需要的绝大多数程序都可以通过 Ubuntu 的默认软件仓库获取。我们通常使用 `apt-get install` 命令搜索这些软件apt search <program>,然后使用 `apt-get install` 命令安装它们sudo apt install <program>。但有些我们需要的软件可能不在默认仓库中,或者没有最新版本。在这种情况下,我们仍然可以使用PPA(个人软件包存档)在 Ubuntu 中安装这些程序。只是我们需要确保选择的 PPA 源是官方的。
如果我们想要的程序不在默认软件仓库中,或者似乎没有 PPA,我们仍然可以通过命令行安装它。快速搜索“命令行安装”应该能找到一些答案。
由于 Bash 脚本只是一系列可以在终端中单独运行的命令,因此创建用于安装所有所需程序的脚本就像将所有命令放入一个脚本文件一样简单。我选择将安装脚本分为两类:一类是默认软件仓库,由我的aptinstall.sh脚本安装;另一类是涉及外部软件源的程序,由我的programs.sh脚本处理。
设置桌面环境
最近几次换了新电脑(不管是主动还是被动),我总是忘记要花多少时间去记住、找到并更改所有桌面环境设置。键盘快捷键、工作区、声音设置、夜间模式……加起来可真不少!
值得庆幸的是,所有这些设置都必须以非图形格式存储在某个地方,这意味着如果我们能弄清楚它是如何存储的,我们很可能就能找到一种方法,用 bash 脚本轻松地操作这些设置。瞧,终端命令是gsettings list-recursively……
GNOME 桌面环境的设置选项非常多。我们可以让列表更容易滚动浏览(如果你也像我一样,有时会说“让我把所有选项都看看,再决定要什么!”),方法是使用管道符less:gsettings list-recursively | less。或者,如果我们对可能要查找的内容有所了解,可以使用grep:gsettings list-recursively | grep 'keyboard'。
我们可以使用命令来修改设置gsettings set。有时很难找到所需设置的语法,因此在首次编写脚本时,我建议使用图形用户界面 (GUI) 进行更改,然后找到gsettings更改的行并记录其值。
如需一些灵感,您可以查看我desktop.sh在 GitHub 上的设置脚本。
把所有东西整合起来
使用模块化脚本(一个用于符号链接,两个用于安装程序,一个用于桌面设置)既有助于保持代码的条理性和灵活性,也允许我只运行部分自动化设置。例如,如果我设置一个只使用命令行操作的VPS,我就不需要费心安装图形程序或进行桌面设置了。
然而,如果我确实想运行所有脚本,逐个运行就有点繁琐了。好在,由于 bash 脚本本身可以通过终端命令运行,我们可以简单地编写另一个主脚本来运行所有脚本!
这是我用来设置新Ubuntu桌面系统的主脚本:
#!/bin/bash
./symlink.sh
./aptinstall.sh
./programs.sh
./desktop.sh
# Get all upgrades
sudo apt upgrade -y
# See our bash changes
source ~/.bashrc
# Fun hello
figlet "... and we're back!" | lolcat
为了确保万无一失,我还添加了升级命令。这样可以保证我们新桌面上安装的程序都已更新到最新版本。现在,只需一个简单的 bash 命令就能搞定一切!
您可能已经注意到,虽然我们的桌面现在看起来和运行起来都很熟悉,但这些脚本并没有涵盖一个非常重要的方面:文件。希望您已经为这些文件准备了备份方法,例如使用某种可靠的外部硬件。如果没有,并且您习惯将工作成果放在 GitHub 或 GitLab 等外部代码仓库中,我这里有一种方法,可以使用 Bash 单行命令自动克隆和备份您的 GitHub 代码仓库。
然而,依赖外部仓库并不能提供 100% 的保障。您不会将某些文件(无论是否私有)放入外部托管的仓库中,因此这些文件也无法被拉取。无法从包含的文件生成的 Git 忽略对象(例如私钥和密钥)也不会被重新创建。不过,这些文件通常很小,您可以将其大量存储在几个加密的 U 盘中(如果您还没有私钥备份,或许应该先备份一下)。
也就是说,我希望这篇文章至少能给你一些启发,让你了解如何使用配置文件和 Bash 脚本来自动化设置新桌面。如果你发现了一些有用的设置,也请分享你的配置文件,帮助其他人发现它们!
文章来源:https://dev.to/victoria/how-to-set-up-a-fresh-ubuntu-desktop-using-only-dotfiles-and-bash-scripts-31m6