iptables -L -n
3、输入以下命令查看到每个规则chain的序列号。iptables -L -n --line-number
4、最后输入以下命令根据序列号删除指定一条防火墙规则即可。iptables -D INPUT 3 #删除INPUT的第三条已添加规则,这里3代表第几行规则
相关操作命令:service iptables status #查看iptables防火墙状态
service iptables start #开启防火墙
service iptables stop #停止防火墙
#firewall防火墙systemctl status firewalld #查看firewall防火墙服务状态
service firewalld start #开启防火墙
service firewalld stop #关闭防火墙
└──╼$git reflog
a88a5c89 (HEAD -> channel/pre) HEAD@{0}: pull: Merge made by the 'ort' strategy.
cf889952 (dev/swipe_auto) HEAD@{1}: reset: moving to cf889952
cf889952 (dev/swipe_auto) HEAD@{2}: reset: moving to cf889952
3e5a2166 HEAD@{3}: merge dev/swipe_auto: Merge made by the 'ort' strategy.
3a4a5248 HEAD@{4}: checkout: moving from dev/swipe_auto to channel/pre
cf889952 (dev/swipe_auto) HEAD@{5}: commit: 优化sql
8517922d HEAD@{6}: checkout: moving from channel/qa to dev/swipe_auto
81fcf05d (channel/qa) HEAD@{7}: merge dev/swipe_auto: Merge made by the 'ort' strategy.
7c8f5fda HEAD@{8}: pull: Fast-forward
a02ee7cd HEAD@{9}: checkout: moving from dev/swipe_auto to channel/qa
└──╼$git reset --hard 524763dc0c96249cd207956d59ad6d1f07a6a1de
HEAD is now at 524763dc 增加二次打印
成功了func ContainsString(src []string, dest string) bool {
for _, item := range src {
if item == dest {
return true
}
}
return false
}
// DifferenceStrings 取前者src与后者dest两个字符串列表的差集
func DifferenceStrings(src []string, dest []string) []string {
res := make([]string, 0)
for _, item := range src {
if !ContainsString(dest, item) {
res = append(res, item)
}
}
return res
}
// IntersectionStrings 取两个字符串列表的交集
func IntersectionStrings(src []string, dest []string) []string {
res := make([]string, 0)
for _, item := range src {
if ContainsString(dest, item) {
res = append(res, item)
}
}
return res
}
// UnionString 取两个字符串列表的并集
func UnionStrings(src []string, dest []string) []string {
res := make([]string, 0)
res = append(res, src...)
for _, item := range dest {
if !ContainsString(res, item) {
res = append(res, item)
}
}
return res
}
func main() {
now := time.Now()
fmt.Println(now)
// 必须使用这个时间才能返回正确的格式化后的时间,其他的都不行
fmt.Println(now.Format("2006/1/2 15:04:05"))
fmt.Println(now.Format("2006/01/02 15:04:05"))
fmt.Println(now.Format("15:04:05 2006/1/2"))
fmt.Println(now.Format("2006/1/2"))
}
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
编译在Windows运行的包CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
编译在Mac运行的包CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
其他说明SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
package main
import (
"fmt"
)
func main() {
var str = "C语言中文网\nGo语言教程"
fmt.Println(str)
}
运行结果为:C语言中文网
Go语言教程
4.2、使用反引号定义字符串const str = `第一行
第二行
第三行
\r\n
`
fmt.Println(str)
代码运行结果:第一行
第二行
第三行
\r\n
反引号`,是键盘上 1 键左边的键,两个反引号间的字符串将被原样赋值到 str 变量中。s := "hel" + "lo,"
s += "world!"
fmt.Println(s) //输出 "hello, world!"
dnf -y remove rpmconf yum-utils epel-release
2. 安装最新系统的重要三个内核文件,选取自己系统适合的内核文件(Centos自行在官方的BaseOS查找)#Rocky Linux 8 _x64
dnf -y install https://os.iso.st/r9/minimal/Packages/rocky-release-9.0-2.1.el9.noarch.rpm https://os.iso.st/r9/minimal/Packages/rocky-repos-9.0-2.1.el9.noarch.rpm https://os.iso.st/r9/minimal/Packages/rocky-gpg-keys-9.0-2.1.el9.noarch.rpm
#Rocky Linux 8 _aarch64
dnf -y install https://os.iso.st/r9arch/minimal/Packages/rocky-release-9.0-2.1.el9.noarch.rpm https://os.iso.st/r9arch/minimal/Packages/rocky-repos-9.0-2.1.el9.noarch.rpm https://os.iso.st/r9arch/minimal/Packages/rocky-gpg-keys-9.0-2.1.el9.noarch.rpm
显示下图即可进行下一步dnf -y --releasever=9 --allowerasing --setopt=deltarpm=false distro-sync
等待时间根据网络情况或许很久,请耐心等待;rm -rf /usr/share/redhat-logos
②:file ... epel-rpm-macros-systemd.el8 .... el9 类似的长文,等同上述,存在兼容问题,卸载稍后重装即可dnf remove -y epel-rpm-macros-systemd
此处根据CPU性能,可能会等待许久。等待结束即表示升级成功。rpm -qa | grep kernel
输出如下:[root@sp ~]# rpm -qa | grep kernel
警告:Found bdb_ro Packages database while attempting sqlite backend: using bdb_ro backend.
kernel-tools-libs-5.14.0-70.13.1.el9_0.x86_64
kernel-srpm-macros-1.0-11.el9.noarch
kernel-headers-5.14.0-70.13.1.el9_0.x86_64
kernel-modules-5.14.0-70.13.1.el9_0.x86_64
kernel-modules-4.18.0-372.13.1.el8_6.x86_64
kernel-core-4.18.0-372.16.1.el8_6.x86_64
kernel-core-4.18.0-372.13.1.el8_6.x86_64
kernel-4.18.0-372.16.1.el8_6.x86_64
kernel-4.18.0-372.13.1.el8_6.x86_64
kernel-devel-4.18.0-372.16.1.el8_6.x86_64
kernel-5.14.0-70.13.1.el9_0.x86_64
kernel-tools-5.14.0-70.13.1.el9_0.x86_64
kernel-modules-4.18.0-372.16.1.el8_6.x86_64
kernel-core-5.14.0-70.13.1.el9_0.x86_64
kernel-devel-5.14.0-70.13.1.el9_0.x86_64
kernel-devel-4.18.0-372.13.1.el8_6.x86_64
上面出现警告,我们需要重建rpm仓库cd /var/lib/rpm
rm -f __db.00*
rpm --rebuilddb
重新运行即可正常;对于输出存在5.x内核的,直接卸载旧内核rpm -e --nodeps `rpm -qa|grep -i kernel|grep 4.18`
如果没有5.x内核,进行内核安装在卸载即可dnf -y install kernel kernel-core shim
5. 此时有人注意到执行dnf命令时,会有如下报错dnf module disable perl:5.26 perl-IO-Socket-SSL:2.066 perl-libwww-perl:6.34 python36:3.6
再次执行dnf即可正常dnf update -y
reboot
sudo dnf –y upgrade
升级完成后,重新启动系统以确保变更生效,包括与内核相关的变更。sudo reboot
2、获取migrate2rocky转换脚本 Rocky Linux 提供了一个名为migrate2rocky的工具,该工具已在许多RHEL变体版本(比如CentOS、Alma Linux和Oracle Linux)上成功地测试。migrate2rocky脚本可用于轻松地就地迁移到 Rocky Linux。curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
(2)使脚本可执行。chmod +x migrate2rocky.sh
3、开始从CentOS迁移到Rocky Linux的过程sudo bash migrate2rocky.sh –r
Preparing to migrate CentOS Linux 8 to Rocky Linux 8. Determining repository names for CentOS Linux 8.... Found the following repositories which map from CentOS Linux 8 to Rocky Linux 8: CentOS Linux 8 Rocky Linux 8 appstream appstream baseos baseos extras extrassudo dnf distro-sync -y
sudo reboot
4、 检查操作系统版本 为了确认您已成功迁移到Rocky Linux,请检查操作系统版本。cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
sudo pacman -Syu :进行全面系统更新(即通俗意义的"滚")
sudo pacman -Sy: 刷新本地镜像源
sudo pacman -Syy : 强制刷新本地镜像源
sudo pacman -S packagename : 安装指定软件
sudo pacman -Sy packagename : 刷新数据库后安装指定软件
sudo pacman -Sv packagename : 显示一些操作信息后安装指定软件
sudo pacman -U pkg.tar.xz :安装本地包
sudo pacman -U link.tar.xz :安装远程包
sudo pacman -R packagename :删除指定软件,保留其全部已经安装的依赖关系
sudo pacman -Rs packagename :删除指定软件,并删除仅与该软件存在依赖关系的其他软件
sudo pacman -Rsc packagename :删除指定软件,并删除所有与该软件存在依赖关系的其他软件
sudo pacman -Rd packagename :删除指定软件,不检查依赖
sudo pacman -Ss keyword:在仓库中搜索含关键字的软件
sudo pacman -Qs keyword:在已安装软件中搜索含关键词的软件
sudo pacman -Qi packagename:搜索指定软件的详细信息
sudo pacman -Ql packagename:列出指定软件的文件
sudo pacman -Sw packagename:只下载指定软件而不安装
sudo pacman -Sc :清理未安装的软件包
sudo pacman -Scc :清理所有的缓存文件
<?php
class Daemon {
private $pidfile;
function __construct() {
$this->pidfile = dirname(__FILE__).'/daemontest.pid';
}
private function startDeamon() {
if (file_exists($this->pidfile)) {
echo "The file $this->pidfile exists.\n";
exit();
}
$pid = pcntl_fork();
if ($pid == -1) {
//这里是创建进程失败
die('could not fork');
} else if ($pid) {
//这里是父进程
echo 'start ok';
exit($pid);
} else {
//这里是子进程
file_put_contents($this->pidfile, getmypid());
return getmypid();
}
}
private function start(){
$pid = $this->startDeamon();
while (true) {
//在这里写你的业务代码,比如每隔1秒钟,往当前目录下的test.txt文件里面添加当前时间
file_put_contents(dirname(__FILE__).'/test.txt', date('Y-m-d H:i:s'), FILE_APPEND);
sleep(1);
}
}
private function stop(){
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
posix_kill($pid, 9);
unlink($this->pidfile);
}
}
public function run($argv) {
if($argv[1] == 'start') {
$this->start();
}else if($argv[1] == 'stop') {
$this->stop();
}else if($argv[1] == 'restart'){
$this->stop();
$this->start();
}else{
echo 'param error';
}
}
}
$deamon = new Daemon();
$deamon->run($argv);
启动:php Daemon.php start
停止:php Daemon.php stop
重启:php Daemon.php restart
二、使用linux命令来实现守护进程<?php
while(true){
//在这里写你的业务代码,比如每隔1秒钟,往当前目录下的test.txt文件里面添加当前时间
file_put_contents(dirname(__FILE__).'/test.txt', date('Y-m-d H:i:s'), FILE_APPEND);
sleep(1);
}
普通运行方式:php test.php
守护进程运行方式:nohup php test.php &
查看进程端口:netstat -lnpt
杀死进程:kill -9 pid
我们通过nohup命令和&结合,就可以实现守护进程运行php脚本了,非常方便。