SHELL-自动修改文件的所有者

最近,前端同仁反馈,模板目录经常性提示没有权限修改文件,经检查是里面的文件的所有人变了,具体为什么变,暂时没找到,那就弄个脚本让他们执行修改吧。

传入的参数是要修改的目录,必须是/data/Site/下的任意目录,其他的程序排除了。

提示:

这个脚本有权限的,chown需要管理员权限,而正常部署的账号是www结果是可以执行,但没有效果噢。

#!/bin/bash

checkroot="$1"
hasexist=$(echo $checkroot | grep "/data/Site/")
if [[ (${#checkroot} -gt 0) && ($hasexist!="") ]];
then
find $checkroot -type f -user root -exec chown www:www {} \;
fi

 

SHELL-常用的功能脚本

最近,大量测试虚拟机,结果安装复制很麻烦的,特别有时候需要重新配置常用项的内容。还是写一个脚本自动完成吧。

错误提示:

如果执行的时候出现“-bash: ./ecs.sh: /bin/bash^M: bad interpreter: No such file or directory”错误则将文件的格式保存为unix格式试试看。

目前有的功能:

  1. 网卡配置生成
  2. YUM 阿里云镜像
  3. 虚拟机 共享软件夹

源码如下

#!/bin/bash

if [ $(id -u) != "0" ]; then
    echo "You must be root to run this script"
    exit 1
fi

# 网卡配置生成
eth_generate()
{
	while true
	do
		read -p "please input network card's name:" eth_input_name
		read -p "please input network card's IP ADDR:" eth_input_ipaddr
		read -p "please input network card's Gate WAY:" eth_input_gateway
		if [[ ${#eth_input_name} -gt 0 && ${#eth_input_ipaddr} -gt 0 && ${#eth_input_gateway} -gt 0 ]];
		then
			break
		else
			echo '******'
		fi
	done
	ethconfig="/etc/sysconfig/network-scripts/ifcfg-$eth_input_name"
	if [ -e /etc/sysconfig/network-scripts/ifcfg-$eth_input_name ];
	then
		mv $ethconfig $ethconfig.bak.$(date +"%Y%m%d")
	fi
	echo "TYPE=Ethernet
BOOTPROTO=static
NAME=$eth_input_name
DEVICE=$eth_input_name
ONBOOT=yes
IPADDR=$eth_input_ipaddr
GATEWAY=$eth_input_gateway">>$ethconfig
	if [ -e $ethconfig ];
	then
		echo '##### config generate OK~! #####'
	fi
	service network restart
	mv /etc/resolv.conf /etc/resolv.conf.bak.$(date +"%Y%m%d")
	echo "nameserver 223.5.5.5
nameserver 223.6.6.6">>/etc/resolv.conf
	exit 1
}

# YUM 阿里云镜像
yum_source_aliyun()
{
	if grep -Eqi "release 6." /etc/redhat-release; then
		centosver='6'
	elif grep -Eqi "release 7." /etc/redhat-release; then
		centosver='7'
	fi
	if [[ centosver -eq 6 || centosver -eq 7 ]];
	then
		mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak.$(date +"%Y%m%d")
		curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-$centosver.repo
		echo '##### CentOS-Base.repo is download OK~! #####'
		yum makecache
		echo '##### CentOS-Base.repo CACHE is OK~! #####'
	fi
	exit 1
}

# 虚拟机 共享软件夹
# 1.执行之前请点击 设备 安装增强工具
# 2.设置 共享文件夹 设定 共享文件夹名称,脚本将用到
vbox_sharefloder()
{
	# 0
	echo '1.执行之前请点击 设备 安装增强工具'
	echo '2.设置 共享文件夹 设定 共享文件夹名称,脚本将用到'
	read -p "你是否已经准备好了?准备好请输入yes回车。" isok
	if [ "$isok" != "yes" ];
	then
		echo '请前往设置后再来尝试。'
		exit 1
	fi
	# 1
	read -p "请输入共享文件夹名称: " sharefoldername
	if [[ ${#sharefoldername} -le 0 ]];
	then
		echo "共享文件夹名称 必填"
		exit 1
	fi
	read -p "请输入您希望挂载到的目录,默认/data: " mountto
	if [ ${#mountto} -le 0 ];
	then
		mountto='/data'
	fi
	# 2
	yum install kernel-headers kernel-devel gcc* make -y
	if [ ! -e /mnt/cdrom ];
	then
		mkdir -p /mnt/cdrom
	fi
	# 3
	mount /dev/cdrom /mnt/cdrom
	cd /mnt/cdrom
	./VBoxLinuxAdditions.run
	# umount /mnt/cdrom
	# 4
	if [ ! -e $mountto ];
	then
		mkdir -p $mountto
	fi
	mount -t vboxsf $sharefoldername $mountto
	# 5
	cp /etc/fstab /etc/fstab.bak.$(date +"%Y%m%d")
	echo $sharefoldername $mountto vboxsf rw,gid=100,uid=1000,auto 0 0 >> /etc/fstab
}


#
SelectTo="$1"

#
echo "1: Auto generate network card config(as ifcfg-eth0)"
echo "2: YUM source mirror from aliyun"
echo "3: Visual Box's Tool set"
echo "0: DO NOTHING"

#
if [ ${#SelectTo} -le 0 ];
then
	read -p "Choice One To Setup (1,2,3 or 0): " SelectTo
fi

#
echo '-----';

case "${SelectTo}" in
1)
	eth_generate
	;;
2)
	yum_source_aliyun
	;;
3)
	vbox_sharefloder
	;;
0)
	exit 1
	;;
*)
	echo "you can run :$0 [1|2|3...]"
	exit 1
esac

PHP中将HTML的行内样式抽离为内嵌样式或者外联样式

<?php

/**
* 说明:
* 最近为了优化页面容量,需要将内嵌,行内样式,脚本等抽离成外联调用方式,一个个检查明显是
* 工作量浩大,花了一个下午时间写个脚本自动检查,配合使用。
*
* 功能:将行内样式抽离成内嵌样式,自动重命名元素的样式名
**/
function extractionInlineStyle( $url = 'http://www.163.com/' )
{
$content = file_get_contents( $url );

// 1.将行内样式抽离出来
preg_match_all( '/style=(\"|\')?([^\"\']*)(\"|\')?/', $content, $matchs );
// 1.1.去掉空格,md5生成类名
// 1.2.删除原码,替换类名
$styleStrings = '<style>';
//
$classCountNum = 1;
foreach( $matchs[0] as $stylekey=>$styleitem )
{
$styleNameMd5[ $stylekey ] = md5( $styleitem );
$styleNameID[ $stylekey ] = 'c_'.$classCountNum;
if( !isset($styleItems[ $styleNameMd5[ $stylekey ] ]) )
{
$styleItems[ $styleNameMd5[ $stylekey ] ] = $styleNameID[ $stylekey ];
$styleName[ $stylekey ] = "class={$matchs[1][$stylekey]}{$styleNameID[ $stylekey ]}{$matchs[3][$stylekey]}";
$styleStrings .= '.'.$styleNameID[ $stylekey ].'{'.str_ireplace(array("\r","\n"),'',$matchs[2][$stylekey]).'}';
$classCountNum++;
}else{
$styleName[ $stylekey ] = "class={$matchs[1][$stylekey]}{$styleItems[ $styleNameMd5[ $stylekey ] ]}{$matchs[3][$stylekey]}";
}
}
//
$styleStrings .= '</style>';
$styleStrings = preg_replace( '/\s\s+/', '', $styleStrings );
$content = str_ireplace( '</head>', $styleStrings."\n".'</head>', $content );
$content = str_ireplace( $matchs[0], $styleName, $content );

// 2.处理重复的class属性,只能处理class X 2的
// 2.1 将重复的第二个class删除
// 2.2 将重复的class内的值合并到第一个class中
preg_match_all( '/<([^>]*)class=(?<pclass1>(\"|\')(?<pclass11>([^\"\']*))(\"|\'))([^>]*)(?<=class)=(?<pclass2>(\"|\')(?<pclass22>([^\"\']*))(\"|\'))([^>]*)>/', $content, $matchsClass );
$strRepl = $matchsClass[0];
foreach( $strRepl as $sFkey=>$sFval )
{
$find = array(
0=>' class='.$matchsClass['pclass2'][$sFkey],
1=>' class='.$matchsClass['pclass1'][$sFkey],
);
$repl = array(
0=>'',
1=>' class="'.$matchsClass['pclass11'][$sFkey].' '.$matchsClass['pclass22'][$sFkey].'"'
);
$strRepl[ $sFkey ] = str_ireplace( $find, $repl, $sFval );
}
//
$content = str_ireplace( $matchsClass[0], $strRepl, $content );

exit( $content );
}

CentOS-VBox虚拟机中网络的设置及yum库更新

最近,项目使用比较多的技术,所以也开始使用虚拟机测试了,自己安装过程麻烦,还会遇上一些问题,这边记录一下吧。

1、网络连接方式

连接方式:桥接方式

界面名称:默认或者按照实际选择

混杂模式:拒绝

2、怎么查看网络的IP信息

ip add
...
inet 192.168.1.201/24 brd 192.168.1.255 scope global enp0s3
...

或者

ifconfig
...
inet addr:192.168.1.201 ...
...

3、ifcfg-eth*最基本的配置项

TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
IPADDR="192.168.1.201"
GATEWAY="192.168.1.1"

注意:大小写不要紧,加不加引号不要紧。

4、启动网卡配置

ifup eth1

或者

service network restart

5、Yum库的更新及源替代

打开

OPSX:https://opsx.alibaba.com/mirror

选择centos最右边帮助,找到安装的版本,我的是:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之后运行yum makecache生成缓存。

6、