LiangGaRy-学习笔记-Day16

1、文件查找相关的命令

1.1、which命令

作用:用于查找命令的绝对路径

语法:which + 选项 + 命令

#查看ls命令
[root@Node1 ~]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls

1.2、whereis命令

作用:查找命令的路径以及相关信息

语法:whereis + 选项 + 命令

选项:

  • -b:只搜索二进制文件
  • -m:搜索手册文件
  • -s:搜索源文件
#查找ls命令
[root@Node1 ~]# whereis  ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

1.3、locate命令

作用:查找文件的路径

  • 这个命令是基于/var/lib/mlocate/mlocate.db库来搜索的
  • 其中/etc/updatedb.conf这个文件制定了更新时间
  • /etc/con.daily/mlocate:这里指定了更新得频率

语法:locate+ 选项 + 文件

#更新库
[root@Node1 ~]# updatedb
[root@Node1 ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
.........

1.4、grep命令

作用:查找文件内容的匹配关键词

语法:grep+ 选项+文件名

选项:

  • -v:取反
  • -i:忽略大小写
  • -n:加上行号
  • -c:统计行号
  • -o:指定匹配名字
  • -E:支持特使符号

可以配合正则使用

  • ^$:表示空行
  • ^#:表示以#号开头的
  • #$:表示以#号结尾
  • |:管道符
#查找sshd的进程
[root@Node1 ~]# ps -aux | grep sshd

#查找sshd进程,但是不包括grep命令-->-v取反
[root@Node1 ~]# ps -aux | grep sshd | grep -v grep

#查找/etc/passwd文件中liangjiawei用户
[root@Node1 ~]# grep "liangjiawei" /etc/passwd
liangjiawei:x:1000:1000:liangjiawei:/home/liangjiawei:/bin/bash

#查找以bash结尾的行
[root@Node1 ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
.............

#查找root开头的的行
[root@Node1 ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash

#查找文件当中的空行
[root@Node1 ~]# grep "^$" /etc/passwd

#多条件查询-->使用E选项-->支持多条件查询
[root@Node1 ~]# grep -E "bash$|^$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
........

#或者是使用egrep命令-->支持多条件查询
[root@Node1 ~]# egrep "bash$|^$" /etc/passwd
root:x:0:0:root:/root:/bin/bash

#忽略大小写地查询-->查找root开头的
[root@Node1 ~]# grep -i "^ROOT" /etc/passwd 
root:x:0:0:root:/root:/bin/bash

#统计root在文件中出现多少行
[root@Node1 ~]# grep  "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@Node1 ~]# grep -c "root" /etc/passwd
2

#统计passwd文件的行数
[root@Node1 ~]# grep -c "$" /etc/passwd
21
[root@Node1 ~]# grep -c "^" /etc/passwd
21
[root@Node1 ~]# grep -c ".*" /etc/passwd
21
[root@Node1 ~]# echo "$(cat /etc/passwd | wc -l)"
21
[root@Node1 ~]# echo "$(cat /etc/passwd | wc -l)" | bc

#统计文件中root的个数
[root@Node1 ~]# grep -o "root"  /etc/passwd | wc -l
4
	#统计nologin的个数
[root@Node1 ~]# grep -o "nologin"  /etc/passwd | wc -l
15

1.5、find命令

作用:用于在指定的目录中查找文件

语法:find + 路径 + 选项 + 内容 + 输出

选项:

  • -name:指定文件名查找
  • -perm:指定文件权限查找
  • -user:指定所有者查找
  • -group:指定所属组查找
  • -mtime:按照文件的更改时间来查找文件
    • -n:文件更改距离现在N天之内
    • +n:文件更改距离现在N天以前
  • -atime:文件最后一次访问的时间
  • -ctime:文件权限最后一次修改的时间
  • -type:指定文件类型
    • f: 文件
    • d: 目录
    • c: 字符设备
    • l: 链接文件
    • p:管道文件
  • -size:按照文件大小
  • find + 文件路径 - 选项 -exec 命令 {};–>固定格式
  • -a:必须满足两个条件才能显示
  • -o:只需要满足一个条件就能够显示
  • –maxdepth:按照目录的深度查找
#创建基础环境
[root@Node1 ~]# cd test/
[root@Node1 test]# ls
aa.txt  a.txt  bb.txt  disk.log  error.txt  passwd.txt  right.txt

#查找文件
[root@Node1 test]# find /root/test/ -name error.txt 
/root/test/error.txt

#查找.txt结尾的文件,并且长格式显示
[root@Node1 test]# find ./  -name "*.txt"  -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Jun 24 14:23 ./aa.txt
-rw-r--r-- 1 root root 18 Jun 24 14:17 ./a.txt
.............

#查找1天前访问的文件
[root@Node1 ~]# find /root/test/ -mtime -1

#查找.txt结尾的文件,并且删除
[root@Node1 ~]# find /root/test/ -name "*.txt" -exec rm -rf {} \;

#xargs和find命令结合操作
[root@Node1 ~]# find /root/test/ -name "*.txt"  |xargs  ls -l
-rw-r--r-- 1 root root 0 Jun 25 14:09 /root/test/1.txt
-rw-r--r-- 1 root root 0 Jun 25 14:09 /root/test/2.txt
.......

#或者-o的用法;查找目录下有.sh和.pdf的文件
[root@Node1 ~]# find /root/test/ -name "*.sh" -o -name "*.pdf"
/root/test/a.sh
......
/root/test/D.pdf

#查找/etc/目录下,大于20k并且小于50K的文件
[root@Node1 ~]# find /etc/ -size +20k -a -size -50k | wc -l
18

#权限查找-->系统中至少777的文件或者目录
[root@Node1 ~]# chmod 777 /root/test/a.sh 
[root@Node1 ~]# chmod 4777 /root/test/b.sh 
[root@Node1 ~]# find /root/test/ -perm 777
/root/test/a.sh

#查找不低于777的文件
[root@Node1 ~]# find /root/test/ -perm -777
/root/test/a.sh
/root/test/b.sh

#查找目录深度,1
[root@Node1 ~]# find /bin/ -maxdepth 1 -perm 755 | wc -l
703

1.6、xargs命令

作用:用于给其他命令传递参数的一个过滤器;

语法:命令 | xargs 选项 命令

选项:

  • -a:从文件中读入作为stdin
  • -d:自定义参数分隔符
  • -i:逐行处理
  • -t:在执行之前详细打印命令
[root@Node1 ~]# find /root/test/ -name "*.txt" | xargs -i ls

2、命令判断符号

2.1、;分号

前面的命令不管成功与否,都不会影响后面命令的执行;

用法:命令 | 命令

#不管前面执行怎么样,后面都一样会执行
[root@Node1 ~]# ls slkjdflsdkj; echo yes
ls: cannot access slkjdflsdkj: No such file or directory
yes

[root@Node1 ~]# ls /root/ ; echo "Yes"
anaconda-ks.cfg  test
Yes

2.2、&&双与号

前面的命令执行成功了,后面的命令才会执行;

语法: 命令 && 命令

#前面报错,后面是不会执行的
[root@Node1 ~]# ls slkjdflsdkj  && echo yes
ls: cannot access slkjdflsdkj: No such file or directory

#只有前面执行成功,后面命令才会执行
[root@Node1 ~]# ls /root/ &&  echo "Yes"
anaconda-ks.cfg  test
Yes

2.3、||双竖杆

前面的命令执行失败了,后面的命令才会执行;

前面的命令执行成功了,后面的命令就不执行;

语法:命令 || 命令

#前面执行了成功了,后面不会执行
[root@Node1 ~]# ls /root/ ||  echo "Yes"
anaconda-ks.cfg  test

#前面执行失败了,后面才会执行
[root@Node1 ~]# ls slkjdflsdkj  ||  echo yes
ls: cannot access slkjdflsdkj: No such file or directory
yes

3、条件语句

3.1、if语句说明

单分支语句:

if  [  条件 ];then
	命令
fi

双分支语句:

if [ 条件 ];then
	命令1
else
	命令2
fi

多分支语句:

if [ 条件1 ];then
	命令1
elif [ 条件2 ];then
	命令2
elif [ 条件3 ];then
	命令3
.....................
else
	命令n
fi

3.2、常见的判断

shell常见的判断:

比较字符:

  • -eq:等于
  • -ne:不等于
  • -ge:大于等于
  • -gt:大于
  • -lt:小于
  • -z:空串
  • =:两个字符相等
  • !=:两个字符不等
  • -n:非空串

文件相关的判断语句

  • -r:可读为真
  • -w:可写为真
  • -x:可执行为真
  • -f:存在文件为真
  • -d:是目录为真
  • -e:如果文件存在为真

4、脚本实战

4.1、测试主机在线脚本

  • 测试主机在线脚本变形
#编辑脚本
[root@Node1 sh]# vim ping_v1.sh
#!/bin/bash
#Author By Liangjiawei
#Time:2023年5月27日
#Usage:测试在线脚本
#命令检测ip,$1代表的是用户输入的IP
ping -c1 -w1 $1 &> /dev/null
#把结果的代码值赋予num
num=$?
#使用if进行判断,
if [ $num -eq 0 ];then
        echo "$1 is up."
else
        echo "$1 is down."
fi

#测试脚本
[root@Node1 sh]# chmod +x ping_v1.sh 
[root@Node1 sh]# ./ping_v1.sh 192.168.75.131
192.168.75.131 is up.

4.2、删除某个目录下大小为0的文件

[root@Node1 sh]# vim delete_file.sh
#!/bin/bash
#Author By LiangGaRy
#Time:2023年5月27日
#Usage:找出空文件并且删除测试脚本
############################
rm -rf /var/run/yum.pid
yum makecache fast
yum install httpd -y 
dir="/var/www/html"
touch $dir/a.txt
touch $dir/b.txt
ls $dir
find $dir -type f -size 0 -exec rm -rf {
    
    } \;
echo "当前文件已经全部删除"


#测试脚本
[root@Node1 sh]# chmod +x delete_file.sh 
[root@Node1 sh]# ./delete_file.sh 

4.3、if语句判断成绩表脚本

#直接编写脚本
[root@Node1 sh]# vim score.sh
#!/bin/bash
#Author By LiangGaRy
#Time:2023年5月27日
#Usage:用于判断成绩的情况
#################################
read -p "请输入你的成绩:" num
if [ $num -ge 0 -a $num -le 59  ];then
        echo "成绩不及格;"
elif [ $num -ge 60 -a  $num -le 79  ];then
        echo "成绩刚好及格"
elif [ $num -ge 80 -a $num -le 100  ];then
        echo "你的成绩是优秀的;"
else
        echo "请真实输入你的成绩:范围是[0-100]"
fi

#测试脚本
[root@Node1 sh]# chmod +x score.sh 
[root@Node1 sh]# ./score.sh 
请输入你的成绩:1
成绩不及格;

猜你喜欢

转载自blog.csdn.net/Liang_GaRy/article/details/130897903
今日推荐