Linux常用命令06:whereis-which-locate-find-grep-alias

搜索命令

一、whereis

搜索系统命令的命令;即whereis 不能搜索普通文件,只能搜索系统命令

[root@localhost ~]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@localhost ~]# whereis mysql
mysql: /usr/lib64/mysql /usr/share/mysql
[root@localhost ~]# 

二、which

也是搜索系统命令的命令,和whereis的区别为:

  1. which命令可以在查找到二进制命令的同时,查找到帮助文档的位置在哪里;
  2. 而which命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令.
[root@localhost ~]# which ls
alias ls='ls --color=auto'
	/bin/ls
[root@localhost ~]# which find
/bin/find
[root@localhost ~]# 

三、locate

按照文件名搜索普通文件的命令;

  1. 优点;按照数据库搜索,搜索速度快,消耗资源小.数据库位置/var/lib/mlocal/mlocate.db
  2. 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
[root@localhost ~]# locate abcd
/root/abcd
[root@localhost ~]# touch efg
[root@localhost ~]# ls
abc   ab.tar.gz        efg          install.log.syslog  test.zip
abcd  anaconda-ks.cfg  install.log  test
[root@localhost ~]# locate efg
[root@localhost ~]# updatedb
[root@localhost ~]# locate efg
/root/efg
[root@localhost ~]# 

注意:由于locate查询的是数据库,而数据库中的数据是需要更新后才可以查询的到;所以如上所示,在root目录下新建一个文件efg,马上使用locate查询,是查询不到的。如果需要使用locate查询到该文件,那么有两种方式:1:退出linux系统,重新登录;2:使用updatedb命令强制更新mlocate.db数据库;

[root@localhost ~]# ls /tmp
abc
[root@localhost ~]# touch /tmp/efg
[root@localhost ~]# ls /tmp
abc  efg
[root@localhost ~]# updatedb
[root@localhost ~]# locate efg
/root/efg
[root@localhost ~]# 

注意:在/tmp下创建文件,并使用locate搜索时,是无法看到的;原因是locate命令的配置文件中有配置禁止搜索/tmp目录下的所有内容,如果想搜索,那么需要修改配置文件/etc/updatedb.conf,并重启服务器;

[root@localhost ~]# vi /etc/updatedb.conf

在这里插入图片描述
在这里插入图片描述

四、find

1. 按照文件名查询

-name	按照文件名搜索.
-iname	按照文件名称搜索,不区文件名的大小写.
-num	按照文件的inode号码搜索.

实例:

[root@localhost ~]# touch abc
[root@localhost ~]# ls
abc  anaconda-ks.cfg  install.log  install.log.syslog
[root@localhost ~]# find . -name abc
./abc
[root@localhost ~]# touch abcd
[root@localhost ~]# find . -name abc
./abc
[root@localhost ~]# 

查找“abc”就只能找到“abc”,“abcd”的文件是找不到的!

##知道文件名,查询该文件的inode号
[root@localhost ~]# ls -i abc
795495 abc
##知道inode号,查询该文件的文件名
[root@localhost ~]# find . -inum 795495
./abc
[root@localhost ~]# 

2. 按照文件大小搜索

-size [+-]大小

“k”必须小写“K”兆单位必须大写“M”;

[root@localhost ~]# find . -size +20k
./install.log

[root@localhost ~]# find . -size +1M

在这里插入图片描述

3. 按照修改时间搜索

Linux中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个
时间,我们也可以按照时间来搜索文件.

-atime [+|-]时间	按照文件访问时间搜索
-mtime [+|-]时间	按照文件修改时间搜索
-ctime [+|-]时间	按照文件创建时间搜索

用Mtime数据修改时间来举例,说明“[±]”时间的含义:

-5:代表5天内修改的文件.
·5:代表前5~6天那一天修改的文件。
+5:代表6天前修改的文件。

在这里插入图片描述

4. 按照权限搜索

-perm 权限	查找文件权限刚好等于“权限”的文件
-perm -权限	查找的文件(用户权限、用户组权限、其他权限,三个权限都大于等于给出的“权限”的文件。
-perm +权限	查找的文件(只要用户权限、用户组权限、其他权限中的任意一个大于等于给出的“权限”的文件,即可。
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test/
[root@localhost test]# touch a
[root@localhost test]# touch b
[root@localhost test]# chmod 600 b
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 34 20:30 a
-rw-------. 1 root root 0 34 20:30 b
[root@localhost test]# find . -perm 444
[root@localhost test]# find . -perm +444
.
./b
./a
[root@localhost test]# find . -perm -444
.
./a
[root@localhost test]# 

5. 按照文件类型

-type d	按照目录搜索
-type f	按照文件搜索
-type l	查找软链接文件
[root@localhost ~]# find . -type d
.
./test
[root@localhost ~]# find . -type f

6. 逻辑运算符

-a		and逻辑与
-o		or逻辑或
-not	not逻辑非
#查询文件大小大于1kb且类型是文件的文件;
[root@localhost ~]# find . -size +1k -a -type f
./anaconda-ks.cfg
./install.log.syslog
./install.log
[root@localhost ~]# 
[root@localhost ~]# find . -name abc
./abc
### -not是取反的意思
### 待查找文件类型为文件,且文件名不是abc的文件
[root@localhost ~]# find . -not -name abc -a -type f
###等价于下面的命令,即-not 可以直接用“!”代替;
[root@localhost ~]# find . ! -name abc -a -type f

7. exec选项

###语法格式
find 查找路径 [选项] 搜索内容 -exec 命令2 {} \;
  1. 这个选项的作用其实是把Find命令的结果交给由“-cxec”调用的命令2来处理.“{}”就代表find命令查找结果。
  2. 只要写了“-exec”,那么就要在命令的结尾加上“;”
##注意这里不能使用别名的命令“ll”代替ls;
[root@localhost ~]# find . -size +1k -a -type f -exec ls -lh {} \;
-rw-------. 1 root root 1.3K 221 19:15 ./anaconda-ks.cfg
-rw-r--r--. 1 root root 7.4K 221 19:02 ./install.log.syslog
-rw-r--r--. 1 root root 28K 221 19:14 ./install.log
[root@localhost ~]# 

###删除/temp/log目录下的10天前创建的所有文件和目录;
[root@localhost ~]# find /temp/log -ctime +10 -exec rm -rf {} \;

8. -ok

-ok“选项和”-exec“选项的作用基本一致,区别在于:”-exec“的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后(手动输入“y”),才会执行.

###删除/temp/log目录下的10天前创建的所有文件和目录;
[root@localhost ~]# find /temp/log -ctime +10 -ok rm -rf {} \;

9. |(管道符)

命令1 | 命令2

实例1:当使用“ll -a /etc”查看目录下的文件时,由于文件数量过多,可能显示不完全,且查看麻烦,那么我们就可以使用:“ll -a /etc | more”,将命令1查询出来的文件放在一个临时文件(虚拟的)中,然后再以more的形式分页显示:

[root@localhost ~]# ll -a  /etc | more

实例2:查找文件(加了管道符,那么命令1的结果就是文本流。)

[root@localhost ~]# ll -a  /etc | grep "yum"
drwxr-xr-x.   5 root root   4096 221 18:56 yum
-rw-r--r--.   1 root root    969 512 2016 yum.conf
drwxr-xr-x.   2 root root   4096 221 18:56 yum.repos.d

实例3:网络端口查询

[root@localhost ~]# netstat -an|grep ESTABLISHED
tcp        0      0 10.10.8.192:22              10.10.8.18:19872            ESTABLISHED 
tcp        0     64 10.10.8.192:22              10.10.8.18:9785             ESTABLISHED 
root@localhost ~]# netstat -tuln|grep 60
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:6010                    :::*                        LISTEN      
tcp        0      0 ::1:6011                    :::*                        LISTEN      
[root@localhost ~]# 

五、grep

grep的作用是在文件中提取和匹配符合条件的字符串行.命令格式如下:

-i	忽略大小写
-n	输出行号
-v	反向查找
--color=auto	搜索出的哦关键字用颜色显示

find命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配。搜索时文件名是完全匹配的(查找命令可以通过-regex选项,把匹配规则转为正则表达式规则,但是不建议如此)。
grep命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配.搜索时字符串是包含匹配的.

[root@localhost ~]# cat abc
11111111111
22222222
233332 efg
244444 efg
45544 Efg
## 搜索文件内容中含有“ef”且忽略大小写,并显示搜索结果在原始文件的行号
[root@localhost ~]# grep -in "ef" abc
3:233332 efg
4:244444 efg
5:45544 Efg
## 搜索文件内容中不含有“ef”且忽略大小写,并显示搜索结果在原始文件的行号
[root@localhost ~]# grep -inv "ef" abc
1:11111111111
2:22222222

通配符:用于匹配文件名,完全匹配

  1. ? 匹配一个任意字符
  2. * 匹配0个或任意多个任意字符,也就是可以匹配任何内容
  3. [] 匹配中括号中任意一个字符.例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
  4. [-] 匹配中括号中任意一个字符,-代表一个范围.例如,[a-z]代表匹配一个小写字母
  5. [^] 逻辑非,表示匹配不是中括号内的一个字符.例如,[^0-9]代表匹配一个不是数字的字符

正则表达式:用于匹配字符串,包含匹配

  1. ? 匹配前一个字符重复0次,或1次(?白鹭(是扩展正则,需要使用egrep命令)
  2. * 匹配前一个字符重复0次,或任意多次
  3. [] 匹配中括号中任意一个字符.例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
  4. [-] 匹配中括号中任意一个字符,-代表一个范围.例如,[a-z]代表匹配一个小写字母
  5. [^] 逻辑非,表示匹配不是中括号内的一个字符.例如,[0-9]代表匹配一个不是数字的字符
  6. ^ 匹配行首
  7. $ 匹配行尾

六、alias

该命令是为了照顾管理员习惯的;

[root@localhost ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]# 

自定义别名:

例如将服务器网络重启命令的别名定义为“ser”,那么只需要输入“ser”即可重启网络:

[root@localhost ~]# alias ser='service network restart'

在这里插入图片描述注意:重起的别名,不要跟系统命令重叠;
如果要永久生效,那么需要写入到系统文件~/.bashrc中!否则,当服务器重启,那么刚才创建的别名将会失效!

[root@localhost ~]# ls -a
.   abc   anaconda-ks.cfg  .bash_logout   .bashrc  install.log         .tcshrc  .Xauthority
..  abcd  .bash_history    .bash_profile  .cshrc   install.log.syslog  test
[root@localhost ~]# vi .bashrc

在这里插入图片描述

七、常用快捷键

  1. Tab键 命令或文件补全;
  2. ctrl + A 把光标移动到命令的开头;
  3. ctrl + E 把光标移动到命令的结尾;
  4. ctrl + C 强制终止当前的命令;
  5. ctrl + L 清屏,相当于clear命令;
  6. ctrl + U 删除或剪切光标之前的命令。当我们输入一个很长的命令时,不用使用退格键一个一个字符的删除;
  7. ctrl + Y 粘贴crtl + U复制的内容;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值