SK 发布的文章

自我更新 Arch Linux 桌面以来已经有一个月了。今天我试着更新我的 Arch Linux 系统,然后遇到一个错误 “error:failed to commit transaction (conflicting files) stfl:/usr/lib/libstfl.so.0 exists in filesystem”。看起来是 pacman 无法更新一个已经存在于文件系统上的库 (/usr/lib/libstfl.so.0)。如果你也遇到了同样的问题,下面是一个快速解决方案。

解决 Arch Linux 中出现的 “error:failed to commit transaction (conflicting files)”

有三种方法。

1。简单在升级时忽略导致问题的 stfl 库并尝试再次更新系统。请参阅此指南以了解 如何在更新时忽略软件包

2。使用命令覆盖这个包:

$ sudo pacman -Syu --overwrite /usr/lib/libstfl.so.0

3。手工删掉 stfl 库然后再次升级系统。请确保目标包不被其他任何重要的包所依赖。可以通过去 archlinux.org 查看是否有这种冲突。

$ sudo rm /usr/lib/libstfl.so.0

现在,尝试更新系统:

$ sudo pacman -Syu

我选择第三种方法,直接删除该文件然后升级 Arch Linux 系统。很有效!

希望本文对你有所帮助。还有更多好东西。敬请期待!

干杯!


via: https://www.ostechnix.com/how-to-solve-error-failed-to-commit-transaction-conflicting-files-in-arch-linux/

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

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

本教程将指导你在 Ubuntu 18.04 LTS 无头服务器上,一步一步地安装 Oracle VirtualBox。同时,本教程也将介绍如何使用 phpVirtualBox 去管理安装在无头服务器上的 VirtualBox 实例。phpVirtualBox 是 VirtualBox 的一个基于 Web 的前端工具。这个教程也可以工作在 Debian 和其它 Ubuntu 衍生版本上,如 Linux Mint。现在,我们开始。

前提条件

在安装 Oracle VirtualBox 之前,我们的 Ubuntu 18.04 LTS 服务器上需要满足如下的前提条件。

首先,逐个运行如下的命令来更新 Ubuntu 服务器。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade

接下来,安装如下的必需的包:

$ sudo apt install build-essential dkms unzip wget

安装完成所有的更新和必需的包之后,重启动 Ubuntu 服务器。

$ sudo reboot

在 Ubuntu 18.04 LTS 服务器上安装 VirtualBox

添加 Oracle VirtualBox 官方仓库。为此你需要去编辑 /etc/apt/sources.list 文件:

$ sudo nano /etc/apt/sources.list

添加下列的行。

在这里,我将使用 Ubuntu 18.04 LTS,因此我添加下列的仓库。

deb http://download.virtualbox.org/virtualbox/debian bionic contrib

用你的 Ubuntu 发行版的代码名字替换关键字 ‘bionic’,比如,‘xenial’、‘vivid’、‘utopic’、‘trusty’、‘raring’、‘quantal’、‘precise’、‘lucid’、‘jessie’、‘wheezy’、或 ‘squeeze‘。

然后,运行下列的命令去添加 Oracle 公钥:

$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

对于 VirtualBox 的老版本,添加如下的公钥:

$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

接下来,使用如下的命令去更新软件源:

$ sudo apt update

最后,使用如下的命令去安装最新版本的 Oracle VirtualBox:

$ sudo apt install virtualbox-5.2

添加用户到 VirtualBox 组

我们需要去创建并添加我们的系统用户到 vboxusers 组中。你也可以单独创建用户,然后将它分配到 vboxusers 组中,也可以使用已有的用户。我不想去创建新用户,因此,我添加已存在的用户到这个组中。请注意,如果你为 virtualbox 使用一个单独的用户,那么你必须注销当前用户,并使用那个特定的用户去登入,来完成剩余的步骤。

我使用的是我的用户名 sk,因此,我运行如下的命令将它添加到 vboxusers 组中。

$ sudo usermod -aG vboxusers sk

现在,运行如下的命令去检查 virtualbox 内核模块是否已加载。

$ sudo systemctl status vboxdrv

正如你在上面的截屏中所看到的,vboxdrv 模块已加载,并且是已运行的状态!

对于老的 Ubuntu 版本,运行:

$ sudo /etc/init.d/vboxdrv status

如果 virtualbox 模块没有启动,运行如下的命令去启动它。

$ sudo /etc/init.d/vboxdrv setup

很好!我们已经成功安装了 VirtualBox 并启动了 virtualbox 模块。现在,我们继续来安装 Oracle VirtualBox 的扩展包。

安装 VirtualBox 扩展包

VirtualBox 扩展包为 VirtualBox 访客系统提供了如下的功能。

  • 虚拟的 USB 2.0 (EHCI) 驱动
  • VirtualBox 远程桌面协议(VRDP)支持
  • 宿主机网络摄像头直通
  • Intel PXE 引导 ROM
  • 对 Linux 宿主机上的 PCI 直通提供支持

这里为 VirtualBox 5.2.x 下载最新版的扩展包。

$ wget https://download.virtualbox.org/virtualbox/5.2.14/Oracle_VM_VirtualBox_Extension_Pack-5.2.14.vbox-extpack

使用如下的命令去安装扩展包:

$ sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.14.vbox-extpack

恭喜!我们已经成功地在 Ubuntu 18.04 LTS 服务器上安装了 Oracle VirtualBox 的扩展包。现在已经可以去部署虚拟机了。参考 virtualbox 官方指南,在命令行中开始创建和管理虚拟机。

然而,并不是每个人都擅长使用命令行。有些人可能希望在图形界面中去创建和使用虚拟机。不用担心!下面我们为你带来非常好用的 phpVirtualBox 工具!

关于 phpVirtualBox

phpVirtualBox 是一个免费的、基于 web 的 Oracle VirtualBox 后端。它是使用 PHP 开发的。用 phpVirtualBox 我们可以通过 web 浏览器从网络上的任意一个系统上,很轻松地创建、删除、管理、和执行虚拟机。

在 Ubuntu 18.04 LTS 上安装 phpVirtualBox

由于它是基于 web 的工具,我们需要安装 Apache web 服务器、PHP 和一些 php 模块。

为此,运行如下命令:

$ sudo apt install apache2 php php-mysql libapache2-mod-php php-soap php-xml

然后,从 下载页面 上下载 phpVirtualBox 5.2.x 版。请注意,由于我们已经安装了 VirtualBox 5.2 版,因此,同样的我们必须去安装 phpVirtualBox 的 5.2 版本。

运行如下的命令去下载它:

$ wget https://github.com/phpvirtualbox/phpvirtualbox/archive/5.2-0.zip

使用如下命令解压下载的安装包:

$ unzip 5.2-0.zip

这个命令将解压 5.2.0.zip 文件的内容到一个名为 phpvirtualbox-5.2-0 的文件夹中。现在,复制或移动这个文件夹的内容到你的 apache web 服务器的根文件夹中。

$ sudo mv phpvirtualbox-5.2-0/ /var/www/html/phpvirtualbox

给 phpvirtualbox 文件夹分配适当的权限。

$ sudo chmod 777 /var/www/html/phpvirtualbox/

接下来,我们开始配置 phpVirtualBox。

像下面这样复制示例配置文件。

$ sudo cp /var/www/html/phpvirtualbox/config.php-example /var/www/html/phpvirtualbox/config.php

编辑 phpVirtualBox 的 config.php 文件:

$ sudo nano /var/www/html/phpvirtualbox/config.php

找到下列行,并且用你的系统用户名和密码去替换它(就是前面的“添加用户到 VirtualBox 组中”节中使用的用户名)。

在我的案例中,我的 Ubuntu 系统用户名是 sk ,它的密码是 ubuntu

var $username = 'sk';
var $password = 'ubuntu';

保存并关闭这个文件。

接下来,创建一个名为 /etc/default/virtualbox 的新文件:

$ sudo nano /etc/default/virtualbox

添加下列行。用你自己的系统用户替换 sk

VBOXWEB_USER=sk

最后,重引导你的系统或重启下列服务去完成整个配置工作。

$ sudo systemctl restart vboxweb-service
$ sudo systemctl restart vboxdrv
$ sudo systemctl restart apache2

调整防火墙允许连接 Apache web 服务器

如果你在 Ubuntu 18.04 LTS 上启用了 UFW,那么在默认情况下,apache web 服务器是不能被任何远程系统访问的。你必须通过下列的步骤让 http 和 https 流量允许通过 UFW。

首先,我们使用如下的命令来查看在策略中已经安装了哪些应用:

$ sudo ufw app list
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

正如你所见,Apache 和 OpenSSH 应该已经在 UFW 的策略文件中安装了。

如果你在策略中看到的是 Apache Full,说明它允许流量到达 80 和 443 端口:

$ sudo ufw app info "Apache Full"
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
80,443/tcp

现在,运行如下的命令去启用这个策略中的 HTTP 和 HTTPS 的入站流量:

$ sudo ufw allow in "Apache Full"
Rules updated
Rules updated (v6)

如果你希望允许 https 流量,但是仅是 http (80) 的流量,运行如下的命令:

$ sudo ufw app info "Apache"

访问 phpVirtualBox 的 Web 控制台

现在,用任意一台远程系统的 web 浏览器来访问。

在地址栏中,输入:http://IP-address-of-virtualbox-headless-server/phpvirtualbox

在我的案例中,我导航到这个链接 – http://192.168.225.22/phpvirtualbox

你将看到如下的屏幕输出。输入 phpVirtualBox 管理员用户凭据。

phpVirtualBox 的默认管理员用户名和密码是 admin / admin

恭喜!你现在已经进入了 phpVirtualBox 管理面板了。

现在,你可以从 phpvirtualbox 的管理面板上,开始去创建你的 VM 了。正如我在前面提到的,你可以从同一网络上的任意一台系统上访问 phpVirtualBox 了,而所需要的仅仅是一个 web 浏览器和 phpVirtualBox 的用户名和密码。

如果在你的宿主机系统(不是访客机)的 BIOS 中没有启用虚拟化支持,phpVirtualBox 将只允许你去创建 32 位的访客系统。要安装 64 位的访客系统,你必须在你的宿主机的 BIOS 中启用虚拟化支持。在你的宿主机的 BIOS 中你可以找到一些类似于 “virtualization” 或 “hypervisor” 字眼的选项,然后确保它是启用的。

本文到此结束了,希望能帮到你。如果你找到了更有用的指南,共享出来吧。

还有一大波更好玩的东西即将到来,请继续关注!


via: https://www.ostechnix.com/install-oracle-virtualbox-ubuntu-16-04-headless-server/

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

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

我们总在寻找一个更好用且更高效的解决方案,来我们的生活理加方便。 比方说,在处理 PDF 文档时,你肯定会想拥有一款工具,它能够在任何情形下都显得快速可靠。在这,我们想向你推荐 EasyPDF —— 一款可以胜任所有场合的在线 PDF 软件。通过大量的测试,我们可以保证:这款工具能够让你的 PDF 文档管理更加容易。

不过,关于 EasyPDF 有一些十分重要的事情,你必须知道。

  • EasyPDF 是免费的、匿名的在线 PDF 转换软件。
  • 能够将 PDF 文档转换成 Word、Excel、PowerPoint、AutoCAD、JPG、GIF 和文本等格式格式的文档。
  • 能够从 Word、Excel、PowerPoint 等其他格式的文件创建 PDF 文件。
  • 能够进行 PDF 文档的合并、分割和压缩。
  • 能够识别扫描的 PDF 和图片中的内容。
  • 可以从你的设备或者云存储(Google Drive 和 DropBox)中上传文档。
  • 可以在 Windows、Linux、Mac 和智能手机上通过浏览器来操作。
  • 支持多种语言。

EasyPDF的用户界面

EasyPDF 最吸引你眼球的就是平滑的用户界面,营造一种整洁的环境,这会让使用者感觉更加舒服。由于网站完全没有一点广告,EasyPDF 的整体使用体验相比以前会好很多。

每种不同类型的转换都有它们专门的菜单,只需要简单地向其中添加文件,你并不需要知道太多知识来进行操作。

许多类似网站没有做好相关的优化,使得在手机上的使用体验并不太友好。然而,EasyPDF 突破了这一个瓶颈。在智能手机上,EasyPDF 几乎可以秒开,并且可以顺畅的操作。你也通过 Chrome 的“三点菜单”把 EasyPDF 添加到手机的主屏幕上。

特性

除了好看的界面,EasyPDF 还非常易于使用。为了使用它,你 不需要注册一个账号 或者留下一个邮箱,它是完全匿名的。另外, EasyPDF 也不会对要转换的文件进行数量或者大小的限制,完全不需要安装!酷极了,不是吗?

首先,你需要选择一种想要进行的格式转换,比如,将 PDF 转换成 Word。然后,选择你想要转换的 PDF 文件。你可以通过两种方式来上传文件:直接拖拉或者从设备上的文件夹进行选择。还可以选择从Google DriveDropbox来上传文件。

选择要进行格式转换的文件后,点击 Convert 按钮开始转换过程。转换过程会在一分钟内完成,你并不需要等待太长时间。如果你还有对其他文件进行格式转换,在接着转换前,不要忘了将前面已经转换完成的文件下载保存。不然的话,你将会丢失前面的文件。

要进行其他类型的格式转换,直接返回到主页。

目前支持的几种格式转换类型如下:

  • PDF to Word – 将 PDF 文档 转换成 Word 文档
  • PDF 转换成 PowerPoint – 将 PDF 文档 转换成 PowerPoint 演示讲稿
  • PDF 转换成 Excel – 将 PDF 文档 转换成 Excel 文档
  • PDF 创建 – 从一些其他类型的文件(如,文本、doc、odt)来创建PDF文档
  • Word 转换成 PDF – 将 Word 文档 转换成 PDF 文档
  • JPG 转换成 PDF – 将 JPG images 转换成 PDF 文档
  • PDF 转换成 AutoCAD – 将 PDF 文档 转换成 .dwg 格式(DWG 是 CAD 文件的原生的格式)
  • PDF 转换成 Text – 将 PDF 文档 转换成 Text 文档
  • PDF 分割 – 把 PDF 文件分割成多个部分
  • PDF 合并 – 把多个 PDF 文件合并成一个文件
  • PDF 压缩 – 将 PDF 文档进行压缩
  • PDF 转换成 JPG – 将 PDF 文档 转换成 JPG 图片
  • PDF 转换成 PNG – 将 PDF 文档 转换成 PNG 图片
  • PDF 转换成 GIF – 将 PDF 文档 转换成 GIF 文件
  • 在线文字内容识别 – 将扫描的纸质文档转换成能够进行编辑的文件(如,Word、Excel、文本)

想试一试吗?好极了!点击下面的链接,然后开始格式转换吧!

总结

EasyPDF 名符其实,能够让 PDF 管理更加容易。就我测试过的 EasyPDF 服务而言,它提供了完全免费的简单易用的转换功能。它十分快速、安全和可靠。你会对它的服务质量感到非常满意,因为它不用支付任何费用,也不用留下像邮箱这样的个人信息。值得一试,也许你会找到你自己更喜欢的 PDF 工具。

好吧,我就说这些。更多的好东西还在后后面,请继续关注!

加油!


via: https://www.ostechnix.com/easypdf-a-free-and-secure-online-pdf-conversion-suite/

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

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

不久前,我们写了一个名为 InstantNews 的命令行新闻客户端,它可以帮助你立即在命令行阅读新闻和最新头条新闻。今天,我偶然发现了一个名为 Clinews 的类似,它的其功能与此相同 —— 在终端阅读来自热门网站的新闻和最新头条,还有博客。你无需安装 GUI 应用或移动应用。你可以直接从终端阅读世界上正在发生的事情。它是使用 NodeJS 编写的自由开源程序。

安装 Clinews

由于 Clinews 是使用 NodeJS 编写的,因此你可以使用 NPM 包管理器安装。如果尚未安装 NodeJS,请按照以下链接中的说明进行安装。

安装 node 后,运行以下命令安装 Clinews:

$ npm i -g clinews

你也可以使用 Yarn 安装 Clinews:

$ yarn global add clinews

Yarn 本身可以使用 npm 安装

$ npm -i yarn

配置 News API

Clinews 从 News API 中检索所有新闻标题。News API 是一个简单易用的 API,它返回当前在一系列新闻源和博客上发布的头条的 JSON 元数据。它目前提供来自 70 个热门源的实时头条,包括 Ars Technica、BBC、Blooberg、CNN、每日邮报、Engadget、ESPN、金融时报、谷歌新闻、hacker News,IGN、Mashable、国家地理、Reddit r/all、路透社、 Speigel Online、Techcrunch、The Guardian、The Hindu、赫芬顿邮报、纽约时报、The Next Web、华尔街日报,今日美国和等等

首先,你需要 News API 的 API 密钥。进入 https://newsapi.org/register 并注册一个免费帐户来获取 API 密钥。

从 News API 获得 API 密钥后,编辑 .bashrc

$ vi ~/.bashrc

在最后添加 newsapi API 密钥,如下所示:

export IN_API_KEY="Paste-API-key-here"

请注意,你需要将密钥粘贴在双引号内。保存并关闭文件。

运行以下命令以更新更改。

$ source ~/.bashrc

完成。现在继续并从新闻源获取最新的头条新闻。

在命令行阅读新闻和最新头条

要阅读特定新闻源的新闻和最新头条,例如 The Hindu,请运行:

$ news fetch the-hindu

这里,the-hindu 是新闻源的源id(获取 id)。

上述命令将从 The Hindu 新闻站获取最新的 10 个头条,并将其显示在终端中。此外,它还显示新闻的简要描述、发布的日期和时间以及到源的实际链接。

示例输出:

要在浏览器中阅读新闻,请按住 Ctrl 键并单击 URL。它将在你的默认 Web 浏览器中打开。

要查看所有的新闻源,请运行:

$ news sources

示例输出:

正如你在上面的截图中看到的,Clinews 列出了所有新闻源,包括新闻源的名称、获取 ID、网站描述、网站 URL 以及它所在的国家/地区。在撰写本指南时,Clinews 目前支持 70 多个新闻源。

Clinews 还可以搜索符合搜索条件/术语的所有源的新闻报道。例如,要列出包含单词 “Tamilnadu” 的所有新闻报道,请使用以下命令:

$ news search "Tamilnadu"

此命令将会筛选所有新闻源中含有 “Tamilnadu” 的报道。

Clinews 有一些其它选项可以帮助你

  • 限制你想看的新闻报道的数量, * 排序新闻报道(热门、最新), * 智能显示新闻报道分类(例如商业、娱乐、游戏、大众、音乐、政治、科学和自然、体育、技术)

更多详细信息,请参阅帮助部分:

$ clinews -h

就是这些了。希望这篇对你有用。还有更多好东西。敬请关注!

干杯!


via: https://www.ostechnix.com/clinews-read-news-and-latest-headlines-from-commandline/

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

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

在本指南中,我们将学习如何使用 df 命令。df 命令是 “Disk Free” 的首字母组合,它报告文件系统磁盘空间的使用情况。它显示一个 Linux 系统中文件系统上可用磁盘空间的数量。df 命令很容易与 du 命令混淆。它们的用途不同。df 命令报告我们拥有多少磁盘空间(空闲磁盘空间),而 du 命令报告被文件和目录占用了多少磁盘空间。希望我这样的解释你能更清楚。在继续之前,我们来看一些 df 命令的实例,以便于你更好地理解它。

df 命令使用举例

1、查看整个文件系统磁盘空间使用情况

无需任何参数来运行 df 命令,以显示整个文件系统磁盘空间使用情况。

$ df

示例输出:

Filesystem 1K-blocks Used Available Use% Mounted on
dev 4033216 0 4033216 0% /dev
run 4038880 1120 4037760 1% /run
/dev/sda2 478425016 428790352 25308980 95% /
tmpfs 4038880 34396 4004484 1% /dev/shm
tmpfs 4038880 0 4038880 0% /sys/fs/cgroup
tmpfs 4038880 11636 4027244 1% /tmp
/dev/loop0 84096 84096 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 95054 55724 32162 64% /boot
tmpfs 807776 28 807748 1% /run/user/1000

正如你所见,输出结果分为六列。我们来看一下每一列的含义。

  • Filesystem – Linux 系统中的文件系统
  • 1K-blocks – 文件系统的大小,用 1K 大小的块来表示。
  • Used – 以 1K 大小的块所表示的已使用数量。
  • Available – 以 1K 大小的块所表示的可用空间的数量。
  • Use% – 文件系统中已使用的百分比。
  • Mounted on – 已挂载的文件系统的挂载点。

2、以人类友好格式显示文件系统硬盘空间使用情况

在上面的示例中你可能已经注意到了,它使用 1K 大小的块为单位来表示使用情况,如果你以人类友好格式来显示它们,可以使用 -h 标志。

$ df -h
Filesystem Size Used Avail Use% Mounted on
dev 3.9G 0 3.9G 0% /dev
run 3.9G 1.1M 3.9G 1% /run
/dev/sda2 457G 409G 25G 95% /
tmpfs 3.9G 27M 3.9G 1% /dev/shm
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 3.9G 12M 3.9G 1% /tmp
/dev/loop0 83M 83M 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 93M 55M 32M 64% /boot
tmpfs 789M 28K 789M 1% /run/user/1000

现在,在 Size 列和 Avail 列,使用情况是以 GB 和 MB 为单位来显示的。

3、仅以 MB 为单位来显示文件系统磁盘空间使用情况

如果仅以 MB 为单位来显示文件系统磁盘空间使用情况,使用 -m 标志。

$ df -m
Filesystem 1M-blocks Used Available Use% Mounted on
dev 3939 0 3939 0% /dev
run 3945 2 3944 1% /run
/dev/sda2 467212 418742 24716 95% /
tmpfs 3945 26 3920 1% /dev/shm
tmpfs 3945 0 3945 0% /sys/fs/cgroup
tmpfs 3945 12 3933 1% /tmp
/dev/loop0 83 83 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 93 55 32 64% /boot
tmpfs 789 1 789 1% /run/user/1000

4、列出节点而不是块的使用情况

如下所示,我们可以通过使用 -i 标记来列出节点而不是块的使用情况。

$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
dev 1008304 439 1007865 1% /dev
run 1009720 649 1009071 1% /run
/dev/sda2 30392320 844035 29548285 3% /
tmpfs 1009720 86 1009634 1% /dev/shm
tmpfs 1009720 18 1009702 1% /sys/fs/cgroup
tmpfs 1009720 3008 1006712 1% /tmp
/dev/loop0 12829 12829 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 25688 390 25298 2% /boot
tmpfs 1009720 29 1009691 1% /run/user/1000

5、显示文件系统类型

使用 -T 标志显示文件系统类型。

$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
dev devtmpfs 4033216 0 4033216 0% /dev
run tmpfs 4038880 1120 4037760 1% /run
/dev/sda2 ext4 478425016 428790896 25308436 95% /
tmpfs tmpfs 4038880 31300 4007580 1% /dev/shm
tmpfs tmpfs 4038880 0 4038880 0% /sys/fs/cgroup
tmpfs tmpfs 4038880 11984 4026896 1% /tmp
/dev/loop0 squashfs 84096 84096 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 ext4 95054 55724 32162 64% /boot
tmpfs tmpfs 807776 28 807748 1% /run/user/1000

正如你所见,现在出现了显示文件系统类型的额外的列(从左数的第二列)。

6、仅显示指定类型的文件系统

我们可以限制仅列出某些文件系统。比如,只列出 ext4 文件系统。我们使用 -t 标志。

$ df -t ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 478425016 428790896 25308436 95% /
/dev/sda1 95054 55724 32162 64% /boot

看到了吗?这个命令仅显示了 ext4 文件系统的磁盘空间使用情况。

7、不列出指定类型的文件系统

有时,我们可能需要从结果中去排除指定类型的文件系统。我们可以使用 -x 标记达到我们的目的。

$ df -x ext4
Filesystem 1K-blocks Used Available Use% Mounted on
dev 4033216 0 4033216 0% /dev
run 4038880 1120 4037760 1% /run
tmpfs 4038880 26116 4012764 1% /dev/shm
tmpfs 4038880 0 4038880 0% /sys/fs/cgroup
tmpfs 4038880 11984 4026896 1% /tmp
/dev/loop0 84096 84096 0 100% /var/lib/snapd/snap/core/4327
tmpfs 807776 28 807748 1% /run/user/1000

上面的命令列出了除 ext4 类型以外的全部文件系统。

8、显示一个目录的磁盘使用情况

去显示某个目录的硬盘空间使用情况以及它的挂载点,例如 /home/sk/ 目录,可以使用如下的命令:

$ df -hT /home/sk/
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 457G 409G 25G 95% /

这个命令显示文件系统类型、以人类友好格式显示已使用和可用磁盘空间、以及它的挂载点。如果你不想去显示文件系统类型,只需要忽略 -t 标志即可。

更详细的使用情况,请参阅 man 手册页。

$ man df

今天就到此这止!我希望对你有用。还有更多更好玩的东西即将奉上。请继续关注!

再见!


via: https://www.ostechnix.com/the-df-command-tutorial-with-examples-for-beginners/

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

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

什么是基于 SSH 密钥的认证?

众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议。无论何时使用 SSH 在无安全网络上发送数据,它都会在源系统上自动地被加密,并且在目的系统上解密。SSH 提供了四种加密方式,基于密码认证基于密钥认证基于主机认证键盘认证。最常用的认证方式是基于密码认证和基于密钥认证。

在基于密码认证中,你需要的仅仅是远程系统上用户的密码。如果你知道远程用户的密码,你可以使用 ssh user@remote-system-name 访问各自的系统。另一方面,在基于密钥认证中,为了通过 SSH 通信,你需要生成 SSH 密钥对,并且为远程系统上传 SSH 公钥。每个 SSH 密钥对由私钥与公钥组成。私钥应该保存在客户系统上,公钥应该上传给远程系统。你不应该将私钥透露给任何人。希望你已经对 SSH 和它的认证方式有了基本的概念。

这篇教程,我们将讨论如何在 Linux 上配置基于密钥认证的 SSH。

在 Linux 上配置基于密钥认证的 SSH

为方便演示,我将使用 Arch Linux 为本地系统,Ubuntu 18.04 LTS 为远程系统。

本地系统详情:

  • OS: Arch Linux Desktop
  • IP address: 192.168.225.37/24

远程系统详情:

  • OS: Ubuntu 18.04 LTS Server
  • IP address: 192.168.225.22/24

本地系统配置

就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,需要将公钥上传到远程系统。公钥通常会被保存在远程系统的一个 ~/.ssh/authorized_keys 文件中。

注意事项:不要使用 root 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。

现在,让我们在本地系统上创建一个 SSH 密钥对。只需要在客户端系统上运行下面的命令。

$ ssh-keygen

上面的命令将会创建一个 2048 位的 RSA 密钥对。你需要输入两次密码。更重要的是,记住你的密码。后面将会用到它。

样例输出

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sk/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sk/.ssh/id_rsa.
Your public key has been saved in /home/sk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+=+*= + |
|o.o=.* = |
|.oo * o + |
|. = + . o |
|. o + . S |
| . E . |
| + o |
| +.*o+o |
| .o*=OO+ |
+----[SHA256]-----+

如果你已经创建了密钥对,你将看到以下信息。输入 y 就会覆盖已存在的密钥。

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

请注意密码是可选的。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地敲两次回车。不过,我建议你使用密码。从安全的角度来看,使用无密码的 ssh 密钥对不是什么好主意。这种方式应该限定在特殊的情况下使用,例如,没有用户介入的服务访问远程系统。(例如,用 rsync 远程备份……)

如果你已经在个人文件 ~/.ssh/id_rsa 中有了无密码的密钥,但想要更新为带密码的密钥。使用下面的命令:

$ ssh-keygen -p -f ~/.ssh/id_rsa

样例输出

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

现在,我们已经在本地系统上创建了密钥对。接下来,使用下面的命令将 SSH 公钥拷贝到你的远程 SSH 服务端上。

$ ssh-copy-id [email protected]

在这里,我把本地(Arch Linux)系统上的公钥拷贝到了远程系统(Ubuntu 18.04 LTS)上。从技术上讲,上面的命令会把本地系统 ~/.ssh/id_rsa.pub 文件中的内容拷贝到远程系统 ~/.ssh/authorized_keys 中。明白了吗?非常棒。

输入 yes 来继续连接你的远程 SSH 服务端。接着,输入远程系统用户 sk 的密码。

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

如果你已经拷贝了密钥,但想要替换为新的密码,使用 -f 选项覆盖已有的密钥。

$ ssh-copy-id -f [email protected]

我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为我们已经配置了密钥认证,因此不再需要密码认证了。

在远程系统上禁用基于密码认证的 SSH

你需要在 root 用户或者 sudo 执行下面的命令。

禁用基于密码的认证,你需要在远程系统的终端里编辑 /etc/ssh/sshd_config 配置文件:

$ sudo vi /etc/ssh/sshd_config

找到下面这一行,去掉注释然后将值设为 no

PasswordAuthentication no

重启 ssh 服务让它生效。

$ sudo systemctl restart sshd

从本地系统访问远程系统

在本地系统上使用命令 SSH 你的远程服务端:

$ ssh [email protected]

输入密码。

样例输出

Enter passphrase for key '/home/sk/.ssh/id_rsa':
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
sk@ubuntuserver:~$

现在,你就能 SSH 你的远程系统了。如你所见,我们已经使用之前 ssh-keygen 创建的密码登录进了远程系统的账户,而不是使用当前账户实际的密码。

如果你试图从其它客户端系统 ssh(远程系统),你将会得到这条错误信息。比如,我试图通过命令从 CentOS SSH 访问 Ubuntu 系统:

样例输出

The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts.
Permission denied (publickey).

如你所见,除了 CentOS(LCTT 译注:根据上文,这里应该是 Arch)系统外,我不能通过其它任何系统 SSH 访问我的远程系统 Ubuntu 18.04。

为 SSH 服务端添加更多客户端系统的密钥

这点非常重要。就像我说过的那样,除非你配置过(在之前的例子中,是 Ubuntu),否则你不能通过 SSH 访问到远程系统。如果我希望给更多客户端予以权限去访问远程 SSH 服务端,我应该怎么做?很简单。你需要在所有的客户端系统上生成 SSH 密钥对并且手动拷贝 ssh 公钥到想要通过 ssh 访问的远程服务端上。

在客户端系统上创建 SSH 密钥对,运行:

$ ssh-keygen

输入两次密码。现在,ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。

使用以下命令查看公钥:

$ cat ~/.ssh/id_rsa.pub

应该会输出类似下面的信息:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 ostechnix@centosserver

拷贝所有内容(通过 USB 驱动器或者其它任何介质),然后去你的远程服务端的终端,像下面那样,在 $HOME 下创建文件夹叫做 .ssh。你需要以 root 身份执行命令(注:不一定需要 root)。

$ mkdir -p ~/.ssh

现在,将前几步创建的客户端系统的公钥添加进文件中。

echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys

在远程系统上重启 ssh 服务。现在,你可以在新的客户端上 SSH 远程服务端了。

如果觉得手动添加 ssh 公钥有些困难,在远程系统上暂时性启用密码认证,使用 ssh-copy-id 命令从本地系统上拷贝密钥,最后禁用密码认证。

推荐阅读:

好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。

不久我会带来另一篇有用的文章。请继续关注 OSTechNix。

干杯!


via: https://www.ostechnix.com/configure-ssh-key-based-authentication-linux/

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

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