作者:pcfeng502
Tips For Writing an Urgent Essay
Do you want an urgent essay? It is a stressful thing university essay edit service to have to write. It can cause your mind to overheat, and you’ll most likely be nervous too. You can make the most of a few extra pointers that will help you make the entire thing easier and worry free.
如何在tomcat中允许远程deploy
I installed the tomcat 8.5.35 remotely on other machine. I did the following steps to solve this problem:
1. Change $TOMCAT_HOME/conf/server.xml (Same as the course)
<role rolename=”manager-script”/>
<role rolename=”manager-gui”/>
<role rolename=”admin-gui”/>
<user username=”tomcat” password=”tomcat” roles=”manager-script,admin-gui,manager-gui”/>
2. Because the default version come with Catalina directory, I put another file in the $TOMCAT_HOME/conf/Catalina/localhostfolder, named manager.xml, in which the content is:
<?xml version=”1.0″ encoding=”UTF-8″?>
<Context privileged=”true” antiResourceLocking=”false”
docBase=”${catalina.home}/webapps/manager”>
<Valve className=”org.apache.catalina.valves.RemoteAddrValve” allow=”^.*$” />
</Context>
3. Save and restart and profit.
linux在(无root权限,无互联网连接,无pypi源)服务器环境中安装python包
安全性和可用性是反比关系
通过这篇文章,你会学到:
- 如何通过非root用户安装python
- 如何通过非root用户安装pip
- 如何在无互联网的条件下安装python的包
- 验证安装成功
1. 如何通过非root用户安装python
- 下载源码之后,先进行shasum校验通过。
- 解压缩,并执行
./configure prefix=/home/username/python make install
- 然后把路径加到.*rc文件中
PYTHONPATH=/home/username/python/bin export PATH=$PYTHONPATH:$PATH
- source .*rc重启,并且通过
which python
验证是否成功。
2. 如何通过非root用户安装pip
TL;DR
- 把pip的wheel文件下载下来。
- 执行
python pip-9.0.1-py2.py3-none-any.whl/pip install --no-index pip-9.0.1-py2.py3-none-any.whl
Long Version
这个链接中的pfmoore写的答案,注意他提到上面写的这个安装方法没有提供任何warranty。
3. 如何在无互联网的条件下安装python的包
3.1 找到依赖包
应该找一台有互联网的机器,把目前安装paramiko(某个包)所需要的依赖给写下来。通过以下语句:
pip2 download paramiko -d /tmp --no-binary :all:
可以得到以下stdout,然后注意系统提示Successfully downloaded paramiko bcrypt cryptography pynacl pyasn1 cffi six idna asn1crypto enum34 ipaddress pycparser,就是我们需要的包。
Collecting paramiko
File was already downloaded /private/tmp/paramiko-2.4.0.tar.gz
Collecting bcrypt>=3.1.3 (from paramiko)
File was already downloaded /private/tmp/bcrypt-3.1.4.tar.gz
Collecting six>=1.4.1 (from bcrypt>=3.1.3->paramiko)
Downloading six-1.11.0.tar.gz
Saved /private/tmp/six-1.11.0.tar.gz
......
Collecting idna>=2.1 (from cryptography>=1.5->paramiko)
Downloading idna-2.6.tar.gz (135kB)
100% |████████████████████████████████| 143kB 172kB/s
Saved /private/tmp/idna-2.6.tar.gz
......
Collecting ipaddress (from cryptography>=1.5->paramiko)
Downloading ipaddress-1.0.18.tar.gz
Saved /private/tmp/ipaddress-1.0.18.tar.gz
Collecting pycparser (from cffi>=1.1->bcrypt>=3.1.3->paramiko)
Downloading pycparser-2.18.tar.gz (245kB)
100% |████████████████████████████████| 256kB 122kB/s
Saved /private/tmp/pycparser-2.18.tar.gz
Successfully downloaded paramiko bcrypt cryptography pynacl pyasn1 cffi six idna asn1crypto enum34 ipaddress pycparser
也可以写成一个shell脚本来下载+列出依赖包
#!/bin/sh
# get_pypi_dependencies.sh
PACKAGE=$1
pip download $PACKAGE -d /tmp --no-binary :all: \
| grep Collecting \
| cut -d' ' -f2 \
| grep -v $PACKAGE
执行./get_pypi_dependencies.sh bcrypto
,得到:
cffi>=1.1
six>=1.4.1
pycparser
3.2 把这些包的wheel文件下载下来
建议在官网上下载。
- 平台版本要选对,windows就选择windows的,linux就是linux的。另外32位和64位要选对。
- python2还是python3要选对
- 版本要满足最小依赖
- cpython和jpython的选择。一般都选择cpython,在安装包上会写成cp27, cp34, cp35, cp36
- UCS-2和UCS-4的选择。对于linux版本,可以看到有一个是cp27m版本,一个是cp27mu版本,分别代表了UCS-2和UCS-4.
将这些包用SFTP、跳板机等方式传递到离线的服务器上。
然后按照3.1中相反的顺序,通过以下方法安装:
pip install [*.whl]
4. 验证安装成功
执行python,并且import对应的包
5. 其他参考链接
从日志拿数据(grep, awk, sort, uniq)
解决问题:如何从一份规范化打印的日志中,统计到每一个ID的总个数。
如何统计
我用了don’t starve together游戏服务器中大家的聊天数据,统计出谁说的话最多。(最终业务目标:话说得多的可以考虑给管理员权限。)
grep Say server_chat_log.txt|awk {'print $4'}|sort|uniq -c
- 首先grep一把,是为了从众多类型(Say, Join Announcement, Quit Announcement)的日志中通过关键字拿到我想要的日志。语句为:
grep Say server_chat_log.txt
- 也可以用
less server_chat_log.txt|grep Say
,更直观,但是对于大文件,效率不如上面的高。
- 然后是分析日志格式,用awk把我想要的field打印出来。这里,开发文档中一般都有日志的格式。另外awk一般以空格作为field separator
- 我要分析的日志:
[16:01:00]: [Say] (KU_qqqqqqqq) 爱烟花的小鱼干: 哇
。可以看到,用户的ID在第4格。 - 根据awk的格式,用
awk '{print $4}'
打印出来。
- 我要分析的日志:
- 把所有ID先排序,再统计。
sort
: 排序uniq -c
: uniq -c是可以count每一个元素出现的次数。
- (Optional)最后把统计结果再排序:
sort -n -r
: 把统计结果用数字进行排序(-n
),然后再倒序排序(-r
)。
命令详解
sort
-n: 按照数字排序
-r: 倒序排序
uniq
可以从规范化打印的日志中,找到特定位置的元素,并且统计出相应的数目。需要先使用sort,再使用uniq -c来count所有元素。
Note: ‘uniq’ does not detect repeated lines unless they are adjacent. You may want to sort the input first, or use sort -u
without uniq
. Also, comparisons honor the rules specified by ‘LC_COLLATE’.
翻译成中文:
在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。
日志样例
[15:53:44]: [Say] (KU_xxxxxxxx) 子不语: 小妾。。。
[15:53:54]: [Say] (KU_xxxxxxxx) 子不语: 听着怪怪的。。
DST_Stats|9.331545,6.191408,1.257750,6,8[15:54:40]: [Say] (KU_yyyyyyyy) WaiT: 圣诞树长好就能挂彩灯了
[15:55:18]: [Leave Announcement] 二次元
DST_Stats|7.270835,4.619142,1.153396,5,8[15:55:50]: [Join Announcement] 射命丸
DST_Stats|7.367698,5.289487,0.867764,6,8DST_Stats|7.979237,5.063091,1.189214,6,8[15:57:51]: [Say] (KU_hhhhhhhh) WaiT: 感觉这个树长好要好久头疼
DST_Stats|7.539922,5.255657,0.787640,6,8[15:59:03]: [Say] (KU_hhhhhhhh) WaiT: 你们谁身上还有彩灯
DST_Stats|7.302591,5.121131,0.857226,6,8[15:59:58]: [Say] (KU_hhhhhhhh) WaiT: 姐姐没做避雷针怎么说谁弄
[16:00:18]: [Say] (KU_QQQQQQQQ) Lorzen: 等他上线吧 掉了
DST_Stats|7.112324,5.115301,0.681791,7,8[16:00:46]: [Join Announcement] 1282809699
[16:01:00]: [Say] (KU_qqqqqqqq) 爱烟花的小鱼干: 哇
[16:01:17]: [Say] (KU_QQQQQQQQ) Lorzen: 我都守一天 先让给我吧
ubuntu 16.04的boot区满了,如何删除(缩减版)
Short Version
注意:这个只针对于有经验的认识,你必须清楚你在删什么,不然有重装的风险;如果不清楚,请读Long version
- 首先看一下磁盘空间中,/boot分区的空间对不对。我用
df -h
,看到/boot分区已经100%的使用率。 - 然后在/boot分区中,直接删文件。但是注意同类的保持两个不删。
- 然后再执行
apt-get install -f
,安装新的kernel包。 - 最后执行
apt-get autoremove
,删除不用的包。 - 最终可以看到
/boot
分区不再是满的了。
'Filesystem Size Used Avail Use% Mounted on
udev 362M 0 362M 0% /dev
tmpfs 77M 13M 64M 17% /run
/dev/sda2 11G 3.0G 7.0G 30% /
tmpfs 381M 0 381M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 381M 0 381M 0% /sys/fs/cgroup
/dev/sda1 361M 151M 192M 44% /boot
tmpfs 77M 0 77M 0% /run/user/1000
Long Version
背景
- 我想apt-get安装一个包,结果系统一直提醒我”Unmet dependencies. Try ‘apt-get -f install’ with no packages”
'You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
linux-image-extra-4.4.0-92-generic : Depends: linux-image-4.4.0-92-generic but it is not going to be installed
linux-image-generic : Depends: linux-image-4.4.0-92-generic but it is not going to be installed
Recommends: thermald but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Trouble Shooting
- 于是我就按照系统提示,运行
apt-get -f install
,结果系统还是报错,安装不上,提示以下信息。其中重要的是 No apport report written because the error message indicates a disk full error,貌似是磁盘空间满了。
Unpacking linux-image-4.4.0-93-generic (4.4.0-93.116) ...
dpkg: error processing archive /var/cache/apt/archives/linux-image-4.4.0-93-generic_4.4.0-93.116_i386.deb (--unpack):
cannot copy extracted data for './boot/vmlinuz-4.4.0-93-generic' to '/boot/vmlinuz-4.4.0-93-generic.dpkg-new': failed to write (No space left on device)
No apport report written because the error message indicates a disk full error
- 接下来
df -h
,发现果然有一个分区满了,那就是/boot分区,已经100%了。
root@ubuntu:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 362M 0 362M 0% /dev
tmpfs 77M 12M 65M 16% /run
/dev/sda2 11G 5.1G 4.9G 51% /
tmpfs 381M 0 381M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 381M 0 381M 0% /sys/fs/cgroup
/dev/sda1 361M 357M 0 100% /boot
tmpfs 77M 0 77M 0% /run/user/1000
cd /boot
之后,再ls
可以得到每个文件的大小,得到以下的信息。大概有个印象是要去删除initrd.img,因为它的盘符最大。不确定哪些可以删除,于是参考了这个stackexchange链接。
解决方法
接着上面,解决方法是:
- 根据
apt-get install -f
中的no longer required提示The following packages were automatically installed and are no longer required:
,删掉这个列表中对应的/boot
分区的文档。 - 又因为
initrd.img
开头的文档最大(38M),所以删除这个。另外也可以删除对应版本中的vmlinuz, System.map, abi, config等文档。 - 其中,至少要保证两个版本的所有类型文档都还保留着,不然等着重装系统吧。
- 然后空间够了,就可以重新通过
apt-get install -f
来安装了。
如何删除文件的英文原文如下,原文在这个stackexchange链接。
Freeing Up Space on the /boot File System
The Original Poster has a separate /boot partition, and that is what is full and preventing the apt system from working. It will be necessary for him to free up space there.
If there almost enough space, go to /boot and remove a config file or two:
sudo rm config-3.2.0-19-generic-pae
- for example, but using the name of one of the kernel versions you intend to remove anyway. This will free up a little space (about 144K apiece).
- If you need more space individually remove old vmlinuz initrd, abi and System.map files until you have enough space (about 22 megs for one of my i386 kernel versions).
- Whatever you do, don’t remove them all. You should at least keep the latest two matching versions of each kind of file, for each kind of kernel you use.
断后
最后可以做一个apt-get autoremove
做cleanup。我竟然删除了1.9G的文件,看来老版本很耗存储空间呢。
GB 22239-2008(等保)阅读笔记
每一个等级的页数:
G1A1S1:4
2:8
3:14
4:15
5:1
可以看到三级和四级的页数最多。
如何进行等级保护分级是GB 17859-1999制定的。
本标准规定了计算机系统安全保护能力的五个等级,即:
第一级:用户自主保护级;
第二级:系统审计保护级;
第三级:安全标记保护级;
第四级:结构化保护级;
第五级:访问验证保护级。
具体可以参考链接
分类
S:保护数据在存储、传输、处理过程中不被泄露、破坏和免受未授权的修改的信息安全类要求。
A:保护系统连续正常的运行,免受对系统的未授权修改、破坏而导致系统不可用的服务保证类要求。
G(General): 通用安全保护类要求
如何阅读主要条目:
- 注意每一个高等级(Lvl 3)的条目,都是在低等级(Lvl 2)条目上附加的。即高等级有的条目,其对应低等级一定有。
- 高等级条目中,相对于低等级的新增的新条目,会用加黑的方式表示。
- 以下的每一级均已那一级的基准来描述,例如第二级就是S2A2G2,第三级是S3A3G3。实际定级情况下,可能会有不同组合,例如
第二级组合可能为S1A2G2, S2A2G2, S2A1G2;
第三级的定级可能S1A3G3, S2A3G3, S3A3G3, S3A2G3, S3A1G3
. 根据信息系统的定级结果对基本安全要求进行调整。根据系统服务保证性等级选择相应等级的系统服务保证类(A 类)基本安全要求;根据业务信息安全性等级选择相应等级的业务信息安全类(S 类)基本安全要求。 G与定级本身相同,A和S必须有一个等于G。
第一级
技术要求
物理安全
物理访问控制 G1
防盗窃和防破坏 G1
防雷击 G1
防火 G1
防水和防潮 G1
温湿度控制 G1
电力供应 A1
物理位置选择(G2), 电磁防护(S2),防静电(G2)
网络安全
结构安全 G1
访问控制 G1
网络设备防护 G1
安全审计(G2), 边界完整性检查(S2), 入侵防范(G2),
恶意代码防范(G3)
主机安全
身份鉴别 S1
访问控制 S1
入侵防范 G1
恶意代码防范 G1
安全审计(G2), 资源控制(A2)
剩余信息保护(S3)
可信路径(S4)
应用安全
身份鉴别 S1
访问控制 S1
通信完整性 S1
软件容错 A1
安全审计 G2, 通信保密性 S2, 资源控制 A2(会话资源等)
剩余信息保护 S3, 抗抵赖 G3
安全标记 S4,可信路径 S4
数据安全及备份恢复
数据完整性 S1
备份和恢复 A1
数据保密性(S2)
管理要求(G1)
安全管理制度
管理制度;制定和发布。
评审和修订(G2)
安全管理机构
岗位设置;人员配备;授权和审批;沟通和合作。
审核和检查(G2)
人员安全管理
人员录用;人员离岗;安全意识教育和培训;外部人员访问管理。
人员考核(G2);
系统建设管理
系统定级;安全方案设计;产品采购和使用;自行软件开发;外包软件开发;工程实施;测试验收;系统交付;安全服务商选择。
系统备案(G3);等级测评(G3)
系统运维管理
环境管理;资产管理;介质管理;设备管理;网络安全管理;系统安全管理;恶意代码防范管理;备份与恢复管理;安全事件处置。
密码管理(G2);变更管理(G2);应急预案管理(G2)
监控管理和安全管理中心(G3)
第二级(只看在前两个基础上新增的控制小类)
技术要求
主要会增加安全审计, 资源控制, XX保密性
物理安全
物理位置选择 G2
防静电 G2
电磁防护 S2
网络安全
安全审计 G2
边界完整性检查 S2
入侵防范 G2
主机安全
安全审计 G2
资源控制 A2
应用安全
安全审计 G2
通信保密性 S2
资源控制 A2
数据安全及备份恢复
数据保密性 S2
管理要求(G2)
系统建设管理
其中系统定级中,明确要求应该明确信息系统的边界和安全保护等级,并以书面形式说明信息系统确定为某个安全保护等级的方法和理由;且结果经过相关部门的批准。
第三级
略
Google voice是什么
Google Voice其实是google提供的一个VoIP服务,这个服务在很多年前就有,只是因为当时大家还没有掌握如何拥有美国IP的方法,所以没有申请。目前,很多人都掌握了拥有美国IP的方法,并且目前又有使用美国电话的诉求。比如某套路云的美国节点要求美国IP注册,然后那个套路云又比AWS便宜。
其实对于运营商来说,google voice是一个很有潜力的竞争对手(在欧美等喜欢用voicemail的国家)。优点:voicemail和文字邮件互换;cheap international call; easy conference call。
可以通过以下链接看到google voice宣传的功能:
https://www.google.com/googlevoice/about.html#tab=overview
缺点:这个在中国用不了,所以大家很多也是用来申请一个做备份的。
该网站上线HTTPS
该网站上线HTTPS。这样访问也更加安全,请使用https://liujianqiao.com/blog
访问我的blog。
macOS上网速变慢原因排查及解决方案
起因
在之前跟家人聊天,通过apple的photos软件翻了一下原来的老照片,共享了其中的一些照片给家人看。
聊天之后开始下载一部美剧,发现速度奇慢,只有30KB/s,遂觉得不对劲,一定有什么后台进程。
工具
macOS上的命令行工具:nettop
一看这个名称,就知道这个是跟linux的top equivalent的工具。以下是使用概要。
- 直接在终端输入:
nettop
- 注意nettop有以下选项,均可以通过在nettop界面中通过点击的方式:
- p:换成人类易读模式。即通过KB, MB来表示,而不是全部是bytes。
- d:delta。即切换为显示当前的增量,这样能够找到在这一秒内下载最多的程序。
- 另外,以下命令可以看到流量在网络TCP/IP层是怎么走的,相当于网络的traceroute。
nettop -m route
macOS上的图形工具:Activity Manager
Activity Manager里面的网络tab,也能够看到每个进程的网络占比。但缺点是没有delta选项,即不容易通过增量单独来看。
元凶:nsurlsessiond。苹果的Photos同步进程
找到一个占了200KB/s的线程:nsurlsessiond
查google得知这个是macOS的photos应用的云同步进程。
只要知道怎么关闭这个云同步就行。
解决方案
- 打开photos应用,点击Preference
- 打开icloud页签,能够找到iCloud Photo Library,发现其中有N百张照片在下载。
- 点击暂停一天即可。
- 然后我的下载器的速度就恢复了。