初果实验室

  • 使用 vimdiff 对比文件

    https://www.bilibili.com/video/BV1bA411M7c4

    如果想知道两个文件是否相同,
    可以使用哈希函数来计算文件的摘要,
    md5sum a b
    然后对比结果就知道;

    如果想知道具体内容有哪些差异,
    可以使用GNU diff 命令来对比差异,
    diff a b -y

    如果想对比的同时进行修改编辑,
    可以结合Vim来使用,
    这个命令叫做 vimdiff

    比如说现在要对比修改文件 a 和 b,
    使用命令

    vimdiff a b

    或者

    vim -d a b

    就可以以对比的模式打开,
    有差异的行会以不同背景颜色高亮显示,

    前后几行会展开显示,
    方便了解上下文;

    如果想在各个文件窗口之间切换,
    使用 ctrl+w h/j/k/l 命令。

    使用 [ c 或者 ] c在差异之间跳转;

    如果修改差异行的时候,
    想使用另外一个文件对应的行的内容,
    可以将光标定位到差异点,

    使用 :diffget 或者 do 命令,

    如果想用当前行的内容,

    替换另外一个文件对应的行,
    可以使用 :diffput 或者 dp 命令,

    dp 是 diffput  的缩写,

    do  是 diffget 的缩写,

    (没有使用 dg 是因为已经有个dgg 命令)

    do/dp操作针对的不是单行,

    而是一个差异点的所有行。

     

    还可以一次diffget或者diffput多个差异点,

    例如:
    :10,20diffget
    diffget的范围就是10到20行,

    修改完毕后使用:wqa保存并退出。

    如果已经打开了一个文件,
    然后想对比另外一个文件,

    可以使用下面的命令,
    :diffsplit file  水平切割窗口
    :vert diffsp file  垂直切割窗口

     

    如果已经有一个使用 diff 生成的补丁文件

    例如:
    diff a b > patch

    可以使用

    :diffpatch patch

    这个命令生成一个临时文件,

    内容是将这个补丁应用到当前编辑的文件中。

     

    vim 还可以同时对比多个文件,

    例如:
    vim -d a b c

    同时对比3个文件,
    但是这个时候就不能使用 do 和 dp 命令了,
    因为 vim 不知道 do 的来源文件和 dp 的目标文件。

  • 退出Vim编辑器的几种命令

    https://www.bilibili.com/video/BV18K4y1S7Rq/

     

    这是新手教程,

    针对初次使用 vim 的用户,

    介绍退出 vim 编辑器的几种命令。

    q/x/ZZ/ZQ/qa/cq/bd

  • vim 文本对象 text objects 操作介绍

    什么是vim文本对象

    一个单词,一个句子,一个段落,一对html标签,

    一对括号、引号里面的内容,

    都称作是文本对象,

    文本对象大概可以分为8种类型

    类型 缩写
    1.word w

    2.WORD W

    3.sentence s

    4.paragraph p

    5.tag t

    6.block b

    7.Block B

    8.symbol block “‘`([{<

    要对文本对象进行编辑操作,首先要选择这些对象,

    vim 使用 i 或 a 后面跟文本对象类型的缩写来选择文本对象

    这样就会有很多组合用来选择文本对象

    1.aw 2.iw 3.aW 4.iW 5.as 6.is 7.ap

    8.ip 9.at 10.it 11.ab 12.ib 13.aB 14.iB

    15.a] 16.a[ 17.i] 18.i[ 19.a) 20.a( 21.i)

    22.i( 23.a> 24.a< 25.i> 26.i< 27.a} 28.a{

    29.i} 30.i{ 31.a” 32.a’ 33.a` 34.i”

    35.i’ 36.i`

    i 和 a 的区别主要在于是否包含文本对象边界的空白字符

    在这些选择指令前面加上你要想的操作

    就能针对文本对象进行操作

    总结
    文本对象的操作其实很简单,
    没有什么难度,
    只要一次学会就很难忘记,
    使用的时候也会很自然地使用,
    是一项值得掌握的vim技巧。
    需要更加深入的学习
    可以使用 :h text-object 查看详细文档

    文本对象扩展插件
    https://github.com/wellle/targets.vim

  • TOTP算法

    ​TOTP 是 Time-based One Time Password 的缩写,可以翻译为基于时间的一次性密码,由于其算法过程简单,安全性高,实施成本低,在各种系统的身份认证中,经常用来辅助认证,这种认证方式通常被叫做两步验证 或2FA 或 MFA ,严格地讲,TOTP是MFA(多因子认证)的一种实现。

    在一些对安全性要求较高的网站,通常会提供2FA验证选项,登录时除了需要输入密码,还需要验证动态密码,这样即使密码泄露,还有一道防线保障账户安全。比如阿里云,腾讯云均支持开启MFA验证。

    动态密码的生成,需要双方基于相同的授时系统,系统生成的密钥,双方都需要保存,密码算法是公开的,验证时不需要传递密钥,只需要传递密码。

    开启两步验证可以使用AuthyGoogle AuthenticatorMicrosoft Authenticator 等软件,密钥需要妥善保存,密码变化默认频率是30秒,这个步长参数可以根据业务特性修改,由于双方时间往往会有些许差异,所以密码产生通常有一个倒计时,如果密码发送前已经发生变化,可能出现验证失败,服务端考虑到时延,也会有一定的容错机制。

    如果使用Linux系统,也有很多现成类库可供使用,例如开源项目pyotp

    https://github.com/pyauth/pyotp

    执行 pip3 install pyotp 后,使用下面的代码就可以生成密码。

    import pyotp
    print(pyotp.TOTP('密钥').now())

    TOTP算法文档收录在rfc6238

    https://tools.ietf.org/html/rfc6238

  • 使用vim tab方式编辑文件

    https://www.bilibili.com/video/BV1mf4y1r7yE

    使用vim编辑多个文件的时候,
    可以使用参数o,
    将屏幕以水平方式切割为多个窗口,
    也可以使用大写O,
    以垂直方式切割屏幕为多个窗口,
    这样的优点是,

    编辑一个文件的同时可以参考其他文件,
    缺点是视窗界面偏小,

    如果想同时编辑多个文件,
    但是没有同屏显示的需求,
    可以使用vim 的 tab pages功能,
    比如说我同时编辑10个文件,
    vim -p $(seq 1 10)
    这样每个文件会以标签页的方式打开,
    每个标签占满整个视窗范围,
    相较于切割屏幕为多个窗口的方式,
    可视范围更大一些。

    标签页的切换

    下一个/N个标签
    tabnext/tabn/tabn N/gt/N gt

    上一个/N个标签
    tabprev/tabp/tabp N/gT/N gT

    第一个标签
    tabfirst/tabf

    最后一个标签
    tablast/tabl

    移动标签
    tabmove/tabm 1

    以tab标签方式打开 FILE
    tabedit FILE / tabe FILE / tab drop FILE

    关闭当前标签
    tabclose/tabc

    关闭其他所有标签,只保留当前标签

    tabonly/tabo

     

    使用 vim a b c d 打开的文件,

    可以使用 :tab ball 转换为tab编辑方式

     

    使用vim -o a b c d 打开的文件
    可以使用 <ctrl>+w+T 转换为tab编辑方式

     

    以tab 方式打开当前文件的一个镜像
    tab split

    打开文件时避免相同文件在多个tab中打开

    tab drop FILE

     

    打开光标所在位置的字符对应的文件使用gf
    加上前缀 ctrl+w 即

    ctrl + w + gf

    就会以tab方式打开光标位置下的单词对应的文件

     

  • Linux系统命令行快捷键

    https://www.bilibili.com/video/BV1k541177Sn/

    Linux命令行操作时使用快捷键,

    手不用离开键盘基本位F/J,

    比使用方向键/退格键等更加快捷,

    推荐日常开发时,映射 CapsLock 键为 Ctrl,

    这样按 Ctrl 键的时候会很方便,

    修改工具: Windows 可以用 PowerToys 或者 SharpKeys

    MacOS 自带映射设置

    工欲善其事必先利其器,一次学习,受用一生。

    导航快捷键
    ctrl +a 快速移动到命令行行首
    ctrl +e 快速移动到命令行行尾
    ctrl +f 将光标向右移动一个字符
    ctrl +b 将光标向左移动一个字符
    ctrl +xx 将光标在当前位置和行首来回切换
    alt +b 将光标向左移动一个单词
    alt +f 将光标向右移动一个单词

    编辑快捷键
    ctrl +l 清除屏幕内容
    ctrl +d 删除当前光标所在位置的字符
    ctrl +h 删除当前光标左侧的一个字符,相当于退格键
    alt +d 向右删除一个单词
    ctrl +w 向左删除一个单词
    ctrl +k 删除当前位置到行尾的所有内容
    ctrl +u 删除当前位置到行首的所有内容
    alt +t 将光标当前所处位置的单词和左侧的单词交换
    ctrl +t 将光标当前所处位置的字符和左侧的字符交换
    esc +t 将光标当前所处位置的字符和左侧的字符交换
    ctrl +y 粘贴之前剪切的字符
    alt +u 将光标右侧的一个单词全部变换为大写
    alt +l 将光标右侧的一个单词全部变换为小写
    alt +c 以光标所处位置开始,将右侧的一个单词变换为首字母大写
    alt +r 撤销修改
    ctrl +j 新的一行
    ctrl +m 回车
    ctrl +[ Escape

    历史命令快捷键
    ctrl +r 历史命令检索,需要输入检索关键词
    ctrl +s 历史命令检索,需要输入检索关键词,搜索顺序与 ctrl + r 相反
    ctrl +o 执行ctrl + r /ctrl + s 搜索到的命令
    ctrl +g 退出历史命令检索模式
    ctrl +p 倒序调用历史命令
    ctrl +n 正序调用历史命令
    !! 重复上次执行的命令
    !git 执行上次以 git 开始的命令
    !$ 上次执行的命令的最后一个参数
    !* 上次执行的命令的所有参数
    alt + . 上次执行的命令的最后一个参数,和 !$ 作用相同
    ^abc^def 将上次执行的命令中的abc替换为def

    进程管理
    ctrl+c 终止当前运行的命令
    ctrl + z 将当前运行的任务转移到后台,
    可以使用 jobs 查看,
    使用 fg % 1 调至前台。

  • 使用vim命令global删除多个空行

    https://www.bilibili.com/video/BV18U4y1s73n/

    当使用 vim 编辑文档的时候

    如果想一次删除多个空行

    可以使用 global 命令来达成

    global 命令的格式如下:

    :[range]g[lobal]/{pattern}/[cmd]

    [range] 设定要修改的范围,可以省略,默认是整个文档,

    可以使用 % 代表整个文档,使用1,10 代表仅修改第1到10行

    g  是 global 缩写,可以写为 global 或者 g

    {pattern} 匹配行的正则表达式,例如要匹配空白行,那么就是 /^$/

    [cmd] 代表匹配之后要执行的操作,默认是 print 即输出操作,

    如果是删除,使用 delele

    更为详细的功能,可以阅读vim手册,

    在vim中输入 :h global 即可

  • 免密码登录Linux服务器

    https://www.bilibili.com/video/BV1BA411u7DJ/

    Linux用户密码太简单不安全,

    太复杂不好记忆,

    但是安全性比便利性更重要,

    所以使用密钥登录Linux比较常见,

    如今非对称公钥私钥授权最为流行,

    以OpenSSH为例,具体的操作步骤:

    1.生成公钥私钥对

    ssh-keygen -t ed25519  -b 2048 -C "user@mail.com"

    参数说明:
    -t 可选算法  dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa

    -b  密钥长度,rsa建议密钥长度大于1024

    -C  助于区分多对密钥的标记

    2.将公钥发布到服务器

    ssh-copy-id -i id_ed25519.pub  user@serverip

    此时需要输入一次密码,

    发布成功后,用户的公钥存储于目标服务器文件~/.ssh/authorized_keys

    也可以手动复制 id_ed25519.pub 文件的内容追加到~/.ssh/authorized_keys

    之后使用user登录server便不再需要输入密码

    此时可以禁止密码方式登录:

    修改 /etc/ssh/sshd_config 参数 PasswordAuthentication 为 no

    然后执行 systemctl restart ssh 重启ssh服务即可。

    https://www.bilibili.com/video/BV1BA411u7DJ/

     

  • Linux 命令 cd 的用法

    cd 是 Linux 操作系统最为基础的命令,它是 Change Directory 的缩写,意思是变更目录。

    切换目录

    cd /etc

    cd /tmp

    在 Linux 操作系统中,

    .    [一个点] 代表当前目录,

    ..     [两个点] 代表上级目录,

    切换到上级目录:cd ..

    切换到上两级目录  cd ../..

    切换到上次访问的目录 cd –

    家目录

    当用户首次登陆系统后,所在的目录称为家目录,

    如果是 root 用户,家目录路径是 /root ,

    如果是 非root 用户,家目录路径是 /home/用户名/

    要切到家目录使用  cd ~ 命令

    或者直接输入 cd ,后面不加参数,也是切换到家目录。

    参数 P 的作用

    例如,当前目录是 /root ,此目录下面有一个链接文件 tmp 指向 /tmp ,

    cd  tmp  后的路径是  /root/tmp ,

    如果想切换到链接文件指向的目录,加上参数 -P 就可以了。

    cd -P tmp

    用 pwd 查看,切换后的路径是 /tmp

  • 查看Linux系统基本参数命令

    首次登陆Linux服务器,这些命令可以帮助了解系统概况。

    cat /etc/os-release

    查看操作系统类型,版本号,开发代号等信息。

    lscpu

    显示CPU的制造商、架构、数量、型号、主频以及 L1/L2/L3 缓存等信息。

    free -ht

    了解内存和交换区的大小和使用量。

    lsblk

    查看系统所有可用块设备的大小等属性。

    arch

    查看CPU架构

    curl ifconfig.me

    查看分配的公网IP地址。

    reboot

    重新启动系统。