Rexdf

The devil is in the Details.

常用的Ubuntu命令笔记

| Comments

本文主要是把平时记录的Notes中,参考次数比较多的笔记摘录出来,供不时之需。

包管理部分

其实是一部分实际问题,乘着写文章整理一下。下面这些问题都是单条短命令,去掉问题中可能包含的字符后,应该不超过20个非空白字符,大都是10个内字符。

  • 如何查看已经安装的vim版本号? apt list vim 或者 dpkg -l vim
  • 如何查看已经安装的vim的所有文件列表? dpkg -L vim
  • 如何查看/bin/vim这个文件属于哪个包? dpkg -S /bin/vim
  • 如何查看vim有哪些依赖? apt-cache depends vim
  • 如何查看哪些包依赖vim这个包? apt-cache rdepends vim
  • 如何查看安装了哪些版本的内核? dpkg --get-selections | grep linux
  • 如何查找源里面有哪些vim相关的包? apt-cache search vim
  • 如何获取官方nginx包的源码(打patch然后重新编译)编译环境? apt-get source nginx && apt-get build-dep nginx (这里要求配置了deb-src源,另外debian packaging话题较大,此略过)

系统管理

  • 如何修改时区? dpkg-reconfigure tzdata
  • 如何配置编码?

网络环境

  • 如何配置linux命令行外网访问?

对于浏览器或者命令行本身支持socks5的这里不谈。命令行种类繁多,用过一段时间proxychain,然而有些情况下似乎不太好用。 其实比较希望linux命令里面实现按域名(可自定义)类似PAC的方式实现外网访问。

首先安装privoxy(或者功能差一些的polipo) apt-get install privoxy ,然后配置一下需要处理的域名列表。

我用的是 gfwlist2privoxy , 这个脚本貌似有点问题,第一行有个多余的输出,直接删掉就好,然后把github的域名加到第一行,强制github.com走外网。具体参考其readme就好了。

privoxy配置MyBlog
cd ~
apt install -y git curl
git clone https://github.com/zfl9/gfwlist2privoxy.git
cd gfwlist2privoxy
sh gfwlist2privoxy 127.0.0.1:1080 #1080换成下面socks5客户端的端口
sudo mv -f gfwlist.action /etc/privoxy/ #把外网域名列表拷贝到privoxy目录
sudo echo 'actionsfile gfwlist.action' >>/etc/privoxy/config #或者nano手工编辑加上这一行也行
sudo systemctl restart privoxy.service

接着跑一个或者多个ss-local、v2ray、kcptun等socks5客户端,推荐全部用systemd管理,比较方便,此处略过具体安装步骤。可以同时起来多个,方便切换。 关于配置,我一般如下:systemctl edit shadowsocks-libev-local@local,敲一个回车留一个空白文件然后保存。接着编辑/etc/shadowsocks-libev/local.json加上适当的配置,然后执行systemctl enable shadowsocks-libev-local@localsystemctl start shadowsocks-libev-local@local 就好了。 (说明:其中shadowsocks-libev-local@%I的@后面接着的字符对应于/etc/shadowsocks-libev/%I.json,所以你可以方便同时起来任意多个客户端。)

一个样例local.json

{
"server": "8.8.8.8",
"server_port": 1,
"password": "What's tHiS?",
"method": "aes-128-gcm",
"timeout": 60,
"local_port": 2,
"local_address": "0.0.0.0",
"plugin": "",
"plugin_opts": "",
"plugin_args": "",
}

好了现在所做的工作还只是在把1080的socks5转换成了http/https的8118而已。接下来就是让命令行程序使用它。这个问题比较推荐参考ArchWiki/Proxy settings

把上面Archlinux的wiki里面的proxy_on proxy_off两个函数拷贝到~/.bashrc 里面。

~/.bashrcMyBlog
function proxy_on() {
# port=${1:-8118}
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
export http_proxy="http://localhost:8118/"
export https_proxy=$http_proxy \
ftp_proxy=$http_proxy \
rsync_proxy=$http_proxy \
HTTP_PROXY=$http_proxy \
HTTPS_PROXY=$http_proxy \
FTP_PROXY=$http_proxy \
RSYNC_PROXY=$http_proxy
}
function proxy_off(){
unset http_proxy https_proxy ftp_proxy rsync_proxy \
HTTP_PROXY HTTPS_PROXY FTP_PROXY RSYNC_PROXY
echo -e "Proxy environment variable removed."
}

然后source ~/.bashrc,接下来执行proxy_on,那么就开启了。 但是现在执行sudo提权命令时却依然不会走外网。解决办法是sudo visudo,在里面加上Defaults env_keep += "http_proxy https_proxy ftp_proxy"。这句的作用是提权时让这三个环境变量维持不变。

测试一下

测试MyBlog
curl -4sSkL https://www.baidu.com #走直连,tcpdump 抓包可验证
curl -4sSkL https://www.google.com #走代理,实现了 gfwlist PAC 效果
curl -4sSkL http://ip.chinaz.com/getip.aspx #按道理来说,会显示本机 IP

有时会特地希望某个没有被和谐的域名走外网,那么只要编辑 /etc/privoxy/gfwlist.action 加进去,然后重启privoxy就好了。

现在就可以安心地拖chromium或者Android的源码了。不需要时也可以执行proxy_off关掉。

至于udp2raw和frp等,等下次再补充。

  • IP以及ipv6如何配置?

这个存储在/etc/network/interfaces,参考Debian/wiki/NetworkConfigurationUbuntu/wiki。DebianWiki其中包含几个高级一些的配置:桥接(Bridging把多个网卡聚合到同一个子网)、VLAN(dot1q, 802.1q, trunk,)、单网卡多IP配置等。而Ubuntu文档则有关于Ubuntu-18.04采用的systemd-resolved的说明。

Comments