#27 关于终端(未完成)
开发工具 Linux 终端 2019-06-22整理一下关于终端的种种概念。
coding in a complicated world
整理一下关于终端的种种概念。
其实我没有怎么用过这个终端模拟器,用的多的还是 GNOME Terminal。
但这个灵活的 X11 终端模拟器,它的名字还是经常能在一些地方碰到的,比如 XShell、PuTTY 的配置中。
除了 xterm 之外,什么 Linux Console、rxvt、vt100、vt220、vt320 之类的,关于终端,可以说的太多。以后如果有空,对这个仔细了解之后再专门写一篇博客说这个吧!
理论上,可以看图之后,也可以看视频,甚至做更多复杂的事情。
sudo apt install -y zerofreesudo zerofree -v /dev/sdb1VBoxManage modifymedium disk --compact /path/to/vdiImageMagick 是 Linux 下的一个常用的图像处理工具,核心命令是 convert, identify 等。
Ubuntu 19.04 与 4/19 发布,生命周期 9 个月。我提前两个月就定着日程在等,总是克制不住追新的冲动,哈哈。
好像主要就是:
do-release-upgrade
由于审计过程中意外中断,导致出现了一些问题,这里做个记录。
声明:这些问题,是非正常升级流程出现的,不是说是 Ubuntu 的问题。
从今天开始,打开 TeamViewer 就这样了。


商业用途
检测为商业用途
该软件似乎适用于商业环境。请注意:免费版仅供个人使用。
您的会话将在5分钟后终止。请登录我们的网站以获得更多信息。商业用途
超时后连接将被阻断。
您的许可证对您与伙伴的最大会话时间有所限制,立即重新连接时将被阻断。请稍后再试或升级您的许可证。
与该伙伴的连接在07:33之前都将保持阻断。
我不喜欢下那些破解版软件,对原开发者来说,就是偷东西,总觉得有亏于人。
另一方面也不放心其安全性。
但是,这价格真心用不起。

远程访问公司的工作机器
不管什么方案,从两个内网机器想要实现通信,只能有一个双方都能连接的外网主机进行中转。
我对自己家的公网 IP 很久以前就绝望了,我打电话给电信要求分配公网 IP,之后他们说给我开了,然后我要求进入光猫最高权限,进去设置端口转发规则,不行。。。那要公网 IP 有捷豹用啊!
所以:
只要能流畅使用终端,都可以接受。
在研究方案的过程中,发现了另一个好的选择:tmate.io。
这是 tmux 的分支。
tmux 我用过好一阵子,也很容易上手。
使用方法:
# 创建远程连接
tmate -S /tmp/tmate.sock new-session -d
# 显示 SSH 连接命令
tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}'
创建定时任务,定时检查并建立 tmate 连接,然后将 ssh 命令输出到文件里面。
文件位于我的坚果云文件同步目录 $HOME/Documents/Mine/,这样我在任何地方都能通过 SSH 访问公司的电脑。
/etc/cron.d/tmate
SHELL=/usr/bin/zsh
* * * * * markjour [ -f $HOME/Documents/Mine/tmate.now ] && $HOME/Documents/Mine/tmate.sh && rm $HOME/Documents/Mine/tmate.now
~/Documents/Mine/tmate.sh
#!/usr/bin/zsh
tmate -S /tmp/tmate.sock kill-session
tmate -S /tmp/tmate.sock new-session -d
sleep 3
tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}' > ~/Documents/Mine/tmate.conn
我在家只需要在同步目录下创建一个名为 tmate.now 的文件,一会儿就能用上 ssh 了。
之前只有一个 50G 存储,后来磁盘空间总不够,就把占空间比较大的 Projects 目录(用户主目录下)移出来,弄了一个独立的 50G 盘。
过了段时间,又隔三差五提醒我空间不够了,baobab 清理了,可以删除的东西一删,多出几 GB 来。
但是看结果,还是扩容一下,一了百了。
随便翻一下谷歌浏览器调试工具(F12)执行过的脚本,摘几个贴一下。
1. Gitee GVP
2. API 测试时先调登录接口
3. heidiSQL 找回数据库密码
4. 列出 Python 文档中的章节
5. 自动删除网易邮箱的邮件
function confirm() { return true; } // 覆盖 confirm 方法,一直返回确认
nodelist = document.querySelectorAll('#contentAreaDiv > div > div:nth-child(1) > div > div:nth-child(5) > div:nth-child(3)');
nodelist.forEach(function(ele, index, list) { setTimeout(function() { ele.click(); }, 1000 * index); });