【网络安全】服务基础第二阶段——第二节:Linux系统管理基础----Linux统计,高阶命令

目录

一、Linux高阶命令

[1.1 管道符的基本原理](#1.1 管道符的基本原理)

[1.2 重定向](#1.2 重定向)

[1.2.1 输出重定向](#1.2.1 输出重定向)

[1.2.2 输入重定向](#1.2.2 输入重定向)

[1.2.3 wc命令基本用法](#1.2.3 wc命令基本用法)

[1.3 别名](#1.3 别名)

[1.3.1 which命令基本语法](#1.3.1 which命令基本语法)

[1.3.2 alias命令基本语法](#1.3.2 alias命令基本语法)

[1.4 压缩归档tar](#1.4 压缩归档tar)

[1.4.1 第一种:gzip压缩](#1.4.1 第一种:gzip压缩)

[1.4.2 第二种:bzip压缩](#1.4.2 第二种:bzip压缩)

[1.5 tar命令](#1.5 tar命令)

二、VIM编辑器使用

[2.1 基本命令](#2.1 基本命令)

三、文件管理命令

[3.1 find命令](#3.1 find命令)

[3.1.1 使用正则表达式查找文件](#3.1.1 使用正则表达式查找文件)

[3.1.2 结合其他命令使用](#3.1.2 结合其他命令使用)

[3.2 whereis命令](#3.2 whereis命令)

[3.3 locate命令](#3.3 locate命令)

[3.4 whereis与locate的区别](#3.4 whereis与locate的区别)

[3.5 正则表达式](#3.5 正则表达式)

四、高级查询(grep、awk、sed)

[4.1 grep](#4.1 grep)

[4.2 awk](#4.2 awk)

[4.3 sed](#4.3 sed)


一、Linux高阶命令
1.1 管道符的基本原理

管道符的作用是将一个命令的标准输出(stdout)重定向为另一个命令的标准输入(stdin)。这样就可以将命令结果一步步的传递给后续的命令,避免冗余的中间步骤

基本语法:

命令A | 命令B | 命令C

这意味着:

  1. 命令A执行并将结果输出

  2. 命令B接收命令A的输出作为输入,执行并输出结果

  3. 命令C接收命令B的输出作为输入,执行并输出最终结果

    [root@localhost ~]# cat -n /etc/passwd | head -5 //查看passwd文件前五行并编号
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    [root@localhost ~]# cat -n /etc/passwd | more //逐页显示文件内容并加上行号
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    ......
    [root@localhost ~]# ps -ef |tail //查看系统进程
    root 67121 749 0 09:42 ? 00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf /var/lib/NetworkManager/dhclient-5442e139-3d7d-468d-9252-a0914f23be24-ens33.lease -cf /var/lib/NetworkManager/dhclient-ens33.conf ens33
    ......

    将/etc/issue的文件内容进行小写转大写,保存到/tmp/issue.out
    [root@localhost ~]# cat /etc/issue //查看文件
    \S
    Kernel \r on an \m
    [root@localhost ~]# tr [a-z] [A-Z] //将小写转换为大写

    /tmp/issue.out //保存输出到文件
    合起来就是:
    [root@localhost ~]# cat /etc/issue | tr [a-z] [A-Z] >/tmp/issue.out
    [root@localhost ~]# cat /tmp/issue.out
    \S
    KERNEL \R ON AN \M

    [root@localhost ~]# echo 1+2
    1+2
    [root@localhost ~]# echo 1+2 | bc
    3
    同理我们可以计算1~100的和并输出到屏幕上
    [root@localhost ~]# echo {1..100}
    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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
    [root@localhost ~]# echo {1..100} | tr ' ' '+' | bc //将空格转换为加号进行运算
    5050

1.2 重定向

重定向是一个非常重要的功能,它允许用户将命令的输出或输入从默认位置(如屏幕或键盘)重定向到文件、另一个命令或其他设备。通过使用重定向符号,用户可以更灵活的控制命令的输入和输出。

重定向主要包括两种类型:输出重定向和输入重定向

  • 输入:键盘 ---- 程序系统
  • 输出:程序系统 ---- 屏幕

输入重定向:默认数据流向某个程序,改变数据流向 ---- 将数据内容导入到其他命令

输出重定向:默认数据流向屏幕,改变数据流向 ---- 导入其他命令或者文件

重定向分类:

  • 输入重定向
  • 标准覆盖输出重定向
  • 标准追加输出重定向
  • 错误覆盖输出重定向
  • 错误追加输出重定向
1.2.1 输出重定向

标准输出重定向:

command >file ----以覆盖的形式,将command的正确输出结果输出到file文件中
command >>file ----以追加的形式,将command的正确输出结果输出到file文件中

[root@localhost Desktop]# ls >/tmp/test
[root@localhost Desktop]# cat /tmp/test
tools
[root@localhost Desktop]# echo 1 >/tmp/test   //覆盖原有内容
[root@localhost Desktop]# cat /tmp/test
1
[root@localhost Desktop]# echo 12345 >>/tmp/test    //在原有基础上新增
[root@localhost Desktop]# cat /tmp/test
1
12345

错误输出重定向:

[root@localhost Desktop]# LS   //故意访问一个错的文件
bash: LS: command not found...
Similar command is: 'ls'
[root@localhost Desktop]# LS >/tmp/test   //用之前的方法会报错
bash: LS: command not found...
Similar command is: 'ls'
[root@localhost Desktop]# LS 2>/tmp/test   //将错误结果输出到文件中
[root@localhost Desktop]# cat /tmp/test
bash: LS: command not found...
Similar command is: 'ls'

只有满足重定向条件(正确或错误)才能改变流向
[root@localhost tools]# ls
1
[root@localhost tools]# ls 2>/tmp/test
1

正确输出和错误信息同时保存:

command >file 2>&1 ---- 以覆盖的形式,将command的正确和错误输出结果都输出到file文件中
command >>file 2>&1 ---- 以追加形式,将command的正确和错误输出结果都输出到file文件中

[root@localhost Desktop]# ls >/root/Desktop/test.txt 2>&1
[root@localhost Desktop]# cat test.txt
man.config
test.txt
tools
[root@localhost Desktop]# LS >/root/Desktop/test.txt 2>&1
[root@localhost Desktop]# cat test.txt
bash: LS: command not found...
Similar command is: 'ls'
==========================================================
[root@localhost Desktop]# ls >>/root/Desktop/test.txt 2>&1
[root@localhost Desktop]# cat test.txt
bash: LS: command not found...
Similar command is: 'ls'
man.config
test.txt
tools

将正确信息和错误信息分开保存:

command >file_1>file_2 ---- 以覆盖形式,将command的正确输出结果输出到file_1文件中,错误信息输出到file_2文件中
command >>file_1>>file_2 ---- 以追加形式,将command的正确输出结果输出到file_1文件中,错误信息输出到file_2文件中
command >file2>file ---- 不推荐,导致文件被打开两次,产生资源竞争

[root@localhost Desktop]# ls >/root/Desktop/file_1 2>file_2
[root@localhost Desktop]# LS >/root/Desktop/file_1 2>file_2
[root@localhost Desktop]# cat file_1
[root@localhost Desktop]# cat file_2
bash: LS: command not found...
Similar command is: 'ls'

不想将输出结果显示到屏幕上,又不想保存到文件中:

command >/dev/null
1.2.2 输入重定向

正常流向:键盘 ---- 命令

输入重定向:不再使用键盘作为命令来源,使用文件的内容作为命令来源

command < file 使⽤⽂件的内容 作为命令的输⼊
command << end 从键盘读取数据 ,当遇到分界符 end ,停⽌
command <file1 >file2 :将file1的内容作为输⼊到命令 ,将命令的返回结果重定向到⽂件2中

创建⼀些测试⽂件 file1.txt , file2.txt , file3.txt ,并给它们各⾃写⼊⼀些内容:
[root@localhost Desktop]# echo "This is file1" > file1.txt
[root@localhost Desktop]# echo "This is file2" > file2.txt
[root@localhost Desktop]# echo "This is file3" > file3.txt

创建 filenames.txt ⽂件,包含你想要读取的⽂件名:
[root@localhost Desktop]# echo -e "file1.txt\nfile2.txt\nfile3.txt" > fielnames.txt

使⽤输⼊重定向将 filenames.txt 的内容传递给 cat 命令:
[root@localhost Desktop]# cat < fielnames.txt
file1.txt
file2.txt
file3.txt
(file打错了,懒得改了,意思大概就是这样)

这条命令实际上将 filenames.txt 的内容作为标准输⼊传递给 cat,⽽不是将其内容作为⽂件名传递给cat。因此,它只是简单地输出 filenames.txt 中的⽂本内容,即 file1.txt、file2.txtfile3.txt,并不会读取这些⽂件的内容

xargs介绍:

xargs 是⼀个⾮常有⽤的命令⾏⼯具,它的主要作⽤是从标准输⼊读取数据,然后将这些数据作为参数传递给其他命令。

xargs 可以将⽂本内容转换为命令参数,它常⽤于解决以下场景:

  • 你有⼀组⽂件名、字符串或者数据,想要把它们作为参数传递给⼀个命令。

  • 你从⽂件或管道中读取的内容,需要逐⾏传递给另⼀个命令处理。

    [root@localhost ~]# xargs cat < filenames.txt
    This is file 1
    This is file 2
    This is file 3

1.2.3 wc命令基本用法

wc命令通常用来做来做统计

wc [选项] [文件名]

常用选项:

  • -l :统计⾏数。

  • -w :统计字数(单词数),单词之间以空格或换⾏符分隔。

  • -c :统计字节数(在UTF-8编码⽂件中,这通常等同于字符数)。

  • -m :统计字符数(对于多字节字符和特殊编码特别有⽤)。

  • -L :显示最⻓的⼀⾏的⻓度(字符数)。

    [root@localhost Desktop]# cat fielnames.txt
    file1.txt
    file2.txt
    file3.txt
    [root@localhost Desktop]# wc -l fielnames.txt
    3 fielnames.txt
    [root@localhost Desktop]# wc -c fielnames.txt
    30 fielnames.txt

1.3 别名
1.3.1 which命令基本语法

首先我们来了解命令执行的流程:

第一步:确定命令的路径

CentOS 7 也会⾸先检查⽤户输⼊的命令是绝对路径相对路径 ,还是仅为命令名称

  • 绝对路径:如果⽤户输⼊的是绝对路径,系统会直接运⾏该命令。例如, /bin/ls 直接指向 /bin ⽬录下的 ls 命令。
  • 相对路径:如果⽤户输⼊的是相对路径,系统会根据当前⽬录寻找命令。例如, ./script.sh会执⾏当前⽬录下的 script.sh
  • 仅命令名:如果输⼊的是命令名,CentOS 7 会通过搜索环境变量 PATH 中的路径来查找该命令的可执⾏⽂件。

which 命令的作⽤是查找并显示可执⾏命令的路径 。它会从环境变量 PATH 中指定的⽬录⾥查找⽤户输⼊的命令,并返回该命令的可执⾏⽂件的完整路径。如果该命令是⼀个别名(alias), which 也会显示别名信息。

which命令的用途:

  1. 查找命令的路径: which 命令⽤于确定某个命令的可执⾏⽂件在系统中的具体位置。

  2. 检测命令是否存在:它可以告诉你某个命令是否可以在 PATH 变量中找到,从⽽判断这个命令是否存在。

  3. 识别别名:如果某个命令是别名, which 会显示别名的信息。

    [root@localhost ~]# which ls
    alias ls='ls --color=auto'
    /usr/bin/ls
    ·别名:ls 命令被设置了一个别名,即 ls --color=auto。这意味着当你在命令行中输入 ls 时,实际上执行的是 ls --color=auto 命令,这样可以自动为目录和文件添加颜色,使得输出更加直观。
    ·可执行文件的位置:/usr/bin/ls 表示 ls 命令的可执行文件实际位于 /usr/bin 目录下

    [root@localhost Desktop]# /bin/ls //绝对路径
    fielnames.txt tools
    //这个命令使用了 /bin/ls 的绝对路径来执行 ls 命令。由于 /bin 目录通常包含系统的基本命令,这个命令会列出当前目录(Desktop)中的文件和文件夹
    [root@localhost Desktop]# ls //相对路径
    fielnames.txt tools
    //由于 ls 命令被设置为别名 ls --color=auto,这个命令也会列出当前目录中的文件和文件夹,并且由于别名中的 --color=auto 选项,输出结果会根据文件类型显示不同的颜色

第二步:查找别名(alias)

如果命令输⼊不是绝对路径或相对路径,CentOS 7 的 shell 会检查该命令是否是⼀个别名(alias)。通过命令 alias 可以查看别名列表,使⽤ unalias 可以移除别名。

第三步:检查命令类型

CentOS 7 使⽤ type 命令来检测命令是内部命令(built-in)还是外部命令:

  • 内部命令:由 shell ⾃带的命令,如 echo 、 cd 等,它们直接由 shell 处理。

  • 外部命令:通常是可执⾏⽂件,存储在系统⽂件路径中(如 /bin 、 /usr/bin 等),例如 ls 、 touch 、 cat 等。

    [root@localhost Desktop]# type cat
    cat is hashed (/usr/bin/cat)
    [root@localhost Desktop]# type echo
    echo is a shell builtin
    [root@localhost Desktop]# type touch
    touch is /usr/bin/touch
    [root@localhost Desktop]# type ls
    ls is aliased to `ls --color=auto'
    [root@localhost Desktop]# type more
    more is /usr/bin/more
    [root@localhost Desktop]# type bc
    bc is /usr/bin/bc

第四步:通过环境变量 PATH 查找外部命令

如果输⼊的命令不是内部命令或别名,CentOS 7 会依次在环境变量 PATH 指定的⽬录中查找外部命令的执⾏⽂件。你可以使⽤ echo $PATH 来查看当前系统中的搜索路径列表。系统按顺序从这些⽬录中查找符合命令名称的可执⾏⽂件,并运⾏第⼀个找到的⽂件。

[root@localhost Desktop]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

每个路径由冒号 : 分隔,代表⼀个⽬录。系统会按照这些路径的顺序来搜索命令的可执⾏⽂件。让我们逐步解析这些⽬录的含义:

  1. /usr/local/bin :这个⽬录通常⽤来存放本地管理员安装的⽤户级别程序,即管理员⼿动安装的⼀些软件的可执⾏⽂件可能会放在这⾥,⽽不是由系统的包管理器(如 yum )⾃动安装的程序。
  2. /usr/local/sbin :与 /usr/local/bin 类似,但 sbin ⽬录通常存放的是系统管理员级别的⼆进制⽂件,⽐如⼀些系统管理⼯具。只有具有超级⽤户权限(如 root )的⽤户才能执⾏这些命令。
  3. /usr/bin :这是系统中存放⼤多数常⽤命令和应⽤程序的⼆进制⽂件的⽬录,普通⽤户和管理员都可以执⾏这些命令。⽐如 ls 、 cat 等命令可能就位于这个⽬录下。
  4. /usr/sbin :与 /usr/bin 类似,但 /usr/sbin 通常包含系统管理级别的命令,这些命令主要是为系统管理员使⽤的。⽐如 iptables 、 reboot 等命令会在这个⽬录中。
  5. /bin :这个⽬录存放了⼀些基础的可执⾏⽂件,⽆论系统处于什么状态,它们都应该是可⽤的。⽐如⼀些基本的命令如 echo 、 cp、mv 等可能会位于此⽬录。
  6. /sbin :类似于 /bin ,但是这⾥存放的命令通常是系统管理相关的命令,只有超级⽤户( root )才能执⾏,例如 fdisk 、 mkfs 等。
  7. /root/bin :这是 root ⽤户的个⼈⼆进制⽂件⽬录,供 root ⽤户使⽤的⾃定义可执⾏⽂件或脚本可以存放在此⽬录下。这是 root ⽤户⾃⼰的私⼈⽬录,不会对普通⽤户开放。

如何工作:

当你在终端中输⼊⼀个命令时(如 ls 或 echo ),系统会依次按照 PATH 中定义的这些⽬录去寻找对应的可执⾏⽂件。例如,假设你输⼊了 ls 命令:

  1. 系统⾸先会去 /usr/local/bin ⽬录中查找是否有 ls 命令的可执⾏⽂件。
  2. 如果找不到,它会继续搜索 /usr/local/sbin ⽬录。
  3. 依次搜索 /usr/bin 、 /usr/sbin 、 /bin 、 /sbin 等,直到找到 ls 命令并执⾏它。如果在所有这些⽬录中都找不到 ls 命令,那么系统会返回⼀个错误,⽐如 command not found 。

PATH的重要性:

可执⾏⽂件的查找路径: PATH 确定了系统如何查找可执⾏命令的路径。如果你安装了⼀个新软件,并且它的⼆进制⽂件不在 PATH 指定的⽬录中,那么你将⽆法直接在命令⾏中运⾏该命令,除⾮你⼿动添加其路径。

⾃定义 PATH:你可以通过修改 PATH 环境变量来添加⾃⼰的⽬录,从⽽在命令⾏中直接运⾏⾃定义脚本或程序。例如,你可以通过以下⽅式将 /my/custom/dir 添加到 PATH 中:

export PATH=$PATH:/my/custom/dir
//这会在当前会话中将⾃定义⽬录添加到 PATH 中。

其他注意事项:

  • 内置命令的优先级:如果有与内部命令同名的外部命令,内部命令会优先被执⾏。你可以使⽤ type 命令来查看⼀个命令的类型。
  • 命令路径查询:使⽤ which 命令可以查看外部命令的具体路径,例如 which ls 会返回 /bin/ls
1.3.2 alias命令基本语法

注意点 :alias 命令 只局限于本次登陆时的操作 ,如果想要永久⽣效,需要进⼊⽤户的家⽬录下,bash 初始化文件中定义

alias [别名]=[原命令]
  • 别名 :你为命令指定的新名称。
  • 原命令 :你希望别名代表的原始命令,可以包含选项和参数。

常见用法:

1.创建别名:可以通过以下⽅式为某个命令创建别名

alias ll='ls -l --color=auto'

这个别名将 ll 定义为执⾏ ls -l --color=auto 命令,显示彩⾊的⻓列表格式。

  1. 查看所有已定义的别名 通过运⾏不带参数的 alias 命令,可以查看当前会话中定义的所有别名

    [root@localhost Desktop]# alias
    alias cp='cp -i'
    ......
    [root@localhost Desktop]# alias -p
    alias cp='cp -i'
    ......

  2. 查看特定别名 想查看某个具体别名的定义,可以使⽤以下命令

    alias 别名
    例如: alias ll

  3. 取消别名 使⽤ unalias 命令可以删除某个别名

    unalias 别名
    如果想删除所有别名,可以使用: unalias -a

  4. 临时禁⽤别名 如果希望临时使⽤原始命令,⽽不使⽤定义的别名,可以在命令前加上反斜杠 \

    \命令名
    例如 \ls会绕过ls的别名,直接执行/bin/ls

  5. 永久⽣效的别名 alias 命令在当前会话中⽣效,如果关闭终端或注销登录,所有定义的别名将失效。要使别名永久⽣效,需要将其写⼊到⽤户的 ~/.bashrc ⽂件中

    nano ~/.bashrc //使用nano打开~/.bashrc文件
    vim ~/.bashrc //或使用vim编辑器打开

在文件中添加你希望永久保存的别名,保存后,运行命令使其生效

使用 nano: 按下 Ctrl + O 保存文件,然后按下 Enter 确认文件名。完成后,按下 Ctrl + X 退出 nano
使用 vim: 按下 Esc 键,输入 :wq 保存并退出,或者输入 :w 仅保存
source ~/.bashrc  //运行使其生效
1.4 压缩归档tar

归档:归档是将多个⽂件或⽬录打包为⼀个⽂件,这样可以⽅便地管理和传输这些⽂件。归档本身并不对⽂件进⾏压缩,只是将多个⽂件合并成⼀个⽂件。

常⽤的归档⼯具:

  • tar :在 Linux 系统中最常⽤的归档⼯具,⽣成 .tar ⽂件

压缩:压缩是对⽂件进⾏编码以减少其占⽤的存储空间。压缩后,⽂件体积变⼩,便于节省空间和加快传输速度。

常⽤的压缩⼯具:

  • gzip :⽣成 .gz ⽂件。
  • bzip2 :⽣成 .bz2 ⽂件。
  • xz :⽣成 .xz ⽂件。

压缩归档的过程:压缩归档的过程分为两个步骤

  • a. 归档:使⽤⼯具(如 tar )将多个⽂件打包成⼀个⽂件。

  • b. 压缩:对归档⽂件进⾏压缩,⽣成⼀个更⼩的压缩⽂件。

    准备生成大文件
    [root@localhost Desktop]# dd if=/dev/zero of=/root/Desktop/test bs=1M count=100 //创建一个大小为100MB的文件,文件内容为二进制的0
    100+0 records in
    100+0 records out
    104857600 bytes (105 MB) copied, 0.260845 s, 402 MB/s
    [root@localhost Desktop]# du -sh /root/Desktop/test //验证文件大小
    100M /root/Desktop/test

1.4.1 第一种:gzip压缩
  • 优点:压缩速度快,兼容性好,适合快速压缩解压

  • 缺点:压缩率相对较低

    gzip test

解压:

gzip -d test.gz   //参数解压
gunzip test.gz    //命令解压
1.4.2 第二种:bzip压缩
bzip2 test

解压:

bzip2 -d test.bz2  //参数解压
bunzip2 test.bz2   //命令解压

注意:只能用相同的技术做压缩与解压缩

1.5 tar命令

tar 是一个在 Unix 和类 Unix 系统中广泛使用的归档工具,它可以打包和压缩文件。

tar命令常用参数:

  • -c :创建归档⽂件。

  • -x :解压归档⽂件。

  • -z :使⽤ gzip 压缩或解压。

  • -j :使⽤ bzip2 压缩或解压。

  • -v :显示详细操作过程。

  • -f :指定归档⽂件的名称。

  • -k :解压时保留原⽂件,不覆盖同名⽂件。

    -c :创建新的归档⽂件。⽤于将⽂件或⽬录打包成归档⽂件(可以选择压缩或不压缩)
    tar -cvf archive.tar /path/to/directory

    -x :提取归档⽂件中的内容。⽤于从归档⽂件中解压出⽂件或⽬录
    tar -xvf archive.tar

    -z :对归档⽂件使⽤ gzip 压缩。将打包的⽂件使⽤ gzip 压缩,⽣成 .tar.gz ⽂件
    tar -zcvf archive.tar.gz /path/to/directory

    -v :显示过程信息。在压缩或解压时,显示每个⽂件的处理进度
    tar -cvf archive.tar /path/to/directory

    -f :指定归档⽂件的名称。该选项后⾯应该跟着归档⽂件的名称
    tar -cvf myarchive.tar /path/to/directory

    -j :对归档⽂件使⽤ bzip2 压缩。将打包的⽂件使⽤ bzip2 压缩,⽣成 .tar.bz2 ⽂件
    tar -jcvf archive.tar.bz2 /path/to/directory

    -k :保留原⽂件,不覆盖。在解压归档⽂件时,保留现有⽂件,不覆盖同名⽂件

二、VIM编辑器使用

Vim(Vi IMproved)是 Linux 和 Unix 系统中常⽤的⽂本编辑器之⼀。Vim 是对原始 Vi 编辑器的增强版,提供了更多的功能和灵活性

Vim 有三种主要的⼯作模式:

  1. 命令模式/正常模式:
  • 默认进⼊的模式,可以在该模式下进⾏光标移动、复制、粘贴、删除等操作。
  • 进⼊ Vim 后⾸先是处于正常模式。
  1. 插⼊模式/输⼊模式:
  • 可以在该模式下输⼊⽂本,按键的输⼊会直接插⼊到⽂件中。
  • 从正常模式进⼊插⼊模式的常⽤按键是 i 或 a 。
  1. 末⾏模式:
  • 在该模式下可以输⼊命令(如保存、退出、查找等)。
  • 在正常模式下按 : 进⼊末⾏模式。
2.1 基本命令

在不同命令之​​​​​​​间切换:

  • 插⼊模式:按 i (在光标前插⼊)、 a (在光标后插⼊)、 o (在下⼀⾏插⼊)。

  • 返回命令模式:按 Esc 键退出插⼊模式或命令模式,返回到正常模式。

  • 进⼊末⾏模式:按 : 键进⼊末⾏模式。

    :w ---- 保存文件
    :q ---- 退出vim
    :wq ---- 保存并退出
    :q! ---- 强制退出
    :wq! ---- 强制保存并退出

替换与查找(末行模式下):

  • 查找文本:

    /search_term ---- 查找文本
    输⼊ / 后跟查找内容,然后按 Enter ,光标将跳到匹配内容处。按 n 移动到下⼀个匹配项,按 N 移动到上⼀个匹配项

  • 替换文本:

    :%s/old_text/new_text/g ---- 替换文本
    替换当前⽂件中的所有 old_text 为 new_text 。其中 % 表示对整个⽂件进⾏替换, g 表示全局替换

光标移动命令(正常模式)

  • gg:移动到⽂件的第⼀⾏。
  • G:移动到⽂件的最后⼀⾏。
  • 0 :移动到⾏⾸。
  • $ :移动到⾏尾。
  • w:移动到下⼀个单词的开头。
  • b:移动到前⼀个单词的开头。

文本编辑命令(正常模式)

  • x:删除当前光标所在的字符。
  • dd:删除当前⾏。
  • d w :删除当前单词。
  • u:撤销上⼀次的操作。
  • yy:复制当前⾏。
  • p:粘贴被复制的内容。
  • r:替换当前字符。
  • cw:替换当前单词(从光标位置到单词结尾)。
三、文件管理命令
3.1 find命令

find命令用于在指定目录下查找文件和目录。find支持使用多种条件进行查找,并可以结合其他命令或管道符来执行复杂的文件管理任务

基本语法:

find [路径] [参数] [查找条件]
  • 路径:指定要查找的目录路径。如果没有指定路径,find会从当前目录开始查找
  • 参数:可以是条件、动作等
  • 查找条件:可以使用多种条件来过滤查找结果,如按文件名、文件大小、文件类型等

常用参数:

  • -name 按名称查询

  • -size 按照文件大小查询

    • user 按照属性查询
  • -type 按照文件类型查询

  • -iname 忽略大小写

    [root@localhost Desktop]# find /root/Desktop -name test.txt
    /root/Desktop/test.txt

- type按文件类型查找:

  • f:普通文件
  • d:目录
  • l:符号链接
  • p:命名管道
  • b:块设备文件
  • c:字符设备文件
3.1.1 使用正则表达式查找文件

可以使用find支持的正则表达式来查找文件,如查找以te开头,以.txt结尾的文件:

[root@localhost ~]# find /root/Desktop -regex '.*te.*\.txt'
/root/Desktop/tools/Python-3.7.3/Modules/_decimal/tests/README.txt
......
3.1.2 结合其他命令使用
  • 查找并压缩文件:可以查找某类型的文件并对它们进行压缩

    find /path -name '*.log' -exec gzip {} ;

  • 其他例子:

    find /path -mtime -7 //查找最近7天内修改的文件
    find /path -empty //查找空文件
    find /path -name '*.log' -type f -exec rm {} ; //查找并删除文件

    1.查找 /etc 以.conf结尾的配置⽂件
    [root@localhost Desktop]# find /etc -name ".conf"
    查找 /etc 以.conf结尾的配置⽂件 ,顺便统计个数
    [root@localhost Desktop]# find /etc -name "
    .conf" | wc -l
    463

    2.查看/etc ⽂件⼤于1M
    [root@localhost Desktop]# find /etc -size +1M
    /etc/selinux/targeted/contexts/files/file_contexts.bin
    /etc/selinux/targeted/policy/policy.31
    /etc/selinux/targeted/active/policy.kern
    /etc/selinux/targeted/active/policy.linked
    /etc/udev/hwdb.bin
    /etc/brltty/zh-tw.ctb

    3.查看当前⽬录 和当前⽬录下的所有⽂件
    [root@localhost Desktop]# find .

    4.查看当前 ⽤户下 的所有⽂件 , 顺便统计个数
    [root@localhost Desktop]# find $HOME -print | wc -l
    5356
    $HOME :环境变量,⽤于表示当前⽤户的主⽬录(home directory)

    5.查看 /var/log , 忽略⼤⼩写 , 查看 .log 结尾的⽂件
    [root@localhost Desktop]# find /var/log -iname "*.log"

    6.查看 /var/log , 忽略⼤⼩写 , 查看 s 开头的⽂件
    [root@localhost Desktop]# find /var/log -iname "s*"

    7.查看被访问的⽂件 时间 超过1天
    [root@localhostcjc Desktop]# find . -type f -atime +1

    8.查看被访问的⽂件 时间 不超过10分钟
    [root@localhost Desktop]# find . -type f -amin -10

    9.查看 /home ⽂件名 不是txt 结尾
    [root@localhost Desktop]# find /home ! -name "*.txt"

    10.满⾜⼤于30M 的⽂件 送往垃圾桶
    [root@localhost Desktop]# find / -size +30M >/dev/null

3.2 whereis命令

whereis 命令⽤于查找可执⾏⽂件、源代码和⼿册⻚的位置,特别适⽤于寻找程序的安装路径

常用选项:

  • -b :只查找可执⾏⽂件的位置。

  • -m :只查找⼿册⻚⽂件的位置。

  • -s :只查找源代码⽂件的位置。

    [root@localhost Desktop]# whereis ls
    ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
    这表示 ls 的可执⾏⽂件在 /bin/ls ,其⼿册⻚在 /usr/share/man/man1/ls.1.gz

3.3 locate命令

locate 命令⽤于根据预构建的数据库快速查找⽂件。与 find 命令相⽐, locate 不会实时遍历⽂件系统,⽽是基于已经建⽴的⽂件数据库,因此查找速度⾮常快

常用选项:

  • -i :忽略⼤⼩写查找⽂件。
  • -r :使⽤正则表达式查找⽂件。
  • -c :只显示匹配⽂件的数量,⽽不列出具体⽂件。

如何更新 locate 的数据库:

locate 命令依赖于⽂件数据库(通常由 updatedb 命令定期更新),如果要⼿动更新数据库,可以运⾏以下命令:

sudo updatedb
  • updatedb 的作⽤:
  • updatedb 命令会遍历本地⽂件系统,收集所有⽂件和⽬录的路径信息,然后将这些信息存储到⼀个本地数据库中。 locate 命令通过查询这个数据库来快速查找⽂件。
  • 不需要联⽹:
  • 由于 updatedb 只在本地⽂件系统中收集⽂件路径信息,它不需要访问⽹络或从外部服务器获取数据。因此,执⾏ updatedb 命令更新 locate 的数据库时,不需要联⽹。
3.4 whereis与locate的区别

查找范围:

  • whereis 主要⽤于查找可执⾏⽂件、源代码和⼿册⻚,并且只查找这些特定的⽂件。
  • locate 可以查找系统中的任何⽂件,并基于数据库执⾏查找,通常速度更快。

速度:

  • whereis 直接在系统路径中查找⽂件,速度较慢。
  • locate 使⽤预先建⽴的数据库,查找速度⾮常快。

实时性:

  • whereis 是实时查找,能够找到最新的⽂件。
  • locate 依赖于数据库,只有在数据库更新之后才能找到新创建的⽂件。

总结:

  • whereis :适合查找程序的可执⾏⽂件、源代码和⼿册⻚,使⽤简单且范围有限。
  • locate :适合快速查找系统中任何⽂件,但依赖⽂件数据库的更新。
3.5 正则表达式

正则表达式(Regular Expressions,简称 regex)是⼀种⽤于匹配⽂本的强⼤⼯具。它常⽤于⽂本处理⼯具(如 grep 、 sed 、 awk 等)中,以匹配、搜索、替换⽂本

正则表达式符号的解释与例子:

  1. ^ (匹配⾏⾸):
  • 例⼦: ^hello 匹配以 hello 开头的⾏。
  1. $ (匹配⾏尾):
  • 例⼦: world$ 匹配以 world 结尾的⾏。
  1. . (匹配任意单个字符):
  • 例⼦: h.llo 匹配 hello 、 hallo 、 hxllo 等。
  1. \ (转义字符):
  • 例⼦: 3\.14 匹配字符串 3.14 ,转义 . 使其按字⾯含义解释。
  1. [] (字符集合):
  • 例⼦: [aeiou] 匹配任意⼀个元⾳字⺟。
  1. .* (匹配任意字符序列):
  • 例⼦: a.*b 匹配以 a 开头,以 b 结尾的任意字符序列,如 ab 、 a123b 、 aXYZb 。
  1. {n} (精确匹配 n 次):
  • 例⼦: a{3} 匹配连续的 3 个 a 字符,如 aaa 。
  1. {n,} (⾄少匹配 n 次):
  • 例⼦: a{2,} 匹配⾄少 2 个连续的 a 字符,如 aa 、 aaa 、 aaaa 等。
  1. {n,m} (匹配 n 到 m 次):
  • 例⼦: a{2,4} 匹配 2 到 4 个 a 字符,如 aa 、 aaa 、 aaaa 。
四、高级查询(grep、awk、sed)
  • grep :擅⻓查找匹配⾏。
  • awk :擅⻓处理数据的列,进⾏格式化输出和计算。
  • sed :擅⻓逐⾏编辑⽂件,主要⽤于⾏处理和⽂本替换。
4.1 grep

grep 是⼀个⽤于⽂本搜索的⼯具,它根据正则表达式或⽂本模式查找⽂件或标准输⼊中的匹配⾏

grep [选项] "搜索模式" ⽂件名
  • 搜索模式:这是你要查找的关键字或正则表达式。
  • ⽂件名:要在其中进⾏搜索的⽂件。

常见参数:

  • -a 或者 --text 不要忽略⼆进制数据
  • -A<⾏数> , 除了显示复合样式的⾏之外,再显示出⾏数之后的内容
  • -b 在显示复合样式的⾏ 之前,标示出该⾏第⼀个字符的编号
  • -B<显示⾏数> 除了显示复合样式的⾏之外,再显示出⾏数之前的内容
  • -c 计算复合样式的列数
  • -C<显示⾏数> 除了显示复合样式的⾏之外,再显示出⾏数之前的内容
  • -H 显示复合样式的⾏,显示⽂件名
  • -h 显示复合样式的⾏ 不显示⽂件名
  • -i 搜索时忽略⼤⼩写
  • -n 显示⾏号
  • -l 只显示⽂件名,不显示⾏
  • -w 匹配整字
  • -x 匹配整⾏
  • -r 递归搜索
  • -q 禁⽌输出任何结果 , 退出状态表示搜索是否成功
4.2 awk

awk 是⼀种强⼤的⽂本处理⼯具,尤其擅⻓处理结构化的⽂本数据(如表格)。它可以通过模式匹配和字段操作对⽂件内容进⾏格式化输出、计算和处理。

awk '/关键字/{print $n}' ⽂件名
  • /关键字/ :表示只在包含该关键字的⾏上执⾏操作。如果不加 /关键字/ ,则对所有⾏执⾏操作。
  • {print $n} : $n 表示要输出的第 n 列,列的分隔符默认为空格或制表符。
  • $1 表示每⾏的第⼀列。
  • $0 表示每⾏的所有内容(即整⾏)
  • ⽂件名:指定要处理的⽂件。

常见参数:

  • -F :定义分隔符
  • -v :定义外部变量
  • -f :从脚本⽂件读取 awk 脚本
4.3 sed

sed 是⼀种流编辑器,⽤于处理和转换⽂本⽂件中的数据。它的主要作⽤是对⽂件或标准输⼊的内容进⾏逐⾏处理,并可以执⾏查找、替换、删除、插⼊、修改等操作。 sed 在 CentOS 7 及其他Unix/Linux 系统中被⼴泛应⽤于⽂本处理和⾃动化脚本中。

sed [选项] '操作命令' ⽂件
  • 选项:可选的,⽤来控制 sed 的⾏为。
  • 操作命令: sed 处理的具体操作,如替换、删除等。
  • ⽂件:需要处理的⽬标⽂件。

常用选项:

  • -e :允许在⼀条命令中指定多个 sed 操作。
  • -n :禁⽌⾃动输出每⼀⾏。只有通过显式的 p 命令才会输出。
  • -i :在⽂件中直接进⾏修改(不输出到屏幕,⽽是将修改写⼊⽂件)。
  • -r :启⽤扩展正则表达式(ERE,Extended Regular Expression)。
  • -f :从⽂件读取 sed 脚本。
相关推荐
Karoku0665 分钟前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen017 分钟前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦38 分钟前
linux 解压缩
linux·运维·服务器
牧小七2 小时前
Linux命令---查看端口是否被占用
linux
最新小梦2 小时前
Docker日志管理
运维·docker·容器
鸡鸭扣3 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu
友友马3 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
千禧年@3 小时前
微服务以及注册中心
java·运维·微服务
重生之我在20年代敲代码3 小时前
HTML讲解(一)body部分
服务器·前端·html
清水白石0084 小时前
C++使用Socket编程实现一个简单的HTTP服务器
服务器·c++·http