Linux学习笔记——find命令

哎呀,随着年龄的增大记性越来越差了之前学过的一些命令也就依稀记得写命令名字了(大写的监介,你懂得),趁着年前还有点时间就先把find命令简单整理一下吧,其实都知道葫芦里卖的什么药(手动哈哈)!

有人可能会说了记得名字其他不就好办了吗,直接命令行真男人(man)一下就可以拯救世界了,话虽如此,谁让本人只对女人感兴趣咧~,不扯了开始正题。

先看下find用法格式:

find   [path...] [expression]

常用选项

-name:指明要查询的文件名;

-type :指明所要查询的文件类型;

(1) l :符号文件。

(2) f:普通文件。

(3) d:目录文件。

(4) p:管道文件。

(5) c:字符设备文件,提供连续的数据流,读取数据按照先后顺序,通常不支持随机存取,比如键盘、鼠标、串口。

(6) b:块设备文件,从设备的任意位置读取一定长度的设备,也就是可以随机存取,比如硬盘、U盘、SD卡。

(7) socket:套接字文件。

-amin [+|-] time:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;

-mtime [+|-] time:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;

图片来源于网络

示例1:查询24小时内被修改过的文件,通过使用-mtime 0 即可完成操作,现在时间是2017.01.13 21:00,那0就表示从当前时间到2017.01.12 21:00这个时间之内被修改过的文件;

示例2:查询2天内/etc目录下被修改过的文件;

~]# find /etc -mtime -2     #是指01.11那天到01.13中间的时间,但是其实并不包含11日那天。

示例3:查询2天前修/etc目录被修改过的文件;

 ~]# find /etc -mtime +2     #与【-】号正相反从01.11号开始算,并包含11号当天。

-size [+|-] 文件大小:查找指定文件大小的文件;

-perm [+|-]文件权限:找符合指定的权限数值的文件或目录;

+:表示的是或的意思,比方说查找具有4755权限的文件,那如果文件权限为644也会被查询出来,因为4755中也包含了644。

-:表示的是与的意思,即属主属组和其他这三者的权限全部符合指定条件才会被选定。

-newer <参考文件或目录名>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

-maxdepth <目录层级>:这个在特定情况下也会用到,表示如果目录是多层嵌套的,那设定此值就是最大查询到的目录层数。

-nouser:查找没有属主的文件或目录;

-nogroup:查找没有属组的文件或目录;

-user <用户名>:查找属主为指定用户的文件或目录;

-group <组名>:查找属组为指定属组的文件或目录;

-path <范本样式>:指定字符串作为寻找目录的条件;

-prune :不寻找字符串作为寻找文件或目录的范本样式,此选项可以在查询的目录中选择一些不希望被查找的目录来忽略,通常跟-path搭配使用;

示例:find /  -path "/proc" -prune

最后要说的一点就是find命令还有一个额外的功能,查找完指定条件的结果之后还可以通过exec参数来与其他命令组合使用来进行返回结果的处理。

示例:查找系统中没有属主和属组的文件,并将其进行删除操作;

~]# find / -path "/proc" -prune -o -nouser -nogroup  -exec rm -rf {} \;

====****我是分割线****========****我是分割线****====

后边的例题用到grep ,为了方便可以先将其创建一个别名便于使用

~]# alias grep=egrep --color=auto

1、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();

~]# grep "\<[_[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions

2、使用echo命令输出一个绝对路径,使用grep取出其基名;扩展:取出其路径名

(1) 取基名:

~]# echo "/etc/sysconfig/network-scripts/" |grep -o "[^/]+/?$"

(2) 取路径名:

这个题如果在最后的目录分割符没有的情况使用grep比较好取,但要是实现dirname命令的所取得的结果,目前我只能使用sed来完成,grep还不知道怎么写正则表达式比较好。

~]# echo "/etc/sysconfig/network-scripts/" |sed ‘[email protected]\(^/.*\)/\([^/]\+\)/\[email protected]\[email protected]‘

3、找出ifconfig命令结果中的1-255之间数字

(1)

~]# ifconfig |grep -o "[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]"

(2) 扩展,找出内容之后进行格式化输出:

~]# ifconfig |grep -o "[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]"|sort -n|awk ‘{dig[$1]++}END{for(i in dig){printf "The digit %d\t has appears %d times\n",i,dig[i]}}‘

4、查找当前系统上没有属主或属组的文件;进一步:查找当前系统上没有属主或属组,且最近3天内曾被访问过的文件或目录;

(1)没有属主或属组

~]# find / -nouser -nogroup

(2) 在条件一的基础上在查找3天内被访问过的文件或目录

~]# find / (-nouser -o -nogroup) -atime -3

5、查找/etc目录下大于1M,且类型为普通文件的所有文件;

~]# find /etc -size +1M -type f

6、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的文件;

~]# find /etc/init.d -perm -113 -exec ls -l {} \;

7、查找/etc目录下最近一周内其内容被修改过,且不属于root或hadoop的文件;

~]# fine /etc -not \( -user root -o -user hadoop \) -mtime -7 -exec ls -l {} \;

8、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;

~]# cp -r /etc/rc.d/rc.sysinit /tmp

方法一、使用vim进行编辑操作在命令模式下操作

~]# %[email protected]^[[:space:]]\[email protected]#@

还有一种是使用\s来替代空白字符

~]# %[email protected]^\s\[email protected]#@g

注此种方法是将查找到的内容替代成#号,如果是在符合条件的行前添加#号的话应该使用后向引用

~]# %[email protected]\(^\s\+\)@#\[email protected]

还有一种方法就是可以在不用打开文件的情况下完成以上操作

~]# sed -i -r ‘[email protected]^[[:space:]][email protected]#&@‘ /tmp/rc.sysinit

注意:此操作在生产环境中尽量先测试一下再将文件中的内容替换掉,以防后悔!

9、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符

同第8题

方法一、在vim命令模式下操作

~]# %[email protected]^#\s\[email protected]@g /tmp/rc.sysinit

方法二、使用sed编辑替换

~]# sed -i -r ‘[email protected]^#[[:space:]][email protected]@‘ /tmp/rc.sysinit

10、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;

方法一、vim打开文件在命令模式全局替换

~]# %[email protected]\(enabled|gpgcheck\)\[email protected]\[email protected]

方法二、使用sed处理非常便捷,但是不熟练的话,还是先测试没问题之后再使用-i选项进行写入操作吧

~]# sed -r -i ‘[email protected]\(enabled|gpgcheck\)\[email protected]\[email protected]‘ /etc/yum.repos.d/CentOS-Media.repo

11、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20161202

使用vim 编辑/etc/crontab文件

~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  0  0  *  *  2,4,6  root dd if=/var/log/messages of=/backup/messages_logs/messages-`date +%Y%m%d`

12、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中

使用vim 编辑/etc/crontab文件

~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  0 */2  *  *  *  root  grep "^S.*" /proc/meminfo >>/tmp/memory.txt

13、写一个脚本创建10用户user10-user19;密码同用户名

~]# mkdir scripts
~]# vim addUser.sh
#!/bin/bash
#
#Program: Automatically create user scripts
#History:
#Author: Bing Version:0.0.1 2017-01-13 15:52
   for i in {1..9};do
       if ! `id user$i &>/dev/null`;then
           useradd user$i &>/dev/null && echo "user$i"|passwd --stdin user$i &>/dev/null && echo "user$i create success!"
       else
           userdel -r user$i &>/dev/null && echo "user$i delete success!"
       fi
   done
时间: 2024-12-23 03:06:55

Linux学习笔记——find命令的相关文章

linux学习笔记-type命令

语法: type [-tpa] name 参数: type:    不加任何参数时,type会显示出name是外部命令还是内部bash内置命令 -t:      当加入-t参数时,type会将name以下面这些字眼显示出它的意义 file:表示为外部命令 alias:表示该命令为命令别名所设置的名称 builtin:表示该命令为bash内置的命令功能 -p:     如果后面接的name为外部命令时,才显示完整文件名 -a:     会有path变量定义的路径中,将所有含有name的命令都列出来

linux学习笔记——基础命令、快捷键与认识虚拟机

虚拟机[[email protected] Desktop]$ rht-vmctl start desktop     ###开启Starting desktop.[[email protected] Desktop]$ rht-vmctl view desktop    ##显示[[email protected] Desktop]$ rht-vmctl stop desktop    ##正常关闭虚拟机[[email protected] Desktop]$ rht-vmctl powero

Linux学习笔记——常用命令(一)

Linux分区的四个基本步骤: 1)分区:硬盘划分为逻辑分区 2)格式化逻辑分区(写入文件系统) 3)分区设备文件名:给每个分区定义设备文件名 4)挂载点:给每个分区分配挂载点 注意事项: 1)必须分区: /   /boot  /swap 2)一块硬盘最多4个分区,最多1个扩展分区,扩展分区又可以包含多个逻辑分区 设置密码原则: 1)复杂性 2)易记性 3)时效性 目录usr(unlix software resource) 防火墙:用来过滤,制定一系列的规则(IP.MAC.端口等) Linux

Linux学习笔记--which命令(搜索命令的命令)

which,哪一个的意思,作用是从PATH环境变量指定的路径中,搜索命令所在位置及命令别名. which命令特点: 1) "which" 命令只能查找系统命令,不能搜索普通文件. 2) "which" 命令是从PATH环境变量指定的路径中,搜索某个系统命令的位置, 并且返回第一个搜索结果. PATH环境变量: PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,用":"隔开,当您运行一个命令时,Linux在这些目录下

Linux学习笔记--locate命令(文件搜索命令)

locate,定位的意思,作用是让使用者可以快速的搜寻系统中是否有指定的文件. locate 命令特点: 1) "locate"的速度比"find"快,因为它并不是真的查找文件,而是查数据库. 2) 新建的文件,我们立即用"locate"命令去查找,一般是找不到的, 因为数据库的更新不是实时的,数据库的更新时间由系统维护. 3) "locate"命令所搜索的后台数据库在"/var/lib/mlocate"这

Linux学习笔记9--touch命令使用

NAME       touch - change file timestamps --改变文件的时间记录 SYNOPSIS       touch [OPTION]... FILE... DESCRIPTION       Update  the  access and modification times of each FILE to the current       time. --使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间. Mandatory argume

Linux学习笔记--rm命令(删除文件或目录)

rm:英文名remove,删除的意思. 1. 命令格式: rm [选项] 文件或目录 2. 常用选项: "rm -f" 强行删除,忽略不存在的文件,不提示确认.(f为force的意思) "rm -i" 进行交互式删除,即删除时会提示确认.(i为interactive的意思) "rm -r" 将参数中列出的全部目录和子目录进行递归删除.(r为recursive的意思) "rm -v" 详细显示删除操作进行的步骤.(v为verbo

Linux学习笔记--ln命令(链接命令)

ln:英文名link,链接的意思. Linux 系统中有软链接和硬链接两种特殊的"文件". 硬链接特征: 1) 硬链接文件跟源文件拥有相同的i(inode)节点和存储block块, 它们可以看作是同一个文件. 2) 可通过i节点进行识别(i节点相同). 3) 链接文件和源文件必须在相同的分区,不能跨分区. 3) 不能针对目录创建硬链接. (这个虽然Linux ln命令帮助说明里说可以用"ln -d"创建目录的硬链接, 但是本人实测不可行,本人在网上搜索出来了一段详细

Linux学习笔记:命令(三)

linux常用命令 1.查看当前yum源 yum list 2.查看电脑以及操作系统的相关信息 uname -a 3.查看当前版本信息 cat /proc/version 4.查看发行版本信息 cat /etc/issue 5.查看当前正在运行的进程. ps [选项] 详见文档 6.Hostname临时生效 hostname Hadoop-DN-01 7. bash命令 现在的shell界面,重新加载系统配置. 8.安装rar命令 yum install -y rar 9.解压rar文件 rar

Linux学习笔记:命令(一)

linux常用命令 1.关机 shutdown -h now 立刻关机 poweroff shutdown -r now 立刻重启 reboot logout 注销 2.进入图形界面 startx 3.vi编辑器 [vi] [path]/[file]: [i]进入编辑模式: [esc]进入命令模式: [:wq]保存并退出:[:q!]退出不保存. 4.显示列表 ls 列表 ls -l 详细列表 长列表格式 ls -a 显示隐藏文件 ll 详细列表 ls -l /bin/*sh 列表bin目录中以s