回到首页

7月6日下午学习笔记

非root用户直接执行docker命令

将当前用户加入docker组,以当前用户执行docker命令时不需要sudo,加入docker组后拥有了访问docker的Unix socket权限。

				cat /etc/group | grep docker #查看系统是否有docker用户组
				groupadd docker #如果没有,添加docker用户组
				gpasswd -a $USER docker #将登录用户加入到docker用户组中
				newgrp docker #更新用户组
			

参考链接:解决非root用户没有权限运行docker命令的问题

开放系统端口

用ufw allow port开放端口,ufw enable启用防火墙,ufw status查看防火墙的状态和开放的端口,如果sshd服务端口在启动防火墙后没有开启,不要退出当前会话,记得allow sshd的服务端口,最后reload防火墙。

获知服务器正在活动的开放端口:netstat -aptn

参考链接:ubuntu下开启端口

flask应用为外部主机提供服务

设置flask run的ip是0.0.0.0,不仅仅是127.0.0.1。

参考链接:What does “app.run(host='0.0.0.0') ” mean in Flask

subprocess中Popen对象理解

import subprocess

cmd = 'ps -aux | grep python'
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
err,output = process.communicate()
retcode = process.poll()
if retcode == 0:
	print(output)
		

一旦构建完成Popen对象,shell命令当即开始执行,communicate函数阻塞式地获取Popen对象的输出内容,尚不清楚停止阻塞的条件,poll函数获取Popen对象的运行状态。单线程的情况下,先执行communicate函数阻塞式地令调用程序等待被调用shell命令执行结束,然后poll函数获取执行结束的状态。

git仓库批量更新脚本

shell程序从文件中读取仓库名,根据目录中是否有同名文件夹克隆或更新git仓库,在windows系统下由于文本文件换行符是CRLF方式,即“\r\n”,read去掉了“\n”,但还有一个“\r”字符,意即在字符流开头重新打印,覆盖已有的内容,所以需要用${var%?}删除仓库名字符串后面与?最短匹配的字符串,即删掉回车符,而linux系统下只有一个“\n”字符,read掉不需要删除掉最后一个字符。

port=12345
ip=1.1.1.1
while read line
do
	line=${line%?} # 如果在Windows系统下运行,保留该行;Ubuntu系统下运行这个脚本注释掉该行
	if [ ! -d $line ]; then
		git clone ssh://git@$ip:$port/home/gitrepo/${line}.git
		echo ${line}仓库克隆完成
	else
		cd $line
		git pull
		cd ..
		echo ${line}仓库更新完成
	fi
done < gitrepo_names.txt
注意gitrepo_names.txt每个仓库名后需要有一个换行符,尤其是最后一个仓库名后面,这样shell脚本中能read到所有仓库名。

本文创建于2021年7月7日14点10分,修改于2021年10月18日14点26分