2018年10月

在编辑或修改配置文件或旧文件前,我经常会把它们备份到硬盘的某个地方,因此我如果意外地改错了这些文件,我可以从备份中恢复它们。但问题是如果我忘记清理备份文件,一段时间之后,我的磁盘会被这些大量重复文件填满 —— 我觉得要么是懒得清理这些旧文件,要么是担心可能会删掉重要文件。如果你们像我一样,在类 Unix 操作系统中,大量多版本的相同文件放在不同的备份目录,你可以使用下面的工具找到并删除重复文件。

提醒一句:

在删除重复文件的时请尽量小心。如果你不小心,也许会导致意外丢失数据。我建议你在使用这些工具的时候要特别注意。

在 Linux 中找到并删除重复文件

出于本指南的目的,我将讨论下面的三个工具:

  1. Rdfind
  2. Fdupes
  3. FSlint

这三个工具是自由开源的,且运行在大多数类 Unix 系统中。

1. Rdfind

Rdfind 意即 redundant data find(冗余数据查找),是一个通过访问目录和子目录来找出重复文件的自由开源的工具。它是基于文件内容而不是文件名来比较。Rdfind 使用排序算法来区分原始文件和重复文件。如果你有两个或者更多的相同文件,Rdfind 会很智能的找到原始文件并认定剩下的文件为重复文件。一旦找到副本文件,它会向你报告。你可以决定是删除还是使用硬链接或者符号(软)链接代替它们。

安装 Rdfind

Rdfind 存在于 AUR 中。因此,在基于 Arch 的系统中,你可以像下面一样使用任一如 Yay AUR 程序助手安装它。

$ yay -S rdfind

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install rdfind

在 Fedora 上:

$ sudo dnf install rdfind

在 RHEL、CentOS 上:

$ sudo yum install epel-release
$ sudo yum install rdfind

用法

一旦安装完成,仅带上目录路径运行 Rdfind 命令就可以扫描重复文件。

$ rdfind ~/Downloads

正如你看到上面的截屏,Rdfind 命令将扫描 ~/Downloads 目录,并将结果存储到当前工作目录下一个名为 results.txt 的文件中。你可以在 results.txt 文件中看到可能是重复文件的名字。

$ cat results.txt
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1469 8 9 2050 15864884 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test5.regex
DUPTYPE_WITHIN_SAME_TREE -1469 8 9 2050 15864886 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test6.regex
[...]
DUPTYPE_FIRST_OCCURRENCE 13 0 403635 2050 15740257 1 /home/sk/Downloads/Hyperledger(1).pdf
DUPTYPE_WITHIN_SAME_TREE -13 0 403635 2050 15741071 1 /home/sk/Downloads/Hyperledger.pdf
# end of file

通过检查 results.txt 文件,你可以很容易的找到那些重复文件。如果愿意你可以手动的删除它们。

此外,你可在不修改其他事情情况下使用 -dryrun 选项找出所有重复文件,并在终端上输出汇总信息。

$ rdfind -dryrun true ~/Downloads

一旦找到重复文件,你可以使用硬链接或符号链接代替他们。

使用硬链接代替所有重复文件,运行:

$ rdfind -makehardlinks true ~/Downloads

使用符号链接/软链接代替所有重复文件,运行:

$ rdfind -makesymlinks true ~/Downloads

目录中有一些空文件,也许你想忽略他们,你可以像下面一样使用 -ignoreempty 选项:

$ rdfind -ignoreempty true ~/Downloads

如果你不再想要这些旧文件,删除重复文件,而不是使用硬链接或软链接代替它们。

删除重复文件,就运行:

$ rdfind -deleteduplicates true ~/Downloads

如果你不想忽略空文件,并且和所哟重复文件一起删除。运行:

$ rdfind -deleteduplicates true -ignoreempty false ~/Downloads

更多细节,参照帮助部分:

$ rdfind --help

手册页:

$ man rdfind

2. Fdupes

Fdupes 是另一个在指定目录以及子目录中识别和移除重复文件的命令行工具。这是一个使用 C 语言编写的自由开源工具。Fdupes 通过对比文件大小、部分 MD5 签名、全部 MD5 签名,最后执行逐个字节对比校验来识别重复文件。

与 Rdfind 工具类似,Fdupes 附带非常少的选项来执行操作,如:

  • 在目录和子目录中递归的搜索重复文件
  • 从计算中排除空文件和隐藏文件
  • 显示重复文件大小
  • 出现重复文件时立即删除
  • 使用不同的拥有者/组或权限位来排除重复文件
  • 更多

安装 Fdupes

Fdupes 存在于大多数 Linux 发行版的默认仓库中。

在 Arch Linux 和它的变种如 Antergos、Manjaro Linux 上,如下使用 Pacman 安装它。

$ sudo pacman -S fdupes

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install fdupes

在 Fedora 上:

$ sudo dnf install fdupes

在 RHEL、CentOS 上:

$ sudo yum install epel-release
$ sudo yum install fdupes

用法

Fdupes 用法非常简单。仅运行下面的命令就可以在目录中找到重复文件,如:~/Downloads

$ fdupes ~/Downloads

我系统中的样例输出:

/home/sk/Downloads/Hyperledger.pdf
/home/sk/Downloads/Hyperledger(1).pdf

你可以看到,在 /home/sk/Downloads/ 目录下有一个重复文件。它仅显示了父级目录中的重复文件。如何显示子目录中的重复文件?像下面一样,使用 -r 选项。

$ fdupes -r ~/Downloads

现在你将看到 /home/sk/Downloads/ 目录以及子目录中的重复文件。

Fdupes 也可用来从多个目录中迅速查找重复文件。

$ fdupes ~/Downloads ~/Documents/ostechnix

你甚至可以搜索多个目录,递归搜索其中一个目录,如下:

$ fdupes ~/Downloads -r ~/Documents/ostechnix

上面的命令将搜索 ~/Downloads 目录,~/Documents/ostechnix 目录和它的子目录中的重复文件。

有时,你可能想要知道一个目录中重复文件的大小。你可以使用 -S 选项,如下:

$ fdupes -S ~/Downloads
403635 bytes each:
/home/sk/Downloads/Hyperledger.pdf
/home/sk/Downloads/Hyperledger(1).pdf

类似的,为了显示父目录和子目录中重复文件的大小,使用 -Sr 选项。

我们可以在计算时分别使用 -n-A 选项排除空白文件以及排除隐藏文件。

$ fdupes -n ~/Downloads
$ fdupes -A ~/Downloads

在搜索指定目录的重复文件时,第一个命令将排除零长度文件,后面的命令将排除隐藏文件。

汇总重复文件信息,使用 -m 选项。

$ fdupes -m ~/Downloads
1 duplicate files (in 1 sets), occupying 403.6 kilobytes

删除所有重复文件,使用 -d 选项。

$ fdupes -d ~/Downloads

样例输出:

[1] /home/sk/Downloads/Hyperledger Fabric Installation.pdf
[2] /home/sk/Downloads/Hyperledger Fabric Installation(1).pdf

Set 1 of 1, preserve files [1 - 2, all]:

这个命令将提示你保留还是删除所有其他重复文件。输入任一号码保留相应的文件,并删除剩下的文件。当使用这个选项的时候需要更加注意。如果不小心,你可能会删除原文件。

如果你想要每次保留每个重复文件集合的第一个文件,且无提示的删除其他文件,使用 -dN 选项(不推荐)。

$ fdupes -dN ~/Downloads

当遇到重复文件时删除它们,使用 -I 标志。

$ fdupes -I ~/Downloads

关于 Fdupes 的更多细节,查看帮助部分和 man 页面。

$ fdupes --help
$ man fdupes

3. FSlint

FSlint 是另外一个查找重复文件的工具,有时我用它去掉 Linux 系统中不需要的重复文件并释放磁盘空间。不像另外两个工具,FSlint 有 GUI 和 CLI 两种模式。因此对于新手来说它更友好。FSlint 不仅仅找出重复文件,也找出坏符号链接、坏名字文件、临时文件、坏的用户 ID、空目录和非精简的二进制文件等等。

安装 FSlint

FSlint 存在于 AUR,因此你可以使用任一 AUR 助手安装它。

$ yay -S fslint

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install fslint

在 Fedora 上:

$ sudo dnf install fslint

在 RHEL,CentOS 上:

$ sudo yum install epel-release
$ sudo yum install fslint

一旦安装完成,从菜单或者应用程序启动器启动它。

FSlint GUI 展示如下:

如你所见,FSlint 界面友好、一目了然。在 “Search path” 栏,添加你要扫描的目录路径,点击左下角 “Find” 按钮查找重复文件。验证递归选项可以在目录和子目录中递归的搜索重复文件。FSlint 将快速的扫描给定的目录并列出重复文件。

从列表中选择那些要清理的重复文件,也可以选择 “Save”、“Delete”、“Merge” 和 “Symlink” 操作他们。

在 “Advanced search parameters” 栏,你可以在搜索重复文件的时候指定排除的路径。

FSlint 命令行选项

FSlint 提供下面的 CLI 工具集在你的文件系统中查找重复文件。

  • findup — 查找重复文件
  • findnl — 查找名称规范(有问题的文件名)
  • findu8 — 查找非法的 utf8 编码的文件名
  • findbl — 查找坏链接(有问题的符号链接)
  • findsn — 查找同名文件(可能有冲突的文件名)
  • finded — 查找空目录
  • findid — 查找死用户的文件
  • findns — 查找非精简的可执行文件
  • findrs — 查找文件名中多余的空白
  • findtf — 查找临时文件
  • findul — 查找可能未使用的库
  • zipdir — 回收 ext2 目录项下浪费的空间

所有这些工具位于 /usr/share/fslint/fslint/fslint 下面。

例如,在给定的目录中查找重复文件,运行:

$ /usr/share/fslint/fslint/findup ~/Downloads/

类似的,找出空目录命令是:

$ /usr/share/fslint/fslint/finded ~/Downloads/

获取每个工具更多细节,例如:findup,运行:

$ /usr/share/fslint/fslint/findup --help

关于 FSlint 的更多细节,参照帮助部分和 man 页。

$ /usr/share/fslint/fslint/fslint --help
$ man fslint
总结

现在你知道在 Linux 中,使用三个工具来查找和删除不需要的重复文件。这三个工具中,我经常使用 Rdfind。这并不意味着其他的两个工具效率低下,因为到目前为止我更喜欢 Rdfind。好了,到你了。你的最喜欢哪一个工具呢?为什么?在下面的评论区留言让我们知道吧。

就到这里吧。希望这篇文章对你有帮助。更多的好东西就要来了,敬请期待。

谢谢!


via: https://www.ostechnix.com/how-to-find-and-delete-duplicate-files-in-linux/

作者:SK 选题:lujun9972 译者:pygmalion666 校对:wxy

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

Linux 内核有了新的 行为准则 Code of Conduct (CoC)。但在这条行为准则被签署以及发布仅仅 30 分钟之后,Linus Torvalds 就暂时离开了 Linux 内核的开发工作。因为新行为准则的作者那富有争议的过去,现在这件事成为了热点话题。许多人都对这新的行为准则表示不满。

如果你还不了解这件事,请参阅 Linus Torvalds 对于自己之前的不良态度致歉并开始休假,以改善自己的行为态度

Linux 内核开发遵守的新行为准则

Linux 内核开发者并不是以前没有需要遵守的行为准则,但是之前的 冲突准则 code of conflict 现在被替换成了以“给内核开发社区营造更加热情,更方便他人参与的氛围”为目的的行为准则。

“为营造一个开放并且热情的社区环境,我们,贡献者与维护者,许诺让每一个参与进我们项目和社区的人享受一个没有骚扰的体验。无关于他们的年纪、体型、身体残疾、种族、性别、性别认知与表达、社会经验、教育水平、社会或者经济地位、国籍、外表、人种、信仰、性认同和性取向。”

你可以在这里阅读整篇行为准则:Linux 行为准则

Linus Torvalds 是被迫道歉并且休假的吗?

Linus Torvalds 的道歉

这个新的行为准则由 Linus Torvalds 和 Greg Kroah-Hartman (仅次于 Torvalds 的二把手)签发。来自 Intel 的 Dan Williams 和来自 Facebook 的 Chris Mason 也是该准则的签署者之一。

如果我正确地解读了时间线,在签署这个行为准则的半小时之后,Torvalds 发送了一封邮件,对自己之前的不良态度致歉。他同时宣布会进行休假,以改善自己的行为态度。

不过有些人开始阅读这封邮件的话外之音,并对如下文字报以特别关注:

在这周,许多社区成员批评了我之前种种不解人意的行为。我以前在邮件里进行的,对他人轻率的批评是非专业以及不必要的。这种情况在我将事情放在私人渠道处理的时候尤为严重。我理解这件事情的严重性,这是不好的行为,我对此感到十分抱歉。

他是否是因为新的行为准则被强迫做出道歉,并且决定休假,可以通过这几行来判断。这也可以让我们采取一些措施,避免 Torvalds 被新的行为准则伤害。

有关贡献者盟约作者 Coraline Ada Ehmke 的争议

Linux 的行为准则基于 贡献者盟约 Contributor Convenant 1.4 版本。贡献者盟约被上百个开源项目所接纳,包括 Eclipse、Angular、Ruby、Kubernetes 等项目。

贡献者盟约由 Coraline Ada Ehmke 创作,她是一个软件工程师,开源支持者,以及 LGBT 活动家。她对于促进开源世界的多样性做了显著的贡献。

Coraline 对于精英主义的反对立场同样十分鲜明。 精英主义 meritocracy 这个词语源自拉丁文,本意为系统内的进步取决于“精英”,例如智力水平、取得的证书以及教育程度。但类似 Coraline 的活动家们认为唯才是用是个糟糕的体系,因为它只是通过人的智力产出来度量一个人,而并不重视他们的人性。

croraline meritocracy

图片来源:推特用户@nickmon1112

Linus Torvalds 不止一次地说到,他在意的只是代码而并非写代码的人。所以很明显,这忤逆了 Coraline 有关唯才是用体系的观点。

具体来说,Coraline 那被人关注饱受争议的过去,是一个关于 Opal 项目贡献者的事件。那是一个发生在推特上的讨论,Elia,来自意大利的 Opal 项目核心开发者说“(那些变性人)不接受现实才是问题所在。”

Coraline 并没有参加讨论,也不是 Opal 项目的贡献者。不过作为 LGBT 活动家,她以 Elia 发表“冒犯变性人群体的发言”为由,要求他退出 Opal 项目。 Coraline 和她的支持者——他们给这个项目做过贡献,通过在 GitHub 仓库平台上冗长且激烈的争论,试图将 Elia——此项目的核心开发者移出项目。

虽然 Elia 并没有离开这个项目,不过 Opal 项目的维护者同意实行一个行为准则。这个行为准则就是 Coraline 不停向维护者们宣扬的,她那著名的贡献者盟约。

不过故事到这里并没有结束。贡献者盟约稍后被更改,加入了一些针对 Elia 的新条款。这些新条款将行为准则的管束范围扩展到公共领域。不过这些更改稍后被维护者们标记为恶意篡改。最后 Opal 项目摆脱了贡献者盟约,并用自己的行为准则取而代之。

这个例子非常好的说明了,某些被冒犯的少数人群——哪怕他们并没有给这个项目做过一点贡献,是怎样试图去驱逐这个项目的核心开发者的。

人们对于 Linux 新的行为准则的以及 Torvalds 道歉的反映。

Linux 行为准则以及 Torvalds 的道歉一发布,社交媒体与论坛上就开始盛传种种谣言与推测。虽然很多人对新的行为准则感到满意,但仍有些人认为这是 SJW 尝试渗透 Linux 社区的阴谋。(LCTT 译注:SJW——Social Justice Warrior 所谓“为社会正义而战的人”。)

Caroline 发布的一个富有嘲讽意味的推特让争论愈发激烈。

我迫不及待期待看到大批的人离开 Linux 社区的场景了。现在它已经被 SJW 的成员渗透了。哈哈哈哈。
pic.twitter.com/eFeY6r4ENv

— Coraline Ada Ehmke (@CoralineAda) 9 月 16 日, 2018

随着对于 Linux 行为准则的争论持续发酵,Carolaine 公开宣称贡献者盟约是一份政治文件。这并不能被那些试图将政治因素排除在开源项目之外的人所接收。

有些人说贡献者盟约是一份政治文件,他们说的没错。

— Coraline Ada Ehmke (@CoralineAda) 9 月 16 日, 2018

Nick Monroe,一位自由记者,宣称 Linux 行为准则远没有表面上看上去那么简单。为了证明自己的观点,他挖掘出了 Coraline 的过去。如果您愿意,可以阅读以下材料。

好啦,你们已经看到过几千次了。这是一个行为准则。

它包含了社会认同的正义行为。https://t.co/KuQqeriYeJ

不过它或许没有看上去来的那么简单。pic.twitter.com/8NUL2K1gu2

— Nick Monroe (@nickmon1112) 9 月 17 日, 2018

Nick 并不是唯一一个反对 Linux 新的行为准则的人。SJW 的参与引发了更多的阴谋论猜测。

我猜今天关于 Linux 的大新闻就是现在,Linux 内核被一个 “ 后精英政治 post meritocracy ” 世界观下的行为准则给掌控了。

这个行为准则的宗旨看起来不错。不过在实际操作中,它们通常被当作 SJW 分子攻击他们不喜之人的工具。况且,很多人都被 SJW 分子所厌恶。

— Mark Kern (@Grummz) September 17, 2018

虽然很多人对于 Torvalds 的道歉感到欣慰,仍有一些人在责备 Torvalds 的态度。

我是不是唯一一个认为 Linus Torvalds 这十几年来的态度恰好就是 Linux 和开源“社区”特有的那种,居高临下,粗鲁,鄙视一切新人的行为作风?反正作为一个新用户,我从来没有在 Linux 社区里感受到自己是受欢迎的。

— Jonathan Frappier (@jfrappier) 9 月 17 日, 2018

还有些人并不能接受 Torvalds 的道歉。

哦快看啊,一个喜欢辱骂他人的开源软件维护者,在十几年的恶行之后,终于承认了他的行为可能是不正确的。

我关注的那些人因为这件事都惊讶到平地摔,并且决定给他(Linus Torvalds)寄饼干来庆祝。

— Kelly Ellis (@justkelly\_ok) 9 月 17 日, 2018

Torvalds 的道歉引起了广泛关注 ;)

我现在要在我的个人档案里写上”我不知是否该原谅 Linus Torvalds“ 吗?

— Verónica. (@maria\_fibonacci) 9 月 17 日, 2018

不继续开玩笑了。有关 Linus 道歉的关注是由 Sharp 挑起的。她因为“恶劣的社区环境”于 2015 年退出了 Linux 内核的开发。(LCTT 译注,Sarah Sharp 现在改名为“Sage Sharp”,并要求别人称其为“them”而不是“she”或“he”。)

现在我们要面对的问题是,这个成就了 Linus,给予他肆意辱骂特权的社区能否迎来改变。不仅仅是 Linus 个人,Linux 内核开发社区也急需改变。https://t.co/EG5KO43416

— Sage Sharp (@sagesharp) 9 月 17 日, 2018

你对于 Linux 行为准则怎么看?

如果你问我的观点,我认为目前社区的确是需要一个行为准则。它能指导人们尊重他人,不因为他人的种族、宗教信仰、国籍、政治观点(左派或者右派)而歧视,营造出一个积极向上的社区氛围。

对于这个事件,你怎么看?你认为这个行为准则能够帮助 Linux 内核的开发,或者说因为 SJW 成员们的加入,情况会变得更糟?

在 FOSS 里我们没有行为准则,不过我们都会持着文明友好的态度讨论问题。


via: https://itsfoss.com/linux-code-of-conduct/

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

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

我们已经讲解了 在 Ubuntu 18.04 无头服务器上配置 Oracle VirtualBox 。在本教程中,我们将讨论如何使用 KVM 去配置无头虚拟化服务器,以及如何从一个远程客户端去管理访客系统。正如你所知道的,KVM(Kernel-based virtual machine)是开源的,是 Linux 上的全虚拟化。使用 KVM,我们可以在几分钟之内,很轻松地将任意 Linux 服务器转换到一个完全的虚拟化环境中,以及部署不同种类的虚拟机,比如 GNU/Linux、*BSD、Windows 等等。

使用 KVM 配置无头虚拟化服务器

我在 Ubuntu 18.04 LTS 服务器上测试了本指南,但是它在其它的 Linux 发行版上也可以使用,比如,Debian、CentOS、RHEL 以及 Scientific Linux。这个方法完全适合哪些希望在没有任何图形环境的 Linux 服务器上,去配置一个简单的虚拟化环境。

基于本指南的目的,我将使用两个系统。

KVM 虚拟化服务器:

  • 宿主机操作系统 – 最小化安装的 Ubuntu 18.04 LTS(没有 GUI)
  • 宿主机操作系统的 IP 地址:192.168.225.22/24
  • 访客操作系统(它将运行在 Ubuntu 18.04 的宿主机上):Ubuntu 16.04 LTS server

远程桌面客户端:

  • 操作系统 – Arch Linux

安装 KVM

首先,我们先检查一下我们的系统是否支持硬件虚拟化。为此,需要在终端中运行如下的命令:

$ egrep -c '(vmx|svm)' /proc/cpuinfo

假如结果是 zero (0),说明系统不支持硬件虚拟化,或者在 BIOS 中禁用了虚拟化。进入你的系统 BIOS 并检查虚拟化选项,然后启用它。

假如结果是 1 或者 更大的数,说明系统将支持硬件虚拟化。然而,在你运行上面的命令之前,你需要始终保持 BIOS 中的虚拟化选项是启用的。

或者,你也可以使用如下的命令去验证它。但是为了使用这个命令你需要先安装 KVM。

$ kvm-ok

示例输出:

INFO: /dev/kvm exists
KVM acceleration can be used

如果输出的是如下这样的错误,你仍然可以在 KVM 中运行访客虚拟机,但是它的性能将非常差。

INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root
HINT: sudo /usr/sbin/kvm-ok

当然,还有其它的方法来检查你的 CPU 是否支持虚拟化。更多信息参考接下来的指南。

接下来,安装 KVM 和在 Linux 中配置虚拟化环境所需要的其它包。

在 Ubuntu 和其它基于 DEB 的系统上,运行如下命令:

$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker

KVM 安装完成后,启动 libvertd 服务(如果它没有启动的话):

$ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd

创建虚拟机

所有的虚拟机文件和其它的相关文件都保存在 /var/lib/libvirt/ 下。ISO 镜像的默认路径是 /var/lib/libvirt/boot/

首先,我们先检查一下是否有虚拟机。查看可用的虚拟机列表,运行如下的命令:

$ sudo virsh list --all

示例输出:

Id Name State
----------------------------------------------------

正如上面的截屏,现在没有可用的虚拟机。

现在,我们来创建一个。

例如,我们来创建一个有 512 MB 内存、1 个 CPU 核心、8 GB 硬盘的 Ubuntu 16.04 虚拟机。

$ sudo virt-install --name Ubuntu-16.04 --ram=512 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-16.04-vm1,size=8 --cdrom /var/lib/libvirt/boot/ubuntu-16.04-server-amd64.iso --graphics vnc

请确保在路径 /var/lib/libvirt/boot/ 中有一个 Ubuntu 16.04 的 ISO 镜像文件,或者在上面命令中给定的其它路径中有相应的镜像文件。

示例输出:

WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1

Starting install...
Creating domain... | 0 B 00:00:01
Domain installation still in progress. Waiting for installation to complete.
Domain has shutdown. Continuing.
Domain creation completed.
Restarting guest.

我们来分别讲解以上的命令和看到的每个选项的作用。

  • –name:这个选项定义虚拟机名字。在我们的案例中,这个虚拟机的名字是 Ubuntu-16.04
  • –ram=512:给虚拟机分配 512MB 内存。
  • –vcpus=1:指明虚拟机中 CPU 核心的数量。
  • –cpu host:通过暴露宿主机 CPU 的配置给访客系统来优化 CPU 属性。
  • –hvm:要求完整的硬件虚拟化。
  • –disk path:虚拟机硬盘的位置和大小。在我们的示例中,我分配了 8GB 的硬盘。
  • –cdrom:安装 ISO 镜像的位置。请注意你必须在这个位置真的有一个 ISO 镜像。
  • –graphics vnc:允许 VNC 从远程客户端访问虚拟机。

使用 VNC 客户端访问虚拟机

现在,我们在远程桌面系统上使用 SSH 登入到 Ubuntu 服务器上(虚拟化服务器),如下所示。

$ ssh [email protected]

在这里,sk 是我的 Ubuntu 服务器的用户名,而 192.168.225.22 是它的 IP 地址。

运行如下的命令找出 VNC 的端口号。我们从一个远程系统上访问虚拟机需要它。

$ sudo virsh dumpxml Ubuntu-16.04 | grep vnc

示例输出:

<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>

记下那个端口号 5900。安装任意的 VNC 客户端应用程序。在本指南中,我们将使用 TigerVnc。TigerVNC 是 Arch Linux 默认仓库中可用的客户端。在 Arch 上安装它,运行如下命令:

$ sudo pacman -S tigervnc

在安装有 VNC 客户端的远程客户端系统上输入如下的 SSH 端口转发命令。

$ ssh [email protected] -L 5900:127.0.0.1:5900

再强调一次,192.168.225.22 是我的 Ubuntu 服务器(虚拟化服务器)的 IP 地址。

然后,从你的 Arch Linux(客户端)打开 VNC 客户端。

在 VNC 服务器框中输入 localhost:5900,然后点击 “Connect” 按钮。

然后就像你在物理机上安装系统一样的方法开始安装 Ubuntu 虚拟机。

同样的,你可以根据你的服务器的硬件情况配置多个虚拟机。

或者,你可以使用 virt-viewer 实用程序在访客机器中安装操作系统。virt-viewer 在大多数 Linux 发行版的默认仓库中都可以找到。安装完 virt-viewer 之后,运行下列的命令去建立到虚拟机的访问连接。

$ sudo virt-viewer --connect=qemu+ssh://192.168.225.22/system --name Ubuntu-16.04

管理虚拟机

使用管理用户接口 virsh 从命令行去管理虚拟机是非常有趣的。命令非常容易记。我们来看一些例子。

查看运行的虚拟机,运行如下命令:

$ sudo virsh list

或者,

$ sudo virsh list --all

示例输出:

 Id Name State
----------------------------------------------------
 2 Ubuntu-16.04 running

启动一个虚拟机,运行如下命令:

$ sudo virsh start Ubuntu-16.04

或者,也可以使用虚拟机 id 去启动它。

正如在上面的截图所看到的,Ubuntu 16.04 虚拟机的 Id 是 2。因此,启动它时,你也可以像下面一样只指定它的 ID。

$ sudo virsh start 2

重启动一个虚拟机,运行如下命令:
$ sudo virsh reboot Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 is being rebooted

暂停一个运行中的虚拟机,运行如下命令:

$ sudo virsh suspend Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 suspended

让一个暂停的虚拟机重新运行,运行如下命令:

$ sudo virsh resume Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 resumed

关闭一个虚拟机,运行如下命令:

$ sudo virsh shutdown Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 is being shutdown

完全移除一个虚拟机,运行如下的命令:

$ sudo virsh undefine Ubuntu-16.04
$ sudo virsh destroy Ubuntu-16.04

示例输出:

Domain Ubuntu-16.04 destroyed

关于它的更多选项,建议你去查看 man 手册页:

$ man virsh

今天就到这里吧。开始在你的新的虚拟化环境中玩吧。对于研究和开发者、以及测试目的,KVM 虚拟化将是很好的选择,但它能做的远不止这些。如果你有充足的硬件资源,你可以将它用于大型的生产环境中。如果你还有其它好玩的发现,不要忘记在下面的评论区留下你的高见。

谢谢!


via: https://www.ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/

作者:SK 选题:lujun9972 译者:qhwdw 校对:wxy

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

将 Linux 服务器引导到单用户模式或 救援模式 rescue mode 是 Linux 管理员在关键时刻恢复服务器时通常使用的重要故障排除方法之一。在 Ubuntu 18.04 和 Debian 9 中,单用户模式被称为救援模式。

除了救援模式外,Linux 服务器可以在 紧急模式 emergency mode 下启动,它们之间的主要区别在于,紧急模式加载了带有只读根文件系统文件系统的最小环境,没有启用任何网络或其他服务。但救援模式尝试挂载所有本地文件系统并尝试启动一些重要的服务,包括网络。

在本文中,我们将讨论如何在救援模式和紧急模式下启动 Ubuntu 18.04 LTS/Debian 9 服务器。

在单用户/救援模式下启动 Ubuntu 18.04 LTS 服务器:

重启服务器并进入启动加载程序 (Grub) 屏幕并选择 “Ubuntu”,启动加载器页面如下所示,

按下 e,然后移动到以 linux 开头的行尾,并添加 systemd.unit=rescue.target。如果存在单词 $vt_handoff 就删除它。

现在按 Ctrl-xF10 启动,

现在按回车键,然后你将得到所有文件系统都以读写模式挂载的 shell 并进行故障排除。完成故障排除后,可以使用 reboot 命令重新启动服务器。

在紧急模式下启动 Ubuntu 18.04 LTS 服务器

重启服务器并进入启动加载程序页面并选择 “Ubuntu”,然后按 e 并移动到以 linux 开头的行尾,并添加 systemd.unit=emergency.target

现在按 Ctrl-xF10 以紧急模式启动,你将获得一个 shell 并从那里进行故障排除。正如我们已经讨论过的那样,在紧急模式下,文件系统将以只读模式挂载,并且在这种模式下也不会有网络,

使用以下命令将根文件系统挂载到读写模式,

# mount -o remount,rw /

同样,你可以在读写模式下重新挂载其余文件系统。

将 Debian 9 引导到救援和紧急模式

重启 Debian 9.x 服务器并进入 grub页面选择 “Debian GNU/Linux”。

按下 e 并移动到 linux 开头的行尾并添加 systemd.unit=rescue.target 以在救援模式下启动系统, 要在紧急模式下启动,那就添加 systemd.unit=emergency.target

救援模式:

现在按 Ctrl-xF10 以救援模式启动

按下回车键以获取 shell,然后从这里开始故障排除。

紧急模式:

现在按下 ctrl-xF10 以紧急模式启动系统

按下回车获取 shell 并使用 mount -o remount,rw / 命令以读写模式挂载根文件系统。

注意:如果已经在 Ubuntu 18.04 和 Debian 9 Server 中设置了 root 密码,那么你必须输入 root 密码才能在救援和紧急模式下获得 shell

就是这些了,如果您喜欢这篇文章,请分享你的反馈和评论。


via: https://www.linuxtechi.com/boot-ubuntu-18-04-debian-9-rescue-emergency-mode/

作者:Pradeep Kumar 选题:lujun9972 译者:geekpi 校对:wxy

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

我四岁的侄女是个好奇的孩子,她非常喜爱“阿凡达”电影,当阿凡达电影在播放时,她是如此的专注,好似眼睛粘在了屏幕上。但问题是当她观看电影时,她经常会碰到键盘上的某个键或者移动了鼠标,又或者是点击了鼠标的按钮。有时她非常意外地按了键盘上的某个键,从而将电影关闭或者暂停了。所以我就想找个方法来将键盘和鼠标都锁住,但屏幕不会被锁住。幸运的是,我在 Ubuntu 论坛上找到了一个完美的解决方法。假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具。它很简单但非常实用,你可以锁定屏幕的显示直到用户在键盘上输入自己设定的密码(LCTT 译注:就是用户自己的密码,例如用来打开屏保的那个密码,不需要单独设定)。在这篇简单的教程中,我将为你展示如何在 Linux 下锁住键盘和鼠标,而不锁掉屏幕。这个技巧几乎可以在所有的 Linux 操作系统中生效。

安装 xtrlock

xtrlock 软件包在大多数 Linux 操作系统的默认软件仓库中都可以获取到。所以你可以使用你安装的发行版的包管理器来安装它。

Arch Linux 及其衍生发行版中,运行下面的命令来安装它:

$ sudo pacman -S xtrlock

Fedora 上使用:

$ sudo dnf install xtrlock

RHEL、CentOS 上使用:

$ sudo yum install xtrlock

SUSE/openSUSE 上使用:

$ sudo zypper install xtrlock

Debian、Ubuntu、Linux Mint 上使用:

$ sudo apt-get install xtrlock

使用 xtrlock 锁住键盘和鼠标但不锁屏

安装好 xtrlock 后,你需要根据你的选择来创建一个快捷键,通过这个快捷键来锁住键盘和鼠标。

(LCTT 译注:译者在自己的系统(Arch + Deepin)中发现这里的到下面创建快捷键的部分可以不必做,依然生效。)

/usr/local/bin 目录下创建一个名为 lockkbmouse 的新文件:

$ sudo vi /usr/local/bin/lockkbmouse

然后将下面的命令添加到这个文件中:

#!/bin/bash
sleep 1 && xtrlock

保存并关闭这个文件。

然后使用下面的命令来使得它可以被执行:

$ sudo chmod a+x /usr/local/bin/lockkbmouse

接着,我们就需要创建快捷键了。

创建快捷键

在 Arch Linux MATE 桌面中

依次点击 “System -> Preferences -> Hardware -> keyboard Shortcuts”

然后点击 “Add” 来创建快捷键。

首先键入你的这个快捷键的名称,然后将下面的命令填入命令框中,最后点击 “Apply” 按钮。

bash -c "sleep 1 && xtrlock"

为了能够给这个快捷键赋予快捷方式,需要选中它或者双击它然后输入你选定的快捷键组合,例如我使用 Alt+k 这组快捷键。

如果要清除这个快捷键组合,按住 BACKSPACE 键就可以了。完成后,关闭键盘设定窗口。

在 Ubuntu GNOME 桌面中

依次进入 “System Settings -> Devices -> Keyboard”,然后点击 “+” 这个符号。

键入你快捷键的名称并将下面的命令加到命令框里面,然后点击 “Add” 按钮。

bash -c "sleep 1 && xtrlock"

接下来为这个新建的快捷键赋予快捷方式。我们只需要选择或者双击 “Set shortcut” 这个按钮就可以了。

然后你将看到下面的一屏。

输入你选定的快捷键组合,例如我使用 Alt+k

如果要清除这个快捷键组合,则可以按 BACKSPACE 这个键。这样快捷键便设定好了,完成这个后,关闭键盘设定窗口。

从现在起,每当你输入刚才设定的快捷键(在我们的示例中是 ATL+K),鼠标的指针便会变成一个挂锁的模样。现在,键盘和鼠标便被锁定了,这时你便可以自在地观看你的电影或者做其他你想做的事儿。即便是你的孩子或者宠物碰了键盘上的某些键或者点击了鼠标,这些操作都不会起作用。

因为 xtrlock 已经在工作了。

你看到了那个小的锁按钮了吗?它意味着键盘和鼠标已经被锁定了。即便你移动这个锁按钮,也不会发生任何事情。后台的任务在一直执行,直到你将屏幕解除,然后手动停掉运行中的任务。

将键盘和鼠标解锁

要将键盘和鼠标解锁,只需要输入你的密码然后敲击回车键就可以了,在输入的过程中你将看不到密码。只需要输入然后敲回车键就可以了。在你输入了正确的密码后,鼠标和键盘就可以再工作了。假如你输入了一个错误的密码,你将听到警告声。按 ESC 来清除输入的错误密码,然后重新输入正确的密码。要去掉未完全输入完的密码中的一个字符,只需要按 BACKSPACE 或者 DELETE 键就可以了。

要是我被永久地锁住了怎么办?

以防你被永久地锁定了屏幕,切换至一个 TTY(例如 CTRL+ALT+F2)然后运行:

$ sudo killall xtrlock

或者你还可以使用 chvt 命令来在 TTY 和 X 会话之间切换。

例如,如果要切换到 TTY1,则运行:

$ sudo chvt 1

要切换回 X 会话,则键入:

$ sudo chvt 7

不同的发行版使用了不同的快捷键组合来在不同的 TTY 间切换。请参考你安装的对应发行版的官方网站了解更多详情。

如果想知道更多 xtrlock 的信息,请参考 man 页:

$ man xtrlock

那么这就是全部了。希望这个指南可以帮到你。假如你发现这个指南很有用,请花点时间将这个指南共享到你的朋友圈并支持我们(OSTechNix)。

资源:


via: https://www.ostechnix.com/lock-keyboard-mouse-not-screen-linux/

作者:SK 选题:lujun9972 译者:FSSlc 校对:wxy

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

作为一个开发人员,你可能需要不时地向你的领导或者同事分享你目前的工作与代码开发进展,抑或你的领导想对代码进行全方位的分析。这时,你就需要用到一些代码统计的工具,我知道其中一个是 Ohcount。今天,我遇到了另一个程序,cloc。你可以用 cloc 很容易地统计多种语言的源代码行数。它还可以计算空行数、代码行数、实际代码的行数,并通过整齐的表格进行结果输出。cloc 是自由开源的跨平台程序,使用 Perl 进行开发。

特点

cloc 有很多优势:

  • 安装方便而且易用,不需要额外的依赖项
  • 可移植
  • 支持多种的结果格式导出,包括:纯文本、SQL、JSON、XML、YAML、CSV
  • 可以计算 git 的提交数
  • 可递归计算文件夹内的代码行数
  • 可计算压缩后的文件,如:tar、zip、Java 的 .ear 等类型
  • 开源,跨平台

安装

cloc 的安装包在大多数的类 Unix 操作系统的默认软件库内,所以你只需要使用默认的包管理器安装即可。

Arch Linux:

$ sudo pacman -S cloc

Debian/Ubuntu:

$ sudo apt-get install cloc

CentOS/Red Hat/Scientific Linux:

$ sudo yum install cloc

Fedora:

$ sudo dnf install cloc

FreeBSD:

$ sudo pkg install cloc

当然你也可以使用第三方的包管理器,比如 NPM

$ npm install -g cloc

统计多种语言代码数据的使用举例

首先来几个简单的例子,比如下面在我目前工作目录中的的 C 代码。

$ cat hello.c
#include <stdio.h>
int main()
{
    // printf() displays the string inside quotation
    printf("Hello, World!");
    return 0;
}

想要计算行数,只需要简单运行:

$ cloc hello.c

输出:

第一列是被分析文件的编程语言,上面我们可以看到这个文件是用 C 语言编写的。

第二列显示的是该种语言有多少文件,图中说明只有一个。

第三列显示空行的数量,图中显示是 0 行。

第四列显示注释的行数。

第五列显示该文件中实际的代码总行数。

这是一个有只有 6 行代码的源文件,我们看到统计的还算准确,那么如果用来统计一个行数较多的源文件呢?

$ cloc file.tar.gz

输出:

上述输出结果如果手动统计准确的代码行数非常困难,但是 cloc 只需要几秒,而且以易读的表格格式显示结果。你还可以在最后查看每个部分的总计,这在分析程序的源代码时非常方便。

除了源代码文件,cloc 还能递归计算各个目录及其子目录下的文件、压缩包、甚至 git commit 数目等。

文件夹中使用的例子:

$ cloc dir/

子文件夹中使用的例子*:

$ cloc dir/cloc/tests

计算一个压缩包中源代码的行数:

$ cloc archive.zip

你还可以计算一个 git 项目,也可以像下面这样针对某次提交时的状态统计:

$ git clone https://github.com/AlDanial/cloc.git

$ cd cloc

$ cloc 157d706

cloc 可以自动识别一些语言,使用下面的命令查看 cloc 支持的语言:

$ cloc --show-lang

更新信息请查阅 cloc 的使用帮助。

$ cloc --help

开始使用吧!


via: https://www.ostechnix.com/cloc-count-the-lines-of-source-code-in-many-programming-languages/

作者:SK 选题:lujun9972 译者:littleji 校对:pityonline

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