w3m 常用快捷键
- H 显示帮助
- q 退出,会有提示的
- j,k,l,h 移动光标
- J/K 向下/向上滚屏
- T 打开一个新标签页
- Esc-t 打开所有标签页,供你选择,使用jk来上下移动
- U 输入新的网址
- B 后退
- Ctrl+q 关闭当前标签页
yield 表达式(包括 yield 和 yield from 子句)现在不允许在推导式和生成器表达式中使用(但 for 子句最左边的可迭代对象表达式除外)。 (由 Serhiy Storchaka 在 bpo-10544 中贡献。)
https://bugs.python.org/issue10544
操作系统有两层含义一种是指完整的软件包,用来管理计算机的核心层软件,以及附带的所有标准工具软件,包含命令解释器,图形用户界面,文件操作工具和文本编辑器等
另一种更狭义的含义则是指管理分配计算机资源(CPU,RAM和设备)的核心层软件。术语内核通常就是指这一种含义。
虽然在没有内核的情况下计算机也能运行程序。但是有了内核会极大的简化其他程序的编写和使用。主要归功与内核所提供的用于管理有限资源的核心软件层。
操作系统,内核,shell之间的关系
操作系统包括操作系统内核,驱动,运行库,引导程序等
内核,操作系统最核心的内容,一般来说内核特指一个或者几个文件
shell,一般是指跟用户直接交互的界面,可以是命令行也可以是窗口,用户通过shell 访问并控制计算机
进程调度
内存管理
提供文件系统
创建和终止程序
对设备的访问
联网
提供系统调用应用编程接口(API)
$ sudo apt remove systemtap
$ sudo apt install g++ make git libelf-dev libdw-dev
$ git clone git://sourceware.org/git/systemtap.git
$ cd systemtap/
$ ./configure && make // no errors
$ sudo make install
$ sudo stap -e 'probe begin { printf("Hello, World!\n"); exit() }'
[sudo] password for knudfl:
Hello, World!
安装完成后执行下列命令检验是否完成安装
如果安装成功显示下列内容
Pass 1: parsed user script and 476 library scripts using 119196virt/87952res/5764shr/82508data kb, in 80usr/100sys/189real ms.
Pass 2: analyzed script: 1 probe, 2 functions, 0 embeds, 0 globals using 120780virt/89660res/5900shr/84092data kb, in 0usr/0sys/6real ms.
Pass 3: translated to C into "/tmp/stapTYYmwZ/stap_455006ea742bbf1a3302e2dbfd0820a7_1159_src.c" using 120780virt/89660res/5900shr/84092data kb, in 0usr/0sys/0real ms.
Pass 4: compiled C into "stap_455006ea742bbf1a3302e2dbfd0820a7_1159.ko" in 8380usr/1750sys/6001real ms.
Pass 5: starting run.
hello systemtap!
Pass 5: run completed in 0usr/20sys/436real ms.
原文链接:https://cjting.me/2017/05/13/how-git-generate-diff/
diff 是我们每天都要使用的一个功能,每次提交时,我都习惯先用 git diff --cached 看看这次提交更改了些什么,确定没问题,然后再 git commit。git 生成的 diff 非常直观,直观到我从来都没有去思考过 diff 是怎么生成的,觉得这应该是很简单的一件事,两个文件做个对比,不就行了。
pytest是一个强大的Python测试工具,它可以用于所有类型和级别的软件测试。 Pytest可以被开发团队,QA团队,独立测试小组,实践TDD的个人和开放源代码项目。实际上,整个互联网上的项目都是从unittest或者nose转向pytest,包括Mozilla和Dropbox。为什么?因为pytest提供 强大的功能,如'断言'重写,第三方插件模型,强大但简单的fixture模型。
pytest是软件测试框架,这意味着pytest是命令行工具。它会自动找到你写的测试,运行测试并报告结果。可编写插件或安装第三方来扩展插件。它可以用来测试Python发行版。它很容易与其他工具对接,如持续集成和网页自动化
1.查看journal 日志所占用的空间
2.清理不必要的journal 日志
3.查看ubuntu 下载的软件包
4.产看inodes消耗情况
5.删除用户后遗留下的垃圾文件
6.清除不必要的core文件(慎用)
1.logger 对象
2.logger对象的handler?
3.Formatter?
使用logging.basicConfig(**kwargs) 会对对root logger进行一次性配置,比如如果只有logger对象而没有handler时会调用basicConfig(**kwargs)中的参数,如果没有basicConfig(**kwargs)则这个logger中记录的日志信息不会被输出。
logging.basicConfig()函数是一个一次性的简单配置工具使,也就是说只有在第一次调用该函数时会起作用,后续再次调用该函数时完全不会产生任何操作的,多次调用的设置并不是累加操作。
在 /etc/apt/source.list.d/下创建pgdg.list并添加如下内容:
deb https://mirrors.cloud.tencent.com/postgresql/repos/apt/ bionic-pgdg main
#deb https://mirrors.tencentyun.com/postgresql/repos/apt/ bionic-pgdg main
#deb-src http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main
执行更新apt 源
pg_ctlcluster 12 main start
等效于如下命令:
/usr/lib/postgresql/12/bin/postgres "-D" "/var/lib/postgresql/12/main" "-c" "config_file=/etc/postgresql/12/main/postgresql.conf"
或者使用systemd 启动postgresql 12
postgresql 12 在ubuntu的服务名为[email protected]
systemctl start [email protected]
这里的main指的是数据集簇名
pg_ctl路径位于/usr/lib/postgresql/12/bin/pg_ctl
参考资料:
[1].https://github.com/digoal/blog/blob/master/201901/20190105_01.md (PostgreSQL 培训视频(含PG知识图谱、Oracle迁移到PG知识点))
[2].https://github.com/digoal/blog/blob/master/201812/20181203_01.md (PostgreSQL 11 参数模板 - 珍藏级)
[3].https://github.com/digoal/blog/blob/master/202001/20200118_02.md (PostgreSQL+MySQL 联合解决方案课程 - 汇总视频、课件)
[4].https://github.com/digoal/blog/blob/master/201805/20180524_02.md (PostgreSQL 多应用场景实践 - 沙箱实验)
[5].https://github.com/digoal/blog (完整资料)
%<(N, trunc) 下一个单元的输出宽度限制为N列, 左对齐
%<|(N, trunc) 下一个单元输出至全局第N列, 左对齐
%>, %>|, %>>, %>< 类似, 分别为 右对齐, 右对齐, 右对齐(如果左边有多余空格则复用), 居中对齐
在Python中,字典就是一个个的映射,为了实现这个功能,Python必须能够做到,给出一个Key,找到哪一个Value与这个Key对应。如果我们将Key-value键值对存放到一个List中,每当需要的时候,就去遍历这个List,用Key和键值对对应的Key去进行对比。但是这样实现方法,如果数据量很大的时候就变得很低效。他的算法复杂度是O(n),n是存放键值对的数量。
为此Python使用了Hash(哈希)的方法来实现,要求每一个存放到字典中的对象都要实现Hash函数,这个函数可以产生一个唯一的int值,叫做Hash Value(哈希值),通过这个int值,就可以快速的确定对象在字典中的位置。然而,由于Hash碰撞的存在,可能存在两个对象的Hash值是相同的,所以在查找字典的时候,要比较Hash的值,还要比较Value的值。
今天我自己的一台服务器就这样被挂上了挖矿脚本....
今天就了解一下我的服务器是如何被利用的。
1.在默认情况下,redis会绑定在0.0.0.0:6379,因为自己图方便就把防火墙给关了。这样就导致了redis服务器被暴露在公网上。同时我也了解到,如果没有开启授权的情况下,任意一个用户如果可以访问Redis服务器,那么就会在未授权的情况下访问Redis服务器,同时访问服务器。攻击者在未授权的情况下访问Redis,可以通过Redis的方法将自己的公钥写入到目标服务器的authotrized_keys文件中,进而可以直接登录目标服务器;而且如果Redis是以root用户登录的话,那么可以用此方法直接获取root用户权限。
