BNU-FZH

fengzhenhua@outlook.com

之前一直使用有名的高亮缩进插件indent-blankline.nvim , 同时也有一个专门用于配置indent-blankline彩虹缩进的插件indent-rainbowline. 但是自从昨天升级后发现这个插件报错,而且我也不愿意再消耗时间去修复这个bug, 于是经过搜索发现了另一个替代品hlchunk.nvim, 同时配置好以后发现还是挺好用的, 本文记录我的电脑配置以方便大众。

2024年05月31日, 由于官方对hlchunk.nvim做了大量更新,所以其配置相应发生变化,为了确保最新版本的使用,今天更新为可用的配置。

安装和配置

  1. Lazy.nvim中,找到文件~/.config/nvim/lua/lazy-init.lua, 然后添加

    1
    2
    3
    4
    {
    "shellRaining/hlchunk.nvim",
    event = { "BufReadPre", "BufNewFile" }
    },

  2. 编写配置文件~/.config/nvim/lua/plg/hlchunk.lua

    ~/.config/nvim/lua/plg/hlchunk.lua
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #! /usr/bin/env lua
    -- hlchunk.lua
    -- https://fengzhenhua.gitlab.io/2024/05/18/Neovim高亮缩进线插件hlchunk
    -- Copyright (C) 2024 feng <feng@archlinux>
    --
    require('hlchunk').setup({
    blank = {
    enable = false,
    chars = {
    " ",
    },
    style = {
    { bg = "#434437" },
    { bg = "#2f4440" },
    { bg = "#433054" },
    { bg = "#284251" },
    },
    },
    chunk = {
    enable = true,
    chars = {
    horizontal_line = "─",
    vertical_line = "│",
    left_top = "┌",
    left_bottom = "└",
    right_arrow = "─",
    },
    style = "#00ffff",
    },
    indent = {
    enable = true,
    use_treesitter = false,
    -- chars = { "│", "¦", "┆", "┊", }, -- more code can be found in https://unicodeplus.com/
    chars = { "│" },
    style = {
    -- hlchunk 配色
    "#8B00FF",
    "#FF0000",
    "#FF7F00",
    "#FFFF00",
    "#00FF00",
    "#00FFFF",
    "#0000FF",
    "#8B00FF",
    -- indent-blankline 配色
    -- "#E06c75",
    -- "#E5C07B",
    -- "#61AFEF",
    -- "#D19A66",
    -- "#98C379",
    -- "#C678DD",
    -- "#56B6C2",
    -- "#8B00FF",
    },
    },
    line_num = {
    style = "#806d9c",
    priority = 10,
    use_treesitter = false,
    }
    })

  3. 启用hlchunk

    ~/.config/nvim/init.vim
    1
    lua require('plg/hlchunk')

官方仓库中的说明

blank

blank 可以用来做什么

我们代码的缩进一般是由空格或者 tab 组成的,因此可以在这些空位上动一些手脚,比如添加特殊字符表示这是一个空格,或者添加背景颜色,做出彩虹的效果。这个 mod 实质上继承自 indent,重写了 render 方法而已。

配置项

由于继承自 indent,他们的配置几乎相似和通用。blank mod 的默认配置如下:

1
2
3
4
local default_conf = {
priority = 9,
chars = { "․" },
}

chars 是一个 lua 表,其中的字符用来指示如何渲染 blank 字符,你可以设置为下面这样,来循环使用这些字符(尽管这样设置并不会很好看):

1
2
3
4
5
6
7
8
chars = {
" ",
"․",
"⁚",
"⁖",
"⁘",
"⁙",
},

style 继承自 indent,因此和 indent 的颜色实际上是一样的,并且配置方式一样。详情见 indent

example

下面是默认的 blank 样式

image

1
2
3
4
5
6
7
8
blank = {
chars = {
"․",
},
style = {
{ vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"), "" },
},
},

你也可以将空格设置的像是彩虹一般 🌈

screenshot
1
2
3
4
5
6
7
8
9
10
11
12
blank = {
enable = true,
chars = {
" ",
},
style = {
{ bg = "#434437" },
{ bg = "#2f4440" },
{ bg = "#433054" },
{ bg = "#284251" },
},
},

image

1
2
3
4
5
6
7
8
9
10
indent = {
chars = {
"․",
},
style = {
{ vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"), "" },
"#806d9c",
"#c06f98",
},
}

你也可以设置多种字符类型

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
indent = {
chars = {
"․",
"⁚",
"⁖",
"⁘",
"⁙",
},
style = {
"#666666",
"#555555",
"#444444",
},
}

最后,他还可以设置背景颜色

1
2
3
4
5
6
7
8
9
10
blank = {
enable = true,
chars = {
" ",
},
style = {
{ bg = vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("cursorline")), "bg", "gui") },
{ bg = "", fg = "" },
},
}

chunk

chunk 用来做什么

这个 mod 可以用来指示当前光标所在的一个 chunk(比如 function_declaration,if_statement)等。并且提供了 textobject 方便你快速的操作这个 chunk。

配置项

该 mod 的默认配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
local default_conf = {
priority = 15,
style = {
{ fg = "#806d9c" },
{ fg = "#c21f30" },
},
use_treesitter = true,
chars = {
horizontal_line = "─",
vertical_line = "│",
left_top = "╭",
left_bottom = "╰",
right_arrow = ">",
},
textobject = "",
max_file_size = 1024 * 1024,
error_sign = true,
}

独有的配置项为 use_treesittercharstextobjectmax_file_sizeerror_sign

  • use_treesitter 是用来控制是否使用 treesitter 来高亮代码块,默认为 true。 如果该项被设置为 true,他是通过自底向上的查找树的节点,直至找到匹配的节点类型,以此获取相应的 chunk 范围的。而如果设置为 false,将使用 vim 的 searchpair 来查找最近的相邻大括号来推断位置(也因此导致 Python 等脚本语言无法正常使用该 mod)

  • chars 是一个表,其中的字符用来指示用哪些字符来渲染 chunk,这个表中包含五个部分

    • horizontal_line
    • vertical_line
    • left_top
    • left_bottom
    • right_arrow
  • textobject 是一个字符串,默认没有值。他用来表示想要用哪些字符来表示 textobject,比如我使用的就是 ic,意为 inner chunk,你也可以修改为其他顺手的字符

  • max_file_size 是一个数字,默认为 1MB,当打开的文件大小超过这个值时,将自动关闭该 mod

  • error_sign 是一个布尔值,默认为 true,如果你使用 treesitter 来高亮代码块,当遇到错误的代码块时,它将会把 chunk 的颜色设置为枫叶红(或者你想要的其他颜色),要启用这个选项,style 应该有两个颜色, 默认的 style 为

    1
    2
    3
    4
    style = {
    "#806d9c", -- 紫罗兰色
    "#c21f30", -- 枫叶红色
    },

对于通用的配置(在 README 中有提到),仅有部分需要特别注意:

  • style 是一个字符串或者 Lua 表。如果是字符串,必须是一个 RGB 十六进制字符串。如果是一个表,接收一到两个表示十六进制颜色的字符串,如果只有一个颜色,那么只会使用一个颜色来渲染 chunk,如果有两个颜色,那么会使用两个颜色来渲染 chunk,第一个颜色用来渲染正常的 chunk,第二个颜色用来渲染错误的 chunk。

除此之外,还可以使用这样的配置来动态的切换 chunk 的颜色,这是为了解决这个 issue

1
2
3
4
5
6
7
8
9
10
11
12
13
local cb = function()
if vim.g.colors_name == "tokyonight" then
return "#806d9c"
else
return "#00ffff"
end
end
chunk = {
style = {
{ fg = cb },
{ fg = "#f35336" },
},
},

example

下面是默认的 chunk 样式

image

他的配置方式为

1
2
3
4
5
6
7
8
9
10
chunk = {
chars = {
horizontal_line = "─",
vertical_line = "│",
left_top = "╭",
left_bottom = "╰",
right_arrow = ">",
},
style = "#806d9c",
},

你可以按照下面的配置来使你的样式看起来像是 GIF 里演示的那样

image

1
2
3
4
5
6
7
8
9
10
chunk = {
chars = {
horizontal_line = "─",
vertical_line = "│",
left_top = "┌",
left_bottom = "└",
right_arrow = "─",
},
style = "#00ffff",
},

indent

indent 用来做什么

我们写代码有时候会遇到嵌套很多层等情况,而为了确定某些代码是否在同一层级,我们需要缩进线来帮助定位。

配置项

该 mod 的默认配置如下:

1
2
3
4
5
6
7
local default_conf = {
priority = 10,
style = { vim.api.nvim_get_hl(0, { name = "Whitespace" }) },
use_treesitter = false,
chars = { "│" },
ahead_lines = 5,
}

独有的配置为 use_treesittercharsahead_lines

  • use_treesitter 是用来控制是否使用 treesitter 来判断 indent 的层数,默认为 false(因为性能问题)。如果你对缩进的精确要求很高,你可以尝试设置为 true,详情见这个 issue

  • chars 是一个表,其中的字符用来指示用什么字符来渲染 indent line,你可以尝试设置为下面这样:

    1
    2
    3
    4
    5
    6
    chars = {
    "│",
    "¦",
    "┆",
    "┊",
    },

实际渲染的时候,第一个层级会采用第一个字符,第二个层级会采用第二个字符,以此类推,如果层级超过了你设置的字符数,那么会循环使用这些字符。

  • ahead_lines 是一个数字,用来控制缩进线超前查看和渲染范围,默认为 5

和 chunk 一样,我们需要额外注意 style 这个通用配置:

  • 这里的 style 是一个 RGB 字符串或者一个表。如果是字符串,那么所有的缩进线将会采用这一种颜色来渲染,如果是表,可以有这两种写法:

    1
    2
    3
    4
    5
    style = {
    "#FF0000",
    "#FF7F00",
    "..."
    },

    或者

    1
    2
    3
    4
    5
    style = {
    { bg = "#FF0000", fg = "#FFFFFF" },
    { bg = "#FF7F00", fg = "FF7F00" },
    -- ...
    },

    如果你设置了背景颜色,那么缩进线将会采用背景颜色来渲染。

example

下面是默认的 indent 样式

image

1
2
3
4
5
6
7
8
indent = {
chars = {
"│",
},
style = {
vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"),
},
}

你也可以将缩进线设置的像是彩虹一般 🌈

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
indent = {
chars = {
"│",
},
style = {
"#FF0000",
"#FF7F00",
"#FFFF00",
"#00FF00",
"#00FFFF",
"#0000FF",
"#8B00FF",
},
}

你也可以设置多种字符类型

image

1
2
3
4
5
6
7
8
9
10
11
indent = {
chars = {
"│",
"¦",
"┆",
"┊",
},
style = {
vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"),
},
}

如果你喜欢更粗的显示效果,你可以设置渲染的背景颜色

image

1
2
3
4
5
6
7
8
9
10
11
indent = {
enable = true,
use_treesitter = false,
chars = {
" ",
},
style = {
{ bg = vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui") },
},
exclude_filetype = exclude_ft,
}

line_num

line_num 用来做什么

其实他和 chunk 的功能相同,只是可能有些人不喜欢 chunk,偏好高亮行号的形式,因此有了这个 mod

配置项

该 mod 的默认配置如下:

1
2
3
4
5
local default_conf = {
style = "#806d9c",
priority = 10,
use_treesitter = false,
}

独有的配置项为 use_treesitter,用法和 chunk 的该项一样,详情见 chunk

和 chunk 一样,我们需要额外注意 style 这个通用配置:他只接收一个字符串,表示十六进制颜色,来表示行号的颜色

example

下面是默认的 line_num 样式

image

1
2
3
line_num = {
style = "#806d9c",
},
未来还会添加更多有意思的样式…… 如果你有好的想法,非常欢迎来提建议 😊

一直使用vim-latex 作为编写LaTeX文件的主力,但是虽然之前设置好了Alt键,但是一直用的较少,今天试用了一下Alt相关智能键,特别好用,查阅手册后将这部分使用规则记录下来。

开启Alt键

~/.local/share/nvim/lazy/vim-latex/ftplugin/tex.vim
1
2
let g:Tex_AdvancedMath = 1
set winaltkeys=no

由于我使用的是neovim, 所以设置了上述路径,如果您使用vim请找到对应路径设置即可。缺省时,如果某菜单对应了热键<key>,那么在 Vim 中按Alt-<key> 将使得屏幕焦点转移到菜单栏(menu bar)上。如果因此而产生了冲突,那么需要在$VIM/ftplugin/tex.vim 文件中设置set winaltkeys=no,以使用这些Alt 键相关的宏映射。 ,而我们一般没有这个需要,所以放心开启Alt键即可。

Alt键映射

Alt-L

这是一个多态的、插入模式下的宏映射,根据处于光标之前的字符展开为下列形式之一。光标之前的字符 展开

光标前的字符 替换为相应字符
( 或 ) \left(<++>\right)
[ 或 ] \left[<++>\right]
| \left|<++>\right|
{ \left{<++>\right}
< 或 > \langle<++>\rangle
q \lefteqn{<++>}<++>
其他 \label{<++>}

Alt-B

此插入模式宏映射将前一个字符包括进\mathbf{}中。

Alt-C

插入模式下,该键的多态性如下所示:

  1. 如果前一个字符是一个字母或数字,那么将它转为大写并将其包括进\mathcal{}
  2. 否则插入\cite{}

在可视模式下,它简单地将所选部分包括进\mathcal{}

Alt-I

此宏映射根据光标包括在哪个环境中在光标处插入\item 命令。\item 命令的风格(style)取决于包括它的环境。缺省时,Alt-I 为下列环境定义了风格:

Environment Stle
itemize \item
enumerate \item
theindex \item
thebibliography \item[<+biblabel+>]{<+bibkey+>} <++>
description \item[<+label+>] <++>

Alt-I拥有智能处理嵌套环境的能力。

HEU KMS Activator是知彼而知己开发的KMS激活工具,最新版增加了OEM激活功能,支持Vista/Win7/Server 2008/2012等系统的永久激活,无需联网即可一键激活Windows和Office VL版本。新增Win10数字许可证激活,可用于系统封装后完美激活。此工具无广告、无捆绑、无后门,完全出自“知彼而知己”的正版,适合系统封装爱好者使用。

HEU KMS Activator

注意:高级功能的按钮以“灰色”图标显示,建议详细阅读《用户使用手册》后再行使用。

数字许可证激活简介

  1. Windows10可以通过Windows 7 / 8.1升级、购买的零售版、或OEM等的方式激活,微软会收集计算机的硬件信息并上传到服务器,将其转化为数字许可证,下次重装系统时,联网后微软服务器将重新比对硬件信息,若主要硬件信息不变,系统就会自动予以激活。

  2. 例如已永久激活的Windows7升级到Windows10后,会自动永久激活,基于这种思路,通过从微软服务器获取数字门票(GenuineTicket.xml),完成数字许可证激活(又名数字权利激活)。

  3. 综上,数字许可证激活的方式必须连接到互联网,一旦激活成功,以后重装系统联网后即自动永久激活。

假如使用软件永久激活了Windows7,目前来看,升级到Windows10后会自动激活。此时这台计算机就已经获取到了“数字许可证”,不需要任何其他软件,也不需要安装密钥,只要以后在这台计算机上安装Windows10,联网自动激活。数字许可证激活方式,微软只需一个系统更新即可轻易封杀,然而为了扩大Windows10的市场占有率,此方式被默许。

KMS 激活简介

  1. 通常企业、学校等拥有多台计算机,设想如果安装了 Windows,然后管理员一台一台的去激活,管理起来十分不方便。为了解决这种问题,微软定制了一种 批量授权(Volume)的方法:局域网内的一台计算机作为服务器首先连接到微软的服务器进行激活,然后局域网内的其他计算机向局域网内的这台服务器请求激 活。这种方法即为 Key Management Service,简称 KMS,是微软定制的一种正规 激活方式,下面简要介绍一下激活流程。

  2. 大客户首先购买微软正版“CSVLK”密钥,然后将一台计算机永久激活(联网 或者拨打微软客服电话),这台计算机即可作为服务器(KMS Host),始终保持 开机联网(局域网连接通畅即可)的状态。局域网内的其他计算机(KMS Client)向服务器请求激活,当达到一定数量(激活 Windows 需要 25 台计算机、激活 Office 需要 5 台计算机)的客户端计算机请求激活后,服务器就向客户端注入激 活信息。

  3. KMS 激活后有效期 180 天。默认设置下 KMS Client 会自动向可用的 KMS Host 请求激活(未激活的客户端尝试连接 KMS 的时间间隔为 2 小时,已激活的 客户端尝试连接 KMS 的续订时间间隔为 7 天)。即 KMS Client 激活有效期会始 终保持 173 天以上,前提是 KMS Host 是可用的。

下载地址

之前为大家推荐过软件Ventoy, 实现了一个U盘在手同时安装多个操作系统的强大功能,大大方便了日常工作。今天升级我的Ventoy 后在主页发现原作者又开发了一款神器 iVentoy, 用于通过网络给多台机器启动安装操作系统,现引用其官方的说明,推荐给大家。

简单来说,iVentoy 可以看成是一个增强版的 PXE 服务器。iVentoy 使用极其简单,无需复杂的配置,直接把 ISO 文件放到指定位置,客户机在启动时根据菜单选择要启动的ISO文件即可。iVentoy 同时支持 x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI 和 ARM64 UEFI 模式。iVentoy 支持 110 多种常见类型的操作系统 (Windows/WinPE/Linux/VMware)(列表)。

iVentoy 特点

  • 软件使用非常简单 (使用说明)
  • 软件跨平台,支持运行在 Windows 和 Linux 系统中。
  • 软件专门针对PXE场景优化设计,功能灵活。
  • 支持ISO文件直接启动,无需提取内部文件。
其他特点
  • 保留原始ISO文件的启动菜单风格。

  • 启动菜单和文件目录结构一一对应。

  • 同时支持 Legacy BIOS 以及 IA32/X86_64/ARM64 的 UEFI 模式。

  • 支持 110 多种常见的操作系统 (Windows/WinPE/Linux/VMware)。

  • 支持整体及单个ISO文件的启动密码保护。

  • 支持多台设备同时安装不同操作系统。

  • 支持和第三方 DHCP Server 配合工作。说明

  • 支持通过 MAC 地址进行设备过滤。

  • 支持查询 MAC 地址过滤状态。

  • 支持 MAC 地址归属查询。

  • 支持客户端设备信息查询。(厂商名、产品名、序列号等)

  • 提供 HTTP 直接获取 ISO 内部文件的功能。说明

  • 支持启动文件注入功能。 说明

  • 支持注入并自动执行脚本的功能。 说明

  • 支持 Windows 系统的自动安装部署 说明

  • 支持 Linux 系统的自动安装部署 说明

  • Windows/Linux 自动安装脚本中支持变量扩展 说明

  • 自动解决Linux安装过程中缺少网卡驱动的问题。

iVentoy启动截图

在日常工作中,通过改变文件夹的颜色为某个特定颜色可以使其醒目,因此一些重要的或有特定用途的文件夹可以采用此方案。在Gnome3 上我们有一个 Nautilus 的插件folder-color-nautilus来实现,但是它并没有被Archlinux官方收录到pacman仓库,因此大家需要在aur中安装。

  • ArchLinux中安装插件

    for nautilus
    1
    paru -S --noconfirm folder-color-nautilus

  • 其他文件管理器nemocaja

    1
    2
    paru -S --noconfirm folder-color-nemo
    paru -S --noconfirm folder-color-caja

安装完成后,你可以进入文件管理器,右键单击文件夹或文件。你会在上下文菜单中看到 Folder Color 的选项。你将在此处看到颜色和标志选项。

右键菜单

你还可以通过在菜单通过选择“默认”恢复原始文件夹颜色

Shieldsio是一个提供简洁、一致和易读的徽章服务,可以轻松地包含在GitHub的readmes或其他网页中。该服务支持数十种持续集成服务、软件包注册表、分发、应用商店、社交网络、代码覆盖服务和代码分析服务。它被一些世界上最流行的开源项目使用。

根据提示,在左侧选择相关服务, 后根据实例填写右侧的信息,再按右下角Execute生成相应的链接,比如我的博客需要Markdown,则生成Markdown链接后贴到博客中即可。比如我开发的项目有:

Static Badge Static Badge Static Badge Static Badge
Static Badge Static Badge Static Badge Static Badge

为了防止在 Linux 系统中意外删除一些重要文件或目录,除了必要的备份之外,还有一个好方法,就是使用chattr命令。

chattr(Change Attribute)命令

在类 Unix 等发行版中,该命令能够有效防止文件和目录被意外的删除或修改。file 文件在 Linux 中被描述为一个数据结构,chattr 命令在大多数现代 Linux 操作系统中是可用的,可以修改file属性,一旦定义文件的隐藏属性,那么该文件的拥有者和 root 用户也无权操作该文件,只能解除文件的隐藏属性。

命令语法

chattr [operator] [switch] [file]

operator 具有如下操作符:

  • 操作符 +,追加指定属性到文件已存在属性中
  • 操作符-, 删除指定属性
  • 操作符=,直接设置文件属性为指定属性

switch 常用属性指令如下

1
2
3
4
5
6
7
8
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。

其它参数

  • -R:递归处理,将指令目录下的所有文件及子目录一并处理;
  • -v<版本编号>:设置文件或目录版本;
  • -V:显示指令执行过程

设置文件不能被改名,移动删除,增删数据

1
2
3
4
5
6
lsattr rumenz.txt 
---------------- rumenz.txt

chattr +i rumenz.txt
lsattr rumenz.txt
----i----------- rumenz.txt

尝试修改文件

1
2
echo "rumenz.com" rumenz.txt
-bash: rumenz.txt: Permission denied

提示没有权限

删除特殊i权限

1
chattr -i rumenz.txt

设置目录不能建立,移动和删除文件

1
2
3
4
5
6
7
8
9
10
mkdir rumenz && touch rumenz/1.txt
tree
.
└── rumenz
└── 1.txt
lsattr rumenz/
---------------- rumenz/1.txt
chattr +i -R rumenz/
lsattr rumenz/
----i----------- rumenz/1.txt

rumenz目录下创建目录

1
2
mkdir rumenz/one
mkdir: cannot create directory ‘rumenz/one’: Permission denied

提示权限不足

rumenz/1.txt文件中添加数据

1
2
echo "rumenz.com" rumenz/1.txt 
-bash: rumenz/1.txt: Permission denied

删除特殊i权限

1
chattr -i -R rumenz

设置文件只能添加数据,不能修改,删除,移动该文件

1
2
3
4
5
lsattr rumenz.txt
---------------- rumenz.txt
chattr +a rumenz.txt
lsattr rumenz.txt
-----a---------- rumenz.txt

修改rumenz.txt文件内容

1
2
3
echo "rumenz.com" rumenz.txt
-bash: rumenz.txt: Operation not permitted
echo "rumenz.com" >rumenz.txt

修改覆盖rumenz.txt文件内容不行,向后追加可以。

修改文件名

1
2
mv rumenz.txt one.txt
mv: cannot move ‘rumenz.txt’ to ‘one.txt’: Operation not permitted

提示权限不足

设置rumenz目录下只能添加目录,文件,但是不能对里面的文件夹,文件修改,移动,删除。

1
2
3
chattr +a -R rumenz
lsattr rumenz/
-----a---------- rumenz/1.txt

rumenz目录下创建one

1
mkdir rumenz/one

rumenz/one目录重命名

1
2
mv rumenz/one rumenz/tow
mv: cannot move ‘rumenz/one’ to ‘rumenz/tow’: Operation not permitted

rumenz目录下创建文件

1
2
3
touch rumenz/3.txt
ls rumenz/
1.txt 3.txt one

不能删除rumenz/3.txt文件

1
2
rm -rf rumenz/3.txt 
rm: cannot remove ‘rumenz/3.txt’: Operation not permitted

不能被删除

可以修改rumenz/3.txt文件内容

1
2
3
echo "rumenz.com" rumenz/3.txt
cat rumenz/3.txt
rumenz.com

增强版xugit(V5.2)发布

  • 2024-05-09 16:37 完成增强版xugit.sh, 安装后命令仍然为ugit. 后期如果没有重大bug, 尽量不再升级了,因为科研工作紧张。欢迎大家使用增强版xugit.sh, 欢迎反馈您的意见.

  • 2024年05月09日, 完成了增强版U盘同步程序xugit.sh. 写这支程序的动机是为了解决文件夹误删除,同时如果被改名时能够智能找回或重建,此版采用uudi来唯一识别主机上的HOME挂载硬盘和相应的U盘, 它不依赖于U盘和仓库的名称来识别设备,所以可以自动校准电脑和U盘上的仓库,所以我称之为增强版。同时在实现逻辑上比之前的版本也进步了一大截,所以无特别需求的话,您应当下载使用增强版xugit.sh, 安装后其命令仍然为ugit, 使用ugit -h查看帮助信息。

  • 此版,将同步网络的配置内容保存于U盘仓库,不受主机限制,所以配置一次即可走遍天下。同时,也取消了对本地~/.ugitmap的引用,专而将其建立在U盘端,这也可以避免受限于本地,所以更加合理。

  • 增强版还优化了命令,强调易用性,对于同步的和操作实现自动化,仅保留几项常用的操作,所以它更加实用。

  • 为了保留近二十多天的劳动成果,所以同时保存了三个版本的程序,也可以作为大家学习之用,但是未来本人将只维护xugi.sh,同时由于实现逻辑上的巨大差异,增强版xugit.sh直接升级至V5.0, 2024年05月09日版本号V5.2.

ugit V4.0 存在的问题

已经开发成功了ugit软件,基本实现U盘上建立GIT仓库,并且同步到不同电脑。其实现原理为:在U盘上建立仓库,然后在本地电脑写入本地目录U盘仓库的对应关系,然后实现同步。但是这种情况存在问题也是比较严重的,下面说明:

  • 本地仓库名称有可能被用户改变,这种情况下导致本地记录文件.ugitmap的一系列记录失效,因为这些路径不存在。

  • 最初对本地仓库命名时,使用U盘名称@UGIT的模式,如果用户使用了另一个同名的U盘, 尽管通过比对U盘的UUID可以识别出这不是之前的源仓库,但是在本地建立仓库时就会和之前的U盘名称@UGIT冲突。

  • 如果某用户误删除了.ugitmap文件,但是原来建立的仓库还存在,于是在执行同步的时候ugit就无法取得本地和源仓库的对应关系。

ugit V4.1 的改进计划

硬件设备的唯一识别编号为UUID, Linux 让的所有文件识别的唯一编号为 inode, 于是通过这两者建立一一对应关系,就不会存在ugit V4.0的问题。需要做的应当是将.ugitmap删除,同时根据硬盘UUID和U盘UUID取得一一对应关系,同时将系统中的inode自动和U盘仓库建立一一对应关系。实现流程为:

  1. 读取U盘信息,将所有插入电脑的U盘UUID路径存入数组变量待用。

  2. 新的U盘仓库为空时,在该U盘建立映射文件.ugitmap, 加入防删除权限。如果在U盘仓库中已经存在仓库,则使用ls命令,建立仓库路径存入数组变量待用。

    .ugitmap 中记录了克隆过U盘仓库的电脑硬盘UUID和目标文件夹的inode

  3. 读对主机的硬盘信息,如果其不在.ugitmap内,此硬盘没有克隆过U盘仓库, 执行克隆操作,同时将本地上的文件夹inode记录到U盘中的.ugitmap. 如果其在.ugitmap内,则使用findinode/home/$USER内查找路径,建立本地map, 执行同步操作。

  4. 剩下的工作交给ugit V4.0原始程序处理。

  5. 2024-05-08 12:22 暂时记录到此。

格式化一个磁盘, 操作系统就知道您要在磁盘上存放文件了,于是系统为您将建立一个文件指针的一个结构。这个结构存放在磁盘上的起始区中的。

先前的FAT16系统占用的空间相当小,但是它所能支持的最大空间也很小的。

从WIN98后,支持的FAT32系统支持大于4G的空间。为什么会支持这样大么?就是因为它占用了更大的磁盘空间来支持文件的存储表。它是按照磁盘的空间来决定的。

我的磁盘一般是用 NTFS 系统的。因为它的安全性高一些。如果您要在局域网中存放相关的安全信息的话,那都是。而这些根目录的总体信息等等都存放在这里的。下面列出一组数据:

U 盘容量 空白占用
105G 93M
148G 93.8M
223G 96.7M

git mergegit rebase的区别, 如图

merge和rebase的区别

一个事情很容易判断,使用merge会得到一个复杂的路线图,但是rebase会生成一条清晰的发展路线,所以还是建议使用rebase.