2017年5月

有时候,通过命令来在 Linux 文件系统导航是一件非常痛苦的事情,特别是对于一些新手。通常情况下,我们主要使用 cd(改变目录)命令在 Linux 文件系统之间移动。

在之前的文章中,我们回顾了一个非常简单但很有用的 Linux 上的 CLI 工具,文章叫做 bd:快速返回某级父目录而不用冗余地输入 “cd ../../..”

在这个教程中,我们将讨论两个相关的命令:pushdpopd ,使用它们可以高效的浏览 Linux 目录结构。这两个命令在大多数 shell ,比如 bash、tcsh 中都存在。

推荐阅读:Autojump:快速浏览 Linux 文件系统的一个高级 cd 命令

pushd 和 popd 命令在 Linux 系统中如何工作

pushdpopd 命令根据 ‘LIFO’(后进先出)原则工作。在这个原则之下,只有两个操作是允许的:把一个目录压入栈,以及把一个目录弹出栈。

pushd 命令会增加一个目录到栈顶,而 popd 命令会从栈顶移除一个目录。

为了显示目录栈中(或历史)的目录,我们可以使用下面展示的 dirs 命令:

$ dirs
或
$ dirs -v

Dirs - Display Directories in Directory

dirs - 显示位于目录栈中的目录

pushd 命令:将一个目录路径添加到/放入目录栈(历史)中,之后,你可以浏览位于目录栈(历史)中的任意目录。当把一个新的目录入栈时,会打印出当前位于栈中的所有目录。

下面这些命令会展示这个命令是如何工作的:

$ pushd  /var/www/html/
$ pushd ~/Documents/
$ pushd ~/Desktop/
$ pushd /var/log/

pushd - Add Directories to Stack

pushd - 添加新目录入栈

根据上面输出的目录栈可知(目录索引按倒序排列):

  • /var/log 是目录栈中的第五个目录,索引为 0
  • ~/Desktop/ 是第四个,索引为 1
  • ~/Document/ 是第三个,索引为 2
  • /var/www/html 是第二个,索引为 3
  • ~ 是第一个,索引为 4

另外,我们也可以使用目录索引的形式 pushd +#pushd -# 来添加目录入栈。为了进入目录 ~/Documents ,我们可以输入:

$ pushd +2

pushd - Directory Navigation with Number

pushd -通过数字浏览目录

注意,经过上一步操作以后,栈的内容便发生了改变。所以,要从上面的例子中进入目录 /var/www/html ,我们应该使用下面的命令:

$ pushd +1

pushd - Navigate Directory with Number

pushd -通过数字浏览目录

popd 命令-从栈顶或历史中移除一个目录。为了列出目录栈中的所有目录,只需输入:

$ popd

为了从目录栈中移除一个目录,我们可以使用 popd +#popd -# 命令,在这时,我们需要输入下面的命令来移除目录 ~/Documents

$ popd +1

popd - Remove Directory from Stack

popd-从栈中以移除目录

在这篇文章中,我们阐述了 pushdpopd 命令,使用它们可以高效的访问目录结构。你可以通过下面的反馈表和我们分享你关于这篇文章的想法。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: https://www.tecmint.com/pushd-and-popd-linux-filesystem-navigation/

作者:Aaron Kili 译者:ucasFL 校对:wxy

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

对 Git 仓库的维护通常是为了减少仓库的大小。如果你从另外一个版本控制系统导入了一个仓库,你可能需要在导入后清除掉不必要的文件。本文着重于从一个 Git 仓库中删除大文件,并且包含下列主题:

  • 理解从 Git 的历史记录中删除文件
  • 使用 BFG 重写历史记录
  • 可选,使用 git filter-branch 重写历史记录
  • 垃圾回收

请格外小心.....

本文中的步骤和工具使用的高级技术涉及破坏性操作。确保您在开始之前仔细读过并备份了你的仓库,创建一个备份最容易的方式是使用 --mirror 标志对你的仓库克隆,然后对整个克隆的文件进行打包压缩。有了这个备份,如果在维护期间意外损坏了您的仓库的关键元素,那么你可以通过备份的仓库来恢复。

请记住,仓库维护对仓库的用户可能会是毁灭性的。与你的团队或者仓库的关注者进行沟通会是一个不错的主意。确保每个人都已经检查了他们的代码,并且同意在仓库维护期间停止开发。

理解从 Git 的历史记录中删除文件

回想一下,克隆仓库会克隆整个历史记录——包括每个源代码文件的所有版本。如果一个用户提交了一个较大的文件,比如一个 JAR,则随后的每次克隆都会包含这个文件。即使用户最终在后面的某次提交中删除了这个文件,但是这个文件仍然存在于这个仓库的历史记录中。要想完全的从你的仓库中删除这个文件,你必须:

  • 从你的项目的当前的文件树中删除该文件;
  • 从仓库的历史记录中删除文件——重写 Git 历史记录,从包含该文件的所有的提交中删除这个文件;
  • 删除指向旧的提交历史记录的所有 reflog 历史记录;
  • 重新整理仓库,使用 git gc 对现在没有使用的数据进行垃圾回收。

Git 的 “gc”(垃圾回收)将通过你的任何一个分支或者标签来删除仓库中所有的实际没用的或者以某种方式引用的数据。为了使其发挥作用,我们需要重写包含不需要的文件的所有 Git 仓库历史记录,仓库将不再引用它—— git gc 将会丢弃所有没用的数据。

重写存储库历史是一个棘手的事情,因为每个提交都依赖它的父提交,所以任何一个很小的改变都会改变它的每一个随后的提交的提交 ID。有两个自动化的工具可以做到这:

  1. BFG Repo Cleaner 快速、简单且易于使用,需要 Java 6 或者更高版本的运行环境。
  2. git filter-branch 功能强大、配置麻烦,用于大于仓库时速度较慢,是核心 Git 套件的一部分。

切记,当你重写历史记录后,无论你是使用 BFG 还是使用 filter-branch,你都需要删除指向旧的历史记录的 reflog 条目,最后运行垃圾回收器来删除旧的数据。

使用 BFG 重写历史记录

BFG 是为将像大文件或者密码这些不想要的数据从 Git 仓库中删除而专门设计的,所以它有一一个简单的标志用来删除那些大的历史文件(不在当前的提交里面):--strip-blobs-bigger-than

$ java -jar bfg.jar --strip-blobs-than 100M

大小超过 100MB 的任何文件(不包含在你最近的提交中的文件——因为 BFG 默认会保护你的最新提交的内容)将会从你的 Git 仓库的历史记录中删除。如果你想用名字来指明具体的文件,你也可以这样做:

$ java -jar bfg.jar --delete-files *.mp4

BFG 的速度要比 git filter-branch10-1000 倍,而且通常更容易使用——查看完整的使用说明示例获取更多细节。

或者,使用 git filter-branch 来重写历史记录

filter-branch 命令可以对 Git 仓库的历史记录重写,就像 BFG 一样,但是过程更慢和更手动化。如果你不知道这些大文件在哪里,那么你第一步就需要找到它们:

手动查看你 Git 仓库中的大文件

Antony Stubbs 写了一个可以很好地完成这个功能的 BASH 脚本。该脚本可以检查你的包文件的内容并列出大文件。在你开始删除文件之前,请执行以下操作获取并安装此脚本:

1、 下载脚本到你的本地的系统。

2、 将它放在一个可以访问你的 Git 仓库的易于找到的位置。

3、 让脚本成为可执行文件:

$ chmod 777 git_find_big.sh

4、 克隆仓库到你本地系统。

5、 改变当前目录到你的仓库根目录。

6、 手动运行 Git 垃圾回收器:

git gc --auto

7、 找出 .git 文件夹的大小

$ du -hs .git/objects
45M .git/objects

注意文件大小,以便随后参考。

8、 运行 git_find_big.sh 脚本来列出你的仓库中的大文件。

$ git_find_big.sh 
All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
size  pack  SHA                                       location
592   580   e3117f48bc305dd1f5ae0df3419a0ce2d9617336  media/img/emojis.jar
550   169   b594a7f59ba7ba9daebb20447a87ea4357874f43  media/js/aui/aui-dependencies.jar
518   514   22f7f9a84905aaec019dae9ea1279a9450277130  media/images/screenshots/issue-tracker-wiki.jar
337   92    1fd8ac97c9fecf74ba6246eacef8288e89b4bff5  media/js/lib/bundle.js
240   239   e0c26d9959bd583e5ef32b6206fc8abe5fea8624  media/img/featuretour/heroshot.png

大文件都是 JAR 文件,包的大小列是最相关的。aui-dependencies.jar 被压缩到 169kb,但是 emojis.jar 只压缩到 500kb。emojis.jar 就是一个待删除的对象。

运行 filter-branch

你可以给这个命令传递一个用于重写 Git 索引的过滤器。例如,一个过滤器可以可以将每个检索的提交删除。这个用法如下:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch  _pathname_ ' commitHASH

--index-filter 选项可以修改仓库的索引,--cached 选项从索引中而不是磁盘来删除文件。这样会更快,因为你不需要在运行这个过滤器前检查每个修订版本。git rm 中的 ignore-unmatch 选项可以防止在尝试移走不存在的文件 pathname 的时候命令失败。通过指定一个提交 HASH 值,你可以从每个以这个 HASH 值开始的提交中删除pathname。要从开始处删除,你可以省略这个参数或者指定为 HEAD

如果你的大文件在不同的分支,你将需要通过名字来删除每个文件。如果大文件都在一个单独的分支,你可以直接删除这个分支本身。

选项 1:通过文件名删除文件

使用下面的步骤来删除大文件:

1、 使用下面的命令来删除你找到的第一个大文件:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

2、 重复步骤 1 找到剩下的每个大文件。

3、 在你的仓库里更新引用。 filter-branch 会为你原先的引用创建一个 refs/original/ 下的备份。一旦你确信已经删除了正确的文件,你可以运行下面的命令来删除备份文件,同时可以让垃圾回收器回收大的对象:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

选项 2:直接删除分支

如果你所有的大文件都在一个单独的分支上,你可以直接删除这个分支。删除这个分支会自动删除所有的引用。

1、 删除分支。

$ git branch -D PROJ567bugfix

2、 从后面的分支中删除所有的 reflog 引用。

对不用的数据垃圾回收

1、 删除从现在到后面的所有 reflog 引用(除非你明确地只在一个分支上操作)。

$ git reflog expire --expire=now --all

2、 通过运行垃圾回收器和删除旧的对象重新打包仓库。

$ git gc --prune=now

3、 把你所有的修改推送回仓库。

$ git push --all --force

4、 确保你所有的标签也是当前最新的:

$ git push --tags --force

via: https://confluence.atlassian.com/bitbucket/maintaining-a-git-repository-321848291.html

作者:atlassian.com 译者:zhousiyu325 校对:wxy

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

ttyload 是一个轻量级的实用程序,它为 Linux 和其他类 Unix 系统上提供随着时间变化的彩色平均负载。它实现了在终端中(“tty”)图形化跟踪系统的平均负载。

它已知可以在诸如 Linux、IRIX、Solaris、FreeBSD、MacOS X (Darwin) 和 Isilon OneFS 等系统上运行。它被设计为可以容易地移植到其他平台,但这也带来了一些艰苦的工作。

它的一些值得注意功能是:它使用标准的硬编码 ANSI 转义序列进行屏幕显示和着色。如果你想要在一个没有什么负载压力的系统中查看工作的情况,它甚至还自带了一个相对独立(默认不会安装,甚至不会构建)的负载炸弹。

建议阅读:GoTTY:把你的 Linux 终端放到浏览器里面

在本篇中,我们会向你展示如何在 Linux 安装及使用 ttyload,以在终端中用彩色图形查看系统的平均负载。

如何在 Linux 中安装 ttyload

在基于 Debian/Ubuntu 的发行版中,你可以输入下面的 apt 命令来从默认的系统仓库中安装 ttyload。

$ sudo apt-get install ttyload

在其他发行版中,你可以如下从 ttyload 的源码安装。

$ git clone https://github.com/lindes/ttyload.git
$ cd ttyload
$ make
$ ./ttyload
$ sudo make install

安装完成后,你可以输入下面的命令启动。

$ ttyload

ttyload - Graphical View of Linux Load Average

ttyload - 图形浏览 Linux 的平均负载

注意:要关闭程序,只需按下 Ctrl+C 键。

你也可以定义两次刷新之间间隔的秒数。默认是 4 秒,最小是 1 秒。

$ ttyload -i 5
$ ttyload -i 1

要以单色模式运行,即它会关闭 ANSI 转义,如下使用 -m

$ ttyload -m

ttyload - Monochrome Mode

ttyload – 单色模式

要获取 ttyload 的使用信息以及帮助,输入:

$ ttyload -h 

下面是一些尚不支持的重要功能:

  • 支持任意大小调整。
  • 使用相同的基本引擎制作 X 前端,“3xload”。
  • 面向日志的模式。

要获得更多信息,访问 ttyload 的主页:http://www.daveltd.com/src/util/ttyload/

就是这样了!在本文中,我们向你展示了如何在 Linux 中安装及使用 ttyload。通过下面的评论栏给我们回馈。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 的爱好者,即将推出的 Linux SysAdmin 网络开发人员,目前也是 TecMint 的内容创作者,他喜欢和电脑一起工作,并且坚信共享知识。


via: https://www.tecmint.com/ttyload-shows-color-coded-graph-of-linux-load-average/

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

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

在先前的文章中,我们解释了 Linux 中 shutdown、poweroff、halt、reboot 命令的不同之处,并揭示了在用不同的选项执行这些命令时它们实际做了什么。

本篇将会向你展示如何在系统关机时向所有的系统用户发送一条自定义的消息。

建议阅读:tuptime - 显示 Linux 系统的历史和统计运行时间

作为一名系统管理员,在你关闭服务器之前,你也许想要发送一条消息来警告他们系统将要关闭。默认上,shutdown 命令会如下所示给其他系统用户广播这条信息:

# shutdown 13:25

Linux 关机操作广播消息

Shutdown scheduled for Fri 2017-05-12 13:25:00 EAT, use 'shutdown -c' to cancel.
Broadcast message for root@tecmint (Fri 2017-05-12 13:23:34 EAT):
The system is going down for power-off at Fri 2017-05-12 13:25:00 EAT!

要在 shutdown 那行发送一条自定义的消息给其他系统用户,运行下面的命令。在本例中,关闭会在命令执行后的两分钟之后发生。

# shutdown 2 The system is going down for required maintenance. Please save any important work you are doing now!

Linux System Shutdown Message

Linux 系统关闭消息

假设你有一些关键的系统操作,如计划系统备份或更新会在系统关闭的时候进行,如下所示,你可以使用 -c 选项取消关机,并在执行玩这些操作后继续执行:

# shutdown -c

Linux 关机操作取消消息:

Shutdown scheduled for Fri 2017-05-12 14:10:22 EAT, use 'shutdown -c' to cancel.
Broadcast message for root@tecmint (Fri 2017-05-14 :10:27 EAT):
The system shutdown has been cancelled at Fri 2017-05-12 14:11:27 EAT!

另外,学习如何在 Linux 中使用简单和传统的方法在重启或者开机时自动执行命令/脚本

不要错过:

  1. 管理系统启动进程和服务(SysVinit、Systemd 和 Upstart)
  2. 11 个 Linux 中 cron 计划任务示例

现在你知道了如何在系统关闭前向其他系统用户发送自定义消息了。你有其他关于这个主题想要分享的想法么?何不使用下面的评论栏?


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者、Linux 系统管理员、网络开发人员,现在也是 TecMint 的内容创作者,他喜欢和电脑一起工作,坚信共享知识。


via: https://www.tecmint.com/show-linux-server-shutdown-message/

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

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

 title=

在过去的几年中,我一直在做大量容器相关的工作。先前,我看到 Julien Friedman 的一个很棒的演讲,它用几行 Go 语言写了一个容器框架。这让我突然了解到容器只是一个受限的 Linux 进程中的机器。

构建这个受限视图涉及到 Golang 系统调用包中的很多调用。最初,我只是用到了表面的那些,但过了一段时间,我想剥下洋葱的下一层,看看这些系统调用是什么,以及它们的工作原理。我将在 OSCON 的演讲中分享我所学到的东西。

顾名思义,syscalls 即系统调用,它们是你从用户空间请求进入 Linux 内核的方式。内核为你做一些工作,例如创建一个进程,然后再回到用户空间。

有一个常见的机制使所有的系统调用转换到内核,这是由 libc 库处理的。 用户空间代码设置一些寄存器,包括其想要的系统调用的 ID 以及需要传递给系统调用的所有参数。它触发一个 “陷阱” 将控制转换到内核。

这就是用户空间代码如何向内核请求的,而 Linux 也有一个伪文件系统,它允许内核将信息传递给用户空间,其内容看起来像普通的目录和文件。

/proc 目录是一个很好的例子。看看里面,你会发现有关机器上运行的进程的各种有趣的信息。在某些情况,像 cgroups(控制组)那样,用户空间可以通过写入这些伪文件系统下的文件来配置参数。

当你在使用容器时,特别有趣的是,主机的 /proc 包含了所有有关容器化的进程的信息。这包括环境变量,它们也保存在 /proc 伪文件系统中,这意味着你的主机可以访问所有正在运行的容器的环境。如果你通过环境变量将诸如凭证或数据库密码这类秘密传递到容器中,则可能会产生安全性后果。

许多编写常规程序的程序员可能不觉得他们经常使用系统调用。但实际上他们会经常调用,因为每天的活动比如制作文件或者更改目录都涉及 Linux 的系统调用。

你不必是一位系统程序员才能享受系统调用的乐趣!

如果你想要了解更多,Liz 会在 Austin,Texas 举办的 OSCON 2017 上演讲 Linux 系统调用的初学者指南

(题图: opensource.com)


作者简介:

Liz Rice - Liz Rice 是一位技术传播者,也是 Aqua Security 的容器安全专家。此前,她共同创立了 Microscaling Systems,并开发了其实时伸缩引擎,以及流行的图像元数据网站 MicroBadger.com。她拥有丰富的从网络协议和分布式系统,以及数字技术领域,如 VOD,音乐和 VoIP 软件的开发、团队和产品管理经验。


via: https://opensource.com/article/17/5/beginners-guide-syscalls

作者:Liz Rice 译者:geekpi 校对:wxy

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

linux-desktop-advantages

当我放弃 Windows 转而使用 Linux 系统 后,我的信心不断增长。出于安全方面的考虑促使我选用 Linux 系统,但是我很快发现了很多使用 Linux 桌面系统的优势。

对于那些还对 Linux 系统犹豫不决,或是那些不甚了解 Linux 系统的用户,我将通过这篇文章给大家介绍一些使用 Linux 桌面系统的优势。

免费才是王道

首先, Linux 系统完全免费。你无须为使用的操作系统或软件花费一分钱。除了免费获取软件产生的经济效益之外,你还可以在 Linux 系统中随意使用一些当前很流行的软件,比如文字处理软件和照片编辑软件——由于费用方面的原因,我们可能不太愿意花钱去购买这些软件。

微软的 Office 办公软件几乎是处理各种类型文档的一种标准软件了,但是它每年的费用竟高达 70 美元。然而,你却可以免费使用 LibreOffice 软件来代替,它同样可以处理各种类型的文档,而且使用也很方便。

免费软件还能让您有机会尝试新的功能,并通过它们寻求商务和休闲的新方式,而且你也不需要支付任何预期的费用。

与其费尽周折的去衡量 Mac 或 Windows 系统的优点,你可以考虑下在上百款不同风格的 Linux 发行版中选择一款最适合自己的操作系统。

Linux 系统甚至在硬件方面也为用户节省了不少钱,比如有些厂商——尤其是戴尔公司——为购买预安装了 Linux 系统的电脑的用户提供打折优惠。这些电脑的价格相对来说比较便宜,因为用户无须再花钱购买微软的 Windows 系统许可证。

随心所欲的系统定制

其次,在 Linux 系统中,你可以对系统功能进行任意更改。 Linux 生态系统中的核心项目之一就是桌面环境——它是一些由基础的用户程序和可视化元素组成的一个集合,比如状态栏和启动器,这些元素构成了用户与计算机的一个交互界面。

有些 Linux 发行版还预安装了桌面环境。比如, Ubuntu 系统就预安装了 Unity 桌面。其它系统,比如 Debian 会在系统安装的过程中让用户选择需要的桌面环境。总之,在 Linux 系统中,用户都可以随意更换他们喜欢的桌面环境。

大多数的 Linux 发行版都支持(也就是兼容)那些非常流行的桌面环境,因此,找到一款适合自己的桌面系统也非常容易。在桌面系统这个万花筒里,你可以找到界面华丽的系统桌面,比如 KDE Plasma 或者 Gnome,以及轻量级的系统桌面,比如 Xfce 和 MATE 桌面。使用任一款系统桌面,你都可以通过更改主题、系统托盘和菜单,以及仿照其它用户的桌面环境来进一步定制自己的桌面环境。

Linux 系统的可定制特性完全超出你的想象力。如果你更看重系统的稳定性,你可以使用 Mint 这个发行版系统,它对硬件的兼容性非常好,而且也能确保系统顺利更新。

除此之外,如果你希望及时领略前沿,你可以安装 Arch Linux ,每一款软件只要开发者一发布,你就可以进行得到最新更新。

如果你介乎于两者之间,既想要稳定的系统,也想运行一些几个崭新的程序,你可以下载程序的源代码(程序员所开发的代码文件),然后自己进行编译。这就需要你使用工具来编译源代码,生成一堆你的电脑可以运行的 0 和 1 组成的二进制文件。

你可以使用自己喜欢的任何方式去折腾属于自己的 Linux 系统。

无与伦比的安全性

第三,多才多艺的 Linux 系统还有一个更重要的特性:安全。

起初,尽管有一些针对 Linux 系统的病毒,但是跟 Mac 系统比起来,已经屈指可数了。更重要的是,实际上 Linux 系统的核心代码是开源的,对用户完全透明,这意味着你的 Linux 系统漏洞更少。

一些专有(比如,不开源)的操作系统被认为会影响用户安全,因为它们会启动一些实现方式糟糕的、不透明的进程,从而造成了巨大的威胁。

比如说, Windows 系统在升级的过程中,默认情况下不会检查加密签名来验证更新文件的可靠性。

而使用 Linux 系统,你可以在选择更新时通过签名检查进行严格的细粒度控制,大多数的发行版在系统更新时都默认强制安全检查。这种责任感源自于 Linux 系统的开源开发模式所带来的透明度。

像 Arch Linux 这种滚动发行版则增加了更多的安全性设置,因为一些重要的补丁一旦通过验证, Arch Linux 就会马上可以使用。你可能很难找到那些每天都提供更新的单一主流操作系统,但是这样的 Linux 发行版却有很多。

天生的编程环境

很多开发者或者任何对编程有兴趣的人都得益于 Linux 桌面系统中集成的强大开发工具。其中包括那些最经典的编程工具,比如 GNU C 编译器,或者 GCC 和 GNU Autoconf 工具都是 Linux 系统中一些非常重要的基础工具。

Linux 系统的大多数默认软件库都支持数十种编程语言,它包含了发行版中可以使用的预编译软件。

很多因特网的基础架构和许多联网设备都运行于 Linux 系统上——从服务器到智能设备,比如安防摄像机和恒温器。在 Linux 系统下开发调试这些设备的软件非常容易。如果你有一个跟计算机相关的项目, Linux 系统可以完美地支持你完成这个项目。

社区是 Linux 系统发展的关键

最后一点, Linux 系统拥有一个团结且友好型的社区。由于 Linux 在桌面系统是一个相对小众的桌面操作系统,仅占有 3% 左右的市场份额,因此, Linux 社区更希望有更多的潜在用户加入进来。

Linux 系统有很多的用户论坛,尤其是对新手比较友好的 Ubuntu 系统论坛,它包括非常丰富且全面的知识来帮助用户解决一些基本的系统问题。很多高级用户更倾向于使用 Linux 系统,因此那些 Linux 发行版都拥有非常非常详尽维基文档,以指导用户完成高级的系统应用项目。

甚至还有业余的 Linux 论坛和 Reddit 讨论区,所涉及的范围包括从对比 Linux 系统各种应用软件到炫耀桌面主题等。总而言之,这是一个比 Windows 用户群更加友善的社区。

我沉浸在 Linux 的世界里两年多了,我更加相信 Linux 系统对每一个用户都有所帮助。我希望这篇文章能够让你了解到 Linux 桌面系统的各种优势。但是真正的乐趣是从中发现自己感兴趣的东西!


via: http://www.linuxinsider.com/story/84326.html

作者:Jonathan Terrasi 译者:rusking 校对:wxy

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