关于terminal:Mac-Osx终端显示图片

如果喜爱应用终端利用的敌人, 必定存在一个需要, 就是在终端界面上显示图片. 可能有时候须要显示一个本地磁盘的图片, 也有可能在应用 w3m 时须要显示网页的图片. 当初咱们就基于这两个点, 如何实现在 osx 进行显示图片. 终端显示本地磁盘图片viu 命令行客户端viu 是一个很好用的终端图片显示工具, 兼容多种终端协定, 比方 iterm2 和 kitty , 在这些终端下能够显示出全真色的图片. 对于 tmux 来说, 只能反对基于 ASCII 的 half block 图片(基于字符成果不太好). osx 下装置: brew install viu安装时间可能会比拟久, 因为 viu 工具是基于 rust 语言开发, 还须要装置 rust 相干的依赖库. 装置实现当前, 能够应用如下命令显示图片. # 显示单张图片viu xxx.png何# 以设定的宽显示图片viu -w 80 xxx.png须要留神的是, viu 间接在 iterm2 和 kitty 的命令行终端下, 显示成果比拟好, 因为应用了终端的图片协定, 但在 tmux 下会 fallback 到 half block 的形式显示. kitty 下的 icat如果你是应用 kitty 的终端, 能够间接应用终端自身的图片命令行 icat(不反对 iterm 或 tmux). 因为 icat 依赖 imagemagick 库, 依赖安装时间也会比拟久. 装置命令如下: ...

October 31, 2022 · 2 min · jiezi

关于terminal:用go语言编写的基于web的远程terminal

1. 介绍simple-web-terminal是一个用go语言和javascript编写的运行在浏览器的web利用,同时反对windows,mac,linux等平台,咱们能够用它通过浏览器在服务器执行shell,上传下载文件。 仓库链接: https://github.com/kompasim/s...下载链接:https://github.com/kompasim/s... 该程序用golang在服务器启动一个启动一个http服务器,并在客户端用js的websocket和服务器通信实现在浏览器输出命令在服务器执行。 正告:不晓得本人在做什么的状况下不要轻易的把这个程序放到本人的服务器上,用这个程序能够执行任何系统命令,这个很不平安。 2. 应用办法咱们只需从它的release页面下载咱们平台对应的可执行文件,并双击运行即可。之后咱们会在控制台窗口看到如下信息: 而后咱们拜访http://127.0.0.1:7777能够在浏览器看到如下ui界面: 咱们能够在该网页输出咱们启动程序的电脑所能执行的所有命令。 3. 可用命令除了服务器上的所有命令之外,terminal还提供了方便使用的文件上传,下载和编辑等功能性命令,十分不便。反对的命令列表如下: help : 打印帮忙信息stop : 在服务器敞开该terminal程序过程save : 保留以后web页面上的日志exit : 敞开以后网页和服务器的socket网页shell : 设置执行系统命令的shell(powershell,sh,bash)例子: shell powershellcoding : 设置输入日志的编码(例如用powershell的时候能够设置成gbk来输入中文)例子: coding gbkstatic : 跳转到该程序提供的动态服务器网页scp : 上传或下载文件应用scp ./test.txt命令开启下载流程,从服务器上terminal当前工作的目录下载文件到本地 应用scp ./命令启动抉择文件窗口,上传本地文件到服务器上terminal当前工作的目录 vim : 在网页实现的简略编辑器,能够间接编辑服务器上的文件 其余 : 除了这些你还能够间接执行服务器执行的所有命令4. 启动参数您能够在服务器启动该程序的时候给一些参数来批改一些默认行为,反对的参数如下 port : 设置terminal运行的端口 (默认为777) shell : 默认应用的shell coding : 默认应用的编码 static : 是否在当前目录启动动态资源服务器 (默认为true) pass : 网页terminal的明码,如果你心愿关上网页时候输出明码来确认身份能够设置一个明码(默认没有明码,轻易一个人关上就能够用) 例子: 启动要给默认应用gbk编码的powershell,并且明码为5555,带了动态资源服务器的terminal 参考连贯该程序以学习为目标浏览以下内容,并依据学习到常识用golang和javascript实现,感兴趣能够点击关上看看。 character-set conversion library implemented in GoA fast, well-tested and widely used WebSocket implementation for Go.How do I get the local IP address in Go?How to generate an MD5 file hash in JavaScript/Node.js?Using HTML5/JavaScript to generate and save a file

August 20, 2022 · 1 min · jiezi

为brewgitpip设置代理为brew正确换源终极版

1.如何正确设置HTTP/HTTPS代理设置了brew通过socks5的代理后,会发现pip其实是不支持socks5的,只能通过http/https。 首先获取端口点击状态栏的小火箭HTTP Proxy Preference获取HTTP的端口号(我是1087)将以下内容添加进.bash_profile(bash用户)/.zshrc(zsh用户)并保存#设置HTTP/HTTPS Proxyexport http_proxy="http://127.0.0.1:1087"; export https_proxy="http://127.0.0.1:1087";保存,进入shell,以zsh为例 #更新配置source .zshrc#验证brew updatepip install --upgrade pip2.如何正确为brew换源设置全局代理或者换源都有各自的优缺点,如果你想换源,那么尝试下面的步骤,要注意的是,换源和设置代理只能选其一,不然结果是一样的。 按照一般方法更换中科大源后,执行brew update还是巨慢,后来发现是cask仍然接在github上,所以要把cask一起换了。要注意的是,Caskroom 的 Git 地址在 2018年5月25 日从 https://github.com/caskroom/h... 迁移到了https://github.com/Homebrew/h...。 更换中科大源:# 替换brew.git:cd "$(brew --repo)"git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git# 替换homebrew-core.git:cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git# 替换homebrew-cask.git:cd "$(brew --repo)"/Library/Taps/homebrew/homebrew-caskgit remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git# 替换homebrew-bottles:echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrcsource ~/.bash_profile重置官方源:#重置brew.git:cd "$(brew --repo)"git remote set-url origin https://github.com/Homebrew/brew.git#重置homebrew-core.git:cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"git remote set-url origin https://github.com/Homebrew/homebrew-core.git#重置homebrew-cask.git:cd "$(brew --repo)"/Library/Taps/homebrew/homebrew-caskgit remote set-url origin https://github.com/Homebrew/homebrew-cask#Caskroom 的 Git 地址在 2018年5月25 日从 https://github.com/caskroom/homebrew-cask 迁移到了 https://github.com/Homebrew/homebrew-cask #最后注释掉/.bash_profile里的homebrew-bottles并保存,以bash为例cd ~open .bash_profile#更新.bash_profilesource .bash_profile#验证brew update

July 15, 2019 · 1 min · jiezi

Go语言cryptossh执行远程命令

前言远程执行命令有什么用?为什么要远程执行命令? 如果你只有2,3台服务器需要管理的时候,远程执行命令确实没有没多大作用,你可以登录到每台服务器上去完成各种操作。 当你的服务器大于3台的时候,远程执行的命令的方式就可以大大提高你的生产力了。 如果你有一个可以远程执行命令的工具,那么就可以像操作单台机器那样操作多台机器,机器越多,效率提高的越多。 远程执行命令最常用的方法就是利用 SSH 协议,将命令发送到远程机器上执行,并获取返回结果。 代码连接包含了认证,可以使用 password 或者 sshkey 2种方式来认证。下面的示例为了简单,使用了密码认证的方式来完成连接。 package mainimport ( "fmt" "github.com/mitchellh/go-homedir" "golang.org/x/crypto/ssh" "io/ioutil" "log" "time")func main(){ sshHost := "home.xxx.cn" sshUser := "x" sshPassword := "xxxxxx" sshType := "password"//password 或者 key sshKeyPath := ""//ssh id_rsa.id 路径" sshPort := 22 //创建sshp登陆配置 config := &ssh.ClientConfig{ Timeout: time.Second,//ssh 连接time out 时间一秒钟, 如果ssh验证错误 会在一秒内返回 User: sshUser, HostKeyCallback: ssh.InsecureIgnoreHostKey(), //这个可以, 但是不够安全 //HostKeyCallback: hostKeyCallBackFunc(h.Host), } if sshType == "password" { config.Auth = []ssh.AuthMethod{ssh.Password(sshPassword)} } else { config.Auth = []ssh.AuthMethod{publicKeyAuthFunc(sshKeyPath)} } //dial 获取ssh client addr := fmt.Sprintf("%s:%d", sshHost, sshPort) sshClient, err := ssh.Dial("tcp", addr, config) if err != nil { log.Fatal("创建ssh client 失败",err) } defer sshClient.Close() //创建ssh-session session, err := sshClient.NewSession() if err != nil { log.Fatal("创建ssh session 失败",err) } defer session.Close() //执行远程命令 combo,err := session.CombinedOutput("whoami; cd /; ls -al;echo https://github.com/dejavuzhou/felix") if err != nil { log.Fatal("远程执行cmd 失败",err) } log.Println("命令输出:",string(combo))}func publicKeyAuthFunc(kPath string) ssh.AuthMethod { keyPath, err := homedir.Expand(kPath) if err != nil { log.Fatal("find key's home dir failed", err) } key, err := ioutil.ReadFile(keyPath) if err != nil { log.Fatal("ssh key file read failed", err) } // Create the Signer for this private key. signer, err := ssh.ParsePrivateKey(key) if err != nil { log.Fatal("ssh key signer failed", err) } return ssh.PublicKeys(signer)}代码详解1 配置ssh.ClientConfig建议TimeOut自定义一个比较端的时间自定义HostKeyCallback 如果像简便就使用 ssh.InsecureIgnoreHostKey回调, 这种方式不是很安全publicKeyAuthFunc 如果使用key登陆 就需要着用这个函数量读取id_rsa私钥,当然你可以自定义这个访问让他支持字符串2 ssh.Dial创建ssh客户端拼接字符串得到ssh连接地址,同时不要忘记 defer client.Close() ...

May 21, 2019 · 2 min · jiezi

mac自定义终端主题 iTerm2 + oh-my-zsh + solarized

mac自定义终端主题iTerm2oh-my-zshpowerlinesolarized安装iTerm2iTerm2比mac自带终端更强大的终端软件,直接在官网下载:http://iterm2.com/配置将iTem2设置为默认终端:(顶部菜单栏)iTerm2 -> Make iTerm2 Default Term设置热键为cmd+.安装主题 solarized官网:https://ethanschoonover.com/s…下载:http://ethanschoonover.com/so…解压后进入iterm2-colors-solarized/目录下,有两个主题文件,在iTerm2中导入即可安装oh-my-zshgithub:https://github.com/robbyrussell/oh-my-zsh可以使用以下任意一种方式安装:crul:sh -c "$(curl -fsSL https://raw.github.com/robbyr...)"wget:sh -c "$(wget https://raw.githubusercontent… -O -)“修改主题vim ~/.zshrc# 找到 ZSH_THEME=“robbyrussell” 这一行# 修改为 ZSH_THEME=“agnoster” (也可以使用ys)# 保存退出source ~/.zshrc注意:这时候有可能会出现乱码 ,安装好PowerLine字体后解决。安装PowerLine字体cd ~/Downloadsgit clone https://github.com/powerline/fonts.gitcd fontsinstall.sh # 安装字体修改iTerm2的默认字体语法高亮插件brew install zsh-syntax-highlightingsource /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource ~/.zshrc

February 4, 2019 · 1 min · jiezi

命令行批量截图Node脚本

批量截图任务作为一个软件工程师,不只是做好自己的本职工作(iOS),而是需要解决项目中的技术问题。这次就是解决自动截图的问题早期公司的数据工程师利用 phantomjs 来截图,后期不断发现截图效率低,加之开发者团队不再维护,因此决定将截图这部分跟你剥离开来,以后方便开发维护。我就承担了这个工作puppeteerPuppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. Puppeteer runs headless by default, but can be configured to run full (non-headless) Chrome or Chromium.安装问题一开始按照往常的套路(npm install –save puppeteer) 好几次都卡住了,后期查找资料发现切换到国内的镜像就可以顺利下载 PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i –save puppeteerTo use Puppeteer in your project, run:PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i –save puppeteerInstall some basic packagesnpm install Usageconst puppeteer = require(‘puppeteer’), fs = require(‘fs’), path = require(‘path’), request = require(‘request’)function mkdirsSync(dirname) { if (fs.existsSync(dirname)) { return true } else { if (mkdirsSync(path.dirname(dirname))) { fs.mkdirSync(dirname) return true } }}var snapShotFolerPath = path.join(__dirname, ‘../snspshot/’)mkdirsSync(snapShotFolerPath) function snapShot (taskInfo) { return new Promise(function (resolve, reject) { (async function(){ // 启动Chromium const browser = await puppeteer.launch({ignoreHTTPSErrors: true, headless:true, args: [’–no-sandbox’]}) // 打开新页面 const page = await browser.newPage() // 设置页面分辨率 await page.setViewport({width: 1920, height: 1080}) // 访问 await page.goto(taskInfo.websiteUrl, {waitUntil: ‘domcontentloaded’}).catch(err => console.log(err)) await page.waitFor(1000) try { // 截图 await page.screenshot({path: snapShotFolerPath + taskInfo.imageName, fullPage:true}).catch(err => { console.log(‘截图失败: ’ + err) }); await page.waitFor(6000) } catch (e) { console.log(‘failed ’ + e) } finally { await browser.close() fs.stat(snapShotFolerPath + taskInfo.imageName, function(err,stats){ if (err) { reject(‘fail’) } else { if (stats.isFile()) { resolve(‘success’) } } }) } })() })}module.exports = snapShot如何安装 (Linux 、Unix 操作系统)如果你有翻墙环境执行 npm install执行 npm start如果你没有翻墙环境打开 package.json 文件,检查 dependencies 项目,如果 key 为 puppeteer 的条目,先删除该条目。进入工程命令行,输入 PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.co… npm i –save puppeteer执行 npm install 命令执行 npm start流程说明while 循环去调用接口去获取当前的截图任务在有截图任务情况下继续截图没有截任务的情况下,为了避免浪费资源,程序休眠10分钟后继续下一次的获取截图任务如果遇到调用截图任务接口500错误,则强制停止截图任务,相应的服务端工程师去查询失败原因如果有截图任务那么就去截图截图后将截图图片保存到文件夹,命令为当前日期 yyyy-MM-dd-hh-mm-ss-S 格式。然后将结果上传到服务端截图失败将当前任务结果保存到本地 failedTasks.json 文件夹一份,然后上传到服务端截图成功不管失败还是成功都去通知服务端。如果失败将当前任务告诉服务端,如果成功将当前任务信息和截图成功的绝对路径告诉服务端一些说明Demo 中执行 npm start 真正执行的是 quickStart.js 中的代码。完整的“获取截图任务、截图、截图上传到OSS、失败则将失败任务上传到服务”逻辑在 index.js 文件中工程是在没有提供真正的接口获取任务,而是采用随机数获取截图任务截图成功后将结果上传到OSS这一个步骤是没有的,采用 log 出来失败的上传也是不存在的,log 打印而已todoList多线程高效率的去截图一些写法暂时比较粗糙,不优雅,待改进puppeteer 很强大,大家可以去研究下代码地址 ...

January 25, 2019 · 2 min · jiezi