分类 "Linux" 下的文章

注意:如果你公司的 VPN 网络是在苹果下使用的,本文可能不适用(苹果系统不支持 PPTP)。

用 Linux 和用 Windows/macOS 不一样,它真的需要用户操心很多东西。比如怎么连接公司的 VPN 网络……

我是折腾了挺久,反正系统自带的 VPN 连接管理界面,不管你怎么配置,就是用不了!!!

最后,我翻了 arch 的官方文档,发现有一个叫 PPTP Client 的东西,配置起来超级简单,敲几下命令就连接上了……

真正连上的那一瞬间,真的很有成就感!趁热记录下来:)

好了, 我们进入正题,首先是安装:

sudo pacman -S pptpclient

然后配置一下连接(起名叫 company):

sudo pptpsetup --create company --server 域名或 IP 地址 --username 账号 --password 密码 --encrypt

可以用以下命令测试一下 company 连接:

sudo pon company debug dump logfd 2 nodetach

会打印一堆调试信息,并最终程序卡住不会退出。连接成功后,你会看到一个 ppp0 的网卡:

ip addr

要用公司 VPN 连接的时候,需要加个路由:

sudo pon company
sudo ip route add default dev ppp0

结束使用时去掉就好了:

sudo ip route del default dev ppp0
sudo poff company

经过以上步骤配置后,就可以使用了。

但我发现特别卡,ping 了一下发现丢包率很高(6%)。

网上搜索了一圈资料,最终确定和 MTU 有关系(默认是 1500),我参考了 macOS 的 1280,设置后一切正常,不再丢包了!

sudo ifconfig ppp0 mtu 1280

MTU 设置太大会被分片,太小影响效率。因此需要设置成一个合理值,保证网络的可靠性的同时,实现传输效率的最大化。

MTU 一般网络设备都是 1500。如果本机的 MTU 比网关大,大的数据包会被拆分传送,会产生大量数据包碎片,增加丢包率,降低网络传输速度。

检查的话,可以使用以下命令:

ping -s 1472 -M do 192.168.1.123

它表示发送 1472+28 字节的数据包,并禁止路由器拆包。

  • 如果正常回复,说明网络最大 MTU 是 1500,与系统默认一致;
  • 如果不正常,说明超过网络限定大小,需要减小探测包大小再次尝试。

注:1500 = 1472 + 8(ICMP 回显请求和应答报文的格式长度)+ 20(IP 头)。

还是挺多命令要敲的,为了方便,我加了两个 alias,大家可以根据实际情况配置:

alias onn_company="sudo pon company && sleep 5 && sudo ip route add default dev ppp0 && sudo ifconfig ppp0 mtu 1280"
alias off_company="sudo ip route del default dev ppp0 && sudo route del -host 1.2.3.4 dev enp2s0 && sudo poff company"
  • sleep 5 使得连接后等一下下,再改路由;不 sleep 的话网络会卡一下,体验不是很好;
  • ifconfig 修改后的 MTU 重启电脑会丢失,但这个不是很重要,我觉得也没必搞成永久生效了;
  • route del -host 1.2.3.4 需要改成你公司的 VPN 的 IP,我发现有时候 del default 不好使,原因不明(可能我连接多次了)。

整体上还是挺方便的,简单几行命令就搞定了。

“记得上次用 Manjaro Linux 的时候,还是上次:)”

三年前,工作都是在 Linux 下完成的——那时候的我还没有苹果电脑。

我算是接触了很多很多发行版,Ubuntu、Debian、Deepin 深度、Linux Mint 薄荷、CentOS、Manjaro……小众的,还有 Puppy Linux、Slitaz……

最喜欢的,还是 Manjaro 啦!软件库非常齐全,更新也快。所以我一般都会安利它哈哈~

不过有时候下载一些软件,你会发现官网只提供 deb 或者 rpm 包。这个时候可以用以下命令,转成 Manjaro 可以安装的包:

一、先检查有没有安装 debtap,有安装可以直接跳到第 3 步:

sudo pacman -Q debtap

二、安装debtap:

sudo pacman -S yaourt
yaourt -S debtap

三、更换源(非常重要,不然炒鸡炒鸡卡):

sudo sed -i "s|http://ftp.debian.org/debian/dists|https://mirrors.ustc.edu.cn/debian/dists|g" /usr/bin/debtap
sudo sed -i "s|http://archive.ubuntu.com/ubuntu/dists|https://mirrors.ustc.edu.cn/ubuntu/dists|g" /usr/bin/debtap

四、更新一下:

sudo debtap -u

五、打包:

sudo debtap xxxx.deb

期间提示你输入包名、License 信息。

  • 包名根据你安装的软件填写就好了,比如飞书,你输入 feishu 回车键即可;
  • License 自己使用随便填一个就好了,比如 GPL。

上述操作完成后会在deb包同级目录生成×.tar.xz文件

六、安装:

sudo pacman -U XXXX.tar.xz

2022年08月07日文章更新:第 6 步打出来的包是 zst 格式的了,命令自行改一下。

今天在业务上云的时候,遇到了些问题。最终发现问题的根源不好排查,于是——

把生产环境的全量配置文件,还有日志全量打包下载到开发机器分析!

刚入职不是很久的整个运维团队,也不是很熟悉生产环境(有时候觉得自己就是个运维哈哈哈哈),于是把机器下线后,一顿 tar 压缩,就准备 scp 发送了。

生产和开发机内网不通,都是走公网传输。很容易想到:10+G,非 80 端口,ssh 协议(自己公司约定好的),肯定特别慢,之前用的时候每秒也就 2 兆。

某同事:“我有办法让你更快点。”

我:“请教下?”

于是,他就教了我:)

  1. 假设开发机器的公网 IP 是 1.1.1.1,在该机器先监听 80 端口,并重定向到文件,接收完进程会自己退出。
nc -l 80 > all.tar.gz
  1. 生产环境机器,直接往 1.1.1.1 的 80 端口写入数据即可,写完进程会自动结束!
nc 1.1.1.1 80 < all.tar.gz
  1. 用 md5sum 校验一下,发现 md5 一致
md5sum all.tar.gz

时间多久就真的忘记了,确实比 scp 快很多!

事情是这样,服务器很多人在使用,以前的离职同事留了一大堆不知道是什么东西。

那些文件看不了,又删不掉,非常碍眼。

我搜索了挺多资料,没有一篇文章能真的解决问题(感觉都是抄来抄去的)。

用 SFTP 工具、PHPStorm 全家桶,都删不了……

后面找到了一篇英文资料,提示说可以用 inode 编号删,所以就有了今天这篇文章。

步骤很简单,分两步:

阅读全文

cURL,熟悉 Linux 的同学,没有人不知道这个命令吧:)

它有非常非常多的参数,我这里就不复制粘贴了,有需要可以 -h 或者谷歌搜索看看。

我从实用性的角度,说下我比较常用的几个参数:

  • -v:啰嗦模式,打印请求头部、响应头部,如果是 https 请求会打印握手信息;
  • -H:包含 HTTP 头部,可多次使用
  • -s:不打印进度条
  • -o:指定输出,如果不想看输出的内容,可以 -o /dev/null 丢弃
  • -k:忽略 https 证书校验
  • -d:用来提交数据
  • -X:指定 HTTP method
  • -w:可以输出连接的时间、服务器处理的时间、请求总时间等

简单的参数组合

curl -v -H 'Host: imlht.com.test' \
     -H 'Content-Type: application/json' \
     -H 'Cookie: uid=123' \
     -s \
     -o /dev/null \
     -X PUT \
     -k \
     -d '{"name": "John"}' https://10.43.1.101/user/123

有几个小细节,我提一下:

-k 可以忽略 https 的证书校验,调试的时候很好用。

比如上面的 imlht.com.test,一般情况下你是没有这个证书的,但是你又想测试 10.43.1.101 的 /user 接口,此时可以直接跳过测接口的内容。

-d 参数默认的 Content-Type 是表单,如果你提交的数据是 JSON,需要像上面一样指定好 JSON 头部。

有些接口会依赖这个头部解析 body 的内容;另外默认的 method 是 POST,这里我用了 -X PUT 指定 method。

有点复杂的 -w 参数

curl -w "\ntime_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_appconnect: %{time_appconnect}\ntime_redirect: %{time_redirect}\ntime_pretransfer: %{time_pretransfer}\ntime_starttransfer: %{time_starttransfer}\n--------\ntime_total: %{time_total}\n" https://im.qq.com/
(省略一部分内容)
...
</body>
</html>

time_namelookup: 0.028
time_connect: 0.030
time_appconnect: 0.136
time_redirect: 0.000
time_pretransfer: 0.136
time_starttransfer: 0.296
--------
time_total: 0.436
  • time_namelookup :DNS 解析耗时
  • time_connect :TCP 连接建立耗时,也就是三次握手的时间
  • time_appconnect :SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间
  • time_redirect :从开始到最后一个请求事务的时间
  • time_pretransfer :从请求开始到响应开始传输的时间
  • time_starttransfer :从请求开始到第一个字节将要传输的时间
  • time_total :这次请求花费的全部时间

根据上面的解释,我们可以得到以下的结论:

  • DNS 解析耗时:28ms
  • TCP 连接时间: pretransfter(136) - namelookup(28) = 108ms
  • 服务器处理时间:starttransfter(296) - pretransfer(136) = 160ms
  • 内容传输时间: total(436) - starttransfer(296) = 140ms