猫之良品

猫之良品 查看完整档案

中山编辑  |  填写毕业院校戴文科技  |  PHPer 编辑 www.cnblogs.com/catcat811/ 编辑
编辑

资深Drupal, magento与Joomla

个人动态

猫之良品 赞了文章 · 2020-11-17

Linux 或 Windows上实现端口映射

通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能。

一、Windows下实现端口映射

1.查询端口映射情况

netsh interface portproxy show v4tov4

2.查询某一个IP的所有端口映射情况

netsh interface portproxy show v4tov4 | find "[IP]"
例:
netsh interface portproxy show v4tov4 | find "192.168.1.1"

3.增加一个端口映射

netsh interface portproxy add v4tov4 listenaddress=[外网IP] listenport=[外网端口] connectaddress=[内网IP] connectport=[内网端口]
例:
netsh interface portproxy add v4tov4 listenaddress=2.2.2.2 listenport=8080 connectaddress=192.168.1.50 connectport=80

4.删除一个端口映射

netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口]
例:
netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080

二、Linux下实现端口映射

1.允许数据包转发

echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i [内网网卡名称] -j ACCEPT
iptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE
例:
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i ens33 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE

2.设置端口映射

iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口]
例:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090

实验:将部署在内网的服务映射到外网

实验环境
  • VMWare Workstation Pro
  • 5台最小化安装的centos 7虚拟机
实验拓扑

  • 内网和外网是相对Server4来说的。
  • Server1和Server2为内网环境的两台服务器;
  • Server3为外网环境下的一台服务器;
  • Server4为一台双网卡主机,分别连接192.168.50.0/24和172.16.2.0/24两个网络。
配置实验环境

1.Server1,2,3上搭建HTTP服务

用Python在Server1上搭建一个简单的HTTP服务

cd ~
echo "server1" > index.html
python -m SimpleHTTPServer 8080

Server2、Server3同理

对照实验

在client上访问Server1的资源

curl http://192.168.50.11:8080/index.html

在client上访问Server2的资源

curl http://192.168.50.12:8080/index.html

在client上访问Server3的资源

curl http://172.16.2.11:8080/index.html

可以看到,外网的client是无法访问内网Server1,Server2的资源的。

在Server4上配置端口映射

临时配置

#允许数据包转发
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i ens33 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
#设置端口映射
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.50.11:8080
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.50.12:8080

永久配置

如果需要永久配置,则将以上命令追加到/etc/rc.local文件。

检查效果

在client上访问Server1的资源

curl http://172.16.2.100:8081/index.html

在client上访问Server2的资源

curl http://172.16.2.100:8082/index.html

在client上访问Server3的资源

curl http://172.16.2.11:8080/index.html

如果Server4为Windows,替换一下相应的命令即可配置并查看端口映射情况

netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8081 connectaddress=192.168.50.11 connectport=8080
netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8082 connectaddress=192.168.50.12 connectport=8080
netsh interface portproxy show v4tov4

检查效果

在client节点上

curl http://172.16.2.105:8081/index.html
curl http://172.16.2.105:8082/index.html
curl http://172.16.2.11:8080/index.html

链接:https://www.cnblogs.com/conne...

image

查看原文

赞 3 收藏 2 评论 0

猫之良品 收藏了文章 · 2020-11-17

Linux 或 Windows上实现端口映射

通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能。

一、Windows下实现端口映射

1.查询端口映射情况

netsh interface portproxy show v4tov4

2.查询某一个IP的所有端口映射情况

netsh interface portproxy show v4tov4 | find "[IP]"
例:
netsh interface portproxy show v4tov4 | find "192.168.1.1"

3.增加一个端口映射

netsh interface portproxy add v4tov4 listenaddress=[外网IP] listenport=[外网端口] connectaddress=[内网IP] connectport=[内网端口]
例:
netsh interface portproxy add v4tov4 listenaddress=2.2.2.2 listenport=8080 connectaddress=192.168.1.50 connectport=80

4.删除一个端口映射

netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口]
例:
netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080

二、Linux下实现端口映射

1.允许数据包转发

echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i [内网网卡名称] -j ACCEPT
iptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE
例:
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i ens33 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE

2.设置端口映射

iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口]
例:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090

实验:将部署在内网的服务映射到外网

实验环境
  • VMWare Workstation Pro
  • 5台最小化安装的centos 7虚拟机
实验拓扑

  • 内网和外网是相对Server4来说的。
  • Server1和Server2为内网环境的两台服务器;
  • Server3为外网环境下的一台服务器;
  • Server4为一台双网卡主机,分别连接192.168.50.0/24和172.16.2.0/24两个网络。
配置实验环境

1.Server1,2,3上搭建HTTP服务

用Python在Server1上搭建一个简单的HTTP服务

cd ~
echo "server1" > index.html
python -m SimpleHTTPServer 8080

Server2、Server3同理

对照实验

在client上访问Server1的资源

curl http://192.168.50.11:8080/index.html

在client上访问Server2的资源

curl http://192.168.50.12:8080/index.html

在client上访问Server3的资源

curl http://172.16.2.11:8080/index.html

可以看到,外网的client是无法访问内网Server1,Server2的资源的。

在Server4上配置端口映射

临时配置

#允许数据包转发
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i ens33 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
#设置端口映射
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.50.11:8080
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.50.12:8080

永久配置

如果需要永久配置,则将以上命令追加到/etc/rc.local文件。

检查效果

在client上访问Server1的资源

curl http://172.16.2.100:8081/index.html

在client上访问Server2的资源

curl http://172.16.2.100:8082/index.html

在client上访问Server3的资源

curl http://172.16.2.11:8080/index.html

如果Server4为Windows,替换一下相应的命令即可配置并查看端口映射情况

netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8081 connectaddress=192.168.50.11 connectport=8080
netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8082 connectaddress=192.168.50.12 connectport=8080
netsh interface portproxy show v4tov4

检查效果

在client节点上

curl http://172.16.2.105:8081/index.html
curl http://172.16.2.105:8082/index.html
curl http://172.16.2.11:8080/index.html

链接:https://www.cnblogs.com/conne...

image

查看原文

猫之良品 收藏了文章 · 2020-10-18

再见,可视化!你好,Pandas!

image

来源:Python数据科学
作者:东哥起飞

Python做数据分析离不开pandaspnadas更多的承载着处理和变换数据的角色,pands中也内置了可视化的操作,但效果很糙。

因此,大家在用Python做数据分析时,正常的做法是用先pandas先进行数据处理,然后再用MatplotlibSeabornPlotlyBokeh等对dataframe或者series进行可视化操作。

但是说实话,每个可视化包都有自己独特的方法和函数,经常忘,这是让我一直很头疼的地方。

好消息来了!从最新的pandas版本0.25.3开始,不再需要上面的操作了,数据处理和可视化完全可以用pandas一个就全部搞定。

pandas现在可以使用PlotlyBokeh作为可视化的backend,直接实现交互性操作,无需再单独使用可视化包了。

下面我们一起看看如何使用。

1. 激活backend

importpandas之后,直接使用下面这段代码激活backend,比如下面要激活plotly

pd.options.plotting.backend = 'plotly'

目前,pandas的backend支持以下几个可视化包。

  • Plotly
  • Holoviews
  • Matplotlib
  • Pandas_bokeh
  • Hyplot

2. Plotly backend

Plotly的好处是,它基于Javascript版本的库写出来的,因此生成的Web可视化图表,可以显示为HTML文件或嵌入基于Python的Web应用程序中。

下面看下如何用plotly作为pandas的backend进行可视化。

如果还没安装Plotly,则需要安装它pip intsall plotly。如果是在Jupyterlab中使用Plotly,那还需要执行几个额外的安装步骤来显示可视化效果。

首先,安装IPywidgets

pip install jupyterlab "ipywidgets>=7.5"

然后运行此命令以安装Plotly扩展。

jupyter labextension install jupyterlab-plotly@4.8.1

示例选自openml.org的的数据集,链接如下:

数据链接:https://www.openml.org/d/187

这个数据也是Scikit-learn中的样本数据,所以也可以使用以下代码将其直接导入。

import pandas as pd
import numpy as np

from sklearn.datasets import fetch_openml

pd.options.plotting.backend = 'plotly'

X,y = fetch_openml("wine", version=1, as_frame=True, return_X_y=True)
data = pd.concat([X,y], axis=1)
data.head()

该数据集是葡萄酒相关的,包含葡萄酒类型的许多功能和相应的标签。数据集的前几行如下所示。

image

下面使用Plotly backend探索一下数据集。

绘图方式与正常使用Pandas内置的绘图操作几乎相同,只是现在以丰富的Plotly显示可视化效果。

下面的代码绘制了数据集中两个要素之间的关系。

fig = data[['Alcohol', 'Proline']].plot.scatter(y='Alcohol', x='Proline')
fig.show()

image

如果将鼠标悬停在图表上,可以选择将图表下载为高质量的图像文件。
image

我们可以结合Pandasgroupby函数创建一个条形图,总结各类之间Hue的均值差异。

data[['Hue','class']].groupby(['class']).mean().plot.bar()

image

class添加到我们刚才创建的散点图中。通过Plotly可以轻松地为每个类应用不同的颜色,以便直观地看到分类。

fig = data[['Hue', 'Proline', 'class']].plot.scatter(x='Hue', y='Proline', color='class', title='Proline and Hue by wine class')
fig.show()

image

3. Bokeh backend

Bokeh是另一个Python可视化包,也可提供丰富的交互式可视化效果。Bokeh还具有streaming API,可以为比如金融市场等流数据创建实时可视化。

pandas-Bokeh的GitHub链接如下:

https://github.com/PatrikHlob...

老样子,用pip安装即可,pip install pandas-bokeh

为了在Jupyterlab中显示Bokeh可视化效果,还需要安装两个新的扩展。

jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter labextension install @bokeh/jupyter_bokeh

下面我们使用Bokeh backend重新创建刚刚plotly实现的的散点图。

pd.options.plotting.backend = 'pandas_bokeh'

import pandas_bokeh
from bokeh.io import output_notebook
from bokeh.plotting import figure, show

output_notebook()
p1 = data.plot_bokeh.scatter(x='Hue', 
                              y='Proline', 
                              category='class', 
                              title='Proline and Hue by wine class',
                              show_figure=False)
show(p1)

关键语句就一行代码,非常快捷,交互式效果如下。

image

Bokeh还具有plot_grid函数,可以为多个图表创建类似于仪表板的布局,下面在网格布局中创建了四个图表。

output_notebook()

p1 = data.plot_bokeh.scatter(x='Hue', 
                              y='Proline', 
                              category='class', 
                              title='Proline and Hue by wine class',
                              show_figure=False)

p2 = data[['Hue','class']].groupby(['class']).mean().plot.bar(title='Mean Hue per Class')

df_hue = pd.DataFrame({
    'class_1': data[data['class'] == '1']['Hue'],
    'class_2': data[data['class'] == '2']['Hue'],
    'class_3': data[data['class'] == '3']['Hue']},
    columns=['class_1', 'class_2', 'class_3'])

p3 = df_hue.plot_bokeh.hist(title='Distribution per Class: Hue')

df_proline = pd.DataFrame({
    'class_1': data[data['class'] == '1']['Proline'],
    'class_2': data[data['class'] == '2']['Proline'],
    'class_3': data[data['class'] == '3']['Proline']},
    columns=['class_1', 'class_2', 'class_3'])

p4 = df_proline.plot_bokeh.hist(title='Distribution per Class: Proline')

pandas_bokeh.plot_grid([[p1, p2], 
                        [p3, p4]], plot_width=450)

可以看到,可视化的部分都是在pandasdataframe基础上一行代码搞定,最后plot_grid完成布局。
image

4. 总结

在内置的Pandas绘图功能增加多个第三方可视化backend,大大增强了pandas用于数据可视化的功能,今后可能真的不需再去学习众多可视化操作了,使用pandas也可以一击入魂!


原创不易,来波点赞支持。

本篇首发于我的原创公众号:Python数据科学,欢迎关注。
个人网站:http://www.datadeepin.com/

查看原文

猫之良品 赞了文章 · 2020-10-18

再见,可视化!你好,Pandas!

image

来源:Python数据科学
作者:东哥起飞

Python做数据分析离不开pandaspnadas更多的承载着处理和变换数据的角色,pands中也内置了可视化的操作,但效果很糙。

因此,大家在用Python做数据分析时,正常的做法是用先pandas先进行数据处理,然后再用MatplotlibSeabornPlotlyBokeh等对dataframe或者series进行可视化操作。

但是说实话,每个可视化包都有自己独特的方法和函数,经常忘,这是让我一直很头疼的地方。

好消息来了!从最新的pandas版本0.25.3开始,不再需要上面的操作了,数据处理和可视化完全可以用pandas一个就全部搞定。

pandas现在可以使用PlotlyBokeh作为可视化的backend,直接实现交互性操作,无需再单独使用可视化包了。

下面我们一起看看如何使用。

1. 激活backend

importpandas之后,直接使用下面这段代码激活backend,比如下面要激活plotly

pd.options.plotting.backend = 'plotly'

目前,pandas的backend支持以下几个可视化包。

  • Plotly
  • Holoviews
  • Matplotlib
  • Pandas_bokeh
  • Hyplot

2. Plotly backend

Plotly的好处是,它基于Javascript版本的库写出来的,因此生成的Web可视化图表,可以显示为HTML文件或嵌入基于Python的Web应用程序中。

下面看下如何用plotly作为pandas的backend进行可视化。

如果还没安装Plotly,则需要安装它pip intsall plotly。如果是在Jupyterlab中使用Plotly,那还需要执行几个额外的安装步骤来显示可视化效果。

首先,安装IPywidgets

pip install jupyterlab "ipywidgets>=7.5"

然后运行此命令以安装Plotly扩展。

jupyter labextension install jupyterlab-plotly@4.8.1

示例选自openml.org的的数据集,链接如下:

数据链接:https://www.openml.org/d/187

这个数据也是Scikit-learn中的样本数据,所以也可以使用以下代码将其直接导入。

import pandas as pd
import numpy as np

from sklearn.datasets import fetch_openml

pd.options.plotting.backend = 'plotly'

X,y = fetch_openml("wine", version=1, as_frame=True, return_X_y=True)
data = pd.concat([X,y], axis=1)
data.head()

该数据集是葡萄酒相关的,包含葡萄酒类型的许多功能和相应的标签。数据集的前几行如下所示。

image

下面使用Plotly backend探索一下数据集。

绘图方式与正常使用Pandas内置的绘图操作几乎相同,只是现在以丰富的Plotly显示可视化效果。

下面的代码绘制了数据集中两个要素之间的关系。

fig = data[['Alcohol', 'Proline']].plot.scatter(y='Alcohol', x='Proline')
fig.show()

image

如果将鼠标悬停在图表上,可以选择将图表下载为高质量的图像文件。
image

我们可以结合Pandasgroupby函数创建一个条形图,总结各类之间Hue的均值差异。

data[['Hue','class']].groupby(['class']).mean().plot.bar()

image

class添加到我们刚才创建的散点图中。通过Plotly可以轻松地为每个类应用不同的颜色,以便直观地看到分类。

fig = data[['Hue', 'Proline', 'class']].plot.scatter(x='Hue', y='Proline', color='class', title='Proline and Hue by wine class')
fig.show()

image

3. Bokeh backend

Bokeh是另一个Python可视化包,也可提供丰富的交互式可视化效果。Bokeh还具有streaming API,可以为比如金融市场等流数据创建实时可视化。

pandas-Bokeh的GitHub链接如下:

https://github.com/PatrikHlob...

老样子,用pip安装即可,pip install pandas-bokeh

为了在Jupyterlab中显示Bokeh可视化效果,还需要安装两个新的扩展。

jupyter labextension install @jupyter-widgets/jupyterlab-manager
jupyter labextension install @bokeh/jupyter_bokeh

下面我们使用Bokeh backend重新创建刚刚plotly实现的的散点图。

pd.options.plotting.backend = 'pandas_bokeh'

import pandas_bokeh
from bokeh.io import output_notebook
from bokeh.plotting import figure, show

output_notebook()
p1 = data.plot_bokeh.scatter(x='Hue', 
                              y='Proline', 
                              category='class', 
                              title='Proline and Hue by wine class',
                              show_figure=False)
show(p1)

关键语句就一行代码,非常快捷,交互式效果如下。

image

Bokeh还具有plot_grid函数,可以为多个图表创建类似于仪表板的布局,下面在网格布局中创建了四个图表。

output_notebook()

p1 = data.plot_bokeh.scatter(x='Hue', 
                              y='Proline', 
                              category='class', 
                              title='Proline and Hue by wine class',
                              show_figure=False)

p2 = data[['Hue','class']].groupby(['class']).mean().plot.bar(title='Mean Hue per Class')

df_hue = pd.DataFrame({
    'class_1': data[data['class'] == '1']['Hue'],
    'class_2': data[data['class'] == '2']['Hue'],
    'class_3': data[data['class'] == '3']['Hue']},
    columns=['class_1', 'class_2', 'class_3'])

p3 = df_hue.plot_bokeh.hist(title='Distribution per Class: Hue')

df_proline = pd.DataFrame({
    'class_1': data[data['class'] == '1']['Proline'],
    'class_2': data[data['class'] == '2']['Proline'],
    'class_3': data[data['class'] == '3']['Proline']},
    columns=['class_1', 'class_2', 'class_3'])

p4 = df_proline.plot_bokeh.hist(title='Distribution per Class: Proline')

pandas_bokeh.plot_grid([[p1, p2], 
                        [p3, p4]], plot_width=450)

可以看到,可视化的部分都是在pandasdataframe基础上一行代码搞定,最后plot_grid完成布局。
image

4. 总结

在内置的Pandas绘图功能增加多个第三方可视化backend,大大增强了pandas用于数据可视化的功能,今后可能真的不需再去学习众多可视化操作了,使用pandas也可以一击入魂!


原创不易,来波点赞支持。

本篇首发于我的原创公众号:Python数据科学,欢迎关注。
个人网站:http://www.datadeepin.com/

查看原文

赞 19 收藏 12 评论 1

猫之良品 收藏了文章 · 2020-10-15

推荐 22 款好用的 CLI 工具

image.png

_作者:switowski
策划:万佳
原文链接:https://switowski.com/blog/fa...

作者根据多年的终端使用经验,详细介绍了一些实用的 CLI 工具,希望它们能帮读者提高生产力。

我大部分的时间都花费在终端的使用上,我觉得有必要给大家推荐一下比较好用的终端工具。先给大家列个推荐清单,如下图。

image.png

高频 CLI 工具推荐

1、fish shell

Shell- 毋庸置疑,在终端中,Shell 是使用最频繁也最重要的工具。过去,我曾经使用过 Bash 和 Z Shell,而如今,我正在使用的是 Fish Shell。这是一个非常优秀的终端 Shell 工具,拥有许多开箱即用的功能,例如语法自动推荐补全、语法高亮显示或使用快捷键在最近访问的文件夹之间来回切换。

image.png

一方面,它非常适合初学者使用,因为使用者无需进行任何设置。另一方面,由于它使用的脚本语法与其他 Shell 有所差异,因此通常用户不能把拷贝自网上的脚本直接粘贴使用。你必须将不兼容的命令更改为合法的 Fish 脚本,或者启动一个 Bash 会话以运行 Bash 脚本。

https://fishshell.com/docs/cu...

我能理解这种更改背后的原因(毕竟 Bash 脚本不是易于用户使用的语言),但这种不兼容丝毫没有给我带来任何好处。我平时很少编写 Bash / Fish 脚本,所以经常遗忘这些语法,因此每次要使用这些脚本时我总是必须从头开始重新学习它。与 Bash 脚本相比,Fish 脚本的资源相对更少。我通常不会去阅读文档,重复造轮子,而是从 StackOverflow 复制粘贴现成的脚本拿来即用。

虽然前面我提到了 Fish Shell 的几个缺点,但是我还是会推荐你去用一下,因为切换 Shell 工具十分简单,所以很值得你去尝试一下。特别是当你懒得自己去配置 Shell,并希望通过最少的配置就能获得很好的使用效果的时候,那就更不要错过它了。

Fish插件

你可以自己添加相关插件来扩展 Fish Shell 的功能。最简单的安装插件的方法就是使用插件管理工具,比如 Fisher、Oh My Fish 或者 fundle。现在,我使用的插件管理工具是 Fisher,我用它安装管理了三个插件:

  1. franciscolourenco/done ——在长时间运行的脚本完成后发送通知。
  2. evanlucas/fish-kubectl-completions——1个自动补全 kubectl(Kubernetes command line tool) 命令的插件。
  3. fzf——将 fzf 工具与 Fish 集成在一起的插件。

过去,我有使用很多的插件(比如 rbenv、pyenv、nodenv、fzf、z),但是我改用其他工具以避免影响我的 Shell 的运行速度(这是我过去使用 Z shell 所得到的一个教训)。

下载地址:https://fishshell.com/

2、Starship

如果必须要从本篇文章中选择一个我最喜欢的终端工具——那非 Starship 莫属。Starship 可以适用于任何 Shell。你只需要安装它,然后在相应的配置文件.bashrc/.zshrc/config.fish添加一行配置,剩下的工作交给它来完成就好了。
image.png

它可以做到:

  • 根据你是否在代码仓库中添加了新文件、是否修改了文件、是否暂存了文件等情况,用相应的符号表示 git 仓库的状态。
  • 根据你所在的 Python 项目目录,展示 Python 的版本号,这也适用于 Go/Node/Rust/Elm 等其他编程语言环境。
  • 展示上一个命令执行所用的时间,指令运行时间必须在毫秒级别。
  • 如果上一个命令执行失败,会展示相应的错误提示符。

image.png

还有不计其数的其他信息可以展示。但是,它能以更加友好的形式智能地给你呈现!比如,如果你不在 git 存储库中,它将隐藏 git 信息。如果您不在 Python 项目中,则不会有 Python 版本信息,因为显示它没有什么意义。它永远不会给你展示多余信息,始终保持终端的美观,优雅和简约。

Starship 的运行速度怎么样呢?它是用 Rust 编写的,尽管功能如此之多,但仍然比我以前使用的所有提示工具都要快!我对提示信息非常洁癖,因此我经常破解自己的版本。我会根据现有的提示找到对应的功能代码,然后将其粘组合在一起,以确保 Starship 只有我需要的功能以保持其快速运行。“外部工具永远无法比我精心制作的提示工具更快!” 这就是我对 Starship 持怀疑态度的原因。

下载地址:https://starship.rs/

3、z

“z”可以让你快速地在文件目录之间跳转。它会记住你访问的历史文件夹,经过短暂的学习后,你就可以使用z path_of_the_folder_name命令在目录之间跳转了。

比如,如果我经常访问 ~/work/src/projects,我只需要运行 z pro ,就可以立马跳转到那里。z 的原理参考了 frecency 算法——一个基于统计 frequency 和 recency 进行分析的算法。如果它存储了你不想使用的路径文件夹,你随时可以手动将其删除。它提高了我在常用的不同文件路径之间频繁切换的效率,帮我节省了键盘击键次数以及大量的路径记忆。

下载地址:https://github.com/rupa/z

4、fzf

fzf— fuzzy finder,即模糊查找器。它是一种通用工具,可让你使用模糊搜索来查找文件、历史命令、进程、git 提交等。你键入一些字母,它会尝试匹配结果列表中任何位置的字母。输入的字母越多,结果也就越准确。你可能在其他的代码编辑器中有过这种类型的搜索使用体验——当你想打开某个文件时,只键入文件名的一部分而不用输入完整路径就能进行查找——这就是模糊搜索。

image.png

我通过 fish fzf 插件插件使用它,因此我可以搜索命令历史记录或快速打开文件。这是可以每天为我节省不少时间的一个非常棒的工具。

https://github.com/jethrokuan...

下载地址:https://github.com/junegunn/fzf

5、fd

上面动图是 find 命令(左)和 fd 命令(右)的使用对比。

类似于系统自带的 find 命令,但使用起来更简单,查找速度更快,并且具有良好的默认设置。

不管你想找到一个名为“invoice”的文件,但是不确定文件的扩展名,还是查找一个存放所有 invoice 的目录,而不单是一个文件。你可以撸起袖子,开始为 find 命令编写那些复杂的正则表达式,也可以直接命令行运行 fd invoice。反正对我来说,我只选择最简单的那个。

默认情况下,fd 会忽略隐藏的以及在.gitignore列出的文件和目录。大多数时候,这也是我们想要的,但是在极少数特殊情况下,如果需要禁用此功能时,我会给该命令设置一个别名:fda='fd -IH'

你会发现,fd 命令输出的颜色配置很漂亮,而且根据基准测试(上述 GIF),它的执行速度甚至比find 命令的还要快。

下载地址:https://github.com/sharkdp/fd

6、ripgrep

上图为 grep(左)与 rg(右)命令执行时的对比。

与上述fd指令类似,ripgrepgrep命令的替代方法, 不过ripgrep的执行速度更快,而且具有健全的默认配置以及丰富的彩色输出。

它同样会跳过被.gitignore忽略以及隐藏的文件,因此如果有特殊需要,我们可以设置指令别名:rga ='rg -uuu'。它会禁用所有智能筛选,并使ripgrep的表现与标准的 grep 指令一致。

下载地址:https://github.com/BurntSushi...

7、htop 和 glances

在 Linux 或 Mac 上显示进程运行状态信息最常用工具是我们熟悉的top,它是每位系统管理员的好帮手。而且,即使是像我一样主要从事网络开发,查看计算机的运行状况也很有用。你知道,只是看一下当前到底是 Docker 进程还是 Chrome 进程吃掉了你所有的 RAM,应该如何做吗?
image.png

htop工具是top工具的绝佳替代品。

top工具是非常基础的监控工具,提供的功能有限,因此很多人转去使用 htop。htop比起top,优势很明显——除了功能更加完善以外,它的色彩搭配也很丰富,整体上使用起来更加友好。

image.png

借助 glances,还可以让你一目了然地快速了解系统当前状态。

glances 是htop的补充工具。除了列出所有进程及其 CPU 和内存使用情况之外,它还可以显示有关系统的其他信息,比如:

  • 网络及磁盘使用情况
  • 文件系统已使用的空间和总空间
  • 来自不同传感器(例如电池)的数据
  • 以及最近消耗过多资源的进程列表

我选择使用htop来筛选和终止进程,因为对我来讲,效率提高了不少,我也使用 glances可以快速浏览一下计算机的运行状况。它提供 API 接口、Web UI 以及支持各种导出格式,因此你可以将系统监视提高到一个新 Level。因此我在这里强烈推荐一波!

htop 下载地址:https://hisham.hm/htop/

glances 下载地址:

https://nicolargo.github.io/g...

8、virtualenv 和 virtualfish

Virtualenv 是用于在 Python 中创建虚拟环境的工具(比起内置的venv模块,我更喜欢 Virtualenv)。

image.png

VirtualFish 是 Fish Shell 的虚拟环境管理器(如果你不使用 Fish Shell,请查看 virtualenvwrapper)。它提供了许多命令来执行快速创建、列出或删除虚拟环境等操作。

virtualenv 下载地址:

https://pypi.org/project/virt...

virtualfish 下载地址:

https://github.com/justinmaye...

9、pyenv、nodenv 和 rbenv

pyenv 可以轻松实现 Python 版本的切换。

image.png

Pyenv、nodenv 和 rubyenv 是用于管理计算机上不同版本的 Python、Node 和 Ruby 的工具。

假设你要在计算机上安装两个版本的 Python。比如,你正在从事两个不同的 Python 项目,或者因为特殊情况仍然需要使用 Python2。不同 Python 版本在电脑上管理很复杂。你需要确保不同的项目具有正确版本的软件依赖包。如果你不小心的话,很容易弄乱这种脆弱的配置并被其他软件包使用的二进制文件所覆盖。

该工具为版本管理提供了很多帮助,并将这一噩梦变得易于管理。它可以全局或“按文件夹”切换 Python 版本,而且每个版本都是相互隔离的。

我最近找到了一种名为 asdf 的工具,该工具可以将 pyenv、nodenv、rbenv 及其他 env 进行统一管理。它提供了几乎所有编程语言的版本管理,下次我需要为编程语言设置版本管理器时,一定会尝试使用一下。

pyenv 下载地址:https://github.com/pyenv/pyenv

nodenv 下载地址:https://github.com/nodenv/nodenv

rbenv 下载地址:https://github.com/rbenv/rbenv

10、pipx

Virtualenv 解决了 Python 程序包管理中的许多问题,但是还有一个方案可以解决。如果我想在全局环境下安装 Python 软件包(比如它是一个独立的工具,正如前面提到的glances 工具),那么我会遇到全局安装带来的问题。在虚拟环境之外安装软件包不是一个好主意,将来可能会导致意想不到的问题。另一方面,如果我决定使用虚拟环境,那么每次我要运行程序时都需要激活该虚拟环境。这也不是最方便的解决方案。

image.png

事实证明,pipx工具可以解决上面提到的问题。它将 Python 软件依赖包安装到单独的环境中(因此不会存在依赖项冲突的问题)。与此同时,这些工具提供的 CLI 命令在全局环境内也可用。因此,我无需激活任何环境——pipx会帮我完成这个操作!

如果你想了解有关 Python 工具的更多信息并想了解如何使用它们,我为 PyCon 2020 会议制作了一个名为“现代 Python 开发人员工具包”的视频。

这是一个长达两个小时的视频教程,内容涉及如何设置 Python 开发环境,要使用的工具以及如何从头开始制作 TODO 应用程序(包括测试和文档)。你可以在 YouTube 上进行观看。

https://www.youtube.com/watch...

pipx 下载地址:

https://github.com/pipxprojec...

11、ctop 和 lazydocker

ctop 的实时监控示例

当你使用 Docker 并对其监控时,这两个工具会很有帮助。ctop是 Docker 容器的顶级接口。它可以为你:

  • 展示正在运行和已停止的容器列表。
  • 展示统计信息,例如内存、CPU 使用率以及针对每个容器的其他详细信息窗口(例如绑定的端口等其他信息)。
  • 提供快捷菜单,方便快速停止、杀掉指定容器进程或显示给定容器的日志。

这比你尝试从docker ps命令中找出所有这些信息要方便多了。

lazydocker是我最喜欢的 Docker 工具

如果你认为ctop很酷,请你尝试使用 lazydocker 后再做决定!它是一个非常成熟的拥有终端 UI 界面的工具,提供了非常丰富的功能用于管理 Docker。这是我最喜欢的 Docker 管理工具!

ctop 下载地址:https://github.com/bcicen/ctop

lazydocker 下载地址:

https://github.com/jesseduffi...

低频 CLI 工具推荐

除了几乎每天都在使用的工具以外,我多年来还收集了一些给力的工具,这些工具对于一些特定需求非常好用。比如有的终端工具可以用来将终端操作记录成 GIF(并且可以让你在 GIF 中暂停和复制文本!),还有的终端工具可以用于列出目录结构、连接数据库等,下面我会一一介绍。

12、Homebrew

image.png

如果你使用的是 Mac,那我就无需再介绍 Homebrew 了。它是 macOS 上被业界普遍认可的软件包管理器。对了,它还有一个称为 Cakebrew 的 GUI 版本软件,如果感兴趣你可以尝试一下。

下载地址:https://brew.sh/

13、asciinema

image.png

asciinema是可用于记录终端会话的工具。但是,与录制 GIF 不同,它可以让用户选择并复制这些录制中的代码!

这对于录制编码教程来说十分好用。你应该遇到那种尴尬的情况——当你准备跟着视频教程在终端中敲巨长的命令,但是讲师并为你提供这个代码段,你不得不花费很长的时间去整理这些冗长的命令。asciinema录制的内容,支持直接复制,十分给力。

下载地址:https://asciinema.org/

14、colordiff 和 diff-so-fancy

image.png

我很少在终端中使用diff操作(比较两个文件之间的差异),但是如果你需要执行这个操作,可以放弃使用diff命令,而是使用 colordiffcolordiff输出可以高亮显示,因此在查看文件差异内容时要方便得多,而不是在diff命令输出内容下,费力地查看所有的“ <”和“>”符号来对比文件差异。

如果你觉得还不够,那么我推荐给你 diff-so-fancy。它是比colordiff更友好的一个差异对比工具。

image.png

它通过以下方式进一步改善了文件内容差异展示的外观:

  • 突出显示每一行中差异的单词,而不是整行
  • 简化变更文件的标题
  • 去除 + 和 - 符号(颜色差异展示就够了)
  • 清楚地指出新行和删除的空行

colordiff 下载地址:https://www.colordiff.org/

diff-so-fancy 下载地址:https://github.com/so-fancy/d...

15、tree

你可以通过brew install tree安装该工具。如果要查看给定目录的内容,那么 tree 是执行此操作的必备工具。它能以漂亮的树状结构显示所有子目录及文件:

$ tree .
.
├── recovery.md
├── README.md
├── archive
├── automator
│   ├── Open Iterm2.workflow
│   │   └── Contents
│   │       ├── Info.plist
│   │       ├── QuickLook
│   │       │   └── Thumbnail.png
│   │       └── document.wflow
│   └── Start Screen Saver.workflow
├── brew-cask.sh

16、bat

image.png

类似于在终端中常用的用于显示文件内容的cat命令,但是bat效果更佳。

它增加了语法高亮显示,git gutter 标记(如果适用),自动分页(如果文件很大)等功能,并且使得输出的内容阅读起来更加友好。

bat 下载地址:https://github.com/sharkdp/bat

17、httpie

如果你需要发送一些 HTTP 请求,但发现使用curl不够直观,那么请尝试一下httpie。这是一款非常好用的curl替代工具。合理的默认配置以及简洁的语法使它更易于使用,命令返回也是彩色输出,甚至支持为不同类型的身份验证安装相应的插件。

httpie 下载地址:https://httpie.org/

18、tldr

简化版的命令帮助手册。“man pages” 包含了 Linux 软件的手册,这些手册解释了如何使用给定的命令。你可以尝试运行man catman grep来查看相关命令的帮助手册。它们描述的非常详细,有时可能难以掌握。因此,tldr社区的目的,就是将每个命令的帮助手册进行简化,方便用户查阅。

tldr适用于几乎所有的受欢迎的软件。正如我提到的,这是社区的努力和功劳,虽然不太可能包含所有的软件的简化帮助手册。但是当某个帮助手册被纳入管理并起作用时,它提供的信息通常就是你要查找的内容。

比如,如果你要创建一些文件的 gzip 压缩存档,man tar可以为你提供可能的参数选择。而tldr tar会列出一些我们常见的示例——如图所示,第二个示例正是你要执行的操作:

image.png

“man pages”展示的信息太全面了,但是很多时候使用tldr可以更快地帮你找到特定信息,这才是用户真正想要的。

tldr 下载地址:https://tldr.sh/

19、exa

image.png

exals命令的一个可替代方案。

它色彩艳丽,还可以显示 git 状态等其他信息,自动将文件大小转换为方便人们阅读的单位,并且所有这些都保持与ls几乎相同的执行速度。虽然我很喜欢这个工具并推荐给你们,但由于某种原因,我仍然坚持使用 ls。

exa 下载地址:https://the.exa.website/

20、litecli 和 pgcli

这是我首选的 SQLite 和 PostgreSQL CLI 的解决方案。借助自动提示和语法突出显示,它们比默认的sqlite3psql工具要好用很多。

litecli 下载地址:https://litecli.com/

pgcli 下载地址:https://www.pgcli.com/

21、mas

image.png

mas是一个用于从 App Store 安装软件的 CLI 工具。我目前为止,我仅仅使用过它一次——设置我的 Macbook 电脑软件。将来,我也将使用它来设置我的下一台 Macbook。mas可让你自动在 macOS 中安装软件。它解放了你大量的点击操作。而且,鉴于你正在阅读这篇有关 CLI 工具的文章,所以我大胆地认为,大家都和我一样,不喜欢无聊的单击操作。

我在“灾难修复”脚本中保留了从 App Store 安装的应用程序列表。如果我的电脑真的发生了什么意外情况,我希望能够以最小的代价重新安装所有内容。

mas 下载地址:https://github.com/mas-cli/mas

22、ncdu

image.png

这是在终端进行磁盘分析时使用的工具,它使用起来简单快捷。当我需要释放一些硬盘空间时,会默认使用这款工具。

ncdu 下载地址:https://dev.yorhel.nl/ncdu

23、总结

以上推荐工具清单确实很长,但是我希望有一些工具真的能够带给你方便,提高你的生产力。fdripgrephttpie等工具可能是你以前熟悉的工具的改进版本。这些工具的改进版本除了更易于使用之外,它们还提供更友好的输出,执行速度甚至更快。所以,我们要多多尝试并接受新的事物,不要仅仅因为大家都在使用旧工具而只局限在旧工具的使用上。事物都是在向前发展的,穷则变,变则通,通则久。大家一起共勉。

image

查看原文

猫之良品 赞了文章 · 2020-10-15

推荐 22 款好用的 CLI 工具

image.png

_作者:switowski
策划:万佳
原文链接:https://switowski.com/blog/fa...

作者根据多年的终端使用经验,详细介绍了一些实用的 CLI 工具,希望它们能帮读者提高生产力。

我大部分的时间都花费在终端的使用上,我觉得有必要给大家推荐一下比较好用的终端工具。先给大家列个推荐清单,如下图。

image.png

高频 CLI 工具推荐

1、fish shell

Shell- 毋庸置疑,在终端中,Shell 是使用最频繁也最重要的工具。过去,我曾经使用过 Bash 和 Z Shell,而如今,我正在使用的是 Fish Shell。这是一个非常优秀的终端 Shell 工具,拥有许多开箱即用的功能,例如语法自动推荐补全、语法高亮显示或使用快捷键在最近访问的文件夹之间来回切换。

image.png

一方面,它非常适合初学者使用,因为使用者无需进行任何设置。另一方面,由于它使用的脚本语法与其他 Shell 有所差异,因此通常用户不能把拷贝自网上的脚本直接粘贴使用。你必须将不兼容的命令更改为合法的 Fish 脚本,或者启动一个 Bash 会话以运行 Bash 脚本。

https://fishshell.com/docs/cu...

我能理解这种更改背后的原因(毕竟 Bash 脚本不是易于用户使用的语言),但这种不兼容丝毫没有给我带来任何好处。我平时很少编写 Bash / Fish 脚本,所以经常遗忘这些语法,因此每次要使用这些脚本时我总是必须从头开始重新学习它。与 Bash 脚本相比,Fish 脚本的资源相对更少。我通常不会去阅读文档,重复造轮子,而是从 StackOverflow 复制粘贴现成的脚本拿来即用。

虽然前面我提到了 Fish Shell 的几个缺点,但是我还是会推荐你去用一下,因为切换 Shell 工具十分简单,所以很值得你去尝试一下。特别是当你懒得自己去配置 Shell,并希望通过最少的配置就能获得很好的使用效果的时候,那就更不要错过它了。

Fish插件

你可以自己添加相关插件来扩展 Fish Shell 的功能。最简单的安装插件的方法就是使用插件管理工具,比如 Fisher、Oh My Fish 或者 fundle。现在,我使用的插件管理工具是 Fisher,我用它安装管理了三个插件:

  1. franciscolourenco/done ——在长时间运行的脚本完成后发送通知。
  2. evanlucas/fish-kubectl-completions——1个自动补全 kubectl(Kubernetes command line tool) 命令的插件。
  3. fzf——将 fzf 工具与 Fish 集成在一起的插件。

过去,我有使用很多的插件(比如 rbenv、pyenv、nodenv、fzf、z),但是我改用其他工具以避免影响我的 Shell 的运行速度(这是我过去使用 Z shell 所得到的一个教训)。

下载地址:https://fishshell.com/

2、Starship

如果必须要从本篇文章中选择一个我最喜欢的终端工具——那非 Starship 莫属。Starship 可以适用于任何 Shell。你只需要安装它,然后在相应的配置文件.bashrc/.zshrc/config.fish添加一行配置,剩下的工作交给它来完成就好了。
image.png

它可以做到:

  • 根据你是否在代码仓库中添加了新文件、是否修改了文件、是否暂存了文件等情况,用相应的符号表示 git 仓库的状态。
  • 根据你所在的 Python 项目目录,展示 Python 的版本号,这也适用于 Go/Node/Rust/Elm 等其他编程语言环境。
  • 展示上一个命令执行所用的时间,指令运行时间必须在毫秒级别。
  • 如果上一个命令执行失败,会展示相应的错误提示符。

image.png

还有不计其数的其他信息可以展示。但是,它能以更加友好的形式智能地给你呈现!比如,如果你不在 git 存储库中,它将隐藏 git 信息。如果您不在 Python 项目中,则不会有 Python 版本信息,因为显示它没有什么意义。它永远不会给你展示多余信息,始终保持终端的美观,优雅和简约。

Starship 的运行速度怎么样呢?它是用 Rust 编写的,尽管功能如此之多,但仍然比我以前使用的所有提示工具都要快!我对提示信息非常洁癖,因此我经常破解自己的版本。我会根据现有的提示找到对应的功能代码,然后将其粘组合在一起,以确保 Starship 只有我需要的功能以保持其快速运行。“外部工具永远无法比我精心制作的提示工具更快!” 这就是我对 Starship 持怀疑态度的原因。

下载地址:https://starship.rs/

3、z

“z”可以让你快速地在文件目录之间跳转。它会记住你访问的历史文件夹,经过短暂的学习后,你就可以使用z path_of_the_folder_name命令在目录之间跳转了。

比如,如果我经常访问 ~/work/src/projects,我只需要运行 z pro ,就可以立马跳转到那里。z 的原理参考了 frecency 算法——一个基于统计 frequency 和 recency 进行分析的算法。如果它存储了你不想使用的路径文件夹,你随时可以手动将其删除。它提高了我在常用的不同文件路径之间频繁切换的效率,帮我节省了键盘击键次数以及大量的路径记忆。

下载地址:https://github.com/rupa/z

4、fzf

fzf— fuzzy finder,即模糊查找器。它是一种通用工具,可让你使用模糊搜索来查找文件、历史命令、进程、git 提交等。你键入一些字母,它会尝试匹配结果列表中任何位置的字母。输入的字母越多,结果也就越准确。你可能在其他的代码编辑器中有过这种类型的搜索使用体验——当你想打开某个文件时,只键入文件名的一部分而不用输入完整路径就能进行查找——这就是模糊搜索。

image.png

我通过 fish fzf 插件插件使用它,因此我可以搜索命令历史记录或快速打开文件。这是可以每天为我节省不少时间的一个非常棒的工具。

https://github.com/jethrokuan...

下载地址:https://github.com/junegunn/fzf

5、fd

上面动图是 find 命令(左)和 fd 命令(右)的使用对比。

类似于系统自带的 find 命令,但使用起来更简单,查找速度更快,并且具有良好的默认设置。

不管你想找到一个名为“invoice”的文件,但是不确定文件的扩展名,还是查找一个存放所有 invoice 的目录,而不单是一个文件。你可以撸起袖子,开始为 find 命令编写那些复杂的正则表达式,也可以直接命令行运行 fd invoice。反正对我来说,我只选择最简单的那个。

默认情况下,fd 会忽略隐藏的以及在.gitignore列出的文件和目录。大多数时候,这也是我们想要的,但是在极少数特殊情况下,如果需要禁用此功能时,我会给该命令设置一个别名:fda='fd -IH'

你会发现,fd 命令输出的颜色配置很漂亮,而且根据基准测试(上述 GIF),它的执行速度甚至比find 命令的还要快。

下载地址:https://github.com/sharkdp/fd

6、ripgrep

上图为 grep(左)与 rg(右)命令执行时的对比。

与上述fd指令类似,ripgrepgrep命令的替代方法, 不过ripgrep的执行速度更快,而且具有健全的默认配置以及丰富的彩色输出。

它同样会跳过被.gitignore忽略以及隐藏的文件,因此如果有特殊需要,我们可以设置指令别名:rga ='rg -uuu'。它会禁用所有智能筛选,并使ripgrep的表现与标准的 grep 指令一致。

下载地址:https://github.com/BurntSushi...

7、htop 和 glances

在 Linux 或 Mac 上显示进程运行状态信息最常用工具是我们熟悉的top,它是每位系统管理员的好帮手。而且,即使是像我一样主要从事网络开发,查看计算机的运行状况也很有用。你知道,只是看一下当前到底是 Docker 进程还是 Chrome 进程吃掉了你所有的 RAM,应该如何做吗?
image.png

htop工具是top工具的绝佳替代品。

top工具是非常基础的监控工具,提供的功能有限,因此很多人转去使用 htop。htop比起top,优势很明显——除了功能更加完善以外,它的色彩搭配也很丰富,整体上使用起来更加友好。

image.png

借助 glances,还可以让你一目了然地快速了解系统当前状态。

glances 是htop的补充工具。除了列出所有进程及其 CPU 和内存使用情况之外,它还可以显示有关系统的其他信息,比如:

  • 网络及磁盘使用情况
  • 文件系统已使用的空间和总空间
  • 来自不同传感器(例如电池)的数据
  • 以及最近消耗过多资源的进程列表

我选择使用htop来筛选和终止进程,因为对我来讲,效率提高了不少,我也使用 glances可以快速浏览一下计算机的运行状况。它提供 API 接口、Web UI 以及支持各种导出格式,因此你可以将系统监视提高到一个新 Level。因此我在这里强烈推荐一波!

htop 下载地址:https://hisham.hm/htop/

glances 下载地址:

https://nicolargo.github.io/g...

8、virtualenv 和 virtualfish

Virtualenv 是用于在 Python 中创建虚拟环境的工具(比起内置的venv模块,我更喜欢 Virtualenv)。

image.png

VirtualFish 是 Fish Shell 的虚拟环境管理器(如果你不使用 Fish Shell,请查看 virtualenvwrapper)。它提供了许多命令来执行快速创建、列出或删除虚拟环境等操作。

virtualenv 下载地址:

https://pypi.org/project/virt...

virtualfish 下载地址:

https://github.com/justinmaye...

9、pyenv、nodenv 和 rbenv

pyenv 可以轻松实现 Python 版本的切换。

image.png

Pyenv、nodenv 和 rubyenv 是用于管理计算机上不同版本的 Python、Node 和 Ruby 的工具。

假设你要在计算机上安装两个版本的 Python。比如,你正在从事两个不同的 Python 项目,或者因为特殊情况仍然需要使用 Python2。不同 Python 版本在电脑上管理很复杂。你需要确保不同的项目具有正确版本的软件依赖包。如果你不小心的话,很容易弄乱这种脆弱的配置并被其他软件包使用的二进制文件所覆盖。

该工具为版本管理提供了很多帮助,并将这一噩梦变得易于管理。它可以全局或“按文件夹”切换 Python 版本,而且每个版本都是相互隔离的。

我最近找到了一种名为 asdf 的工具,该工具可以将 pyenv、nodenv、rbenv 及其他 env 进行统一管理。它提供了几乎所有编程语言的版本管理,下次我需要为编程语言设置版本管理器时,一定会尝试使用一下。

pyenv 下载地址:https://github.com/pyenv/pyenv

nodenv 下载地址:https://github.com/nodenv/nodenv

rbenv 下载地址:https://github.com/rbenv/rbenv

10、pipx

Virtualenv 解决了 Python 程序包管理中的许多问题,但是还有一个方案可以解决。如果我想在全局环境下安装 Python 软件包(比如它是一个独立的工具,正如前面提到的glances 工具),那么我会遇到全局安装带来的问题。在虚拟环境之外安装软件包不是一个好主意,将来可能会导致意想不到的问题。另一方面,如果我决定使用虚拟环境,那么每次我要运行程序时都需要激活该虚拟环境。这也不是最方便的解决方案。

image.png

事实证明,pipx工具可以解决上面提到的问题。它将 Python 软件依赖包安装到单独的环境中(因此不会存在依赖项冲突的问题)。与此同时,这些工具提供的 CLI 命令在全局环境内也可用。因此,我无需激活任何环境——pipx会帮我完成这个操作!

如果你想了解有关 Python 工具的更多信息并想了解如何使用它们,我为 PyCon 2020 会议制作了一个名为“现代 Python 开发人员工具包”的视频。

这是一个长达两个小时的视频教程,内容涉及如何设置 Python 开发环境,要使用的工具以及如何从头开始制作 TODO 应用程序(包括测试和文档)。你可以在 YouTube 上进行观看。

https://www.youtube.com/watch...

pipx 下载地址:

https://github.com/pipxprojec...

11、ctop 和 lazydocker

ctop 的实时监控示例

当你使用 Docker 并对其监控时,这两个工具会很有帮助。ctop是 Docker 容器的顶级接口。它可以为你:

  • 展示正在运行和已停止的容器列表。
  • 展示统计信息,例如内存、CPU 使用率以及针对每个容器的其他详细信息窗口(例如绑定的端口等其他信息)。
  • 提供快捷菜单,方便快速停止、杀掉指定容器进程或显示给定容器的日志。

这比你尝试从docker ps命令中找出所有这些信息要方便多了。

lazydocker是我最喜欢的 Docker 工具

如果你认为ctop很酷,请你尝试使用 lazydocker 后再做决定!它是一个非常成熟的拥有终端 UI 界面的工具,提供了非常丰富的功能用于管理 Docker。这是我最喜欢的 Docker 管理工具!

ctop 下载地址:https://github.com/bcicen/ctop

lazydocker 下载地址:

https://github.com/jesseduffi...

低频 CLI 工具推荐

除了几乎每天都在使用的工具以外,我多年来还收集了一些给力的工具,这些工具对于一些特定需求非常好用。比如有的终端工具可以用来将终端操作记录成 GIF(并且可以让你在 GIF 中暂停和复制文本!),还有的终端工具可以用于列出目录结构、连接数据库等,下面我会一一介绍。

12、Homebrew

image.png

如果你使用的是 Mac,那我就无需再介绍 Homebrew 了。它是 macOS 上被业界普遍认可的软件包管理器。对了,它还有一个称为 Cakebrew 的 GUI 版本软件,如果感兴趣你可以尝试一下。

下载地址:https://brew.sh/

13、asciinema

image.png

asciinema是可用于记录终端会话的工具。但是,与录制 GIF 不同,它可以让用户选择并复制这些录制中的代码!

这对于录制编码教程来说十分好用。你应该遇到那种尴尬的情况——当你准备跟着视频教程在终端中敲巨长的命令,但是讲师并为你提供这个代码段,你不得不花费很长的时间去整理这些冗长的命令。asciinema录制的内容,支持直接复制,十分给力。

下载地址:https://asciinema.org/

14、colordiff 和 diff-so-fancy

image.png

我很少在终端中使用diff操作(比较两个文件之间的差异),但是如果你需要执行这个操作,可以放弃使用diff命令,而是使用 colordiffcolordiff输出可以高亮显示,因此在查看文件差异内容时要方便得多,而不是在diff命令输出内容下,费力地查看所有的“ <”和“>”符号来对比文件差异。

如果你觉得还不够,那么我推荐给你 diff-so-fancy。它是比colordiff更友好的一个差异对比工具。

image.png

它通过以下方式进一步改善了文件内容差异展示的外观:

  • 突出显示每一行中差异的单词,而不是整行
  • 简化变更文件的标题
  • 去除 + 和 - 符号(颜色差异展示就够了)
  • 清楚地指出新行和删除的空行

colordiff 下载地址:https://www.colordiff.org/

diff-so-fancy 下载地址:https://github.com/so-fancy/d...

15、tree

你可以通过brew install tree安装该工具。如果要查看给定目录的内容,那么 tree 是执行此操作的必备工具。它能以漂亮的树状结构显示所有子目录及文件:

$ tree .
.
├── recovery.md
├── README.md
├── archive
├── automator
│   ├── Open Iterm2.workflow
│   │   └── Contents
│   │       ├── Info.plist
│   │       ├── QuickLook
│   │       │   └── Thumbnail.png
│   │       └── document.wflow
│   └── Start Screen Saver.workflow
├── brew-cask.sh

16、bat

image.png

类似于在终端中常用的用于显示文件内容的cat命令,但是bat效果更佳。

它增加了语法高亮显示,git gutter 标记(如果适用),自动分页(如果文件很大)等功能,并且使得输出的内容阅读起来更加友好。

bat 下载地址:https://github.com/sharkdp/bat

17、httpie

如果你需要发送一些 HTTP 请求,但发现使用curl不够直观,那么请尝试一下httpie。这是一款非常好用的curl替代工具。合理的默认配置以及简洁的语法使它更易于使用,命令返回也是彩色输出,甚至支持为不同类型的身份验证安装相应的插件。

httpie 下载地址:https://httpie.org/

18、tldr

简化版的命令帮助手册。“man pages” 包含了 Linux 软件的手册,这些手册解释了如何使用给定的命令。你可以尝试运行man catman grep来查看相关命令的帮助手册。它们描述的非常详细,有时可能难以掌握。因此,tldr社区的目的,就是将每个命令的帮助手册进行简化,方便用户查阅。

tldr适用于几乎所有的受欢迎的软件。正如我提到的,这是社区的努力和功劳,虽然不太可能包含所有的软件的简化帮助手册。但是当某个帮助手册被纳入管理并起作用时,它提供的信息通常就是你要查找的内容。

比如,如果你要创建一些文件的 gzip 压缩存档,man tar可以为你提供可能的参数选择。而tldr tar会列出一些我们常见的示例——如图所示,第二个示例正是你要执行的操作:

image.png

“man pages”展示的信息太全面了,但是很多时候使用tldr可以更快地帮你找到特定信息,这才是用户真正想要的。

tldr 下载地址:https://tldr.sh/

19、exa

image.png

exals命令的一个可替代方案。

它色彩艳丽,还可以显示 git 状态等其他信息,自动将文件大小转换为方便人们阅读的单位,并且所有这些都保持与ls几乎相同的执行速度。虽然我很喜欢这个工具并推荐给你们,但由于某种原因,我仍然坚持使用 ls。

exa 下载地址:https://the.exa.website/

20、litecli 和 pgcli

这是我首选的 SQLite 和 PostgreSQL CLI 的解决方案。借助自动提示和语法突出显示,它们比默认的sqlite3psql工具要好用很多。

litecli 下载地址:https://litecli.com/

pgcli 下载地址:https://www.pgcli.com/

21、mas

image.png

mas是一个用于从 App Store 安装软件的 CLI 工具。我目前为止,我仅仅使用过它一次——设置我的 Macbook 电脑软件。将来,我也将使用它来设置我的下一台 Macbook。mas可让你自动在 macOS 中安装软件。它解放了你大量的点击操作。而且,鉴于你正在阅读这篇有关 CLI 工具的文章,所以我大胆地认为,大家都和我一样,不喜欢无聊的单击操作。

我在“灾难修复”脚本中保留了从 App Store 安装的应用程序列表。如果我的电脑真的发生了什么意外情况,我希望能够以最小的代价重新安装所有内容。

mas 下载地址:https://github.com/mas-cli/mas

22、ncdu

image.png

这是在终端进行磁盘分析时使用的工具,它使用起来简单快捷。当我需要释放一些硬盘空间时,会默认使用这款工具。

ncdu 下载地址:https://dev.yorhel.nl/ncdu

23、总结

以上推荐工具清单确实很长,但是我希望有一些工具真的能够带给你方便,提高你的生产力。fdripgrephttpie等工具可能是你以前熟悉的工具的改进版本。这些工具的改进版本除了更易于使用之外,它们还提供更友好的输出,执行速度甚至更快。所以,我们要多多尝试并接受新的事物,不要仅仅因为大家都在使用旧工具而只局限在旧工具的使用上。事物都是在向前发展的,穷则变,变则通,通则久。大家一起共勉。

image

查看原文

赞 7 收藏 6 评论 0

猫之良品 回答了问题 · 2020-10-15

电商系统,随着业务越来越多,订单表字段会很多,请问表该怎么设计比较好?

现在成熟的开源电商系统已有不少了,为什么要自己设计?
参考一下magento,它用的是EAV模型,这是一套可以自由给数据对象扩展属性的模型,magento对产品与订单数据是可以随时追加属性的。就算你不用magento,你也可以引入magento core来使用EAV模型。自己写代码实现肯定是不够成熟的,以后只会问题多多。

不是小看EAV模型,订单的属性扩展并不是一个调整表结构就能满足的问题,要考虑的东西是很多的。例如订单可扩展属性要考虑到各种数据类型;是否支持多值;是否有多语言多站点的分层分级;是否要对各种不同的管理角色区别管理,例如跟单员可以只更新订单某几个属性;每个属性的更新是否有版本控制与记录,例如某个退单员什么时候改过这个属性,要撤回修改怎么办?

关注 5 回答 3

猫之良品 回答了问题 · 2020-10-15

使用python+selenium模拟手工操作网页,本地运行正常,服务器上面报错找不到元素

selenium是需要有真正的浏览器的,你的服务器是LINUX吧,那如果没有安装图形界面就没有浏览器。

关注 2 回答 1

猫之良品 回答了问题 · 2020-10-15

PHP程序员需要的数学知识有哪些?

一般九年义务教育中的数学知识就够用了,PHP很少会涉及到复杂的数学运算。就算真的遇到了,那就现学现用就好。

关注 2 回答 2

猫之良品 回答了问题 · 2020-10-15

PHP对象复制奇怪问题

浅复制就是引用赋值,用C语言解释就相当于指针,变量的值其实是对象的内存地址而非对象本身。

// head指向了Container对象的内存地址
$this->head = new Container();
// tail指向了head所指向的Container对象的内存地址,所以还是那个Container对象,你误以为tail指向的是head的内存地址,但是head是引用变量
$this->tail = $this->head;

在正式的编码中应该避免重复给成员赋引用值,一个成员应该始终指向同一个对象,也要避免多个成员变量指向同一个引用值。

关注 4 回答 2

认证与成就

  • 获得 172 次点赞
  • 获得 48 枚徽章 获得 3 枚金徽章, 获得 14 枚银徽章, 获得 31 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2013-09-08
个人主页被 3.3k 人浏览