首页 文章 精选 留言 我的

精选列表

搜索[Linux],共10000篇文章
优秀的个人博客,低调大师

linux中生成考核用的NTFS文件系统(历史版本)

注2017年6月25日修改:这个版本想得复杂了,还是改为python脚本容易实现的方式。见相关blog(ntfs案例一) 目的: 生成一个NTFS文件系统,要求: 1、$MFT至少2个碎片 2、根目录下建90个以从1开始的数字编号为名的子目录,每个子目录下建80-100个文件,文件编号从1开始编起。 3、有大量文件是由2个或以上碎片组成。(本例多为2个碎片) 1、shell 脚本如下: !/bin/sh #Script.sh # # #Createdby张宇on2017/3/29.此脚本已包含后面的命令 # mkdir~/$1 cd~/$1 qemu-imgcreate-fraw$1.img1G qemu-nbd-fraw-c/dev/nbd0$1.img parted-s/dev/nbd0mklabelmsdos parted-s/dev/nbd0mkpart-sprimaryNTFS128s100% mkfs.ntfs-f/dev/nbd0p1 mount.ntfs-3g/dev/nbd0p1/mnt #第一段for,先创建30个子目录,每个目录下80-100个文件,大小为16K-48K,这一段基本连续 for((i=1;i<=3;i++));do mkdir/mnt/$i r1=$(($RANDOM%20)) for((ii=1;ii<80+$r1;ii++));do r2=$(($RANDOM%64+32)) ddif=/dev/urandomof=/mnt/$i/$iibs=512count=$r2 done done #sleep60便于让文件系统flush #sleep60 mkdir/mnt/padding cd/mnt/padding #填充65000个文件,这样可以使NTFS$MFT填充到第一个使用的数据区段,从而产生$MFT碎片。 for((i=1;i<65000;i++));do touch$i done #创建出其他4-90子目录,这些文件会位于$MFT的第二个片断或以后 for((i=4;i<=90;i++));do mkdir/mnt/$i r1=$(($RANDOM%20)) for((ii=1;ii<80+$r1;ii++));do r2=$(($RANDOM%64+32)) ddif=/dev/urandomof=/mnt/$i/$iibs=512count=$r2 done done #sleep60 #第二段for,使用dd把第一段for创建出的文件,从0-16K的位置,写入48K-80K,基本保证>约2个碎片,子目录3下的文件是第一段$MFT下的文件,3之后的为$MFT第二个片断。 for((i=3;i<=90;i++));do cd/mnt/$i foriiin`ls`;do r2=$(($RANDOM%64+96)) r3=$(($RANDOM%32)) ddif=/dev/urandomof=/mnt/$i/$iibs=512seek=$r3count=$r2 done done #删除padding,以免目录结构太臃肿 rm-rf/mnt/padding cd/mnt find.-typef-print|xargsmd5sum-b|tra-zA-Z1>~/$1/md5.list foriin`find.-typef`;dontfscluster-f-F$i/dev/nbd0p1;done1>~/$1/file.info2>/dev/null 2、在shell中执行如下命令: qemu-imgcreate-frawtest2.img1G qemu-nbd-fraw-c/dev/nbd0test2.img fdisk/dev/nbd0#此命令交互,目的为/dev/nbd0分个区,不想交互,可使用parted加参数 mkfs.ntfs-f/dev/nbd0p1 mount.ntfs-3g/dev/nbd0p1/mnt /bin/bashrun.sh 3、测试结果是否满意: 命令一:ntfscluster-f-I0/dev/nbd0p1 结果与预想相符,$mft果然为2个片断: Forced to continue. Dump: /$MFT 0x10 - resident 0x30 - resident 0x80 - non-resident VCN LCN Length 0 4 16387 16387 20488 1880 0xb0 - non-resident VCN LCN Length 0 2 2 2 16391 1 命令二:ntfscluster-f-F1//dev/nbd0p1 结果与预想相符,抽样目录,也为2个片断 Forced to continue. Unnormalized path 1/ Dump: /1 0x10 - resident 0x30 - resident 0x50 - resident 0x90 - resident 0xa0 - non-resident VCN LCN Length 0 53328 2 2 49238 1 0xb0 - resident 命令三: ntfscluster-f-F60/9/dev/nbd0p1 结果与预想相符,抽样文件,也为2个片断 Forced to continue. Dump: /60/9 0x10 - resident 0x30 - resident 0x50 - resident 0x80 - non-resident VCN LCN Length 0 211991 8 8 115298 7 4、生成所有文件的md5 哈希,便于生成考核答案 cd/mnt find.-typef-print|xargsmd5sum-b|tra-zA-Z 5、生成所有文件的碎片信息,便于生成考核答案 cd/mnt foriin`find.-typef`;dontfscluster-f-F$i/dev/nbd0p1;done2>/dev/null 6、生成目录的碎片信息,便于生成考核答案 cd/mnt foriin`find.-typed`;dontfscluster-f-F$i/dev/nbd0p1;done2>/dev/null 7、生成元文件的文件记录信息,便于生成考核答案 for((i=0;i<16;i++));dontfscluster-f-I$i/dev/nbd0p1;done2>/dev/null 或者通过命令:ntfscluster -i -f /dev/nbd0p1, 查看如下值:initialized mft records : 73115 再执行,下面命令即可将所有文件的碎片信息打印出来,再做加工,即可生成考核答案 for((i=0;i<73115;i++));dontfscluster-f-I$i/dev/nbd0p1;done2>/dev/null ntfs-3g源码改动: 1、ntfscluster.c 400行while改为如下,目的是便于输出结果用grep,sed或awk加工 while((rec=find_attribute(AT_UNUSED,ctx))){ ntfs_log_info("0x%02x-",(int)le32_to_cpu(rec->type)); if(rec->non_resident){ ntfs_log_info("non-resident\n"); runs=ntfs_mapping_pairs_decompress(vol,rec,NULL); if(runs){ ntfs_log_info("INODEATTRRUN#VCNLCNLength\n"); for(i=0;runs[i].length>0;i++){ ntfs_log_info("%8lld0x%02x%8lld%8lld%8lld%8lld\n", (longlong)(ino->mft_no&0x0000FFFFFFFFFFFFUL), (int)le32_to_cpu(rec->type), (longlong)i, (longlong)runs[i].vcn, (longlong)runs[i].lcn, (longlong) runs[i].length); } ntfs_log_info("[INFO]:0x%02xRuns:%d,Inode:%lld,path:%s\n", (int)le32_to_cpu(rec->type), i, (longlong)(ino->mft_no&0x0000FFFFFFFFFFFFUL), buffer); free(runs); } }else{ ntfs_log_info("resident\n"); } } 结果将如下: Dump: /50/3 0x10 - resident 0x30 - resident 0x50 - resident 0x80 - non-resident INODE ATTR RUN# VCN LCN Length 69425 0x80 0 0 194588 9 69425 0x80 1 9 217183 8 [INFO]:0x80Runs:2,Inode:69425,path:/50/3 考题及答案生成部分: 1、$MFT:$DATA 2、$MFT:$BITMAP 3、在$MFT第一个片断中的,拥有$DATA:RUNLIST唯一一条记录的文件,回答其MD5 4、在$MFT第二个片断中的,拥有$DATA:RUNLIST两条记录的文件,回答其MD5 5、读取某个拥有至少2个A0属性的目录块的MD5 6、给定一个起始簇号,解释一个RUNLIST的前3条记录(样本中至少有3条记录) 7、恢复一个删除的文件 (可生成答案后,删除某个目录,再恢复其下面的某个文件即可)

优秀的个人博客,低调大师

Linux下添加shell脚本使得nginx日志每天定时切割压缩

一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大,比如像下面这样: 这时,无论是出现异常时查日志,还是使用“GoAccess”等工具对日志进行分析都将会变得非常麻烦。因此,每天定时对nginx日志进行切割压缩就非常有必要了 二 实现 我的实现思路是每天晚上接近12点时定时执行脚本。其脚本内容就是将当前的nginx日志先按照当天日期进行重命名接着进行压缩,最后是新建空白的nginx日志文件,并重新载入nginx [root@localhost~]#cd/usr/local [root@localhostlocal]#mkdirscripts [root@localhostscripts]#vimnginxLog.sh 其内容如下: #!/bin/sh cd/usr/local/nginx/logs/ newAccessLog="access`date+%Y-%m-%d`.log" newErrorLog="error`date+%Y-%m-%d`.log" mvaccess.log$newAccessLog mverror.log$newErrorLog #创建日志文件 touchaccess.logerror.log #reloadNginx /etc/init.d/nginxreload #压缩日志文件 tar-zcvf$newAccessLog.tar.gz$newAccessLog--remove-files tar-zcvf$newErrorLog.tar.gz$newErrorLog--remove-files 给脚本添加可执行权限: [root@localhostscripts]#chmoda+xnginxLog.sh 添加定时任务(每天23:40执行): [root@localhostscripts]#cd/var/spool/cron/ [root@localhostcron]#echo"4023***/usr/local/scripts/nginxLog.sh">root 查看任务: [root@localhostcron]#crontab-l 这样,第二天就可以看到效果了。最后的效果如下图所示: 注:如果有多个nginx日志文件的话可以考虑将我上面的脚本改成更加通用的形式 附:nginx日志定时清理脚本: [root@localhostscripts]#vim/usr/local/scripts/cleanNginxLog.sh 其内容如下: #!/bin/sh cd/usr/local/nginx/logs/ find.-name"*`date-d'-1months'+%Y-%m-%d`*"-typef|xargs-I{}rm-f{} 注:上面脚本的意思是删除当前天之前一个月那天的日志文件 给脚本添加可执行权限: [root@localhostscripts]#chmoda+x/usr/local/scripts/cleanNginxLog.sh 添加一条定时任务(每天0:30执行): [root@localhostscripts]#echo"300***/usr/local/scripts/cleanNginxLog">>/var/spool/cron/root

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。