2018年2月

我尝试尽可能的保持心灵祥和,然而总有一些事情让我意难平,比如控制台字体太小了。记住我的话,朋友,有一天你的眼睛会退化,无法再看清你编码时用的那些细小字体,到那时你就后悔莫及了。

幸好,Linux 死忠们,你可以更改控制台的字体。按照 Linux 一贯的尿性,不断变化的 Linux 环境使得这个问题变得不太简单明了,而 Linux 上也没有字体管理这么个东西,这使得我们很容易就被搞晕了。本文,我将会向你展示,我找到的更改字体的最简方法。

Linux 控制台是个什么鬼?

首先让我们来澄清一下我们说的到底是个什么东西。当我提到 Linux 控制台,我指的是 TTY1-6,即你从图形环境用 Ctrl-Alt-F1F6 切换到的虚拟终端。按下 Ctrl+Alt+F7 会切回图形环境。(不过这些热键已经不再通用,你的 Linux 发行版可能有不同的键映射。你的 TTY 的数量也可能不同,你图形环境会话也可能不在 F7。比如,Fedora 的默认图形会话是 F2,它只有一个额外的终端在 F1。) 我觉得能同时拥有 X 会话和终端会话实在是太酷了。

Linux 控制台是内核的一部分,而且并不运行在 X 会话中。它和你在没有图形环境的 无头 headless 服务器中用的控制台是一样的。我称呼在图形会话中的 X 终端为终端,而将控制台和 X 终端统称为终端模拟器。

但这还没完。Linux 终端从早期的 ANSI 时代开始已经经历了长久的发展,多亏了 Linux framebuffer,它现在支持 Unicode 并且对图形也有了有限的一些支持。而且出现了很多在控制台下运行的多媒体应用,这些我们在以后的文章中会提到。

控制台截屏

获取控制台截屏的最简单方法是让控制台跑在虚拟机内部。然后你可以在宿主系统上使用中意的截屏软件来抓取。不过借助 fbcatfbgrab 你也可以直接在控制台上截屏。fbcat 会创建一个可移植的像素映射格式(PPM)的图像; 这是一个高度可移植的未压缩图像格式,可以在所有的操作系统上读取,当然你也可以把它转换成任何喜欢的其他格式。fbgrab 则是 fbcat 的一个封装脚本,用来生成一个 PNG 文件。很多人写过多个版本的 fbgrab。每个版本的选项都有限而且只能创建截取全屏。

fbcat 的执行需要 root 权限,而且它的输出需要重定向到文件中。你无需指定文件扩展名,只需要输入文件名就行了:

$ sudo fbcat > Pictures/myfile

在 GIMP 中裁剪后,就得到了图 1。

图 1 : 裁剪后查看

如果能在左边空白处有一点填充就好了,如果有读者知道如何实现请在留言框中告诉我。

fbgrab 还有一些选项,你可以通过 man fbgrab 来查看,这些选项包括对另一个控制台进行截屏,以及延时截屏等。在下面的例子中可以看到,fbgrab 截屏跟 fbcat 截屏类似,只是你无需明确进行输出重定性了:

$ sudo fbgrab Pictures/myOtherfile

查找字体

就我所知,除了查看字体存储目录 /usr/share/consolefonts/(Debian 等),/lib/kbd/consolefonts/ (Fedora),/usr/share/kbd/consolefonts (openSUSE)外没有其他方法可以列出已安装的字体了。

更改字体

可读字体不是什么新概念。我们应该尊重以前的经验!可读性是很重要的。可配置性也很重要,然而现如今却不怎么看重了。

在 Debian/Ubuntu 等系统上,可以运行 sudo dpkg-reconfigure console-setup 来设置控制台字体,然后在控制台运行 setupcon 命令来让变更生效。setupcon 属于 console-setup 软件包中的一部分。若你的 Linux 发行版中不包含该工具,可以在 openSUSE 中下载到它。

你也可以直接编辑 /etc/default/console-setup 文件。下面这个例子中设置字体为 32 点大小的 Terminus Bold 字体,这是我的最爱,并且严格限制控制台宽度为 80 列。

ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="guess"
FONTFACE="TerminusBold"
FONTSIZE="16x32"
SCREEN_WIDTH="80"

这里的 FONTFACEFONTSIZE 的值来自于字体的文件名 TerminusBold32x16.psf.gz。是的,你需要反转 FONTSIZE 中值的顺序。计算机就是这么搞笑。然后再运行 setupcon 来让新配置生效。可以使用 showconsolefont 来查看当前所用字体的所有字符集。要查看完整的选项说明请参考 man console-setup

Systemd

Systemd 与 console-setup 不太一样,除了字体之外,你无需安装任何东西。你只需要编辑 /etc/vconsole.conf 然后重启就行了。我在 Fedora 和 openSUSE 系统中安装了一些额外的大字号的 Terminus 字体包,因为默认安装的字体最大只有 16 点而我想要的是 32 点。然后将 /etc/vconsole.conf 的内容修改为:

KEYMAP="us"
FONT="ter-v32b"

下周我们还将学习一些更加酷的控制台小技巧,以及一些在控制台上运行的多媒体应用


via: https://www.linux.com/learn/intro-to-linux/2018/1/how-change-your-linux-console-fonts

作者:Carla Schroder 译者:lujun9972 校对:wxy

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

在 Linux 系统上,有大量的文件系统可以使用,那么我们为什么还要尝试一个新的文件系统?它们都工作的很好,不是吗?但是它们并不完全相同,其中的一些文件系统具有非常突出的优点,例如 ZFS。

为什么选择 ZFS

ZFS 非常的优秀。这是一个真正现代的文件系统,内置的功能对于处理大量的数据很有意义。

现在,如果您正在考虑将 ZFS 用于您的超高速 NVMe SSD,这可能不是一个最佳选择。 它比别的文件系统要慢,不过,这完全没有问题, 它旨在存储大量的数据并保持安全。

ZFS 消除了建立传统 RAID 阵列(LCTT 译注:独立磁盘冗余阵列)的需要。 相反,您可以创建 ZFS 池,甚至可以随时将驱动器添加到这些池中。 ZFS 池的行为操作与 RAID 几乎完全相同,但功能内置于文件系统中。

ZFS 也可以替代 LVM (LCTT 译注:逻辑盘卷管理),使您能够动态地进行分区和管理分区,而无需处理底层的细节,也不必担心相关的风险。

这也是一个 CoW (LCTT 译注:写时复制)文件系统。 这里不会提及太多的技术性,这意味着 ZFS 可以保护您的数据免受逐渐损坏的影响。 ZFS 会创建文件的校验和,并允许您将这些文件回滚到以前的工作版本。

安装 ZFS

 title=

在 Ubuntu 上安装 ZFS 非常简单,但对于 Ubuntu LTS (LCTT 译注:长时间支持版本)和最新版本来说,这个过程稍有不同。

Ubuntu 16.04 LTS

sudo apt install zfs

Ubuntu 17.04 及以后

sudo apt install zfsutils

当你安装好程序后,可以使用 ZFS 提供的工具创建 ZFS 驱动器和分区。

创建池

 title=

在 ZFS 中,池大致相当于 RAID 。 它们很灵活且易于操作。

RAID0

RAID0 只是把你的硬盘集中到一个池子里面,就像一个巨大的驱动器一样。 它可以提高你的驱动器速度,(LCTT 译注:数据条带化后,并行访问,可以提高文件读取速度)但是如果你的驱动器有损坏,你可能会失丢失数据。

要使用 ZFS 实现 RAID0,只需创建一个普通的池。

sudo zpool create your-pool /dev/sdc /dev/sdd

RAID1(镜像)

您可以在 ZFS 中使用 mirror 关键字来实现 RAID1 功能。 RAID1 会创建一个一对一的驱动器副本。 这意味着您的数据一直在备份。 它也提高了性能。 当然,你将一半的存储空间用于了复制。

sudo zpool create your-pool mirror /dev/sdc /dev/sdd

RAID5/RAIDZ1

ZFS 将 RAID5 功能实现为 RAIDZ1。 RAID5 要求驱动器至少是 3 个。并允许您通过将备份奇偶校验数据写入驱动器空间的 1/n(n 是驱动器数),留下的是可用的存储空间。 如果一个驱动器发生故障,阵列仍将保持联机状态,但应尽快更换发生故障的驱动器(LCTT 译注:与原文翻译略有不同,原文是驱动器的数目是三的倍数,根据 wiki, RAID5 至少需要 3 块驱动器,也可以从下面的命令中猜测)。

sudo zpool create your-pool raidz1 /dev/sdc /dev/sdd /dev/sde

RAID6/RAIDZ2

RAID6 与 RAID5 几乎完全相同,但它至少需要四个驱动器。 它将奇偶校验数据加倍,最多允许两个驱动器损坏,而不会导致阵列关闭(LCTT 译注:这里也与原文略有出入,原文是驱动器的数目是四的倍数,根据 wiki ,RAID6 至少需要四个驱动器)。

sudo zpool create your-pool raidz2 /dev/sdc /dev/sdd /dev/sde /dev/sdf

RAID10(条带化镜像)

RAID10 旨在通过数据条带化提高存取速度和数据冗余来成为一个两全其美的解决方案。 你至少需要四个驱动器,但只能使用一半的空间。 您可以通过在同一个池中创建两个镜像来创建 RAID10 中的池(LCTT 译注:这里也与原文略有出入,原文是驱动器的数目是四的倍数,根据 wiki, RAID10 至少需要四个驱动器)。

sudo zpool create your-pool mirror /dev/sdc /dev/sdd mirror /dev/sde /dev/sdf

池的操作

 title=

还有一些管理工具,一旦你创建了你的池,你就必须使用它们来操作。 首先,检查你的池的状态。

sudo zpool status

更新

当你更新 ZFS 时,你也需要更新你的池。 当您检查它们的状态时,您的池会通知您任何更新。 要更新池,请运行以下命令。

sudo zpool upgrade your-pool

你也可以更新全部池。

sudo zpool upgrade -a

添加驱动器

您也可以随时将驱动器添加到池中。 告诉 zpool 池的名称和驱动器的位置,它会处理好一切。

sudo zpool add your-pool /dev/sdx

其它的一些想法

 title=

ZFS 会在您的池的根文件系统中创建一个目录。 您可以使用 GUI 文件管理器或 CLI 按名称浏览它们。

ZFS 非常强大,还有很多其它的东西可以用它来做,但这些都是基础。 这是一个优秀的存储负载文件系统,即使它只是一个用于文件的硬盘驱动器的 RAID 阵列。 ZFS 在 NAS 系统上也非常出色。

无论 ZFS 的稳定性和可靠性如何,在您的硬盘上实施新的功能时,最好备份您的数据。


via: https://www.maketecheasier.com/use-zfs-filesystem-ubuntu-linux/

作者:Nick Congleton 译者:amwps290 校对:wxy

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

每个人都知道 PID,究竟什么是 PID?为什么你想要 PID?你打算用 PID 做什么?你脑子里有同样的问题吗?如果是这样,你就找对地方了解这些细节了。

我们查询 PID 主要是用来杀死一个没有响应的程序,它类似于 Windows 任务管理器一样。 Linux GUI 也提供相同的功能,但 CLI 是执行 kill 操作的有效方法。

什么是进程 ID?

PID 代表 进程标识号 process identification ,它在大多数操作系统内核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系统中创建时自动分配给每个进程的唯一标识号。一个进程是一个正在运行的程序实例。

建议阅读: 如何查看 Apache Web 服务器在 Linux 中的运行时间

除了 init 进程外其他所有的进程 ID 每次都会改变,因为 init 始终是系统上的第一个进程,并且是所有其他进程的父进程。它的 PID 是 1。

PID 默认的最大值是 32768。可以在你的系统上运行 cat /proc/sys/kernel/pid_max 来验证。在 32 位系统上,32768 是最大值,但是我们可以在 64 位系统上将其设置为最大 2 22(约 4 百万)内的任何值。

你可能会问,为什么我们需要这么多的 PID?因为我们不能立即重用 PID,这就是为什么。另外为了防止可能的错误。

系统正在运行的进程的 PID 可以通过使用 pidofpgreppspstree 命令找到。

方法 1:使用 pidof 命令

pidof 用于查找正在运行的程序的进程 ID。它在标准输出上打印这些 id。为了演示,我们将在 Debian 9(stretch)系统中找出 Apache2 的进程 ID。

# pidof apache2
3754 2594 2365 2364 2363 2362 2361

从上面的输出中,你可能会遇到难以识别进程 ID 的问题,因为它通过进程名称显示了所有的 PID(包括父进程和子进程)。因此,我们需要找出父 PID(PPID),这是我们要查找的。它可能是第一个数字。在本例中,它是 3754,并按降序排列。

方法 2:使用 pgrep 命令

pgrep 遍历当前正在运行的进程,并将符合选择条件的进程 ID 列到标准输出中。

# pgrep apache2
2361
2362
2363
2364
2365
2594
3754

这也与上面的输出类似,但是它将结果从小到大排序,这清楚地说明父 PID 是最后一个。在本例中,它是 3754

注意: 如果你有多个进程的进程 ID,那么在使用 pidofpgrep 识别父进程 ID 时就可能不会很顺利。

方法 3:使用 pstree 命令

pstree 将运行的进程显示为一棵树。树的根是某个 pid,如果省略了 pid 参数,那么就是 init。如果在 pstree 命令中指定了用户名,则显示相应用户拥有的所有进程。

pstree 会将相同的分支放在方括号中,并添加重复计数的前缀来可视化地合并到一起。

# pstree -p | grep "apache2"
 |- apache2(3754) -|-apache2(2361)
 | |-apache2(2362)
 | |-apache2(2363)
 | |-apache2(2364)
 | |-apache2(2365)
 | `-apache2(2594)

要单独获取父进程,请使用以下格式。

# pstree -p | grep "apache2" | head -1
 |- apache2(3754) -|-apache2(2361)

pstree 命令非常简单,因为它分别隔离了父进程和子进程,但这在使用 pidofpgrep 时命令不容易做到。

方法 4:使用 ps 命令

ps 显示活动进程的选择信息。它显示进程 ID(pid=PID)、与进程关联的终端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)显示的累计 CPU 时间、以及执行名(ucmd = CMD)。输出默认是未排序的。

# ps aux | grep "apache2"
www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start
root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start
root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2

从上面的输出中,我们可以根据进程的启动日期轻松地识别父进程 ID(PPID)。在此例中,apache2 启动于 Dec 11,它是父进程,其他的是子进程。apache2 的 PID 是 3754


via: https://www.2daygeek.com/how-to-check-find-the-process-id-pid-ppid-of-a-running-program-in-linux/

作者:Magesh Maruthamuthu 译者:geekpi 校对:wxy

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

内置命令包含在 bash shell 本身里面。我该如何在 Linux / Apple OS X / *BSD / Unix 类操作系统列出所有的内置 bash 命令,而不用去读大篇的 bash 操作说明页?

shell 内置命令就是一个命令或一个函数,从 shell 中调用,它直接在 shell 中执行。 bash shell 直接执行该命令而无需调用其他程序。你可以使用 help 命令查看 Bash 内置命令的信息。以下是几种不同类型的内置命令。

内置命令的类型

  1. Bourne Shell 内置命令:内置命令继承自 Bourne Shell。
  2. Bash 内置命令:特定于 Bash 的内置命令表。
  3. 修改 Shell 行为:修改 shell 属性和可选行为的内置命令。
  4. 特别的内置命令:由 POSIX 特别分类的内置命令。

如何查看所有 bash 内置命令

有以下的命令:

$ help
$ help | less
$ help | grep read 

样例输出:

GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 job_spec [&]                            history [-c] [-d offset] [n] or hist>
 (( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
 . filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
 :                                       kill [-s sigspec | -n signum | -sigs>
 [ arg... ]                              let arg [arg ...]
 [[ expression ]]                        local [option] name[=value] ...
 alias [-p] [name[=value] ... ]          logout [n]
 bg [job_spec ...]                       mapfile [-n count] [-O origin] [-s c>
 bind [-lpvsPVS] [-m keymap] [-f filen>  popd [-n] [+N | -N]
 break [n]                               printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
 caller [expr]                           pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
 cd [-L|-P] [dir]                        readarray [-n count] [-O origin] [-s>
 command [-pVv] command [arg ...]        readonly [-af] [name[=value] ...] or>
 compgen [-abcdefgjksuv] [-o option]  >  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
 compopt [-o|+o option] [-DE] [name ..>  set [--abefhkmnptuvxBCHP] [-o option>
 continue [n]                            shift [n]
 coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFilrtux] [-p] [name[=val>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                  suspend [-f]
 disown [-h] [-ar] [jobspec ...]         test [expr]
 echo [-neE] [arg ...]                   time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [na>  times
 eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [argume>  true
 exit [n]                                type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or ex>  typeset [-aAfFilrtux] [-p] name[=val>
 false                                   ulimit [-SHacdefilmnpqrstuvx] [limit>
 fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
 fg [job_spec]                           unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [name ...]
 for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name >  variables - Names and meanings of so>
 getopts optstring name [arg]            wait [id]
 hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]               { COMMANDS ; }

另外一种选择是使用下列命令:

compgen -b
compgen -b | more

查看 Bash 的内置命令信息

运行以下得到详细信息:

help command
help read

要仅得到所有带简短描述的内置命令的列表,执行如下:

$ help -d

查找内置命令的语法和其他选项

使用下列语法去找出更多的相关内置命令:

help name 
help cd 
help fg 
help for 
help read 
help :

样例输出:

:: :
 Null command.
 
 No effect; the command does nothing.
 
 Exit Status:
 Always succeeds

找出一个命令是内部的(内置)还是外部的

使用 type 命令或 command 命令:

type -a command-name-here 
type -a cd 
type -a uname 
type -a : 
type -a ls

或者:

type -a cd uname : ls uname

样例输出:

cd is a shell builtin
uname is /bin/uname
: is a shell builtin
ls is aliased to `ls --color=auto'
ls is /bin/ls
l is a function
l ()
{
 ls --color=auto
}

或者:

command -V ls 
command -V cd 
command -V foo

View list bash built-ins command info on Linux or Unix

关于作者

作者是 nixCraft 网站的发起人和经验丰富的系统管理员,以及 Linux 操作系统/Unix shell 脚本编程培训师。他与全球客户以及包括 IT、教育、国防和空间研究以及非营利部门在内的各个行业合作。可以在 TwitterFacebookGoogle+ 上关注他。


via: https://www.cyberciti.biz/faq/linux-unix-bash-shell-list-all-builtin-commands/

作者:Vivek Gite 译者:KarenMrzhang 校对:wxy

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

在本教程中,我们将学习安装 VNC 服务器并使用 TLS 加密保护 VNC 会话。

此方法已经在 CentOS 6&7 上测试过了,但是也可以在其它的版本/操作系统上运行(RHEL、Scientific Linux 等)。

(推荐阅读:保护 SSH 会话终极指南

安装 VNC 服务器

在机器上安装 VNC 服务器之前,请确保我们有一个可用的 GUI(图形用户界面)。如果机器上还没有安装 GUI,我们可以通过执行以下命令来安装:

yum groupinstall "GNOME Desktop"

现在我们将 tigervnc 作为我们的 VNC 服务器,运行下面的命令运行:

# yum install tigervnc-server

安装完成后,我们将创建一个新的用户访问服务器:

# useradd vncuser

并使用以下命令为其分配访问 VNC 的密码:

# vncpasswd vncuser

我们在 CentOS 6&7 上配置会有一点改变,我们首先看 CentOS 6 的配置。

CentOS 6

现在我们需要编辑 VNC 配置文件:

# vim /etc/sysconfig/vncservers

并添加下面这几行:

[ …]
VNCSERVERS= "1:vncuser"
VNCSERVERARGS[1]= "-geometry 1024×768″

保存文件并退出。接下来重启 vnc 服务使改动生效:

# service vncserver restart

并在启动时启用它:

# chkconfig vncserver on

CentOS 7

在 CentOS 7 上,/etc/sysconfig/vncservers 已经改为 /lib/systemd/system/[email protected]。我们将使用这个配置文件作为参考,所以创建一个文件的副本,

# cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service

接下来,我们将编辑文件以包含我们创建的用户:

# vim /etc/systemd/system/vncserver@:1.service

编辑下面 2 行中的用户:

ExecStart=/sbin/runuser -l vncuser -c "/usr/bin/vncserver %i"
PIDFile=/home/vncuser/.vnc/%H%i.pid

保存文件并退出。接下来重启服务并在启动时启用它:

# systemctl restart vncserver@:1.service
# systemctl enable vncserver@:1.service

现在我们已经设置好了 VNC 服务器,并且可以使用 VNC 服务器的 IP 地址从客户机连接到它。但是,在此之前,我们将使用 TLS 加密保护我们的连接。

保护 VNC 会话

要保护 VNC 会话,我们将首先配置加密方法。我们将使用 TLS 加密,但也可以使用 SSL 加密。执行以下命令在 VNC 服务器上使用 TLS 加密:

# vncserver -SecurityTypes=VeNCrypt,TLSVnc

你将被要求输入密码来访问 VNC(如果使用其他用户,而不是上述用户)。

secure vnc server

现在,我们可以使用客户机上的 VNC 浏览器访问服务器,使用以下命令以安全连接启动 vnc 浏览器:

# vncviewer -SecurityTypes=VeNCrypt,TLSVnc 192.168.1.45:1

这里,192.168.1.45 是 VNC 服务器的 IP 地址。

secure vnc server

输入密码,我们可以远程访问服务器,并且也是 TLS 加密的。

这篇教程就完了,欢迎随时使用下面的评论栏提交你的建议或疑问。


via: http://linuxtechlab.com/secure-vnc-server-tls-encryption/

作者:Shusain 译者:geekpi 校对:wxy

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

预测数字货币价格是一场愚人游戏,然而我想试试。单一数字货币价值的驱动因素目前太多,而且含糊不清,无法根据任何一点进行评估。或许新闻正报道说比特币呈上升趋势,但与此同时,有黑客攻击或是交易所 API 错误,就让比特币的价格下跌。以太坊看起来不够智能?谁知道呢,也许第二天就建立一个新的更智能的 DAO(LCTT 译注:区块链上,基于激励的经济协调机制,以代码作为表达,通过互联网进行传输,允许人们参与数字企业的风险&回报(即分配),代币创建了 DAO 参与者之间的经济链接)将吸引大量参与者。

那么,您该如何投资呢?又或是更准确的讲,您下注在哪种数字货币上呢?

理解什么时候买卖和持有数字货币,关键是使用与评估开源项目价值的相关工具。这已经一次又一次地被提及了,但是为了理解当前数字货币的快速发展,您必须回到 Linux 悄然兴起的时候。

互联网泡沫期间,Linux 出现在大众视野中。那时候,如果您想建立一个 Web 服务器,您必须将一台 Windows 服务器或者 Sun Sparc 工作站运送到一个服务器托管机房,在那里它将为传送 Pets.com(LCTT 译注:一个在线宠物商店,借着互联网繁荣的机会崛起,在互联网泡沫破裂时倒闭)的 HTML 页面而做出努力。与此同时,Linux 就像运行在微软和 Sun 公司平行路径上的货运列车一样,可以让开发人员使用日新月异的操作系统和工具集,快速、轻松地构建一次性项目。相比之下,解决方案提供商的花费比软硬件支出少得多,很快,所有科技巨头的业务由软件转向了服务提供,例如 Sun 公司。

Linux 的萌发促使整个开源市场蓬勃发展起来。但是有一个关键的问题,您无法从开源软件中赚钱。您可以提供服务,也可以销售使用开源组件的产品,但早期开源者主要是为了提升自我,而不是为了赚钱。

数字货币几乎完全遵循 Linux 的老路,但数字货币具有一定货币价值。因此,当您在为一个区块链项目工作时,您不是为了公共利益,也不是为了编写自由软件的乐趣,而是您写它的时候期望得到一大笔钱。因此,这掩盖了许多程序员的价值判断。那些给您带来了 Python、PHP、Django 和 Node.js 的人们回来了……而现在他们正在通过编程赚钱。

审查代码库

今年将是代币销售和数字货币领域大清算的一年。虽然许多公司已经能够摆脱糟糕的或不可用的代码库,但我怀疑开发人员是否能让未来的公司摆脱如此云山雾罩的东西。可以肯定地说,我们可以期待像这样详细描述 Storj 代码库不足之处的文章成为规范,这些评论会让许多所谓的“ICO” 们(LCTT 译注:代币首次发行融资)陷入困境。虽然规模巨大,但 ICO 的资金渠道是有限的,在某种程度上不完整的项目会被更严格的审查。

这是什么意思呢?这意味着要了解数字货币,您必须像对待创业公司那样对待它。您要看它是否有一个好团队?它是否是一个好产品?是否能运作?会有人想要使用它吗?现在评估整个数字货币的价值还为时过早,但如果我们假设代币将成为未来计算机互相支付的方式,这就让我们摆脱了许多疑问。毕竟,2000 年没有多少人知道 Apache 会在一个竞争激烈的市场上,几乎击败其他所有的 Web 服务器,或者像 Ubuntu 一样常见以至于可以随时可以搭建和拆毁它们。

理解数字货币价值的关键是忽视泡沫、炒作、恐惧、迷惑和怀疑心理,而是关注其真正的效用。您认为有一天您的手机会为另外一个手机付款,比如游戏内的额外费用吗? 您是否认为信用卡系统会在互联网出现后消失?您是否期望有一天,在生活中花费一点点钱,让自己过得更加舒适?然后,通过一切手段,购买并持有您认为将来可能会使您的生活过得更舒适的东西。如果您认为通过 TCP/IP 互联网的方式并不能够改善您的生活(或是您对其没有足够的了解),那么您可能就不会关注这些。纳斯达克总是开放的,至少在银行的营业时间。

好的,下面是我的预测。

预测

以下是我在考虑加密货币的“投资”时应该考虑的事项评估。在我们开始之前,先讲下注意事项:

  • 数字货币不是真正的货币投资,而是投资在未来的技术。这就好比:当您购买数字货币时,我们像是在 进取号星舰 Starship Enterprise 的甲板上交换“ 星际信用 Galactic Credit ”(LCTT 译注:《星球大战》电影中的一种货币)一般。 这是数字货币的唯一不可避免的未来。虽然您可以强制将数字货币附加到各种经济模式中,对其抱有乐观的态度,整个平台是技术乌托邦,并假设各种令人兴奋和不可能的事情将在未来几年来到。如果您有多余的现金,您喜欢《星球大战》,那么您就可以投资这些“黄金”。如果您的兄弟告诉您相关信息,结果您用信用卡买了比特币,那么您可能会要度过一段啃馒头的时间。
  • 不要相信任何人。没有担保,除了提供不是投资建议的免责声明,而且这绝不是对任何特定数字货币的背书,甚至是普遍概念,但我们必须明白,我在这里写的任何东西都可能是错误的。事实上,任何关于数字货币的文章都可能是错误的,任何试图卖给您吹得天花乱坠的代币的人,几乎肯定是骗子。总之,每个人都是错的,每个人都想要得到您的钱,所以要非常、非常小心。
  • 您也可以持有。如果您是在 18000 美元的价位买的比特币,您最好还是继续持有下去。 现在您就好像正处于帕斯卡赌注。(LCTT 译注:论述——我不知道上帝是否存在,如果他不存在,作为无神论者没有任何好处,但是如果他存在,作为无神论者我将有很大的坏处。所以,宁愿相信上帝存在)是的,也许您因为数字货币让您赔钱而生气,但也许您只是因为您的愚蠢和自大,但现在您不妨保持信仰,因为没有什么是必然的,或者您可以承认您是有点过于热切。虽然现在您被惩罚,但要相信有比特币之神在注视着您。最终您需要深吸一口气,同意这一切都相当怪异,并坚持下去。

现在回过头来评估数字货币。

比特币 —— 预计明年的涨幅将超过目前的低点。此外,世界各地的证券交易委员会和其他联邦机构也会开始以实际行动调整加密货币的买卖。现在银行开玩笑说,他们想要降低数字货币的风险。因此,比特币将成为数字黄金,成为投机者稳定,乏味但充满波动的避风港。尽管所有都不能用作真正的货币,但对于我们所需要的东西来说,这已经足够了,我们也可以期待量子计算的产品去改变最古老,最熟悉的加密货币的面貌。

以太坊 —— 只要创造者 Vitalik Buterin 不再继续泼冷水,以太坊在价格上可以维持在上千美元。像一个懊悔的 维克多·弗兰肯斯坦 Victor Frankenstein (LCTT 译注:来自《维克多·弗兰肯斯坦》电影的一名角色),Buterin 倾向于做出惊人的事情,然后在网上诋毁他们,这种自我鞭策在充满泡沫和谎言的空间中实际上是非常有用的。以太坊是最接近我们有用的加密货币,但它本质上仍然是分布式应用。这是一个很有用,很聪明的方法,可以很容易地进行实验,但是,没有人用新的分布式数据存储或应用程序取代旧系统。总之,这是一个非常令人兴奋的技术,但是还没有人知道该用它做什么。

以太坊的价格将何去何从?它将徘徊在 1000 美元左右,今年可能高达 1500 美元,但这是一个原则性的科技项目,但却不是一个保值产品。

竞争币(LCTT 译注:除比特币,以太币之外的所有的数字币,亦称之为山寨币) —— 泡沫的标志之一是当普通人说“我买不起比特币,所以我买了莱特币”这样的话时。这正是我从许多人那里听到的,就好像说“我买不起汉堡,所以我买了一斤木屑,我想孩子们会吃的,对不对?”那您要自担风险。竞争币对于很多人来说是一个风险非常低游戏,就好比您根据一个算法创造出某个竞争币,在市值达到一定水平时卖出,那么您可以赚取一笔不错的利润。况且,大多数竞争币不会在一夜之间消失。 我诚实地推荐以太坊而不是竞争币,但是如果您死磕竞争币,那祝您玩得开心。

代币 —— 这是数字货币变得有趣的地方。代币需要研究机构和高校对技术有深入的了解,才能真正的评估。我见过的许多代币都是一场赌博,价格暴涨暴跌。我不会给其命名,但是经验法则是,如果您在公开市场上买了一个代币,那么您可能已经错过了赚钱的机会。截至 2018 年 1 月,代币销售,庄家开始投资一个代币几美分,最后得到百倍的回报。虽然许多创始人谈论他们的产品的神奇之处和他们的团队的强大,但是就是为了单车变摩托,把价值 4 美分一个的代币升值为 20 美分,再升值成一美元。您将收益乘以数百万,就能看到它的吸引力了。

答案很简单:找到您喜欢的几个项目并潜藏在他们的社区中。评估团队是否有实力,并且很早就知道该如何进入。将钱投入后就当扔掉几个月或几年。但无法保证,因为代币理念太过超前,以至于无法对其评估。

您正在阅读这篇文章,是因为您希望在这错综复杂的环境下得到一个方向。没关系,我已经跟许多数字货币创始人交谈,知道现在许多人不知道的事情,并且知道合谋和肮脏交易的准则。因此,像我们这样的人,要慢慢地分批购买,就会开始明白这究竟是怎么一回事,也许会从数字货币投资中获利。当数字货币的潜力被完全发掘,我们会得到一个像 Linux 一样的时代。


via: https://techcrunch.com/2018/01/22/how-to-price-cryptocurrencies/

作者:John Biggs 译者:wyxplus 校对:wxy

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