Python常用英文单词

一、交互式环境与print输出

1、print:打印/输出
2、coding:编码
3、syntax:语法
4、error:错误
5、invalid:无效
6、identifier:名称/标识符
7、character :字符

二、字符串的操作

1、user:用户
2、name:姓名/名称
3、attribute:字段/属性
4、value:值
5、key:键

三、重复/转换/替换/原始字符串

1、upper:上面
2、lower:下面
3、capitalize:用大写字母写或印刷
4、title:标题
5、replace:替换
6、old:旧的
7、new:新的
8、count:计数
9、swap:互换
10、case:情形
11、path:路径
12、new:新的\新建
13、project:项目
14、test:测试
15、file:文件
16、data:数据

四、去除/查询/计数

1、strip:去除
2、index:索引
3、find:查找
4、count:计数
5、start:开始
6、end:结束
7、chars:字符
8、sub:附属

五、获取输入/格式化

1、input:输入
2、prompt:提示
3、ID:身份证
4、format:格式化
5、args(argument):参数
6、kwargs:关键字参数
7、year:年
8、month:月
9、day:日

六、元组

1、tuple:元组
2、max:最大
3、min:最小
4、iterable:可迭代
5、key:关键字
6、function:方法/函数
7、stop:停止
8、object:对象

七、列表

1、list:列表
2、reverse:反向
3、true:真
4、false:假
5、append:附加
6、extend:扩展
7、insert:插入
8、pop:取出
9、remove:移除
10、del(delete):删除
11、clear:清除
12、sort:排序

八、集合

1、set:集合/设置
2、add:添加
3、update:更新
4、discard:丢弃
5、intersection:相交
6、union:联合
7、difference:差数
8、symmetric:对称
9、in:在…里面
10、not:不/不是
11、disjoint:不相交
12、subset:子集
13、superset:父集/超集
14、copy:复制

九、字典

1、dict:字典
2、key:键/关键字
3、value:值
4、item:项
5、mapping:映射
6、seq(sequence):序列
7、from:从/来自
8、get:获取
9、default:默认
10、none:没有
11、arg:可变元素
12、kwargs(keyword args):可变关键字元素

十、循环

1、for…in…循环的使用
2、while…循环的使用
3、range:范围
4、sep(separate):分隔
5、flush:冲刷
6、step:步长
7、continue:继续
8、break:突破/跳出

十一、条件/跳出与结束循环

1、if:如果
2、else:否则

十二、运算符与随机数

1、module:模块
2、sys(system):系统
3、path:路径
4、import:导入
5、from:从…

十三、定义函数与设定参数

1、birthday:出生日期
2、year:年份
3、month:月份
4、day:日期
5、type:类型
6、error:错误
7、missing:丢失
8、required:必须
9、positional:位置
10、unsupported:不支持

十四、设定收集参数

1、create:创建
2、info:信息
3、age:年龄
4、height:高度
5、width:宽度
6、weight:重量
7、splicing:拼接
8、params:参数
9、volume:体积
11、operand:操作数

十五、嵌套函数/作用域/闭包

1、inside:内部
2、outside:外部
3、radius:半径
4、perimeter:周长
5、case:情形
6、synthesis:合成
7、execute:执行

十六、递归函数

1、recursion:递归
2、Infinite:无穷
3、maximum:最大值
4、depth:深度
5、exceeded:超过
6、factorial:阶乘
7、search:查询
8、power:幂
9、lower:下方
10、upper:上方
11、middle:中间
12、assert/assertion:异常

十七、列表推导式/lambda表达式

1、square:平方
2、even:偶数
3、comprehension:理解
4、lambda:希腊字母λ的英文名称,大名鼎鼎的游戏半条命里面的logo就是这个。

十八、列表推导式/lambda表达式

1、regular:规则
2、expression: 表达式
3、group:组
4、match:匹配
5、span:跨度
6、ignore case:忽略 大小写
7、multi line:多 行
8、dot all:点 全部
9、unicode:万国码
10、verbose:累赘
11、pos/position:位置

分类: Python | 留下评论

使用screen管理远程会话

在ssh远程登录后,经常遇到为每一个任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。那是因为SIGHUP信号导致了程序的终止。

在Linux/Unix中,有这样几个概念:

进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。

会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。

会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

根据POSIX.1定义:

挂断信号(SIGHUP)默认的动作是终止程序。
当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。如果会话期首进程终止,则该信号发送到该会话期前台进程组。一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。如果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。
nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。

nohup [argument…] &
虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。

其实我们可以使用一个更为强大的实用程序screen

Screen

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

多窗口

在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。

会话共享

Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

GNU's Screen 官方站点:

http://www.gnu.org/software/screen/

语法

# screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

参数说明
-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

#### 常用screen参数

screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。

C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁

C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9

C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> Time,显示当前时间,和系统的 load

C-a k -> kill window,强行关闭当前的 window

C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

#### screen 会话共享

还有一种比较好玩的会话恢复,可以实现会话共享。假设你在和朋友在不同地点以相同用户登录一台机器,然后你创建一个screen会话,你朋友可以在他的终端上命令:

[root@TS-DEV ~]# screen -x

这个命令会将你朋友的终端Attach到你的Screen会话上,并且你的终端不会被Detach。这样你就可以和朋友共享同一个会话了,如果你们当前又处于同一个窗口,那就相当于坐在同一个显示器前面,你的操作会同步演示给你朋友,你朋友的操作也会同步演示给你。当然,如果你们切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

#### 屏幕分割

现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。

使用快捷键:
C-a S 将显示器水平分割
C-a | 垂直分屏,分屏以后也可以使用(Screen 4.00.03以后版本)
C-a 在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。
C-a X 快捷键关闭当前焦点所在的屏幕区块
C-a Q 关闭除当前区块之外其他的所有区块。关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。


关于nanopi的一些总结

有一个nanopi放在家中做vpn用,是基于ubuntu环境搭建的ipsec l2tpvpn,一直没有做总结。以至于快忘记了,这里总结一下以便日后温故。

我的nanopi+led hat

NanoPi NEO2是友善之臂团队推出的全新一代超小型ARM计算机,它采用全志64位四核A53处理器H5, 内置六核Mail450 GPU, 标配512M DDR3内存(可选1GB),可支持运行Ubuntu Core,Armbian等嵌入式操作系统。NEO2小巧精致,见图。

nanopi-neo2.jpg

ubuntu的安装
下载需要的固件文件(officail-ROMs目录)和烧写工具(tools目录):

使用以下固件:

nanopi-neo2_sd_friendlycore-xenial_3.10_arm64_YYYYMMDD.img.zip

基于UbuntuCore构建的系统固件,使用Linux-3.10内核

nanopi-neo2_sd_friendlycore-xenial_4.14_arm64_YYYYMMDD.img.zip

基于UbuntuCore构建的系统固件,使用Linux-4.14内核

nanopi-neo2_sd_friendlywrt_4.14_arm64_YYYYMMDD.img.zip

基于OpenWrt构建的系统固件,使用Linux-4.14内核
烧写工具:
win32diskimager.rar Windows平台下的系统烧写工具,Linux平台下可以用dd命令烧写系统,Macos可以用balena etcher。
固件下载地址:
http://download.friendlyarm.com/nanopineo2

安装好后,启动引导。
默认密码为:pi:pi root:fa

使用IPsec VPN服务器自动设置脚本

参考 https://github.com/hwdsl2/setup-ipsec-vpn

wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh

发现脚本启动fail2ban.service服务时报错。
用journalctl -xe查看问题所在


root@NanoPi-NEO2:~# journalctl -xe
-- Unit fail2ban.service has failed.
--
-- The result is failed.
Sep 30 00:55:12 NanoPi-NEO2 systemd[1]: fail2ban.service: Unit entered failed state.
Sep 30 00:55:12 NanoPi-NEO2 systemd[1]: fail2ban.service: Failed with result 'exit-code'.
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: fail2ban.service: Service hold-off time over, scheduling restart.
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: Stopped Fail2Ban Service.
-- Subject: Unit fail2ban.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit fail2ban.service has finished shutting down.
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: Starting Fail2Ban Service...
-- Subject: Unit fail2ban.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit fail2ban.service has begun starting up.
Sep 30 00:55:13 NanoPi-NEO2 fail2ban-client[4371]: ERROR No file(s) found for glob /var/log/auth.log
Sep 30 00:55:13 NanoPi-NEO2 fail2ban-client[4371]: ERROR Failed during configuration: Have not found any log file
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: fail2ban.service: Control process exited, code=exited status=255
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: Failed to start Fail2Ban Service.
-- Subject: Unit fail2ban.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit fail2ban.service has failed.
--
-- The result is failed.
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: fail2ban.service: Unit entered failed state.
Sep 30 00:55:13 NanoPi-NEO2 systemd[1]: fail2ban.service: Failed with result 'exit-code'.
Sep 30 00:55:14 NanoPi-NEO2 systemd[1]: fail2ban.service: Service hold-off time over, scheduling restart.
Sep 30 00:55:14 NanoPi-NEO2 systemd[1]: Stopped Fail2Ban Service.
-- Subject: Unit fail2ban.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit fail2ban.service has finished shutting down.
Sep 30 00:55:14 NanoPi-NEO2 systemd[1]: fail2ban.service: Start request repeated too quickly.
Sep 30 00:55:14 NanoPi-NEO2 systemd[1]: Failed to start Fail2Ban Service.
-- Subject: Unit fail2ban.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit fail2ban.service has failed.
--
-- The result is failed.
Sep 30 01:00:01 NanoPi-NEO2 CRON[4403]: pam_unix(cron:session): session opened for user root by (uid=0)
Sep 30 01:00:01 NanoPi-NEO2 CRON[4404]: (root) CMD ( /bin/bash /usr/bin/sync_ntp_rtc.sh /dev/rtc0)
Sep 30 01:00:03 NanoPi-NEO2 CRON[4403]: (CRON) info (No MTA installed, discarding output)
Sep 30 01:00:03 NanoPi-NEO2 CRON[4403]: pam_unix(cron:session): session closed for user root
root@NanoPi-NEO2:~# cat /var/log/auth.log
cat: /var/log/auth.log: No such file or directory

最终发现没有auth.log生成,导致服务启动失败,那就touch一个吧。

root@NanoPi-NEO2:~# touch /var/log/auth.log

问题解决。

一些安装中的补充:

Ubuntu & Debian
首先,更新你的系统: 运行 apt-get update && apt-get dist-upgrade 并重启。这一步是可选的,但推荐。

要安装 VPN,请从以下选项中选择一个:

选项 1: 使用脚本随机生成的 VPN 登录凭证 (完成后会在屏幕上显示):

wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh

选项 2: 编辑脚本并提供你自己的 VPN 登录凭证:

wget https://git.io/vpnsetup -O vpnsetup.sh
nano -w vpnsetup.sh

[替换为你自己的值: YOUR_IPSEC_PSK, YOUR_USERNAME 和 YOUR_PASSWORD]

sudo sh vpnsetup.sh

注: 一个安全的 IPsec PSK 应该至少包含 20 个随机字符。
选项 3: 将你自己的 VPN 登录凭证定义为环境变量:

# 所有变量值必须用 '单引号' 括起来
# *不要* 在值中使用这些字符:  \ " '
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo \
VPN_IPSEC_PSK='你的IPsec预共享密钥' \
VPN_USER='你的VPN用户名' \
VPN_PASSWORD='你的VPN密码' \
sh vpnsetup.sh

注: 如果无法通过 wget 下载,你也可以打开 vpnsetup.sh (或者 vpnsetup_centos.sh),然后点击右方的 Raw 按钮。按快捷键 Ctrl-A 全选, Ctrl-C 复制,然后粘贴到你喜欢的编辑器。

宝塔面板php无法安装问题

apt-get install curl
apt-get install libcurl4-gnutls-dev
apt-get install libmcrypt4 libmcrypt-dev```
分类: nanopi | 留下评论