目录
一、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 脚本。