存档

‘ubuntu高手’ 分类的存档

ubuntu服务器安装php geoip拓展教程

2020年11月13日 评论已被关闭

我们可以安装php的geoip拓展来实现获取国家等ip地理信息,简单的说就是实现这个链接的函数功能:https://www.php.net/manual/en/book.geoip.php,如果没有安装拓展,这个链接上面函数的功能是不能使用的。

参考链接:
https://www.maxmind.com/en/home
https://www.miyuru.lk/geoiplegacy(这里可以下载到geoip的dat文件)
https://pecl.php.net/package/geoip
https://www.php.net/manual/en/geoip.setup.php
https://www.php.net/manual/en/book.geoip.php
https://db-ip.com/
https://db-ip.com/db/download/ip-to-city-lite
https://members.ip-api.com/#pricing
https://serverpilot.io/docs/how-to-install-the-php-geoip-extension/
https://blog.csdn.net/xpy870663266/article/details/94742491
https://valynkin.ru/maxmind-geoip2-na-ubuntu-1604-php56.html
https://blog.csdn.net/weixin_34245082/article/details/92028414

简单总结下ubuntu服务器安装php geoip拓展的过程吧
一开始我是在一台vps下操作,源是阿里云的源,装了php5.6,按照网上的搜索依次执行命令,发现遇到各种问题,上方的链接有的也是其中的解决办法,但是就是不行。后来换了一台服务器是官方源,sudo apt-get update之后,可以看到有php5.6-geoip拓展,输入sudo apt-get install php5.6-(按tab键可提示),这样的话就简单了(我怀疑是源的问题,没调试了)
可以看到apt-get里面的拓展,这样就方便了,不用自己编译安装,执行:
sudo apt-get install php5.6-geoip
执行完毕在/usr/share/GeoIP可以看到.dat文件和ipv6的dat文件
是执行完毕后,重启php5.6-fpm,发现问题了,discuz论坛无法回帖了,不过还好,我的需求是php7.4支持就可以了(我的服务器上是php5.6和php7.4共存的),所以我只需要执行:
sudo apt-get install php7.4-geoip
执行完毕后,重启php7.4-fpm,搞定

ubuntu服务器安装php geoip拓展教程就写到这里,只适合本人自己阅读,网友仅供参考(服务器环境有很大区别)

下面备注自动更新数据库的操作方法:
打开maxmind.com:登录后,个人中心:Services->My License Key
创建key之后,点击Download Config下载GeoIP.conf到/etc/GeoIP.conf
sudo apt-get install geoipupdate
安装好之后,需要更新的时候执行:geoipupdate -v
这样就可以自动更新了(可以定时任务执行)
参考:https://www.awaimai.com/2117.html

可以先执行php:var_dump(geoip_database_info());打印当前版本的信息,然后更新之后,再运行一次php,对比2次版本不同。

可是我们发现,/usr/share/GeoIp下面的.dat文件并没有更新,经过测试,从https://www.miyuru.lk/geoiplegacy下载最新的,然后执行:
sduo cd /usr/share/GeoIp/
sudo mkdir test
cd test
sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind4.dat.gz
sudo gunzip maxmind4.dat.gz
sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind6.dat.gz
sudo gunzip maxmind6.dat.gz
cd ../
sudo mv GeoIP.dat GeoIP.dat.bk
sudo mv GeoIPv6.dat GeoIPv6.dat.bk
sudo mv test/maxmind4.dat GeoIP.dat
sudo mv test/maxmind6.dat GeoIPv6.dat
sudo service php7.4-fpm restart
最后php执行:var_dump(geoip_database_info());似乎报错,所以就不折腾了,可能拓展安装的只有等拓展更新了才能更新数据库?有待验证

特别备注:获取ipv6的信息,要使用:
var_dump(geoip_country_code_by_name_v6(‘2601:8:be00:cf20:ca60:ff:fe09:35b5’));


分类: php学习, ubuntu高手 标签: , , , ,

linux find命令辅助攻击查找的一些简单记录

2020年9月16日 没有评论

1,查找指定目录里面,以php结尾的文件:
sudo find /www/ -name “*.php”

2,查找指定目录里面,以php结尾的文件,里面包含指定字符串的:
sudo find /www/ -name “*.php” | xargs grep “file_put_contents”
说明:指定字符串有一些字符需要转移才能正确执行,比如:$

3,查找指定目录里面,以php结尾的文件,最近修改时间在24小时以内的:
sudo find /www/ -name “*.php” -mtime 0
说明:
3.1:0代表0-24小时,1代表24-48小时,2代表48-72小时中,依次类推
3.2:如果想一次性显示0-24小时和24-48小时,可以:(使用 – o链接)
sudo find /www/ -name “*.php” -mtime 0 -o -mtime 1
多个可以追加多个 – o

shell脚本实现sh自动删除清理指定过期日期备份功能

2020年8月8日 没有评论

本脚本具体功能,请看脚本中备注的地方,前提条件,比如/backup/mybk下面的目录是年月日格式,比如:20200801(我的备份目录中,还有一个now文件夹也保留),大家可以自行修改为自己的代码,免费拿走。

#!/bin/bash
ROOT_UID=0
E_NOTROOT=67
if [ "$UID" -ne "$ROOT_UID" ]
then
        echo "Must be root to run this script"
        exit $E_NOTROT
fi

#配置需要操作的备份目录
backupDir=/backup/mybk

:<<!
#本脚本可以实现:(假设当前月是202008)
#保留当前备份文件夹now
#保留当前月备份文件夹:202008
#保留当前月后3个月备份文件夹:202007+202006+202005
#保留当前月后9个月备份文件夹中日期最大的一份(删除其他):202004+202003+202002+202001+201912+201911+201910+201909+201908
!


function arrDelete(){
	#把传递过来的数组作为arr
	arr=$1

	#找出数组中的最大值,初始值为0
	MAX=0
	for v in ${arr[@]}
	do
		if [[ $MAX -le $v ]]
		then
		    MAX=$v
		fi
	done

	#再循环一遍,比较大小,找到应该删除的文件夹
	for v in ${arr[@]}
	do
		if [[ $MAX -ne $v ]]
		then
			echo "不是当月最大,删除:"$backupDir"/"$v
			rm -rf $backupDir"/"$v
		fi
	done
}

function read_dir(){

	monthAgo0=$(date +%Y%m)
	monthAgo1=$(date "-d 1 month ago" +%Y%m)
	monthAgo2=$(date "-d 2 month ago" +%Y%m)
	monthAgo3=$(date "-d 3 month ago" +%Y%m)
	monthAgo4=$(date "-d 4 month ago" +%Y%m)
	monthAgo5=$(date "-d 5 month ago" +%Y%m)
	monthAgo6=$(date "-d 6 month ago" +%Y%m)
	monthAgo7=$(date "-d 7 month ago" +%Y%m)
	monthAgo8=$(date "-d 8 month ago" +%Y%m)
	monthAgo9=$(date "-d 9 month ago" +%Y%m)
	monthAgo10=$(date "-d 10 month ago" +%Y%m)
	monthAgo11=$(date "-d 11 month ago" +%Y%m)
	monthAgo12=$(date "-d 12 month ago" +%Y%m)

	for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
	do
		if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
	then
		if [[ $file == *now* ]]
		then
			echo "now,保留全部:"$1"/"$file
		elif [[ $file == *$monthAgo0* ]]
		then
			echo "当月,保留全部:"$1"/"$file
		elif [[ $file == *$monthAgo1* ]] || [[ $file == *$monthAgo2* ]] || [[ $file == *$monthAgo3* ]]
		then
			echo "最近3个月,保留全部:"$1"/"$file
		elif [[ $file == *$monthAgo4* ]]
		then
			arrmonthAgo4[${#arrmonthAgo4[@]}]=$file
		elif [[ $file == *$monthAgo5* ]]
		then
			arrmonthAgo5[${#arrmonthAgo5[@]}]=$file
		elif [[ $file == *$monthAgo6* ]]
		then
			arrmonthAgo6[${#arrmonthAgo6[@]}]=$file
		elif [[ $file == *$monthAgo7* ]]
		then
			arrmonthAgo7[${#arrmonthAgo7[@]}]=$file
		elif [[ $file == *$monthAgo8* ]]
		then
			arrmonthAgo8[${#arrmonthAgo8[@]}]=$file
		elif [[ $file == *$monthAgo9* ]]
		then
			arrmonthAgo9[${#arrmonthAgo9[@]}]=$file
		elif [[ $file == *$monthAgo10* ]]
		then
			arrmonthAgo10[${#arrmonthAgo10[@]}]=$file
		elif [[ $file == *$monthAgo11* ]]
		then
			arrmonthAgo11[${#arrmonthAgo11[@]}]=$file
		elif [[ $file == *$monthAgo12* ]]
		then
			arrmonthAgo12[${#arrmonthAgo12[@]}]=$file
		else
			echo "超过12个月,删除:"$1"/"$file
			rm -rf $1"/"$file
		fi
	else
		echo "is file,skip:"$1"/"$file
	fi
	done

	#循环各个数组,删除其中不是最大的一个文件夹
	#注意:传递数组为参数,必须要用引号扩起来,否则只能获取到第一个下标
	arrDelete "${arrmonthAgo4[*]}"
	arrDelete "${arrmonthAgo5[*]}"
	arrDelete "${arrmonthAgo6[*]}"
	arrDelete "${arrmonthAgo7[*]}"
	arrDelete "${arrmonthAgo8[*]}"
	arrDelete "${arrmonthAgo9[*]}"
	arrDelete "${arrmonthAgo10[*]}"
	arrDelete "${arrmonthAgo11[*]}"
	arrDelete "${arrmonthAgo12[*]}"
}

#遍历备份目录并操作
read_dir $backupDir

分类: ubuntu高手 标签: , , , , ,

linux系统ubuntu格式化分区并挂载硬盘【有硬盘过大使用Parted分区gpt方案】

2020年6月6日 没有评论

【linux系统ubuntu格式化分区并挂载硬盘,方案1】:

sudo fdisk -l
找到,比如/dev/vdb,60G

sudo fdisk /dev/vdb【说明:如果出现磁盘过大提示,请参照方案2】
然后根据提示,输入n,p,1,回车,回车,wq,保存退出

再次输入:sudo fdisk -l
可以看到刚刚的/dev/vdb变成了:/dev/vdb1

格式化:
sudo mkfs.ext4 /dev/vdb1

比如挂载到/mysql,那么输入:
sudo mkdir /mysql

执行挂载命令:
sudo mount /dev/vdb1 /mysql

修改/etc/fstab,保障系统重启后自动挂载
sudo vim /etc/fstab
再最后一行输入:
/dev/vdb1 /mysql ext4 defaults 0 0
保存

重启,再执行sudo df -h
如果现实正常,则说明挂载正常

【linux系统ubuntu格式化分区并挂载硬盘,方案2】:

如果硬盘过大,可能会造成错误提示:
The size of this disk is 3.7 TiB (4080218931200 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).

解决方案:

使用Parted分区
比如要对/dev/vdb进行分区,依次执行:
sudo parted,进入欢迎交互界面
select /dev/vdb,选择磁盘
print,查看磁盘信息
mklabel gpt,更改分区表格式
————–或者使用:mklabel,创建分区表
————–(会提示磁盘数据会丢失,是否继续,输入y)(当然要是新的磁盘才可以)
————–(会提示选择分区表格式,输入gpt)

接下来有2中方案:(建议用plan b)
【plan a】
mkpart,创建分区
————–(会让输入分区的名字,可以不输入,直接回车)
————–(会让输入分区的系统类型,输入ext4)
————–(会让输入分区的起始位置,输入0)
————–(会让输入分区的结束位置,整个磁盘的话,就输入-1,是负一)
会提示: The resulting partition is not properly aligned for best performance.
意思就是分区表不对齐,是否忽略,最好是要保持分区表对齐,以得到最高的磁盘性能,所以推荐plan b
如果要忽略,直接按i,回车,就可以完成
输入q退出parted

【plan b】
mkpart primary 0% 100%,让分区对其
输入q退出parted

接下来,再执行plan a和plan b公用的:

再格式化,sudo mkfs.ext4 /dev/vdb,输入y
比如挂载到/www,sudo mount /dev/vdb /www

修改/etc/fstab,保障系统重启后自动挂载
sudo vim /etc/fstab
再最后一行输入:
/dev/vdb /www ext4 defaults 0 0
保存

重启,再执行sudo df -h
如果现实正常,则说明挂载正常

ubuntu20.04安装mysql8之后,php5程序和phpmyadmin出现#2054 无法登录MySQL服务器的解决方案

2020年5月19日 没有评论

最近新装了ubuntu20.04版本,如果安装了php5,在安装mysql之后,使用phpmyadmin登陆,会出现2054 无法登录MySQL服务器

这个问题经过一晚上的折腾,终于找到了解决方案:

一步:

在mysql安装之后,执行:sudo mysql_secure_installation(按照提示操作即可)(这里会让输入root的密码)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address,注释掉
sudo /etc/init.d/mysql restart
mysql -uroot -p
输入root密码(sudo mysql_secure_installation的时候会让输入)
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER;
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
UPDATE mysql.user SET host = ‘%’ WHERE user = ‘root’;#允许远程访问,如果不需要,可以不操作
FLUSH PRIVILEGES;

当然,我们也可以新建用户:(127.0.0.1也可以再增加一个内网ip)
CREATE USER ‘root’@’127.0.0.1’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’127.0.0.1’ WITH GRANT OPTION;
FLUSH PRIVILEGES;

第二步:

虽然执行了上方调整,但是还是无法连接,是由于Mysql8.0将默认的字符集改为了utfmb4,因此和客户端(不仅仅是PHP)的通信无法识别

所以,我们需要进行:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在mysqld的选项中增加:

collation-server = utf8_unicode_ci
character-set-server = utf8

重启mysql,完美解决问题(网上搜了很多方法,大部分都进行了第一步,但是没有进行第二步,无法解决问题)

参考网址:https://blog.csdn.net/king921004/article/details/106184909/
参考网址:https://segmentfault.com/a/1190000017370224?utm_source=tag-newest

css.php