【网络安全】服务基础第二阶段——第二节:Linux系统管理基础----Linux统计,高阶命令
目录
一、Linux高阶命令
1.1 管道符的基本原理
1.2 重定向
1.2.1 输出重定向
1.2.2 输入重定向
1.2.3 wc命令基本用法
1.3 别名
1.3.1 which命令基本语法
1.3.2 alias命令基本语法
1.4 压缩归档tar
1.4.1 第一种:gzip压缩
1.4.2 第二种:bzip压缩
1.5 tar命令
二、VIM编辑器使用
2.1 基本命令
三、文件管理命令
3.1 find命令
3.1.1 使用正则表达式查找文件
3.1.2 结合其他命令使用
3.2 whereis命令
3.3 locate命令
3.4 whereis与locate的区别
3.5 正则表达式
四、高级查询(grep、awk、sed)
4.1 grep
4.2 awk
4.3 sed
一、Linux高阶命令
1.1 管道符的基本原理
管道符的作用是将一个命令的标准输出(stdout)重定向为另一个命令的标准输入(stdin)。这样就可以将命令结果一步步的传递给后续的命令,避免冗余的中间步骤
基本语法:
命令A | 命令B | 命令C
这意味着:
- 命令A执行并将结果输出
- 命令B接收命令A的输出作为输入,执行并输出结果
- 命令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命令的用途:
- 查找命令的路径: which 命令⽤于确定某个命令的可执⾏⽂件在系统中的具体位置。
- 检测命令是否存在:它可以告诉你某个命令是否可以在 PATH 变量中找到,从⽽判断这个命令是否存在。
- 识别别名:如果某个命令是别名, 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
每个路径由冒号 : 分隔,代表⼀个⽬录。系统会按照这些路径的顺序来搜索命令的可执⾏⽂件。让我们逐步解析这些⽬录的含义:
- /usr/local/bin :这个⽬录通常⽤来存放本地管理员安装的⽤户级别程序,即管理员⼿动安装的⼀些软件的可执⾏⽂件可能会放在这⾥,⽽不是由系统的包管理器(如 yum )⾃动安装的程序。
- /usr/local/sbin :与 /usr/local/bin 类似,但 sbin ⽬录通常存放的是系统管理员级别的⼆进制⽂件,⽐如⼀些系统管理⼯具。只有具有超级⽤户权限(如 root )的⽤户才能执⾏这些命令。
- /usr/bin :这是系统中存放⼤多数常⽤命令和应⽤程序的⼆进制⽂件的⽬录,普通⽤户和管理员都可以执⾏这些命令。⽐如 ls 、 cat 等命令可能就位于这个⽬录下。
- /usr/sbin :与 /usr/bin 类似,但 /usr/sbin 通常包含系统管理级别的命令,这些命令主要是为系统管理员使⽤的。⽐如 iptables 、 reboot 等命令会在这个⽬录中。
- /bin :这个⽬录存放了⼀些基础的可执⾏⽂件,⽆论系统处于什么状态,它们都应该是可⽤的。⽐如⼀些基本的命令如 echo 、 cp、mv 等可能会位于此⽬录。
- /sbin :类似于 /bin ,但是这⾥存放的命令通常是系统管理相关的命令,只有超级⽤户( root )才能执⾏,例如 fdisk 、 mkfs 等。
- /root/bin :这是 root ⽤户的个⼈⼆进制⽂件⽬录,供 root ⽤户使⽤的⾃定义可执⾏⽂件或脚本可以存放在此⽬录下。这是 root ⽤户⾃⼰的私⼈⽬录,不会对普通⽤户开放。
如何工作:
当你在终端中输⼊⼀个命令时(如 ls 或 echo ),系统会依次按照 PATH 中定义的这些⽬录去寻找对应的可执⾏⽂件。例如,假设你输⼊了 ls 命令:
- 系统⾸先会去 /usr/local/bin ⽬录中查找是否有 ls 命令的可执⾏⽂件。
- 如果找不到,它会继续搜索 /usr/local/sbin ⽬录。
- 依次搜索 /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 命令,显示彩⾊的⻓列表格式。
2. 查看所有已定义的别名 通过运⾏不带参数的 alias 命令,可以查看当前会话中定义的所有别名
[root@localhost Desktop]# alias
alias cp='cp -i'
……
[root@localhost Desktop]# alias -p
alias cp='cp -i'
……
3. 查看特定别名 想查看某个具体别名的定义,可以使⽤以下命令
alias 别名
例如: alias ll
4. 取消别名 使⽤ unalias 命令可以删除某个别名
unalias 别名
如果想删除所有别名,可以使用: unalias -a
5. 临时禁⽤别名 如果希望临时使⽤原始命令,⽽不使⽤定义的别名,可以在命令前加上反斜杠 \
\命令名
例如 \ls会绕过ls的别名,直接执行/bin/ls
6. 永久⽣效的别名 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 后⾸先是处于正常模式。
2. 插⼊模式/输⼊模式:
- 可以在该模式下输⼊⽂本,按键的输⼊会直接插⼊到⽂件中。
- 从正常模式进⼊插⼊模式的常⽤按键是 i 或 a 。
3. 末⾏模式:
- 在该模式下可以输⼊命令(如保存、退出、查找等)。
- 在正常模式下按 : 进⼊末⾏模式。
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 结合其他命令使用
- 统计特定类型文件的数量:查找并统计某一文件的数量,例如.txt文件:
find /path -name '*.txt' | wc -l
//这条命令会返回.txt的文件总数
- 查找并压缩文件:可以查找某类型的文件并对它们进行压缩
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 开头的⾏。
2. $ (匹配⾏尾):
- 例⼦: world$ 匹配以 world 结尾的⾏。
3. . (匹配任意单个字符):
- 例⼦: h.llo 匹配 hello 、 hallo 、 hxllo 等。
4. \ (转义字符):
- 例⼦: 3\.14 匹配字符串 3.14 ,转义 . 使其按字⾯含义解释。
5. [] (字符集合):
- 例⼦: [aeiou] 匹配任意⼀个元⾳字⺟。
6. .* (匹配任意字符序列):
- 例⼦: a.*b 匹配以 a 开头,以 b 结尾的任意字符序列,如 ab 、 a123b 、 aXYZb 。
7. {n} (精确匹配 n 次):
- 例⼦: a{3} 匹配连续的 3 个 a 字符,如 aaa 。
8. {n,} (⾄少匹配 n 次):
- 例⼦: a{2,} 匹配⾄少 2 个连续的 a 字符,如 aa 、 aaa 、 aaaa 等。
9. {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 脚本。