Linux 软件源更新
更改之前注意备份: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
deb http://cn.archive.ubuntu.com/ubuntu/ willy main restricted universe multiverse deb http://cn.archive.ubuntu.com/ubuntu/ willy-security main restricted universe multiverse deb http://cn.archive.ubuntu.com/ubuntu/ willy-updates main restricted universe multiverse deb http://cn.archive.ubuntu.com/ubuntu/ willy-backports main restricted universe multiverse ##测试版源 deb http://cn.archive.ubuntu.com/ubuntu/ willy-proposed main restricted universe multiverse # 源码 deb-src http://cn.archive.ubuntu.com/ubuntu/ willy main restricted universe multiverse deb-src http://cn.archive.ubuntu.com/ubuntu/ willy-security main restricted universe multiverse deb-src http://cn.archive.ubuntu.com/ubuntu/ willy-updates main restricted universe multiverse deb-src http://cn.archive.ubuntu.com/ubuntu/ willy-backports main restricted universe multiverse ##测试版源 deb-src http://cn.archive.ubuntu.com/ubuntu/ willy-proposed main restricted universe multiverse
更改的话, 第一个是更改地址, 如阿里云的, 第二个是更改代号即版本, 如 willy(15.10) 修改成 xenial(16.04);
OpenStack 安装问题
generate-subunit: command not found
sudo pip install -U os-testr
/bin/sh: 1: brctl: not found
sudo apt-get install bridge-utils
git config --global url."https://".insteadOf git://
- The Hitchhiker’s Guide to Python!
- OpenStack Hacker养成指南
- 用DevStack安装OpenStack(单机)
- devstack 安装教程
- openstack
配置 sudo 用户.
首先使用 useradd username
添加新用户,然后设置用户密码 passwd usernmae
.
然后 使用 visudo
自动打开 /etc/sudoers
配置文件,在文件加入sudo权限,配置如下:
tianqi05 ALL=(ALL) ALL ‘不要密码 tianqi05 ALL=(ALL) NOPASSWD:ALL
最后切换用户
sudo -iu tianqi05
screen 使用简介
screen 和 tmux有类似的服务。只是screen开启会话后不会新建窗口,还是在当前窗口。
- screen 创建一个session
screen -S myNewSession 或者 screen 创建一个名字默认是ttys[ID] 的session.
-
从当前 session 暂时断开退出。
ctrl+a+d
-
列出当前所有的session.
screen -ls
There are screens on: 28007.ttys005.tianqideMacBook-Pro (Detached) 28091.myNewSession (Detached) 2 Sockets in /var/folders/bb/ywfc1vbs5lx_blqpl5ssrvv40000gp/T/.screen.
-
恢复某一个session。
screen -r myNewSession
-
强制杀死一个 session.
kill -9 28091
There are screens on: 28007.ttys005.tianqideMacBook-Pro (Detached) 28091.myNewSession (Dead ???) Remove dead screens with 'screen -wipe'. 2 Sockets in /var/folders/bb/ywfc1vbs5lx_blqpl5ssrvv40000gp/T/.screen.
-
按照提示清理。
screen -wipe
-
Cannot open your terminal '/dev/pts/0' - please check.
- Sign out and properly connect / sign in as the user you wish to use.
- Run
script /dev/null
to own the shell (more info over at Server Fault); then try screen again.
配置 iTerm2 和 tmux
Tmux 是 Terminal multiplexer 的缩写, 其实就是 终端可以复用的意思。
场景就是,第一种是在本地电脑,你打开了好几个terminal, 每一个terminal由当前的工作环境, 然后这个时候没电了或者你电脑关机了,那么这些terminal的工作状态就没有了。如果使用tmux记录下来,那么这些terminal下次还可以继续使用,并且恢复到关闭时的状态。
第二种就是 ssh 登陆到远程主机, 然后ssh 基本上很容易断开,一般使用 nohup & 在后台运行命令, 但是如果使用 tmux, 就可以记录下来,关闭了也没关系,还可以再次恢复。
执行 tmux -CC 之后会开启一个 session, tmux -CC 默认会以数字编号命名一个回话session, 并开启一个新的iterm窗口,在这个窗口即回话下面, 使用 command+T 可以创建多个窗口(注意不是command + D, 也不是 command + N), 原来 tmux -CC 创建的窗口会阻塞,可以通过 esc 退出, 然后再通过 tmux -CC attach 恢复, 但是 tmux attach 恢复出来是窗口叠加在一起的, 加 CC 参才会原样恢复。
另外, tmux new -s session_name, 可以给一个session起名字, 以后可以使用 tmux attach -t session_name 恢复某个会话。
局域网下互传大文件
解决方案很多,第一种不通过中间服务器, 直接两台PC之间互传,如果在同一个局域网之下, 确保可以相互ping通或者Telnet。一台机器充当服务器,另一台客户机, 采用 Python 自带的SimpleHTTPServer即可。客户端 wget http://[IP]:[port]/[path\_to\_file]
; 另外,下载某个目录下的所有文件,wget -r -np -nH -R index.html http://url/including/files/you/want/to/download/
. -r
递归, -R index.html
不带 index.html
文件。
ifconfig VS ip
## 查看进程所暂用的资源
首先找到进程 ps aux|grep XXX
, 然后使用 sudo lsof -p [pid]
查看该进程占用的所有资源;也可以查看某个资源被哪些进程占用, lsof [filename]
可以看到进程pid, 拿到pid 之后可以使用ps aux|grep [pid]
查看是什么进程;
删除某个目录下的大量的文件
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Find files named core in or below the directory /tmp and delete them, processing filenames in such a way
that file or directory names containing spaces or newlines are correctly handled.
find /tmp -depth -name core -type f -delete
Find files named core in or below the directory /tmp and delete them, but more efficiently than in the
previous example (because we avoid the need to use fork(2) and exec(2) to launch rm and we don't need the
extra xargs process).
cut -d: -f1 < /etc/passwd | sort | xargs echo
rm -rf \*
删除上百万文件出错
/bin/rm: Argument list too long.
错误的原因主要在于,使用正则符号匹配的所有文件名,会构成一个参数列表,存储参数的buffer申请的空间是有限的。
The problem is that when you type something like “rm -rf ”, the “” is replaced with a list of every matching file, like “rm -rf file1 file2 file3 file4” and so on. There is a reletively small buffer of memory allocated to storing this list of arguments and if it is filled up, the shell will not execute the program.
-
方案一,通过
exec
删除,但是比较慢,这里是有多少个文件,调用多少次rm。
find . -type f -exec rm -v {} \;
-
方案二,find命令自带的
delete
,速度中等。
find . -type f -delete
, orfind . -type f -print -delete
or`ls -1 | wc -l && time find . -type f -delete
-
方案三,rsync替换,速度很快, 主要是通过创建一个空的文件夹,然后通过同步数据块,覆盖掉原来文件夹内容以及文件inode.
rsync -a --delete blanktest/ test/
-
方案四,perl删除, 速度最快
perl -e 'for(<*>){((stat)[9]<(unlink))
- 目录中文件过多导致ls命令卡住-利用空设备重定向和strace监控ls
check dev file system
lsblk -f
可以看到所有附着设备的文件系统类型,如果有的话;无论是否mountdf -Th
可以看到所有已经mount的设备的文件系统类型fsck -N /dev/vdc1
设备修复工具,可以对某个分区进行修复,并可以查看到该分区的文件系统mount | grep "^/dev"
blkid /dev/sda1
file -sL /dev/sda1
cat /etc/fstab
在主机启动的时候回挂载改文件内容中的设备,里面描述了该挂载的设备的id,tag,label,mount point, fs等,但是这个是手动设置的
检查占用空间大的文件
sudo find . -type f -size +1000M -print0 | xargs -0 du -h | sort -nr
大文件分块计算md5 的命令
例如 5M 一块,可以设置块大小1M, 一次读入5个就是可以当成读一大块5M了,然后skip可以设置偏移量。比如 14M 可以如下操作,分三块读。
dd bs=1m count=5 skip=0 if=someFile | md5 >>checksums.txt dd bs=1m count=5 skip=5 if=someFile | md5 >>checksums.txt dd bs=1m count=5 skip=10 if=someFile | md5 >>checksums.txt # 最后计算连接的md5 cat checksums.txt | md5
Linux分区和增大交换区
Linux 磁盘性能测试benchmark
dd
-
write test;
sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
-
clear memory cache for tempfile;
sudo /sbin/sysctl -w vm.drop_caches=3
-
read test;
dd if=tempfile of=/dev/null bs=1M count=1024
hdparm
sudo hdparm -Tt /dev/sdb1
iotop
NVIDIA GPU
卸载
dpkg -l | grep cuda- | awk '{print $2}' | xargs -n1 sudo dpkg --purge
cuda 9.1
#!/bin/bash sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub sudo dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb sudo apt-get update sudo apt-get install cuda-9.1 # Enable persistence mode nvidia-smi -pm 1
catboost cuda-9.1
安装 python 2.7 版本的 catboost
wget https://github.com/catboost/catboost/releases/download/v0.8.1/catboost-python-0.8.1-cuda-91.tar.gz
tar -zvxf catboost-python-0.8.1-cuda-91.tar.gz
cd linux-cuda9
sudo pip install catboost-0.8.1-cp27-none-manylinux1_x86_64.whl
自己搭建基于Docker的shadowsocks vpn
- 在aws上申请一台免费的主机, 安装docker, ss等工具
curl -sSL https://get.docker.com/ | sh
git clone https://github.com/zhgqthomas/docker-shadowsocks.git
cd docker-shadowsocks/
sudo docker build -t shadowsocks .
-
新建用户,新建docker 用户组,并添加当前用户到用户组
sudo su; sudo adduser [your_user_name]; sudo groupadd docker;
-
运行ss服务(记住必须开放端口安全组)
sudo docker run --name ss -d -p 2018:2018 -p 2018:2018/udp shadowsocks -s 0.0.0.0 -p 2018 -k [your_ss-password] -m aes-256-cfb
-
客户端(MAC版本)
https://github.com/shadowsocks/ShadowsocksX-NG
CURL
post
post application/json
post application/x-www-form-urlencoded
For sending data with POST and PUT requests, these are common curl options:
request type
-X POST
-X PUT
content type header
-H "Content-Type: application/x-www-form-urlencoded"
-H "Content-Type: application/json"
data
form urlencoded: -d "param1=value1¶m2=value2" or -d @data.txt
json: -d '{"key1":"value1", "key2":"value2"}' or -d @data.json
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "user_id=2&rest_id=2&score=5&comments=shit" http://localhost:9090/Yelper/reviews
ldd
ldd /usr/local/bin/fio