SK 发布的文章

欢迎区块链 3.0

区块链 2.0” 系列文章讨论了自 2008 年比特币等加密货币问世以来区块链技术的发展。本文将探讨区块链的未来发展。区块链 3.0 这一新的 DLT( 分布式分类帐本技术 Distributed Ledger Technology )演进浪潮将回答当前区块链所面临的问题(每一个问题都会在这里总结)。下一版本的技术标准也将带来全新的应用和使用案例。在本文的最后,我们也会看一些当前使用这些原则的案例。

以下是现有区块链平台的几个缺点,并针对这些缺点给出了建议的解决方案。

问题 1:可扩展性

这个问题 1 被视为普遍采用该技术的第一个主要障碍。正如之前所讨论的,很多因素限制了区块链同时处理大量交易的能力。诸如 以太坊 之类的现有网络每秒能够进行 10-15 次交易(TPS),而像 Visa 所使用的主流网络每秒能够进行超过 2000 次交易。可扩展性是困扰所有现代数据库系统的问题。正如我们在这里看到的那样,改进的共识算法和更好的区块链架构设计正在改进它。

解决可扩展性

已经提出了更精简、更有效的一致性算法来解决可扩展性问题,并且不会影响区块链的主要结构。虽然大多数加密货币和区块链平台使用资源密集型的 PoW 算法(例如,比特币和以太坊)来生成区块,但是存在更新的 DPoS 和 PoET 算法来解决这个问题。DPoS 和 PoET 算法(还有一些正在开发中)需要更少的资源来维持区块链,并且已显示具有高达 1000 TPS 的吞吐量,可与流行的非区块链系统相媲美。

可扩展性问题的第二个解决方案是完全改变区块链结构和功能。我们不会详细介绍这一点,但已经提出了诸如 有向无环图 Directed Acyclic Graph (DAG)之类的替代架构来处理这个问题。从本质上讲,这项工作假设并非所有网络节点都需要整个区块链的副本才能使区块链正常工作,或者并非所有的参与者需要从 DLT 系统获得好处。系统不要求所有参与者验证交易,只需要交易发生在共同的参考框架中并相互链接。

在比特币系统中使用 闪电网络 Lightning network 来实现 DAG,而以太坊使用他们的 切片 Sharding 协议来实现 DAG。本质上,从技术上来看 DAG 实现并不是区块链。它更像是一个错综复杂的迷宫,只是仍然保留了区块链的点对点和分布式数据库属性。稍后我们将在另一篇文章中探讨 DAG 和 Tangle 网络。

问题 2:互通性

互通性 2 3 被称为跨链访问,基本上就是指不同区块链之间彼此相互通信以交换指标和信息。由于目前有数不清的众多平台,不同公司为各种应用提供了各种专有系统,平台之间的互操作性就至关重要。例如,目前在一个平台上拥有数字身份的人无法利用其他平台提供的功能,因为各个区块链彼此之间互不了解、不能沟通。这是由于缺乏可靠的验证、令牌交换等有关的问题仍然存在。如果平台之间不能够相互通信,面向全球推出智能合约也是不可行的。

解决互通性

有一些协议和平台专为实现互操作性而设计。这些平台实现了原子交换协议,并向不同的区块链系统提供开放场景,以便在它们之间进行通信和交换信息。“0x (ZRX)” 就是其中的一个例子,稍后将对进行描述。

问题 3:治理

公有链中的治理 4 本身不是限制,而是需要像社区道德指南针一样,在区块链的运作中考虑每个人的意见。结合起来并规模性地看,能预见这样一个问题,即要么协议更改太频繁,要么协议被拥有最多令牌的“中央”权威一时冲动下修改。不过这不是大多数公共区块链目前正在努力避免的问题,因为其运营规模和运营性质不需要更严格的监管。

解决治理问题

上面提到的复杂的框架或 DAG 几乎可以消除对全球(平台范围)治理法规的需要和使用。相反,程序可以自动监督事务和用户类型,并决定需要执行的法律。

问题 4:可持续性

可持续性再次建立在可扩展性问题的基础上。当前的区块链和加密货币因不可长期持续而倍遭批评,这是由于仍然需要大量的监督,并且需要大量资源保持系统运行。如果你读过最近“挖掘加密货币”已经没有这么大利润的相关报道,你就知道“挖矿”图利就是它的本来面目。保持现有平台运行所需的资源量在全球范围和主流使用方面根本不实用。

解决不可持续性问题

从资源或经济角度来看,可持续性的答案与可扩展性的答案类似。但是,要在全球范围内实施这一制度,法律和法规必须予以认可。然而,这取决于世界各国政府。来自美国和欧洲政府的有利举措重新燃起了对这方面的希望。

问题 5:用户采用

目前,阻止消费者广泛采用 5 基于区块链的应用程序的一个障碍是消费者对平台及其底层的技术不熟悉。事实上,大多数应用程序都需要某种技术和计算背景来弄清楚它们是如何工作的,这在这方面也没有帮助。区块链开发的第三次浪潮旨在缩小消费者知识与平台可用性之间的差距。

解决用户采用问题

互联网花了很长的时间才发展成现在的样子。多年来,人们在开发标准化互联网技术栈方面做了大量的工作,使 Web 能够像现在这样运作。开发人员正在开发面向用户的前端分布式应用程序,这些应用程序应作为现有 Web 3.0 技术之上的一层,同时由下面的区块链和开放协议的支持。这样的分布式应用将使用户更熟悉底层技术,从而增加主流采用。

在当前场景中的应用

我们已经从理论上讨论了上述问题的解决方法,现在我们将继续展示这些方法在当前场景中的应用。

  • 0x – 是一种去中心化的令牌交换,不同平台的用户可以在不需要中央权威机构审查的情况下交换令牌。他们的突破在于,他们如何设计系统使得仅在交易结算后才记录和审查数据块,而不是通常的在交易之间进行(为了验证上下文,通常也会验证交易之前的数据块)。这使在线数字资产交换更快速。
  • Cardano – 由以太坊的联合创始人之一创建,Cardano 自诩为一个真正“科学”的平台,和采用了严格的协议,对开发的代码和算法进行了多次审查。Cardano 的所有内容都在数学上尽可能的进行了优化。他们的共识算法叫做 Ouroboros,是一种改进的 权益证明 Proof of Stake (PoS)算法。Cardano 是用 haskell 开发的,智能合约引擎使用 haskell 的衍生工具 plutus 进行操作。这两者都是函数式编程语言,可以保证安全交易而不会影响效率。
  • EOS – 我们已经在 这篇文章 中描述了 EOS。
  • COTI – 一个鲜为人知的架构,COTI 不需要挖矿,而且在运行过程中趋近于零功耗。它还将资产存储在本地用户设备上的离线钱包中,而不是存储在纯粹的对等网络上。它们也遵循基于 DAG 的架构,并声称处理吞吐量高达 10000 TPS。他们的平台允许企业在不利用区块链的情况下建立自己的加密货币和数字化货币钱包。

  1. A. P. Paper, K. Croman, C. Decker, I. Eyal, A. E. Gencer, and A. Juels, “On Scaling Decentralized Blockchains | SpringerLink,” 2018.
  2. Why is blockchain interoperability important
  3. The Importance of Blockchain Interoperability
  4. R. Beck, C. Müller-Bloch, and J. L. King, “Governance in the Blockchain Economy: A Framework and Research Agenda,” J. Assoc. Inf. Syst., pp. 1020–1034, 2018.
  5. J. M. Woodside, F. K. A. Jr, W. Giberson, F. K. J. Augustine, and W. Giberson, “Blockchain Technology Adoption Status and Strategies,” J. Int. Technol. Inf. Manag., vol. 26, no. 2, pp. 65–93, 2017.

via: https://www.ostechnix.com/welcoming-blockchain-3-0/

作者:sk 选题:lujun9972 译者:murphyzhao 校对:wxy

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

Expand And Unexpand Commands Explained

本指南通过实际的例子解释两个 Linux 命令,即 expandunexpand。对于好奇的人,expandunexpand 命令用于将文件中的 TAB 字符替换为空格,反之亦然。在 MS-DOS 中也有一个名为 expand 的命令,它用于解压压缩文件。但 Linux 的 expand 命令只是将 TAB 转换为空格。这两个命令是 GNU coreutils 包的一部分,由 David MacKenzie 编写。

为了演示,我将在本文使用名为 ostechnix.txt 的文本文件。下面给出的所有命令都在 Arch Linux 中进行测试。

expand 命令示例

与我之前提到的一样,expand 命令使用空格替换文件中的 TAB 字符。

现在,让我们将 ostechnix.txt 中的 TAB 转换为空格,并将结果写入标准输出:

$ expand ostechnix.txt

如果你不想在标准输出中显示结果,只需将其写入另一个文件,如下所示。

$ expand ostechnix.txt>output.txt

我们还可以将标准输入中的 TAB 转换为空格。为此,只需运行 expand 命令而不带文件名:

$ expand

只需输入文本并按回车键就能将 TAB 转换为空格。按 CTRL+C 退出。

如果你不想转换非空白字符后的 TAB,请使用 -i 标记,如下所示。

$ expand -i ostechnix.txt

我们还可以设置每个 TAB 为指定数字的宽度,而不是 8(默认值)。

$ expand -t=5 ostechnix.txt

我们甚至可以使用逗号分隔指定多个 TAB 位置,如下所示。

$ expand -t 5,10,15 ostechnix.txt

或者,

$ expand -t "5 10 15" ostechnix.txt

有关更多详细信息,请参阅手册页。

$ man expand

unexpand 命令示例

正如你可能已经猜到的那样,unexpand 命令将执行与 expand 命令相反的操作。即它会将空格转换为 TAB。让我向你展示一些例子,以了解如何使用 unexpand 命令。

要将文件中的空白(当然是空格)转换为 TAB 并将输出写入标准输出,请执行以下操作:

$ unexpand ostechnix.txt

如果要将输出写入文件而不是仅将其显示到标准输出,请使用以下命令:

$ unexpand ostechnix.txt>output.txt

从标准输出读取内容,将空格转换为制表符:

$ unexpand

默认情况下,unexpand 命令仅转换初始的空格。如果你想转换所有空格而不是只是一行开头的空格,请使用 -a 标志:

$ unexpand -a ostechnix.txt

仅转换一行开头的空格(请注意它会覆盖 -a):

$ unexpand --first-only ostechnix.txt

使多少个空格替换成一个 TAB,而不是 8(会启用 -a):

$ unexpand -t 5 ostechnix.txt

相似地,我们可以使用逗号分隔指定多个 TAB 的位置。

$ unexpand -t 5,10,15 ostechnix.txt

或者,

$ unexpand -t "5 10 15" ostechnix.txt

有关更多详细信息,请参阅手册页。

$ man unexpand

在处理大量文件时,expandunexpand 命令对于用空格替换不需要的 TAB 时非常有用,反之亦然。


via: https://www.ostechnix.com/expand-and-unexpand-commands-tutorial-with-examples/

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

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

GNU Screen 是一个终端多路复用器(窗口管理器)。顾名思义,Screen 可以在多个交互式 shell 之间复用物理终端,因此我们可以在每个终端会话中执行不同的任务。所有的 Screen 会话都完全独立地运行程序。因此,即使会话意外关闭或断开连接,在 Screen 会话内运行的程序或进程也将继续运行。例如,当通过 SSH 升级 Ubuntu 服务器时,screen 命令将继续运行升级过程,以防万一 SSH 会话因任何原因而终止。

GNU Screen 允许我们轻松创建多个 Screen 会话,在不同会话之间切换,在会话之间复制文本,随时连上或脱离会话等等。它是每个 Linux 管理员应该在必要时学习和使用的重要命令行工具之一。在本简要指南中,我们将看到 screen 命令的基本用法以及在 Linux 中的示例。

安装 GNU Screen

GNU Screen 在大多数 Linux 操作系统的默认存储库中都可用。

要在 Arch Linux 上安装 GNU Screen,请运行:

$ sudo pacman -S screen

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install screen

在 Fedora 上:

$ sudo dnf install screen

在 RHEL、CentOS 上:

$ sudo yum install screen

在 SUSE/openSUSE 上:

$ sudo zypper install screen

让我们继续看一些 screen 命令示例。

管理多个终端会话的 Screen 命令示例

在 Screen 中所有命令的默认前缀快捷方式是 Ctrl + a。使用 Screen 时,你需要经常使用此快捷方式。所以,要记住这个键盘快捷键。

创建新的 Screen 会话

让我们创建一个新的 Screen 会话并连上它。为此,请在终端中键入以下命令:

screen

现在,在此会话中运行任何程序或进程,即使你与此会话断开连接,正在运行的进程或程序也将继续运行。

从 Screen 会话脱离

要从屏幕会话中脱离,请按 Ctrl + ad。你无需同时按下两个组合键。首先按 Ctrl + a 然后按 d。从会话中脱离后,你将看到类似下面的输出。

[detached from 29149.pts-0.sk]

这里,29149 是 Screen ID,pts-0.sk 是屏幕会话的名称。你可以使用 Screen ID 或相应的会话名称来连上、脱离和终止屏幕会话。

创建命名会话

你还可以用你选择的任何自定义名称创建一个 Screen 会话,而不是默认用户名,如下所示。

screen -S ostechnix

上面的命令将创建一个名为 xxxxx.ostechnix 的新 Screen 会话,并立即连上它。要从当前会话中脱离,请按 Ctrl + a,然后按 d

当你想要查找哪些进程在哪些会话上运行时,命名会话会很有用。例如,当在会话中设置 LAMP 系统时,你可以简单地将其命名为如下所示。

screen -S lampstack

创建脱离的会话

有时,你可能想要创建一个会话,但不希望自动连上该会话。在这种情况下,运行以下命令来创建名为senthil 的已脱离会话:

screen -S senthil -d -m

也可以缩短为:

screen -dmS senthil

上面的命令将创建一个名为 senthil 的会话,但不会连上它。

列出屏幕会话

要列出所有正在运行的会话(连上的或脱离的),请运行:

screen -ls

示例输出:

There are screens on:
    29700.senthil   (Detached)
    29415.ostechnix (Detached)
    29149.pts-0.sk  (Detached)
3 Sockets in /run/screens/S-sk.

如你所见,我有三个正在运行的会话,并且所有会话都已脱离。

连上 Screen 会话

如果你想连上会话,例如 29415.ostechnix,只需运行:

screen -r 29415.ostechnix

或:

screen -r ostechnix

或使用 Screen ID:

screen -r 29415

要验证我们是否连上到上述会话,只需列出打开的会话并检查。

screen -ls

示例输出:

There are screens on:
        29700.senthil   (Detached)
        29415.ostechnix (Attached)
        29149.pts-0.sk  (Detached)
3 Sockets in /run/screens/S-sk.

如你所见,在上面的输出中,我们目前已连上到 29415.ostechnix 会话。要退出当前会话,请按 ctrl + a d

创建嵌套会话

当我们运行 screen 命令时,它将为我们创建一个会话。但是,我们可以创建嵌套会话(会话内的会话)。

首先,创建一个新会话或连上已打开的会话。然后我将创建一个名为 nested 的新会话。

screen -S nested

现在,在会话中按 Ctrl + ac 创建另一个会话。只需重复此操作即可创建任意数量的嵌套 Screen 会话。每个会话都将分配一个号码。号码将从 0 开始。

你可以按 Ctrl + n 移动到下一个会话,然后按 Ctrl + p 移动到上一个会话。

以下是管理嵌套会话的重要键盘快捷键列表。

  • Ctrl + a " - 列出所有会话
  • Ctrl + a 0 - 切换到会话号 0
  • Ctrl + a n - 切换到下一个会话
  • Ctrl + a p - 切换到上一个会话
  • Ctrl + a S - 将当前区域水平分割为两个区域
  • Ctrl + a l - 将当前区域垂直分割为两个区域
  • Ctrl + a Q - 关闭除当前会话之外的所有会话
  • Ctrl + a X - 关闭当前会话
  • Ctrl + a \ - 终止所有会话并终止 Screen
  • Ctrl + a ? - 显示键绑定。要退出,请按回车 #### 锁定会话

Screen 有一个锁定会话的选项。为此,请按 Ctrl + ax。 输入你的 Linux 密码以锁定。

Screen used by sk <sk> on ubuntuserver.
Password:

记录会话

你可能希望记录 Screen 会话中的所有内容。为此,只需按 Ctrl + aH 即可。

或者,你也可以使用 -L 参数启动新会话来启用日志记录。

screen -L

从现在开始,你在会话中做的所有活动都将记录并存储在 $HOME 目录中名为 screenlog.x 的文件中。这里,x 是一个数字。

你可以使用 cat 命令或任何文本查看器查看日志文件的内容。

记录 Screen 会话

终止 Screen 会话

如果不再需要会话,只需杀死它。要杀死名为 senthil 的脱离会话:

screen -r senthil -X quit

或:

screen -X -S senthil quit

或:

screen -X -S 29415 quit

如果没有打开的会话,你将看到以下输出:

$ screen -ls
No Sockets found in /run/screens/S-sk.

更多细节请参照 man 手册页:

$ man screen

还有一个名为 Tmux 的类似的命令行实用程序,它与 GNU Screen 执行相同的工作。要了解更多信息,请参阅以下指南。

资源


via: https://www.ostechnix.com/screen-command-examples-to-manage-multiple-terminal-sessions/

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

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

Getting Started With Docker

在我们的上一个教程中,我们已经了解如何在 Ubuntu 上安装 Docker,和如何在 CentOS 上安装 Docker。今天,我们将会了解 Docker 的一些基础用法。该教程包含了如何创建一个新的 Docker 容器,如何运行该容器,如何从现有的 Docker 容器中创建自己的 Docker 镜像等 Docker 的一些基础知识、操作。所有步骤均在 Ubuntu 18.04 LTS server 版本下测试通过。

入门指南

在开始指南之前,不要混淆 Docker 镜像和 Docker 容器这两个概念。在之前的教程中,我就解释过,Docker 镜像是决定 Docker 容器行为的一个文件,Docker 容器则是 Docker 镜像的运行态或停止态。(LCTT 译注:在 macOS 下使用 Docker 终端时,不需要加 sudo

1、搜索 Docker 镜像

我们可以从 Docker 仓库中获取镜像,例如 Docker hub,或者自己创建镜像。这里解释一下,Docker hub 是一个云服务器,用来提供给 Docker 的用户们创建、测试,和保存他们的镜像。

Docker hub 拥有成千上万个 Docker 镜像文件。你可以通过 docker search命令在这里搜索任何你想要的镜像。

例如,搜索一个基于 Ubuntu 的镜像文件,只需要运行:

$ sudo docker search ubuntu

示例输出:

搜索基于 CentOS 的镜像,运行:

$ sudo docker search centos

搜索 AWS 的镜像,运行:

$ sudo docker search aws

搜索 WordPress 的镜像:

$ sudo docker search wordpress

Docker hub 拥有几乎所有种类的镜像,包含操作系统、程序和其他任意的类型,这些你都能在 Docker hub 上找到已经构建完的镜像。如果你在搜索时,无法找到你想要的镜像文件,你也可以自己构建一个,将其发布出去,或者仅供你自己使用。

2、下载 Docker 镜像

下载 Ubuntu 的镜像,你需要在终端运行以下命令:

$ sudo docker pull ubuntu

这条命令将会从 Docker hub 下载最近一个版本的 Ubuntu 镜像文件。

示例输出:

Using default tag: latest
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete 
05731e63f211: Pull complete 
0bd67c50d6be: Pull complete 
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest

下载 Docker 镜像

你也可以下载指定版本的 Ubuntu 镜像。运行以下命令:

$ docker pull ubuntu:18.04

Docker 允许在任意的宿主机操作系统下,下载任意的镜像文件,并运行。

例如,下载 CentOS 镜像:

$ sudo docker pull centos

所有下载的镜像文件,都被保存在 /var/lib/docker 文件夹下。(LCTT 译注:不同操作系统存放的文件夹并不是一致的,具体存放位置请在官方查询)

查看已经下载的镜像列表,可以使用以下命令:

$ sudo docker images

示例输出:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              7698f282e524        14 hours ago        69.9MB
centos              latest              9f38484d220f        2 months ago        202MB
hello-world         latest              fce289e99eb9        4 months ago        1.84kB

正如你看到的那样,我已经下载了三个镜像文件:ubuntucentoshello-world

现在,让我们继续,来看一下如何运行我们刚刚下载的镜像。

3、运行 Docker 镜像

运行一个容器有两种方法。我们可以使用标签或者是镜像 ID。标签指的是特定的镜像快照。镜像 ID 是指镜像的唯一标识。

正如上面结果中显示,latest 是所有镜像的一个标签。7698f282e524 是 Ubuntu Docker 镜像的镜像 ID,9f38484d220f是 CentOS 镜像的镜像 ID,fce289e99eb9 是 hello\_world 镜像的 镜像 ID。

下载完 Docker 镜像之后,你可以通过下面的命令来使用其标签来启动:

$ sudo docker run -t -i ubuntu:latest /bin/bash

在这条语句中:

  • -t:在该容器中启动一个新的终端
  • -i:通过容器中的标准输入流建立交互式连接
  • ubuntu:latest:带有标签 latest 的 Ubuntu 容器
  • /bin/bash:在新的容器中启动 BASH Shell

或者,你可以通过镜像 ID 来启动新的容器:

$ sudo docker run -t -i 7698f282e524 /bin/bash

在这条语句里:

  • 7698f282e524 — 镜像 ID

在启动容器之后,将会自动进入容器的 shell 中(注意看命令行的提示符)。

Docker 容器的 Shell

如果想要退回到宿主机的终端(在这个例子中,对我来说,就是退回到 18.04 LTS),并且不中断该容器的执行,你可以按下 CTRL+P,再按下 CTRL+Q。现在,你就安全的返回到了你的宿主机系统中。需要注意的是,Docker 容器仍然在后台运行,我们并没有中断它。

可以通过下面的命令来查看正在运行的容器:

$ sudo docker ps

示例输出:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
32fc32ad0d54        ubuntu:latest       "/bin/bash"         7 minutes ago       Up 7 minutes                            modest_jones

列出正在运行的容器

可以看到:

  • 32fc32ad0d54 – 容器 ID
  • ubuntu:latest – Docker 镜像

需要注意的是,容器 ID 和 Docker 的镜像 ID是不同的。

可以通过以下命令查看所有正在运行和停止运行的容器:

$ sudo docker ps -a

在宿主机中断容器的执行:

$ sudo docker stop <container-id>

例如:

$ sudo docker stop 32fc32ad0d54

如果想要进入正在运行的容器中,你只需要运行:

$ sudo docker attach 32fc32ad0d54

正如你看到的,32fc32ad0d54 是一个容器的 ID。当你在容器中想要退出时,只需要在容器内的终端中输入命令:

# exit

你可以使用这个命令查看后台正在运行的容器:

$ sudo docker ps

4、构建自己的 Docker 镜像

Docker 不仅仅可以下载运行在线的容器,你也可以创建你的自己的容器。

想要创建自己的 Docker 镜像,你需要先运行一个你已经下载完的容器:

$ sudo docker run -t -i ubuntu:latest /bin/bash

现在,你运行了一个容器,并且进入了该容器。然后,在该容器安装任意一个软件或做任何你想做的事情。

例如,我们在容器中安装一个 Apache web 服务器。

当你完成所有的操作,安装完所有的软件之后,你可以执行以下的命令来构建你自己的 Docker 镜像:

# apt update
# apt install apache2

同样的,在容器中安装和测试你想要安装的所有软件。

当你安装完毕之后,返回的宿主机的终端。记住,不要关闭容器。想要返回到宿主机而不中断容器。请按下CTRL+P,再按下 CTRL+Q

从你的宿主机的终端中,运行以下命令如寻找容器的 ID:

$ sudo docker ps

最后,从一个正在运行的容器中创建 Docker 镜像:

$ sudo docker commit 3d24b3de0bfc ostechnix/ubuntu_apache

示例输出:

sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962

在这里:

  • 3d24b3de0bfc — 指 Ubuntu 容器的 ID。
  • ostechnix — 我们创建的容器的用户名称
  • ubuntu_apache — 我们创建的镜像

让我们检查一下我们新创建的 Docker 镜像:

$ sudo docker images

示例输出:

REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
ostechnix/ubuntu_apache   latest              ce5aa74a48f1        About a minute ago   191MB
ubuntu                    latest              7698f282e524        15 hours ago         69.9MB
centos                    latest              9f38484d220f        2 months ago         202MB
hello-world               latest              fce289e99eb9        4 months ago         1.84kB

列出所有的 Docker 镜像

正如你看到的,这个新的镜像就是我们刚刚在本地系统上从运行的容器上创建的。

现在,你可以从这个镜像创建一个新的容器。

$ sudo docker run -t -i ostechnix/ubuntu_apache /bin/bash

5、删除容器

如果你在 Docker 上的工作已经全部完成,你就可以删除那些你不需要的容器。

想要删除一个容器,首先,你需要停止该容器。

我们先来看一下正在运行的容器有哪些

$ sudo docker ps

示例输出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d24b3de0bfc ubuntu:latest "/bin/bash" 28 minutes ago Up 28 minutes goofy_easley

使用容器 ID 来停止该容器:

$ sudo docker stop 3d24b3de0bfc

现在,就可以删除该容器了。

$ sudo docker rm 3d24b3de0bfc

你就可以按照这样的方法来删除那些你不需要的容器了。

当需要删除的容器数量很多时,一个一个删除也是很麻烦的,我们可以直接删除所有的已经停止的容器。只需要运行:

$ sudo docker container prune

按下 Y,来确认你的操作:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564
5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0

Total reclaimed space: 5B

这个命令仅支持最新的 Docker。(LCTT 译注:仅支持 1.25 及以上版本的 Docker)

6、删除 Docker 镜像

当你删除了不要的 Docker 容器后,你也可以删除你不需要的 Docker 镜像。

列出已经下载的镜像:

$ sudo docker images

示例输出:

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
ostechnix/ubuntu_apache   latest              ce5aa74a48f1        5 minutes ago       191MB
ubuntu                    latest              7698f282e524        15 hours ago        69.9MB
centos                    latest              9f38484d220f        2 months ago        202MB
hello-world               latest              fce289e99eb9        4 months ago        1.84kB

由上面的命令可以知道,在本地的系统中存在三个镜像。

使用镜像 ID 来删除镜像。

$ sudo docekr rmi ce5aa74a48f1

示例输出:

Untagged: ostechnix/ubuntu_apache:latest
Deleted: sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962
Deleted: sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd

解决问题

Docker 禁止我们删除一个还在被容器使用的镜像。

例如,当我试图删除 Docker 镜像 b72889fa879c 时,我只能获得一个错误提示:

Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377

这是因为这个 Docker 镜像正在被一个容器使用。

所以,我们来检查一个正在运行的容器:

$ sudo docker ps

示例输出:

注意,现在并没有正在运行的容器!!!

查看一下所有的容器(包含所有的正在运行和已经停止的容器):

$ sudo docker pa -a

示例输出:

可以看到,仍然有一些已经停止的容器在使用这些镜像。

让我们把这些容器删除:

$ sudo docker rm 12e892156219

我们仍然使用容器 ID 来删除这些容器。

当我们删除了所有使用该镜像的容器之后,我们就可以删除 Docker 的镜像了。

例如:

$ sudo docekr rmi b72889fa879c

我们再来检查一下本机存在的镜像:

$ sudo docker images

想要知道更多的细节,请参阅本指南末尾给出的官方资源的链接或者在评论区进行留言。

这就是全部的教程了,希望你可以了解 Docker 的一些基础用法。

更多的教程马上就会到来,敬请关注。


via: https://www.ostechnix.com/getting-started-with-docker/

作者:sk 选题:lujun9972 译者:zhang5788 校对:wxy

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

在这个指南中,我将用示例来阐明如何使用 FFmpeg 媒体框架来做各种各样的音频、视频转码和转换的操作。我已经为初学者汇集了最常用的 20 多个 FFmpeg 命令,我将不时地添加更多的示例来保持更新这个指南。请给这个指南加书签,以后回来检查更新。让我们开始吧,如果你还没有在你的 Linux 系统中安装 FFmpeg,参考下面的指南。

针对初学者的 20 多个 FFmpeg 命令

FFmpeg 命令的典型语法是:

ffmpeg [全局选项] {[输入文件选项] -i 输入_url_地址} ...
 {[输出文件选项] 输出_url_地址} ...

现在我们将查看一些重要的和有用的 FFmpeg 命令。

1、获取音频/视频文件信息

为显示你的媒体文件细节,运行:

$ ffmpeg -i video.mp4

样本输出:

ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181127
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:28.79, start: 0.000000, bitrate: 454 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], 318 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
At least one output file must be specified

如你在上面的输出中看到的,FFmpeg 显示该媒体文件信息,以及 FFmpeg 细节,例如版本、配置细节、版权标记、构建参数和库选项等等。

如果你不想看 FFmpeg 标语和其它细节,而仅仅想看媒体文件信息,使用 -hide_banner 标志,像下面。

$ ffmpeg -i video.mp4 -hide_banner

样本输出:

使用 FFMpeg 查看音频、视频文件信息。

看见了吗?现在,它仅显示媒体文件细节。

2、转换视频文件到不同的格式

FFmpeg 是强有力的音频和视频转换器,因此,它能在不同格式之间转换媒体文件。举个例子,要转换 mp4 文件到 avi 文件,运行:

$ ffmpeg -i video.mp4 video.avi

类似地,你可以转换媒体文件到你选择的任何格式。

例如,为转换 YouTube flv 格式视频为 mpeg 格式,运行:

$ ffmpeg -i video.flv video.mpeg

如果你想维持你的源视频文件的质量,使用 -qscale 0 参数:

$ ffmpeg -i input.webm -qscale 0 output.mp4

为检查 FFmpeg 的支持格式的列表,运行:

$ ffmpeg -formats

3、转换视频文件到音频文件

我转换一个视频文件到音频文件,只需具体指明输出格式,像 .mp3,或 .ogg,或其它任意音频格式。

上面的命令将转换 input.mp4 视频文件到 output.mp3 音频文件。

$ ffmpeg -i input.mp4 -vn output.mp3

此外,你也可以对输出文件使用各种各样的音频转换编码选项,像下面演示。

$ ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3

在这里,

  • -vn – 表明我们已经在输出文件中禁用视频录制。
  • -ar – 设置输出文件的音频频率。通常使用的值是22050 Hz、44100 Hz、48000 Hz。
  • -ac – 设置音频通道的数目。
  • -ab – 表明音频比特率。
  • -f – 输出文件格式。在我们的实例中,它是 mp3 格式。

4、更改视频文件的分辨率

如果你想设置一个视频文件为指定的分辨率,你可以使用下面的命令:

$ ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4

或,

$ ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4

上面的命令将设置所给定视频文件的分辨率到 1280×720。

类似地,为转换上面的文件到 640×480 大小,运行:

$ ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4

或者,

$ ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4

这个技巧将帮助你缩放你的视频文件到较小的显示设备上,例如平板电脑和手机。

5、压缩视频文件

减小媒体文件的大小到较小来节省硬件的空间总是一个好主意.

下面的命令将压缩并减少输出文件的大小。

$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

请注意,如果你尝试减小视频文件的大小,你将损失视频质量。如果 24 太有侵略性,你可以降低 -crf 值到或更低值。

你也可以通过下面的选项来转换编码音频降低比特率,使其有立体声感,从而减小大小。

-ac 2 -c:a aac -strict -2 -b:a 128k

6、压缩音频文件

正像压缩视频文件一样,为节省一些磁盘空间,你也可以使用 -ab 标志压缩音频文件。

例如,你有一个 320 kbps 比特率的音频文件。你想通过更改比特率到任意较低的值来压缩它,像下面。

$ ffmpeg -i input.mp3 -ab 128 output.mp3

各种各样可用的音频比特率列表是:

  1. 96kbps
  2. 112kbps
  3. 128kbps
  4. 160kbps
  5. 192kbps
  6. 256kbps
  7. 320kbps

7、从一个视频文件移除音频流

如果你不想要一个视频文件中的音频,使用 -an 标志。

$ ffmpeg -i input.mp4 -an output.mp4

在这里,-an 表示没有音频录制。

上面的命令会撤销所有音频相关的标志,因为我们不要来自 input.mp4 的音频。

8、从一个媒体文件移除视频流

类似地,如果你不想要视频流,你可以使用 -vn 标志从媒体文件中简单地移除它。-vn 代表没有视频录制。换句话说,这个命令转换所给定媒体文件为音频文件。

下面的命令将从所给定媒体文件中移除视频。

$ ffmpeg -i input.mp4 -vn output.mp3

你也可以使用 -ab 标志来指出输出文件的比特率,如下面的示例所示。

$ ffmpeg -i input.mp4 -vn -ab 320 output.mp3

9、从视频中提取图像

FFmpeg 的另一个有用的特色是我们可以从一个视频文件中轻松地提取图像。如果你想从一个视频文件中创建一个相册,这可能是非常有用的。

为从一个视频文件中提取图像,使用下面的命令:

$ ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png

在这里,

  • -r – 设置帧速度。即,每秒提取帧到图像的数字。默认值是 25。
  • -f – 表示输出格式,即,在我们的实例中是图像。
  • image-%2d.png – 表明我们如何想命名提取的图像。在这个实例中,命名应该像这样image-01.png、image-02.png、image-03.png 等等开始。如果你使用 %3d,那么图像的命名像 image-001.png、image-002.png 等等开始。

10、裁剪视频

FFMpeg 允许以我们选择的任何范围裁剪一个给定的媒体文件。

裁剪一个视频文件的语法如下给定:

ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4

在这里,

  • input.mp4 – 源视频文件。
  • -filter:v – 表示视频过滤器。
  • crop – 表示裁剪过滤器。
  • w – 我们想自源视频中裁剪的矩形的宽度。
  • h – 矩形的高度。
  • x – 我们想自源视频中裁剪的矩形的 x 坐标 。
  • y – 矩形的 y 坐标。

比如说你想要一个来自视频的位置 (200,150),且具有 640 像素宽度和 480 像素高度的视频,命令应该是:

$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4

请注意,剪切视频将影响质量。除非必要,请勿剪切。

11、转换一个视频的具体的部分

有时,你可能想仅转换视频文件的一个具体的部分到不同的格式。以示例说明,下面的命令将转换所给定视频input.mp4 文件的开始 10 秒到视频 .avi 格式。

$ ffmpeg -i input.mp4 -t 10 output.avi

在这里,我们以秒具体说明时间。此外,以 hh.mm.ss 格式具体说明时间也是可以的。

12、设置视频的屏幕高宽比

你可以使用 -aspect 标志设置一个视频文件的屏幕高宽比,像下面。

$ ffmpeg -i input.mp4 -aspect 16:9 output.mp4

通常使用的高宽比是:

  • 16:9
  • 4:3
  • 16:10
  • 5:4
  • 2:21:1
  • 2:35:1
  • 2:39:1

13、添加海报图像到音频文件

你可以添加海报图像到你的文件,以便图像将在播放音频文件时显示。这对托管在视频托管主机或共享网站中的音频文件是有用的。

$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4

14、使用开始和停止时间剪下一段媒体文件

可以使用开始和停止时间来剪下一段视频为小段剪辑,我们可以使用下面的命令。

$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4

在这里,

  • –ss – 表示视频剪辑的开始时间。在我们的示例中,开始时间是第 50 秒。
  • -t – 表示总的持续时间。

当你想使用开始和结束时间从一个音频或视频文件剪切一部分时,它是非常有用的。

类似地,我们可以像下面剪下音频。

$ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3

15、切分视频文件为多个部分

一些网站将仅允许你上传具体指定大小的视频。在这样的情况下,你可以切分大的视频文件到多个较小的部分,像下面。

$ ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4

在这里,

  • -t 00:00:30 表示从视频的开始到视频的第 30 秒创建一部分视频。
  • -ss 00:00:30 为视频的下一部分显示开始时间戳。它意味着第 2 部分将从第 30 秒开始,并将持续到原始视频文件的结尾。

16、接合或合并多个视频部分到一个

FFmpeg 也可以接合多个视频部分,并创建一个单个视频文件。

创建包含你想接合文件的准确的路径的 join.txt。所有的文件都应该是相同的格式(相同的编码格式)。所有文件的路径应该逐个列出,像下面。

file /home/sk/myvideos/part1.mp4
file /home/sk/myvideos/part2.mp4
file /home/sk/myvideos/part3.mp4
file /home/sk/myvideos/part4.mp4

现在,接合所有文件,使用命令:

$ ffmpeg -f concat -i join.txt -c copy output.mp4

如果你得到一些像下面的错误;

[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'
join.txt: Operation not permitted

添加 -safe 0 :

$ ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4

上面的命令将接合 part1.mp4、part2.mp4、part3.mp4 和 part4.mp4 文件到一个称为 output.mp4 的单个文件中。

17、添加字幕到一个视频文件

我们可以使用 FFmpeg 来添加字幕到视频文件。为你的视频下载正确的字幕,并如下所示添加它到你的视频。

$ fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4

18、预览或测试视频或音频文件

你可能希望通过预览来验证或测试输出的文件是否已经被恰当地转码编码。为完成预览,你可以从你的终端播放它,用命令:

$ ffplay video.mp4

类似地,你可以测试音频文件,像下面所示。

$ ffplay audio.mp3

19、增加/减少视频播放速度

FFmpeg 允许你调整视频播放速度。

为增加视频播放速度,运行:

$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

该命令将双倍视频的速度。

为降低你的视频速度,你需要使用一个大于 1 的倍数。为减少播放速度,运行:

$ ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4

20、创建动画的 GIF

出于各种目的,我们在几乎所有的社交和专业网络上使用 GIF 图像。使用 FFmpeg,我们可以简单地和快速地创建动画的视频文件。下面的指南阐释了如何在类 Unix 系统中使用 FFmpeg 和 ImageMagick 创建一个动画的 GIF 文件。

21、从 PDF 文件中创建视频

我长年累月的收集了很多 PDF 文件,大多数是 Linux 教程,保存在我的平板电脑中。有时我懒得从平板电脑中阅读它们。因此,我决定从 PDF 文件中创建一个视频,在一个大屏幕设备(像一台电视机或一台电脑)中观看它们。如果你想知道如何从一批 PDF 文件中制作一个电影,下面的指南将帮助你。

22、获取帮助

在这个指南中,我已经覆盖大多数常常使用的 FFmpeg 命令。它有很多不同的选项来做各种各样的高级功能。要学习更多用法,请参考手册页。

$ man ffmpeg

这就是全部了。我希望这个指南将帮助你入门 FFmpeg。如果你发现这个指南有用,请在你的社交和专业网络上分享它。更多好东西将要来。敬请期待!

谢谢!


via: https://www.ostechnix.com/20-ffmpeg-commands-beginners/

作者:sk 选题:lujun9972 译者:robsean 校对:wxy

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

几天前,我们发布了一篇指南,其中涵盖了开始使用 Docker 时需要了解的几乎所有细节。在该指南中,我们向你展示了如何详细创建和管理 Docker 容器。还有一些可用于管理 Docker 容器的非官方工具。如果你看过我们以前的文章,你可能会看到两个基于 Web 的工具,PortainerPiCluster。它们都使得 Docker 管理任务在 Web 浏览器中变得更加容易和简单。今天,我遇到了另一个名为 Dockly 的 Docker 管理工具。

与上面的工具不同,Dockly 是一个 TUI(文本界面)程序,用于在类 Unix 系统中从终端管理 Docker 容器和服务。它是使用 NodeJS 编写的自由开源工具。在本简要指南中,我们将了解如何安装 Dockly 以及如何从命令行管理 Docker 容器。

安装 Dockly

确保已在 Linux 上安装了 NodeJS。如果尚未安装,请参阅以下指南。

安装 NodeJS 后,运行以下命令安装 Dockly:

# npm install -g dockly

使用 Dockly 在终端管理 Docker 容器

使用 Dockly 管理 Docker 容器非常简单!你所要做的就是打开终端并运行以下命令:

# dockly

Dockly 将通过 unix 套接字自动连接到你的本机 docker 守护进程,并在终端中显示正在运行的容器列表,如下所示。

使用 Dockly 管理 Docker 容器

正如你在上面的截图中看到的,Dockly 在顶部显示了运行容器的以下信息:

  • 容器 ID,
  • 容器名称,
  • Docker 镜像,
  • 命令,
  • 运行中容器的状态,
  • 状态。

在右上角,你将看到容器的 CPU 和内存利用率。使用向上/向下箭头键在容器之间移动。

在底部,有少量的键盘快捷键来执行各种 Docker 管理任务。以下是目前可用的键盘快捷键列表:

  • = - 刷新 Dockly 界面,
  • / - 搜索容器列表视图,
  • i - 显示有关当前所选容器或服务的信息,
  • 回车 - 显示当前容器或服务的日志,
  • v - 在容器和服务视图之间切换,
  • l - 在选定的容器上启动 /bin/bash 会话,
  • r - 重启选定的容器,
  • s - 停止选定的容器,
  • h - 显示帮助窗口,
  • q - 退出 Dockly。

查看容器的信息

使用向上/向下箭头选择一个容器,然后按 i 以显示所选容器的信息。

查看容器的信息

重启容器

如果你想随时重启容器,只需选择它并按 r 即可重新启动。

重启 Docker 容器

停止/删除容器和镜像

如果不再需要容器,我们可以立即停止和/或删除一个或所有容器。为此,请按 m 打开菜单。

停止,删除 Docker 容器和镜像

在这里,你可以执行以下操作。

  • 停止所有 Docker 容器,
  • 删除选定的容器,
  • 删除所有容器,
  • 删除所有 Docker 镜像等。

显示 Dockly 帮助部分

如果你有任何疑问,只需按 h 即可打开帮助部分。

Dockly 帮助

有关更多详细信息,请参考最后给出的官方 GitHub 页面。

就是这些了。希望这篇文章有用。如果你一直在使用 Docker 容器,请试试 Dockly,看它是否有帮助。

建议阅读:

资源:


via: https://www.ostechnix.com/dockly-manage-docker-containers-from-terminal/

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

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