《Advanced Bash-scripting Guide》学习(十五):测试坏的链接文件(broken link)
本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅
#/bin/bash
#用一个纯粹的shell脚本来找出坏链接文件
#什么是broken link?对于符号链接(软链接),如果先删除原文件,则会成为坏链接(broken link)
方法一
find "somedir" -type l -print0 | xargs -r0 file | grep "broken symbolic" | sed -e 's/^\|: *broken symbolic.*$/''/g'
#这并不是一个纯粹的shell脚本
#-type l 文件类型为符号链接的文件
#file命令用来识别文件类型,也可用来辨别一些文件的编码格式
#如果文件是“broken link",那么find . -type l -print0 | xargs -r0 file执行后就会显示如下:./yum.log.soft: broken symbolic link to `/tmp/yum.log'
#\| 是一个出现在样式内部并经过转义的定界符
#当定界符号出现在样式内部时,我们必须用前缀\对它进行转义
#sed 's:text:replace:g'
#sed 's|text|replace|g'
#sed 's|te\|xt|replace|g'
#例子:
#:thisthisthis | sed -e 's/^\|:*this.*$/''/g'
#
#:abcthisthisthis | sed -e 's/|:.*this.*/''/g'
# 注意两者的区别,即":"后有无"."
方法二:
#!/bin/bash
#检查目录是否传入参数,如果没有传入参数,就以当前目录作为搜索目录,
#如果有传入的参数,以传入参数的目录作为搜索目录
# 其实这个$@是不可以改成$1的,有很多位置参数的情况还是存在的,换成$1只对第一个位置参数有效
]
then
directorys=`pwd`
else
directorys=$@
fi
#$1指的就是$directory,第一个位置参数,$/*指的是$1下所有的目录和文件
38 #这部分主要针对目录下的目录而言,如果$directory下还有一个目录,那么把整个目录作为位置参数传入linkchk函数,如果下面还有,再作为位置参数传入,这是递归的
39 #-h 检查符号链接文件是否存在(存在为真),! -e 检查文件是否不存在(不存在为真),这两个同时要成立是不是前后矛盾?
40 #经检查,发现不是这样,cat 坏链接名,会提示没有那个文件或目录,说明链接文件指向的原文件的值已不存在,其属性还在
41 linkchk()
42 {
43 for i in $1/*
44 do
45 if [ -h "$i" -a ! -e "$i" ]
46 then
47 echo "$i"
48 elif [ -d "$i" ]
49 then
50 linkchk "$i"
51 fi
52 done
53 }
54
55 #linkchk()是一个自定义的函数,$directory是这个函数中传入的第一个位置参数
56 for directory in $directorys
57 do
58 if [ -d $directory ]
59 then
60 linkchk $directory
61 else
62 echo "$directory is not a directory"
63 echo "Usage: $0 dir1 dir2 ..."
64 fi
65 done
66
67 exit 0
脚本运行结果

《Advanced Bash-scripting Guide》学习(十五):测试坏的链接文件(broken link)的更多相关文章
- 风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞
风炫安全web安全学习第三十五节课 文件下载和文件读取漏洞 0x03 任意文件下载漏洞 一些网站由于业务需求,往往需要提供文件下载功能,但若对用户下载的文件不做限制,则恶意用户就能够下载任意敏感文件, ...
- 强化学习(十五) A3C
在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...
- 渗透测试学习 十五、 文件上传&&解析漏洞
大纲:文件解析漏洞 上传本地验证绕过 上传服务器验证绕过 文件解析漏洞 解析漏洞主要说的是一些特殊文件被IIS.Apache.Nginx在某些情况下解释成脚本文件格式的漏洞. IIS 5.x/6.0解 ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...
- Salesforce LWC学习(十五) Async 以及 Picklist 公用方法的实现
本篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) https://developer.salesfo ...
- salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)
此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...
- Java学习十五
学习内容: MyBaits 以前从来没有接触过mybatis,通过今天的学习知道这是一个框架,适用于关注SQL优化和需要频繁更新的项目. 今天做一个关于mybatis项目的入门小程序,效果很不理想. ...
- java web 学习十五(jsp基础语法)
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...
- Flask 学习 十四 测试
获取代码覆盖报告 安装代码覆盖工具 pip install coverage manage.py 覆盖检测 COV = None if os.environ.get('FLASK_COVERAGE') ...
随机推荐
- Servlet学习笔记【2】---Http数据包
本文主要讲Http协议相关知识. 1 Http协议特点 单向性:客户端和服务端是单向通信的,只有客户端发请求,服务端才会响应产生.(异于推送模式) 无状态:协议本身并没有状态的记录,当客户端多次访问服 ...
- js验证表单大全3
2 >表单提交验证类 2.1 表单项不能为空 <scriptlanguage="javascript"> <!-- function CheckForm( ...
- 什么是PHP闭包???
闭包函数:临时创建一个没有名称的函数,经常作为回调函数来用. 通俗的说就是:子函数可以使用父函数中的局部变量,这种行为叫做闭包. 1.匿名函数赋值 $demo=function($str){ echo ...
- Linux用户相关文件之密码文件
1.文件地址: /etc/shadow ----------. 1 root root 842 10月 6 13:09 /etc/shadow 2.文件内容: xiaol_1:$6$NdCAnK3y$ ...
- 安卓手机开机键失灵,FASTBOOT模式ADB重启
安装ADB工具 CMD指令fastboot reboot
- Eclipse Find/Replace
1.Eclipse内容助手 选中Regular expressions,使用正则表达式进行匹配.图中出现了小黄灯,Ctrl+Space显示出帮助信息. 2.Wrap search(循环检索)选中后,检 ...
- image has dependent child images
在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器(哪怕是已经停止的容器),否则无法删除该镜像. 停止容器 # docker stop $(docker ps -a | grep ...
- dom树改变监听
function unwrap(el, target) { if ( !target ) { target = el.parentNode; } while (el.firstChild) { tar ...
- mybatis 一次执行多条SQL
在默认情况下,一次性发过去的多条sql是不合法的. 想要让mysql一次执行多条sql语句,必须进行手动设置. 让mysql驱动开启批量执行sql的开关. 怎么开启呢?在拼装mysql链接的url时, ...
- 登陆weblogic后页面控制台卡主
输入http://localhost:7001/console进入控制页面,能登陆进去,但是登陆进去后页面就马上卡死,可以看到页面头部,其余都显示不出来. 重启后启动访问,能够正常进入,关闭weblo ...