PHP知识点小结

抽象类与接口

抽象类

抽象类使用abstract关键字申明,将某个类标记为抽象类,可以推迟实现所声明的方法。将方法定义为抽象方法,只需要省略掉包含所有大括号的方法体, 并以分号结尾即可。

抽象类不能被直接实例化,必须被继承!

- 阅读剩余部分 -

  #scp下载远程服务器的文件
    scp [email protected]_dev:/root/bak.sql ~/

    #sed 命令
    sed -i '2s/\#//g' ~/.zshrc &&\
    sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions z zsh-syntax-highlighting)/g' ~/.zshrc &&\

    # 将本地分支推送至远程
    gp origin price:amount/dong
    git push origin HEAD:new/branch
    #删除远程分支
    git push origin :remote/branch
    git push origin --delete <branchName> 删除远程分支, git branch -d <branchName> 删除远程分支
    git push origin --delete tag <tagname> 删除远程**tag**
    git stash 将当前分支中未提交的commit暂存起来(暂存工作现场,去别的分支coding),可以多次**stash**
    git stash list 列出当前分支存储的工作现场(未提交的代码),
    git stash apply [email protected]{0} 指定恢复某一个**stash**
    git stash apply 恢复分支中暂存的工作现场(未提交的代码), git stash drop 删除暂存的工作现场
    git stash pop 恢复分支中暂存的commit,同事暂存的commit也删除了
    git status -s 命令打印出来的信息前面 AM 意思是文件在我们添加到缓存之后又有改动(不是最新的) D 表示文件目前被删除了 ...等等 (这些以后再添加)
    git config --global core.autocrlf input *git add*  的时候出现warning :LF will be replaced by CRLF 警告。是在两个系统中空格和换行不一样
    git reset HEAD  取消缓存已缓存的内容,取消之前git add添加但不包含在下一提交快照中的缓存
    git log 查看Git 操作命令记录(提交记录)
    git reglog 查看命令历史
    git reset --hard 撤销一次提交(commit)
    git reset --hard 2345d 指向2345d版本(回滚到2345d那次提交)
    git revert 2345d 撤销2345d的提交,将这次回滚写入提交记录,以便推送到远程仓库(多人合作)
    git branch 命令没有参数的时候,列出本地的分支,所在的分支行首会有一个*号
    git branch <分支名> 创建一个新的分支 git checkout <分支名> 切换到指定分支。
    git checkout -b <分支名> 如果分支存在则切过去,不存在则创建切过去。
    git branch -d <分知名> 删除一个分支。
    git push origin --delete <branchName> 删除远程分支。
    git merge 将一个分支并入当前的分支中去
    git tag xxx 给历史记录中的某个重要时刻打上一个标签,git tag -a < ooxx>  给这个标签注释
    git diff --shortstat "@{0 day ago}"  查看今天写了多少代码
    ssh-keygen -t rsa -b 4096 -C "hi.wudong#gmail.com" 创建sshkey
    .gitignore 文件用于忽略文件的进行提交。前提是该文件没有写入快照中!( .gitignore只适用于尚未添加到git库的文件。如果已经添加了,则需用 git rm --cached移除后再重新commit)
    git push origin --delete branchname4 删除本地或者远程一个分支
    git remote set-url origin [url] Git修改远程仓库地址 OR 先删后加 git remote rm origin
    git remote add origin [url]

Git 同步Fork过来的分支

  1. 添加Fork过来的仓库地址

     `git remote add (fork_address) [email protected]/....`
  2. 拉取Fork仓库的

     `git fetch fork_address`
  3. 切换到本地分支

     `git checkout master`
  4. 将fork_address 分支合并到本地分支 本地的 master 分支便跟上游仓库保持同步了,并且没有丢失你本地的修改。

     `git merge fork_address/master`
  5. 本地分支已经跟Fork过来的分支同步了,同时要推送到远程仓库中去

     `git pull origin master`
    

记录常用的一些Linux命令。

添加开机自启动脚本

  1. 首先查看当前机器的启动状态
$ runlevel
  N 5

N 5 则说明当前启动是在/etc/rc5.d/文件夹下面

  0~6的各个级别

  • 0-Halt 关机模式
  • 1-Single 单用户模式
  • 2-Full multi-user with display 多用户模式
  • 3-Full multi-user with display 多用户模式
  • 4-Full multi-user with display 多用户模式
  • 5-Full multi-user with display 多用户模式
  • 6-Reboot 重启
  1. 将所需启动脚本复制到/etc/init.d/文件夹中

注意权限

  1. 创建一个软链接至/etc/rc5.d/

举个茄子:$ sudo ln -s /etc/init.d/qiezi /etc/rc5.d/S66qiezi

注意在创建软链接至rc5.d中,需要注意命名规则

S 表示 start 开启服务

[number] 表示该脚本运行的优先级,数字越小优先级越高

[service name] 表示服务的名称

参考文献


Linux 常用命令

wget

在终端下载网络文件

参数作用
-b后台下载模式
-O下载到指定目录
-t最大尝试次数
-c断点续传
-p下载页面所有资源
-r递归下载
wget http://1024.com/ooxx.rmvb

pidof

查询某个指定服务进程的PID值 pidof [参数] [服务名称]

pidof nginx

uname

查看系统内核于系统版本信息 通常加上参数__-a__

[[email protected] ~]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

uptime

查看系统负载信息

[[email protected] ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
系统时间   运行时间  终端数量 平均负载值(1,5,15)minus

free -h

显示内存使用信息

last

查看所有系统登入记录

history [-c]

当前用户在系统中执行过得命令记录

history !23 执行history第23条命令

查看文件

cat more head tail

cat__, __more 加上-n 显示行号
__tail__, -n 显示最后n行记录, -f 动态显示

tr

替换文本中的字符 eg: tr [原始字符] [目标字符]

wc

统计文本中的 行数-l,  字数-w, 字节数-c

cut

默认按行提取文本字符 eg: cut [参数] 文本
-d 设置间隔符,  -f 设置需要看的列数

cut -d: -f1 /etc/passwd
以:为间隔符,看第一列的数据

cp

复制文件或者目录

参数作用
-p保留原始文件属性
-d若对象问'链接文件',则保留链接文件属性
-r递归持续复制(目录)
-i若目标文件存在,询问是否覆盖
-a相当于-pdr

tar

打包,解压

参数作用
-c创建压缩文件
-x解压文件
-z解压Gzip
-j解压bzip2
-v显示解压过程
-C解压到指定目录
-f__必须放到参数最后__,指定解压(压缩)文件

grep

对文本内容进行关键词搜索匹配

参数作用
-n显示搜索出来的行号
-v反选

find

按照指定格式查找文件,  find [查找路径] [寻找条件] 操作

参数作用
-name匹配名称
-perm匹配权限(mode为完全匹配,-mode为包含即可)
-user匹配所有者
-group匹配所有组
-mtime -n +n匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n匹配访问文件的时间-n指n天以内,+n指n天以前
-ctime -n +n匹配修改权限的时间-n指n天以内,+n指n天以前
-nouser匹配无所有者的文件
-nogroup匹配无所有组的文件
-newer f1 !f2匹配比文件f1新却比f2旧的文件
--type b/d/c/p/l/f匹配文件类型(块设备、目录、字符设备、管道、链接文件、文件文件)
-size匹配文件的大小(+50k查找超过50k的文件,而-50k则代表查找小于50k的文件)
-prune忽略某个目录
-exec {} ;后面可接对搜索到结果进一步处理的命令(下面会有演示)
"-exec {} \;"其中的{}代表find命令搜索出的逐个文件,并且记得命令的结尾必须是\;
[[email protected] ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;

which

查看命令所在路径

which php

alias

自定义命令的别名

[[email protected] ~] $ alias rm=ls
[[email protected] ~] $ alias
alias rm='ls'

unalias

alias 相反

重定向,管道符,环境变量

重定向

输入重定向

符号作用
命令 < 文件将文件作为命令的标准输入
命令 << 分界符从标准输入中读入,直到遇见“分界符”才停止
命令 < 文件1 > 文件2将文件1作为命令的标准输入并将标准输出到文件2

输出重定向

符号作用
命令 > 文件将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

管道符

把前一个命令原本要输出到屏幕的数据当做后一个命令的标准输入

command A | command B | command C

转义符

反斜杠(\)的作用就是转义后面的一个变量变为单纯的字符串.
单引号('')则是转义其中所有的变量为单纯的字符串.
而双引号("")是保留其中的变量属性不转义.
反引号(``)则是把其中的命令执行后返回一个结果.

查看文件大小 du ,df

du(disk usage) 查看文件目录占用空间大小

#查看当前目录下所有目录及子目录大小
$ du -h
$ du -ah # -h用人性化的单位显示, -a 显示目录和文件
$ du -h www #只查看当前目录下的www目录

# 指定目录深度
$ du -h --max-depth=0 #-–max-depth=n:只深入到第n层目录,此处设置为0,即表示不深入到子目录

# df 用于查看设备的空间使用率
$ df -lh
#查看设备使用率

项目上线之后,查看日志,发现有很多爬虫在恶意扫描网站,对服务器的性能和资源造成了影响,决定使用 fail2ban 稍微屏蔽下这些家伙

安装fail2ban

ubuntu

sudo apt-get install fail2ban

centos

sudo yum install fail2ban

配置fail2ban

编写规则

sudo vim /etc/fail2ban/filter.d/nginx-404.conf

## 加入以下内容
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404
ignoreregex =

编写fail2ban配置

sudo vim /etc/fail2ban/jail.local

## 加入以下内容
[nginx-404]
enabled = true
port    = http,https
filter  = nginx-404
logpath = /var/log/nginx/access.log #根据实际日志路径配置
maxretry = 10  #最大尝试次数
findtime = 300 #允许失败次数的时间范围
bantime = 86400 #客户端主机禁止时长(秒)

重启fail2ban

#ubuntu
sudo service fail2ban restart
#centos
sudo systemctl restart fail2ban

nginx屏蔽普通爬虫

Nginx可以根据User-Agent过滤请求,在URL入口位置通过一个正则表达式就可以过滤不符合要求的爬虫请求,代码如下:

    location / {
        if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {
            return 503;
        }
        # 正常处理
        ...
    }

变量$http_user_agent是一个可以直接在location中引用的Nginx变量。~*表示不区分大小写的正则匹配,通过python就可以过滤掉80%的Python爬虫。

常用命令

# 查看使用那些规则
sudo fail2ban-client status

# 列出被禁止的IP
sudo iptables -nvL

# 移除被禁止的IP
sudo iptables -D f2b-nginx-404 -s 6.6.6.6 -j REJECT

参考链接
https://linux.cn/article-6718-1.html

https://serverfault.com/questions/849854/fail2ban-blocking-behaviours-depending-on-the-status-code

参考

之前使用过GitHub的一项服务与hexo写博客,访问速度不是很理想。平时又很懒,导致写博客这件事中断了好久。重新写博客也是为了让自己管理好时间,并且从日常工作中能够提取出有用的知识,通过写博客来巩固。打算将博客搭在VPS主机上面。

博客的域名解析

如果要使用HTTPS协议来链接,这一步最好首先完成,因为DNS解析会有缓存,在使用Let's Encrypt 生成证书的时候,可能会出现以下错误:

DNS problem: NXDOMAIN looking up XXX

这是由于域名解析没有生效,导致的。解决办法是等一会儿...

本地hexo的安装


略...

服务器(vps)环境配置

使用oneinstack脚本工具安装nginx,Let's Encrypt 等软件。

在oneinstack安装目录执行./vhost新增虚拟主机配置,填入相应信息。

新建git仓库

cd /path/your/blog
git init --bare blog.git

通过git-hooks同步网站内容,使用post-receive这个方式.

vim /path/your/blog/blog.git/hooks/post-receive
 # 在文件中添加以下内容

#!/bin/sh
git --work-tree=/data/wwwroot/blog --git-dir=/path/your/blog/blog.git checkout -f

#赋予这个文件可执行权限(当前登录ssh用户)
sudo chmod +x post-receive

#注意网站根目录当前登录用户必须有可写权限 必须让执行post-receive用户对站点根目录具有写权限
sudo chown -R www:your /data/wwwroot/bolg
sudo chmod -R g+w /data/wwwroot/bolg

配置本地hexo _config.yml

deploy:
  type:  git
  repo:
    vps: [email protected]:/path/your/blog/blog.git

#其中VPS-IP为服务器ip地址,your是登录名

使用ssh免密码登录服务器

将本地ssh密钥添加至服务中authorized_keys

ssh-copy-id [email protected]