2017年3月

SSH 用户会话限制访问到特定的目录内,特别是在 web 服务器上,这样做有多个原因,但最显而易见的是为了系统安全。为了锁定 SSH 用户在某个目录,我们可以使用 chroot 机制。

在诸如 Linux 之类的类 Unix 系统中更改 root(chroot)是将特定用户操作与其他 Linux 系统分离的一种手段;使用称为 chrooted 监狱 的新根目录更改当前运行的用户进程及其子进程的明显根目录。

在本教程中,我们将向你展示如何限制 SSH 用户访问 Linux 中指定的目录。注意,我们将以 root 用户身份运行所有命令,如果你以普通用户身份登录服务器,请使用 sudo 命令

步骤 1:创建 SSH chroot 监狱

1、 使用 mkdir 命令开始创建 chroot 监狱:

# mkdir -p /home/test

2、 接下来,根据 sshd_config 手册找到所需的文件,ChrootDirectory 选项指定在身份验证后要 chroot 到的目录的路径名。该目录必须包含支持用户会话所必需的文件和目录。

对于交互式会话,这需要至少一个 shell,通常为 sh 和基本的 /dev 节点,例如 nullzerostdinstdoutstderrtty 设备:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

Listing Required Files

列出所需文件

3、 现在,使用 mknod 命令创建 /dev 下的文件。在下面的命令中,-m 标志用来指定文件权限位,c 意思是字符文件,两个数字分别是文件指向的主要号和次要号。

# mkdir -p /home/test/dev/      
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8

Create /dev and Required Files

创建 /dev 和所需文件

4、 在此之后,在 chroot 监狱中设置合适的权限。注意 chroot 监狱和它的子目录以及子文件必须被 root 用户所有,并且对普通用户或用户组不可写:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test

Set Permissions on Directory

设置目录权限

步骤 2:为 SSH chroot 监狱设置交互式 shell

5、 首先,创建 bin 目录并复制 /bin/bashbin 中:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/

Copy Files to bin Directory

复制文件到 bin 目录中

6、 现在,识别 bash 所需的共享库,如下所示复制它们到 lib64 中:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/

Copy Shared Library Files

复制共享库文件

步骤 3:创建并配置 SSH 用户

7、 现在,使用 useradd 命令创建 SSH 用户,并设置安全密码:

# useradd tecmint
# passwd tecmint

8、 创建 chroot 监狱通用配置目录 /home/test/etc 并复制已更新的账号文件(/etc/passwd/etc/group)到这个目录中:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/

Copy Password Files

复制密码文件

注意:每次向系统添加更多 SSH 用户时,都需要将更新的帐户文件复制到 /home/test/etc 目录中。

步骤 4:配置 SSH 来使用 chroot 监狱

9、 现在打开 sshd_config 文件。

# vi /etc/ssh/sshd_config

在此文件中添加或修改下面这些行。

# 定义要使用 chroot 监狱的用户
Match User tecmint
# 指定 chroot 监狱
ChrootDirectory /home/test

Configure SSH Chroot Jail

配置 SSH chroot 监狱

保存文件并退出,重启 sshd 服务:

# systemctl restart sshd
或者
# service sshd restart

步骤 5:测试 SSH 的 chroot 监狱

10、 这次,测试 chroot 监狱的设置是否如希望的那样成功了:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname

Testing SSH User Chroot Jail

测试 SSH 用户 chroot 监狱

从上面的截图上来看,我们可以看到 SSH 用户被锁定在了 chroot 监狱中,并且不能使用任何外部命令如(lsdateuname 等等)。

用户只可以执行 bash 以及它内置的命令(比如:pwdhistoryecho 等等):

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history

SSH Built-in Commands

SSH 内置命令

步骤 6: 创建用户的主目录并添加 Linux 命令

11、 从前面的步骤中,我们可以看到用户被锁定在了 root 目录,我们可以为 SSH 用户创建一个主目录(以及为所有将来的用户这么做):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint

Create SSH User Home Directory

创建 SSH 用户主目录

12、 接下来,在 bin 目录中安装几个用户命令,如 lsdatemkdir

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/

Add Commands to SSH User

向 SSH 用户添加命令

13、 接下来,检查上面命令的共享库并将它们移到 chroot 监狱的库目录中:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/

Copy Shared Libraries

复制共享库

步骤 7:测试 sftp 的 用 chroot 监狱

14、 最后用 sftp 做一个测试;测试你先前安装的命令是否可用。

/etc/ssh/sshd_config 中添加下面的行:

# 启用 sftp 的 chroot 监狱 
ForceCommand internal-sftp

保存并退出文件。接下来重启 sshd 服务:

# systemctl restart sshd
或者
# service sshd restart

15、 现在使用 ssh 测试,你会得到下面的错误:

# ssh [email protected]

Test SSH Chroot Jail

测试 SSH Chroot 监狱

试下使用 sftp:

# sftp [email protected]

Testing sFTP SSH User

测试 sFTP SSH 用户

建议阅读: 使用 chroot 监狱将 sftp 用户限制在主目录中

就是这样了!在文本中,我们向你展示了如何在 Linux 中限制 ssh 用户到指定的目录中( chroot 监狱)。请在评论栏中给我们提供你的想法。


作者简介:

Aaron Kili 是一个 Linux 及 F.O.S.S 热衷者,即将成为 Linux 系统管理员、web 开发者,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

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

目前 Linux 上有几十个音乐播放器,这使得找到一个最好用的变成很困难。之前我们已经回顾了其中的一些播放器,如 CantataExaile,甚至不那么出名的 Clementine,Nightingale 和 Quod Libet。

在本篇文章中我将涵盖更多的 Linux 音乐播放器,在某些方面甚至比之前介绍过的那些播放器表现更好。

1、 Qmmp

Qmmp 并不是特性最丰富的(或最稳定的) Linux 音乐播放器,但却是我最喜欢的一款,这也是为什么我把它放在第一个。我知道有更好的播放器,但我就是喜欢这款并且最常使用它。它确实会崩溃,并且也有许多它不能播放的文件,但不管怎样我依然最爱它。上图!

Qmmp 是 Linux 上的 WinAMP。它(相对)轻量并且具有一个像样的特性集。因为 WinAMP 伴随着我的成长,并且我很喜欢它的键盘快捷键,当在 Linux 上有一个像 WinAMP 的播放器对我来说是个惊喜。对于音频格式,Qmmp 能够播放大部分流行的格式,如 MPEG1 layer 2/3、Ogg Vorbis 和 Opus、原生的 FLAC/Ogg FLAC、Musepack、WavePack、音轨模块(mod、s3m、it、xm 等等)、ADTS AAC、CD 音频、WMA、Monkey’s Audio(以及 FFmpeg 库提供的其他格式)、Midi、SID 和 Chiptune 格式(AY、GBS、GYM、HES、KSS、NSF、NSFE、SAP、SPC、VGM、VGZ 和 VTX)。

2、 Amarok

Amarok 是 KDE 的音乐播放器,当然你也可以把它用在其他的桌面环境。它是 Linux 上最古老的音乐播放器之一。这也许是它很流行的原因,虽然我个人并不是非常喜欢它。

Amarok 能播放大量的音频格式,但它的主要优势是丰富的插件。这个软件附带大量文档,不过它最近没有更新。Amarok 也由于与各种 Web 服务,如 Ampache、Jamendo Service、Last.fm、Librivox、MP3tunes、Magnatune 以及 OPML 播客目录的整合而闻名。

3、 Rhythmbox

既然我刚刚提到了 Amarok 和 KDE 音乐播放器,那接下来让我们转向 Gnome 的默认音乐播放器, Rhythmbox 。因为它与 Gnome 一起提供,所以你能猜到它是一款流行的软件。它不仅是一款音乐播放器,同时也是一款音乐管理软件。它支持 MP3 和 OGG,以及十几种其他的文件格式,也包括网络收音机、iPod 服务整合、音频文件播放、音频 CD 刻录和回放、音乐分享以及播客。总而言之,它是款不赖的播放器,但这不意味着你会最喜欢它。试用一下,看看自己是否喜欢。如果不喜欢,就往下看看吧。

4、 VLC

虽然 VLC 是以视频播放器而闻名,但单从它支持最多的解码器这一点来看,它也是一款非常棒的音乐播放器。它无法播放的文件,你也不太可能能用其他播放器打开。VLC 具有高度定制性,并且拥有很多扩展。它能够在 Windows,Linux,Mac OS X,Unix,iOS,Android 等等平台运行。

我个人不喜欢 VLC 的一点是它占用太多资源。并且我曾用它打开过一些文件,但回放质量离一流水准还差的很远。这个软件在播放一些其他播放器不难应付的文件时,经常会无故关闭。但很可能与播放器没多大关系,可能是文件本身的问题。尽管 VLC 不属于我常用的程序,我仍然由衷的推荐它。

5、 Cmus

如果你钟爱命令行程序,那么 Cmus 会是你的菜。你能用它来播放 Ogg Vorbis、MP3、FLAC、Opus、Musepack、WavPack、WAV、AAC、MP4、音频 CD 以及 ffmpeg 支持的所有格式(WMA、APE、MKA、TTA、SHN 等等)和 libmodplug。你也可以用它来播放 Shoutcast 或者 Icecast 的音频流。它不是特性最丰富的音乐播放器,但它拥有所有的基础及进阶功能。它的主要优势是非常轻量,并且它的内存需求真的很小。

所有的这些音乐播放器都很棒,都有擅长的方面。我没办法说出哪一款是最好的,这更多取决于个人喜好和需要。这些播放器大多要么做为发行版的默认选项安装,要么可以在包管理器中轻松找到。只要打开新立得、软件中心或你的发行版中使用的任意包管理器,搜索并安装它们。你也可以使用命令行,或只要双击从网站上下载的安装文件。使用何种方法取决于你。

等等,这就完了?

不不,我知道你要说啥,作为中国的 Linux 粉丝,你一定会说我丢失了最重要的一个:网易云音乐,要是我不提的话,你们一定会抗议的。

没错,强烈推荐“网易云音乐”,也为国内厂商支持开源和 Linux 点赞。

详细介绍,请移步:音乐无界限,听见好时光——网易云音乐 Linux 版震撼来袭!


via: https://www.maketecheasier.com/linux-music-players-to-check-out/

作者:Ada Ivanova 译者:cycoe 校对:jasminepeng

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

Linux 世界的新同学们,大家好,当你看到这么多基于 Linux 内核的发行版后,是不是在选择的过程中无从下手呢。很多同学都是刚刚从熟悉的 Windows 系统来到陌生的 Linux 世界里,都希望使用一款既简单易用,又跟 Windows 长得很像的 Linux 发行版,因此我今天将给大家介绍几款这样的 Linux 发行版,它们的桌面环境跟 Windows 系统界面十分相似,咱们开始吧!

Linux Mint

linux mint for new linux users

我给大家介绍的第一款非常流行的 Linux 发行版就是 “Linux Mint 操作系统” 。当你决定使用 Linux 系统来代替 Windows 系统时,你应该在某些地方听说过 Linux Mint 这个发行版吧。 Linux Mint 和 Ubuntu 系统一样被公认为是最好用的 Linux 发行版之一, Linux Mint 系统因其简洁易用、功能强大的 Cinnamon 桌面环境而出名。 Cinnamon 使用起来非常简单,而且你还可以使用各种桌面主题、图标库、桌面小工具和应用组件来把 Linux Mint 系统配置得跟 Windows XP 、 Windows 7 、 Winows 8 或者 Windows 10 系统的界面一样。 Cinnamon 也是 Linux 系统中非常流行的桌面环境之一。你一定会对这个简单易用、功能强大的桌面环境爱不释手。

同时,你也可以阅读这两篇文章 Linux Mint 18.1 "Serena" —— 最幽雅的 Linux 发行版之一​ 以及 Cinnamon ——给新手的最佳 Linux 桌面环境 来进一步了解 Linux Mint 操作系统和 Cinnamon 桌面环境。

Zorin OS

zorin os for windows users

Zorin OS 操作系统 也是可以用来替代 Windows 7 系统的一款非常流行的 Linux 发行版。其开始菜单和任务栏非常漂亮,整体界面美观充满活力,而且在速度和稳定性方面也相当出色。如果你喜欢的是 Windows 7 而不是 Windows 10 系统,那么 Zorin OS 将会是你最好的选择。 Zorin OS 同样预安装了很多软件,因此你再也不用费尽周折的去找软件来安装了。其华丽的仿 Windows 7 系统的界面风格更是让人一见如故。大胆去尝试吧。

你还可以阅读Zorin OS 12 评测 | 本周 Linux 和 Ubuntu 发行版评测这篇文章来进一步了解 Zorin OS 系统。

Robolinux

robolinux for new users

Robolinux 操作系统 是一个内嵌了 Windows 运行环境(Wine)的 Linux 发行版。它支持用户在 Linux 系统中运行 Windows 应用程序,因此,你再也不用担心自己喜欢的 Windows 应用程序在 Linux 系统中无法使用的问题了。在 Robolinux 系统中,这个特性被称为“隐形虚拟机(Stealth VM)”。我对这个新颖独特的功能非常感兴趣。同时, Rololinux 系统还包括其它几个桌面环境,你可以根据自己的喜好选择某一个桌面环境。这个系统中还有一个用于完全备份 C 盘的工具,不会让你丢失任何文件。很独特吧,对不对?

ChaletOS

chalet os for new users

大家有谁用过 ChaletOS 操作系统 吗?这是一款在界面外观和使用感觉上最接近于 Windows 的 Linux 发行版 之一。上面的截图是在我使用了 Windows 10 图标和主题包后的效果,使用这个主题包后,可以让 ChaletOS 的桌面变得和 Windows 10 界面一样。一些预安装的应用程序也可以帮助你更好的使用 ChaletOS 系统。在使用的过程中你仿佛又回到了熟悉的 Windows 世界里。上面的截图竟然让我的朋友们信以为真了。去试一试吧,你肯定会喜欢这个发行版。

你还可以通过 ChaletOS —— Linux 发行版中的新秀 这篇文章来进一步了解 ChaletOS 系统。

总结

这篇文章中列出的发行版我尽量写得简短一些,否则会给新手们在选择的过程中造成太多的困惑,无从下手。还有一些大家正在使用的 Linux 发行版在本文中并未提及。希望你们在下面的评论中提出来,以帮助我们的新朋友们在选择 Linux 发行版的过程中作出正确的选择。

好吧,到此为止吧,这 4 款操作系统都是从 Windows 转向 Linux 的新用户在学习过程中使用最广泛的 Linux 发行版 ,当然 Kubuntu 和 Elementary OS 系统也不甘示弱。想安装哪个版本,完全由你自己决定。大多数情况下 Linux Mint 操作系统 一直独占鳌头。如果你刚踏入 Linux 的世界,我建议你从 Linux Mint 系统开始。行动起来吧,现在就安装一个自己喜欢的 Linux 系统,勇往直前,成为改变 Linux 开源世界的一员。|


via: http://www.linuxandubuntu.com/home/best-windows-like-linux-distributions-for-new-linux-users

作者:linuxandubuntu.com 译者:rusking 校对:wxy

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

 title=

随着开源驱动的硬件越来越成为主流,比如 ArduinoRaspberry Pi,这些开源硬件的成本不断下降,给那些全新且具有创新性的物联网STEM(LCTT译注:STEM 代表 科学 Science 技术 Technology 工程 Engineering 数学 Mathematics )类软件打开了大门。我对两者都比较感兴趣,始终保持关注,以便能找到一些可以应用到教育产业的创新点,比如课堂教育和我女儿的机器人小组。当听说 Orange Pi 比 Raspberry Pi 更优秀时,我便开始关注 Orange Pi了。

尽管 Orange Pi 是个略带酸味儿的名字,但是我仍然被 Orange Pi Zero 迷住了。我最近刚购买了一个 Orange Pi Zero 并将在本文中分享我的第一体验。真情提示:我是真的着迷了。

为什么是 Orange Pi?

Orange Pi 是由 Linux 驱动的单板计算机家族的一员,由深圳迅龙软件有限公司生产并在 全球速卖通 AliExpress 上售卖。在 全球速卖通 AliExpress 上买东西需要有耐心,提前计划预留出 2 到 4 周的运输时间,因为这些产品都是从中国大陆直接发往全世界其它地方的。

与 Raspberry Pi 不同,Raspberry Pi 家族型号比较少,不过在逐步增加,为单板计算机家族添加了几个具有不同价位及功能特色的型号,但是相对而言 Orange Pi 的型号更丰富。好消息是可以在巨大的软件库中选择你需要的东西,但是坏消息就是选择范围实在太大了。以我的经验来看,使用 Orange Pi Zero 的 512 MB 版本足矣,因为该版本很好的平衡了功能与价格,适合中学及学术环境使用。

可以到 Orange Pi Zero 网站 ,查看高清图及所有规格。

很明确的问题是,我希望这种设备的价格越便宜越好,但是要能做到开箱即用,并且能够直接联网以便 SSH 及物联网应用能正常使用。Orange Pi Zero 拥有板载的10/100 M 以太网及 802.11 b/g/n Wi-Fi 模块可以连接网络以满足需求。它还有 26 个与 Raspberry Pi 兼容的 GPIO 端口,用于连接物联网应用传感器。我使用的是 512 MB 版本的 Orange Pi Zero 而不是 256MB 版本,因为内存大带来的好处很多,并且这两个版本只相差了 2 美元。除此之外,运费还需要 $12.30,这笔花费对于那些鼓励积极实验及创造魔法烟雾的课堂特别划算。(LCTT 译注:“创造魔法烟雾”是幽默的说法,意即因未知原因设备停止工作,原多用于电气工程师和技术员,最近常被程序员们采用)。

与 $5 的 Raspberry Pi Zero 相比,Orange Pi Zero 只贵了几元钱,但是这个开箱后更容易上手使用,因为它拥有板载的 Internet 连接模块及 4 核 CPU,而不是单核。这个板载网口使得 Orange Pi Zero 比 Raspberry Pi Zero 更容易使用,因为 Raspberry Pi Zero 还需要一个 Micro-USB 转 USB 的转换器及一个 USB Wi-Fi 才能连上网。当赠送别人一个物联网设备作为礼物时,你当然希望对方能够尽快且容易的使用该产品,而不是送一个不完整的产品,那么这个礼物就只能躺在阁楼吃灰了。

开箱经验

起初对于 Orange Pi,我比较担心的问题是供应商及社区支持没有 Raspberry Pi 基金会和 Raspberry Pi 社区的好,用户不得不自己花费额外的精力把设备跑起来。如果这样的话,我是不会推荐 Orange Pi 作为课堂使用及礼物赠送的。然而好消息是 Orange Pi Zero 工作得非常好,且比 Raspberry 更容易跑起来。

订购两周后,Orange Pi 终于邮寄到家了。我拆开后在几分钟内就把设备运行起来了。其实这大部分时间都是在下载操作系统。Orange Pi 能够运行多种操作系统,从Android 到 Debian 系列都可以。我使用了 Orange Pi 粉丝推崇的 Armbian。由于 Armbian 支持多种基于 ARM 的单板计算机,你需要选择适合 Orange Pi Zero 的 Armbian 版本。按照 Armbian 用户指南开始部分操作即可以很容易做一个 microSD 镜像,然后插入 microSD 卡并接上网线,将我在 Raspberry Pi 中用的 3A Micro-USB 电源适配器插上供电,最后 SSH 登录上去即可使用了。

 title=

SSH 登录进 Orange Pi Zero

通过以太网 SSH 连上后,我可以使用 nmtui-connect 轻松连上我的无线接入点。然后执行 apt-get update && apt-get upgrade 命令,这个命令执行速度比 Raspberry Pi Zero 快,基本接近 Raspberry Pi 3 的表现了,其他人也观察到类似的结果。虽然 Orange Pi Zero 执行速度可能比不过Raspberry Pi 3,但是我也没有打算用它来计算基因排序或者挖比特币矿。Armbian 会自动调整 root 分区来使用整个 microSD 卡空间,而使用 Raspbian 的时候这是手动且很容易忘记的步骤。最后,和价值 $35 的 Raspberry Pi 3 相比,购买 $12 的 Orange Pi Zero 可以使得三倍多的学生有自己的学习工具,也可以将 Orange Pi Zero 作为礼物分享给三倍数量的朋友。

 title=

Orange Pi Zero与 Raspberry Pi 3 尺寸外形的比较

最后的想法

Orange Pi 无疑是解决问题的很好解决方案。鉴于它的低成本、能够更快上手且运行迅速、相对更快速的表现及 GPIO 针脚兼容 Raspberry Pi 的特性,Orange Pi,特别是 Orange Pi Zero,绝对应该列在你工作室、教室或者机器人组的实验器材清单里面。

当然如果你已经厌烦了使用 Orange Pi,希望能够将你不喜欢的原因分享在下面。


作者简介:

David Egts - David Egts | 红帽公司北美公共部门首席技术专家。 喜欢玩打鼓,骑摩托车,电脑极客,是一名丈夫,父亲,传授教义者。关注我的推特 @davidegts并查看我正在主持的播客。


via: https://opensource.com/article/17/1/how-to-orange-pi

作者:David Egts 译者:beyondworld 校对:jasminepeng

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

 title=

图像来源: opensource.com

恭喜你!你已经准备发布你的软件包的最新版本了。现在,你需要保证你的发行说明整洁有序。当然,你可以写上一句“bug 修复以及性能改进”然后就算完成,但这并不能给你的用户传达任何信息。

发行说明同时用于支持和营销。它可以告诉你的的用户,为什么这个发布版本对他们很重要,并可以向潜在用户展示你的软件。所以,你会希望它的内容简洁、易懂,最重要的是:目的明确。写发行说明的方式不止一种,所以本文只是一般提议,并不是一个强制要求。

现在一个流行的趋势,是将发行说明写成包含一堆蠢事的叙事文。如果你想这么写,那请自便 —— 不过要记住,笑话通常是上下文相关的,你觉得很滑稽的内容,可能在你的读者眼里会变得索然无味。而且,不要忘了将那些重要信息写进来。

入门

你能从本文里学到的最主要的经验,可能就是这一条:你的发行说明要写给读它的人看。对于面向用户的软件,发行说明中要注重面向用户的行为,而不是软件的内部实现。举个例子:写“点击‘取消’按钮会把你的电脑点着”,而不要写“在 cancelThatThing 函数中,thermalEventTrigger 的默认值被设为 True”。

尝试将每一条说明限制在一到两句话。重点在于突出强调重要部分,而不是给出详尽的解释。如果你有一个公开的问题追踪页面,你可以在说明中包含问题链接(或者问题编号),这样关注此问题的读者可以通过链接来查看问题的详细内容。

你并不需要严格按照这种方法来写发行说明,但我比较喜欢下面的格式。开头写上版本号,以及发布日期。对于主要版本,你可能要再写几句话,来突出本次发布的主题。比如,“本次发布的重点在于添加了邮件客户端,因为这是所有软件的最终结束状态。”

兼容性更改

如果新版本中包含兼容性或默认行为的变更,你最好将它们着重写出。你的用户、以及提供用户支持的人会感谢你的。在发行说明中描述会遇到行为变更的场景,如何处理变更,以及如果用户对变更不采取行动会导致的后果。对于某些次要版本,你可能没有任何会导致不兼容的变更,那你可以省略此部分。

功能及改进

现在,你该炫耀你的软件包含的那些酷的、新奇的东西了,但是要记得站在用户的角度来写。比如,“该软件现在支持自动发现午餐照片,并将其发布到 Instagram 上。”

已解决的问题

没有软件是完美的,所以在这部分中你需要告诉读者,你的团队为了使这个项目更好一点而做的所有努力工作。因为那些不好的行为已经被解决了,所以应该用过去式来写这一部分。如果某个 bug 的产生原因很明确,写上相关信息。一些项目还在文档此节中包含修复的 bug。

已知问题

因为没有软件是完美的,所以永远会存在未解决的 bug。在这一节中,你需要列出这些已知的问题。你不需要列出所有的问题;主要是影响功能的错误,尤其是那些在上个版本发布后发现的 bug。这一部分的文字用将来时态写出。当你把这些问题解决,你只需要改变动词的时态,然后把它们移到上个部分即可。


作者简介:

Ben Cotten - Ben Cotten 是一个受过专业训练的气象学家,但他现在是一位高性能计算工程师。Ben 是一位循环计算领域的布道者。他是 Fedora 的用户及贡献者,与他人一同创办了一个本地开源会议组,是开源计划的成员,还是软件自由保护的支持者。你可以在 Twitter 上找到他(@FunnelFiasco)。


译者简介:

StdioA —— Pythoner, Player.


via: https://opensource.com/article/17/3/how-to-improve-release-notes

作者:Ben Cotton 译者:StdioA 校对:jasminepeng

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

在 Linux 系统下,Shell 脚本可以在各种不同的情形下帮到我们,例如展示信息,甚至 自动执行特定的系统管理任务,创建简单的命令行工具等等。

在本指南中,我们将向 Linux 新手展示如何可靠地存储自定义的 shell 脚本,解释如何编写 shell 函数和函数库,以及如何在其它的脚本中使用函数库中的函数。

Shell 脚本要存储在何处

为了在执行你自己的脚本时不必输入脚本所在位置的完整或绝对路径,脚本必须被存储在 $PATH 环境变量所定义的路径里的其中一个。

使用下面的命令可以查看你系统中的 $PATH 环境变量:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

通常来说,如果在用户的家目录下存在名为 bin 的目录,你就可以将 shell 脚本存储在那个目录下,因为那个目录会自动地被包含在用户的 $PATH 环境变量中(LCTT 译注:在 Centos 6/7 下是这样的,在 Debian 8 下不是这样的,在 Ubuntu 16.04 下又是这样的)。

因此,在你的主目录下创建 bin 目录吧(当然这里也可以用来存储 Perl、Awk 或 Python 的脚本,或者其它程序):

$ mkdir ~/bin

接着,建立一个名为 lib(libraries 的简写)的目录来存放你自己的函数库。你也可以在其中存放其它编程语言的函数库,如 C ,Python 等语言。在 lib 目录下建立另一个名为 sh 的目录,这个目录将被用来存放你的 shell 函数库:

$ mkdir -p ~/lib/sh 

创建你自己的 Shell 函数和函数库

一个 shell 函数 就是在脚本中能够完成特定任务的一组命令。它们的工作原理与其他编程语言中的过程(LCTT 译注:可能指的是类似 SQL 中的存储过程之类的吧)、子例程、函数类似。

编写一个函数的语法如下:

函数名() { 一系列的命令 } 

( LCTT 校注:在函数名前可以加上 function 关键字,但也可省略不写)

例如,你可以像下面那样在一个脚本中写一个用来显示日期的函数:

showDATE() {date;}

每当你需要显示日期时,只需调用该函数的函数名即可:

$ showDATE

简单来说 shell 函数库也是一个 shell 脚本,不过你可以在一个函数库中仅存储其它 shell 脚本中需要调用的函数。

下面展示的是在我的 ~/lib/sh 目录下一个名为 libMYFUNCS.sh 的库函数:

#!/bin/bash 
### Function to clearly list directories in PATH 
showPATH() { 
  oldifs="$IFS"   ### store old internal field separator
  IFS=:              ### specify a new internal field separator
  for DIR in $PATH<br>  do<br>     echo $DIR<br>  done
  IFS="$oldifs"    ### restore old internal field separator
}
### Function to show logged user
showUSERS() {
  echo -e “Below are the user logged on the system:\n”
  w
}
### Print a user’s details 
printUSERDETS() {
  oldifs="$IFS"    ### store old internal field separator
  IFS=:                 ### specify a new internal field separator
  read -p "Enter user name to be searched:" uname   ### read username
  echo ""
  ### read and store from a here string values into variables
  ### using : as  a  field delimiter
  read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep   "^$uname")"
  ### print out captured values
  echo -e "Username is            : $username\n"
  echo -e "User's ID                 : $uid\n"
  echo -e "User's GID              : $gid\n"
  echo -e "User's Comments    : $comments\n"
  echo -e "User's Home Dir     : $homedir\n"
  echo -e "User's Shell             : $shell\n"
  IFS="$oldifs"         ### store old internal field separator
}

保存文件并且给脚本添加执行权限。

如何从函数库中调用函数

要使用某个 lib 目录下的函数,首先你需要按照下面的形式 将包含该函数的函数库导入到需要执行的 shell 脚本中:

$ . /path/to/lib 
或
$ source /path/to/lib

(LCTT 译注:第一行的 . 和路径间必须是有空格的)

这样你就可以像下面演示的那样,在其它的脚本中使用来自 ~/lib/sh/libMYFUNCS.shprintUSERDETS 函数了。

在下面的脚本中,如果要打印出某个特定用户的详细信息,你不必再一一编写代码,而只需要简单地调用已存在的函数即可。

创建一个名为 test.sh 的新文件:

#!/bin/bash 
### include lib
.  ~/lib/sh/libMYFUNCS.sh
### use function from lib
printUSERDETS
### exit script
exit 0

保存这个文件,并使得这个脚本可被执行,然后运行它:

$ chmod 755 test.sh
$ ./test.sh 

Write Shell Functions

编写 shell 函数

在本文中,我们介绍了在哪里可靠地存储 shell 脚本,如何编写自己的 shell 函数和函数库,以及如何在一个普通的 shell 脚本中从函数库中调用库中的某些函数。

在之后,我们还会介绍一种相当简单直接的方式来将 Vim 配置为一个编写 Bash 脚本的 IDE(集成开发环境)。在那之前,记得要经常关注我们 ,如果能和我们分享你对这份指南的想法就更好了。


作者简介:Aaron Kili 是一名 Linux 和 F.O.S.S 爱好者、一名未来的 Linux 系统管理员、web 开发者,目前是一名 TecMint 上的内容创造者,他喜欢计算机相关的工作,并且坚信知识的分享。


via: http://www.tecmint.com/write-custom-shell-functions-and-libraries-in-linux/

作者:Aaron Kili 译者:wcnnbdk1 校对:FSSlc

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