2018年3月

应用这些策略来保护容器解决方案的各个层面和容器生命周期的各个阶段的安全。

容器提供了打包应用程序的一种简单方法,它实现了从开发到测试到投入生产系统的无缝传递。它也有助于确保跨不同环境的连贯性,包括物理服务器、虚拟机、以及公有云或私有云。这些好处使得一些组织为了更方便地部署和管理为他们提升业务价值的应用程序,而快速地采用了容器技术。

企业需要高度安全,在容器中运行核心服务的任何人都会问,“容器安全吗?”以及“我们能信任运行在容器中的应用程序吗?”

对容器进行安全保护就像是对运行中的进程进行安全保护一样。在你部署和运行你的容器之前,你需要去考虑整个解决方案各个层面的安全。你也需要去考虑贯穿了应用程序和容器整个生命周期的安全。

请尝试从这十个关键的因素去确保容器解决方案栈不同层面、以及容器生命周期的不同阶段的安全。

1. 容器宿主机操作系统和多租户环境

由于容器将应用程序和它的依赖作为一个单元来处理,使得开发者构建和升级应用程序变得更加容易,并且,容器可以启用多租户技术将许多应用程序和服务部署到一台共享主机上。在一台单独的主机上以容器方式部署多个应用程序、按需启动和关闭单个容器都是很容易的。为完全实现这种打包和部署技术的优势,运营团队需要运行容器的合适环境。运营者需要一个安全的操作系统,它能够在边界上保护容器安全、从容器中保护主机内核,以及保护容器彼此之间的安全。

容器是隔离而资源受限的 Linux 进程,允许你在一个共享的宿主机内核上运行沙盒化的应用程序。保护容器的方法与保护你的 Linux 中运行的任何进程的方法是一样的。降低权限是非常重要的,也是保护容器安全的最佳实践。最好使用尽可能小的权限去创建容器。容器应该以一个普通用户的权限来运行,而不是 root 权限的用户。在 Linux 中可以使用多个层面的安全加固手段,Linux 命名空间、安全强化 Linux(SELinux)、cgroups 、capabilities(LCTT 译注:Linux 内核的一个安全特性,它打破了传统的普通用户与 root 用户的概念,在进程级提供更好的安全控制)、以及安全计算模式( seccomp ),这五种 Linux 的安全特性可以用于保护容器的安全。

2. 容器内容(使用可信来源)

在谈到安全时,首先要考虑你的容器里面有什么?例如 ,有些时候,应用程序和基础设施是由很多可用组件所构成的。它们中的一些是开源的软件包,比如,Linux 操作系统、Apache Web 服务器、Red Hat JBoss 企业应用平台、PostgreSQL,以及 Node.js。这些软件包的容器化版本已经可以使用了,因此,你没有必要自己去构建它们。但是,对于你从一些外部来源下载的任何代码,你需要知道这些软件包的原始来源,是谁构建的它,以及这些包里面是否包含恶意代码。

3. 容器注册(安全访问容器镜像)

你的团队的容器构建于下载的公共容器镜像,因此,访问和升级这些下载的容器镜像以及内部构建镜像,与管理和下载其它类型的二进制文件的方式是相同的,这一点至关重要。许多私有的注册库支持容器镜像的存储。选择一个私有的注册库,可以帮你将存储在它的注册中的容器镜像实现策略自动化。

4. 安全性与构建过程

在一个容器化环境中,软件构建过程是软件生命周期的一个阶段,它将所需的运行时库和应用程序代码集成到一起。管理这个构建过程对于保护软件栈安全来说是很关键的。遵守“一次构建,到处部署”的原则,可以确保构建过程的结果正是生产系统中需要的。保持容器的恒定不变也很重要 — 换句话说就是,不要对正在运行的容器打补丁,而是,重新构建和部署它们。

不论是因为你处于一个高强度监管的行业中,还是只希望简单地优化你的团队的成果,设计你的容器镜像管理以及构建过程,可以使用容器层的优势来实现控制分离,因此,你应该去这么做:

  • 运营团队管理基础镜像
  • 架构师管理中间件、运行时、数据库,以及其它解决方案
  • 开发者专注于应用程序层面,并且只写代码

最后,标记好你的定制构建容器,这样可以确保在构建和部署时不会搞混乱。

5. 控制好在同一个集群内部署应用

如果是在构建过程中出现的任何问题,或者在镜像被部署之后发现的任何漏洞,那么,请在基于策略的、自动化工具上添加另外的安全层。

我们来看一下,一个应用程序的构建使用了三个容器镜像层:内核、中间件,以及应用程序。如果在内核镜像中发现了问题,那么只能重新构建镜像。一旦构建完成,镜像就会被发布到容器平台注册库中。这个平台可以自动检测到发生变化的镜像。对于基于这个镜像的其它构建将被触发一个预定义的动作,平台将自己重新构建应用镜像,合并该修复的库。

一旦构建完成,镜像将被发布到容器平台的内部注册库中。在它的内部注册库中,会立即检测到镜像发生变化,应用程序在这里将会被触发一个预定义的动作,自动部署更新镜像,确保运行在生产系统中的代码总是使用更新后的最新的镜像。所有的这些功能协同工作,将安全功能集成到你的持续集成和持续部署(CI/CD)过程和管道中。

6. 容器编配:保护容器平台安全

当然了,应用程序很少会以单一容器分发。甚至,简单的应用程序一般情况下都会有一个前端、一个后端、以及一个数据库。而在容器中以微服务模式部署的应用程序,意味着应用程序将部署在多个容器中,有时它们在同一台宿主机上,有时它们是分布在多个宿主机或者节点上,如下面的图所示:

在大规模的容器部署时,你应该考虑:

  • 哪个容器应该被部署在哪个宿主机上?
  • 那个宿主机应该有什么样的性能?
  • 哪个容器需要访问其它容器?它们之间如何发现彼此?
  • 你如何控制和管理对共享资源的访问,像网络和存储?
  • 如何监视容器健康状况?
  • 如何去自动扩展性能以满足应用程序的需要?
  • 如何在满足安全需求的同时启用开发者的自助服务?

考虑到开发者和运营者的能力,提供基于角色的访问控制是容器平台的关键要素。例如,编配管理服务器是中心访问点,应该接受最高级别的安全检查。API 是规模化的自动容器平台管理的关键,可以用于为 pod、服务,以及复制控制器验证和配置数据;在入站请求上执行项目验证;以及调用其它主要系统组件上的触发器。

7. 网络隔离

在容器中部署现代微服务应用,经常意味着跨多个节点在多个容器上部署。考虑到网络防御,你需要一种在一个集群中的应用之间的相互隔离的方法。一个典型的公有云容器服务,像 Google 容器引擎(GKE)、Azure 容器服务,或者 Amazon Web 服务(AWS)容器服务,是单租户服务。他们让你在你初始化建立的虚拟机集群上运行你的容器。对于多租户容器的安全,你需要容器平台为你启用一个单一集群,并且分割流量以隔离不同的用户、团队、应用、以及在这个集群中的环境。

使用网络命名空间,容器内的每个集合(即大家熟知的 “pod”)都会得到它自己的 IP 和绑定的端口范围,以此来从一个节点上隔离每个 pod 网络。除使用下面所述的方式之外,默认情况下,来自不同命名空间(项目)的 pod 并不能发送或者接收其它 pod 上的包和不同项目的服务。你可以使用这些特性在同一个集群内隔离开发者环境、测试环境,以及生产环境。但是,这样会导致 IP 地址和端口数量的激增,使得网络管理更加复杂。另外,容器是被设计为反复使用的,你应该在处理这种复杂性的工具上进行投入。在容器平台上比较受欢迎的工具是使用 软件定义网络 (SDN) 提供一个定义的网络集群,它允许跨不同集群的容器进行通讯。

8. 存储

容器即可被用于无状态应用,也可被用于有状态应用。保护外加的存储是保护有状态服务的一个关键要素。容器平台对多种受欢迎的存储提供了插件,包括网络文件系统(NFS)、AWS 弹性块存储(EBS)、GCE 持久磁盘、GlusterFS、iSCSI、 RADOS(Ceph)、Cinder 等等。

一个持久卷(PV)可以通过资源提供者支持的任何方式装载到一个主机上。提供者有不同的性能,而每个 PV 的访问模式被设置为特定的卷支持的特定模式。例如,NFS 能够支持多路客户端同时读/写,但是,一个特定的 NFS 的 PV 可以在服务器上被发布为只读模式。每个 PV 有它自己的一组反应特定 PV 性能的访问模式的描述,比如,ReadWriteOnce、ReadOnlyMany、以及 ReadWriteMany。

9. API 管理、终端安全、以及单点登录(SSO)

保护你的应用安全,包括管理应用、以及 API 的认证和授权。

Web SSO 能力是现代应用程序的一个关键部分。在构建它们的应用时,容器平台带来了开发者可以使用的多种容器化服务。

API 是微服务构成的应用程序的关键所在。这些应用程序有多个独立的 API 服务,这导致了终端服务数量的激增,它就需要额外的管理工具。推荐使用 API 管理工具。所有的 API 平台应该提供多种 API 认证和安全所需要的标准选项,这些选项既可以单独使用,也可以组合使用,以用于发布证书或者控制访问。

这些选项包括标准的 API key、应用 ID 和密钥对,以及 OAuth 2.0。

10. 在一个联合集群中的角色和访问管理

在 2016 年 7 月份,Kubernetes 1.3 引入了 Kubernetes 联合集群。这是一个令人兴奋的新特性之一,它是在 Kubernetes 上游、当前的 Kubernetes 1.6 beta 中引用的。联合是用于部署和访问跨多集群运行在公有云或企业数据中心的应用程序服务的。多个集群能够用于去实现应用程序的高可用性,应用程序可以跨多个可用区域,或者去启用部署公共管理,或者跨不同的供应商进行迁移,比如,AWS、Google Cloud、以及 Azure。

当管理联合集群时,你必须确保你的编配工具能够提供你所需要的跨不同部署平台的实例的安全性。一般来说,认证和授权是很关键的 —— 不论你的应用程序运行在什么地方,将数据安全可靠地传递给它们,以及管理跨集群的多租户应用程序。Kubernetes 扩展了联合集群,包括对联合的秘密数据、联合的命名空间、以及 Ingress objects 的支持。

选择一个容器平台

当然,它并不仅关乎安全。你需要提供一个你的开发者团队和运营团队有相关经验的容器平台。他们需要一个安全的、企业级的基于容器的应用平台,它能够同时满足开发者和运营者的需要,而且还能够提高操作效率和基础设施利用率。

想从 Daniel 在 欧盟开源峰会 上的 容器安全的十个层面 的演讲中学习更多知识吗?这个峰会已于 10 月 23 - 26 日在 Prague 举行。

关于作者

Daniel Oh;Microservives;Agile;Devops;Java Ee;Container;Openshift;Jboss;Evangelism


via: https://opensource.com/article/17/10/10-layers-container-security

作者:Daniel Oh 译者:qhwdw 校对:wxy

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

可能有一个困扰你多时的问题,当你想要获取一张屏幕截图向开发者反馈问题,或是在 Stack Overflow 寻求帮助时,你可能缺乏一个可靠的屏幕截图工具去保存和发送截图。在 GNOME 中有一些这种类型的程序和 shell 拓展工具。这里介绍的是 Linux 最好的屏幕截图工具,可以供你截取图片或截录视频。

1. Shutter

shutter Linux 截图工具

Shutter 可以截取任意你想截取的屏幕,是 Linux 最好的截屏工具之一。得到截屏之后,它还可以在保存截屏之前预览图片。它也有一个扩展菜单,展示在 GNOME 顶部面板,使得用户进入软件变得更人性化,非常方便使用。

你可以截取选区、窗口、桌面、当前光标下的窗口、区域、菜单、提示框或网页。Shutter 允许用户直接上传屏幕截图到设置内首选的云服务商。它同样允许用户在保存截图之前编辑器图片;同时提供了一些可自由添加或移除的插件。

终端内键入下列命令安装此工具:

sudo add-apt-repository -y ppa:shutter/ppa
sudo apt-get update && sudo apt-get install shutter

2. Vokoscreen

vokoscreen Linux 屏幕录制工具

Vokoscreen 是一款允许你记录和叙述屏幕活动的一款软件。它易于使用,有一个简洁的界面和顶部面板的菜单,方便用户录制视频。

你可以选择记录整个屏幕,或是记录一个窗口,抑或是记录一个选区。自定义记录可以让你轻松得到所需的保存类型,你甚至可以将屏幕录制记录保存为 gif 文件。当然,你也可以使用网络摄像头记录自己的情况,用于你写作教程吸引学习者。记录完成后,你还可以在该应用程序中回放视频记录,这样就不必到处去找你记录的内容。

vokoscreen preferences

你可以从你的发行版仓库安装 Vocoscreen,或者你也可以在 pkgs.org 选择下载你需要的版本。

sudo dpkg -i vokoscreen_2.5.0-1_amd64.deb

3. OBS

obs Linux 视频截录

OBS 可以用来录制自己的屏幕亦可用来录制互联网上的流媒体。它允许你看到自己所录制的内容或你叙述的屏幕录制。它允许你根据喜好选择录制视频的品质;它也允许你选择文件的保存类型。除了视频录制功能之外,你还可以切换到 Studio 模式,不借助其他软件进行视频编辑。要在你的 Linux 系统中安装 OBS,你必须确保你的电脑已安装 FFmpeg。ubuntu 14.04 或更早的版本安装 FFmpeg 可以使用如下命令:

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next

sudo apt-get update && sudo apt-get install ffmpeg

ubuntu 15.04 以及之后的版本,你可以在终端中键入如下命令安装 FFmpeg:

sudo apt-get install ffmpeg

​如果 FFmpeg 安装完成,在终端中键入如下安装 OBS:

sudo add-apt-repository ppa:obsproject/obs-studio

sudo apt-get update

sudo apt-get install obs-studio

4. Green Recorder

屏幕录制工具

Green recorder 是一款界面简单的程序,它可以让你记录屏幕。你可以选择包括视频和单纯的音频在内的录制内容,也可以显示鼠标指针,甚至可以跟随鼠标录制视频。同样,你可以选择记录窗口或是屏幕上的选区,以便于只在自己的记录中保留需要的内容;你还可以自定义最终保存的视频的帧数。如果你想要延迟录制,它提供给你一个选项可以设置出你想要的延迟时间。它还提供一个录制结束后的命令运行选项,这样,就可以在视频录制结束后立即运行。​

在终端中键入如下命令来安装 green recorder:

sudo add-apt-repository ppa:fossproject/ppa

sudo apt update && sudo apt install green-recorder

5. Kazam

kazam screencasting tool for linux

Kazam 在几乎所有使用截图工具的 Linux 用户中都十分流行。这是一款简单直观的软件,它可以让你做一个屏幕截图或是视频录制,也同样允许在屏幕截图或屏幕录制之前设置延时。它可以让你选择录制区域,窗口或是你想要抓取的整个屏幕。Kazam 的界面接口安排的非常好,和其它软件相比毫无复杂感。它的特点,就是让你优雅的截图。Kazam 在系统托盘和菜单中都有图标,无需打开应用本身,你就可以开始屏幕截图。​​

终端中键入如下命令来安装 Kazam:

sudo apt-get install kazam

​如果没有找到该 PPA,你需要使用下面的命令安装它:

sudo add-apt-repository ppa:kazam-team/stable-series

sudo apt-get update && sudo apt-get install kazam

6. GNOME 扩展截屏工具

gnome screenshot extension

GNOME 的一个扩展软件就叫做 screenshot tool,它常驻系统面板,如果你没有设置禁用它的话。由于它是常驻系统面板的软件,所以它会一直等待你的调用,获取截图,方便和容易获取是它最主要的特点,除非你在调整工具中禁用,否则它将一直在你的系统面板中。这个工具也有用来设置首选项的选项窗口。在 extensions.gnome.org 中搜索 “Screenshot Tool”,在你的 GNOME 中安装它。

你需要安装 gnome 扩展的 chrome 扩展组件和 GNOME 调整工具才能使用这个工具。

gnome screenshot 拓展选项

当你碰到一个问题,不知道怎么处理,想要在 Linux 社区 或者其他开发社区分享、寻求帮助的的时候, Linux 截图工具 尤其合适。学习开发、程序或者其他任何事物都会发现这些工具在分享截图的时候真的很实用。Youtube 用户和教程制作爱好者会发现视频截录工具真的很适合录制可以发表的教程。


via: http://www.linuxandubuntu.com/home/best-linux-screenshot-screencasting-tools

作者:linuxandubuntu 译者:CYLeft 校对:wxy

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

Partclone 是由 Clonezilla 的开发者们开发的用于创建和克隆分区镜像的自由开源软件。实际上,Partclone 是 Clonezilla 所基于的工具之一。

它为用户提供了备份与恢复已用分区的工具,并与多个文件系统高度兼容,这要归功于它能够使用像 e2fslibs 这样的现有库来读取和写入分区,例如 ext2。

它最大的优点是支持各种格式,包括 ext2、ext3、ext4、hfs+、reiserfs、reiser4、btrfs、vmfs3、vmfs5、xfs、jfs、ufs、ntfs、fat(12/16/32)、exfat、f2fs 和 nilfs。

它还有许多的程序,包括 partclone.ext2(ext3&ext4)、partclone.ntfs、partclone.exfat、partclone.hfsp 和 partclone.vmfs(v3和v5) 等等。

Partclone中的功能

  • 免费软件: Partclone 免费供所有人下载和使用。 * 开源: Partclone 是在 GNU GPL 许可下发布的,并在 GitHub 上公开。 * 跨平台:适用于 Linux、Windows、MAC、ESX 文件系统备份/恢复和 FreeBSD。 * 一个在线的文档页面,你可以从中查看帮助文档并跟踪其 GitHub 问题。 * 为初学者和专业人士提供的在线用户手册。 * 支持救援。 * 克隆分区成镜像文件。 * 将镜像文件恢复到分区。 * 快速复制分区。 * 支持 raw 克隆。 * 显示传输速率和持续时间。 * 支持管道。 * 支持 crc32 校验。 * 支持 ESX vmware server 的 vmfs 和 FreeBSD 的文件系统 ufs。

Partclone 中还捆绑了更多功能,你可以在这里查看其余的功能。

如何安装和使用 Partclone

在 Linux 上安装 Partclone。

$ sudo apt install partclone [On Debian/Ubuntu]
$ sudo yum install partclone [On CentOS/RHEL/Fedora]

克隆分区为镜像。

# partclone.ext4 -d -c -s /dev/sda1 -o sda1.img

将镜像恢复到分区。

# partclone.ext4 -d -r -s sda1.img -o /dev/sda1

分区到分区克隆。

# partclone.ext4 -d -b -s /dev/sda1 -o /dev/sdb1

显示镜像信息。

# partclone.info -s sda1.img

检查镜像。

# partclone.chkimg -s sda1.img

你是 Partclone 的用户吗?我最近在 Deepin Clone 上写了一篇文章,显然,Partclone 有擅长处理的任务。你使用其他备份和恢复工具的经验是什么?

请在下面的评论区与我们分享你的想法和建议。


via: https://www.fossmint.com/partclone-linux-backup-clone-tool/

作者:Martins D. Okoi 译者:geekpi 校对:wxy

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

人类犯错误是因为我们不是一个可编程设备,所以,在使用 rm 命令时要额外注意,不要在任何时候使用 rm -rf *。当你使用 rm 命令时,它会永久删除文件,不会像文件管理器那样将这些文件移动到 “垃圾箱”。

有时我们会将不应该删除的文件删除掉,所以当错误地删除了文件时该怎么办? 你必须看看恢复工具(Linux 中有很多数据恢复工具),但我们不知道是否能将它百分之百恢复,所以要如何解决这个问题?

我们最近发表了一篇关于 Trash-Cli 的文章,在评论部分,我们从用户 Eemil Lgz 那里获得了一个关于 saferm.sh 脚本的更新,它可以帮助我们将文件移动到“垃圾箱”而不是永久删除它们。

将文件移动到“垃圾桶”是一个好主意,当你无意中运行 rm 命令时,可以拯救你;但是很少有人会说这是一个坏习惯,如果你不注意“垃圾桶”,它可能会在一定的时间内被文件和文件夹堆积起来。在这种情况下,我建议你按照你的意愿去做一个定时任务。

这适用于服务器和桌面两种环境。 如果脚本检测到 GNOME 、KDE、Unity 或 LXDE 桌面环境(DE),则它将文件或文件夹安全地移动到默认垃圾箱 $HOME/.local/share/Trash/files,否则会在您的主目录中创建垃圾箱文件夹 $HOME/Trash

saferm.sh 脚本托管在 Github 中,可以从仓库中克隆,也可以创建一个名为 saferm.sh 的文件并复制其上的代码。

$ git clone https://github.com/lagerspetz/linux-stuff
$ sudo mv linux-stuff/scripts/saferm.sh /bin
$ rm -Rf linux-stuff

.bashrc 文件中设置别名,

alias rm=saferm.sh

执行下面的命令使其生效,

$ source ~/.bashrc

一切就绪,现在你可以执行 rm 命令,自动将文件移动到”垃圾桶”,而不是永久删除它们。

测试一下,我们将删除一个名为 magi.txt 的文件,命令行明确的提醒了 Moving magi.txt to $HOME/.local/share/Trash/file

$ rm -rf magi.txt
Moving magi.txt to /home/magi/.local/share/Trash/files

也可以通过 ls 命令或 trash-cli 进行验证。

$ ls -lh /home/magi/.local/share/Trash/files
Permissions Size User Date Modified Name
.rw-r--r-- 32 magi 11 Oct 16:24 magi.txt    

或者我们可以通过文件管理器界面中查看相同的内容。

![](/data/attachment/album/201803/09/174228rxpmllt2pxc9h6hh.png)

(LCTT 译注:原文此处混淆了部分 trash-cli 的内容,考虑到文章衔接和逻辑,此处略。)

要了解 saferm.sh 的其他选项,请查看帮助。

$ saferm.sh -h
This is saferm.sh 1.16. LXDE and Gnome3 detection.
Will ask to unsafe-delete instead of cross-fs move. Allows unsafe (regular rm) delete (ignores trashinfo).
Creates trash and trashinfo directories if they do not exist. Handles symbolic link deletion.
Does not complain about different user any more.

Usage: /path/to/saferm.sh [OPTIONS] [--] files and dirs to safely remove
OPTIONS:
-r      allows recursively removing directories.
-f      Allow deleting special files (devices, ...).
-u      Unsafe mode, bypass trash and delete files permanently.
-v      Verbose, prints more messages. Default in this version.
-q      Quiet mode. Opposite of verbose.


via: https://www.2daygeek.com/rm-command-to-move-files-to-trash-can-rm-alias/

作者:2DAYGEEK 译者:amwps290 校对:wxy

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

Linux 跟踪很神奇!

跟踪器 tracer 是一个高级的性能分析和调试工具,如果你使用过 strace(1) 或者 tcpdump(8),你不应该被它吓到 ... 你使用的就是跟踪器。系统跟踪器能让你看到很多的东西,而不仅是系统调用或者数据包,因为常见的跟踪器都可以跟踪内核或者应用程序的任何东西。

有大量的 Linux 跟踪器可供你选择。由于它们中的每个都有一个官方的(或者非官方的)的吉祥物,我们有足够多的选择给孩子们展示。

你喜欢使用哪一个呢?

我从两类读者的角度来回答这个问题:大多数人和性能/内核工程师。当然,随着时间的推移,这也可能会发生变化,因此,我需要及时去更新本文内容,或许是每年一次,或者更频繁。(LCTT 译注:本文最后更新于 2015 年)

对于大多数人

大多数人(开发者、系统管理员、运维人员、网络可靠性工程师(SRE)…)是不需要去学习系统跟踪器的底层细节的。以下是你需要去了解和做的事情:

1. 使用 perf\_events 进行 CPU 剖析

可以使用 perf\_events 进行 CPU 剖析 profiling 。它可以用一个 火焰图 来形象地表示。比如:

git clone --depth 1 https://github.com/brendangregg/FlameGraph
perf record -F 99 -a -g -- sleep 30
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

Linux 的 perf\_events(即 perf,后者是它的命令)是官方为 Linux 用户准备的跟踪器/分析器。它位于内核源码中,并且维护的非常好(而且现在它的功能还在快速变强)。它一般是通过 linux-tools-common 这个包来添加的。

perf 可以做的事情很多,但是,如果我只能建议你学习其中的一个功能的话,那就是 CPU 剖析。虽然从技术角度来说,这并不是事件“跟踪”,而是 采样 sampling 。最难的部分是获得完整的栈和符号,这部分在我的 Linux Profiling at Netflix 中针对 Java 和 Node.js 讨论过。

2. 知道它能干什么

正如一位朋友所说的:“你不需要知道 X 光机是如何工作的,但你需要明白的是,如果你吞下了一个硬币,X 光机是你的一个选择!”你需要知道使用跟踪器能够做什么,因此,如果你在业务上确实需要它,你可以以后再去学习它,或者请会使用它的人来做。

简单地说:几乎任何事情都可以通过跟踪来了解它。内部文件系统、TCP/IP 处理过程、设备驱动、应用程序内部情况。阅读我在 lwn.net 上的 ftrace 的文章,也可以去浏览 perf\_events 页面,那里有一些跟踪(和剖析)能力的示例。

3. 需要一个前端工具

如果你要购买一个性能分析工具(有许多公司销售这类产品),并要求支持 Linux 跟踪。想要一个直观的“点击”界面去探查内核的内部,以及包含一个在不同堆栈位置的延迟热力图。就像我在 Monitorama 演讲 中描述的那样。

我创建并开源了我自己的一些前端工具,虽然它是基于 CLI 的(不是图形界面的)。这样可以使其它人使用跟踪器更快更容易。比如,我的 perf-tools,跟踪新进程是这样的:

# ./execsnoop
Tracing exec()s. Ctrl-C to end.
 PID PPID ARGS
 22898 22004 man ls
 22905 22898 preconv -e UTF-8
 22908 22898 pager -s
 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8
[...]

在 Netflix 公司,我正在开发 Vector,它是一个实例分析工具,实际上它也是一个 Linux 跟踪器的前端。

对于性能或者内核工程师

一般来说,我们的工作都非常难,因为大多数人或许要求我们去搞清楚如何去跟踪某个事件,以及因此需要选择使用哪个跟踪器。为完全理解一个跟踪器,你通常需要花至少一百多个小时去使用它。理解所有的 Linux 跟踪器并能在它们之间做出正确的选择是件很难的事情。(我或许是唯一接近完成这件事的人)

在这里我建议选择如下,要么:

A)选择一个全能的跟踪器,并以它为标准。这需要在一个测试环境中花大量的时间来搞清楚它的细微差别和安全性。我现在的建议是 SystemTap 的最新版本(例如,从 源代码 构建)。我知道有的公司选择的是 LTTng ,尽管它并不是很强大(但是它很安全),但他们也用的很好。如果在 sysdig 中添加了跟踪点或者是 kprobes,它也是另外的一个候选者。

B)按我的 Velocity 教程中 的流程图。这意味着尽可能使用 ftrace 或者 perf\_events,eBPF 已经集成到内核中了,然后用其它的跟踪器,如 SystemTap/LTTng 作为对 eBPF 的补充。我目前在 Netflix 的工作中就是这么做的。

以下是我对各个跟踪器的评价:

1. ftrace

我爱 ftrace,它是内核黑客最好的朋友。它被构建进内核中,它能够利用跟踪点、kprobes、以及 uprobes,以提供一些功能:使用可选的过滤器和参数进行事件跟踪;事件计数和计时,内核概览; 函数流步进 function-flow walking 。关于它的示例可以查看内核源代码树中的 ftrace.txt。它通过 /sys 来管理,是面向单一的 root 用户的(虽然你可以使用缓冲实例以让其支持多用户),它的界面有时很繁琐,但是它比较容易 调校 hackable ,并且有个前端:ftrace 的主要创建者 Steven Rostedt 设计了一个 trace-cmd,而且我也创建了 perf-tools 集合。我最诟病的就是它不是 可编程的 programmable ,因此,举个例子说,你不能保存和获取时间戳、计算延迟,以及将其保存为直方图。你需要转储事件到用户级以便于进行后期处理,这需要花费一些成本。它也许可以通过 eBPF 实现可编程。

2. perf\_events

perf\_events 是 Linux 用户的主要跟踪工具,它的源代码位于 Linux 内核中,一般是通过 linux-tools-common 包来添加的。它又称为 perf,后者指的是它的前端,它相当高效(动态缓存),一般用于跟踪并转储到一个文件中(perf.data),然后可以在之后进行后期处理。它可以做大部分 ftrace 能做的事情。它不能进行函数流步进,并且不太容易调校(而它的安全/错误检查做的更好一些)。但它可以做剖析(采样)、CPU 性能计数、用户级的栈转换、以及使用本地变量利用 调试信息 debuginfo 进行 行级跟踪 line tracing 。它也支持多个并发用户。与 ftrace 一样,它也不是内核可编程的,除非 eBPF 支持(补丁已经在计划中)。如果只学习一个跟踪器,我建议大家去学习 perf,它可以解决大量的问题,并且它也相当安全。

3. eBPF

扩展的伯克利包过滤器 extended Berkeley Packet Filter (eBPF)是一个 内核内 in-kernel 的虚拟机,可以在事件上运行程序,它非常高效(JIT)。它可能最终为 ftrace 和 perf\_events 提供 内核内编程 in-kernel programming ,并可以去增强其它跟踪器。它现在是由 Alexei Starovoitov 开发的,还没有实现完全的整合,但是对于一些令人印象深刻的工具,有些内核版本(比如,4.1)已经支持了:比如,块设备 I/O 的 延迟热力图 latency heat map 。更多参考资料,请查阅 Alexei 的 BPF 演示,和它的 eBPF 示例

4. SystemTap

SystemTap 是一个非常强大的跟踪器。它可以做任何事情:剖析、跟踪点、kprobes、uprobes(它就来自 SystemTap)、USDT、内核内编程等等。它将程序编译成内核模块并加载它们 —— 这是一种很难保证安全的方法。它开发是在内核代码树之外进行的,并且在过去出现过很多问题(内核崩溃或冻结)。许多并不是 SystemTap 的过错 —— 它通常是首次对内核使用某些跟踪功能,并率先遇到 bug。最新版本的 SystemTap 是非常好的(你需要从它的源代码编译),但是,许多人仍然没有从早期版本的问题阴影中走出来。如果你想去使用它,花一些时间去测试环境,然后,在 irc.freenode.net 的 #systemtap 频道与开发者进行讨论。(Netflix 有一个容错架构,我们使用了 SystemTap,但是我们或许比起你来说,更少担心它的安全性)我最诟病的事情是,它似乎假设你有办法得到内核调试信息,而我并没有这些信息。没有它我实际上可以做很多事情,但是缺少相关的文档和示例(我现在自己开始帮着做这些了)。

5. LTTng

LTTng 对事件收集进行了优化,性能要好于其它的跟踪器,也支持许多的事件类型,包括 USDT。它的开发是在内核代码树之外进行的。它的核心部分非常简单:通过一个很小的固定指令集写入事件到跟踪缓冲区。这样让它既安全又快速。缺点是做内核内编程不太容易。我觉得那不是个大问题,由于它优化的很好,可以充分的扩展,尽管需要后期处理。它也探索了一种不同的分析技术。很多的“黑匣子”记录了所有感兴趣的事件,以便可以在 GUI 中以后分析它。我担心该记录会错失之前没有预料的事件,我真的需要花一些时间去看看它在实践中是如何工作的。这个跟踪器上我花的时间最少(没有特别的原因)。

6. ktap

ktap 是一个很有前途的跟踪器,它在内核中使用了一个 lua 虚拟机,不需要调试信息和在嵌入时设备上可以工作的很好。这使得它进入了人们的视野,在某个时候似乎要成为 Linux 上最好的跟踪器。然而,由于 eBPF 开始集成到了内核,而 ktap 的集成工作被推迟了,直到它能够使用 eBPF 而不是它自己的虚拟机。由于 eBPF 在几个月过去之后仍然在集成过程中,ktap 的开发者已经等待了很长的时间。我希望在今年的晚些时间它能够重启开发。

7. dtrace4linux

dtrace4linux 主要由一个人(Paul Fox)利用业务时间将 Sun DTrace 移植到 Linux 中的。它令人印象深刻,一些 供应器 provider 可以工作,还不是很完美,它最多应该算是实验性的工具(不安全)。我认为对于许可证的担心,使人们对它保持谨慎:它可能永远也进入不了 Linux 内核,因为 Sun 是基于 CDDL 许可证发布的 DTrace;Paul 的方法是将它作为一个插件。我非常希望看到 Linux 上的 DTrace,并且希望这个项目能够完成,我想我加入 Netflix 时将花一些时间来帮它完成。但是,我一直在使用内置的跟踪器 ftrace 和 perf\_events。

8. OL DTrace

Oracle Linux DTrace 是将 DTrace 移植到 Linux (尤其是 Oracle Linux)的重大努力。过去这些年的许多发布版本都一直稳定的进步,开发者甚至谈到了改善 DTrace 测试套件,这显示出这个项目很有前途。许多有用的功能已经完成:系统调用、剖析、sdt、proc、sched、以及 USDT。我一直在等待着 fbt(函数边界跟踪,对内核的动态跟踪),它将成为 Linux 内核上非常强大的功能。它最终能否成功取决于能否吸引足够多的人去使用 Oracle Linux(并为支持付费)。另一个羁绊是它并非完全开源的:内核组件是开源的,但用户级代码我没有看到。

9. sysdig

sysdig 是一个很新的跟踪器,它可以使用类似 tcpdump 的语法来处理 系统调用 syscall 事件,并用 lua 做后期处理。它也是令人印象深刻的,并且很高兴能看到在系统跟踪领域的创新。它的局限性是,它的系统调用只能是在当时,并且,它转储所有事件到用户级进行后期处理。你可以使用系统调用来做许多事情,虽然我希望能看到它去支持跟踪点、kprobes、以及 uprobes。我也希望看到它支持 eBPF 以查看内核内概览。sysdig 的开发者现在正在增加对容器的支持。可以关注它的进一步发展。

深入阅读

我自己的工作中使用到的跟踪器包括:

不好意思,没有更多的跟踪器了! … 如果你想知道为什么 Linux 中的跟踪器不止一个,或者关于 DTrace 的内容,在我的 从 DTrace 到 Linux 的演讲中有答案,从 第 28 张幻灯片 开始。

感谢 Deirdre Straughan 的编辑,以及跟踪小马的创建(General Zoi 是小马的创建者)。


via: http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html

作者:Brendan Gregg 译者:qhwdw 校对:wxy

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

简介: 加速 Ubuntu 系统有很多方法,办法之一是使用轻量级应用来替代一些常用应用程序。我们之前之前发布过一篇 Linux 必备的应用程序,如今将分享这些应用程序在 Ubuntu 或其他 Linux 发行版的轻量级替代方案。

在 ubunt 使用轻量级应用程序替代方案

9 个常用 Linux 应用程序的轻量级替代方案

你的 Linux 系统很慢吗?应用程序是不是很久才能打开?你最好的选择是使用轻量级的 Linux 系统。但是重装系统并非总是可行,不是吗?

所以如果你想坚持使用你现在用的 Linux 发行版,但是想要提高性能,你应该使用更轻量级应用来替代你一些常用的应用。这篇文章会列出各种 Linux 应用程序的轻量级替代方案。

由于我使用的是 Ubuntu,因此我只提供了基于 Ubuntu 的 Linux 发行版的安装说明。但是这些应用程序可以用于几乎所有其他 Linux 发行版。你只需去找这些轻量级应用在你的 Linux 发行版中的安装方法就可以了。

1. Midori: Web 浏览器

Midori 是与现代互联网环境具有良好兼容性的最轻量级网页浏览器之一。它是开源的,使用与 Google Chrome 最初所基于的相同的渲染引擎 —— WebKit。并且超快速,最小化但高度可定制。

Midori Browser

Midori 浏览器有很多可以定制的扩展和选项。如果你有最高权限,使用这个浏览器也是一个不错的选择。如果在浏览网页的时候遇到了某些问题,请查看其网站上常见问题部分 -- 这包含了你可能遇到的常见问题及其解决方案。

在基于 Ubuntu 的发行版上安装 Midori

在 Ubuntu 上,可通过官方源找到 Midori 。运行以下指令即可安装它:

sudo apt install midori

2. Trojita:电子邮件客户端

Trojita 是一款开源强大的 IMAP 电子邮件客户端。它速度快,资源利用率高。我可以肯定地称它是 Linux 最好的电子邮件客户端之一。如果你只需电子邮件客户端提供 IMAP 支持,那么也许你不用再进一步考虑了。

Trojitá

Trojita 使用各种技术 —— 按需电子邮件加载、离线缓存、带宽节省模式等 —— 以实现其令人印象深刻的性能。

在基于 Ubuntu 的发行版上安装 Trojita

Trojita 目前没有针对 Ubuntu 的官方 PPA 。但这应该不成问题。您可以使用以下命令轻松安装它:

sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/jkt-gentoo:/trojita/xUbuntu_16.04/ /' > /etc/apt/sources.list.d/trojita.list"
wget http://download.opensuse.org/repositories/home:jkt-gentoo:trojita/xUbuntu_16.04/Release.key
sudo apt-key add - < Release.key
sudo apt update
sudo apt install trojita

3. GDebi:包安装程序

有时您需要快速安装 DEB 软件包。Ubuntu 软件中心是一个消耗资源严重的应用程序,仅用于安装 .deb 文件并不明智。

Gdebi 无疑是一款可以完成同样目的的漂亮工具,而它只有个极简的图形界面。

GDebi

GDebi 是完全轻量级的,完美无缺地完成了它的工作。你甚至应该让 Gdebi 成为 DEB 文件的默认安装程序

在基于 Ubuntu 的发行版上安装 GDebi

只需一行指令,你便可以在 Ubuntu 上安装 GDebi:

sudo apt install gdebi

4. App Grid:软件中心

如果您经常在 Ubuntu 上使用软件中心搜索、安装和管理应用程序,则 App Grid 是必备的应用程序。它是默认的 Ubuntu 软件中心最具视觉吸引力且速度最快的替代方案。

App Grid

App Grid 支持应用程序的评分、评论和屏幕截图。

在基于 Ubuntu 的发行版上安装 App Grid

App Grid 拥有 Ubuntu 的官方 PPA。使用以下指令安装 App Grid:

sudo add-apt-repository ppa:appgrid/stable
sudo apt update
sudo apt install appgrid

5. Yarock:音乐播放器

Yarock 是一个优雅的音乐播放器,拥有现代而最轻量级的用户界面。尽管在设计上是轻量级的,但 Yarock 有一个全面的高级功能列表。

Yarock

Yarock 的主要功能包括多种音乐收藏、评级、智能播放列表、多种后端选项、桌面通知、音乐剪辑、上下文获取等。

在基于 Ubuntu 的发行版上安装 Yarock

您得通过 PPA 使用以下指令在 Ubuntu 上安装 Yarock:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt update
sudo apt install yarock

6. VLC:视频播放器

谁不需要视频播放器?谁还从未听说过 VLC?我想并不需要对它做任何介绍。

VLC

VLC 能满足你在 Ubuntu 上播放各种媒体文件的全部需求,而且它非常轻便。它甚至可以在非常旧的 PC 上完美运行。

在基于 Ubuntu 的发行版上安装 VLC

VLC 为 Ubuntu 提供官方 PPA。可以输入以下命令来安装它:

sudo apt install vlc

7. PCManFM:文件管理器

PCManFM 是 LXDE 的标准文件管理器。与 LXDE 的其他应用程序一样,它也是轻量级的。如果您正在为文件管理器寻找更轻量级的替代品,可以尝试使用这个应用。

PCManFM

尽管来自 LXDE,PCManFM 也同样适用于其他桌面环境。

在基于 Ubuntu 的发行版上安装 PCManFM

在 Ubuntu 上安装 PCManFM 只需要一条简单的指令:

sudo apt install pcmanfm

8. Mousepad:文本编辑器

在轻量级方面,没有什么可以击败像 nano、vim 等命令行文本编辑器。但是,如果你想要一个图形界面,你可以尝试一下 Mousepad -- 一个最轻量级的文本编辑器。它非常轻巧,速度非常快。带有简单的可定制的用户界面和多个主题。

Mousepad

Mousepad 支持语法高亮显示。所以,你也可以使用它作为基础的代码编辑器。

在基于 Ubuntu 的发行版上安装 Mousepad

想要安装 Mousepad ,可以使用以下指令:

sudo apt install mousepad

9. GNOME Office:办公软件

许多人需要经常使用办公应用程序。通常,大多数办公应用程序体积庞大且很耗资源。Gnome Office 在这方面非常轻便。Gnome Office 在技术上不是一个完整的办公套件。它由不同的独立应用程序组成,在这之中 AbiWord&Gnumeric 脱颖而出。

AbiWord 是文字处理器。它比其他替代品轻巧并且快得多。但是这样做是有代价的 —— 你可能会失去宏、语法检查等一些功能。AdiWord 并不完美,但它可以满足你基本的需求。

AbiWord

Gnumeric 是电子表格编辑器。就像 AbiWord 一样,Gnumeric 也非常快速,提供了精确的计算功能。如果你正在寻找一个简单轻便的电子表格编辑器,Gnumeric 已经能满足你的需求了。

Gnumeric

Gnome Office 下面还有一些其它应用程序。你可以在官方页面找到它们。

在基于 Ubuntu 的发行版上安装 AbiWord&Gnumeric

要安装 AbiWord&Gnumeric,只需在终端中输入以下指令:

sudo apt install abiword gnumeric

via: https://itsfoss.com/lightweight-alternative-applications-ubuntu/

作者:Munif Tanjim 译者:imquanquan 校对:wxy

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