2017年4月

Devuan Linux 是 Debian 最新的复刻版本,是基于 Debian 的一个被设计为完全去除了 systemd 的版本。

Devuan 宣布于 2014 年底,并经过了一段活跃的开发。最新的发行版本是 beta2,发行代号为: Jessie (没错,和当前 Debian 的稳定版同名)。

当前稳定版的最后发行据说会在 2017 年初。如果想了解关于该项目的更多信息,请访问社区官网:https://devuan.org/

本文将阐述 Devuan 当前发行版的安装。在 Debian 上可用的大多数软件包在 Devuan 上也是可用的,这有利于用户从 Debian 到 Devuan 的无缝过渡,他们应该更喜欢自由选择自己的初始化系统。

系统要求

Devuan 和 Debian 类似,对系统的要求非常低。最大的决定性因素是,用户希望使用什么样的桌面环境。这篇指南假设用户将使用一个“俗气的”桌面环境,建议至少满足下面所示的最低系统要求:

  1. 至少 15GB 的硬盘空间;强烈鼓励有更大空间
  2. 至少 2GB 的内存空间;鼓励更多
  3. 支持 USB 或 CD/DVD 启动
  4. 网络连接;安装过程中将会从网上下载文件

Devuan Linux 安装

正如所有的指南一样,这篇指南假设你有一个 USB 驱动器,可作为安装媒介。注意,USB 驱动器应该有大约 4GB 或 8 GB 大,并且需要删除所有数据

作者在使用太大的 USB 驱动器遇到过问题,不过你的也许可以工作。无论如何,在接下来的一些步骤中,将导致 USB 驱动上的数据全部丢失

在开始准备安装之前,请先备份 USB 驱动器上的所有数据。这个可启动的 Linux USB 启动器要在另一个 Linux 系统上创建。

1、首先,从 https://devuan.org/ 获取最新发行版的 Devuan 安装镜像,或者,你也可以在 Linux 终端上输入下面的命令来获取安装镜像:

$ cd ~/Downloads
$ wget -c https://files.devuan.org/devuan_jessie_beta/devuan_jessie_1.0.0-beta2_amd64_CD.iso

2、上面的命令将会把安装镜像文件下载到用户的 Downloads 目录。下一步是把安装镜像写入 USB 驱动器中,从而启动安装程序。

为了写入镜像,需要使用一个在 Linux 中叫做 dd 的工具。首先,需要使用 lsblk 命令来定位硬盘名字:

$ lsblk

Find Device Name in Linux

找到 Linux 中的设备名字

USB 驱动器的名字为 /dev/sdc,现在,可以使用 dd 工具把 Devuan 镜像写入驱动器中:

$ sudo dd if=~/Downloads/devuan_jessie_1.0.0-beta2_amd64_CD.iso of=/dev/sdc

重点:上面的命令需要有 root 权限,你可以使用 sudo 或者以 root 用户登录来运行命令。同时,这个命令将会删除 USB 驱动器上的所有数据,所以请确保备份了需要的数据。

3、当镜像写入 USB 驱动器以后,把 USB 驱动器插入要安装 Devuan 的电脑上,然后从 USB 驱动器启动电脑。

从 USB 驱动器成功启动以后,将会出现下面所示的屏幕,你需要在 “Install” 和 “Graphical Install” 这两个选项间选择一个继续安装进程。

在这篇指南中,我将使用 “Graphical Install” 方式。

Devuan Graphic Installation

Devuan Graphic 安装

4、当安装程序启动到“本地化”菜单以后,将会提示用户选择键盘布局和语言。只需选择你想要的选项,然后继续安装。

Devuan Language Selection

Devuan 语言选择

Devuan Location Selection

Devuan 地区选择

Devuan Keyboard Configuration

Devuan 键盘配置

5、下一步是向安装程序提供主机名和该机器所属的域名。

需要填写一个唯一的主机名,但如果电脑不属于任何域,那么域名可以不填。

Set Devuan Linux Hostname

设置 Devuan Linux 的主机名

Set Devuan Linux Domain Name

设置 Devuan Linux 的域名

6、填好主机名和域名信息以后,需要提供一个 root 用户密码。

请务必记住这个密码,因为当你在这台 Devuan 机器上执行管理任务时需要提供这个密码。默认情况下, Devuan 不会安装 sudo 包,所以当安装完成以后,管理用户就是 root 用户。

Setup Devuan Linux Root User

设置 Devuan Linux Root 用户

7、下一步需要做的事情是创建一个非 root 用户。在任何可能的情况下,避免以 root 用户使用系统总是更好的。此时,安装程序将会提示你创建一个非 root 用户。

Setup Devuan Linux User Account

创建 Devuan Linux 用户账户

8、一旦输入 root 用户密码,提示非 root 用户已经创建好以后,安装程序将会请求通过 NTP 设置时钟

这时需要再次连接网络,大多数系统都需要这样。

Devuan Linux Timezone Setup

设置 Devuan Linux 的时区

9、下一步需要做的是系统分区。对于绝大多数用户来说,选择“Guided – use entire disk”就够了。然而,如果需要进行高级分区,就需要进行分区。

Devuan Linux Partitioning

Devuan Linux 分区

在上面点击 “continue” 以后,请确认分区更改,从而把分区信息写入硬盘。

10、分区完成以后,安装程序为 Devuan 安装一些基础文件。这个过程将会花费几分钟时间,直到系统开始配置网络镜像(软件库)才会停下来。当提示使用网络镜像时,通常点击 “yes”。

Devuan Linux Configure Package Manager

Devuan Linux 配置包管理器

点击 “yes” 以后将会给用户呈现一系列以国家分类的网络镜像。通常最好选择地理位置上离你的机器最近的镜像。

Devuan Linux Mirror Selection

Devuan Linux 镜像选择

Devuan Linux Mirrors

Devuan Linux 镜像

11、下一步是设置 Debian 传统的 “popularity contest”,它能够追踪已下载包的使用统计。

在安装过程中,可以在管理员首选项中启用或禁用该功能。

Configure Devuan Linux Popularity Contest

配置 Devuan Linux 的 Popularity Contest

12、在简单浏览仓库和一些包的更新以后,安装程序会给用户展示一系列软件包,安装这些包可以提供一个桌面环境、SSH 访问和其它系统工具。

Devuan 会列举出一些主流桌面环境,但应该指出的是,并不是所有的桌面在 Devuan 上均可用。作者在 Devuan 上成功使用过 Xfce 、LXDE 和 Mate(未来的文章将会探究如何从源代码安装这些桌面环境)。

如果想要安装别的桌面环境,不要勾选 “Devuan Desktop Environment” 复选框。

Devuan Linux Software Selection

Devuan Linux 软件选择

根据在上面的安装屏幕中选择的项目数,可能需要几分钟的时间来下载和安装软件。

当所有的软件都安装好以后,安装程序将会提示用户选择 grub 的安装位置。典型情况是选择安装在 /dev/sda 目录下。

Devuan Linux Grub Install

Devuan Linux 安装 grub 引导程序

Devuan Linux Grub Install Disk

Devuan Linux Grub 程序的安装硬盘

13、当 GRUB 程序成功安装到引导驱动器以后,安装程序将会提示用户安装已经完成,请重启系统。

Devuan Linux Installation Completes

Devuan Linux 安装完成

14、如果安装顺利完成了,那么系统要么启动到选择桌面环境,或者如果没有选择桌面环境的话,会启动到一个基于文本的控制台。

Devuan Linux Console

Devuan Linux 控制台。

这篇文章总结了最新版本的 Devuan Linux 的安装。在这个系列的下一篇文章将会阐述如何从源代码为 Devuan Linux 安装 Enlightenment 桌面环境。如果你有任何问题或疑问,请记得让我们知道。


作者简介:

作者是 Ball 州立大学的计算机系讲师,目前教授计算机系的所有 Linux 课程,同时也教授 Cisco 网络课程。他是 Debian 以及其他 Debian 的衍生版比如 Mint、Ubuntu 和 Kali 的狂热用户。他拥有信息学和通信科学的硕士学位,同时获得了 Cisco、EC 理事会和 Linux 基金会的行业认证。


via: http://www.tecmint.com/installation-of-devuan-linux/

作者:Rob Turner 译者:ucasFL 校对:wxy

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

在这个系列的第一部分,我们详细地讨论了 cd - 命令,在第二部分,我们深入探究了 pushdpopd 两个命令,以及它们使用的场景。

继续对命令行的讨论,在这篇教程中,我们将会通过简单易懂的实例来讨论 CDPATH 这个环境变量。我们也会讨论关于此变量的一些进阶细节。

在这之前,先声明一下此教程中的所有实例都已经在 Ubuntu 14.04 和 4.3.11(1) 版本的 Bash 下测试过。

环境变量 CDPATH

即使你的命令行所有操作都在特定的目录下 - 例如你的主目录,然而在你切换目录时也不得不提供绝对路径。比如,考虑我现在的情况,就是在 /home/himanshu/Downloads 目录下:

$ pwd
/home/himanshu/Downloads

现在要求切换至 /home/himanshu/Desktop 目录,我一般会这样做:

cd /home/himanshu/Desktop/

或者

cd ~/Desktop/

或者

cd ../Desktop/

能不能只是运行以下命令就能简单地实现呢:

cd Desktop

是的,这完全有可能。这就是环境变量 CDPATH 出现的时候了。你可使用这个变量来为 cd 命令定义基础目录。

如果你尝试打印它的值,你会看见这个环境变量默认是空值的:

$ echo $CDPATH

现在 ,考虑到上面提到的场景,我们使用这个环境变量,将 /home/himanshu 作为 cd 命令的基础目录来使用。

最简单的做法这样:

export CDPATH=/home/himanshu

现在,我能做到之前所不能做到的事了 - 当前工作目录在 /home/himanshu/Downloads 目录里时,成功地运行了 cd Desktop 命令。

$ pwd
/home/himanshu/Downloads
$ cd Desktop/
/home/himanshu/Desktop
$

这表明了我可以使用 cd 命令来到达 /home/himanshu 下的任意一个目录,而不需要在 cd 命令中显式地指定 /home/himanshu 或者 ~,又或者是 ../ (或者多个 ../)。

要点

现在你应该知道了怎样利用环境变量 CDPATH/home/himanshu/Downloads/home/himanshu/Desktop 之间轻松切换。现在,考虑以下这种情况, 在 /home/himanshu/Desktop 目录里包含一个名字叫做 Downloads 的子目录,这是将要切换到的目录。

但突然你会意识到 cd Downloads 会切换到 /home/himanshu/Downloads。所以,为了确保这不会发生,你可以这样做:

cd ./Downloads

虽然上述命令本身没有问题,但你还是需要耗费点额外的精力(虽然很小),尤其是每次这种情况发生时你都不得不这样做。所以,有一个更加优雅的解决方案来处理,就是以如下方式来设定 CDPATH 环境变量。

export CDPATH=".:/home/himanshu"

它的意思是告诉 cd 命令先在当前的工作目录查找该目录,然后再尝试搜寻 /home/himanshu 目录。当然, cd 命令是否以这样的方式运行,完全取决于你的偏好和要求 - 讨论这一点的目的是为了让你知道这种情况可能会发生。

就如你现在所知道的,一旦环境变量 CDPATH 被设置,它的值 - 或者它所包含的路径集合 - 就是系统中 cd 命令搜索目录的地方 ( 当然除了使用绝对路径的场景 )。所以,完全取决于你来确保该命令行为的一致性。

继续说,如果一个 bash 脚本以相对路径使用 cd 命令,最好还是先清除或者重置环境变量 CDPATH,除非你觉得遇上不可预测的麻烦也无所谓。还有一个可选的方法,比起在终端使用 export 命令来设置 CDPATH,你可以在测试完当前的 shell 是交互式还是非交互式之后,再在你的 .bashrc 文件里设置环境变量,这样可以确保你对环境变量的改动只对交互式 shell 生效。

环境变量中,路径出现的顺序同样也是很重要。举个例子,如果当前目录是在 /home/himanshu 目录之前列出来,cd 命令就会先搜索当前的工作目录然后才会搜索 /home/himanshu 目录。然而,如果该值为 /home/himanshu:.,搜索就首先从 /home/himanshu 开始,然后到当前目录。不用说,这会影响 cd 命令的行为,并且不注意路径的顺序可能会导致一些麻烦。

要牢记在心的是,环境变量 CDPATH,就像其名字表达的,只对 cd 命令有作用。意味着在 /home/himanshu/Downloads 目录里面时,你能运行 cd Desktop 命令来切换到 /home/himanshu/Desktop 目录,但你不能使用 ls。以下是一个例子:

$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$

然而,这还是有简单的变通处理的。例如,我们可以用以下不怎么费力的方式来达到目的:

$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~

不过,不是每种情况就能变通处理的。

另一个重点是:就像你可能已经观察到的,每次你使用 CDPATH 环境变量集来运行 cd 命令时,该命令都会在输出里显示你切换到的目录的完整路径。不用说,不是所有人都想在每次运行 cd 命令时看到这些信息。

为了确保该输出被制止,你可以使用以下命令:

alias cd='>/dev/null cd'

如果 cd 命令运行成功,上述命令不会输出任何东西,如果失败,则允许产生错误信息。

最后,假如你遇到设置 CDPATH 环境变量后,不能使用 shell 的 tab 自动补全功能的问题,可以尝试安装并启用 bash 自动补全(bash-completion)。更多请参考 这里

总结

CDPATH 环境变量时一把双刃剑,如果没有掌握完善的知识和随意使用,可能会令你陷入困境,并花费你大量宝贵时间去解决问题。当然,这不代表你不应该去试一下;只需要了解一下所有的可用选项,如果你得出结论,使用 CDPATH 会带来很大的帮助,就继续使用它吧。

你已经能够熟练地使用 CDPATH 了吗?你有更多的贴士要分享?请在评论区里发表一下你的想法吧。

(高清版题图:http://anguerde.com/TTF-222621-archlinux.html


via: https://www.howtoforge.com/tutorial/linux-command-line-tips-tricks-part-3-cdpath/

作者:Ansh 译者:HaitaoBio 校对:jasminepeng

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

这篇文章讲的是在两个 Samba4 活动目录域控制器之间,通过一些强大的 Linux 工具来完成 SysVol 的复制操作,比如 Rsync 数据同步工具Cron 任务调度进程SSH 协议

需求:

1、在 Ubuntu 系统上使用 Samba4 来创建活动目录架构

2、在 Linux 命令行下管理 Samba4 AD 架构

3、使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构

4、在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略

5、将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式

第一步:配置 DC 服务器时间同步

1、在两个域控制器之间复制 sysvol 目录的内容之前,你得保证这两个服务器时间设置准确且一致。

如果这两个服务器的时间延迟大于 5 分钟,并且时钟也不同步,你将会遇到 AD 账号和域复制的各种问题。

为了解决多个域控制器之间时间漂移的问题,你需要在服务器上执行如下命令来安装和配置 NTP 服务

# apt-get install ntp

2、在 NTP 服务安装完成之后,打开主配置文件,把默认的 pool 值注释(在每行 pool 参数前添加 # ),并且添加新的 pool 值,指向已安装了 NTP 服务端的主 Samba4 AD DC FQDN,如下所示。

# nano /etc/ntp.conf

把下面几行添加到 ntp.conf 配置文件。

pool 0.ubuntu.pool.ntp.org iburst
#pool 1.ubuntu.pool.ntp.org iburst
#pool 2.ubuntu.pool.ntp.org iburst
#pool 3.ubuntu.pool.ntp.org iburst
pool adc1.tecmint.lan
# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

Configure NTP for Samba4

Samba4 配置 NTP 服务

3、先不要关闭该文件,在文件末尾添加如下内容,这是为了让其它客户端能够查询并与这个 NTP 服务器同步时间,并发出 NTP 签署请求,以防主 DC 离线:

restrict source notrap nomodify noquery mssntp
ntpsigndsocket /var/lib/samba/ntp_signd/

4、最后,关闭并保存该配置文件,然后重启 NTP 服务以应用更改。等待几分钟后时间同步完成,执行 ntpq 命令打印出 adc1 时间同步情况。

# systemctl restart ntp
# ntpq -p

Synchronize NTP Time with Samba4 AD

与 Samba4 AD 同步 NTP 时间

第二步:通过 Rsync 命令来复制第一个 DC 服务器上的 SysVol 目录

默认情况下,Samba4 AD DC 不会通过 DFS-R 分布式文件系统复制 Distributed File System Replication )或者 FRS 文件复制服务 File Replication Service )来复制 SysVol 目录。

这意味着只有在第一个域控制器联机时, 组策略对象 Group Policy objects 才可用。否则组策略设置和登录脚本不会应用到已加入域的 Windosws 机器上。

为了克服这个障碍,以及基本实现 SysVol 目录复制的目的,我们通过执行一个基于 SSH 的身份认证并使用 SSH 加密通道的Linux 同步命令来从第一个域控制器安全地传输 GPO 对象到第二个域控制器。

这种方式能够确保 GPO 对象在域控制器之间的一致性,但是也有一个很大的缺点。它只能进行单向同步,因为在同步 GPO 目录的时候, rsync 命令会从源 DC 服务器传输所有的更改到目标 DC 服务器,

源 DC 服务器上不存在的组策略对象也会从目标 DC 服务器上删除,为了限制并避免任何冲突,所有的 GPO 编辑操作只能在第一个 DC 服务器上执行。

5、要进行 SysVol 复制,先到第一个 AD DC 服务器上生成 SSH 密钥,然后使用下面的命令把该密钥传输到第二个 DC 服务器。

在生成密钥的过程中不要设置密码,以便在无用户干预的情况下进行传输。

# ssh-keygen -t RSA  
# ssh-copy-id root@adc2  
# ssh adc2 
# exit 

Generate SSH Key on Samba4 DC

在 Samba4 DC 服务器上生成 SSH 密钥

6、 当你确认 root 用户可以从第一个 DC 服务器以免密码方式登录到第二个 DC 服务器时,执行下面的 rsync 命令,加上 --dry-run 参数来模拟 SysVol 复制过程。注意把对应的参数值替换成你自己的数据。

# rsync --dry-run -XAavz --chmod=775 --delete-after  --progress --stats  /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/

7、如果模拟复制过程正常,那么再次执行去掉 --dry-run 参数的 rsync 命令,来真实的在域控制器之间复制 GPO 对象。

# rsync -XAavz --chmod=775 --delete-after  --progress --stats  /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/

Samba4 AD DC SysVol Replication

Samba4 AD DC SysVol 复制

8、在 SysVol 复制完成之后,登录到目标域控制器,然后执行下面的命令来列出其中一个 GPO 对象目录的内容。

从第一个 DC 服务器上执行这个命令时,列出的 GPO 对象也要相同。

# ls -alh /var/lib/samba/sysvol/your_domain/Policiers/

Verify Samba4 DC SysVol Replication

验证 Samba4 DC SysVol 复制结果是否正常

9、为了自动完成组策略复制的过程(通过网络传输 sysvol 目录),你可以使用 root 账号设置一个任务来执行同步命令,如下所示,设置为每隔 5 分钟执行一次该命令。

# crontab -e 

添加一条每隔 5 分钟运行的同步命令,并把执行结果以及错误信息输出到日志文件 /var/log/sysvol-replication.log 。如果执行命令异常,你可以查看该文件来定位问题。

*/5 * * * * rsync -XAavz --chmod=775 --delete-after  --progress --stats  /var/lib/samba/sysvol/ root@adc2:/var/lib/samba/sysvol/ > /var/log/sysvol-replication.log 2>&1

10、如果以后 SysVol ACL 权限有问题,你可以通过下面的命令来检测和修复这些异常。

# samba-tool ntacl sysvolcheck
# samba-tool ntacl sysvolreset

Fix SysVol ACL Permissions

修复 SysVol ACL 权限问题

11、如果第一个 Samba4 AD DCFSMO 角色,即“PDC 模拟器”不可用,你可以强制 Microsoft Windows 系统上的组策略管理控制台只连接到第二个域控制器,通过选择更改域控制器选项和手动选择目标机器,如下图所示。

Change Samba4 Domain Controller

更改 Samba4 域控制器

Select Samba4 Domain Controller

选择 Samba4 域控制器

当你从组策略管理控制台连接到第二个 DC 服务器时,你应该避免对组策略做任何更改。否则,当第一个 DC 服务器恢复正常后, rsync 命令将会删除在第二个 DC 服务器上所做的更改。


作者简介:

Matei Cezar -- 我是一个电脑迷,开源软件和 Linux 系统爱好者,有超过 4 年的 Linux 桌面、服务器版本系统和 bash 编程经验。


via: http://www.tecmint.com/samba4-ad-dc-sysvol-replication/

作者:Matei Cezar 译者:rusking 校对:jasminepeng

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

JavaScript 即未来趋势所在。

Javascript 得到了众多的技术领导者的拥护和支持,其中一位就是 WordPress 的作者 Matt Mullenweg , 他表示 WordPress 开发者 应该学习 JavaScript , 这也清晰地向 WordPress 社区传达了 JavaScript 在未来的重要性。 同时,这一观点也被普遍接受。向着更先进的技术靠拢与过渡也同时保证了 WordPress 在未来的挑战中不会落于人后。

JavaScript 同时也是众多站在开源立场的技术中的佼佼者。与现在所流行的观点相反,JavaScript 不是一个工程,而是一个由其核心团队共同制定和维护的开放标准。ECMAScript , 这是另一个和 JavaScript 相关的名字, 它虽然不是开源的,但它也有一个开放的标准。

当你在浏览 GitHub 的时候你就可以发现 JavaScript 在当今有多么流行了。而且就仓库的数量 而言,JavaScript 绝对位于所有的编程语言当中最顶尖的那一层次。 同时,在 Livecoding.tv 上你也能看出 JavaScript 有多么突出,这里的用户发布的关于 JavaScript 的视频的数量比其他的话题多得多。在写这篇文章的时候(2016 年底),Livecoding.tv 上已经有 45,919 个 用户原创的 JavaScript 视频教程

热门的开源 JavaScript 框架和库

回归到主题, 庞大的社区是 JavaScript 的一个得天独厚的优势,同时这也推动了 JavaScript 的蓬勃发展。这里有数以百千计的成熟的 JavaScript 框架和库供开发者使用,同时这些最优秀的框架和库都是开源的。对当前的 JavaScript 开发者来说,能够使用这些优秀的框架和库来进行快速开发已经是必须技能了。当今的市场需要快速开发,但是,重复造轮子是没有必要的。不论你是一个 JavaScript 新手还是一个资深的 JavaScript 开发者,使用框架和库都能极大提高你的工作效率。

好了,让我们开始吧!

1. Angular.js

Angular.js 是目前最热门的 JavaScript 框架之一。它用于开发者构建复杂的 web 应用。Angular.js 背后的思想是它的单页应用 model。同时它 也支持 MVC 架构。在 Angular.js 中 ,开发者可以在前端中使用 JavaScript 代码,并从字面上扩展 HTML 词汇。

Angular.js 自 2009 年出现以来已经有了很大的改进。Angular 1 当前的稳定版本是 1.5.8/1.2.30 。你也可以试一试 Angular 2 ,相对于 Angular 1 来说它有了重大的改进,但这个新版本仍未在全球范围内被普遍使用。

在 Angular.js 中,数据绑定是完成工作的一个重要概念。在用户与接口的交互中,当交互完成,view 就会自动更新,随即新值与 model 交互以确保一切都是同步的。底层的逻辑在 model 中执行完成后,DOM 也会随即更新。

2. Backbone.js

复杂 web 应用并不适用于所有场景。一些较简单的 web 应用框架例如 Backbone.js 就非常适合学习 web app 开发。Backbone.js 是一个简单的框架,可以快速方便地构建简单的 web 应用。和 Angular.js 一样,Backbone.js 也支持 MVC 。Backbone.js 还有一些其它关键特性如路由,RESTful API 支持,适当的状态管理等等。你甚至还可以用 Backbone.js 来构建单页应用。

当前的稳定版本是 1.3.3,可以在 GitHub 中找到。

3. D3.js

D3.js 是一个优秀的 JavaScript 库,它允许开发者创建具有数据处理功能的富 web 页面。D3.js 使用 SVG、HTML 和 CSS 来实现这一切功能。使用 D3.js ,你可以更轻松地将数据绑定到 DOM 及启用数据驱动事件。使用 D3.js ,你还可以创建高质量的数据驱动的 web 页面来提供一个更易于理解的视觉效果来呈现数据。查看示例 : LCF 符号哈密顿图 ,由 D3.js 强力驱动。

4. React.js

React.js 是一个使用起来很有趣的 JavaScript 框架。和其它的 JavaScript 框架不同,React.js 志在构建一个高可扩展的前端用户界面。React.js 出现于 2013 年,它采用了 BSD 开源协议。它因其能够开发复杂且漂亮的用户界面所带来的优势而迅速发展壮大。

React.js 背后的核心思想是虚拟 DOM 。虚拟 DOM 在客户端和服务端之间扮演着一个中间人的角色并带来了显著的性能提升。虚拟 DOM 的改变和服务器端 DOM 一样,只需要更新所需的元素,相对于传统的 UI 渲染来说极大提升了渲染速度。

你还可以使用 Recat 来实现 meterial 风格的设计,使你能够开发具有无与伦比的性能的 web 应用。

5. jQuery

jQuery 是一个非常流行的 JavaScript 库,它拥有众多特性例如事件处理、动画等。当你在做一个 web 项目的时候,你不会想要把时间浪费在为一些简单的功能写代码上。jQuery 为减少你的工作量提供了一些易于使用的 API 。这些 API 在所有的常见的浏览器中都能够使用。使用 jQuery, 你可以无缝地控制 DOM 以及 Ajax 这样在近几年来拥有大量需求的任务。使用 jQuery,开发者不必担心一些低级的交互,同时可以使他们的 web 应用的开发更加容易与迅速。

jQuery 同时便于分离 HTML 和 JavaScript 代码,使开发者能够编写简洁而跨浏览器兼容的代码。并且使用 jQuery 创建的 web 应用在将来也易于改善和扩展。

6. Ember.js

Ember.js 是一个 Angular.js 和 React.js 的功能混合体。当你在浏览社区的时候你能明显地感受到 Ember.js 的热门程度。Ember.js 的新特性也不断地在添加。它在数据同步方面与 Angular.js 很像。 双向的数据交换可以确保应用的快速性和可扩展性。同时,它还能够帮助开发者创建一些前端元素。

和 React.js 的相似之处在于,Ember.js 提供了同样的服务器端虚拟 DOM 以确保高性能和高可扩展。同时, Ember.js 提倡简化代码,提供了丰富的 API。Ember.js 还有非常优秀的社区。

7. Polymer.js

如果你曾想过创建你自己的 HTML5 元素,那么你可以使用 Polymer.js 来做这些事。 Polymer 主要集中于通过给 web 开发者提供创建自己的标签的功能来提供扩展功能。例如,你可以创建一个和 HTML5 中的

Polymer 在 2013 年被 Google 引入并以 三句版 BSD 协议发布。

8. Three.js

Three.js 又是另一个 JavaScript 库,主要用于 3D 效果开发。如果你在做游戏开发的动画效果,那么你可以利用 Three.js 的优势。Three.js 在底层中使用 WebGL 使 Three.js 可以轻松地被用于在屏幕上渲染 3D 物体。举一个比较知名的使用 Three.js 的例子就是 HexGLA,这是一个未来派赛车游戏。

9. PhantomJS

使用 JavaScript 工作就意味着和不同的浏览器打交道,同时,当提及浏览器的时候,就不得不讨论资源管理。在 PhantomJS 中,由于有 Headless WebKit 的支持,所以你可以随时监测你的 web 应用。Headless WebKit 是 Chrome 和 Safari 使用的渲染引擎中的一部分。

这整个过程是自动化的,你所需要做的只是使用这个 API 来构建你的 web 应用。

10. BabylonJS

BabylonJS 与 Three.js 不相伯仲, 提供了创建平滑而强大的 3D web 应用的 JavaScript API。它是开源的,且基于 JavaScript 和 WebGL 。创建一个简单的 3D 物体,比如一个球体是非常简单的,你只需要写短短几行代码。通过这个库提供的 文档,你可以很好地掌握它的内容。 同时 BabylonJS 的主页上也提供了一些优秀的 demo 来当作参考。在其官网上你可以找到这些 Demo。

11. Boba.js

Web 应用总是有一个共通的需求,那就是分析。如果你还在苦于将数据的分析与统计插入到 JavaScript 的 web 应用中,那么你可以试一下 Boba.js。Boba.js 可以帮助你将分析的数据插入到你的 web 应用中并且支持旧的 ga.js 。你甚至可以把数据指标和 Boba.js 集成在一起,只需要依赖 jQuery 即可。

12. Underscore.js

Underscore.js 解决了 “当我面对一个空白 HTML 页面并希望即刻开始工作,我需要什么” 这个问题。当你刚开始一个项目,你可能会感到失落或者重复一系列你在之前项目中常做的步骤。 为了简化开启一个项目的过程和给你起个头,Underscore.js 这个 JavaScript 库给你提供了一系列的方法。例如,你可以使用你在之前项目中常用的 Backbone.js 中的 suspender 或者 jQuery 的一些方法。

一些实用的帮助例如 “filter” 和 “invoke the map” 可以给你起个好头,以助于你尽可能快的投入到工作中。 Underscore.js 同时还自带了一个套件来简化你的测试工作。

13. Meteor.js

Meteor.js 是一个快速构建 JavaScript 应用的框架。它是开源的且它能够用于构建桌面应用、移动应用和 web 应用。Meteor.js 是一个全栈的框架同时允许多平台的端到端开发。 你可以使用 Meteor.js 来实现前端和后端功能,同时它也能密切监视应用的性能。Meteor.js 的社区非常庞大,所以它会有不断的新特性更新或者是 bug 修复。Meteor.js 也是模块化的,同时它能配合一些其它的优秀的 API 使用。

14. Knockout.js

Knockout.js 在这些库中可能是最被低估的一个。它是一个基于 MIT 开源协议的开源 JavaScript 框架。作者是 Steve Sanderson。它基于 MVVM 模式。

值得注意的是: Node.js

Node.js 是一个强有力的 JavaScript 运行时环境。它可以被用于使用真实世界数据来构建快速且可扩展的应用。它既不是一个框架也不是一个库,而是一个基于 Google Chrome 的 V8 引擎的运行时环境。你可以用 Node.js 来创建多元化的 JavaScript 应用,包括单页应用、即时 web 应用等等。从技术层面上来讲,由于它的事件驱动式架构,所以 Node.js 支持异步 I/O 。这种做法使得它成为开发高可扩展应用的一个极好的解决方案的选择。查看 Node.js在 livecoding.tv 上的视频。

总结

JavaScript 是 web 开发中的通用语言。它之所以快速发展不仅仅是因为它所提供的内容,更多的是因为它的庞大的开源社区的支持。以上提到的框架和库对任何一个 JavaScript 开发者来说都是必须知道的。它们都提供了一些途径来探索 JavaScript 和前端开发。上面提及的大部分框架和库频繁地在 Livecoding.tv 上出现,其大部分来自对 JavaScript 及其相关技术感兴趣的软件工程师。


via: https://opensource.com/article/16/11/15-javascript-frameworks-libraries

作者:Dr. Michael J. Garbade 译者:chenxinlong 校对:wxy

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

简介

如果 winecfg (WINE 的配置工具)是一把螺丝刀,那么 winetricks 就是一个钻床。它们各有特长,但是 winetricks 真的是一个强大的多的工具。实际上,它甚至可以启动 winecfg

winecfg 让你可以改变 WINE 本身的设置,而 winetricks 则可以让你改造实际的 Windows 层,它可以让你安装 Windows 重要的系统组件,比如 .dll 文件和系统字体,还可以允许你修改 Windows 注册表的信息。它还有任务管理器、卸载工具和文件浏览器。

尽管 winetricks 可以做以上这些工作,但是大部分时间我们用到的功能也就是管理 dll 文件和 Windows 组件。

安装

winecfg 不同,winetricks 不是集成在 WINE 中的。这样也没什么问题,由于它实际上只是个脚本文件,你可以在各种发行版上很轻松地下载和使用它。现在,许多发行版把 winetricks 打包。只要你喜欢,你也可以下载打包后的版本。不过,有些包可能会比较老旧,所以本指南将使用脚本,毕竟脚本通用且更新及时。默认情况下,它的图形界面有些丑,所以你要是想个性化界面,最好通过你的发行版的包管理器安装一个 zenity

现在假定你想在你的 /home 目录下配置 winetricks。 cd 到此,然后 wget 这个脚本。

$ cd ~

$ wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks

然后,给这个脚本可执行权限。

$ chmod+x winetricks

winetricks 可以通过命令行运行,在行末指定要安装的东西。但是大部分情况下,你都不知道 .dll 文件或者是你想安装字体确切的名字,那么,这时候最好利用图形界面程序。启动这个程序和其他程序没什么不同,就是在末尾什么都别输入就行了。

$ ~/winetricks

winetricks-main

当窗口第一次打开时候,将会给你一个有 “查看帮助” View help “安装应用” Install an application 选项的菜单。一般情况下,我们选择 “选择默认的 wineprefix” Select the default wineprefix ,这将是你主要使用的选项。其他的也能用,但是不推荐使用。接下来,单击 “OK”,你就会进入到 WINE prefix 的配置菜单,你可以在这完成所有你要使用 winetricks 完成的事情。

The winetricks prefix menu

字体

The winetricks font menu

字体一直很重要,一些应用程序没有字体就没法正常的加载。winetricks 可以轻松地安装许多常用 Windows 字体.在配置菜单中,选中 “安装字体” Install a font  单选按钮,然后点击 “OK” 即可。

然后你就会得到一列字体清单,它们都有着相对应的复选框。你很难确切知道你到底需要什么字体,所以一般按每个应用决定使用什么字体,我们可以先安装一款插件 corefonts,它包含了大多数 Windows 系统中应用程序所设定的字体。安装它也十分简单,所以可以试试。

要安装 corefonts ,请选择相应的复选框,然后点击 “OK”,你就会看到和在 Windows 下差不多的提示,字体就会被安装了。完成了这个插件的安装,你就会回到先前的菜单界面。接下来就是安装你需要的别的插件,步骤相同。

.dll 文件和组件

The winetricks dll menu

winetricks 安装 Windows 下的 .dll 文件和别的组件也十分简单。如果你需要安装的话,在菜单页选择 “安装 Windows DLL 或组件” Install a Windows DLL or component ,然后点击 “OK”。

窗口就会进入到另一个菜单界面,其中包含可用的 dll 和其他 Windows 组件。在相应的复选框进行选择,点击 “OK”。脚本就会下载你选择的组件,接着通过 Windows 一般的安装进程进行安装。像 Windows 机器上安装那样跟着提示往下走。可能会有报错信息。很多时候,Windows 安装程序会报错,但是你接着会收到来自 winetricks 窗口的消息,说明它正在绕过此问题。这很正常。由于组件之间的相互依赖关系,你可能会也可能不会看到成功安装的信息。只要确保安装完成时候,菜单页中你的选项仍旧处于被选中状态就行了。

注册表

WINE regedit

你不需要常常编辑注册表中 WINE 对应的值,但是对于有些程序确实需要。技术层面来讲,winetricks 不向用户提供注册表编辑器,但是要访问编辑器也很容易。在菜单页选中 “运行注册表编辑” Run regedit ,点击 “OK”,你就可以打开一个简单的注册表编辑器。事实上,写入注册表的值有点超出本篇引导文章的范围了,但是我还要多说一句,如果你已经知道你在干什么,增加一个注册表条目不是很难。注册表有点像电子表格,你可以将正确的值填入右面的格子中。这个说的有点过于简单,但是就是这样的。你可以在以下地址精准地找到你需要在 WINE Appdp 所要填入或编辑的东西。 https://appdb.winehq.org。

结束语

很明显 winetricks 还有许多许多强大的功能,但是本篇指南的目的只是给你一点基础知识,以使用这个强大的工具,使你的程序通过 WINE 运行。WINE Appdb 对每个程序都有相应的设置,将来会越来越丰富。


via: https://linuxconfig.org/configuring-wine-with-winetricks

作者:Nick Congleton 译者:Taylor1024 校对:jasminepeng

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

 title=

作为一个系统管理员/SRE 工作 5 年后,我知道当我连接到一台 Linux 服务器时我首先应该做什么。这里有一系列关于服务器你必须了解的信息,以便你可以(在大部分时间里)更好的调试该服务器。

连上 Linux 服务器的第一分钟

这些命令对于有经验的软件工程师来说都非常熟悉,但我意识到对于一个刚开始接触 Linux 系统的初学者来说,例如我在 Holberton 学校任教的学生,却并非如此。这也是我为什么决定分享当我连上 Linux 服务器首先要运行的前 5 个命令的原因。

w
history
top
df
netstat

这 5 个命令在任何一个 Linux 发行版中都有,因此不需要额外的安装步骤你就可以直接使用它们。

w:

[ubuntu@ip-172-31-48-251 ~]$ w
23:40:25 up 273 days, 20:52,  2 users,  load average: 0.33, 0.14, 0.12
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu pts/0    104-7-14-91.ligh 23:39    0.00s  0.02s  0.00s w
root pts/1    104-7-14-91.ligh 23:40    5.00s  0.01s  0.03s sshd: root [priv]
[ubuntu@ip-172-31-48-251 ~]$ 

这里列出了很多有用的信息。首先,你可以看到服务器运行时间 uptime,也就是服务器持续运行的时间。然后你可以看到有哪些用户连接到了服务器,当你要确认你没有影响你同事工作的时候这非常有用。最后 load average 能很好的向你展示服务器的健康状态。

history

[ubuntu@ip-172-31-48-251 ~]$ history
   1  cd /var/app/current/log/
   2  ls -al
   3  tail -n 3000 production.log 
   4  service apache2 status
   5  cat ../../app/services/discourse_service.rb 

history 能告诉你当前连接的用户之前运行了什么命令。你可以看到很多关于这台机器之前在执行什么类型的任务、可能出现了什么错误、可以从哪里开始调试工作等信息。

top

top - 23:47:54 up 273 days, 21:00,  2 users,  load average: 0.02, 0.07, 0.10
Tasks:  79 total,   2 running,  77 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.3%st
Mem:   3842624k total,  3128036k used,   714588k free,   148860k buffers
Swap:        0k total,        0k used,        0k free,  1052320k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                      
21095 root      20   0  513m  21m 4980 S  1.0  0.6   1237:05 python                                                                                                                                                                                                                        
1380 healthd   20   0  669m  36m 5712 S  0.3  1.0 265:43.82 ruby                                                                                                                                                                                                                          
19703 dd-agent  20   0  142m  25m 4912 S  0.3  0.7  11:32.32 python                                                                                                                                                                                                                        
   1 root      20   0 19596 1628 1284 S  0.0  0.0   0:10.64 init                                                                                                                                                                                                                          
   2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                                                                                                      
   3 root      20   0     0    0    0 S  0.0  0.0  27:31.42 ksoftirqd/0                                                                                                                                                                                                                   
   4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0                                                                                                                                                                                                                   
   5 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0H                                                                                                                                                                                                                  
   7 root      20   0     0    0    0 S  0.0  0.0  42:51.60 rcu_sched                                                                                                                                                                                                                     
   8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcu_bh

你想知道的下一个信息:服务器当前在执行什么工作。使用 top 命令你可以看到所有正在执行的进程,然后可以按照 CPU、内存使用进行排序,并找到占用资源的进程。

df

[ubuntu@ip-172-31-48-251 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  4.5G  3.3G  58% /
devtmpfs        1.9G   12K  1.9G   1% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm

你服务器正常工作需要的下一个重要资源就是磁盘空间。磁盘空间消耗完是非常典型的问题。

netstat

[ubuntu@ip-172-31-48-251 ec2-user]# netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 *:http                      *:*                         LISTEN      1637/nginx          
tcp        0      0 *:ssh                       *:*                         LISTEN      1209/sshd           
tcp        0      0 localhost:smtp              *:*                         LISTEN      1241/sendmail       
tcp        0      0 localhost:17123             *:*                         LISTEN      19703/python        
tcp        0      0 localhost:22221             *:*                         LISTEN      1380/puma 2.11.1 (t 
tcp        0      0 *:4242                      *:*                         LISTEN      18904/jsvc.exec     
tcp        0      0 *:ssh                       *:*                         LISTEN      1209/sshd           

计算机已成为我们世界的重要一部分,因为它们有通过网络进行相互交流的能力。知道你的服务器正在监听什么端口、IP地址是什么、以及哪些进程在使用它们,这对于你来说都非常重要。

显然这个列表会随着你的目的和你已有的信息而变化。例如,当你需要调试性能的时候,Netflix 就有一个自定义的列表。你有任何不在我 Top 5 中的有用命令吗?在评论部分和我们一起分享吧!


via: https://www.linux.com/blog/first-5-commands-when-i-connect-linux-server

作者:SYLVAIN KALACHE 译者:ictlyh 校对:wxy

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