分类 技术 下的文章

at 命令可以很容易地安排 Linux 任务在你选择的任何时间或日期运行,让我们来看看它能为你做什么。

当你希望命令或脚本在某个特定时间运行时,你不需要将手指放在键盘上盘旋等待按下回车键,或者是在特定时间坐在办公桌前。相反,你可以通过 at 命令来设置任务。在本文中,我们将研究如何使用 at 来安排任务,如何精确地选择任务希望运行的时间,以及如何使用 at 来查看安排运行的任务。

at vs cron

对于那些使用 cron 在 Linux 系统上安排任务的人来说,at 命令类似于 cron,因为你可以在选定的时间调度任务,但是 cron 用于定期运行的作业 —— 甚至是每年仅一次。大多数 cron 作业的频率都设置为每天、每周或每月运行一次,不过你可以控制运行的频率和时间。

另一方面,at 命令用于仅运行一次的任务。想在午夜重启系统?没问题,只要你有适当的权限,at 可以为你完成此操作。如果你希望系统在每个星期六凌晨 2 点重启,那么改用 cron。

使用 at

at 命令很容易使用,只需记住几件事。一个简单使用 at 的例子类似于这样:

$ at 5:00PM
at> date >> thisfile
at> <EOT>

在输入 at 和应该运行命令的时间,at 会提示你在设定时间会运行该命令(此例中是 date 命令)。输入 ^DCtrl + d)来完成请求。

假设我们在下午 5 点之前设置这个 at 命令,那么这个日期和时间将在当天下午 5 点添加到名为 thisfile 文件的末尾。否则,该命令将在第二天下午 5 点运行。

at 命令进行交互时,可以输入多个命令。如果你要同时运行多个命令,只需输入多个命令行即可:

$ at 6:22
warning: commands will be executed using /bin/sh
at> echo first >> thisfile
at> echo second >> thisfile
at> <EOT>

在上面的命令中,我们使用了一个普通的用户账户,将一些简单的文本添加到该用户主目录的文件中。如果在上午 6:22 之后运行这些命令,那么命令会在第二天运行,因为 6:22 表示上午 6:22。如果你想在下午 6:22 运行,使用 6:22 PM 或者 18:226:22 PM 这样也是可以工作的。

你也可以通过使用 at 来安排命令在指定的日期或时间运行,例如 10:00AM April 15 2021noon + 5 days(从今天起 5 天内的中午运行),以下是一些例子:

at 6PM tomorrow
at noon April 15 2021
at noon + 5 days
at 9:15 + 1000 days

在指定要运行的命令并按下 ^D 后,你会注意到 at 命令为每个请求分配了一个作业编号,这个数字将显示在 at 命令的作业队列中。

$ at noon + 1000 days
warning: commands will be executed using /bin/sh
at> date >> thisfile
at> <EOT>
job 36 at Tue Dec 27 12:00:00 2022        <== job # is 36

检查队列

你可以使用 atq(at queue)命令来查看 at 作业队列:

$ atq
32      Thu Apr  2 03:06:00 2020 a shs
35      Mon Apr  6 12:00:00 2020 a shs
36      Tue Dec 27 12:00:00 2022 a shs
34      Thu Apr  2 18:00:00 2020 a shs

如果你需要取消队列中的一个作业,使用 atrm(at remove)命令和作业编号:

$ atrm 32
$ atq
35      Mon Apr  6 12:00:00 2020 a shs
36      Tue Dec 27 12:00:00 2022 a shs
34      Thu Apr  2 18:00:00 2020 a shs

你可以使用 at -c 命令来查看安排任务的详细信息,其它详细信息(活动的搜索路径等)也可以看到,但是输出的最后一行将显示计划运行的命令。

$ at -c 36 | tail -6
cd /home/shs || {
         echo 'Execution directory inaccessible' >&2
         exit 1
}
date >> thisfile

注意,该命令显示首先会测试是否可以通过 cd 命令进入用户目录。如果不可以,作业将退出并显示错误。如果可以,则运行在 at 中指定的命令。它将命令视为 “进入 /home/shs 或退出并显示错误”。

以 root 身份运行作业

要以 root 身份运行 at 作业,只需将 sudo 与你的 at 命令一起使用,如下所示:

$ sudo at 8PM
[sudo] password for shs:
warning: commands will be executed using /bin/sh
at> reboot now
at> <EOT>
job 37 at Wed Apr  1 16:00:00 2020

注意,root 的任务以 root 作为执行者显示在队列中。

35      Mon Apr  6 12:00:00 2020 a shs
36      Tue Dec 27 12:00:00 2022 a shs
37      Wed Apr  1 20:00:00 2020 a root         <==

运行脚本

你还可以使用 at 命令来运行脚本,这里有一个例子:

$ at 4:30PM
warning: commands will be executed using /bin/sh
at> bin/tryme
at> <EOT>

禁止使用 at 命令

/etc/at.deny 文件提供了一种禁止用户使用 at 命令的方法。默认情况下,它可能会包含一个不允许的账户列表,例如 ftpnobody。可以使用 /etc/at.allow 文件执行相反的操作,但是通常只配置 at.deny 文件。

总结

当你要安排一项一次性任务时,无论你是希望在今天下午或几年后运行,at 命令都是通用且易于使用的。


via: https://www.networkworld.com/article/3535808/scheduling-tasks-on-linux-using-the-at-command.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用循环和查找命令批量自动对多个文件进行一系列的操作。

人们希望学习批处理命令的一个普遍原因是要得到批处理强大的功能。如果你希望批量的对文件执行一些指令,构造一个可以重复运行在那些文件上的命令就是一种方法。在编程术语中,这被称作执行控制for 循环就是其中最常见的一种。

for 循环可以详细描述你希望计算机对你指定的每个数据对象(比如说文件)所进行的操作。

一般的循环

使用循环的一个简单例子是对一组文件进行分析。这个循环可能没什么用,但是这是一个安全的证明自己有能力独立处理文件夹里每一个文件的方法。首先,创建一个文件夹然后拷贝一些文件(例如 JPEG、PNG 等类似的文件)至文件夹中生成一个测试环境。你可以通过文件管理器或者终端来完成创建文件夹和拷贝文件的操作:

$ mkdir example
$ cp ~/Pictures/vacation/*.{png,jpg} example

切换到你刚创建的那个新文件夹,然后列出文件并确认这个测试环境是你需要的:

$ cd example
$ ls -1
cat.jpg
design_maori.png
otago.jpg
waterfall.png

在循环中逐一遍历文件的语法是:首先声明一个变量(例如使用 f 代表文件),然后定义一个你希望用变量循环的数据集。在这种情况下,使用 * 通配符来遍历当前文件夹下的所有文件(通配符 * 匹配所有文件)。然后使用一个分号(;)来结束这个语句。

$ for f in * ;

取决于你个人的喜好,你可以选择在这里按下回车键。在语法完成前,shell 是不会尝试执行这个循环的。

接下来,定义你想在每次循环中进行的操作。简单起见,使用 file 命令来得到 f 变量(使用 $ 告诉 shell 使用这个变量的值,无论这个变量现在存储着什么)所存储着的文件的各种信息:

do file $f ;

使用另一个分号结束这一行,然后关闭这个循环:

done

按下回车键启动 shell 对当前文件夹下所有东西的遍历。for 循环将会一个一个的将文件分配给变量 f 并且执行你的命令:

$ for f in * ; do
> file $f ;
> done
cat.jpg: JPEG image data, EXIF standard 2.2
design_maori.png: PNG image data, 4608 x 2592, 8-bit/color RGB, non-interlaced
otago.jpg: JPEG image data, EXIF standard 2.2
waterfall.png: PNG image data, 4608 x 2592, 8-bit/color RGB, non-interlaced

你也可以用这种形式书写命令:

$ for f in *; do file $f; done
cat.jpg: JPEG image data, EXIF standard 2.2
design_maori.png: PNG image data, 4608 x 2592, 8-bit/color RGB, non-interlaced
otago.jpg: JPEG image data, EXIF standard 2.2
waterfall.png: PNG image data, 4608 x 2592, 8-bit/color RGB, non-interlaced

对你的 shell 来说,多行和单行的格式没有什么区别,并且会输出完全一样的结果。

一个实用的例子

下面是一个循环在日常使用中的实用案例。假如你拥有一堆假期拍的照片想要发给你的朋友。但你的照片太大了,无法通过电子邮件发送,上传到图片分享服务也不方便。因此你想为你的照片创建小型的 web 版本,但是你不希望花费太多时间在一个一个的压缩图片体积上。

首先,在你的 Linux、BSD 或者 Mac 上使用包管理器安装 ImageMagick 命令。例如,在 Fedora 和 RHEL 上:

$ sudo dnf install ImageMagick

在 Ubuntu 和 Debian 上:

$ sudo apt install ImageMagick

在 BSD 上,使用 ports 或者 pkgsrc 安装。在 Mac 上,使用 Homebrew 或者 MacPorts 安装。

在你安装了 ImageMagick 之后,你就拥有一系列可以用来操作图片的新命令了。

为你将要创建的文件建立一个目标文件夹:

$ mkdir tmp

使用下面的循环可以将每张图片减小至原来大小的 33%。

$ for f in * ; do convert $f -scale 33% tmp/$f ; done

然后就可以在 tmp 文件夹中看到已经缩小了的照片了。

你可以在循环体中使用任意数量的命令,因此如果你需要对一批文件进行复杂的操作,可以将你的命令放在一个 for 循环的 dodone 语句之间。例如,假设你希望将所有处理过的图片拷贝至你的网站所托管的图片文件夹并且在本地系统移除这些文件:

$ for f in * ; do
  convert $f -scale 33% tmp/$f
  scp -i seth_web tmp/$f [email protected]:~/public_html
  trash tmp/$f ;
done

你的计算机会对 for 循环中处理的每一个文件自动的执行 3 条命令。这意味着假如你仅仅处理 10 张图片,也会省下输入 30 条指令和更多的时间。

限制你的循环

一个循环常常不需要处理所有文件。在示例文件夹中,你可能需要处理的只是 JPEG 文件:

$ for f in *.jpg ; do convert $f -scale 33% tmp/$f ; done
$ ls -m tmp
cat.jpg, otago.jpg

或者,你希望重复特定次数的某个操作而不仅仅只处理文件。for 循环的变量的值是被你赋给它的(不管何种类型的)数据所决定的,所以你可以创建一个循环遍历数字而不只是文件:

$ for n in {0..4}; do echo $n ; done
0
1
2
3
4

更多循环

现在你了解的知识已经足够用来创建自己的循环体了。直到你对循环非常熟悉之前,尽可能的在需要处理的文件的副本上进行操作。使用内置的保护措施可以预防损坏自己的数据和制造不可复现的错误,例如偶然将一个文件夹下的所有文件重命名为同一个名字,就可能会导致他们的相互覆盖。

更进一步的 for 循环话题,请继续阅读。

不是所有的 shell 都是 Bash

关键字 for 是内置在 Bash shell 中的。许多类似的 shell 会使用和 Bash 同样的关键字和语法,但是也有某些 shell ,比如 tcsh,使用不同的关键字,例如 foreach

tcsh 的语法与 Bash 类似,但是它更为严格。例如在下面的例子中,不要在你的终端的第 2、3 行键入 foreach? 。它只是提示你仍处在构建循环的过程中。

$ foreach f (*)
foreach? file $f
foreach? end
cat.jpg: JPEG image data, EXIF standard 2.2
design_maori.png: PNG image data, 4608 x 2592, 8-bit/color RGB, non-interlaced
otago.jpg: JPEG image data, EXIF standard 2.2
waterfall.png: PNG image data, 4608 x 2592, 8-bit/color RGB, non-interlaced

在 tcsh 中,foreachend 都必须单独的在一行中出现。因此你不能像 Bash 或者其他类似的 shell 一样只使用一行命令创建一个 for 循环。

for 循环与 find 命令

理论上,你可能会用到不支持 for 循环的 shell,或者你只是更想使用其他命令的一些特性来完成和循环一样的工作。

使用 find 命令是另一个实现 for 循环功能的途径。这个命令提供了多种方法来定义循环中包含哪些文件的范围以及并行处理的选项。

find 命令顾名思义就是帮助你查询存储在硬盘里的文件。它的用法很简单:提供一个你希望它查询的位置的路径,接着 find 就会查询这个路径下面的所有文件和文件夹。

$ find .
.
./cat.jpg
./design_maori.png
./otago.jpg
./waterfall.png

你可以通过添加名称的某些部分来过滤搜索结果:

$ find . -name "*jpg"
./cat.jpg
./otago.jpg

find 命令非常好的地方在于你可以通过 -exec 参数标志将它查询到的每一个文件放入循环中。例如,只对存放在你的 example 文件夹下的 PNG 图片进行体积压缩操作:

$ find . -name "*png" -exec convert {} -scale 33% tmp/{} \;
$ ls -m tmp
design_maori.png, waterfall.png

-exec 短语中,括号 {} 表示的是 find 正在处理的条目(换句话说,每一个被找到的以 PNG 结尾的文件)。-exec 短语必须使用分号结尾,但是 Bash 中常常也会使用分号。为了解决这个二义性问题,你的 结束符 可以使用反斜杠加上一个分号(\;),使得 find 命令可以知道这个结束符是用来标识自己结束使用的。

find 命令的操作非常棒,某些情况下它甚至可以表现得更棒。比如说,在一个新的进程中使用同一条命令查找 PNG 文件,你可能就会得到一些错误信息:

$ find . -name "*png" -exec convert {} -flip -flop tmp/{} \;
convert: unable to open image `tmp/./tmp/design_maori.png':
No such file or directory @ error/blob.c/OpenBlob/2643.
...

看起来 find 不只是定位了当前文件夹(.)下的所有 PNG 文件,还包括已经处理并且存储到了 tmp 下的文件。在一些情况下,你可能希望 find 查询当前文件夹下再加上其子文件夹下的所有文件。find 命令是一个功能强大的递归工具,特别体现在处理一些文件结构复杂的情境下(比如用来放置存满了音乐人音乐专辑的文件夹),同时你也可以使用 -maxdepth 选项来限制最大的递归深度。

只在当前文件夹下查找 PNG 文件(不包括子文件夹):

$ find . -maxdepth 1 -name "*png"

上一条命令的最大深度再加 1 就可以查找和处理当前文件夹及下一级子文件夹下面的文件:

$ find . -maxdepth 2 -name "*png"

find 命令默认是查找每一级文件夹。

循环的乐趣与收益

你使用的循环越多,你就可以越多的省下时间和力气,并且可以应对庞大的任务。虽然你只是一个用户,但是通过使用循环,可以使你的计算机完成困难的任务。

你可以并且应该就像使用其他的命令一样使用循环。在你需要重复处理单个或多个文件时,尽可能的使用这个命令。无论如何,这也算是一项需要被严肃对待的编程活动,因此如果你需要在一些文件上完成复杂的任务,你应该多花点时间在规划自己的工作流上面。如果你可以在一份文件上完成你的工作,接下来将操作包装进 for 循环里就相对简单了,这里面唯一的“编程”的需要只是理解变量是如何工作的并且进行充分的规划工作将已处理过的文件和未处理过的文件分开。经过一段时间的练习,你就可以从一名 Linux 用户升级成一位知道如何使用循环的 Linux 用户,所以开始让计算机为你工作吧!


via: https://opensource.com/article/19/6/how-write-loop-bash

作者:Seth Kenlon 选题:lujun9972 译者:chunibyo-wly 校对:wxy

本文由 LCTT 原创编译,Linux 中国 荣誉推出

本文是 Python 之禅特别系列的第三篇,此篇着眼于其中第五与第六条原则:扁平与稀疏。

Python 之禅 之所以得名,正是由于它那简明扼要的规则被设计出的意图在于让读者进行深入地思考,而绝不单是为编程提供一份易于遵守的指南。

读后不去三思其意,断然难以体会 Python 之禅的妙处。倘若 Python 之禅仅仅罗列出一组清晰的法则,那法则之间的矛盾是一种缺憾,然而作为引导读者沉思最优方案沉思的工具,矛盾却是绝佳的。

扁平胜过嵌套 Flat is better than nested

迫于对缩进的强硬要求,Python 对“扁平化”的需求显然远超它者。其余编程语言为了缓解对缩进的需求,通常会在嵌套结构里加入一种“作弊”的手段。为了理解这一点,不妨一同来看看 JavaScript。

JavaScript 本质上是异步的,这意味着程序员用 JavaScript 写的代码会用到大量的回调函数。

a(function(resultsFromA) {
  b(resultsFromA, function(resultsfromB) {
    c(resultsFromC, function(resultsFromC) {
      console.log(resultsFromC)
   }
  }
}

忽略这段代码的具体内容,只去观察这段代码的形状与缩进带来一个最右边的点的方式。这种独特的“箭头”图形在我们扫看代码时格外扎眼,这种写法也因此被视作不可取,甚至得到了“回调地狱”的绰号。不过,在 JavaScript 中,这种反映嵌套关系的缩进可以通过“作弊”来回避。

a(function(resultsFromA) {
b(resultsFromA,
  function(resultsfromB) {
c(resultsFromC,
  function(resultsFromC) {
    console.log(resultsFromC)
}}}

Python 并没有提供这种作弊手段:每一级嵌套在代码中都如实的对应着一层缩进。因此,Python 深层的嵌套关系在视觉上也一定是深层嵌套的。这使得“回调地狱”的问题对于 Python 而言要比在 JavaScript 中严重得多:嵌套的回调函数必定带来缩进,而绝无使用花括号来“作弊”的可能。

这项挑战与 Python 之禅的指导原则相结合后,在我参与的库中催生出了一个优雅的解决方案。我们在 Twisted 框架里提出了 deferred 抽象,日后 JavaScript 中流行的 promise 抽象亦是受其启发而生。正是由于 Python 对整洁代码的坚守,方能推动 Python 开发者去发掘新的、强力的抽象。

future_value = future_result()
future_value.addCallback(a)
future_value.addCallback(b)
future_value.addCallback(c)

(现代 JavaScript 程序员也许会觉得这段代码十分眼熟:promise 着实受到了 Twisted 里 deferred 抽象的深远影响。)

稀疏胜过密集 Sparse is better than dense

最易降低代码密集程度的方法是引入嵌套。这种习惯也正是有关稀疏的原则要随着前一条提出的原因:在竭尽所能地减少嵌套之后,我们往往会遗留下密集的代码或数据结构。此处的密集,是指塞进过量信息的小段代码,它们会导致错误发生后的解析变得困难。

这种密集性唯有通过创造性的思考方可改善,此外别无捷径。Python 之禅并不为我们提供简单的解决方案,它只会指明改善代码的方向,而非提供“如何”去做的向导。

起身走走,泡个热水澡,抑或是闻闻花香。盘坐冥思,直至灵感袭来。当你终于得到启发,便是动身写代码之时。


via: https://opensource.com/article/19/12/zen-python-flat-sparse

作者:Moshe Zadka 选题:lujun9972 译者:caiichenr 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

无论是 Nvidia 还是 Radeon 或者 Intel,它们的显卡都可能在 Linux 中有问题。当你要对图形问题进行故障排除时,首先要了解系统中装有哪种显卡。

Linux 有几个命令可以检查硬件信息。你可以使用它们来检查你有哪些显卡(也称为视频卡)。让我向你展示一些命令来获取 Linux 中的 GPU 信息。

在 Linux 命令行中检查显卡详细信息

使用 lspci 命令查找显卡

lspci 命令显示通过 PCI 外设组件互连 Peripheral Component Interconnect )总线连接的设备的信息。基本上,此命令提供有关系统从键盘和鼠标到声卡、网卡和显卡的所有外设的详细信息。

默认情况下,你会有大量的此类外设列表。这就是为什么你需要用 grep 命令过滤出显卡的原因:

lspci | grep VGA

这应该会显示一行有关你显卡的信息:

abhishek@itsfoss:~$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 620 (rev 02)

如你所见,我的系统中有 Intel HD 620 显卡。

在 Linux 中使用 lshw 命令获取显卡详细信息

lspci 命令足以查看你的显卡,但是并不能告诉你很多信息。你可以使用 lshw 命令获取有关它的更多信息。

此命令要求你有 root 用户权限。你需要以这种方式查找视频卡(显卡)信息:

sudo lshw -C video

正如你在下面的输出中看到的那样,此命令提供了有关显卡的更多信息,例如时钟频率、位宽、驱动等。

abhishek@itsfoss:~$ sudo lshw -C video
[sudo] password for abhishek:
  *-display
       description: VGA compatible controller
       product: HD Graphics 620
       vendor: Intel Corporation
       physical id: 2
       bus info: [email protected]:00:02.0
       version: 02
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:139 memory:db000000-dbffffff memory:90000000-9fffffff ioport:f000(size=64) memory:c0000-dffff

附赠技巧:以图形方式检查显卡详细信息

并非必须使用命令行在 Linux 中查找显卡详细信息。大多数 Linux 发行版(或者应该说是桌面环境)在设置中提供了必要的详细信息。

例如,如果你使用的是 GNOME 桌面环境,那么可以进入“设置”的“关于”部分来检查详细信息。Ubuntu 20.04 中看上去像这样:

Graphics card information check graphically

我希望这个快速技巧对你有所帮助。你也可以使用相同的命令来查找网卡Linux 中的 CPU 信息

如果你有任何疑问或建议,请随时发表评论。


via: https://itsfoss.com/check-graphics-card-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Ubuntu 20.04 LTS 版本还有不到一个月就发布了,Ubuntu 在这一个版本中对视觉效果作出了大变动,同时在性能方面也有所提高。

如果你还在使用 Ubuntu 18.04 LTS 版本,你会发现 Ubuntu 20.04 配合深色 Yaru 主题非常惊艳,看过 Ubuntu 20.04 的展示视频你就知道了。

感觉确实不错。如果你想在 4 月 23 日最终稳定版正式发布前率先使用 Ubuntu 20.04,也可以在官方网站上下载 beta 版本。尽管是测试版本,但它的稳定性并不差,同时你也可以在使用这个版本的过程中帮助 Ubuntu 团队进行测试。

你可以下载 每日构建 daily build 版并进行重新安装,如果你正在使用的是 Ubuntu 18.04 或 Ubuntu 19.10,也可以在现有系统的基础上直接升级到 Ubuntu 20.04 beta 版本。

从现有系统中升级是很方便的,因为你不会丢失系统设置和其他文件。与重新安装不同的是,你不需要从头开始重新安装所有的软件。当你切换到新版本时,你的主目录、应用程序(大部分)、文件都会保持原样。

如果你需要确认正在使用的 Ubuntu 版本,可以参考这篇文章

在本文中,我将会介绍如何升级到 Ubuntu 20.04 beta 版本。

如何将 Ubuntu 18.04/19.10 升级到 Ubuntu 20.04 beta

在你阅读后面的内容之前,我首先说明一些关于升级到 Ubuntu beta 版本的常见问题。

  • 版本升级的过程并不复杂,但在整个过程中需要有良好的网络连接,以便下载高达好几 GB 的数据。
  • 版本升级的过程中,第三方存储库(比如你自行添加的 PPA)会被禁用,有些 PPA 可能也和新版本不兼容,在版本升级完毕后,你可以手动启用这些 PPA。
  • 强烈建议将重要数据备份到外部的 USB 硬盘上。你只需要将各个目录下的重要文件直接复制到外部 USB 硬盘上保存即可。
  • 升级到新版本之后,就无法再回滚到之前的旧版本了,如果需要旧版本的系统,只能重新安装。
  • 如果你选择升级到 Ubuntu 20.04 beta 版本,那么在 Ubuntu 20.04 最终稳定版发布之后,你也不需要重新安装。只需要保持定期更新 Ubuntu 系统,届时你就可以直接用上最终稳定版了。
  • Ubuntu 16.04/17/18/19.04 都无法直接升级到 Ubuntu 20.04。

了解完上面的内容之后,下面开始从 Ubuntu 18.04/19.10 升级到 Ubuntu 20.04。

步骤 1:检查设置是否正确

进入“ 软件和升级 Software & Updates ”应用:

Software & Updates application in Ubuntu

在“ 升级 Updates ”选项卡中,设置“有任何新版本 Ubuntu 都提醒我”或“有 LTS 版本 Ubuntu 就提醒我”:

Ubuntu Upgrade Version Settings

设置完成后,系统会刷新软件库缓存。

步骤 2:安装系统更新

在上面的步骤完成之后,打开终端(在 Ubuntu 中可以使用 Ctrl+Alt+T 快捷键),然后使用以下命令更新 Ubuntu 系统

sudo apt update && sudo apt full-upgrade

apt full-upgradeapt dist-upgrade 的功能和 apt upgrade 大致相同,但对于系统版本的升级,apt full-upgrade 会在需要的情况下将当前已安装的软件移除掉。

更新安装完成后,系统可能会需要重新启动。在重新启动之后,就可以进入步骤 3 了。

步骤 3:使用更新管理器查找开发版本

在步骤 2 中已经安装了所有必要的更新,现在通过下面的命令打开更新管理器,其中 -d 参数表示需要查找开发版本:

update-manager -d

整个过程可能需要好几分钟,随后会提示有新版本的 Ubuntu 可用:

Availability of Ubuntu 20.04 in Ubuntu 19.10

在 Ubuntu 18.04 上的提示是这样的:

Availability of Ubuntu 20.04 in Ubuntu 18.04

然后点击对话框中的“ 升级 upgrade ”按钮。

步骤 4:开始升级到 Ubuntu 20.04 beta

接下来只要等待下载更新就可以了,遇到对话框直接点击 “OK” 即可。

点击“ 升级 upgrade ”按钮,然后按照提示进行操作。

在升级过程中,可能会有提示信息告知所有第三方源都已经禁用。有时候还会提示有哪些软件包需要升级或删除,以及是否需要保留一些已经过时了的软件包。一般情况下,我会选择直接删除。

整个升级过程通常会需要几个小时,但主要还是取决于实际的网速。升级完成后,系统会提示需要重新启动。

下面的视频展示了所有相关步骤。

由此可见,这个升级流程并不复杂。欢迎体验 Ubuntu 20.04 带来的新特性。

如果你有疑问或建议,欢迎在评论区留言。


via: https://itsfoss.com/upgrade-ubuntu-beta/

作者:Abhishek Prakash 选题:lujun9972 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文是 24 天 Linux 桌面特别系列的一部分。Fluxbox 对系统资源的占用非常轻量,但它拥有重要的 Linux 桌面功能,让你的用户体验轻松、高效、快捷。

桌面的概念可谓是仁者见仁智者见智。很多人把桌面看作一个家的基地,或者一个舒适的客厅,甚至是一个字面意义上的桌面,在其中放置着他们经常使用的记事本、最好的笔和铅笔,还有他们最喜欢的咖啡杯。KDE、 GNOME、Pantheon 等等在 Linux 上提供了这种舒适的生活方式。

但是对一些用户来说,桌面只是一个空荡荡的显示器空间,这是还没有任何可以自由浮动的应用程序窗口直接投射到他们的视网膜上的副作用。对于这些用户来说,桌面是一个空的空间,他们可以在上面运行应用程序 —— 无论是大型办公软件和图形套件,还是一个简单的终端窗口,或是来管理服务的托盘小程序。这种操作 POSIX 计算机的模式由来已久,该家族树的一支是 *box 窗口管理器:Blackbox、Fluxbox 和 Openbox。

Fluxbox 是一个 X11 系统的窗口管理器,它基于一个较老的名为 Blackbox 的项目。当我发现 Linux 时,Blackbox 的开发已进入衰退期,因此我就喜欢上了 Fluxbox ,此后我至少在一个以上的常用的系统上使用过它。它是用 C++ 编写的,并在 MIT 开源许可证下授权。

安装 Fluxbox

你很可能会在你的 Linux 发行版的软件库中找到 Fluxbox,但是你也可以在 Fluxbox.org 上找到它。如果你正在运行另外一个桌面,在同一个系统上安装 Fluxbox 是安全的,因为 Fluxbox 不会预设任何配置或附带的应用程序。

在安装 Fluxbox 后,注销你当前的桌面会话,以便你可以登录一个新的桌面会话。默认情况下,你的桌面会话管理器 (KDM、GDM、LightDM 或 XDM,取决于你的安装设置) 将继续让登录到之前的桌面,所以你在登录前必需要覆盖上一个桌面。

使用 GDM 覆盖一个桌面:

 title=

或者使用 KDM:

 title=

配置 Fluxbox 桌面

当你第一次登录到桌面时,屏幕基本是空的,因为 Fluxbox 提供的所有东西是面板(用于任务栏、系统托盘等等)和用于应用程序窗口的窗口装饰品。

 title=

如果你的发行版提供一个简单的 Fluxbox 桌面,你可以使用 feh 命令(你可能需要从你的发行版的软件库中安装它)来为你的桌面设置背景。这个命令有几个用于设置背景的选项,包括使用你选择的墙纸来填充屏幕的 --bg-fill 选项,来按比例缩放的 --bg-scale 等等选项。

$ feh --bg-fill ~/photo/oamaru/leaf-spiral.jpg

 title=

默认情况下,Fluxbox 自动生成一个菜单,在桌面上任意位置右键单击可用该菜单,这给予你访问应用程序的能力。根据你的发行版的不同,这个菜单可能非常小,也可能列出 /usr/share/applications 目录中的所有启动程序。

Fluxbox 配置是在文本文件中设置的,这些文本文件包含在 $HOME/.fluxbox 目录中。你可以:

  • keys 中设置键盘快捷键
  • startup 中启动的服务和应用程序
  • init 设置桌面首选项(例如工作区数量、面板位置等等)
  • menu 中设置菜单项

该文本配置文件非常易于推断,但是你也可以(并且是应该)阅读 Fluxbox 的文档

例如,这是我的典型菜单(或者说至少有它的基本结构):

# 为使用你自己的菜单,复制这些文本到 ~/.fluxbox/menu,然后编辑
# ~/.fluxbox/init ,并更改 session.menuFile 文件路径到 ~/.fluxbox/menu

[begin] (fluxkbox)
 [submenu] (apps) {}
  [submenu] (txt) {}
   [exec] (Emacs 23 (text\)) { x-terminal-emulator -T "Emacs (text)" -e /usr/bin/emacs -nw} <>
   [exec] (Emacs (X11\)) {/usr/bin/emacs} <>
   [exec] (LibreOffice) {/usr/bin/libreoffice}
  [end]
  [submenu] (code) {}
   [exec] (qtCreator) {/usr/bin/qtcreator}
   [exec] (eclipse) {/usr/bin/eclipse}
  [end]
  [submenu] (graphics) {}
   [exec] (ksnapshot) {/usr/bin/ksnapshot}
   [exec] (gimp) {/usr/bin/gimp}
   [exec] (blender) {/usr/bin/blender}
  [end]
  [submenu] (files) {}
   [exec] (dolphin) {/usr/bin/dolphin}
   [exec] (konqueror) { /usr/bin/kfmclient openURL $HOME }
  [end]
  [submenu] (network) {}
   [exec] (firefox) {/usr/bin/firefox}
   [exec] (konqueror) {/usr/bin/konqueror}
  [end]
 [end]
## 更改窗口管理器或工作环境
[submenu] (environments) {}
 [restart] (flux)  {/usr/bin/startfluxbox}
 [restart] (ratpoison)  {/usr/bin/ratpoison}
 [exec] (openIndiana) {/home/kenlon/qemu/startSolaris.sh}
[end]

[config] (config)
 [submenu] (styles) {}
  [stylesdir] (/usr/share/fluxbox/styles)
  [stylesdir] (~/.fluxbox/styles)
 [end]
[workspaces] (workspaces)
[reconfig] (reconfigure)
[restart] (restart)
[exit] (exeunt)
[end]

该菜单也提供一些首选项设置,例如,选择一个主题,从 Fluxbox 会话中重启或注销的能力。

我使用键盘快捷键来启动大多数的应用程序,这些快捷键写入到 keys 配置文件中。这里有一些示例(Mod4 按键是 Super 键,我使用其来指定全局快捷键):

# 打开应用程序
Mod4 t :Exec konsole
Mod4 k :Exec konqueror
Mod4 z :Exec fbrun
Mod4 e :Exec emacs
Mod4 f :Exec firefox
Mod4 x :Exec urxvt
Mod4 d :Exec dolphin
Mod4 q :Exec xscreensaver-command -activate
Mod4 3 :Exec ksnapshot

在这些快捷方式和一个打开的终端之间,在我工作日的大部分时间内很少使用鼠标,因此从一个控制器切换到另一个控制器不会浪费时间。并且因为 Fluxbox 很好地避开了控制器之间切换的方法,因此在其中操作没有一丝干扰。

为什么你应该使用 Fluxbox

Fluxbox 对系统资源的占用非常轻量,但是它拥有重要的功能,可以使你的用户体验轻松、快速、高效。它很容易定制,并且允许你定义你自己的工作流。你不必使用 Fluxbox 的面板,因为还有其它优秀的面板。你甚至可以鼠标中键点击并拖动两个独立的应用程序窗口到彼此之中,以便它们成为一个窗口,每个窗口都有自己的选项卡。

可能性是无穷的,所以今天就在你的 Linux 上尝试一下 Fluxbox 的简单稳定吧!


via: https://opensource.com/article/19/12/fluxbox-linux-desktop

作者:Seth Kenlon 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出