14.Linux文件查找与编辑器使用
1、文件查找命令
1.1、which命令
which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令,此命令会去搜索$PATH环境变量中的目录路径。
可以使用echo $PATH查看环境变量:
echo $PATH
which命令中的路径使用":"号分隔,which命令会在这些路径下去搜索。
which是根据使用者所配置的$PATH变量内的目录去搜寻可运行档的。所以,不同的$PATH配置内容所找到的命令会不一样。
语法: which [系统命令]
which pwd
which adduser
1.2、whereis命令
whereis与which功能相似,都可以查找到命令的绝对路径。不同的是which会列出这个命令的别名记录,而whereis会显示出这个命令的帮助文档所在位置。
语法:whereis [选项] [系统命令]
选项:
-b:只查找二进制文件;
-B<目录>:只在设置的目录下查找二进制文件;
-f:不显示文件名前的路径名称;
-m:只查找说明文件;
-M<目录>:只在设置的目录下查找说明文件;
-s:只查找原始代码文件;
-S<目录>只在设置的目录下查找原始代码文件;
-u:查找不包含指定类型的文件。
whereis命令只能用于程序名的搜索,如果省略选项,则返回所有信息。如果程序没安装,则whereis找不出来,不显示任何目录。
1.3、locate命令
locate命令Linux所特有的命令,寻找文件或目录,最好用于快速定位系统命令,配置文件等。locate是在文件数据库中查找,搜索速度很快,如果数据库没有包含这个文件就会找不到。
格式:locate [搜索关键字]
配合:updatedb建立整个系统目录文件的数据库(其执行权限为:root)
备注:
当在某些目录下创建文件,然后更新数据库之后,并不能用locate命令查找到,原因是系统在更新数据库的配置文件中,设置了一些搜索限制,所以搜索不到。
输入如下命令可以看到:
vi /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"表示开启搜索限制,"no"表示不开启搜索限制;
PRUNEFS = 表示搜索时,不搜索的文件系统;
PRUNENAMES = 表示搜索时,不搜索的文件类型;
PRUNEPATHS = 表示搜索时,不搜索的路径;
locate、whereis、which命令都遵循搜索限制。
1.4、find命令
find命令用于:在一个目录(及子目录)中搜索文件,可以指定一些匹配条件,如按文件名、文件类型、用户等条件查找文件
语法:find [搜索路径] [搜索选项] filename
选项说明:
-name filename 查找名为filename的文件
-size +/-大小 按照文件大小来查找,+大于,-小于
-user username 按文件所属查找
-ctime -atime -mtime (以天为单位)
-cmin -amin -mmin (以分钟为单位)
-type 按文件的类型
-inum 根据i节点进行查找
-group 组名 按所属组来查找
-a and 逻辑与 -o or 逻辑或
-exec 或 -ok command {} ; 将查到的文件执行command操作,{}和;之间有空格,固定格式。
提示:如果find命令省略路径不写,表示从当前路径开始查找,find可以结合通配符使用。
1.4.1、find命令:-name选项
命令:find /etc -name 文件名
注意:尽量缩小查找范围,不要在根目录下查找(1、查找速度非常慢;2、占用大量系统资源)。占用系统资源越少越好,而且尽量在服务器压力较小时用find进行查找。
find -name查找结果与Windows的不同:Windows会把所有包含init关键词的文件全都列出来,Linux只会匹配init关键词。
使用通配符:
*:用于匹配任意字符
find /etc -name init* # 查找所有以init开头的文件
find /etc -name init # init左右都没有空格,用于查找所有包含init关键词的 文件
?:用于匹配单个字符
find /etc -name init??? # 这个文件会有七个字符
1.4.2、ffind命令:-size 选项
命令:find /etc -size 文件大小
文件大小:以数据块为单位的,512字节 = 0.5KB, 1K = 2Blocks。
find /etc -size +204800 # 在/etc下查找大于80MB大于100MB的文件
find /etc -size -204800 # 在/etc下查找大于80MB小于100MB的文件
find /etc -size 204800 # 在/etc下查找等于100MB的文件,不常用!
find /etc -size +10k # 在/etc下查找大于10K的文件
1.4.3、find命令:-user 选项
命令:find /etc -user username 查找属于username的文件。
1.4.4、 find命令:- 时间选项
以天为单位:ctime,atime,mtime
以分钟为单位:cmin,amin,mmin # 更为常用
c-change改变:表示文件的属性被修改过,所有者,所属组,权限
access访问:文件被浏览过
m-modify修改:文件内容被修改过
- 多长时间之内
+ 超过多少时间
find /etc -mtime -1 //查找/etc目录下一天之内文件内容被修改过的文件
find /etc -amin -60 //查找/etc目录下60分钟内被浏览过的文件
find /home -cmin -120 //查找/home目录下2小时内文件属性属性被修改过的文件
1.4.5、find命令:-type选项
命令:find /etc -type 文件类型
文件类型:
f 二进制文件
l 软链接文件
d 目录
find /etc -type f
find /etc -type l
1.4.6、find命令:-inum选项
find -inum:根据i节点进行查找。
1.4.7、find命令:-group 选项
find -group:根据用户组的名称查找。
1.4.8、find命令:-逻辑与、或选项
-a:and 逻辑与
-o:or 逻辑或
find /etc -size +163840 -a -size 204800 # 查找>80M,<100M的文件
find /etc -name init* -a -type f # 查找名为init并且为二进制的文件,并不包含目录
1.4.9、find命令:-exec 选项¶
命令:find [路径] [选项] -exec [命令] {} ; # 固定格式
{}:find的查询结果
\ :转义符-使得符号命令使用本身的含义
; :语句结束(英文分号)
find /etc -name inittab -exec ls -l {} \; # 在/etc下查找inittab文件并显示其详细信息
find /home -user sax -exec rm -rf {} \; # 删除用户sax所有的文件
1.4.10、which、whereis、locate、find的区别
1.which:常用于查找可直接执行的命令。只能查找可执行文件,该命令基本只在$PATH路径中搜索,查找范围最小,查找速度快。默认只返回第一个匹配的文件路径,通过选项-a可以返回所有匹配结果。
2.whereis:不只可以查找命令,其他文件类型都可以(man中说只能查命令、源文件和man文件,实际测试可以查大多数文件)。在$PATH路径基础上增加了一些系统目录的查找,查找范围比which稍大,查找速度快。可以通过-b选项,限定只搜索二进制文件。
3.locate:超快速查找任意文件。它会从linux内置的索引数据库查找文件的路径,索引速度超快。刚刚新建的文件可能需要一定时间才能加入该索引数据库,可以通过执行updatedb命令来强制更新一次索引,这样确保不会遗漏文件。该命令通常会返回大量匹配项,可以使用-r选项通过正则表达式来精确匹配。
4.find:直接搜索整个文件目录,默认直接从根目录开始搜索,建议在以上命令都无法解决问题时才用它,功能最强大但速度超慢。除非你指定一个很小的搜索范围。通过-name选项指定要查找的文件名,支持通配符。
2、grep、管道、重定向
2.1、grep命令
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
说明:
-E选项使用正则表达式
在多个文件中查找 grep xxx file_1 file_2 file_3…
输出包含匹配字符串的行数 -n 选项
统计文件或者文本中包含匹配字符串的行数 -c 选项
2.2、管道符 |
|:管道符的作用,将左边的输出当右边的输入。
2.3、输出重定向
>:将输出重定向到文件。
>>:将输出重定向追加到文件。
3、文件打包、解包命令
-cvf、-xvf:
tar -cvf 打包文件名.tar 被打包的文件/路径
-c 创建一个新的归档
-v 详细地列出处理的文件
-f 使用归档文件
-x 将打包过的文件解包
tar -xvf 打包过的文件.tar
提示:-f 选项必须放在最后面
4、压缩、解压命令
4.1、gzip命令:-zcvf、-zxvf
gzip一般跟.tar一起使用,完成打包压缩。
tar只负责打包并没有做压缩,使用-zcvf、-zxvf选项可以调用gzip压缩命令,完成打包压缩。使用gzip打包压缩的文件名,一般命名成xxx.tar.gz区别与其他文件。
压缩文件:
tar -zcvf xxx.tar.gz A.. B.. C..
解压缩文件(当前文件夹):
tar -zxvf xxx.tar.gz
解压缩到指定路径
tar -zxvf xxx.tar.gz -C 目标路径
-C:指定解压到的路径目录(解压的目录必须存在)
4.2、bzip2命令:-jcvf -jxvf
bzip2使用方式跟gzip差不多,也是由tar去调用,使用-jcvf、-jxvf选项
bzip2压缩的文件命名采用 xxx.tar.bz2
压缩文件:
tar -jcvf xxx.tar.gz A.. B.. C..
解压缩文件(当前文件夹):
tar -jxvf xxx.tar.gz
解压缩到指定路径
tar -jxvf xxx.tar.gz -C 目标路径
-C:指定解压到的路径目录(解压的目录必须存在)
5、Ubuntu软件管理
软件安装:
sudo apt install [软件包]
软件更新:
sudo apt upgrade [软件包]
软件卸载:
sudo apt remove [软件包]
6、vim编辑器
安装Vim:
sudo apt install vim
vim三种模式:命令模式、插入模式、末行模式。
6.1、命令模式
使用vim打开文件的时候,就进到命令模式。
vim filename: 打开或新建文件,并将光标置于第一行首
vim+n filename :打开文件,并将光标置于第n行首
vim + filename :打开文件,并将光标置于最后一行首
vim + /pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vim - r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vim filename…filename :打开多个文件,依次进行编辑
命令模式下只能输入命令不能进行编辑,只有进入输入模式才能做文件编辑。
6.2、插入模式
插入文本类命令:
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
6.3、末行模式
退出及保存:
: q 退出
: q! 退出并不保存
: w 保存
: wq 退出并保存
: x 退出并保存
替换:
: n1, n2s /word1/word2/g 将n1行到n2行中word1替换成word2, g表示全部替换,不加g则只替换匹配中的第一个;
: 1, $s /word1/word2/g 从第一行到最后一行寻找word1字符串,并将该字符串取代为word2(常用);
: 1, $s /word1/word2/gc 从第一行到最后一行寻找word1字符串,并将该字符串取代为word2,且在取代前显示提示字符给用户确认是否需要替换(常用)。
总结
生活中到处都是检索的场景,Windows和Linux系统中也要经常查找文件,一般都是通过命令进行查找。