分类 技术 下的文章

在 fleetster, 我们搭建了自己的 Gitlab 实例,而且我们大量使用了 Gitlab CI。我们的设计师和测试人员也都在用它,也很喜欢用它,它的那些高级功能特别棒。

Gitlab CI 是一个功能非常强大的持续集成系统,有很多不同的功能,而且每次发布都会增加新的功能。它的技术文档也很丰富,但是对那些要在已经配置好的 Gitlab 上使用它的用户来说,它缺乏一个一般性介绍。设计师或者测试人员是无需知道如何通过 Kubernetes 来实现自动伸缩,也无需知道“镜像”和“服务”之间的不同的。

但是,他仍然需要知道什么是“管道”,知道如何查看部署到一个“环境”中的分支。因此,在本文中,我会尽可能覆盖更多的功能,重点放在最终用户应该如何使用它们上;在过去的几个月里,我向我们团队中的某些人包括开发者讲解了这些功能:不是所有人都知道 持续集成 Continuous Integration (CI)是个什么东西,也不是所有人都用过 Gitlab CI。

如果你想了解为什么持续集成那么重要,我建议阅读一下 这篇文章,至于为什么要选择 Gitlab CI 呢,你可以去看看 Gitlab.com 上的说明。

简介

开发者保存更改代码的动作叫做一次 提交 commit 。然后他可以将这次提交 推送 push 到 Gitlab 上,这样可以其他开发者就可以 复查 review 这些代码了。

Gitlab CI 配置好后,Gitlab 也能对这个提交做出一些处理。该处理的工作由一个 运行器 runner 来执行的。所谓运行器基本上就是一台服务器(也可以是其他的东西,比如你的 PC 机,但我们可以简单称其为服务器)。这台服务器执行 .gitlab-ci.yml 文件中指令,并将执行结果返回给 Gitlab 本身,然后在 Gitlab 的图形化界面上显示出来。

开发者完成一项新功能的开发或完成一个 bug 的修复后(这些动作通常包含了多次的提交),就可以发起一个 合并请求 merge request ,团队其他成员则可以在这个合并请求中对代码及其实现进行 评论 comment 。

我们随后会看到,由于 Gitlab CI 提供的两大特性, 环境 environment 与 制品 artifact ,使得设计者和测试人员也能(而且真的需要)参与到这个过程中来,提供反馈以及改进意见。

管道 pipeline

每个推送到 Gitlab 的提交都会产生一个与该提交关联的 管道 pipeline 。若一次推送包含了多个提交,则管道与最后那个提交相关联。管道就是一个分成不同 阶段 stage 的 作业 job 的集合。

同一阶段的所有作业会并发执行(在有足够运行器的前提下),而下一阶段则只会在上一阶段所有作业都运行并返回成功后才会开始。

只要有一个作业失败了,整个管道就失败了。不过我们后面会看到,这其中有一个例外:若某个作业被标注成了手工运行,那么即使失败了也不会让整个管道失败。

阶段则只是对批量的作业的一个逻辑上的划分,若前一个阶段执行失败了,则后一个执行也没什么意义了。比如我们可能有一个 构建 build 阶段和一个 部署 deploy 阶段,在构建阶段运行所有用于构建应用的作业,而在部署阶段,会部署构建出来的应用程序。而部署一个构建失败的东西是没有什么意义的,不是吗?

同一阶段的作业之间不能有依赖关系,但它们可以依赖于前一阶段的作业运行结果。

让我们来看一下 Gitlab 是如何展示阶段与阶段状态的相关信息的。

pipeline-overview

pipeline-status

作业 job

作业就是运行器要执行的指令集合。你可以实时地看到作业的输出结果,这样开发者就能知道作业为什么失败了。

作业可以是自动执行的,也就是当推送提交后自动开始执行,也可以手工执行。手工作业必须由某个人手工触发。手工作业也有其独特的作用,比如,实现自动化部署,但只有在有人手工授权的情况下才能开始部署。这是限制哪些人可以运行作业的一种方式,这样只有信赖的人才能进行部署,以继续前面的实例。

作业也可以建构出 制品 artifacts 来以供用户下载,比如可以构建出一个 APK 让你来下载,然后在你的设备中进行测试; 通过这种方式,设计者和测试人员都可以下载应用并进行测试,而无需开发人员的帮助。

除了生成制品外,作业也可以部署环境,通常这个环境可以通过 URL 访问,让用户来测试对应的提交。

做作业状态与阶段状态是一样的:实际上,阶段的状态就是继承自作业的。

running-job

制品 Artifacts

如前所述,作业能够生成制品供用户下载来测试。这个制品可以是任何东西,比如 Windows 上的应用程序,PC 生成的图片,甚至 Android 上的 APK。

那么,假设你是个设计师,被分配了一个合并请求:你需要验证新设计的实现!

要该怎么做呢?

你需要打开该合并请求,下载这个制品,如下图所示。

每个管道从所有作业中搜集所有的制品,而且一个作业中可以有多个制品。当你点击下载按钮时,会有一个下拉框让你选择下载哪个制品。检查之后你就可以评论这个合并请求了。

你也可以从没有合并请求的管道中下载制品 ;-)

我之所以关注合并请求是因为通常这正是测试人员、设计师和相关人员开始工作的地方。

但是这并不意味着合并请求和管道就是绑死在一起的:虽然它们结合的很好,但两者之间并没有什么关系。

download-artifacts

环境 environment

类似的,作业可以将某些东西部署到外部服务器上去,以便你可以通过合并请求本身访问这些内容。

如你所见, 环境 environment 有一个名字和一个链接。只需点击链接你就能够转至你的应用的部署版本上去了(当前,前提是配置是正确的)。

Gitlab 还有其他一些很酷的环境相关的特性,比如 监控 monitoring ,你可以通过点击环境的名字来查看。

environment

总结

这是对 Gitlab CI 中某些功能的一个简单介绍:它非常强大,使用得当的话,可以让整个团队使用一个工具完成从计划到部署的工具。由于每个月都会推出很多新功能,因此请时刻关注 Gitlab 博客。

若想知道如何对它进行设置或想了解它的高级功能,请参阅它的文档。

在 fleetster,我们不仅用它来跑测试,而且用它来自动生成各种版本的软件,并自动发布到测试环境中去。我们也自动化了其他工作(构建应用并将之发布到 Play Store 中等其它工作)。

说起来,你是否想和我以及其他很多超棒的人一起在一个年轻而又富有活力的办公室中工作呢? 看看 fleetster 的这些招聘职位 吧!

赞美 Gitlab 团队 (和其他在空闲时间提供帮助的人),他们的工作太棒了!

若对本文有任何问题或回馈,请给我发邮件:[email protected] 或者发推给我:-) 你可以建议我增加内容,或者以更清晰的方式重写内容(英文不是我的母语)。

那么,再见吧,

R.

P.S:如果你觉得本文有用,而且希望我们写出其他文章的话,请问您是否愿意帮我买杯啤酒给我 让我进入 鲍尔默峰值?


via: https://rpadovani.com/introduction-gitlab-ci

作者:Riccardo 译者:lujun9972 校对:wxy

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

Linux 系统为文件压缩提供了许多选择,关键是选择一个最适合你的。

如果你对可用于 Linux 系统的文件压缩命令或选项有任何疑问,你也许应该看一下 apropos compress 这个命令的输出。如果你有机会这么做,你会惊异于有如此多的的命令来进行压缩文件和解压缩文件;此外还有许多命令来进行压缩文件的比较、检验,并且能够在压缩文件中的内容中进行搜索,甚至能够把压缩文件从一个格式变成另外一种格式(如,将 .z 格式变为 .gz 格式 )。

你可以看到只是适用于 bzip2 压缩的全部条目就有这么多。加上 zip、gzip 和 xz 在内,你会有非常多的选择。

$ apropos compress | grep ^bz
    bzcat (1)            - decompresses files to stdout
    bzcmp (1)            - compare bzip2 compressed files
    bzdiff (1)           - compare bzip2 compressed files
    bzegrep (1)          - search possibly bzip2 compressed files for a regular expression
    bzexe (1)            - compress executable files in place
    bzfgrep (1)          - search possibly bzip2 compressed files for a regular expression
    bzgrep (1)           - search possibly bzip2 compressed files for a regular expression
    bzip2 (1)            - a block-sorting file compressor, v1.0.6
    bzless (1)           - file perusal filter for crt viewing of bzip2 compressed text
    bzmore (1)           - file perusal filter for crt viewing of bzip2 compressed text   

在我的 Ubuntu 系统上 ,apropos compress 命令的返回中列出了 60 条以上的命令。

压缩算法

压缩并没有普适的方案,某些压缩工具是有损压缩,例如一些压缩用于减少 mp3 文件大小,而能够使聆听者有接近原声的音乐感受。但是在 Linux 命令行上压缩或归档用户文件所使用的算法必须能够精确地重新恢复为原始数据。换句话说,它们必须是无损的。

这是如何做到的?让我们假设在一行上有 300 个相同的字符可以被压缩成像 “300x” 这样的字符串,但是这种算法对大多数文件没有很大的用处,因为文件中不可能包含长的相同字符序列比完全随机的序列更多。 压缩算法要复杂得多,从 Unix 早期压缩首次被引入以来,它就越来越复杂了。

在 Linux 系统上的压缩命令

在 Linux 系统上最常用的文件压缩命令包括 zip、gzip、bzip2、xz。 所有这些压缩命令都以类似的方式工作,但是你需要权衡有多少文件要压缩(节省多少空间)、压缩花费的时间、压缩文件在其他你需要使用的系统上的兼容性。

有时压缩一个文件并不会花费很多时间和精力。在下面的例子中,被压缩的文件实际上比原始文件要大。这并不是一个常见情况,但是有可能发生——尤其是在文件内容达到一定程度的随机性。

$ time zip bigfile.zip bigfile
    adding: bigfile (default 0% )
real    0m0.055s
user    0m0.000s
sys     0m0.016s 
$ ls -l bigfile*
-rw-r--r-- 1 root root   0 12月 20 22:36 bigfile
-rw------- 1 root root 164 12月 20 22:41 bigfile.zip

注意该文件压缩后的版本(bigfile.zip)比原始文件(bigfile)要大。如果压缩增加了文件的大小或者减少很少的比例,也许唯一的好处就是便于在线备份。如果你在压缩文件后看到了下面的信息,你不会从压缩中得到什么受益。

 ( defalted 1% )

文件内容在文件压缩的过程中有很重要的作用。在上面文件大小增加的例子中是因为文件内容过于随机。压缩一个文件内容只包含 0 的文件,你会有一个相当震惊的压缩比。在如此极端的情况下,三个常用的压缩工具都有非常棒的效果。

-rw-rw-r-- 1 shs shs 10485760 Dec 8 12:31 zeroes.txt
-rw-rw-r-- 1 shs shs 49 Dec 8 17:28 zeroes.txt.bz2
-rw-rw-r-- 1 shs shs 10219 Dec 8 17:28 zeroes.txt.gz
-rw-rw-r-- 1 shs shs 1660 Dec 8 12:31 zeroes.txt.xz
-rw-rw-r-- 1 shs shs 10360 Dec 8 12:24 zeroes.zip

令人印象深刻的是,你不太可能看到超过 1000 万字节而压缩到少于 50 字节的文件, 因为基本上不可能有这样的文件。

在更真实的情况下 ,大小差异总体上是不同的,但是差别并不显著,比如对于确实不太大的 jpg 图片文件来说。

-rw-r--r-- 1 shs shs 13522 Dec 11 18:58 image.jpg
-rw-r--r-- 1 shs shs 13875 Dec 11 18:58 image.jpg.bz2
-rw-r--r-- 1 shs shs 13441 Dec 11 18:58 image.jpg.gz
-rw-r--r-- 1 shs shs 13508 Dec 11 18:58 image.jpg.xz
-rw-r--r-- 1 shs shs 13581 Dec 11 18:58 image.jpg.zip

在对大的文本文件同样进行压缩时 ,你会看到显著的不同。

$ ls -l textfile*
    -rw-rw-r-- 1 shs shs 8740836 Dec 11 18:41 textfile
    -rw-rw-r-- 1 shs shs 1519807 Dec 11 18:41 textfile.bz2
    -rw-rw-r-- 1 shs shs 1977669 Dec 11 18:41 textfile.gz
    -rw-rw-r-- 1 shs shs 1024700 Dec 11 18:41 textfile.xz
    -rw-rw-r-- 1 shs shs 1977808 Dec 11 18:41 textfile.zip

在这种情况下 ,xz 相较于其他压缩命令有效的减小了文件大小,对于第二的 bzip2 命令也是如此。

查看压缩文件

这些以 more 结尾的命令(bzmore 等等)能够让你查看压缩文件的内容而不需要解压文件。

bzmore (1) - file perusal filter for crt viewing of bzip2 compressed text
lzmore (1) - view xz or lzma compressed (text) files
xzmore (1) - view xz or lzma compressed (text) files
zmore (1) - file perusal filter for crt viewing of compressed text

为了解压缩文件内容显示给你,这些命令做了大量的计算。但在另一方面,它们不会把解压缩后的文件留在你系统上,它们只是即时解压需要的部分。

$ xzmore textfile.xz | head -1
    Here is the agenda for tomorrow's staff meeting:       

比较压缩文件

有几个压缩工具箱包含一个差异命令(例如 :xzdiff),那些工具会把这些工作交给 cmp 和 diff 来进行比较,而不是做特定算法的比较。例如,xzdiff 命令比较 bz2 类型的文件和比较 xz 类型的文件一样简单 。

如何选择最好的 Linux 压缩工具

如何选择压缩工具取决于你工作。在一些情况下,选择取决于你所压缩的数据内容。在更多的情况下,取决你组织内的惯例,除非你对磁盘空间有着很高的敏感度。下面是一般性建议:

zip 对于需要分享给或者在 Windows 系统下使用的文件最适合。

gzip 或许对你要在 Unix/Linux 系统下使用的文件是最好的。虽然 bzip2 已经接近普及,但 gzip 看起来仍将长期存在。

bzip2 使用了和 gzip 不同的算法,并且会产生比 gzip 更小的文件,但是它们需要花费更长的时间进行压缩。

xz 通常可以提供最好的压缩率,但是也会花费相当长的时间。它比其他工具更新一些,可能在你工作的系统上还不存在。

注意

在压缩文件时,你有很多选择,而在极少的情况下,并不能有效节省磁盘存储空间。


via: https://www.networkworld.com/article/3240938/linux/how-to-squeeze-the-most-out-of-linux-file-compression.html

作者:Sandra Henry-Stocker 译者:singledo 校对:wxy

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

我已经在 CentOS/RHEL 上安装了 htop 。现在想知道软件被安装在哪个位置。有没有简单的方法能找到 yum 软件包安装的目录呢?

yum 命令 是可交互的、基于 rpm 的 CentOS/RHEL 的开源软件包管理工具。它会帮助你自动地完成以下操作:

  1. 核心系统文件更新
  2. 软件包更新
  3. 安装新的软件包
  4. 删除旧的软件包
  5. 查找已安装和可用的软件包

和 yum 相似的软件包管理工具有: apt-get 命令 和 apt 命令。

yum 安装软件包的位置

处于演示的目的,我们以下列命令安装 htop:

# yum install htop

要列出名为 htop 的 yum 软件包安装的文件,运行下列 rpm 命令:

# rpm -q {packageNameHere}
# rpm -ql htop

示例输出:

/usr/bin/htop
/usr/share/doc/htop-2.0.2
/usr/share/doc/htop-2.0.2/AUTHORS
/usr/share/doc/htop-2.0.2/COPYING
/usr/share/doc/htop-2.0.2/ChangeLog
/usr/share/doc/htop-2.0.2/README
/usr/share/man/man1/htop.1.gz
/usr/share/pixmaps/htop.png

如何使用 repoquery 命令查看由 yum 软件包安装的文件位置

首先使用 yum 命令 安装 yum-utils 软件包:

# yum install yum-utils

示例输出:

Resolving Dependencies
--> Running transaction check
---> Package yum-utils.noarch 0:1.1.31-42.el7 will be installed
--> Processing Dependency: python-kitchen for package: yum-utils-1.1.31-42.el7.noarch
--> Processing Dependency: libxml2-python for package: yum-utils-1.1.31-42.el7.noarch
--> Running transaction check
---> Package libxml2-python.x86_64 0:2.9.1-6.el7_2.3 will be installed
---> Package python-kitchen.noarch 0:1.1.1-5.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================
 Package           Arch      Version             Repository                       Size
=======================================================================================
Installing:
 yum-utils         noarch    1.1.31-42.el7       rhui-rhel-7-server-rhui-rpms    117 k
Installing for dependencies:
 libxml2-python    x86_64    2.9.1-6.el7_2.3     rhui-rhel-7-server-rhui-rpms    247 k
 python-kitchen    noarch    1.1.1-5.el7         rhui-rhel-7-server-rhui-rpms    266 k

Transaction Summary
=======================================================================================
Install  1 Package (+2 Dependent packages)

Total download size: 630 k
Installed size: 3.1 M
Is this ok [y/d/N]: y
Downloading packages:
(1/3): python-kitchen-1.1.1-5.el7.noarch.rpm                    | 266 kB  00:00:00
(2/3): libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm                | 247 kB  00:00:00
(3/3): yum-utils-1.1.31-42.el7.noarch.rpm                       | 117 kB  00:00:00
---------------------------------------------------------------------------------------
Total                                                     1.0 MB/s | 630 kB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python-kitchen-1.1.1-5.el7.noarch                                   1/3
  Installing : libxml2-python-2.9.1-6.el7_2.3.x86_64                               2/3
  Installing : yum-utils-1.1.31-42.el7.noarch                                      3/3
  Verifying  : libxml2-python-2.9.1-6.el7_2.3.x86_64                               1/3
  Verifying  : yum-utils-1.1.31-42.el7.noarch                                      2/3
  Verifying  : python-kitchen-1.1.1-5.el7.noarch                                   3/3

Installed:
  yum-utils.noarch 0:1.1.31-42.el7

Dependency Installed:
  libxml2-python.x86_64 0:2.9.1-6.el7_2.3      python-kitchen.noarch 0:1.1.1-5.el7

Complete!

如何列出通过 yum 安装的命令?

现在可以使用 repoquery 命令:

# repoquery --list htop

或者:

# repoquery -l htop

示例输出:

yum where is package installed

使用 repoquery 命令确定 yum 包安装的路径

你也可以使用 type 命令或者 command 命令查找指定二进制文件的位置,例如 httpd 或者 htop :

$ type -a httpd
$ type -a htop
$ command -V htop

关于作者

作者是 nixCraft 的创始人,是经验丰富的系统管理员并且是 Linux 命令行脚本编程的教练。他拥有全球多行业合作的经验,客户包括 IT,教育,安防和空间研究。他的联系方式:Twitter、 Facebook、 Google+。


via: https://www.cyberciti.biz/faq/yum-determining-finding-path-that-yum-package-installed-to/

作者:cyberciti 译者:cyleung 校对:wxy

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

这个 Resetter 工具可以将 Ubuntu、 Linux Mint (以及其它基于 Ubuntu 的发行版)返回到其初始配置。

有多少次你投身于 Ubuntu(或 Ubuntu 衍生版本),配置某项内容和安装软件,却发现你的桌面(或服务器)平台并不是你想要的结果。当在机器上产生了大量的用户文件时,这种情况可能会出现问题。既然这样,你有一个选择,你要么可以备份你所有的数据,重新安装操作系统,然后将您的数据复制回本机,或者也可以利用一种类似于 Resetter 的工具做同样的事情。

Resetter 是一个新的工具(由名为“gaining”的加拿大开发者开发),用 Python 和 PyQt 编写,它将会重置 Ubuntu、Linux Mint(和一些其他的,基于 Ubuntu 的衍生版)回到初始配置。Resetter 提供了两种不同的复位选择:自动和自定义。利用自动方式,工具就会完成以下内容:

  • 删除用户安装的应用软件
  • 删除用户及家目录
  • 创建默认备份用户
  • 自动安装缺失的预装应用软件(MPIA)
  • 删除非默认用户
  • 删除 snap 软件包

自定义方式会:

  • 删除用户安装的应用程序或者允许你选择要删除的应用程序
  • 删除旧的内核
  • 允许你选择用户进行删除
  • 删除用户及家目录
  • 创建默认备份用户
  • 允许您创建自定义备份用户
  • 自动安装缺失的预装应用软件(MPIA)或选择 MPIA 进行安装
  • 删除非默认用户
  • 查看所有相关依赖包
  • 删除 snap 软件包

我将带领您完成安装和使用 Resetter 的过程。但是,我必须告诉你这个工具非常前期的测试版。即便如此, Resetter 绝对值得一试。实际上,我鼓励您测试该应用程序并提交 bug 报告(您可以通过 GitHub 提交,或者直接发送给开发人员的电子邮件地址 [email protected])。

还应注意的是,目前仅支持的衍生版有:

  • Debian 9.2 (稳定)Gnome 版本
  • Linux Mint 17.3+(对 Mint 18.3 的支持即将推出)
  • Ubuntu 14.04+ (虽然我发现不支持 17.10)
  • Elementary OS 0.4+
  • Linux Deepin 15.4+

说到这里,让我们安装和使用 Resetter。我将在 Elementary OS Loki 平台展示。

安装

有几种方法可以安装 Resetter。我选择的方法是通过 gdebi 辅助应用程序,为什么?因为它将获取安装所需的所有依赖项。首先,我们必须安装这个特定的工具。打开终端窗口并发出命令:

sudo apt install gdebi

一旦安装完毕,请将浏览器指向 Resetter 下载页面,并下载该软件的最新版本。一旦下载完毕,打开文件管理器,导航到下载的文件,然后单击(或双击,这取决于你如何配置你的桌面) resetter_XXX-stable_all.deb 文件(XXX 是版本号)。gdebi 应用程序将会打开(图 1)。点击安装包按钮,输入你的 sudo 密码,接下来 Resetter 将开始安装。

 title=

图 1:利用 gdebi 安装 Resetter

当安装完成,准备接下来的操作。

使用 Resetter

记住,在这之前,必须备份数据。别怪我没提醒你。

从终端窗口发出命令 sudo resetter。您将被提示输入 sudo密码。一旦 Resetter 打开,它将自动检测您的发行版(图 2)。

 title=

图 2:Resetter 主窗口

我们将通过自动重置来测试 Resetter 的流程。从主窗口,点击 Automatic Reset(自动复位)。这款应用将提供一个明确的警告,它将把你的操作系统(我的实例,Elementary OS 0.4.1 Loki)重新设置为出厂默认状态(图 3)。

 title=

*图 3:在继续之前,Resetter 会警告您。 *

单击“Yes”,Resetter 会显示它将删除的所有包(图 4)。如果您没有问题,单击 OK,重置将开始。

 title=

图 4:所有要删除的包,以便将 Elementary OS 重置为出厂默认值。

在重置过程中,应用程序将显示一个进度窗口(图 5)。根据安装的数量,这个过程不应该花费太长时间。

 title=

图 5:Resetter 进度窗口

当过程完成时,Resetter 将显示一个新的用户名和密码,以便重新登录到新重置的发行版(图 6)。

 title=

图 6:新用户及密码

单击 OK,然后当提示时单击“Yes”以重新启动系统。当提示登录时,使用 Resetter 应用程序提供给您的新凭证。成功登录后,您需要重新创建您的原始用户。该用户的主目录仍然是完整的,所以您需要做的就是发出命令 sudo useradd USERNAME ( USERNAME 是用户名)。完成之后,发出命令 sudo passwd USERNAME (USERNAME 是用户名)。使用设置的用户/密码,您可以注销并以旧用户的身份登录(使用在重新设置操作系统之前相同的家目录)。

我的成果

我必须承认,在将密码添加到我的老用户(并通过使用 su 命令切换到该用户进行测试)之后,我无法使用该用户登录到 Elementary OS 桌面。为了解决这个问题,我登录了 Resetter 所创建的用户,移动了老用户的家目录,删除了老用户(使用命令 sudo deluser jack),并重新创建了老用户(使用命令 sudo useradd -m jack)。

这样做之后,我检查了原始的家目录,只发现了用户的所有权从 jack.jack 变成了 1000.1000。利用命令 sudo chown -R jack.jack /home/jack,就可以容易的修正这个问题。教训是什么?如果您使用 Resetter 并发现无法用您的老用户登录(在您重新创建用户并设置一个新密码之后),请确保更改用户的家目录的所有权限。

在这个问题之外,Resetter 在将 Elementary OS Loki 恢复到默认状态方面做了大量的工作。虽然 Resetter 处在测试中,但它是一个相当令人印象深刻的工具。试一试,看看你是否有和我一样出色的成绩。


via: https://www.linux.com/learn/intro-to-linux/2017/12/set-ubuntu-derivatives-back-default-resetter

作者:Jack Wallen 译者:stevenzdg988 校对:wxy

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

在本文中, 我们会通过一些案例来演示如何使用 Linux 中的 date 命令。date 命令可以用户输出/设置系统日期和时间。 date 命令很简单, 请参见下面的例子和语法。

默认情况下,当不带任何参数运行 date 命令时,它会输出当前系统日期和时间:

$ date
Sat  2 Dec 12:34:12 CST 2017

语法

Usage: date [OPTION]... [+FORMAT]
  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
以给定格式显示当前时间,或设置系统时间。

案例

下面这些案例会向你演示如何使用 date 命令来查看前后一段时间的日期时间。

1、 查找 5 周后的日期

date -d "5 weeks"
Sun Jan  7 19:53:50 CST 2018

2、 查找 5 周后又过 4 天的日期

date -d "5 weeks 4 days"
Thu Jan 11 19:55:35 CST 2018

3、 获取下个月的日期

date -d "next month"
Wed Jan  3 19:57:43 CST 2018

4、 获取下周日的日期

date -d last-sunday
Sun Nov 26 00:00:00 CST 2017

date 命令还有很多格式化相关的选项, 下面的例子向你演示如何格式化 date 命令的输出.

5、 以 yyyy-mm-dd 的格式显示日期

date +"%F"
2017-12-03

6、 以 mm/dd/yyyy 的格式显示日期

date +"%m/%d/%Y"
12/03/2017

7、 只显示时间

date +"%T"
20:07:04

8、 显示今天是一年中的第几天

date +"%j"
337

9、 与格式化相关的选项

格式说明
%%显示百分号 (%)。
%a星期的缩写形式 (如: Sun)。
%A星期的完整形式 (如: Sunday)。
%b缩写的月份 (如: Jan)。
%B当前区域的月份全称 (如: January)。
%c日期以及时间 (如: Thu Mar 3 23:05:25 2005)。
%C当前世纪;类似 %Y, 但是会省略最后两位 (如: 20)。
%d月中的第几日 (如: 01)。
%D日期;效果与 %m/%d/%y 一样。
%e月中的第几日, 会填充空格;与 %_d 一样。
%F完整的日期;跟 %Y-%m-%d 一样。
%g年份的后两位 (参见 %G)。
%G年份 (参见 %V);通常跟 %V 连用。
%h同 %b。
%H小时 (00..23)。
%I小时 (01..12)。
%j一年中的第几天 (001..366)。
%k小时, 用空格填充 ( 0..23); 与 %_H 一样。
%l小时, 用空格填充 ( 1..12); 与 %_I 一样。
%m月份 (01..12)。
%M分钟 (00..59)。
%n换行。
%N纳秒 (000000000..999999999)。
%p当前区域时间是上午 AM 还是下午 PM;未知则为空。
%P类似 %p, 但是用小写字母显示。
%r当前区域的 12 小时制显示时间 (如: 11:11:04 PM)。
%R24 小时制的小时和分钟;同 %H:%M。
%s从 1970-01-01 00:00:00 UTC 到现在经历的秒数。
%S秒数 (00..60)。
%t制表符。
%T时间;同 %H:%M:%S。
%u星期 (1..7);1 表示 星期一。
%U一年中的第几个星期,以周日为一周的开始 (00..53)。
%V一年中的第几个星期,以周一为一周的开始 (01..53)。
%w用数字表示周几 (0..6); 0 表示 周日。
%W一年中的第几个星期, 周一为一周的开始 (00..53)。
%x当前区域的日期表示(如: 12/31/99)。
%X当前区域的时间表示 (如: 23:13:48)。
%y年份的后面两位 (00..99)。
%Y年。
%z以 +hhmm 的数字格式表示时区 (如: -0400)。
%:z以 +hh:mm 的数字格式表示时区 (如: -04:00)。
%::z以 +hh:mm:ss 的数字格式表示时区 (如: -04:00:00)。
%:::z以数字格式表示时区, 其中 : 的个数由你需要的精度来决定 (例如, -04, +05:30)。
%Z时区的字符缩写(例如, EDT)。

10、 设置系统时间

你也可以使用 date 来手工设置系统时间,方法是使用 --set 选项, 下面的例子会将系统时间设置成 2017 年 8 月 30 日下午 4 点 22 分。

date --set="20170830 16:22"

当然, 如果你使用的是我们的 VPS 托管服务,你总是可以联系并咨询我们的 Linux 专家管理员(通过客服电话或者下工单的方式)关于 date 命令的任何东西。他们是 24×7 在线的,会立即向您提供帮助。(LCTT 译注:原文的广告~)

PS. 如果你喜欢这篇帖子,请点击下面的按钮分享或者留言。谢谢。


via: https://www.rosehosting.com/blog/use-the-date-command-in-linux/

作者:rosehosting 译者:lujun9972 校对:wxy

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

你们好,Linux 爱好者们,在这篇文章中,我将讨论一些作为系统管理员重要的事。众所周知,作为一名优秀的系统管理员意味着要了解有关 IT 基础架构的所有信息,并掌握有关服务器的所有信息,无论是硬件还是操作系统。所以下面的命令将帮助你了解所有的硬件和系统信息。

1 查看系统信息

$ uname -a

uname command

它会为你提供有关系统的所有信息。它会为你提供系统的内核名、主机名、内核版本、内核发布号、硬件名称。

2 查看硬件信息

$ lshw

lshw command

使用 lshw 将在屏幕上显示所有硬件信息。

3 查看块设备(硬盘、闪存驱动器)信息

$ lsblk

lsblk command

lsblk 命令在屏幕上打印关于块设备的所有信息。使用 lsblk -a 可以显示所有块设备。

4 查看 CPU 信息

$ lscpu

lscpu command

lscpu 在屏幕上显示所有 CPU 信息。

5 查看 PCI 信息

$ lspci

lspci command

所有的网络适配器卡、USB 卡、图形卡都被称为 PCI。要查看他们的信息使用 lspci。

lspci -v 将提供有关 PCI 卡的详细信息。

lspci -t 会以树形格式显示它们。

6 查看 USB 信息

$ lsusb

lsusb command

要查看有关连接到机器的所有 USB 控制器和设备的信息,我们使用 lsusb。

7 查看 SCSI 信息

$ lsscsi

lsscsi

要查看 SCSI 信息输入 lsscsi。lsscsi -s 会显示分区的大小。

8 查看文件系统信息

$ fdisk -l

fdisk command

使用 fdisk -l 将显示有关文件系统的信息。虽然 fdisk 的主要功能是修改文件系统,但是也可以创建新分区,删除旧分区(详情在我以后的教程中)。

就是这些了,我的 Linux 爱好者们。建议你在这里和这里的文章中查看关于另外的 Linux 命令。


via: http://linuxtechlab.com/commands-system-hardware-info/

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

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