Linux基础part-7

server/2024/10/16 2:25:37/

1、文本处理工具【grep】

  1. 【grep】 是一个文本搜索工具,它可以根据用户指定的模式在文件中进行搜索,并打印出包含匹配模式的行。"Global Regular Expression Print" “全局正则表达式打印”。
  2. grep 命令的三个常用变体
    • 【grep】—支持基本的正则表达式
    • 【egrep】——支持扩展的正则表达式(相当于使用了 -E 选项)
    • 【fgrep】——不支持正则表达式,而是进行固定字符串的匹配
  1. 格式
    • grep [选项] 模式 文件
  1. 选项
    • 【--color】在匹配到的文本上指定颜色(仅在某些系统上支持,例如 CentOS 6)。
    • 【-v】反向匹配,显示不能被模式匹配到的行。
    • 【-o】仅匹配被模式匹配到的字符串,而非整行。
    • 【-q】静默模式,不输出任何结果,仅用于检查模式是否存在。
    • 【-i】不区分大小写,即忽略大小写进行匹配。
    • 【-n】过滤时加上在文本中对应的行号。
    • 【-f】从指定的文件中读取模式,用于在多个文件中搜索相同的模式。
    • 【-r/-R】递归搜索目录下的文件,但不处理软链接。
    • 【-E】支持扩展正则表达式(相当于使用了 egrep)。
  1. 示例
#1、在文件 example.txt 中搜索包含单词 "apple" 的所有行,并显示行号:grep -n "apple" example.txt
#2、在多个文件中搜索字符串 "error",忽略大小写,并显示匹配的行:grep -i "error" file1.txt file2.txt
#3、在当前目录及其子目录中递归搜索文件,并输出匹配模式的行:grep -r "pattern" .
#4、从文件 patterns.txt 中读取多个模式,并在文件 data.txt 中搜索这些模式:grep -f patterns.txt data.txt
#5、搜索包含字母 "a" 但不包含 "b" 的行:grep "a" file.txt | grep -v "b"
#6、静默模式示例,检查是否存在某个模式:grep -q "pattern" file.txt && echo "Pattern found" || echo "Pattern not found"

2、正则表达式

  1. 正则表达式(Regular Expression)是一种用于描述字符串模式的工具,常用于搜索、替换和匹配文本。
    • 分为基本正则表达式(BRE)和扩展正则表达式(ERE)两种形式
    • PCRE(Perl Compatible Regular Expression)也是一种广泛使用的正则表达式标准。
  1. 基本正则表达式(BRE)
    • 元字符是正则表达式中具有特殊含义的字符,它们不表示字符本身的意义,而是用于描述文本模式的特殊功能性(出现需要用引号引起来,单引号也可以解释元字符,但不可变量替换)
    • BRE是一种较早期的正则表达式语法,主要用于传统的Unix工具(如grepsedawk等)。BRE中的元字符和语法较为简单,包括以下一些基本元字符
      • 【.】匹配任意单个字符,除了换行符 \n 之外的任何字符。
      • 【[]】(字符集)匹配字符集中的任意一个字符。
        • [0-9],[[:digit:]]
        • [a-z],[[:lower:]] 匹配任意单个小写字母(注意:区分大小写)
        • [A-Z],[[:upper:]] 匹配任意单个大写字母(注意:区分大小写)
        • 所有的字母:[[:alpha:]] [a-Z]
        • 字母+数字:[[:alnum:]] [0-Z]
        • 空格:[[:space:]] 简化写法[ ]
        • 标点符号:[[:punct:]]
        • [^]: 指定范围外的任意单个字符
      • 【*】匹配前一个字符的零次或多次。
      • 【^】锚定行首,用于匹配行首的文本。
      • 【$】锚定行尾,用于匹配行尾的文本。
      • 【\】(反斜杠)转义字符,用于取消元字符的特殊含义,或表示特殊字符。
    • 示例
grep '^a' file.txt					#匹配以字母 a 开头的单词
grep '[0-9]$' file.txt			#匹配以数字结尾的行
grep '[a-z]' file.txt				#匹配包含至少一个小写字母的行
grep '^[A-Z]' file.txt			#匹配以大写字母开头的单词
grep '.' file.txt						#匹配包含任意字符 . 的行
grep 't$' file.txt					#匹配以 t 结尾的单词
grep 'abc\|def' file.txt		#匹配包含 abc 或 def 的行
grep '^abc.*def$' file.txt	#匹配以 abc 开头,以 def 结尾的行
  1. 扩展正则表达式(ERE)
    1. (ERE)是一种在文本搜索和处理中常用的强大工具,它提供了比基本正则表达式更丰富和更灵活的功能
    2. 基本元字符
      • 【+】匹配前一个字符的一次或多次。
      • 【?】匹配前一个字符的零次或一次。
      • 【{m,n}】匹配前一个字符的至少m次,至多n次。
      • 【|】 逻辑或。
      • 【()】分组。
    1. 特性
      • 支持重复次数缩写: 使用 【+】表示一个或多个重复,【?】 表示零个或一个重复,【{m,n} 】表示至少 m 次、至多 n 次的重复
      • 支持分组和反向引用: 使用圆括号 【( )】 将字符分组,并使用 \1, \2 等来引用分组匹配到的内容。
      • 支持更多的元字符: 如 【\b】 表示单词边界,【\w】 表示字母数字字符等
      • 支持更多的特殊字符:如 【|】 表示逻辑或,【()】 表示优先级等
      • 支持更多的定位符: 如 【\b】 表示单词边界,【^】 表示行首,【$】 表示行尾
    1. 示例
grep 'ba+na' file.txt   # 匹配 "bana", "baana", "baaana", 等等
grep 'go?gle' file.txt  # 匹配 "gogle", "google"
grep 'go{2,4}gle' file.txt  # 匹配 "google", "gooogle", "goooogle"grep '\(ba\)\{2\}' file.txt   # 查找其中连续出现两次的字符串 ba
grep '\(ba\)\(na\)\1\2' file.txt  # 匹配 "banana",不匹配 "bana", "bananana"等grep '\bword\b' file.txt   # 匹配 "word",不匹配 "words", "sword"等
grep '\b\w+\b' file.txt    # 匹配任意单词grep 'apple|banana' file.txt   # 匹配包含 "apple" 或 "banana" 的行
grep 'a(b|c)d' file.txt        # 匹配 "abd" 或 "acd"grep '^start' file.txt   # 匹配以 "start" 开头的行
grep 'end$' file.txt     # 匹配以 "end" 结尾的行
  1. 次数匹配
    1. 用来指定匹配其前面的字符的次数
      • 【*】零次或多次。【.】任意单个字符。【\?】零次或一次。【+】至少出现一次。
      • 【\{m\}】出现 m 次。【\{m,n\}】至少出现 m 次,至多出现 n 次。
      • 【\{m,\}】至少出现 m 次。【\{,n\}】至多出现 n 次
    1. 做变量换算需要使用“”
      • 要使用变量进行匹配次数的灵活控制,通常需要使用双引号 " " 或单引号 ' ' 将正则表达式包裹起来,以确保变量能够正确地被解释和替换。
      • 这样做可以避免因为特殊字符或空格而导致的解析错误。
      • 例如,在 Bash 脚本中,如果想要使用一个变量来表示匹配次数,可以这样写:
        • 双引号 【" "】 可以确保 【$m】 被正确地替换为其值,从而形成最终的正则表达式 【"ba{2}na"】
        • 如果使用单引号 【' '】,则变量【$m】将会被原样输出,而不会被替换为值。
    1. 脚本练习题:要求:从etc目录下随机找到两个文本文件,筛选出包含字母和数字的文件
#!/bin/bash
# 1. 获取 /etc 目录下所有文件列表file_list=$(ls /etc)
# 2. 从文件列表中随机选择两个文件random_files=($(shuf -n 2 -e $file_list))
# 3. 对每个选定的文件,检查其内容是否包含字母和数字
for file in "${random_files[@]}"; do# 检查文件是否存在并且是普通文件if [[ -f "/etc/$file" ]]; then# 使用 grep 命令查找文件内容是否包含字母和数字if grep -q '[a-zA-Z0-9]' "/etc/$file"; then# 4. 如果包含字母和数字,则将其打印出来echo "文件 /etc/$file 包含字母和数字。"elseecho "文件 /etc/$file 不包含字母和数字。"fielseecho "文件 /etc/$file 不存在或不是普通文件。"fi
done
  1. 位置锚定:指定字符或模式在文本中的特定位置出现
    1. 【^】行首。【$】行尾。【^$】空白行
    2. 注意:正则表达式中的【|】代表逻辑运算
  1. 单词锚定 :用于匹配整个单词,而不是单词的一部分。需要精确匹配单词时
    1. 词首锚定
      • 用法:【\<】 或 【\b】 用于指定单词的起始位置。
    1. 词尾锚定
      • 用法:【\>】 或 【\b】 用于指定单词的结束位置。
    1. 精确匹配单词
      • 用法:【\<单词\>】 用于匹配整个单词。
    1. 分组
      • 用法:【\(字符\)】将一个或多个字符捆绑在一起,作为一个整体处理。
      • 示例:\(sb\)\+.* 匹配至少一个或多个连续出现的 "sb",并且后面跟着任意字符。
    1. 后向引用
      • 用法:用于在正则表达式中引用捕获组中匹配的内容。
      • 示例:\1 表示对第一个捕获组的后向引用,\2 表示对第二个捕获组的后向引用,以此类推。
      • 示例:\(baby\).*\1 匹配以 "baby" 开头的字符串,并且后面再次出现相同的字符串。
    1. 注意:Linux所有连续字母,没有用符号分割的,可以理解为单词

3、文本处理类的命令

1. 【wc】统计文件中的信息

    1. 用于统计文件中的字节数、字数、行数等信息。其名称来源于 "word count",最初用于计算文本文件中的单词数。
      • 可以方便地获取文件的各种统计信息,对于文本文件的处理和分析非常有用。
    1. 基本语法
      • wc [选项] [文件名]
    1. 常用选项
      • 【-c, --bytes】显示文件的字节数。
      • 【-m, --chars】显示文件的字符数。
      • 【-l, --lines】显示文件的行数。
      • 【-w, --words】显示文件的词数。
      • 【-L, --max-line-length】显示文件中最长行的长度。
    1. 示例
#1、统计文件的行数、词数和字节数:wc file.txt
#2、只统计文件的行数:wc -l file.txt
#2、只统计文件的字节数:wc -c file.txt
#3、统计多个文件的总行数、词数和字节数:wc file1.txt file2.txt
#4、使用通配符统计某个目录下所有文件的行数:wc -l /path/to/directory/*

2. 【tr】转换或删除字符

    1. 用于转换或删除文件中的字符。其名称来自于 "translate" 或 "transliterate",用于执行字符替换操作。
      • 对于处理文件中的字符转换和删除操作非常有用,尤其在文本处理和数据清洗方面经常被使用。
    1. 基本语法
      • tr [选项] SET1 [SET2]
    1. 常用选项
      • 【-d, --delete】删除输入中出现在 SET1 中的字符。
      • 【-s, --squeeze-repeats】将重复出现的字符压缩成单个字符。
      • 【-c, --complement】取补集,即替换除 SET1 中指定的字符以外的所有字符。
      • 【-t, --truncate-set1】仅使用 SET1 的前 N 个字符。
    1. 示例
#1、将文件中所有小写字母转换为大写字母:tr '[:lower:]' '[:upper:]' < file.txt
#2、删除文件中的所有空格:tr -d ' ' < file.txt
#3、将文件中的制表符替换为单个空格:tr '\t' ' ' < file.txt
#4、将文件中的所有重复字符压缩成单个字符:tr -s 'a-z' < file.txt
#5、将文件中的所有数字字符替换为 x:tr '0-9' 'x' < file.txt
#6、将文件中所有非数字字符替换为 ?:tr -c '0-9' '?' < file.txt

3. 【cut】提取文本列,将结果写入到标准输出

    1. 用于从文本文件或标准输入中提取文本列,并将结果写入到标准输出
      • 通常用于处理以制表符或其他特定字符分隔的文本数据,可以方便地提取所需的字段或字符。
    1. 基本语法
      • cut [选项] [文件]
    1. 常用选项
      • 【-f, --fields=LIST】指定要提取的字段列表,列表以逗号分隔。
      • 【-d, --delimiter=DELIM】指定字段分隔符,默认为制表符。
      • 【-c, --characters=LIST】指定要提取的字符列表,列表以逗号分隔。
      • 【--complement】补集,提取除指定列外的所有列。
    1. 示例
#1、提取文件的第一列:cut -f1 file.txt
#2、提取文件的第二列和第四列:cut -f2,4 file.txt
#3、使用逗号作为字段分隔符,提取文件的第三列:cut -d',' -f3 file.csv
#4、提取文件的第1到5列:cut -f1-5 file.txt
#5、提取文件的第1列和第5列到最后一列:cut -f1,5- file.txt
#6、提取文件的第1个字符到第10个字符:cut -c1-10 file.txt
#7、提取文件的第1个字符和第10个字符:cut -c1,10 file.txt
#8、提取文件的除第3列外的所有列:cut --complement -f3 file.txt

4. 【sort】行排序

    1. 用于对文本文件中的行进行排序。它默认按照字典顺序对文本行进行排序,并将结果写入标准输出。
    2. 基本语法
      • sort [选项] [文件]
    1. 常用选项
      • 【-r, --reverse】逆序排序。
      • 【-n, --numeric-sort】按照数字值而不是按照字典顺序排序。
      • 【-k, --key=POS1[,POS2]】指定以某列为键进行排序。POS1POS2 是以 1 开始的列号。
      • 【-t, --field-separator=SEP】指定字段分隔符,默认为制表符。
      • 【-u, --unique】仅显示唯一行,去除重复行。
      • 【-f, --ignore-case】忽略大小写进行排序。
    1. 示例
#1、对文件中的文本行进行排序:sort file.txt
#2、对文件中的文本行进行逆序排序:sort -r file.txt
#3、按照第二列的数字值进行排序:sort -n -k2 file.txt
#4、指定逗号为字段分隔符,并按照第三列的字典顺序进行排序:sort -t',' -k3 file.csv
#5、仅显示唯一行(去除重复行):sort -u file.txt
#6、忽略大小写进行排序:sort -f file.txt

5. 【uniq】删除重复的行

    1. 用于从排序过的文本输入中删除重复的行,并将结果输出到标准输出。
    2. 基本语法
      • uniq [选项] [输入文件]
    1. 常用选项
      • 【-c, --count】在每行输出前添加该行在输入文件中出现的次数。
      • 【-d, --repeated】仅显示重复的行。
      • 【-i, --ignore-case】在比较行时忽略大小写。
      • 【-u, --unique】仅显示不重复的行。
      • 【-f N, --skip-fields=N】在比较行时,忽略前 N 个字段。
      • 【-s N, --skip-chars=N】在比较行时,忽略前 N 个字符。
    1. 示例
#1、去除重复行:uniq file.txt
#2、统计重复行的出现次数:uniq -c file.txt
#3、仅显示重复行:uniq -d file.txt
#4、仅显示不重复的行:uniq -u file.txt
#5、忽略大小写比较行:uniq -i file.txt
#6、在比较行时,忽略前两个字段:uniq -f2 file.txt
#7、在比较行时,忽略前五个字符:uniq -s5 file.txt

6. 【rev】反转字符顺序

    1. 用于反转文本输入中每行的字符顺序,并将结果输出到标准输出。
    2. 基本语法
      • rev [选项] [文件]
    1. 常用选项
      • 【-V, --version】显示版本信息并退出。
      • 【-h, --help】显示帮助信息并退出。
    1. 示例
#1、反转文件中每行的字符顺序:rev file.txt
#2、结合管道从另一个命令的输出中反转字符顺序:echo "hello world" | rev
#3、从文件中读取内容并反转字符顺序,然后将结果保存到新文件:rev input.txt > output.txt

7. 课间作业:

要求把系统内GID最大的5个用户名显示出来

#1、使用 cut 命令从 /etc/passwd 文件中提取用户名和用户组ID。
#2、使用 sort 命令按照用户组ID进行排序。
#3、使用 uniq 命令去除重复的用户组ID。
#4、使用 tail 命令获取最后 5 行,这些行应该包含系统内 GID 最大的 5 个用户。
#5、使用 cut 命令提取用户名。cut -d: -f1,4 /etc/passwd | sort -t: -nk2 | uniq | tail -n 5 | cut -d: -f1
    1. cut -d: -f1,4 /etc/passwd:从 /etc/passwd 文件中提取用户名和用户组ID,使用 : 作为字段分隔符。-f1,4 表示提取第一个和第四个字段,即用户名和用户组ID。
    2. sort -t: -nk2:对提取的结果进行排序。-t: 表示使用 : 作为字段分隔符,-nk2 表示按照第二个字段(用户组ID)进行数字排序。
    3. uniq:去除连续重复的行,即去除具有相同用户组ID的行。
    4. tail -n 5:获取最后 5 行,这些行应该包含系统内 GID 最大的 5 个用户。
    5. cut -d: -f1:从这 5 行中提取用户名,使用 : 作为字段分隔符,提取第一个字段。

4、管道操作

1. 管道(Pipeline)

    1. 连接两个或多个命令,其中一个命令的输出成为另一个命令的输入。
      • 这种机制使得可以将多个简单的命令组合在一起,以实现更复杂的功能。
      • 管道的符号是竖线符号 【|】
      • 优点在于它可以将简单的命令组合成复杂的操作,而无需使用临时文件来存储中间结果。
      • 管道连接的每个命令都会在内存中缓存其输出,因此在处理大量数据时可能会占用大量系统资源。
    1. 基本语法
      • command1 | command2 | command3 | ... | commandN
    1. 示例
      • cat data.txt | grep "keyword" | sort | uniq
        • cat data.txt 命令用于将 data.txt 文件的内容输出到标准输出。然后,grep "keyword" 命令用于筛选包含特定关键字的行。接着,sort 命令对筛选后的结果进行排序,最后,uniq 命令用于去除连续重复的行。
        • 每个命令都通过管道接收前一个命令的输出,并对其进行处理。
    1. 被管道连接的命令必须能够从其标准输入中读取数据,并将结果输出到标准输出。
      • cd ls find …… 不支持管道
    1. Linux——>程序=指令+数据,使用目的单一的小程序,组合小程序完成复杂的任务

2. 【tee】

    • (分叉)从标准输入读取数据,并将其复制到标准输出和一个或多个文件中。
      • 在需要同时查看输出并将其写入文件时使用
      • 可能希望将命令的输出保存到日志文件中,同时在终端上查看输出
    1. 基本语法
      • tee [OPTION]... [FILE]...
      • 注意:tee命令默认输出为覆盖输出
    1. 常见选项
      • 【-a, --append】将输出追加到文件而不是覆盖文件。
      • 【-i, --ignore-interrupts】忽略中断信号(例如 Ctrl+C),继续运行。
      • -p, --preserve】保留文件权限(默认情况下,tee 将文件的权限设置为默认值)
    1. 示例
#1、将命令的输出写入文件并显示在终端上:command | tee output.txt
#2、将命令的输出追加到现有文件中:command | tee -a output.txt
#3、将命令的输出写入多个文件:command | tee file1.txt file2.txt file3.txt

5、linux的压缩和归档

  1. 压缩和归档,用于将文件或目录进行压缩以节省存储空间,或者将多个文件或目录打包成一个单独的文件

1. Linux中文件的压缩

  1. 为什么要压缩文件:
    • 节约磁盘空间
    • 高效、安全,操作方便
    • 缺点:会额外消耗CPU资源
  1. 压缩和解压缩文件注意
    1. 不会保留源文件
    2. 默认有压缩级别(1-9 ),用于平衡压缩率和压缩速度。可以通过指定压缩级别来调整压缩效果,一般级别越高,压缩率越高,但同时也会消耗更多的 CPU 资源。
      • 1为最低压缩级别(压的最浅),9级别最高(压的最狠),如果不指定级别,默认压缩级别为(6)
    • 适用范围:
      • gzip、bzip2、xz 这三种方式不能对目录做压缩
      • tar 主要用于打包和压缩目录。
  1. Linux压缩工具
    1. compress/uncompress
      • 压缩工具/解压缩工具
      • 后缀名: .Z】
    1. gzip/gunzip=gzip -d
      • 压缩工具/解压缩工具
      • 后缀名: .gz】
    1. bzip2/bunzip2=bzip2 -d
      • 压缩工具/解压缩工具
      • 后缀名: .bz2】
    1. zip/unzip
      • 后缀名: .zip】
      • zip最小化安装没有
      • 命令格式:zip [-r] 压缩后的文件 被压缩的文件
      • unzip--->对应的解压缩工具(可以对文件和目录都压缩,此方式会保留源文件)
    1. xz/unxz=xz -d
      • 后缀名: 【.xz】
    • gzip 是最常用的压缩工具,具有较高的压缩率和相对较快的压缩速度。
    • 需要更高压缩率的情况,使用 bzip2xz
    • zip 用于创建和解压缩 ZIP 格式的压缩文件,适用于在不同操作系统之间进行文件传输。
    1. 示例
gzip example.txt				# 压缩文件
gunzip example.txt.gz		# 解压缩文件bzip2 example.txt				# 压缩文件
bunzip2 example.txt.bz2	# 解压缩文件zip example.zip example.txt		# 压缩文件
unzip example.zip							# 解压缩文件xz example.txt					# 压缩文件
unxz example.txt.xz			# 解压缩文件

2. Linux中的归档

  1. 归档:打包目录或者将多个离散文件归纳为一个普通文件。以便于传输、备份或存档。
    • 注意:归档同时可以实现压缩
  1. 【tar】创建、查看和提取归档文件
    1. 也被称为 tarball。它能够将多个文件或目录组合成一个单独的文件,以便于传输、备份或存档
    2. 基本语法
      • tar [选项] [归档文件] [文件或目录...]
    1. 常用选项
      • 【-c, --create】创建归档文件
      • 【-x, --extract, --get】提取归档文件内容
      • 【-t, --list】列出归档文件内容
      • 【-r, --append】向归档文件中追加文件
      • 【-u, --update】仅添加归档文件中新于归档中已存在文件的文件
      • 【-f, --file=ARCHIVE】指定归档文件的名称
      • 【-v, --verbose】显示详细的操作信息
      • 【-z, --gzip】使用 gzip 压缩/解压缩
      • 【-j, --bzip2】使用 bzip2 压缩/解压缩
      • 【-J】归档的同时,可以使用xz格式进行压缩或解压缩
      • 【-C, --directory=DIR】在指定目录中执行操作
      • 【-P, --absolute-names】使用绝对文件名(包括路径)
    1. 示例
#1、创建归档文件:tar -cvf archive.tar file1 file2 directory1
#2、查看归档文件内容:tar -tvf archive.tar
#3、提取归档文件内容:tar -xvf archive.tar
#4、向归档文件中追加文件:tar -rvf archive.tar file3
#5、压缩归档文件:tar -cvzf archive.tar.gz directory1
#6、解压归档文件:tar -xvzf archive.tar.gz

6、【find】用于在文件系统中搜索文件和目录

  1. 基本语法
    • find [搜索路径] [选项] [表达式]
    • find命令不支持管道,那我们可以使用xargs命令强行驱动使用管道
  1. 常用选项
    1. 查找条件:
      • 【-name pattern按照文件或目录名称进行查找,pattern 是一个 shell 通配符模式。
      • 【-iname】类似于 -name,但是不区分大小写。
      • 【-user username】按照文件所有者进行查找。
      • 【-group groupname】按照文件所属组进行查找。
      • 【-uid userID】按照用户 ID 进行查找。
      • 【-gid groupID】按照组 ID 进行查找。
      • 【-perm mode】按照文件权限进行查找,mode 是一个八进制数字,表示文件权限。
      • 【-type type】按照文件类型进行查找,type 可以是 f(文件)、d(目录)、l(符号链接)等。
      • 【-size】用于按文件大小查找文件
      • 【-atime】用于按文件访问时间查找文件
      • 【-mtime】用于按文件修改时间查找文件
      • 【-ctime】用于按文件状态改变时间查找文件
    1. 逻辑运算
      • 【-a】与逻辑运算,表示同时满足多个条件。
      • 【-o】或逻辑运算,表示满足任意一个条件。
      • 【-not】否定条件,表示查找不符合条件的文件。
    1. 处理动作
      • 【-print】将搜索到的文件名打印到标准输出。
      • 【-ls】类似于 ls -dils,显示详细信息。
      • 【-delete】删除搜索到的文件。
      • 【-fls file】将搜索到的文件列表保存到指定文件中,每行一个文件。
      • 【-ok COMMAND {} \;】类似于 -exec,但在执行之前会询问用户是否执行指定命令。
      • 【-exec COMMAND {} \;】对搜索到的文件执行指定的命令,{} 表示搜索到的文件名。
  1. 示例
#1、查找当前目录及其子目录下所有名称为 example.txt 的文件,并打印到标准输出find . -name example.txt -print
#2、查找目录下所有属于 root 用户的文件,并将结果保存到指定文件中:find /var/log -user root -fls log_files.txt
#3、查找 /tmp 目录下大于 1MB 的文件,并删除它们find /tmp -type f -size +1M -delete
#4、查找 /home 目录下所有属于 users 组的目录,并对每个目录执行 ls -l 命令:find /home -type d -group users -exec ls -l {} \;
#5、查找当前目录及其子目录下所有最近修改时间在 7 天以内的文件,并询问用户是否删除它们find . -type f -mtime -7 -ok rm {} \;
#6、查找当前目录及其子目录下所有具有写权限的文件,并打印到标准输出:

7、vim编辑器

  1. Vim(Vi IMproved)是Unix和类Unix系统下的一款文本编辑器,通常在终端中使用。它是从Vi发展而来的,具有更多的功能和改进。Vim具有高度可定制性、强大的编辑功能和丰富的插件生态,因此被广泛用于程序开发、系统管理和文本编辑等领域。
  2. vim命令的使用格式
    • vim [options] /path/to/file

1. 三种主要模式

    1. 命令模式(Normal Mode 或者编辑模式)
      • 这是默认的模式,在这个模式下,可以执行各种编辑操作和命令,例如移动光标、删除文本、复制粘贴等。
      • 在命令模式下,按下冒号(:)键可以切换到末行模式。
    1. 插入模式(Insert Mode 或者输入模式)
      • 在这个模式下,可以直接输入文本内容。按下键盘上的字母和符号会直接插入到文本中,而不是执行编辑命令。
      • 从命令模式进入插入模式的方式是按下 i、I、a、A、o 或者 O 键。
    1. 末行模式(Command-Line Mode 或者命令接口)
      • 这个模式用于执行一些高级的编辑命令和设置。比如保存文件、退出 Vim、执行搜索替换等操作。
      • 在命令模式下按下冒号(:)键,就会进入末行模式。

2. 模式切换

3. vi/vim 使用实例

    1. 使用 vi/vim 进入一般模式,使用 【vim】 来建立一个名为 runoob.txt 的文件
      • $ vim runoob.txt
    1. 按下 【i】 进入输入模式(也称为编辑模式),开始编辑文字
      • 在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!
      • 在编辑模式当中,可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
      • 这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以可以进行任何的编辑。
    1. 按下 【ESC】 按钮回到一般模式
      • 退出,按下 Esc 这个按钮即可!马上就会发现画面左下角的 – INSERT – 不见了!
    1. 在一般模式中按下 【:wq】 储存后离开 vi
    1. 这样就成功创建了一个 runoob.txt 的文件

4. 命令/编辑模式下_常用的几个命令

    1. 此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下【i】,并不会输入一个字符,【i】被当作了一个命令。
    2. 移动光标:
      • 使用【箭头键】或 【h】、【j】、【k】、【l】 键进行上下左右移动。
      • 使用 【w】 命令向前移动一个单词。
      • 使用 【b】 命令向后移动一个单词。
      • 使用 【0】 命令移动到当前行的行首。
      • 使用 【$】 命令移动到当前行的行尾。
      • 使用 【gg】 命令移动到文件的第一行。
      • 使用 【G】 命令移动到文件的最后一行。
      • 使用 【<行号>G】 命令移动到指定行号的行。
    1. 插入文本:
      • 按下 【i】 键进入插入模式,在当前光标位置插入文本。
      • 按下 【I】 键在当前行的行首进入插入模式。
      • 按下 【a】 键在当前光标后插入文本。
      • 按下 【A】 键在当前行的行尾插入文本。
      • 按下 【o】 键在当前行的下方插入新的一行,并进入插入模式。
      • 按下 【O】 键在当前行的上方插入新的一行,并进入插入模式。
    1. 删除和修改文本:
      • 按下 【x】 键删除光标处的字符。
      • 按下 【dd】 键删除当前行。
      • 按下 【dw】 键删除一个单词。
      • 使用 【p】 命令在光标后粘贴删除的内容。
      • 使用 【u】 命令撤销上一次操作。
      • 使用 【Ctrl + r】 命令恢复上一次被撤销的操作。
    1. 复制和粘贴文本:
      • 使用 【yy】 命令复制当前行。
      • 使用 【yw】 命令复制一个单词。
      • 使用 【y】 命令和移动光标命令一起使用来复制文本。
      • 使用 【p】 小p,命令在光标后粘贴复制的文本。
      • 使用 【P】 大p,命令在光标前粘贴复制的文本。
    1. 查找和替换:
      • 按下 【/】 键进入搜索模式,输入要搜索的字符串,按下 【Enter】 键查找。
      • 使用 【n】 命令继续向后查找匹配项。
      • 使用 【N】 命令向前查找匹配项。
      • 按下 【:】 键进入命令模式,输入 【s/old/new/g】 替换所有匹配的字符串。

5. 输入/插入模式下_常用的几个命令

    1. 在命令模式下按下【i】就进入了输入模式,使用 【Esc】 键可以返回到普通模式。
    2. 普通文本插入:
      • 直接键入要插入的文本即可。
    1. 插入特殊字符:
      • 按下 【Ctrl + v】 键,然后键入【特殊字符的 ASCII 码】。
    1. 换行插入:
      • 按下 【Enter】 键换行插入新文本。
    1. 删除文本:
      • 使用 【Backspace】 键删除前一个字符。
      • 使用 【Delete】 键删除后一个字符。
    1. 移动光标:
      • 使用【方向键】或 【h】、【j】、【k】、【l】 键移动光标。
    1. 撤销操作:
      • 按下 【Ctrl + z】 键撤销上一次的插入操作。
    1. 退出插入模式:
      • 按下 【Esc】 键退出插入模式,返回到普通模式。

6. 末行模式/命令行模式下_常用的几个命令

    1. 保存文件:
      • 输入 【:w】 并按下 【Enter】 键,保存当前文件。
    1. 退出 Vim:
      • 输入 【:q】 并按下 【Enter】 键,退出 Vim 编辑器。
      • 如果文件有未保存的修改,使用 【:q!】 可以强制退出而不保存。
    1. 保存并退出:
      • 输入 【:wq】 并按下 【Enter】 键,保存当前文件并退出 Vim。
    1. 搜索文本:
      • 输入 【/】,然后输入要搜索的文本,按下 【Enter】 键进行搜索。
      • 使用 【n】 键和 【N】 键分别在下一个和上一个匹配项之间进行导航。
    1. 替换文本:
      • 输入 【:%s/old_text/new_text/g】 并按下 【Enter】 键,将文件中所有的 【old_text】 替换为 【new_text】
    1. 移动光标:
      • 使用 【:n】 命令(其中 n 为行号)跳转到文件的第 n 行。
    1. 显示行号:
      • 输入 【:set number】 并按下 【Enter】 键,显示行号。
      • 输入 【:set nonumber】 并按下 【Enter】 键,隐藏行号。
    1. 撤销操作:
      • 输入 【:u】 并按下 【Enter】 键,撤销上一次的操作。
    1. 帮助文档:
      • 输入 【:help】 并按下 【Enter】 键,打开 Vim 的帮助文档。

7. 定制vim的工作特性

  1. 定制 Vim 的工作特性可以使编辑体验更加高效和舒适。通过编辑 .vimrc 文件,可以永久性地设置 Vim 的各种选项和行为。以下是一些常见的 Vim 定制选项:
    1. 显示行号:
      • 启用行号:【:set nu】
      • 禁用行号:【:set nonu】
    1. 忽略大小写:
      • 启用忽略大小写搜索:【:set ignorecase】
      • 禁用忽略大小写搜索:【:set noignorecase】
    1. 自动缩进:
      • 启用自动缩进:【:set autoindent】
      • 禁用自动缩进:【:set noautoindent】
    1. 复制保留格式:
      • 启用粘贴模式:【:set paste】
      • 禁用粘贴模式:【:set nopaste】
    1. 显示换行符:
      • 启用显示换行符:【:set list】
      • 禁用显示换行符:【:set nolist】
    1. 高亮搜索:
      • 启用搜索高亮:【:set hlsearch】
      • 禁用搜索高亮:【:set nohlsearch】
    1. 设置缩进:
      • 设置缩进宽度为 4 个空格:【:set shiftwidth=4】
    1. Tab 替换为空格:
      • 设置 Tab 键宽度为 4 个空格:【:set tabstop=4】
    1. 设置光标所在行的标识线:
      • 启用光标标识线:【:set cursorline】
      • 禁用光标标识线:【:set nocursorline】
    1. 加密文本:
      • 设置加密密码:【:set key=password】
  1. 注意事项:
    • vim编辑器不能同时将同一个文本文件打开两次或以上,否则会出现交换文件。
    • 记得保存 .vimrc 文件并重新启动 Vim 才能使更改生效。

http://www.ppmy.cn/server/26349.html

相关文章

小程序地理位置权限如何申请?

这篇内容会教大家如何快速申请“获取当前的地理位置&#xff08;onLocationChange&#xff09;”接口&#xff0c;以便帮助大家顺利开通接口。以下内容是本人经历了多次的申请经历得出来的经验&#xff0c;来之不易&#xff0c;望大家给予鼓励&#xff01; 小程序地理位置接口有…

PFA容量瓶耐受强酸强碱进口特氟龙材质定容瓶

PFA容量瓶&#xff0c;也叫特氟龙容量瓶&#xff0c;是用于配制标准浓度溶液的实验室器皿&#xff0c;是有着细长颈、梨形肚的耐强腐蚀平底塑料瓶&#xff0c;颈上有标线&#xff0c;可直接配置标准溶液和准确稀释溶液以及制备样品溶液。 因其有着不易碎、材质纯净、化学稳定性…

Windows系统下安装Mosquitto的步骤(2)

接前一篇文章&#xff1a;Windows系统下安装Mosquitto的步骤&#xff08;1&#xff09; 本文内容参考&#xff1a; Windows10上安装Mosquitto的步骤(win10、win11 安装mqtt) - IPS99技术分享 MQTT&#xff1a;windows环境下配置MQTT服务器&#xff08;mosquitto&#xff09;_…

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段&#xff0c;而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前&#xff0c;一般来说&#xff0c;保存excel的文件都是后端去处理&#xff0c;处理完成给前端一个接口&#xff0c;前端调用了打开…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK使用相机的Plug-and-Play(即插即用PnP)技术(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK使用相机的Plug-and-Play&#xff08;即插即用PnP&#xff09;技术&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK和相机即插即用技术的技术背景Baumer工业相机通过NEOAPISDK使用相机的即插即用技术1.引用合适…

RTSP,RTP,RTCP

机器学习 Machine Learning&#xff08;ML&#xff09; 深度学习&#xff08;DL&#xff0c;Deep Learning&#xff09; CV计算机视觉&#xff08;computer vision&#xff09; FFMPEG&#xff0c;MPEG2-TS,H.264,H.265,AAC rstp,rtp,rtmp,webrtc onvif,gb28181 最详细的音…

Mellanox网卡打流命令ib_write_bw执行遇到Couldn‘t listen to port 18515原因与解决办法?

要点 要点&#xff1a; ib默认使用18515命令 相关命令&#xff1a; netstat -tuln | grep 18515 ib_write_bw --help |grep port# server ib_write_bw --ib-devmlx5_1 --port88990 # client ib_write_bw --ib-devmlx5_0 1.1.1.1 --port88990现象&#xff1a; 根因&#xff…

kotlinDSL控制的安卓项目导入已存在的模块后sync报错

原因很明显&#xff0c;但是我还找了好久 因为在import时并没有选择groove还是kotlin控制&#xff0c; 所以默认为groovy控制的&#xff0c;然而主项目是由kotlin dsl控制的grale行为。 原因清楚之后&#xff0c;就可以去检查一下&#xff0c;项目里是否包含了settings.gradle和…