分类 技术 下的文章

以下是我们推荐的 Linux 分区工具。它们能让你删除、添加、调整或缩放 Linux 系统上的磁盘分区。

通常,你在安装操作系统时决定磁盘分区。但是,如果你需要在安装后的某个时间修改分区,该怎么办?你无法回到系统安装阶段。因此,这就需要分区管理器(或准确地说是磁盘分区管理器)上场了。

在大多数情况下,你无需单独安装分区管理器,因为它已预先安装。此外,值得注意的是,你可以选择基于命令行或有 GUI 的分区管理器。

注意!

磁盘分区是一项有风险的任务。除非绝对必要,否则不要这样做。

如果你使用的是基于命令行的分区工具,那么需要学习完成任务的命令。否则,你可能最终会擦除整个磁盘。

Linux 中的 5 个管理磁盘分区的工具

下面的列表没有特定的排名顺序。大多数分区工具应该存在于 Linux 发行版的仓库中。

GParted

GParted

这可能是 Linux 发行版中最流行的基于 GUI 的分区管理器。你可能已在某些发行版中预装它。如果还没有,只需在软件中心搜索它即可完成安装。

它会在启动时直接提示你以 root 用户进行身份验证。所以,你根本不需要在这里使用终端。身份验证后,它会分析设备,然后让你调整磁盘分区。如果发生数据丢失或意外删除文件,你还可以找到“尝试数据救援”的选项。

GNOME Disks

Gnome Disks

一个基于 GUI 的分区管理器,随 Ubuntu 或任何基于 Ubuntu 的发行版(如 Zorin OS)一起出现。

它能让你删除、添加、缩放和微调分区。如果你遇到故障,它甚至可以在 Ubuntu 中格式化 USB 来帮助你救援机器。

你甚至可以借助此工具尝试修复分区。它的选项还包括编辑文件系统、创建分区镜像、还原镜像以及对分区进行基准测试。

KDE Partition Manager

Kde Partition Manager

KDE Partition Manager 应该已经预装在基于 KDE 的 Linux 发行版上了。但是,如果没有,你可以在软件中心搜索并轻松安装它。

如果你不是预装的,那么可能会在尝试启动时通知你没有管理权限。没有管理员权限,你无法做任何事情。因此,在这种情况下,请输入以下命令:

sudo partitionmanager

它将扫描你的设备,然后你就可以创建、移动、复制、删除和缩放分区。你还可以导入/导出分区表及使用其他许多调整选项。

Fdisk(命令行)

Fdisk

fdisk 是一个命令行程序,它在每个类 Unix 的系统中都有。不要担心,即使它需要你启动终端并输入命令,但这并不是很困难。但是,如果你在使用基于文本的程序时感到困惑,那么你应该继续使用上面提到的 GUI 程序。它们都做同样的事情。

要启动 fdisk,你必须是 root 用户并指定管理分区的设备。以下是该命令的示例:

sudo fdisk /dev/sdc

你可以参考 Linux 文档项目的维基页面以获取命令列表以及有关其工作原理的更多详细信息。

GNU Parted(命令行)

Gnu Parted

这是在你 Linux 发行版上预安装的另一个命令行程序。你需要输入下面的命令启动:

sudo parted

总结

我不会忘了说 QtParted 是分区管理器的替代品之一。但它已经几年没有维护,因此我不建议使用它。

你如何看待这里提到的分区管理器?我有错过你最喜欢的吗?让我知道,我将根据你的建议更新这个 Linux 分区管理器列表。


via: https://itsfoss.com/partition-managers-linux/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

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

本文包含一些示例命令,向你展示如何使用 dd 命令粗略估计硬盘驱动器和 RAID 阵列的性能。准确的测量必须考虑诸如写入放大系统调用开销之类的事情,本指南不会考虑这些。对于可能提供更准确结果的工具,你可能需要考虑使用 hdparm

为了分解与文件系统相关的性能问题,这些示例显示了如何通过直接读取和写入块设备来在块级测试驱动器和阵列的性能。警告写入测试将会销毁用来运行测试的块设备上的所有数据。不要对包含你想要保留的数据的任何设备运行这些测试!

四个测试

下面是四个示例 dd 命令,可用于测试块设备的性能:

1、 从 $MY_DISK 读取的一个进程:

# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache

2、写入到 $MY_DISK 的一个进程:

# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct

3、从 $MY_DISK 并发读取的两个进程:

# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)

4、 并发写入到 $MY_DISK 的两个进程:

# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
  • 执行读写测试时,相应的 iflag=nocacheoflag=direct 参数非常重要,因为没有它们,dd 命令有时会显示从内存中传输数据的结果速度,而不是从硬盘。
  • bscount 参数的值有些随意,我选择的值应足够大,以便在大多数情况下为当前硬件提供合适的平均值。
  • nullzero 设备在读写测试中分别用于目标和源,因为它们足够快,不会成为性能测试中的限制因素。
  • 并发读写测试中第二个 dd 命令的 skip=200 参数是为了确保 dd 的两个副本在硬盘驱动器的不同区域上运行。

16 个示例

下面是演示,显示针对以下四个块设备中之一运行上述四个测试中的各个结果:

  1. MY_DISK=/dev/sda2(用在示例 1-X 中)
  2. MY_DISK=/dev/sdb2(用在示例 2-X 中)
  3. MY_DISK=/dev/md/stripped(用在示例 3-X 中)
  4. MY_DISK=/dev/md/mirrored(用在示例 4-X 中)

首先将计算机置于救援模式,以减少后台服务的磁盘 I/O 随机影响测试结果的可能性。警告:这将关闭所有非必要的程序和服务。在运行这些命令之前,请务必保存你的工作。你需要知道 root 密码才能进入救援模式。passwd 命令以 root 用户身份运行时,将提示你(重新)设置 root 帐户密码。

$ sudo -i
# passwd
# setenforce 0
# systemctl rescue

你可能还想暂时禁止将日志记录到磁盘:

# sed -r -i.bak 's/^#?Storage=.*/Storage=none/' /etc/systemd/journald.conf
# systemctl restart systemd-journald.service

如果你有交换设备,可以暂时禁用它并用于执行后面的测试:

# swapoff -a
# MY_DEVS=$(mdadm --detail /dev/md/swap | grep active | grep -o "/dev/sd.*")
# mdadm --stop /dev/md/swap
# mdadm --zero-superblock $MY_DEVS

示例 1-1 (从 sda 读取)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.7003 s, 123 MB/s

示例 1-2 (写入到 sda)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.67117 s, 125 MB/s

示例 1-3 (从 sda 并发读取)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.42875 s, 61.2 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.52614 s, 59.5 MB/s

示例 1-4 (并发写入到 sda)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 1)
# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.2435 s, 64.7 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.60872 s, 58.1 MB/s

示例 2-1 (从 sdb 读取)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.67285 s, 125 MB/s

示例 2-2 (写入到 sdb)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.67198 s, 125 MB/s

示例 2-3 (从 sdb 并发读取)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.52808 s, 59.4 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.57736 s, 58.6 MB/s

示例 2-4 (并发写入到 sdb)

# MY_DISK=$(echo $MY_DEVS | cut -d ' ' -f 2)
# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.7841 s, 55.4 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 3.81475 s, 55.0 MB/s

示例 3-1 (从 RAID0 读取)

# mdadm --create /dev/md/stripped --homehost=any --metadata=1.0 --level=0 --raid-devices=2 $MY_DEVS
# MY_DISK=/dev/md/stripped
# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.837419 s, 250 MB/s

示例 3-2 (写入到 RAID0)

# MY_DISK=/dev/md/stripped
# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.823648 s, 255 MB/s

示例 3-3 (从 RAID0 并发读取)

# MY_DISK=/dev/md/stripped
# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.31025 s, 160 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.80016 s, 116 MB/s

示例 3-4 (并发写入到 RAID0)

# MY_DISK=/dev/md/stripped
# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.65026 s, 127 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.81323 s, 116 MB/s

示例 4-1 (从 RAID1 读取)

# mdadm --stop /dev/md/stripped
# mdadm --create /dev/md/mirrored --homehost=any --metadata=1.0 --level=1 --raid-devices=2 --assume-clean $MY_DEVS
# MY_DISK=/dev/md/mirrored
# dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.74963 s, 120 MB/s

示例 4-2 (写入到 RAID1)

# MY_DISK=/dev/md/mirrored
# dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.74625 s, 120 MB/s

示例 4-3 (从 RAID1 并发读取)

# MY_DISK=/dev/md/mirrored
# (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache &); (dd if=$MY_DISK of=/dev/null bs=1MiB count=200 iflag=nocache skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.67171 s, 125 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1.67685 s, 125 MB/s

示例 4-4 (并发写入到 RAID1)

# MY_DISK=/dev/md/mirrored
# (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct &); (dd if=/dev/zero of=$MY_DISK bs=1MiB count=200 oflag=direct skip=200 &)
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 4.09666 s, 51.2 MB/s
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 4.1067 s, 51.1 MB/s

恢复交换设备和日志配置

# mdadm --stop /dev/md/stripped /dev/md/mirrored
# mdadm --create /dev/md/swap --homehost=any --metadata=1.0 --level=1 --raid-devices=2 $MY_DEVS
# mkswap /dev/md/swap
# swapon -a
# mv /etc/systemd/journald.conf.bak /etc/systemd/journald.conf
# systemctl restart systemd-journald.service
# reboot

结果解读

示例 1-1、1-2、2-1 和 2-2 表明我的每个驱动器以大约 125 MB/s 的速度读写。

示例 1-3、1-4、2-3 和 2-4 表明,当在同一驱动器上并行完成两次读取或写入时,每个进程的驱动器带宽大约为一半(60 MB/s)。

3-X 示例显示了将两个驱动器放在 RAID0(数据条带化)阵列中的性能优势。在所有情况下,这些数字表明 RAID0 阵列的执行速度是任何一个驱动器能够独立提供的速度的两倍。相应的是,丢失所有内容的可能性也是两倍,因为每个驱动器只包含一半的数据。一个三个驱动器阵列的执行速度是单个驱动器的三倍(所有驱动器规格都相同),但遭受灾难性故障的可能也是三倍。

4-X 示例显示 RAID1(数据镜像)阵列的性能类似于单个磁盘的性能,除了多个进程同时读取的情况(示例4-3)。在多个进程读取的情况下,RAID1 阵列的性能类似于 RAID0 阵列的性能。这意味着你将看到 RAID1 的性能优势,但仅限于进程同时读取时。例如,当你在前台使用 Web 浏览器或电子邮件客户端时,进程会尝试访问后台中的大量文件。RAID1 的主要好处是,如果驱动器出现故障,你的数据不太可能丢失。

故障排除

如果上述测试未按预期执行,则可能是驱动器坏了或出现故障。大多数现代硬盘都内置了自我监控、分析和报告技术(SMART)。如果你的驱动器支持它,smartctl 命令可用于查询你的硬盘驱动器的内部统计信息:

# smartctl --health /dev/sda
# smartctl --log=error /dev/sda
# smartctl -x /dev/sda

另一种可以调整 PC 以获得更好性能的方法是更改 I/O 调度程序。Linux 系统支持多个 I/O 调度程序,Fedora 系统的当前默认值是 deadline 调度程序的 multiqueue 变体。默认情况下它的整体性能非常好,并且对于具有许多处理器和大型磁盘阵列的大型服务器,其扩展性极为出色。但是,有一些更专业的调度程序在某些条件下可能表现更好。

要查看驱动器正在使用的 I/O 调度程序,请运行以下命令:

$ for i in /sys/block/sd?/queue/scheduler; do echo "$i: $(<$i)"; done

你可以通过将所需调度程序的名称写入 /sys/block/<device name>/queue/scheduler 文件来更改驱动器的调度程序:

# echo bfq > /sys/block/sda/queue/scheduler

你可以通过为驱动器创建 udev 规则来永久更改它。以下示例显示了如何创建将所有的旋转式驱动器设置为使用 BFQ I/O 调度程序的 udev 规则:

# cat << END > /etc/udev/rules.d/60-ioscheduler-rotational.rules
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
END

这是另一个设置所有的固态驱动器使用 NOOP I/O 调度程序的示例:

# cat << END > /etc/udev/rules.d/60-ioscheduler-solid-state.rules
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
END

更改 I/O 调度程序不会影响设备的原始吞吐量,但通过优先考虑后台任务的带宽或消除不必要的块重新排序,可能会使你的 PC 看起来响应更快。


via: https://fedoramagazine.org/check-storage-performance-with-dd/

作者:Gregory Bartholomew 选题:lujun9972 译者:wxy 校对:wxy

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

Logreduce 可以通过从大量日志数据中挑选出异常来节省调试时间。

持续集成(CI)作业会生成大量数据。当一个作业失败时,弄清楚出了什么问题可能是一个繁琐的过程,它涉及到调查日志以发现根本原因 —— 这通常只能在全部的作业输出的一小部分中找到。为了更容易地将最相关的数据与其余数据分开,可以使用先前成功运行的作业结果来训练 Logreduce 机器学习模型,以从失败的运行日志中提取异常。

此方法也可以应用于其他用例,例如,从 Journald 或其他系统级的常规日志文件中提取异常。

使用机器学习来降低噪音

典型的日志文件包含许多标称事件(“基线”)以及与开发人员相关的一些例外事件。基线可能包含随机元素,例如难以检测和删除的时间戳或唯一标识符。要删除基线事件,我们可以使用 k-最近邻模式识别算法(k-NN)。

日志事件必须转换为可用于 k-NN 回归的数值。使用通用特征提取工具 HashingVectorizer 可以将该过程应用于任何类型的日志。它散列每个单词并在稀疏矩阵中对每个事件进行编码。为了进一步减少搜索空间,这个标记化过程删除了已知的随机单词,例如日期或 IP 地址。

训练模型后,k-NN 搜索可以告诉我们每个新事件与基线的距离。

这个 Jupyter 笔记本 演示了该稀疏矩阵向量的处理和图形。

Logreduce 介绍

Logreduce Python 软件透明地实现了这个过程。Logreduce 的最初目标是使用构建数据库来协助分析 Zuul CI 作业的失败问题,现在它已集成到 Software Factory 开发车间的作业日志处理中。

最简单的是,Logreduce 会比较文件或目录并删除相似的行。Logreduce 为每个源文件构建模型,并使用以下语法输出距离高于定义阈值的任何目标行:distance | filename:line-number: line-content

$ logreduce diff /var/log/audit/audit.log.1 /var/log/audit/audit.log
INFO  logreduce.Classifier - Training took 21.982s at 0.364MB/s (1.314kl/s) (8.000 MB - 28.884 kilo-lines)
0.244 | audit.log:19963:        type=USER_AUTH acct="root" exe="/usr/bin/su" hostname=managesf.sftests.com
INFO  logreduce.Classifier - Testing took 18.297s at 0.306MB/s (1.094kl/s) (5.607 MB - 20.015 kilo-lines)
99.99% reduction (from 20015 lines to 1

更高级的 Logreduce 用法可以离线训练模型以便重复使用。可以使用基线的许多变体来拟合 k-NN 搜索树。

$ logreduce dir-train audit.clf /var/log/audit/audit.log.*
INFO  logreduce.Classifier - Training took 80.883s at 0.396MB/s (1.397kl/s) (32.001 MB - 112.977 kilo-lines)
DEBUG logreduce.Classifier - audit.clf: written
$ logreduce dir-run audit.clf /var/log/audit/audit.log

Logreduce 还实现了接口,以发现 Journald 时间范围(天/周/月)和 Zuul CI 作业构建历史的基线。它还可以生成 HTML 报告,该报告在一个简单的界面中将在多个文件中发现的异常进行分组。

管理基线

使用 k-NN 回归进行异常检测的关键是拥有一个已知良好基线的数据库,该模型使用数据库来检测偏离太远的日志行。此方法依赖于包含所有标称事件的基线,因为基线中未找到的任何内容都将报告为异常。

CI 作业是 k-NN 回归的重要目标,因为作业的输出通常是确定性的,之前的运行结果可以自动用作基线。 Logreduce 具有 Zuul 作业角色,可以将其用作失败的作业发布任务的一部分,以便发布简明报告(而不是完整作业的日志)。只要可以提前构建基线,该原则就可以应用于其他情况。例如,标称系统的 SoS 报告 可用于查找缺陷部署中的问题。

异常分类服务

下一版本的 Logreduce 引入了一种服务器模式,可以将日志处理卸载到外部服务,在外部服务中可以进一步分析该报告。它还支持导入现有报告和请求以分析 Zuul 构建。这些服务以异步方式运行分析,并具有 Web 界面以调整分数并消除误报。

已审核的报告可以作为独立数据集存档,其中包含目标日志文件和记录在一个普通的 JSON 文件中的异常行的分数。

项目路线图

Logreduce 已经能有效使用,但是有很多机会来改进该工具。未来的计划包括:

  • 策划在日志文件中发现的许多带注释的异常,并生成一个公共域数据集以进行进一步研究。日志文件中的异常检测是一个具有挑战性的主题,并且有一个用于测试新模型的通用数据集将有助于识别新的解决方案。
  • 重复使用带注释的异常模型来优化所报告的距离。例如,当用户通过将距离设置为零来将日志行标记为误报时,模型可能会降低未来报告中这些日志行的得分。
  • 对存档异常取指纹特征以检测新报告何时包含已知的异常。因此,该服务可以通知用户该作业遇到已知问题,而不是报告异常的内容。解决问题后,该服务可以自动重新启动该作业。
  • 支持更多基准发现接口,用于 SOS 报告、Jenkins 构建、Travis CI 等目标。

如果你有兴趣参与此项目,请通过 #log-classify Freenode IRC 频道与我们联系。欢迎反馈!


via: https://opensource.com/article/18/9/quiet-log-noise-python-and-machine-learning

作者:Tristan de Cacqueray 选题:lujun9972 译者:wxy 校对:wxy

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

前一篇文章介绍了 Fedora 系统上有关文件权限的一些基础知识。本部分介绍使用权限管理文件访问和共享的其他方法。它建立在前一篇文章中的知识和示例的基础上,所以如果你还没有阅读过那篇文章,请查看它。

符号与八进制

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号模式显示在屏幕上。

每个集合都有 rwx 条目,表示特定用户(所有者、组成员或其他)是否可以读取、写入或执行该文件。但是还有另一种表达这些权限的方法:八进制模式。

你已经习惯了十进制编号系统,它有十个不同的值(09)。另一方面,八进制系统有八个不同的值(07)。在表示权限时,八进制用作速记来显示 rwx 字段的值。将每个字段视为具有如下值:

  • r = 4
  • w = 2
  • x = 1

现在,你可以使用单个八进制值表达任何组合。例如,读取和写入权限(但没有执行权限)的值为 6。读取和执行权限的值仅为 5。文件的 rwxr-xr-x 符号权限的八进制值为 755

与符号值类似,你可以使用八进制值使用 chmod 命令设置文件权限。以下两个命令对文件设置相同的权限:

chmod u=rw,g=r,o=r myfile1
chmod 644 myfile1

特殊权限位

文件上还有几个特殊权限位。这些被称为 setuid(或 suid)、setgid(或 sgid),以及 粘滞位 sticky bit (或 阻止删除位 delete inhibit )。 将此视为另一组八进制值:

  • setuid = 4
  • setgid = 2
  • sticky = 1

除非该文件是可执行的,否则 setuid 位是被忽略的。如果是可执行的这种情况,则该文件(可能是应用程序或脚本)的运行就像拥有该文件的用户启动的一样。setuid 的一个很好的例子是 /bin/passwd 实用程序,它允许用户设置或更改密码。此实用程序必须能够写入到不允许普通用户更改的文件中(LCTT 译注:此处是指 /etc/passwd/etc/shadow)。因此它需要精心编写,由 root 用户拥有,并具有 setuid 位,以便它可以更改密码相关文件。

setgid 位对于可执行文件的工作方式类似。该文件将使用拥有它的组的权限运行。但是,setgid 对于目录还有一个额外的用途。如果在具有 setgid 权限的目录中创建文件,则该文件的组所有者将设置为该目录的组所有者。

最后,虽然文件粘滞位没有意义会被忽略,但它对目录很有用。在目录上设置的粘滞位将阻止用户删除其他用户拥有的该目录中的文件。

在八进制模式下使用 chmod 设置这些位的方法是添加一个值前缀,例如 4755,可以将 setuid 添加到可执行文件中。在符号模式下,ug 也可用于设置或删除 setuidsetgid,例如 u+s,g+s。粘滞位使用 o+t 设置。(其他的组合,如 o+su+t,是没有意义的,会被忽略。)

共享与特殊权限

回想一下前一篇文章中关于需要共享文件的财务团队的示例。可以想象,特殊权限位有助于更有效地解决问题。原来的解决方案只是创建了一个整个组可以写入的目录:

drwxrwx---. 2 root finance 4096 Jul  6 15:35 finance

此目录的一个问题是,finance 组成员的用户 dwaynejill 可以删除彼此的文件。这对于共享空间来说不是最佳选择。它在某些情况下可能有用,但在处理财务记录时可能不会!

另一个问题是此目录中的文件可能无法真正共享,因为它们将由 dwaynejill 的默认组拥有 - 很可能用户私有组也命名为 dwaynejill,而不是 finance

解决此问题的更好方法是在文件夹上设置 setgid 和粘滞位。这将做两件事:使文件夹中创建的文件自动归 finance 组所有,并防止 dwaynejill 删除彼此的文件。下面这些命令中的任何一个都可以工作:

sudo chmod 3770 finance
sudo chmod u+rwx,g+rwxs,o+t finance

该文件的长列表现在显示了所应用的新特殊权限。粘滞位显示为 T 而不是 t,因为 finance 组之外的用户无法搜索该文件夹。

drwxrws--T. 2 root finance 4096 Jul  6 15:35 finance

via: https://fedoramagazine.org/command-line-quick-tips-more-about-permissions/

作者:Paul W. Frields 选题:lujun9972 译者:wxy 校对:wxy

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

仪表板可以帮助 DevOps 团队观测和监控系统,以提高性能。

指标仪表板帮助 DevOps 团队监控整个 DevOps 平台,以便实时响应 议题 issue 。在处理生产环境宕机或者应用服务中断等情况时,指标仪表板显得尤为重要。

DevOps 仪表板聚合了多个监测工具的指标,为开发和运维团队生成监控报告。它还允许团队跟踪多项指标,例如服务部署时间、程序 bug、报错信息、工作项、待办事项等等。

下面三种指标仪表板可以帮助 DevOps 团队监测系统,改善服务性能。

敏捷项目管理仪表板

这种类型的仪表板为 DevOps 团队的工作项提供可视化视图,优化敏捷项目的工作流。有利于提高团队协作效率,对工作进行可视化并提供灵活的视图 —— 就像我们过去在白板上使用便利贴来共享项目进度、 议题 issue 和待办事项一样。

  • Kanban boards 允许 DevOps 团队创建卡片、标签、任务和栏目,便于持续交付敏捷项目。
  • Burndown charts 对指定时间段内未完成的工作或待办事项提供可视化视图,并记录团队当前的效率和轨迹,这些指标通常用于敏捷项目和 DevOps 项目管理。
  • Jira boards 帮助 DevOps 团队创建议题、计划迭代并生成团队总结。这些灵活的仪表板还能帮助团队综合考虑并确定个人和团队任务的优先级;实时查看、汇报和跟踪正在进行的工作;并提高团队绩效。
  • GitHub project boards 帮助确定团队任务的优先级。它们还支持拉取请求,因此团队成员可以方便地提交 DevOps 项目相关的信息。

应用程序监控仪表板

开发者负责优化应用和服务的性能,并开发新功能。应用程序监控面板则帮助开发者在 持续集成/持续开发 CI / CD 流程下,加快修复 bug、增强程序健壮性、发布安全修丁的进度。另外,这些可视化仪表板有利于查看请求模式、请求耗时、报错和网络拓扑信息。

  • Jaeger 帮助开发人员跟踪请求数量、请求响应时间等。对于分布式网络系统上的云原生应用程序,它还使用 Istio 服务网格加强了监控和跟踪。
  • OpenCensus 帮助团队查看运行应用程序的主机上的数据,它还提供了一个可插拔的导出系统,用于将数据导出到数据中心。

DevOps 平台监控面板

你可能使用多种技术和工具在云上或本地构建 DevOps 平台,但 Linux 容器管理工具(如 Kubernetes 和 OpenShift )更利于搭建出一个成功的 DevOps 平台。因为 Linux 容器的不可变性和可移植性使得应用程序从开发环境到生产环境的编译、测试和部署变得更快更容易。

DevOps 平台监控仪表板帮助运营团队从机器/节点故障和服务报错中收集各种按时序排列的数据,用于编排应用程序容器和基于软件的基础架构,如网络(SDN)和存储(SDS)。这些仪表板还能可视化多维数据格式,方便地查询数据模式。

  • Prometheus dashboards 从平台节点或者运行中的容器化应用中收集指标。帮助 DevOps 团队构建基于指标的监控系统和仪表板,监控微服务的客户端/服务器工作负载,及时识别出异常节点故障。
  • Grafana boards 帮助收集事件驱动的各项指标,包括服务响应持续时间、请求量、 客户端/服务器 client/server 工作负载、网络流量等,并提供了可视化面板。DevOps 团队可以通过多种方式分享指标面板,也可以生成编码的当前监控数据快照分享给其他团队。

总结

这些仪表板提供了可视化的工作流程,能够发现团队协作、应用程序交付和平台状态中的各种问题。它们帮助开发团队增强其在快速应用交付、安全运行和自动化 CI/CD 等领域的能力。


via: https://opensource.com/article/19/7/dashboards-devops-teams

作者:Daniel Oh 选题:lujun9972 译者:hello-wn 校对:wxy

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

轻击 tap to click 选项在 Ubuntu 18.04 GNOME 桌面的登录屏幕上不起作用。在本教程中,你将学习如何在 Ubuntu 登录屏幕上启用“轻击”。

安装 Ubuntu 后我做的第一件事就是确保启用了轻击功能。作为笔记本电脑用户,我更喜欢轻击触摸板进行左键单击。这比使用触摸板上的左键单击按钮更方便。

我登录并使用操作系统时可以轻击。但是,如果你在登录屏幕上,轻击不起作用,这是一个烦恼。

在 Ubuntu(或使用 GNOME 桌面的其他发行版)的 GDM 登录屏幕上,你必须单击用户名才能显示密码字段。现在,如果你习惯了轻击,即使你已启用了它并在登录系统后可以使用,它也无法在登录屏幕上运行。

这是一个轻微的烦恼,但仍然是一个烦恼。好消息是你可以解决这个烦恼。让我告诉你如何在这个快速提示中做到这一点。

在 Ubuntu 登录屏幕上启用轻击

你必须在这里使用终端和一些命令。我希望你能够适应。

在 Ubuntu 中使用 Ctrl + Alt + T 快捷键打开终端。由于 Ubuntu 18.04 仍在使用 X 显示服务器,因此需要启用它才能连接到 X 服务器。为此,你可以将 gdm 添加到访问控制列表中。

首先切换到 root 用户。这是必需的,因为你必须稍后切换为 gdm 用户,而不能以非 root 用户身份执行此操作。

sudo -i

在 Ubuntu 中没有为 root 用户设置密码。你可以使用管理员用户帐户访问它。因此,当要求输入密码时,请使用你自己的密码。输入密码时,屏幕上不会显示任何输入内容。

xhost +SI:localuser:gdm

这是我的输出:

xhost +SI:localuser:gdm
localuser:gdm being added to access control list

现在运行此命令,以便 gdm 用户具有正确的轻击设置。

gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true

如果你看到这样的警告:(process:6339): dconf-WARNING **: 19:52:21.217: Unable to open /root/.local/share/flatpak/exports/share/dconf/profile/user: Permission denied。别担心。忽略它就行。

这将使你能够轻击登录屏幕。为什么在系统设置中进行更改之前无法使用轻击?这是因为在登录屏幕上,你还没有选择用户名。只有在屏幕上选择用户时才能使用你的帐户。这就是你必须使用用户 gdm 并使用它添加正确设置的原因。

重新启动 Ubuntu,你会看到现在可以使用轻击来选择你的用户帐户。

还原改变

如果你因为某些原因不喜欢在 Ubuntu 登录界面轻击,可以还原更改。

你必须执行上一节中的所有步骤:切换到 root,将 gdm 与 X 服务器连接,切换到 gdm 用户。但是,你需要运行此命令,而不是上一个命令:

gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click false

就是这样。

正如我所说,这是一件小事。我的意思是你可以轻松地点击左键而不是轻击。这只是一次单击的问题。但是,当你在几次轻击后被迫使用左键单击时,它会打破操作“连续性”。

我希望你喜欢这个快速的小调整。如果你知道其他一些很酷的调整,请与我们分享。


via: https://itsfoss.com/enable-tap-to-click-on-ubuntu-login-screen/

作者:Abhishek Prakash 选题:lujun9972 译者:wxy 校对:wxy

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