ubuntu 命令配置所有shell命令用ss

software required:

ss client: pip install shadowsocks

privoxy for local forwarding:  http://www.silvester.org.uk/privoxy/Debian/3.0.26%20%28stable%29%20jessie/privoxy_3.0.26-1_amd64.deb

dpkg -x privoxy_3.0.26-1_amd64.deb ~/.local/bin

ss-config.ini

“`

{
“server”:”server_ip”,
“local_address”: “127.0.0.1”,
“local_port”:1080,
“server_port”:server_port,
“password”:”password”,
“timeout”:300,
“method”:”aes-256-cfb”
}
““

sslocal -c ss-config.ini -v

 

 

privoxy-config.ini

“`

forward-socks5 / 127.0.0.1:1080 .
listen-address localhost:8118
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .

“`

privoxy privoxy-config.ini

 

set proxy:

<pre code>

export http_proxy=http://127.0.0.1:8118;export https_proxy=http://127.0.0.1:8118;

</pre>

if you set -v when starting sslocal, the log will display facebook connection

 

ubuntu使用shadowsocks

origin: https://www.sundabao.com/ubuntu%E4%BD%BF%E7%94%A8shadowsocks/

ubuntu使用shadowsocks

1.安装shadowsocks命令行程序,配置命令。

2.安装shadowsocks GUI图形界面程序,配置。

个人推荐第一种,配置好后基本不用管。但使用的前提是 你的服务端已经搭建好或者你有别人提供的SS 服务(我也不知道该不该写这文章…)

第一种

ubuntu安装shadowsocks

用PIP安装很简单,

sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-setuptools m2crypto

接着安装shadowsocks

pip install shadowsocks

如果是ubuntu16.04 直接 (16.04 里可以直接用apt 而不用 apt-get 这是一项改进)

sudo apt install shadowsocks

当然你在安装时候肯定有提示需要安装一些依赖比如python-setuptools m2crypto ,依照提示安装然后再安装就好。也可以网上搜索有很多教程的。

启动shadowsocks

安装好后,在本地我们要用到sslocal ,终端输入sslocal --help 可以查看帮助,像这样

29f80488-81e6-4a71-8fa1-9722c084574a

通过帮助提示我们知道各个参数怎么配置,比如 sslocal -c 后面加上我们的json配置文件,或者像下面这样直接命令参数写上运行。

比如

sslocal -s 11.22.33.44 -p 50003 -k "123456" -l 1080 -t 600 -m aes-256-cfb

-s表示服务IP, -p指的是服务端的端口,-l是本地端口默认是1080, -k 是密码(要加””), -t超时默认300,-m是加密方法默认aes-256-cfb,

为了方便我推荐直接用sslcoal -c 配置文件路径 这样的方式,简单好用。

我们可以在/home/mudao/ 下新建个文件shadowsocks.json  (mudao是我在我电脑上的用户名,这里路径你自己看你的)。内容是这样:

{
    "server":"11.22.33.44",
    "server_port":50003,
    "local_port":1080,
    "password":"123456",
    "timeout":600,
    "method":"aes-256-cfb"
}

server  你服务端的IP
servier_port  你服务端的端口
local_port  本地端口,一般默认1080
passwd  ss服务端设置的密码
timeout  超时设置 和服务端一样
method  加密方法 和服务端一样

确定上面的配置文件没有问题,然后我们就可以在终端输入 sslocal -c /home/mudao/shadowsocks.json 回车运行。如果没有问题的话,下面会是这样…

qq20161016-02x
(如果继续请不要关闭这个终端)

如果你选择这一种请跳过第二种。你可以去系统的代理设置按照说明设置代理,但一般是全局的,然而我们访问baidu,taobao等着些网站如果用代理就有点绕了,而且还会浪费服务器流量。我们最好配置我们的浏览器让它可以自动切换,该用代理用代理该直接连接自动直接连接。所以请看配置浏览器。

第二种

安装GUI 图形界面程序,然后按照提示配置相对应的参数。安装教程地址:shadowsocks-qt5 安装指南

在ubuntu上可以这样,通过PPA源安装,仅支持Ubuntu 14.04或更高版本。

sudo add-apt-repository ppa:hzwhuang/ss-qt5
sudo apt-get update
sudo apt-get install shadowsocks-qt5

由于是图形界面,配置和windows基本没啥差别就不赘述了。经过上面的配置,你只是启动了sslocal 但是要上网你还需要配置下浏览器到指定到代理端口比如1080才可以正式上网。

配置命令行

export http_proxy=http://127.0.0.1:1080/

不用的时候: unset http_proxy

配置浏览器

假如你上面任选一种方式已经开始运行sslocal了,火狐那个代理插件老是订阅不了gfwlist所以配置自动模式的话不好使。这里用的是chrome,你可以在Ubuntu软件中心下载得到。

安装插件

我们需要给chrome安装SwitchyOmega插件,但是没有代理之前是不能从谷歌商店安装这个插件的,但是我们可以从Github上直接下载最新版 https://github.com/FelisCatus/SwitchyOmega/releases/ (这个是chrome的)然后浏览器地址打开chrome://extensions/,将下载的插件托进去安装。

设置代理地址

安装好插件会自动跳到设置选项,有提示你可以跳过。左边新建情景模式-选择代理服务器-比如命名为SS(叫什么无所谓)其他默认之后创建,之后在代理协议选择SOCKS5,地址为127.0.0.1,端口默认1080 。然后保存即应用选项。

shadowsocks-0

shadowsocks-1

设置自动切换

接着点击自动切换 ( Auto switch)上面的不用管,在按照规则列表匹配请求后面选择刚才新建的SS,默认情景模式选择直接连接。点击应用选项保存。再往下规则列表设置选择AutoProxy 然后将这个地址填进去,点击下面的立即更新情景模式,会有提示更新成功!

shadowsocks-2
sorry编辑图片时候少了一步,就是填好规则列表地址后先点击立即更新情景模式 后再应用选项保存

https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

点击浏览器右上角的SwitchyOmega图标,下面选择自动切换,然后打开google.com试试,其他的就不在这贴图了。

python 格式化输出

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import with_statement

format print http://python.jobbole.com/82292/

for subprocess
self.cmd = (self.EXE + ” ” + self.PARAMS).split() if platform.system() == “Windows” else [self.EXE + ” ” + self.PARAMS]
subprocess.check_output(self.cmd, shell=True)

or:
self.cmd = (self.EXE + ” ” + self.PARAMS).split() # for Both Linux and Windows
subprocess.check_output(self.cmd, shell=False)

print( “%02d” % 10) # 0010
print(“{num:02d}”.format(num=1)) #01
str(1).zfill(5) # “00001”
str(1).rjust(5, ‘0’) #”00001″
str(1).ljust(5, ‘0’) #”10000″
str(1).center(5, ‘0’) #”00100″

format string output
“{val:%02d}”.format(val=10)
“{f:3.2f}”.format(f=f)
“{0:3.2f}”.format(3.2323)
“%3.2f”.format(3.2323)
“{f:2.4s}”.format(f=”adsfadsf”)

import math
#default
print “PI = %f” % math.pi
#width = 10,precise = 3,align = left
print “PI = %10.3f” % math.pi
#width = 10,precise = 3,align = rigth
print “PI = %-10.3f” % math.pi
#前面填充字符
print “PI = %06d” % int(math.pi)

#输出结果
#PI = 3.141593
#PI = 3.142
#PI = 3.142
#PI = 000003
#浮点数的格式化,精度、度和

#precise = 3
print “%.3s ” % (“jcodeer”)
#precise = 4
print “%.*s” % (4,”jcodeer”)
#width = 10,precise = 3
print “%10.3s” % (“jcodeer”)
#输出结果:
#jco
#jcod
# jco
#同于字符串也存在精度、度和。

import re
pattern = “.*-\d*\.ts”
if re.match(pattern, fn):
return False
else:
return True

print(“{tcost:<6.2f}sec cost for heatmap: i={i: <4d} t={t: <6.2f}”.format(tcost=tcost, t=t, i=i))

python: numpy

pip3 install jupyter

ipython or jupyter notebook
“`

import numpy as np

from matplotlib.pyplot import imshow, title
import matplotlib.pylot as plt
from scipy.misc import imread, imsave, imresize

xs = np.arange(-np.pi, np.pi, 0.01)
xs = np.linspace(-np.pi, np.pi, 100)

xs, ys = np.meshgrid(xs, xs)
xs = np.arange(12).reshape(3, 4)
mat = np.random.random((2, 3))

z = np.sqrt(xs ** 2 + ys ** 2)
plt.imshow(z); plt.colorbar()
plt.title(“pic”)
plt.show()
“`

refs:
– http://cs231n.github.io/python-numpy-tutorial/

大文件处理

由于系统的开发、配置,网络动态变化等各方面原因,大文件处理、下载、上传、分发往往更容易失败。

 

git 传输:

git config –global http.postBuffer 524288000

 

niginx 上传

http region: client_max_body_size 1024m;

其它:

server region:

proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

最简单git服务器


远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7×24小时开机并交换大家的修改。

GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。

第一步,安装git

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git

$ sudo chown -R git:git sample.git

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就简单了。

管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

ssh-copy-id git@server-ip

管理权限

有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。

这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。

管理权限

push已有代码到仓库中

git remote add shock git@hk.shockjiang.vip:~/sample.git
git push shock master

 


remarks, 最后推荐一款带web界面的轻量级git系统:gitea, 范例: http://git.shockjiang.vip

 

ffmpeg cmds & api

ffmpeg -help filter=transform
ffmpeg -help encoder=mjpeg
ffmpeg -help encoder=h264

截取一帧(从第一秒开始): ffmpeg -ss 1 -y -i merge8k.mp4 -f image2 -t 0.001 8k-3dv.jpg or ffmpeg -f h264 -i a.h264 -vf fps=1 -y a.jpg

crop尺寸:ffmpeg -y -i ${src}.jpg -filter:v “crop=in_w/4:in_h/3:in_w/4:0″ ${src}-2.jpg

Crop area with size 100×100 at position (12,34): crop=100:100:12:34

MP4 to MP3:  ffmpeg -y -i va.mp4 -q:a 0 -map a va.mp3

ffmpeg -stream_loop -1 -i input.mp4 -c copy -fflags +genpts output.mp4
to HLS: ffmpeg -i ${F1} -vcodec copy -acodec copy -f hls -hls_list_size 100 new/${HEAD}.m3u8

check channel number: ffprobe input.file -show_streams -select_streams a:0 | grep ‘channels=’

录制屏幕: ffmpeg -f v4l2 -r 10 -video_size 640×480 -i /dev/video0 /home/shock/t.mkv (not that v4l2 stands for video4linux2)

ffplay -f v4l2 -i /dev/video0
ffmpeg -f v4l2 -framerate 30 -video_size 840×620 -i /dev/video -c:v libx264 -r 30 -preset fast -tune zerolatency OUT

ffmpeg -f x11grab -framerate 30 -video_size 640×480 -i :0.0

WAV to M4A: ffmpeg -i SPTL007.WAV -c:a aac -strict -2 -b:a 256k -ac 4 t3.m4a

ffmpeg -f x11grab -framerate 30 -i :0.0 -c:v libx264 -r 30 -pix_fmt yuv420p -bf 0 -preset ultrafast -g 10 -b:v 3M -tune zerolatency -c:a libfdk_aac -f flv rtmp://r730.kandao.tech:1936/live/demo2
ffmpeg -i rtmp://localhost:1936/live/demo2 -c:v copy -b:v 1M -preset ultrafast -tune zerolatency -an -f flv rtmp://100015x.publish.z1.pili.qiniup.com/kandaovr/live?key=d2d0eff5-662b-47fd-b13f-bb56f54031b0

ffmpeg -i rtmp://pili-publish.live4.kandaovr.com/kandaovr4/demo?e=1471255883&token=QClzJjFYhx-NIT_vJRKf-tVzzTIPMGxhscDu890H:OmasOCdg0QPP4B_QGgYQeAxCcBU=

ffmpeg -f gdigrab -i desktop -c:v libx264 -r 30 -pix_fmt yuv420p -preset fast -tune zerolatency -c:a libfdk_aac -f flv rtmp://r730.kandao.tech:1936/live/demo2
ffmpeg -f gdigrab -framerate 30 -video_size 400×278 -i title=”Adobe Flash Player 9” -c:v libx264 -pix_fmt yuv420p -r 30 -bf 0 -g 10 -b:v 3M -preset fast -tune zerolatency -c:a libfdk_aac -f flv rtmp://r730.kandao.tech:1936/live/demo2

ffplay -tune zerolatency -i rtmp://r730.kandao.tech:1936/live/demo2
ffplay -i rtmp://100015x.live1-rtmp.z1.pili.qiniucdn.com/kandaovr/live

 

loop:

export src=a.mp4

export src=a.mp4

export dst=rmtp://xxx.xxx.xx

while :

do

ffmpeg -re -i ${src} -f flv ${dst}

done

 

ffprobe

统计总帧数

示例命令

$ ffprobe -v error -count_frames -select_streams v:0 \
  -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 \
  input.mkv

输出示例

  2600
  • 在此示例中, 2600 的输出是指读取帧数.
  • 由于整个文件必须解码,所以命令可能需要一段时间才能完成,具体取决于您的输入.

这个选项是什么意思

  • -v error 这将隐藏”info”输出(版本信息等),使解析更容易.
  • -count_frames 计算每个流的帧数,并在相应的流片段中进行报告.
  • -select_streams v:0 只选择视频流.
  • -show_entries stream = nb_read_frames 只显示读取帧数.
  • -of default = nokey = 1:noprint_wrappers = 1 将输出格式(也称为”writer”)设置为 default ,请勿打印每个字段( nokey = 1 ),并且不打印部分页眉和页脚( noprint_wrappers = 1 ).