- 通过 FTP 连接网站,找到
wp-content/themes/当前主题/functions.php文件 。 - 在文件末尾添加代码:
wp_set_password('新密码', 1);(1 代表管理员 ID)。 - 保存文件后访问网站任意页面触发执行,登录成功后立即删除该代码 。
- 操作完成后务必修改为复杂密码并删除临时文件,避免安全风险 。
在 Java Native Interface (JNI) 中,SetSystemProperty 并不是一个直接可用的函数或方法。通常,你会通过 JNI 调用 Java 的系统属性相关方法来设置系统属性。
如何在 JNI 中设置系统属性
- 获取
java.lang.System类:你需要首先获取System类的引用。 - 获取
setProperty方法:然后获取这个类中setProperty方法的引用。 - 调用方法:通过 JNI 调用这个方法来设置属性。
示例代码
以下是一个简单的示例,展示了如何在 JNI 中设置一个系统属性:
#include <jni.h>
#include <stdio.h>
JNIEXPORT void JNICALL Java_YourClass_setProperty(JNIEnv *env, jobject obj) {
jclass systemClass = (*env)->FindClass(env, "java/lang/System");
if (systemClass == NULL) {
return; // 处理错误
}
jmethodID setPropertyMethod = (*env)->GetStaticMethodID(env, systemClass, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
if (setPropertyMethod == NULL) {
return; // 处理错误
}
jstring key = (*env)->NewStringUTF(env, "myProperty");
jstring value = (*env)->NewStringUTF(env, "myValue");
(*env)->CallStaticObjectMethod(env, systemClass, setPropertyMethod, key, value);
// 清理局部引用
(*env)->DeleteLocalRef(env, key);
(*env)->DeleteLocalRef(env, value);
(*env)->DeleteLocalRef(env, systemClass);
}
使用步骤
- 编译并生成共享库:确保你的 JNI 代码编译正确,并生成相应的共享库(如
.dll、.so文件)。 - 在 Java 中加载本地库:使用
System.loadLibrary("your_library_name")来加载本地库。 - 调用 JNI 方法:从 Java 代码中调用
setProperty方法。
注意事项
- 设置的系统属性在 JVM 运行期间有效,但不会影响外部环境。
- 确保在多线程环境下小心使用,以避免潜在的数据竞争问题。
错误原因
可能由于强制结束了yum操作而导致rpm数据库被损坏了!不一定是你手动结束,也可能是因为网络原因
解决方案
删除已损坏的 __db 文件
进入rpm目录命令:
cd /var/lib/rpm
#删除 __db 文件命令:两种方式任选一种
#方式一:
rm /var/lib/rpm/__**
#方式二:
rm -i __db.*
重建rpm数据库
#重新构建rpm数据库命令:
rpm –rebuilddb
首先安装第三方yum源
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
更新yum源
yum makecache
安装nmon
yum -y install nmon
打开nmon
nmon
link:https://blog.csdn.net/weixin_42612178/article/details/115801519
警告:setlocale: LC_CTYPE: 无法改变区域选项 (UTF-8)
在/etc/environment添加:
LC_ALL=zh_CN.UTF-8
LANG=zh_CN.UTF-8
内核参数overcommit_memory
它是 内存分配策略
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
什么是Overcommit和OOM
Linux对大部分申请内存的请求都回复”yes”,以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做 Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。
当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该 函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且 oom_score_adj可以被设置(-1000最低,1000最高)。
解决方法:
很简单,按提示的操作(将vm.overcommit_memory 设为1)即可:
有三种方式修改内核参数,但要有root权限:
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
1、查看firewall服务状态
systemctl status firewalld
2、查看firewall的状态
firewall-cmd --state
3、开启、重启、关闭、firewalld.service服务
查看linux哪些程序正在使用互联网
firewall-cmd --permanent --list-services ssh dhcpv6-client
开启
service firewalld start
重启
service firewalld restart
关闭
service firewalld stop
4、查看防火墙规则
firewall-cmd --list-all
5、查询、开放、关闭端口
查询端口是否开放
firewall-cmd --query-port=8080/tcp
开放80端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080-8085/tcp
移除端口
firewall-cmd --permanent --remove-port=8080/tcp
查看防火墙的开放的端口 firewall-cmd --permanent --list-ports
重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
Link: https://blog.csdn.net/qq_41153478/article/details/83033688
tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。
tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
选项
- -A 以ASCII格式打印出所有分组,并将链路层的头最小化。
- -c 在收到指定的数量的分组后,tcpdump就会停止。
- -C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。
- -d 将匹配信息包的代码以人们能够理解的汇编格式给出。
- -dd 将匹配信息包的代码以c语言程序段的格式给出。
- -ddd 将匹配信息包的代码以十进制的形式给出。
- -D 打印出系统中所有可以用tcpdump截包的网络接口。
- -e 在输出行打印出数据链路层的头部信息。
- -E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
- -f 将外部的Internet地址以数字的形式打印出来。
- -F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
- -i 指定监听的网络接口。
- -l 使标准输出变为缓冲行形式,可以把数据导出到文件。
- -L 列出网络接口的已知数据链路。
- -m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
- -M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
- -b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
- -n 不把网络地址转换成名字。
- -nn 不进行端口名称的转换。
- -N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
- -t 在输出的每一行不打印时间戳。
- -O 不运行分组分组匹配(packet-matching)代码优化程序。
- -P 不将网络接口设置成混杂模式。
- -q 快速输出。只输出较少的协议信息。
- -r 从指定的文件中读取包(这些包一般通过-w选项产生)。
- -S 将tcp的序列号以绝对值形式输出,而不是相对值。
- -s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
- -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
- -t 不在每一行中输出时间戳。
- -tt 在每一行中输出非格式化的时间戳。
- -ttt 输出本行和前面一行之间的时间差。
- -tttt 在每一行中输出由date处理的默认格式的时间戳。
- -u 输出未解码的NFS句柄。
- -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
- -vv 输出详细的报文信息。
- -w 直接将分组写入文件中,而不是不分析并打印出来。
1. dd命令
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1; k=1024;w=2
参数注释:
- if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
- of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
- ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。 - cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
- skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
- seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。 - count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
- conv=conversion:用指定的参数转换文件。
- ascii:转换ebcdic为ascii
- ebcdic:转换ascii为ebcdic
- ibm:转换ascii为alternate ebcdic
- block:把每一行转换为长度为cbs,不足部分用空格填充
- unblock:使每一行的长度都为cbs,不足部分用空格填充
- lcase:把大写字符转换为小写字符
- ucase:把小写字符转换为大写字符
- swab:交换输入的每对字节
- noerror:出错时不停止
- notrunc:不截短输出文件
- sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
2. dd应用实例
1. 将本地的/dev/hdb整盘备份到/dev/hdd
$ dd if=/dev/hdb of=/dev/hdd
2. 将/dev/hdb全盘数据备份到指定路径的image文件
$ dd if=/dev/hdb of=/root/image
3. 将备份文件恢复到指定盘
$ dd if=/root/image of=/dev/hdb
4. 备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
$ dd if=/dev/hdb | gzip > /root/image.gz
5. 将压缩的备份文件恢复到指定盘
$ gzip -dc /root/image.gz | dd of=/dev/hdb
6. 备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
$ dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
$ dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7. 备份软盘
$ dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)
8. 拷贝内存内容到硬盘
$ dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)
9. 拷贝光盘内容到指定文件夹,并保存为cd.iso文件
$ dd if=/dev/cdrom(hdc) of=/root/cd.iso
10. 增加swap分区文件大小
第一步:创建一个大小为256M的文件:
$ dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
$ mkswap /swapfile
第三步:启用这个swap文件:
$ swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
$ /swapfile swap swap default 0 0
11. 销毁磁盘数据
$ dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12. 测试硬盘的写速度
$ dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
通过以上命令输出的命令执行时间,可以计算出硬盘的写速度。
13. 测试硬盘的读速度
$ dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上命令输出的命令执行时间,可以计算出硬盘的读速度。
14. 确定硬盘的最佳块大小
$ dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
$ dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
$ dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
$ dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
15. 修复硬盘
$ dd if=/dev/sda of=/dev/sda
或者
$ dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。
16. 利用netcat远程备份
$ dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在源主机上执行此命令备份/dev/hda
netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
在目的主机上执行此命令来接收数据并写入/dev/hdc
$ netcat -l -p 1234 | bzip2 > partition.img
$ netcat -l -p 1234 | gzip > partition.img
以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。
17. 将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值)
$ echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc
3. /dev/null和/dev/zero的区别
- /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
- /dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
在cmake mysql源码的时候出现下面的错误:
[ 46%] Building CXX object sql/CMakeFiles/sql.dir/geometry_rtree.cc.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [sql/CMakeFiles/sql.dir/geometry_rtree.cc.o] Error 4
make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
make: *** [all] Error 2
通过查找,[可能是因为内存不够的原因](https://bitcointalk.org/index.php?topic=304389.0),使用`free -h`查看了下,发现DO的主机连Swap分区都没有,Swap分区是当物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到物理内存中。Swap的调整对Linux服务器,特别是Web服务器的性能至关重要,通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级的费用。 SWAP分区设置多大是我们需要关心的问题,关于设置的规则可以参考下面,实际情况可以根据业务需求进行调整,选择合适的Swap分区大小:
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。 接下来我们看下如何设置Swap分区。 ## 检查是否存在Swap分区 输入`swapon -s`,如果没有任何的信息显示,也就是还没有划分Swap分区。 ## 检查文件系统 如果没有创建Swap分区,再看下硬盘还剩下多少空间可以使用,使用`df`命令查看。因为我先创建了1G的Swap分区,还是报错,于是我选择创建一个2GB大小的Swap分区。 ## 创建Swap分区文件 创建swap文件。
dd if=/dev/zero of=/swapfile bs=2048 count=1M
该命令将创建一个大小为2GB,文件名为swapfile的Swap分区文件,`of=/swapfile`参数指定了文件的创建位置和文件名;`bs=2048`指定了文件的大小,`count=1M`代表单位。 ## 格式化swap分区
mkswap /swapfile
激活swap分区
swapon /swapfile
查询swap分区
swapon -s
你会发现在重启之后Swap分区就没了,那是因为上面的设置是一次性的,想要一直启动Swap分区,可以编辑fstab文件。
nano /etc/fstab 在最后一行添加上下面一条:
/swapfile swap swap defaults 0 0
添加成功后给swap赋予相关权限:
chown root:root /swapfile
chmod 0600 /swapfile ## 配置swappiness 实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。
cat /proc/sys/vm/swappiness 默认值是60,swappiness=0 的时候表示最大限度使用物理内存,然后才是Swap空间;swappiness=100 的时候表示积极的使用Swap分区,并且把内存上的数据及时的搬运到swap空间里面。 ### 临时性修改
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness 这里我们的修改已经生效,但是如果我们重启了系统,又会变成60。 ### 永久修改 在`/etc/sysctl.conf`文件里添加如下参数:`vm.swappiness=10`,保存重启就可以了。
http://jeremybai.github.io/blog/2015/08/01/centos-creat-swap