技巧收集-M1806
2018.05
grep持续监控Log:
1 | tail -f file | grep --line-buffered my_pattern |
列表和deque的区别:
- 根据index读list,时间复杂度为O(1)但deque是O(n)
- 在两头插入数据,deque的时间复杂度为O(1), list为O(n)
- deque是一个双向链表,所以操作头尾非常简单。
- 随机往中间插入数据,deque与list的时间复杂度都是O(n)
2018.04
MongoDB的聚合查询中,$substr
只能匹配ASCII的数据,对于中文要使用$substrCP
Flask的上下文对象current_app只能在请求线程里存在,因此它的生命周期也是在应用上下文里,离开了应用上下文也就无法使用。
1 | app = Flask('__name__') |
会报错:
1 | RuntimeError: working outside of application context |
此时可以手动创建应用上下文:
1 | with app.app_context(): |
扩展AWS的磁盘空间:
点击修改卷
增加磁盘配额,SSH进入服务器,输入以下代码:
1 | lsblk #这条命令用来确定当前可用的磁盘空间小于磁盘配额 |
再次执行df -h
可以看到已经使用了新的空间
2018.03
在Docker查看正在运行的容器是通过什么命令启动的:
1 | docker ps -a --no-trunc |
在全新的Ubuntu中安装pip:
1 | sudo apt-get update |
tar压缩文件的时候排除特定文件和文件夹:
1 | tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz . |
2018.02
在MongoDB使用自带的mongodump备份数据的时候,如果数据库设置了密码,那么在指定mongodump的--password 密码
参数的同时,还必须指定--authenticationDatabase admin
2018.01
使用grep持续监控Log:
1 | tail -f file | grep --line-buffered my_pattern |
使用rsync通过SSH从服务器拉取数据:
1 | rsync -avzP [email protected]:Projects/sample.csv ~/sample.csv |
如果有SSH Key的话,使用下面的命令:
1 | rsync -avzP -e "ssh -i ~/sshkey.pem" [email protected]:Projects/sample.csv ~/sample.csv |
在Ubuntu中修改时区:
1 | sudo timedatectl set-timezone Asia/Shanghai |
使用XPath获取名称包含特定字符的属性的属性值:
1 | //span/img/@*[contains(name(), "src")] |
AWS在一年免费期间内,换机房不用给钱。先在老的实例生成AMI,再把AMI复制到新的城市,再从新城市的AMI创建实例。然后把老城市的实例彻底终结,取消老城市和新城市的AMI。全程不收费。
在Python中执行Shell命令并获取返回结果:
1 | import subprocess |
如果命令本身没有返回,则会抛出一个subprocess.CalledProcessError
在Shell中判断一个进程是否存在:
1 | if ps -ef | grep 进程名 | grep -v grep > /dev/null |
2017.12
firewalld对特定IP开放特定端口:
1 | firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="特定IP" port protocol="tcp" port="特定端口" accept' |
生成文件树并过滤特定文件或文件夹:
1 | tree -I '__pycache__|pyc|Logs' |
统计代码行数:
1 | find . -name "*.py" | xargs wc -l |
为pip设置代理:
1 | pip3.6 --proxy http://代理IP:端口 install -r requirements.txt |
为Git设置代理:
1 | RUN git config --global http.proxy http://代理IP:端口 |
为Ubuntu的apt-get
设置代理:
1 | vim /etc/apt/apt.conf.d/01turnkey |
在里面插入一行:Acquire::http::Proxy "http://your.proxy.here:port/";
保存以后,下一次执行apt-get
命令就会使用代理了。
2017.11
修改Elasticsearch默认的数据文件地址到/mnt/es文件夹,需要首先创建这个文件夹,然后为elasticsearch这个用户添加这个文件夹的权限:
1 | Chown -R elasticsearch:elasticsearch /mnt/es/ |
然后再修改elasticsearch的配置文件。
在postgres中,占位符是$1
, $2
而不是MySQL中的?
2017.10
使用urlpare
从URL中获取Host:
1 | from urllib.parse import urlparse |
解压tar.gz
压缩文件:
1 | tar zxvf 文件名 |
根据进程名字在Linux里杀进程。
1 | ps -ef | grep "进程关键字" | grep -v grep | awk '{print $2}' | xargs kill -9 |
在Python 的try ... except Exception ...
中显示tracebook:
1 | import traceback |
输出如下:
1 | Traceback (most recent call last): |
这个功能在多层try ... except Exception ...
嵌套的时候特别有用。