分类 技术 下的文章

我在 PinePhone 上测试了 Maui Shell,结果有好有坏。如果你想冒险尝鲜一下,可以按照这个说明进行试验!

就在一个多月前,我们写了 Maui Shell 初窥。它是由 Nitrux Linux 团队开发的,我对它流畅的视觉效果,特别是它的融合功能印象深刻。

同时,我结束了 我一年的 PinePhone 日用实验,这意味着它可以再次自由地进行实验。结果,我很快就自己安装了 Maui Shell,花了不少时间来测试它。

下面是我的发现!

关于 Maui Shell 开发状态的简短说明

在我们开始之前,我想指出,Maui Shell 仍处于早期开发阶段。因此,我一般不会提到我注意到的 bug,而是将重点放在它的更基本的方面。

不过,对于更大的、更耗时的问题例外,所以请记住这一点。

说完了这些,让我们开始测试吧!

手机上的 Maui Shell

安装完之后,我就看到了 Maui Shell 的(现在熟悉的)桌面上。随即,非常明显的是,它的缩放比例完全错误,这使得它很难使用。

幸运的是,Maui 项目的 Telegram 群组的人提供了极大帮助,我没用了一个小时就成功地修复了缩放比例(感谢 @wachidadinugroho)。

现在好了,我开始测试。

其性能堪比糖浆流动

如果你读过我的 PinePhone 点评,你可能记得把它的性能比作糖蜜滴落的速度。不幸的是,Maui Shell 将这一点提升到了一个全新的高度。即使是最基本的互动,如打开快速控制菜单,也要花上五秒钟的时间!

不幸的是,我的水平还不足以判断这种缓慢的原因,但它很有可能是由软件渲染造成的。如果你不清楚,“软件渲染”是指图形不在 GPU 上渲染,而是在效率和优化程度都更低的 CPU 上(利用软件来)渲染。

我考虑的另一个可能的罪魁祸首是糟糕的优化(毕竟它还处在早期阶段)。如果是这样的话,那么在未来的几个月里,极有可能在为 Maui Shell 的第一个稳定版本做准备的过程中修复这个问题。

然而,正如我之前所说的,对我的早期看法要多加注意。

有望实现的用户体验

与几乎所有的移动 UI 一样,Maui Shell 在触摸屏上使用起来简单而直观。然而,它也结合了许多桌面元素,这对提高用户体验有很大的作用。

例如,从屏幕顶部向下滑动会出现一个快速设置菜单,类似于在安卓和 iOS 上发现的那些。

然而,可以单独点击顶部通知栏的不同部分,会只显示相关的设置,类似于许多桌面环境面板和任务栏上的各种小程序。

现在,让我们前往 窗口管理

对于窗口管理,Maui Shell 团队显然从 GNOME 和 iOS 中获得了一些灵感,从屏幕底部向上滑动会显示一个类似 GNOME 的所有运行中的应用程序的概览。我发现这非常直观和简单,老实说,我很惊讶以前没有这样操作过!

最后,托盘也是 Maui Shell 在手机上的一个重要方面。它在默认情况下自动隐藏,可以通过从屏幕底部向上轻扫来访问。从这里,它显示了所有正在运行的应用程序的图标,以及一个打开应用程序启动器的按钮。

说到应用启动器,它与 iOS 14 及更高版本中的应用库非常相似。每个应用都被分类,只需轻点几下就能轻松找到并启动。

总的来说,其实用性有点独特,而且值得探究。而且,这种特性也延伸到了应用程序,它们是用 Mauikit 和 Kirigami 制作的。

我认为 Maui Shell 团队把基本的东西做得很完美。

应用程序超棒

任何用 Mauikit 构建的东西都能与 Maui Shell 完美整合。到目前为止,最大的 Mauikit 应用程序集来自 Maui Shell 的开发方 Maui 项目。其中一些包括:

  • Index
  • Nota
  • Station
  • VVave
  • Pix
  • Clip
  • Buho
  • Shelf
  • Communicator

所有这些应用都能在移动和桌面设备上完美运行,并将桌面级应用带到手机上。我对 Index 特别满意,它是一个有趣而实用的手机文件管理器。

Maui Index app

除了 Mauikit 应用外,Kirigami 应用也很好用。因此,在桌面和移动设备上都有一个非常适合 Maui Shell 的庞大的应用程序库。

其他观点

除了这些观察之外,还有一些小问题我想提一下:

  • 不幸的是,现在似乎还没有虚拟键盘。我通过使用 USB-C 连接的键盘来规避这个问题,但这并不意味着不能把它作为手机使用。
  • 我还发现了几个缩放的问题,我无法解决这些问题。这些问题包括应用程序的缩放比例远远超过 Maui Shell 本身,以及根本没有缩放比例。这也许是由于我的错误造成的,但我觉得不能指望一般的用户能够钻研晦涩的 Qt 专用环境变量。

自己测试 Maui Shell

如果所有这些问题都不影响你,那么你可以使用下面的说明在 PinePhone 上测试 Maui Shell。需要注意的是,这些都是针对 PinePhone 的,但也可以根据其他需要进行修改:

  • 下载 Arch Linux ARM 并刷入到 SD 卡上
  • 用 SD 卡启动,并连接一个外部键盘
  • 使用凭证 alarm/123456 登录
  • 现在使用 nmtui 连接到 Wi-Fi,并使用 sudo pacman -Syu 更新软件包列表
  • 运行以下命令(这些命令将需要很长的时间来运行):
sudo pacman -S base-devel
git clone https://aur.archlinux.org/packages/maui-shell-git
git clone https://aur.archlinux.org/packages/mauikit-git
cd mauikit-git
makepkg -Asi
cd ..
cd maui-shell-git
makepkg -Asi
  • 使用 nano 创建一个启动脚本:
cd
nano start.sh

输入如下内容:

#!/bin/sh

# in case it's not detected
# or you wish to override
#
# export QT_QPA_EGLFS_PHYSICAL_WIDTH=480
# export QT_QPA_EGLFS_PHYSICAL_HEIGHT=270

export QT_QPA_PLATFORM=eglfs
export QT_AUTO_SCREEN_SCALE_FACTOR=0
export QT_SCALE_FACTOR=2
cask -r -plugin libinput
  • 使脚本可执行:chmod +x start.sh

现在,可以用 ./start.sh 启动 Maui Shell 了。

就这样!

你对 Maui Shell 有什么看法?你认为它的融合功能有用吗?请在下面的评论中告诉我们!


via: https://news.itsfoss.com/tested-maui-shell/

作者:Jacob Crume 选题:lujun9972 译者:wxy 校对:wxy

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

我们需要利用文本编辑器来做笔记、写程序,或者编辑系统配置文件来完成一些事情。

不管你用来做什么,你的 Linux 发行版已经预装了文本编辑器。

你很可能会注意到一些 最好的现代文本编辑器,如 Gedit、Geany、Kate 等,它们已经预装在你的 Linux 发行版中。然而,这些都是基于 GUI 的程序。

如果你想通过终端访问文本编辑器怎么办?你应该发现它也内置在你的 Linux 发行版中了。

Vim 和 nano 是最流行的 CLI 文本编辑器 之二。

但是,是什么让它们如此受欢迎?你应该选择哪个作为你的文本编辑器?让我指出一下 Vim 和 nano 的区别,以帮助你决定。

1、基于终端的编辑器介绍

nano 和 Vim 都提供了大部分的基本功能。虽然 nano 在大多数 Linux 发行版上是内置的,但你必须手动安装 Vim。

为了比较这两者,让我给你简单介绍一下这两者。

Vim

Vim 是 “Vi” 文本编辑器的改进版,开发于 1991 年。Vim 是 “ Vi 改进版 Vi IMproved ” 的意思。

Vi 是一个基于终端的文本编辑器,最初于 1976 年为 Unix 操作系统而开发。Vim 是它的一个具有现代功能的增强版。

考虑到它的各种功能可以帮助编辑程序文件,它也被称为“程序员的文本编辑器”。虽然它提供了一些高级功能,但你也可以用来编辑纯文本文件。

GNU nano

GNU nano(我们在文章中称它为 “nano”)是一个简单的基于终端的文本编辑器,其灵感来自于 Pico —— 这个基于 Unix 的文本编辑器是华盛顿大学 1989 年开发的 Pine 电子邮件套件的一部分。

Pico 文本编辑器没有 GPL(许可证),这使得它很难被纳入 Linux 发行版。

因此,nano 被开发出来作为它的自由软件替代品。nano 编辑器最初被称为 “tip”,然后在 Richard Stallman 宣布它成为正式的 GNU 程序之前重新命名为 nano。

这个编辑器的亮点是它的易用性和极小的学习曲线。你不一定需要成为程序员才能使用 nano。

2、功能差异

下面是 Vim 和 nano 的主要功能差异:

Vim 的主要特点

  • 多级撤销
  • 语法高亮
  • 命令行编辑
  • 文件名补完
  • 多窗口和缓冲区
  • 折叠
  • 会话
  • 支持宏

nano 的主要特点

  • 打开多个文件
  • 逐行滚动
  • 撤销/重做
  • 语法着色
  • 行号

请注意,一般来说,Vim 提供了更高级的功能。然而,它们都提供了编辑系统配置文件、编程和文本编辑等基本功能。

3、用作文本编辑器

在 Vim 或 nano 中打开一个文件很简单,只要输入你想使用的编辑器的名字,然后再输入文件的路径。路径可以是文件的绝对路径,也可以是文件的相对路径。

vim Documents/text.txt
nano Documents/text.txt

但是,除了用作文本编辑器访问或打开一个文件之外,还有很多功能,对吗?

如果你想快速比较一下,这里有一些基于我的使用情况的比较点:

Vim:

  • 模式驱动的编辑器
  • 在开始时有巨大的学习曲线
  • 会话恢复
  • 语法高亮/着色
  • 提供高级功能

nano:

  • 易于使用(经常使用的功能及其组合键列在底部)
  • 不存在学习曲线
  • 旨在进行快速编辑

nano 和 Vim 的主要区别在于,它们的目标受众非常不同。

Vim

Vim 是一个模式驱动的编辑器。这意味着字母、数字和标点符号键在按下时都要做一件独特的事情,而不是在屏幕上打出一个字符。

这些模式包括:

  • 正常模式
  • 视觉模式
  • 插入模式
  • 命令行命令
  • 命令行编辑

默认情况下,当你启动 Vim 时,它以 正常 模式打开。每个键都有其独特的功能,不会立即开始输入所按下的字符。

不管什么模式,如果你愿意,你也可以 把 Vim 配置成一个写作工具

要知道更多关于这些有趣的事情,你可以参考我们关于 基本 Vim 命令 以及 Vim 技巧和窍门 的文章。

当你启动 Vim(无参数)时的终端屏幕

在正常模式下,按特定的键会移动你的光标。

例如,如果你按下 l(小写字母 L),它将把光标向右移动一个字符,按 h 键将把光标向左移动一个字符。

如果你想把光标向下移动一行,你就按 j 键,如果要把光标向上移动一行,你应该按 k 键。

在正常模式下 lkjh 是导航键。虽然你可以用方向键来移动,但这样做更有效率。

这些是 Vim 中的基本导航键。

接下来最常用的键是 wbe

  • w 键可将光标移到下一个词。如果它已经在一个词的开头,它就会移动到下一个词的开头。
  • b 键,光标会移到左边的词的开头。
  • e 键,则将光标移到右边的词的末尾。

你甚至可以用这些键混合数字(作为前缀)。例如,按 6w 可以将光标向前(向右)移动六个词。

如果你想进入一个模式,你必须按类似的组合键:

  • i 为插入模式
  • CTRL+C 回到正常模式
  • :wq 写入文件并关闭窗口。

最后,我们已经 列出了退出 Vim 的多种方法,如果你想了解一下的话。

这只是冰山一角。要学习更多关于 Vim 的知识,你可以使用vimtutor 命令,它可以给你提供大多数基本命令的信息,如删除、编辑、保存文件等。

GNU nano

nano 有一个基本的交互界面,在窗口的底部给你提供关键信息。

要想有个初步的了解,你可以参考我们的 nano 编辑器指南

![Terminal screen when you launch nano without argumentswithoutarguments] 13

你不需要参考手册页或任何文档来执行基本操作。这就是为什么与 Vim 相比,nano 被认为是用户友好的。

尽管如此,nano 中使用的一些术语仍然是“旧术语”,一个例子是 “ 写出 Write Out ”、“ 在哪里 Where Is ”短语,而不是分别用“ 保存 Save ”和“ 查找 Find ”。

但是,这并不是什么大问题。

虽然很容易习惯,但它与使用记事本或 Gedit(GUI 程序)并不完全相同。

例如,在大多数现代编辑器中,执行剪切操作的组合键通常是 Ctrl + X,但在 nano 中,它是 Ctrl + K

符号 ^ 是用来表示将 Ctrl 键作为修饰键使用,并与旁边的键组合使用。

你还可以找到像 Ctrl + F(将光标向前移动)、Ctrl + B(将光标向后移动)这样的组合键。一些快捷键包括:

  • Ctrl + X 退出
  • Ctrl + O 写入(或保存为)
  • Alt + U 撤销上一个动作
  • Ctrl + ← 向后退一个字
  • Ctrl + → 向前进一个字

你可以看看 GNU nano 的官方速查表 来学习更多的快捷键。

总的来说,nano 是一个更适合初学者的编辑器,当你只想偶尔编辑一个文件时,它可以简单地让你完成。

4、学习曲线

考虑到上面的所有信息,你一定已经意识到 Vim 与你所习惯的传统文本编辑器不同。

这是真的,这就是为什么 Vim 在学习的初始阶段会显得很艰难。

然而,对于高级用户来说,使用宏、自动补完等高级能力很重要,可以节省时间。

因此,如果你是一个程序员,或者碰巧经常编辑许多文件,Vim 的学习曲线可能是富有成效的。

另一方面,nano 提供了极小的学习曲线,而且感觉比基于图形用户界面的文本编辑器如 Gedit 或 Notepad 更让你熟悉。

哪个是最适合你的?

Vim 和 nano 都是合格的基于终端的文本编辑器。但是,当涉及到你如何与上述编辑器互动和使用时,它们有很大的不同。

Vim 很灵活,可以适应各种工作流程,前提是你已经习惯了它的工作方式。

相比之下,nano 工作起来很简单,可以帮助你编辑任何你想要的东西。

如果你还不确定,我建议先开始使用 nano。而且,如果你认为你需要更快地完成工作,并且想要更多的功能,那么就换成 Vim。

常见的问题

继续,让我来谈谈几个问题,这将有助于你获得一个良好的开端。

Vim 比 nano 好吗?

从技术上讲,是的。但是,如果你不需要它提供的所有功能,使用起来可能会感到力不从心。

程序员是否使用 Vim?

系统管理员和程序员喜欢 Vim 的高级功能。所以,是的,他们倾向于使用它。

nano 是否更受欢迎?

可以说是的。nano 是一个基于终端的编辑器,被大多数用户使用。此外,它还内置在大多数 Linux 发行版中。

因此,它在用户中普遍受欢迎,而 Vim 仍然是一个为特定人群服务的编辑器。


via: https://itsfoss.com/vim-vs-nano/

作者:Pratham Patel 选题:lujun9972 译者:wxy 校对:wxy

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

这就是我如何从 35 个 Vim 插件降到只有 6 个的原因。

 title=

当你用 —clean 选项启动 Vim 时,它以 “素” 模式展示 Vim。没有插件、没有配置,一切回到了最初。多年来,我收集了一堆配置语句,其中一些可以追溯到 MS-DOS 或 Windows 3.1 时期。我是这样打算的:从头开始,只用 Fedora 35 中可用的插件,找到一个好的配置起点。我可以在一周的编码生活中生存下来吗?我会找到答案的!

规则是这样的:尽可能少的配置语句,并且只使用 Fedora 35+ 中的插件。顺便说一下,如果你不是 Fedora 用户,也请继续阅读。你可以随时从你的操作系统软件包管理器手动安装或者使用 Vim 插件管理器安装这些插件。

在我开始之前,有一个大问题需要解决:用 Vim 还是 Neovim(Vim 的一个复刻)。好吧,这由你决定。这篇文章中的所有内容应该对两者都适用。然而,我只用 Vim 测试过。当你登录到一个只有 vi 可用的服务器时,所有的这些技能都会派上用场。它可以是一个旧的 UNIX 系统、一个安装了最少的软件以提高安全性的 Linux 服务器、一个容器中的交互式 shell,或者一个空间宝贵的嵌入式系统。

闲话少说,下面是我提炼出来的使用 Vim 进行编码的绝对最低限度的东西:

# dnf install --allowerasing vim-default-editor \
        vim-enhanced \
        vim-ctrlp \
        vim-airline \
        vim-trailing-whitespace \
        vim-fugitive \
        vim-ale \
        ctags

不要担心 —allowerasing 选项。在确认之前,只需查看一下安装的东西。这个选项的作用是告诉软件包管理器把现有的 nano-default-editor 包替换为 vim-default-editor。这是一个小软件包,它在 shell 配置文件中将 EDITOR 环境变量设置为 vim,如果你想默认使用 Vim(例如,与 git 一起使用),这是必须的。这是专门针对 Fedora 的。你不需要在其他发行版或操作系统上这样做,只要确保你的 EDITOR shell 变量被正确设置就行。

概览

简单介绍一下我认为好的、干净的插件集:

  • CtrlP:尽可能小的模糊查找插件(纯 vimscript)
  • Fugitive:一个 git 的必备工具
  • Trailing-whitespace:显示并修复(删除)尾部的空格
  • Airline:一个改进的状态行(纯 vimscript)
  • Ale:在你打字时高亮显示错别字或语法错误
  • Ctags:不是 Vim 插件,但却是一个非常需要的工具

还有其他的模糊查找插件,如 command-t 或我最喜欢的 fzf.vim(非常快)。问题是,fzf.vim 不在 Fedora 中,而我想要尽可能少的配置。CtrlP 就可以了,而且配置它更容易,因为它不需要什么依赖。

如果让我选择一个绝对最小的配置,那就是:

# cat ~/.vimrc
let mapleader=","
let maplocalleader="_"
filetype plugin indent on
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
set exrc
set secure

但这可能太极端了,所以这里是一个稍大的配置,下面是我的详细解释:

" vim: nowrap sw=2 sts=2 ts=2 et:

" leaders
let mapleader=","
let maplocalleader="_"

" filetype and intent
filetype plugin indent on

" incompatible plugins
if has('syntax') && has('eval')
  packadd! matchit
end

" be SSD friendly (can be dangerous!)
"set directory=/tmp

" move backups away from projects
set backupdir=~/.vimbackup

" fuzzy searching
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
nnoremap <leader>b :CtrlPBuffer<cr>
nnoremap <leader>t :CtrlPTag<cr>
nnoremap <leader>f :CtrlPBufTag<cr>
nnoremap <leader>q :CtrlPQuickfix<cr>
nnoremap <leader>m :CtrlPMRU<cr>

" buffers and quickfix
function! ToggleQuickFix()
  if empty(filter(getwininfo(), 'v:val.quickfix'))
    copen
  else
    cclose
  endif
endfunction
nnoremap <leader>w :call ToggleQuickFix()<cr>
nnoremap <leader>d :bd<cr>

" searching ang grepping
nnoremap <leader>g :copen<cr>:Ggrep!<SPACE>
nnoremap K :Ggrep "\b<C-R><C-W>\b"<cr>:cw<cr>
nnoremap <leader>s :set hlsearch! hlsearch?<cr>

" ctags generation
nnoremap <leader>c :!ctags -R .<cr><cr>

" per-project configs
set exrc
set secure

使用逗号作为引导键

我喜欢把我的 引导键 映射成逗号 ,,而不是默认的反斜杠 \。当你的手处于书写位置时,它是 Vim 中最接近的自由键。另外,这个键在大多数键盘布局中都是一样的,而 \ 在每个型号或布局都不一样。我很少使用 本地引导键,但下划线 _ 看起来很合适。

延伸阅读:

文件类型和关闭语法高亮

接下来是非常重要的 filetype 命令。看,Vim 自带“内置电池”,8.2 版本包含 644 种语言的语法高亮,251 个文件类型定义(ftplugins),以及 138 种语言的缩进规则。然而,缩进在默认情况下是不启用的,也许是为了给所有人提供一个一致的编辑体验。我喜欢启用它。

一个简单的技巧:如果你正在编辑一个非常大的文件,并且 Vim 感觉很慢,你可能想禁用语法高亮来加快速度。只要输入 :syn off 命令即可。

延伸阅读:

Matchit 插件

Vim 甚至额外带有使得一些功能不兼容的插件,其中一个相当有用。它就是 matchit 插件,它使按下 % 键可以在某些语言中查找匹配的括号。通常情况下,你可以找到一个块的开始或结束(开始和结束括号)或 HTML 匹配标签及类似的。

延伸阅读:

交换文件

我想从我的旧配置中保留的许多设置之一是使用 /tmp 进行交换,并在我的家目录的一个单独目录中创建备份,你需要用 mkdir ~/.vimbackup 来创建这个目录。重要的是要明白,当你开始编辑时,Vim 会创建一个名为 “交换文件” 的副本,所有未保存的工作都会保存在这个文件中。所以即使停电了,你的交换文件也包含了大部分未保存的工作。我更喜欢使用 tmpfs,因为我所有的笔记本电脑和服务器都有 UPS 保护,而且我经常保存。另外,大多数情况下,你会使用到交换文件是当你的 SSH 连接丢失而不是由于停电时。对于大文件来说,交换文件可能相当大,我很珍视我的固态硬盘,所以我决定这样做。如果你不确定,可以删除这句话,使用 /var/tmp,这样更安全。

延伸阅读;

模糊寻找插件

现在,模糊查找是一个我不能没有的插件。在服务器上当你每天需要打开 20 个文件时,使用 :Ex:e:tabe 等命令打开文件是没问题的。而当编码时,我通常需要打开数百个文件。正如我所说,CtrlP 很好地完成了这项工作。它很小,没有依赖性,纯 Vim。它用 Ctrl + P 组合键打开,这对我来说有点奇怪。我知道一些著名的编辑器(我记得是 VSCode)使用这个组合键。问题是,这已经是很重要的 Vim 绑定键,我不想覆盖它。所以对我来说,赢家是 引导键 + 引导键(逗号按两次)。

ctrlp_user_command 只是改变了 CtrlP 获取文件列表的方式。它不使用内置的递归文件列表(glob),而是使用 git ls-files,这通常更好,因为它忽略了 .gitignore 中的东西,所以像 node_modules 或其他可能拖慢列表的不相关目录不会受到影响。

使用 引导键 + B/T/F/Q/M 来打开缓冲区、标签、当前文件的标签、快速修复缓冲区和最近使用的文件的列表,非常有用。具体来说,一旦你用 ctags 生成了标签列表,这基本上就是数百种编程语言的“去……定义处”,而且不需要插件!这都是 Vim 内置的。现在澄清一下,当我说输入 引导键 + B 时,是指按下逗号,然后按 B 键,而不是像用 ControlShift 那样一起按。

延伸阅读:

缓冲区管理

虽然现在 Vim 支持标签,但缓冲区管理是掌握 Vim 的一个重要技能。我通常会有很多缓冲区,我需要经常做 :bdelete。那么,引导键 + D 似乎是一个不错的选择,可以更快地完成这个任务。我也喜欢关闭 Quickfix 窗口,所以也有 引导键 + W 的组合键,我在浏览搜索结果时经常使用这个功能。

延伸阅读:

Ggrep 和 fugitive 插件

说到搜索,它和打开文件一样重要。我希望能够对代码库进行检索。为此,有一个来自 fugitive 插件的很棒的 :Ggrep 命令,它使用 git grep,忽略了垃圾文件,只搜索 Git 中的内容。由于 Shift + K 是 Vim 中的一个自由键,它非常适用于自动检索光标位置的词语。最后,能够使用 引导键 + G 输入任意的搜索模式也很好。注意,这将打开一个叫做 Quickfix 的窗口,你可以在这里浏览结果、查看下一个/上一个/最后一个/第一个出现的地方,等等。这个窗口也用于编译器或其他工具的输出,所以要熟悉它。如果你对此感到陌生,我建议进一步阅读文档。

延伸阅读:

用 fugitive 进行搜索、检索

顺便说一下,用 / 键搜索是智能和大小写敏感的,这意味着如果所有的搜索字符都是小写的,Vim 的搜索会忽略大小写。默认情况下,它会高亮显示结果,我觉得我已经敲了无数次的 :noh(来关闭高亮显示)。这就是为什么我有 引导键 + S 来切换高亮显示。我建议以后也多读读手册中关于搜索的内容。

接下来是搜索、检索。fugitive 插件已经为你提供了。使用命令 :Ggrep pattern 来进行 git grep,结果会进入 Quickfix 窗口。然后简单地使用快速修复命令(:cn:cp 等等)浏览结果,或者简单地使用 :CtrlPQuickfix引导键 + Q)来直观地滚动它们。CtrlP 的快速修复整合的酷炫之处是,你可以通过输入以匹配文件名或内容来进一步在搜索结果中搜索。

延伸阅读:

Ctags

引导键 + C 可以生成一个 ctags 文件,以便更好地导航,这在处理一个新的代码库或做一个有很多跳转的较长的编码任务时很有用。ctags 支持数百种语言,而 Vim 可以利用所有这些知识来导航。后面会有更多关于如何配置它的内容。注意我已经讨论过 引导键 + T 来打开所有标签的模糊搜索,记得吗?这两个是非常相同的。

延伸阅读:

按键映射

能够通过在项目目录下创建一个 .vimrc 文件来覆盖该项目中的任何设置是一个好主意。只要把它放在(全局的) .gitignore 中,以确保你不需要在每个项目中编辑成千上万的 .gitignore 文件。这样的一个项目的 .vimrc 可以是这样的(对于使用 GNU Makefile 的 C/C++ 项目):

" coding style
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
" include and autocomplete path
let &path.="/usr/local/include"
" function keys to build and run the project
nnoremap <F9> :wall!<cr>:make!<cr><cr>
nnoremap <F10> :!LD_LIBRARY_PATH=/usr/local/lib ./project<cr><cr>

正如你所看到的,我通常将 F2F10 等键映射到编译、运行、测试和类似的操作。用 F9 来调用 make,听起来不错。还记得 MS-DOS 上的蓝色 Borland IDE 吗?

如前所述,在全局范围内忽略 .vimrc 和(由 ctags 生成的)tags 是个好主意,所以不需要每次都更新 .gitignore

# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS

在我的个人配置中还有几条只与那些非美国键盘布局的人有关(我用捷克语)。我需要用“死键”来输入许多字符(LCTT 译注:“死键”是一种通过将变音符号与后面的字母结合起来打出重音字符的方法。这种方法在历史上被用于机械打字机),这根本不可能,我宁愿输入命令而不是按那些难以按下的组合键。这里有一个解决问题的办法:

" CTRL-] is hard on my keyboard layout
map <C-K> <C-]>
" CTRL-^ is hard on my keyboard layout
nnoremap <F1> :b#<cr>
nnoremap <F2> :bp<cr>
nnoremap <F3> :bn<cr>
" I hate entering Ex mode by accident
map Q <Nop>

延伸阅读:

功能键在 Vim 中都是自由的,除了 F1,它被绑定在帮助上。我不需要帮助,并不是说我已经会对 Vim 了如指掌,并不是。但如果需要的话,我可以简单地输入 :help。而 F1 是一个关键的键,离 Esc 键如此之近。我喜欢将它用于缓冲区交换(:b#),将 F2/F3 用作下一个/上一个。你越是与缓冲区打交道,你就越需要这个。如果你没有使用过 Ctrl + ^,我建议你要习惯于它。哦,你有没有丑陋地输入 :visual 进入过 Ex 模式?许多初学者都不知道如何从该模式下退出 Vim。对我来说,这就是打扰,因为我很少使用它。

现在,熟悉 ctags 是成功使用 Vim 的一个关键因素。这个工具支持数百种语言,它不小心就为你不想创建标签的文件创建它,因此我建议忽略典型的垃圾目录:

# cat ~/.ctags.d/local.ctags
  --recurse=yes
  --exclude=.git
  --exclude=build/
  --exclude=.svn
  --exclude=vendor/*
  --exclude=node_modules/*
  --exclude=public/webpack/*
  --exclude=db/*
  --exclude=log/*
  --exclude=test/*
  --exclude=tests/*
  --exclude=\*.min.\*
  --exclude=\*.swp
  --exclude=\*.bak
  --exclude=\*.pyc
  --exclude=\*.class
  --exclude=\*.cache

Airline 插件

我一定不能忘记 Vim 的 Airline 插件。在 Fedora 的两个插件中,这个插件很轻量级,不需要外部依赖,而且可以开箱即用我所有的字体。你可以定制它,而且还有主题之类的东西。我只是碰巧喜欢它的默认设置。

我必须提到,有两个主要的 Ctags 项目:Exuberant Ctags 和 Universal Ctags。后者是一个更现代的复刻。如果你的发行版有,就用它。如果你在 Fedora 35+ 上,你应该知道你现在用的是 Universal Ctags。

总结

作为总结,我的建议是这样的。尽量保持你的 Vim 配置流畅和干净。这将在未来得到回报。在我转换到新配置之后,我不得不重新学习“写入并退出”的命令,因为我总是不小心把它打成 :Wq,而我在旧的配置里有一个“小技巧”,让它实际上按我的意思工作。好吧,这个可能真的很有用,并能入选,我希望你能明白我的意思:

:command Wq wq
:command WQ wq

最后的一个快速技巧是:你可能需要经常改变你的默认 Vim 配置,来找到我在这里向你介绍的和你自己口味之间的舒适区。使用下面的别名,这样你就不需要一直搜索历史。相信我,当一个 Vim 用户在命令历史里搜索 “vim” 时,找不到什么是相关的内容:

alias vim-vimrc='vim ~/.vimrc'

就是这些了。也许这可以帮助你在没有大量插件的情况下在 Vim 的丰富世界遨游。“简简单单” 的 Vim 也很不错!

要尝试你刚刚读到的内容,请安装软件包并检出这些配置:

test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup

特别感谢 Marc Deop 和 Melanie Corr 对本文的审阅。

更新

我已经在这种配置下生存下来了!我唯一的纠结是 CtrlP 插件的结果顺序不同。文件的模糊算法与 fzf.vim 插件不同,所以我以前用各种搜索词能找到的文件现在找不到了。我最后安装了 Fedora 的 fzf 包以获得更相关的文件搜索,它附带了一个 vim 函数 FZF,可以绑定到引导键组合上。请看我的 GitHub 仓库 中更新后的配置文件。一路走来,我学到了很多东西。有一些键的绑定我已经忘记了,这要感谢许多插件。

这篇文章最初发表在 作者的网站 上,经许可后重新发表。


via: https://opensource.com/article/21/12/vanilla-vim-config

作者:Lukáš Zapletal 选题:lujun9972 译者:wxy 校对:wxy

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

Vim 有很多技巧,即使是用过它很多年的人仍然可以学习新东西。

 title=

Vim 总在那里。Vim 是当今最流行的文本编辑器之一。这在很大程度上是因为它随处可见。当你通过 SSH 连接到另一个系统时,你可能找不到 EmacsNanoVSCodium,但你可以放心,Vim 就在那里。

在本文中,我介绍了一些你可以用 Vim 做的中级事情,以加快你的工作流程并通常让你的一天更轻松。本文假设你以前使用过 Vim,已经了解编辑器的基础知识,并希望将你的 Vim 技能提高一个档次。Vim 充满了有用的技巧,没有人真正掌握它,但本文中的五个技巧可以提高你的技能,并希望让你更加爱上最受欢迎和喜爱的文本编辑器之一。

Vim 书签

Vim 提供了一种在文本中添加书签的简单方法。假设你正在编辑一个大文件,并且当前的编辑会话要求你在文件中不同位置的两段文本之间来回跳转。

首先,你输入 m(用于标记)为当前位置设置一个书签,然后为其命名。例如,如果我正在编辑的文件中有一个名称列表,我想稍后再跳回,我可以使用 mn(n 表示名称)为文件的该部分添加书签。

稍后,在编辑文件的另一部分并希望跳回该名称列表时,我有两个选项。我可以输入 `n(反引号 n)转到书签的位置,或者我可以键入 'n(单引号 n)转到书签所在行的开头。

当我不再需要书签时,我可以使用 :delmarks n 将其删除。:marks 会显示我所有的书签。

请注意,我使用小写字母来命名我的书签。这是故意的。你可以使用小写字母作为本地书签,使用大写字母来使书签在多个文件中具有全局性。

Vim 用户定义的缩写

如果你正在处理的文本有一个长词或短语多次出现,那么每次都完整地输入它会很快变得烦人。幸运的是,Vim 提供了一种创建缩写的简单方法。

要将 Acme Painted Fake Roadways, Inc. 的用户定义缩写设置为 apfr, 你需要输入 :ab apfr Acme Painted Fake Roadways, Inc.。现在当在编辑模式时,当你在输入 apfr 后面更上空格,就会变成 Acme Painted Fake Roadways, Inc.

当你关闭 Vim 会话时,你使用 :ab 设置的任何缩写都会丢失。如果你想在此之前取消设置缩写,你可输入 :una apfr

Vim 自动补全

许多人没有意识到 Vim 带有自动补全功能。如果你在文件中输入以前使用过的长词,这是一个方便的工具。

假设你正在撰写一篇文章,多次使用 Antarctica 一词。使用一次后,下次你可以只输入前几个字母。例如,你输入 Ant 然后按下 Ctrl+P。 Vim 要么补全单词(如果只有一个选项),要么为你提供可以用箭头键选择的单词列表,继续输入以进一步缩小搜索范围并使用 Tab 键选择单词。

Vim 范围选择

使用 Vim,你可以轻松地对文件中的一系列行执行操作。你可以通过起始行号、逗号和结束行号(包括)来指示范围。除了文字行号之外,你还可以使用句点(.)表示当前行,使用美元符号 ($) 表示文件缓冲区中的最后一行,以及使用百分号(%)表示整个文件。

这里举几个例子来说明。

如果要删除第 2 到 10 行,请输入(在命令模式下):

:2,10d

要删除从第 25 行到文件末尾的每一行:

:25,$d

你可以使用以下命令删除每一行:

:%d

要将第 5 到 10 行复制(或转移)到第 15 行之后:

:5,10t 15

要将第 5 行到第 10 行移动到第 15 行之后(而不是复制):

:5,10m 15

Vim 提高生产力

我希望这篇文章教会了你一些关于 Vim 文本编辑器的新知识。 Vim 有很多技巧,即使是使用了多年的人仍然可以学习新事物。总有一些新的和有用的东西可以学习。


via: https://opensource.com/article/22/3/vim-features-productivity

作者:Hunter Coleman 选题:lujun9972 译者:geekpi 校对:wxy

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

在一台电脑上维护独立的用户是一种奢侈,也是保护你自己和你关心的人的数据安全的一个好方法。

 title=

在一个家庭中共享一台电脑通常是一件很随意的事情。当你需要电脑时,你拿起它并开始使用它。这在理论上很简单,而且大部分情况下是有效的。也就是说,直到你不小心拿起公用电脑,不小心把你的服务器的正常运行时间的截图发到你伴侣的烹饪博客上。然后,就到了建立独立用户帐户的时候了。

从一开始,Linux 就是一个多用户系统。它的设计是把每个用户,只要他们登录,都当作一个独特的人,有一个属于他们自己的桌面,一个独特的网络浏览器配置文件,访问他们自己的文档和文件,等等。KDE Plasma 桌面做了很多工作,使得从一个帐户切换到另一个帐户很容易,但首先你必须为每个你期望使用电脑的人设置一个用户帐户。你也可以为客人设置一个特殊的帐户(我称这个帐户为 guest)。

在 KDE 中添加用户

在 Linux 上有不同的方法来添加用户。一种方法是系统管理员式的 使用终端。当你有很多用户需要添加时,这是非常有效的,所以你想把这个过程自动化或者只是减少鼠标点击的次数。

不过在 Plasma 桌面上,你可以用 用户 Users 程序来添加用户。 用户 Users 实际上是 系统设置 System Settings 中的一个控制面板,但你可以从你的应用菜单中启动它,就像它是一个独立的应用。

 title=

要添加一个用户,点击窗口底部的 添加新用户 Add New User 按钮。

 title=

给新用户一个 名字 Name 和一个 用户名 Username 。这些可能是相同的,但意图是他们的名字是他们的姓名,而他们的用户名是他们用于使用的入口。例如,我的名字是 “Seth Kenlon”,而我的用户名是 seth

将新用户指定为 标准用户 Standard 管理员 Administraor 。标准用户只对自己的环境有完全的控制权。他们可以 安装 Flatpak 并将数据保存到他们的主目录,但他们不能影响机器上的其他用户。这是有用户帐户的好处之一。我不会认为我允许使用我的电脑的任何人打算删除对我很重要的数据,但意外还是发生了。通过为我自己和我的伴侣创建一个单独的用户帐户,我在保护我们每个人的数据,我也在保护我们每个人,避免意外地移动一个文件或误放对另一个人很重要的数据。

管理员可以进行全系统的更改。我通常在我的电脑上为自己保留这个角色,我也希望我的伴侣在她自己的电脑上为自己保留这个角色。然而,在工作中,这个角色属于 IT 部门。

为用户创建一个 密码 Password ,并重复 确认 Confirm 。登录后,新用户可以改变他们的密码。

要完成用户创建,请点击 创建 Create 按钮。

切换用户

在桌面有两种不同的方式来切换用户。你可以注销,然后让另一个用户登录,或者你可以从应用菜单的 电源/会话 Power / Sessions 子菜单中选择 切换用户 Switch user

 title=

当一个新用户登录时,你的当前桌面会被“冻结”或暂停,而另一个用户的新桌面会被调出来。你所有的窗口都保持打开。你甚至可以在游戏中切换用户(如果你正在战斗中,你应该先暂停一下),当你切换回来时,你可以从你离开的地方继续。更好的是,你的所有进程也会继续运行。所以你可以在渲染视频或编译代码时切换用户,当你切换回来时,你的视频已经完成了渲染,或者你的代码已经完成了编译(只要有足够的时间)。

 title=

删除用户

当我有客人时,我经常在他们的逗留期间创建一个客人帐户,当他们离开后,我就删除这个帐户。

你可以通过删除一个用户的用户帐户来从你的电脑中删除该用户。这将删除他们的所有数据,所以要确保你要删除的用户已经把他们需要的东西从机器上迁移掉了!

删除用户 Delete User 按钮位于 用户 Users 控制面板中的每个用户帐户下,也就是你最初创建用户的地方。

 title=

Linux 用户管理

在计算机上维护独立的用户是一种奢侈,也是保护你自己的数据和你关心的人的数据安全的好方法。它允许每个用户都是独一无二的,并使桌面成为他们自己的。在 Linux 中,这很容易,而且没什么影响,因此可以为朋友、房客和家人创建用户。


via: https://opensource.com/article/22/2/manage-linux-users-kde

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

黑掉你的系统,了解为什么配置 SELinux 作为你的第一道容器防线是很重要的。

 title=

当有些事情在你的 Linux 环境中不能正常工作时,最简单的方法就是禁用 安全增强型 Linux Security-Enhanced Linux SELinux)。而当它突然可以工作了,你就会忘记了禁用这件事 —— 这是一个常见的陷阱,意味着你已经失去了一个非常强大的安全工具。

随着容器、微服务和分布式架构的兴起,威胁也在上升。这是由于一个老的、众所周知的问题:速度。容器的优势在于它们能让你快速行动,做更多的事情,并迅速改变。这意味着容器的采用已经飞速发展,但它所提供的速度也意味着你会遇到更多的问题和漏洞。当你越来越快地做更多的事情时,这自然会发生。

如何减轻威胁

正如孙子所说,“不战而屈人之兵”。当涉及到容器的基本防御时,这句话真的很有共鸣。为了避免问题(战斗),确保你的容器主机是安全的,你可以使用 SELinux 作为你的第一道防线。

SELinux 是一个开源项目,于 2000 年发布,2003 年集成到 Linux 内核中。根据 红帽公司的解释,“SELinux 是 Linux 系统 的一个安全架构,允许管理员对谁可以访问系统有更多的控制。它最初是由美国国家安全局(NSA)开发的,是使用 Linux 安全模块(LSM)对 Linux 内核 的一系列补丁。”

开始吧

当你想到容器时,首先想到的可能是 Docker。Docker 在 2013 年出现后掀起了一场容器采用革命。它是容器爆炸性流行的主要原因之一,但如上所述,大量采用增加了用户对安全风险的脆弱性。

在你用 SELinux 保护你的 Docker 容器之前,你需要设置一些东西。

前置条件

  • 安装并配置了 CentOS 8/RHEL 8。
  • 安装并配置好 Docker CE
  • 创建两个账户:root 和 非 root 用户(下面的例子中是 mcalizo)。

如果你需要在你的 RHEL 8/CentOS 8 服务器上设置 Docker,你可以按照这些 说明。如果你运行的是 RHEL 8,你需要在开始之前删除预装的 Podman 和 runc 包。

首先,确保 SELinux 被启用:

[mcalizo@Rhel82 ~]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[mcalizo@Rhel82 ~]$

然后,验证你的操作系统版本和 Docker 正在运行。以 root 身份登录并运行:

[root@rhel82 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[root@rhel82 ~]#

[root@rhel82 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-10-28 19:10:14 EDT; 15s ago
     Docs: https://docs.docker.com
 Main PID: 30768 (dockerd)
    Tasks: 8
   Memory: 39.0M
   CGroup: /system.slice/docker.service
           └─30768 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.889602941-04:00" level=error msg=">
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903413613-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903427451-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903538271-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.132060506-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.308943088-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.319438549-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.319570298-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.333419209-04:00" level=info msg="A>
Oct 28 19:10:14 rhel82.home.labs.com systemd[1]: Started Docker Application Container Engine

检查你的 Docker 版本:

[root@rhel82 ~]# docker --version
Docker version 19.03.13, build 4484c46d9d

黑掉主机

了解一个问题的最好方法之一就是去体验它。因此,我将告诉你,如果你的安全设置不当,向 Docker 主机注入恶意代码是多么容易。

为了能够在 Docker 主机上做坏事,“恶意”的非 root 用户(本教程中为 mcalizo)必须是可以实例化 Docker 容器的组的成员。

首先,确认 mcalizo 用户属于哪个组:

[root@Rhel82 ~]# groups mcalizo
mcalizo : mcalizo

输出显示,mcalizo 只属于它自己的组。这意味着 mcalizo 不能实例化 Docker 容器,如果它试图这样做,将会得到这个错误:

[mcalizo@Rhel82 ~]$ docker run -it --rm centos:latest /bin/sh
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

要允许 mcalizo 实例化容器,将用户加入 docker 组:

[root@Rhel82 ~]# usermod -G docker -a mcalizo
[root@Rhel82 ~]# groups mcalizo
mcalizo : mcalizo docker

接下来,部署一个 fedora:latest 的容器,并登录到实例化的容器中去探索它:

[mcalizo@Rhel82 ~]$ docker run -it --rm fedora:latest /bin/sh
Unable to find image 'fedora:latest' locally
latest: Pulling from library/fedora
ee7e89337106: Pull complete
Digest: sha256:b9ec86d36fca7b1d3de39cd7c258e8d90c377d312c21a7748071ce49069b8db4
Status: Downloaded newer image for fedora:latest
sh-5.0# cat /etc/redhat-release
Fedora release 33 (Thirty Three)

当你登录到新创建的容器时,你可以看到你是以 root 身份自动登录的:

sh-5.0# whoami
root
sh-5.0#

作为 root 用户,你可以在这个容器中做任何事情,这意味着你可以利用容器主机,做很多破坏。因为你可以实例化一个容器,即使你不属于主机的 sudoers 账户,你也可以对主机做一些事情。

退出你刚刚创建的容器,并创建一个新的容器来演示这个漏洞:

[mcalizo@Rhel82 ~]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@131043f2e306 /]#

-v 选项 将 Docker 主机的 / 目录挂载到 /exploit 目录下的容器:

[root@131043f2e306 /]#ls exploit/
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

因为它已被挂载,你可以在 Docker 主机上做任何事情。例如,你可以删除文件、编辑特定的配置来破害系统,甚至安装木马程序或其他恶意软件来窃取重要信息。

为什么会发生这种情况?

你可能想知道,既然 SELinux 处于强制模式,为什么会出现这种情况?深入挖掘 SELinux,看看哪里出了问题。

验证 SELinux 是否有一个 Docker 上下文

[mcalizo@Rhel82 ~]$ ps -eZ | grep docker
system_u:system_r:container_runtime_t:s0 30768 ? 00:00:04 dockerd
[mcalizo@Rhel82 ~]$

正如预期的那样,它确实有。这意味着 SELinux 管理着 Docker 守护进程。检查 Docker 守护进程,看看 SELinux 是否默认启用:

[mcalizo@Rhel82 ~]$ docker info | grep Security -A3
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-193.el8.x86_64

Docker 守护进程中的 SELinux 在默认情况下是 不启用 的。 这就是问题所在!要解决这个问题,按 文档 说明,通过更新或创建文件 /etc/docker/daemon.json 来启用 SELinux 来控制和管理 Docker(你必须有 root 权限才能这样做):

[root@Rhel82 ~]# cat /etc/docker/daemon.json
{
  "selinux-enabled": true
}
[root@Rhel82 ~]#
[root@Rhel82 ~]# systemctl restart docker

在创建或更新该文件并重启 Docker 后,你应该看到 Docker 守护进程中启用了 SELinux 支持:

[root@Rhel82 ~]# systemctl restart docker
[mcalizo@Rhel82 root]$ docker info | grep Security -A3
 Security Options:
  seccomp
   Profile: default
  selinux
[mcalizo@Rhel82 root]$

虽然仍然可以在你的 Docker 容器上挂载 Docker 主机中的特定文件系统,但不再允许更新或访问该文件:

[mcalizo@Rhel82 root]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@ecb5836da1f6 /]# touch /exploit/etc/shadow.sh
touch: cannot touch '/exploit/etc/shadow.sh': Permission denied
[root@ecb5836da1f6 /]#

了解更多

你在容器世界中的第一道防线取决于你对容器主机的操作系统的设置有多强。有许多方法可以实现 Linux 的安全性,包括市场上可供选择的方案,以增强你的安全态势。

SELinux 是一个额外的安全层,默认情况下内置于 Linux 发行版 中。为了借助它保护你的系统不被破坏,请确保 SELinux 保持开启状态。

如果你想了解更多,请参阅:


via: https://opensource.com/article/20/11/selinux-containers

作者:Mike Calizo 选题:lujun9972 译者:wxy 校对:wxy

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