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的区别为:
- which命令可以在查找到二进制命令的同时,查找到帮助文档的位置在哪里;
- 而which命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令.
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
[root@localhost ~]# which find
/bin/find
[root@localhost ~]#
三、locate
按照文件名搜索普通文件的命令;
- 优点;按照数据库搜索,搜索速度快,消耗资源小.数据库位置/var/lib/mlocal/mlocate.db
- 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
[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 3月 4 20:30 a
-rw-------. 1 root root 0 3月 4 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 {} \;
- 这个选项的作用其实是把Find命令的结果交给由“-cxec”调用的命令2来处理.“{}”就代表find命令查找结果。
- 只要写了“-exec”,那么就要在命令的结尾加上“;”
##注意这里不能使用别名的命令“ll”代替ls;
[root@localhost ~]# find . -size +1k -a -type f -exec ls -lh {} \;
-rw-------. 1 root root 1.3K 2月 21 19:15 ./anaconda-ks.cfg
-rw-r--r--. 1 root root 7.4K 2月 21 19:02 ./install.log.syslog
-rw-r--r--. 1 root root 28K 2月 21 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 2月 21 18:56 yum
-rw-r--r--. 1 root root 969 5月 12 2016 yum.conf
drwxr-xr-x. 2 root root 4096 2月 21 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
通配符:用于匹配文件名,完全匹配
- ? 匹配一个任意字符
- * 匹配0个或任意多个任意字符,也就是可以匹配任何内容
- [] 匹配中括号中任意一个字符.例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
- [-] 匹配中括号中任意一个字符,-代表一个范围.例如,[a-z]代表匹配一个小写字母
- [^] 逻辑非,表示匹配不是中括号内的一个字符.例如,[^0-9]代表匹配一个不是数字的字符
正则表达式:用于匹配字符串,包含匹配
- ? 匹配前一个字符重复0次,或1次(?白鹭(是扩展正则,需要使用egrep命令)
- * 匹配前一个字符重复0次,或任意多次
- [] 匹配中括号中任意一个字符.例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
- [-] 匹配中括号中任意一个字符,-代表一个范围.例如,[a-z]代表匹配一个小写字母
- [^] 逻辑非,表示匹配不是中括号内的一个字符.例如,[0-9]代表匹配一个不是数字的字符
- ^ 匹配行首
- $ 匹配行尾
六、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
七、常用快捷键
- Tab键 命令或文件补全;
- ctrl + A 把光标移动到命令的开头;
- ctrl + E 把光标移动到命令的结尾;
- ctrl + C 强制终止当前的命令;
- ctrl + L 清屏,相当于clear命令;
- ctrl + U 删除或剪切光标之前的命令。当我们输入一个很长的命令时,不用使用退格键一个一个字符的删除;
- ctrl + Y 粘贴crtl + U复制的内容;