- 通过 FTP 连接网站,找到
wp-content/themes/当前主题/functions.php文件 。 - 在文件末尾添加代码:
wp_set_password('新密码', 1);(1 代表管理员 ID)。 - 保存文件后访问网站任意页面触发执行,登录成功后立即删除该代码 。
- 操作完成后务必修改为复杂密码并删除临时文件,避免安全风险 。
当你在 macOS 上遇到“Library not loaded: @rpath/libcurl.4.dylib”的错误时,这通常意味着你的应用程序在运行时找不到指定的动态链接库(DLL)文件。这种情况通常发生在以下几种情况:
解决方案
- 确保库文件存在:确保
libcurl.4.dylib文件存在于你的应用程序的@rpath目录下。你可以使用install_name_tool来查看和修改库文件的路径。 - 设置正确的运行路径:使用
install_name_tool来修改库文件的安装名称(install name)。例如,如果你的应用程序位于/Applications/MyApp.app,而libcurl.4.dylib位于该应用的Contents/Frameworks目录下,你可以使用以下命令来设置正确的运行路径:install_name_tool -change @rpath/libcurl.4.dylib @executable_path/../Frameworks/libcurl.4.dylib /Applications/MyApp.app/Contents/MacOS/MyApp - 或者,如果你使用的是 Xcode,可以在项目的 Build Phases 中添加一个 Run Script Phase,在其中加入上述命令。
- 检查构建配置:确保你的项目配置正确设置了运行时搜索路径(Runpath Search Paths)。在 Xcode 中,你可以在 Target 的 Build Settings 中查找
Runpath Search Paths,并添加包含libcurl.4.dylib的目录。例如:- 在 Xcode 的 Build Settings 中,找到
Runpath Search Paths并添加@executable_path/../Frameworks。
- 在 Xcode 的 Build Settings 中,找到
- 使用 lipo 工具验证架构:确保
libcurl.4.dylib支持你的应用程序架构(如 arm64, x86_64 等)。你可以使用lipo工具来检查和修改库文件的架构:lipo -info /path/to/libcurl.4.dylib如果库文件的架构不正确,你可能需要重新编译或获取正确架构的库文件。 - 清理和重建项目:有时候,简单的清理和重建项目可以解决路径或配置问题。在 Xcode 中,你可以选择 Product > Clean Build Folder,然后重新构建项目。
通过上述步骤,你应该能够解决 “Library not loaded: @rpath/libcurl.4.dylib” 的错误。如果问题仍然存在,检查是否有其他依赖问题或配置错误,并确保所有依赖库都已正确安装和配置。
错误原因
可能由于强制结束了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 直接将分组写入文件中,而不是不分析并打印出来。
自 17.05 版本开始,Docker 支持多步骤镜像创建( Multi-stage build)特性,可以精简最终生成的镜像大小 。
对于需要编译的应用(如 C、Go或Java语言等)来说,通常情况下至少需要准备两个 环境的 Docker镜像:
- 编译环境镜像 : 包括完整的编译引擎、依赖库等,往往比较庞大。作用是编译应用为二进制文件;
- 运行环境镜像: 利用编译好的二进制文件,运行应用,由于不需要编译环境,体积比较小。
使用多步骤创建,可以在保证最终生成的运行环境镜像保持精筒的情况下,使用单一的Dockerfile,降低维护复杂度 。
以 Go语言应用为例。创建干净目录,进入到目录中,创建main.go文件,内容为:
// main.go will output "Hello, Docker"
package main
import ("fmt")
func main() {
fmt.println("Hello, Docker")
}
创建 Dockerfile,使用 golang:1.9镜像编译应用二进制文件为 app,使用精简的镜像 alpine:latest 作为运行环境 。Dockerfile 完整内容为:
FROM golang:1.9 as builder # define stage name as builder
RUN mkdir -p /go/src/test
WORKDIR /go/src/test
COPY main.go
RUN CGO_ENABLED=O GOOS=linux go build -o app
FROM alpine:latest
RUN apk –no-cache add ca-certificates
WORKDIR /root/
COPY –from=builder /go/src/test/app . # copy file from the builder stage
CMD ["./app"]
执行如下命令创建镜像,并运行应用:
$ docker build -t yeasy/test multistage:latest .
Sending build context to Docker daemon 3.072kB
Step 1/10 : FROM golang:1.9
Successfully built 5fd0cb93dda0
Successfully tagged yeasy/test-multistage:latest
$ docker run --rm yeasy/test-m ultistage:latest
Hello, Docker
查看生成的最终镜像,大小只有 6.55 MB:
$docker images | grep test-multistage
yeasy/test-multistage latest 5fd0cb93dda0 1 minutes ago 6.55MB
文章来源:
《Docker技术入门与实践》第三版 杨保华、戴王剑、曹亚仑 编著
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。