❤️💕💕CS自学指南,大学教育无论是深度还是广度都没有办法支撑我们的职业素养,这个板块算是自己在CS学习中额外补充和记录的。个人博客:http://nsddd.top
[TOC]
😍 对于一个几乎每天都在用命令行的人来说,一个舒服的命令行是多麽的重要!
我们常用的有cd
和ls
,甚至在Windows上面,cmd
命令行甚至都没有ls
,而是让我们很别扭的cmd
,这能忍吗?
或许我们可以start powershell
选择是powershell
,不得不说powershell
是一个非常好的工具
哇,虽然背景还可以,但是还是辨识度不高,或许我们还可以
start sh
到git提供的命令行试一试:
💡 依旧不符合我的预期,所以我要~ $$ 通通换掉~~~ $$
打开 PowerShell
终端(5.1 或更高版本)并运行:
> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time
> irm get.scoop.sh | iex
Scoop 从命令行以最小的摩擦安装您熟悉和喜爱的程序。它:
- 消除权限弹出窗口
- 隐藏 GUI 向导式安装程序
- 防止安装大量程序造成 PATH 污染
- 避免安装和卸载程序的意外副作用
- 自动查找并安装依赖项
- 自行执行所有额外的设置步骤以获得工作程序
> dir ~\scoop
Directory: C:\Users\User\scoop
Mode LastWriteTime Length Name
---- ------------- ------ ----
da--- 02-04-2022 16:06 apps
d---- 30-03-2022 13:22 buckets
d---- 02-04-2022 16:06 cache
da--- 30-03-2022 21:32 persist
da--- 02-04-2022 16:06 shims
d---- 20-02-2022 01:22 workspace
Scoop 以可移植的方式下载和管理软件包,将它们整齐地隔离在. 它不会在其家之外安装文件,您可以将 Scoop 安装在您喜欢的任何地方。 ~\scoop
对于终端应用程序,
Scoop
在文件夹中创建shims,一种命令行快捷方式,可在 PATH 中访问。对于图形应用程序,Scoop
在名为“Scoop Apps”的专用开始菜单文件夹中创建程序快捷方式。这样,软件包总是被完全卸载,您可以确定您的 PATH 和开始菜单中当前有哪些工具。~\scoop\shims
💡简单的一个案例如下:
exa 是ls
命令的替代品,可以彩色输出目录内容,更容易辨识。
exa
ls
是Unix 和 Linux 操作系统附带的古老文件列表命令行程序的现代替代品,赋予它更多功能和更好的默认设置。它使用颜色来区分文件类型和元数据。它了解符号链接、扩展属性和 Git。它体积小、速度快,而且只有一个二进制文件。Linux下源码安装命令:
ubuntu20+版本可以直接:
apt install exa
$ exa --long --git
- -1 , --oneline : 每行显示一个条目
- -G , --grid:将条目显示为网格(默认)
- -l , --long : 显示扩展细节和属性
- -R , --recurse : 递归到目录
- -T , --tree : 作为树递归到目录
- -x , --across:对网格进行排序,而不是向下排序
- -F , --classify : 按文件名显示类型指示符
- --colo[u]r : 何时使用终端颜色
- --colo[u]r-scale : 突出显示文件大小的级别
- --icons : 显示图标
- --no-icons:不显示图标(总是覆盖 --icons)
broot 可以看作增强版的ls
替代品,实际是一个终端里面的文件管理器。
使用时,可以先列出当前目录的文件信息。
$ br -sdph
上面命令中,📜 对上面的解释:
-s
:显示文件体积-d
:显示文件时间-p
:显示文件权限-h
:显示隐藏文件
可以看到,它默认以树状结构,展开子目录。
然后,在这个界面中,可以完成各种文件操作。
- 搜索:输入搜索词
- 复制:输入
:cp <复制后的文件名>
- 删除:输入
:rm
- 改名:输入
:mv <新文件名>
- 退出:输入
:q
zoxide 是 cd 命令的替代品,用来切换目录。
它的用法与cd
完全一样,进入目录/tmp
就是下面的命令。
$ z /tmp
它的特色是部分匹配,可以只写路径的一部分,它自动找到最经常使用的匹配项。
比如,你经常用它进入目录/tmp
,那么以后只要输入z t
,它就会自动将t
匹配为/tmp
,从而进入该目录。
$ z t
bat 是cat
命令的替代品,输出文本文件的内容,并且带有cat
所没有的代码高亮和行号。
$ bat README.md
如果浏览的是 JSON 文件,还可以使用 fx 或者 jq。
$ fx data.json
如果浏览的是二进制文件,使用 hexyl。
$ hexyl example.jpg
💡 你还在用find嘛,是的,我也在用,但是我之前也见过fd
,这个更优秀的工具~
「 fd是一种简单ㄡ快速和用户友好的find替代方案.」
fd 是find
命令的替代品,用于文件名搜索。
它的用法比find
更符合直觉。下面例子是搜索目录/tmp
里面(包括子目录),所有含有dog
的文件名。
- 直观的语法:
fd PATTERN
而不是find -iname '*PATTERN*'
. - 正则表达式(默认)和基于全局的模式。
- 由于并行目录遍历,速度非常快。
- 使用颜色突出显示不同的文件类型(与 相同
ls
)。 - 支持并行命令执行
- 智能大小写:默认情况下搜索不区分大小写。如果模式包含大写字符*,它将切换为区分大小写。
- 默认情况下忽略隐藏的目录和文件。
.gitignore
默认情况下,忽略您的模式。- 命令名称比 :-)短50% * 。
find
# find 的写法 $ find /tmp -iname '*dog*' # fd 的写法 $ fd dog /tmp
上面两条命令一比较,就会发现fd
简单很多。
fd
内部采用正则搜索,如果想使用模糊搜索,比如找出包含三个字符d
、o
、g
的文件名,则需要另外安装fzf。
$ find . -type f | fzf
执行上面命令以后,再输入dog
就可以了。
Scoop 和 Chocolatey 都是 Windows 下的包管理系统,其具体使用方法都可参考其官网。
推荐使用scoop,一个速度很快的~
# 通过 Scoop 安装
$ scoop install fd
# 通过 Chocolatey 安装
$ choco install fd
ripgrep 是grep
命令的替代品,用来搜索文件内容。
它跟grep
的用法类似。下面例子是搜索当前目录里面,所有内容包含字符串foo
的 Markdown 文件。
# grep 的写法 $ grep foo *.md # ripgrep 的写法 $ rg foo *.md
McFly 是ctrl-r
的替代品,用来搜索 Shell 的操作历史。
安装以后,只要按下ctrl-r
,就会出现一个更好用的搜索界面。
McFly 将您的默认ctrl-r
shell 历史搜索替换为智能搜索引擎,该引擎会考虑您的工作目录和最近执行的命令的上下文。McFly 的建议通过小型神经网络实时优先处理。
TL;DR:升级后的ctrl-r
历史结果对你现在正在做的事情有意义。
- 重新绑定
ctrl-r
以使用小型神经网络优先启动全屏反向历史搜索。 - 增强您的 shell 历史记录以跟踪 SQLite 数据库中的命令退出状态、时间戳和执行目录。
- 维护您的正常 shell 历史文件,以便您可以随时停止使用 McFly。
- Unicode 支持贯穿始终。
- 包括从 McFly 数据库和 shell 历史文件中清除任何历史项目的简单操作。
- 设计为将来可扩展用于其他外壳。
- 用 Rust 编写,所以它既快速又安全。
- 您可以在搜索时键入
%
以匹配任意数量的字符。
choose 是cut
命令的替代品,用来选中指定的栏位。
它的优势主要是语法更简单,比如输出文件的第一列。
# cut 的写法 $ cat data.txt | cut -d " " -f 1 # or $ cut -d " " -f 1 data.txt # choose 的写法 $ cat data.txt | choose 0 # or $ choose 0 -i data.txt
更多例子看下图。
duf 是df
命令的替代品,用来显示磁盘占用情况。
$ duf
它是彩色的表格输出,更容易查看。
ncdu 是du
命令的替代品,用来显示每个目录占用的大小。
$ ncdu
你还可以上下移动,选中指定目录查看。
httpie 是 curl 的替代品,用来发出 HTTP 请求。
它的特点是语法更简单,并且服务器的返回内容会格式化高亮显示。
下面是发出 PUT 请求的例子。
$ curl -X PUT -d hello=world example.com
$ http PUT example.com hello=world
dog 是dig
命令的替代品,用来发出 DNS 查询。它的用法比dig
简单多了。
$ dog example.net
$ dog example.net A NS MX