1. vim简介
Linux里面的编辑工具:vi、vim、emacs、gedit
- vi是Linux里默认安装的文本编辑器
- vim是vi的升级版
- centos 7/8 最小的安装,默认是没安装vim的
yum install/remove vim -y 安装卸载软件

编码问题
- wiidows:记事本识别vim的文本的换行符号不友好,用sublime打开比较好
- Linux: vim编辑器可以打开sublime和记事本编辑的文件内容,但是打开记事本的可能有乱码
原因: 记事本默认采用的编码(ANSI)和linux (Unicode、UTF-8)的不一样, 将记事本打开的文件另存为其他编码即可在linux里面打开不乱码
Unicode是万国码,utf8属于unicode的一个分支
python3默认的是utf-8
2. 模式切换

/root/.vimrc 这个配置文件,vim打开文件时会自动加载里面的配置
2.1 输入模式
| 操作键 | 功能 |
|---|---|
| i | 光标在哪里,就在哪里输入 |
| I | 光标跳到行首并进行输入 |
| o | 在光标的下一行进行输入 |
| O | 在光标的上一行进行输入 |
| a | 在光标的后退一格进行输入 |
| A | 光标退到行尾并进行输入 |
| s | 删除光标所在字符进行输入 |
| S | 删除光标所在行并进行输入 |
2.2 末行模式
| 命令 | 功能 |
|---|---|
| :w! | 放弃保存 |
| :w aa.txt | 另存为,接绝对路径 |
| :w | 只保存不退出 |
| :set number = set nu | 行号设置 |
| :set nonumber =set nonu | 取消行号设置 |
| :help :w | 查看帮助 |
| : q! | 强制退出不保存 |
| :wq = :x | 保存并退出 |
| :wq!= :x! | 强制退出并保存(只用root用户可以) |
| :q | 只在没有修改的时候起作用 |
| :r mobile_phone.txt 或 :r /etc/hosts | 导入(读 read)文件里的内容 |
| :e /lianxi/tang.txt | 退出当前文件,去打开另外一个文件tang.txt |
| :set ts=4 | 设置一个tab键占4个空格,默认一个tab键占8个 |
| :set paste | 设置粘贴的时候,按照原来的格式,保障格式不乱 |
| :set cursorline | 显示光标所在行 line 行 cursor 光标 |
| :set cursorcolumn | 显示光标所在列 column 列 |
末行模式里跳转
| 命令 | 功能 |
|---|---|
| :n | 第n行 |
| : $ | 最后一行 |
文件内容替换
| 命令 | 功能 |
|---|---|
| : s/old/new/ | 将当前行中查找的第一个字符"old"替换为new |
| : s/old/new/g | 将当前行中查找的所有字符串"old"替换为new |
| :#,# s/old/new/g | 在行号“#,#”范围内的所有字符串"old"替换为new |
| : %s/old/new/g | 在整个文件范围内替换所有的"old"为new |
| : s /old/new/gc | 对每个动作提示确认 |
| :%s/feng//g | 将所有的feng删除 |
2.3 命令模式
| 命令 | 功能 |
|---|---|
| ZZ | 命令模式中 保存并退出 |
| x | 删除单个字符(相当于剪切) |
| dd | 删除当前光标所在行 |
| #dd | 删除从光标处开始的#行内容 |
| d^ | 删除当前光标之前到行首的所有字符 |
| d$ | 删除当前光标之后到行尾的所有字符 |
| dw | 删除一个单词(word),以空格、冒号等符号 |
| yy | 复制当前行整行的内容到剪贴板 |
| #yy | 复制从光标处开始的#行内容 |
| p | 将缓冲区中的内容粘贴到光标位置处之后 |
| P | 粘贴到光标位置处之前 |
| u | 撤销 |
命令模式里跳转
| 项目 | Value |
|---|---|
| nG | 跳到第n行 |
| G | 跳到最后一行 |
查找字符串
| 命令 | 功能 |
|---|---|
| /word | 从上而下在文件中查找字符串“word” |
| ?word | 从下而上在文件中查找字符串“word” |
| n | 定位下一个匹配的被查找字符串 |
| N | 定位上一个匹配的被查找字符串 |
| u | 撤销 |
| ctrl+r | 恢复 |
2.4 替换模式
R replace 替换
直接移动光标到某个位置,直接输入内容,就会替换
撤销: 退格键
2.5 可视模式
主要用来选择复制区块文本
在命令模式下,使用v或V键可以进入可视模块
可视或者可视块模式可以复制或者删除一部分单词,选中一部分单词,然后进行操作。
| 命令 | 模式 | 操作 |
|---|---|---|
| 小v | 可视模式 | 从当前位置到光标最后停止的位置之间的部分 |
| 大V | 可视行模式 | 从当前位置到光标最后停止位置 所在行 |
| ctrl+v | 可视块模式 | 从当前位置到光标最后停止位置 选择块(矩形) |
按y复制 x删除
按p粘贴
另起一行,按o,再按esc,再p
练习:
编写一个程序实现随机产生字符串写到一个文件里,一行里面必须有50个字符,产生100万行的一个文本文件
Linux写法:
[root@localhost lianxi]# cat bigfile.sh
#!/bin/bash
#随机产生字符
for i in {1..1000000}
do
mychar=$(mkpasswd -l 50)
echo $i $mychar>>sc_bigfile.txt
done
python写法:
[root@localhost lianxi]# cat bigfile.py
#!/usr/bin/python3
import string
import random
#产生10个小写字母
lowercase=random.sample(string.ascii_lowercase,k=10)
#将10个字母拼接起来
sc_lc="".join(lowercase)
with open("sc_bigfile2.txt","a+") as f: #打开文件,以追加的方式向里面输入内容
f.write(f"{sc_lc}\n")

3. 随机产生字符串
md5sum
根据一段文字或一个文件产生一个固定长度的字符串
[root@sc lianxi]# md5sum a.txt
1c9f470f675a5a21f7583e1a33f88575 a.txt
[root@sc lianxi]# echo 123|md5sum
ba1f2511fc30423bdbb183fe33f3dd0f -
[root@sc lianxi]# echo 123123456|md5sum
eafa8cafcb3f240cc2d23e0dbf638adf -
hash函数
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
这简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
mkpasswd
l–长度 d–数字 c–字母 s–符号

[root@localhost ~]# mkpasswd -l 50 指定密码长度
seczrgrpSegmqxt5f&cgfxhxupjtxddyiotW8smsdrmdnabhuu
[root@localhost lianxi]# mkpasswd -l 50 -d 10 -c 10 -s 10
7gx0s)sHx2.*mb9tCgp|bybju5ex)!j8;e2u?di93a2u%tv#qn
string库(python里的库)
>>> string.printable # 打印出所有能作为密码的字符
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> string.ascii_lowercase # 小写
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase #大写
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits #数字
'0123456789'
>>> string.punctuation #特殊字符
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
import random
import string
>>> random.sample(string.ascii_lowercase,k=10) #随机产生10个小写字母数组
['z', 's', 'i', 'r', 'g', 'c', 'f', 'a', 'k', 'e']
>>> random.sample(string.ascii_uppercase,k=10) #随机产生10个字符数组
['W', 'M', 'G', 'S', 'L', 'H', 'I', 'U', 'Q', 'K']
>>> random.sample(string.digits,k=10) #随机产生10个数字
['0', '3', '4', '7', '8', '1', '9', '5', '2', '6']
>>> random.sample(string.punctuation,k=10) #随机产生10个特殊字符
['`', '%', '/', '<', '-', '(', '?', "'", '"', ']']
>>> aa = random.sample(string.punctuation,k=10)
>>> aa.
aa.append( aa.copy( aa.extend( aa.insert( aa.remove( aa.sort(
aa.clear( aa.count( aa.index( aa.pop( aa.reverse(
>>> "".join(aa) #join方法拼凑
"<>:'.^_+($"
>>>
4、tmux工具使用
Tmux使用初体验


