《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') ...
随机推荐
- 2015-02-09——js笔记
示例1: 增加样式表 示例代码: function addStylesheet(url, media) { var link = document.createEleme ...
- Vue中watch的简单应用
Vue.js 有一个方法 watch,它可以用来监测Vue实例上的数据变动. 如果对应一个对象,键是观察表达式,值是对应回调,值也可以是方法名,或者是对象,包含选项. 下面写两个demo,参考demo ...
- 常用代码块:java使用系统浏览器打开url
方法一:用于windows try { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url) ...
- Hosts文件的位置
Operating System Version(s) Location Unix, Unix-like, POSIX /etc/hosts Microsoft Windows 3.1 %WinD ...
- python多进程理论
什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): 你在一个时间段内有很多任务要做:python学习的任务,赚钱的任务,交女朋 ...
- 构建Ruby开发环境(Windows+Eclipse+Aptana Plugin)
1.安装Ruby ①.从http://rubyinstaller.org/downloads/下载安装包:rubyinstaller-2.2.5-x64.exe,直接安装.(so easy) 2.安装 ...
- Python 7 多线程及进程
进程与线程: 进程的概念: 1.程序的执行实例称为进程. 2.每个进程都提供执行程序所需的资源.一个进程有一个虚拟地址空间.可执行代码.对系统对象的开放句柄.一个安全上下文.一个独特的进程标识符.环境 ...
- Swift中字典解析后的问题,!?两种拆包的差别
给出一个json,使用SwiftyJSON解析传给model,传进去是个字典,字典里有String,NSNumber,NSDoctionary,和NSArray. 正常情况下直接使用下面的解析方法即可 ...
- linux切换用户命令
1. 切换用户的命令为:su +username 2.从普通用户切换到root用户:sudo su 3.退回到原来的用户:exit命令或logout,或者ctrl+d 4.如果要切换到新用户的工作环境 ...
- ios-如何搭建IPv6网络测试环境(转)
工具/原料 mac一台 iPhone手机2台(一台用于测试,另一台提供网络) 方法/步骤 准备网络.通过数据线连接iPhone和Mac,并将iPhone手机连接的Wi-Fi关闭,使用自己的 ...