本文为按部就班学运维系列的基础命令篇,文章已收录gitee. 在Gitee上,点击直达 有运维技术的所有技术栈和文档,免费学习。 打造运维行业最全的知识体系,欢迎starnode
点赞再看,注意收藏,习惯养成,决胜将来mysql
Linux操做系统中关于查找的命令有不少,今天咱们着重讨论如下几个命令的使用:linux
which 查看可执行文件的位置
whereis 查看可执行文件的位置及相关文件
locate 配合数据库缓存,快速查看文件位置
grep 过滤匹配,它是一个文件搜索工具
find 查找相关文件git
关于which和whereis的用法是最简单的,主要是用来查找可执行文件位置及相关文件-咱们来看下案例:面试
[root@zmgaosh ~]# which cd/usr/bin/cd[root@zmgaosh ~]# whereis cdcd: /usr/bin/cd /usr/share/man/man1/cd.1.gz[root@zmgaosh ~]# whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
locate命令和find -name 功能差很少,是它的另一种写法,可是这个要比find搜索快的多,由于find命令查找的是具体目录文件,而locate搜索的是一个数据库/var/lib/mlocate/mlocate.db,这个数据库中存有本地全部的文件信息;正则表达式
这个数据库是Linux自动建立并天天自动更新维护。sql
/usr/bin/updatedb 主要用来更新数据库,经过crontab自动完成的 /usr/bin/locate 查询文件位置 /etc/updatedb.conf updatedb的配置文件 /var/lib/mlocate/mlocate.db 存放文件信息的文件
-b, --basename match only the base name of path names -c, --count 只输出找到的数量 -d, --database DBPATH 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db -e, --existing only print entries for currently existing files -L, --follow follow trailing symbolic links when checking file existence (default) -h, --help 显示帮助 -i, --ignore-case 忽略大小写 -l, --limit, -n LIMIT limit output (or counting) to LIMIT entries -m, --mmap ignored, for backward compatibility -P, --nofollow, -H don't follow trailing symbolic links when checking file existence -0, --null separate entries with NUL on output -S, --statistics don't search for entries, print statistics about eachused database -q, --quiet 安静模式,不会显示任何错误讯息 -r, --regexp REGEXP 使用基本正则表达式 --regex 使用扩展正则表达式 -s, --stdio ignored, for backward compatibility -V, --version 显示版本信息 -w, --wholename match whole path name (default)
[root@zmgaosh ~]# yum install mlocate && updatedb[root@zmgaosh ~]# ls 查看本地目录,有zmedu.txt文件a.sh a.txt file test zmedu.txt[root@zmgaosh ~]# locate zmedu.txt #查找zmedu.txt文件/root/zmedu.txt[root@zmgaosh ~]# touch zmeduv2.txt #建立zmeduv2.txt[root@zmgaosh ~]# locate zmeduv2.txt #查找v2但没法找到[root@zmgaosh ~]# updatedb #更新[root@zmgaosh ~]# locate zmeduv2.txt #能够看到已经找到了/root/zmeduv2.txt[root@zmgaosh ~]#
由上面的案例充分说明, 新增的文件没法locate,只有使用update后才可以快速查到。数据库
咱们来查看下updatedb的配置文件vim
[root@zmgaosh ~]# cat /etc/updatedb.conf PRUNE_BIND_MOUNTS = "yes" #是否限制搜索PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph" #对哪些后缀的文件排除检索PRUNENAMES = ".git .hg .svn"PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph" #检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索
过滤,它可以使用正则表达式来搜索文本,并把结果打印出来缓存
-v 取反 -i 忽略大小写 ^# 以#开头#$ 以#结尾^$ 空行 -n 对过滤的内容加上行号| 或者的意思
[root@zmgaosh ~]# ps -aux |grep sshd |grep -v greproot 4700 0.2 0.1 157640 6348 ? Ss 13:55 0:51 sshd: root@pts/0,pts/1 root 9315 0.0 0.1 112920 4312 ? Ss 6月17 0:00 /usr/sbin/sshd -D
这里的 grep -v grep ,就是指的不显示grep的查询语句。
若是不用grep -v grep的结果以下:
[root@zmgaosh ~]# ps -aux |grep sshd root 4700 0.2 0.1 157640 6348 ? Ss 13:55 0:51 sshd: root@pts/0,pts/1 root 9146 0.0 0.0 112732 968 pts/0 S+ 21:03 0:00 grep --color=auto sshd root 9315 0.0 0.1 112920 4312 ? Ss 6月17 0:00 /usr/sbin/sshd -D
通常状况下运维排查目前是否有后门帐号的时候可使用grep
[root@zmgaosh ~]# grep /bin/bash /etc/passwdroot:x:0:0:root:/root:/bin/bash
咱们要查询目前的nologin用户一共有多少的时候
[root@zmgaosh ~]# grep "nologin" /etc/passwd |wc -l
格式:find pathname -options [-print]
命令字 路径名称 选项 输出
find命令选项: -name 按照文件名查找文件。 “名称” -perm 按照文件权限来查找文件。 -user 按照文件属主来查找文件 -group 按照文件所属的组来查找文件 -mtime -n / +n 按照文件的更改时间来查找文件, - n 表示文件更改时间距如今n天之内 + n 表示文件更改时间距如今n天之前 -type 查找某一类型的文件 b - 块设备文件 d - 目录 c - 字符设备文件 p - 管道文件 l- 符号连接文件 f - 普通文件 -size n 查找符合指定的文件大小的文件 -exec 对匹配的文件执行该参数所给出的其余linux命令, 相应命令的形式为' 命令 {} \;,注意{ }和 \;之间的空格,{}表明查到的内容
[root@zmgaosh ~]# find . -name "*.txt"./zmedu.txt ./a.txt ./zmeduv2.txt
mtime: 文件最后一次修改的时间
atime: 最后一次访问时间
ctime: 文件的最后一次变化时间,也就是修改时间
举例: 查找root目录下更改时间在1天以内的且被修改过的文件
[root@zmgaosh ~]# find /root/ -mtime -1/root/ /root/.viminfo /root/a.sh /root/zmedu.txt /root/.mysql_history /root/a.txt /root/test /root/.bash_history /root/zmeduv2.txt /root/file[root@zmgaosh ~]#
使用exec选项
[root@zmgaosh ~]# touch {1,2,3}.bak #建立三个文件[root@zmgaosh ~]# ls1.bak 3.bak a.txt test zmeduv2.txt 2.bak a.sh file zmedu.txt[root@zmgaosh ~]# find . -name "*.bak" -exec rm {} \; #查找以.bak结尾的文件并删除[root@zmgaosh ~]# lsa.sh a.txt file test zmedu.txt zmeduv2.txt
[root@zmgaosh ~]# lsa.sh a.txt file test zmedu.txt zmeduv2.txt[root@zmgaosh ~]# find . -name "*.txt" -exec cp {} /opt \;[root@zmgaosh ~]# ls /opt/a.txt zmedu.txt zmeduv2.txt
比较符的使用: -a and 而且 -o or 或者 + 超过 - 低于
[root@zmgaosh ~]# find /etc -size +20k -a -size -50k |wc -l17
按权限查找 -perm
[root@zmgaosh ~]# find /etc -perm 755 |wc -l232
查找命令中,find和grep是用的最多的命令,在面试中也常常出现
后面我会单独写一篇文章,主要笔试题常常出现的find和grep试题