PowerShell

Windows 下常用的 shell:PowerShell

在 Microsoft Store 上安装 Windows Terminal 和 PowerShell

推荐下载 Nerd FontsMeslo 并配置终端字体为 MesloLGM NF

在 Microsoft Store 上安装 oh-my-posh

可以在官方网站上选择喜欢的主题,或者使用 Get-PoshThemes 命令直接在命令行预览,然后打开 $PROFILE 配置:

#------------------------------- Import Modules BEGIN -------------------------------
# 引入 posh-git
Import-Module posh-git

# 引入 ps-read-line
Import-Module PSReadLine

# 设置 PowerShell 主题 (其中xxx..json就是主题的配置,oh-my-posh包含了多种主题配置,可在官网浏览https://ohmyposh.dev/docs/themes)
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\capr4n.omp.json" | Invoke-Expression
#------------------------------- Import Modules END -------------------------------


#------------------------------- Set Hot-keys BEGIN -------------------------------
# 设置预测文本来源为历史记录
Set-PSReadLineOption -PredictionSource History

# 每次回溯输入历史,光标定位于输入内容末尾
Set-PSReadLineOption -HistorySearchCursorMovesToEnd

# 设置 Tab 为菜单补全和 Intellisense
Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete

# 设置 Ctrl+d 为退出 PowerShell
Set-PSReadlineKeyHandler -Key "Ctrl+d" -Function ViExit

# 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo

# 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

# 设置向下键为前向搜索历史纪录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
#------------------------------- Set Hot-keys END -------------------------------


#------------------------------- Functions BEGIN -------------------------------
# Python 直接执行
$env:PATHEXT += ";.py"

# 更新系统组件
function Update-Packages {
# update pip
Write-Host "Step 1: 更新 pip" -ForegroundColor Magenta -BackgroundColor Cyan
$a = pip list --outdated
$num_package = $a.Length - 2
for ($i = 0; $i -lt $num_package; $i++) {
$tmp = ($a[2 + $i].Split(" "))[0]
pip install -U $tmp
}

# update TeX Live
$CurrentYear = Get-Date -Format yyyy
Write-Host "Step 2: 更新 TeX Live" $CurrentYear -ForegroundColor Magenta -BackgroundColor Cyan
tlmgr update --self
tlmgr update --all

# update Chocolotey
Write-Host "Step 3: 更新 Chocolatey" -ForegroundColor Magenta -BackgroundColor Cyan
choco outdated
}
#------------------------------- Functions END -------------------------------


#------------------------------- Set Alias BEGIN -------------------------------

# 2. 更新系统 os-update
Set-Alias -Name os-update -Value Update-Packages

# 3. 查看目录 ls & ll
function ListDirectory {
(Get-ChildItem).Name
Write-Host("")
}
# Set-Alias -Name ls -Value ListDirectory
Set-Alias -Name ll -Value Get-ChildItem

# 4. 打开当前工作目录
function OpenCurrentFolder {
param
(
# 输入要打开的路径
# 用法示例:open C:\
# 默认路径:当前工作文件夹
$Path = '.'
)
Invoke-Item $Path
}
Set-Alias -Name open -Value OpenCurrentFolder
#------------------------------- Set Alias END -------------------------------





#------------------------------- Set Network BEGIN -------------------------------
# 1. 获取所有 Network Interface
function Get-AllNic {
Get-NetAdapter | Sort-Object -Property MacAddress
}
Set-Alias -Name getnic -Value Get-AllNic

# 2. 获取 IPv4 关键路由
function Get-IPv4Routes {
Get-NetRoute -AddressFamily IPv4 | Where-Object -FilterScript {$_.NextHop -ne '0.0.0.0'}
}
Set-Alias -Name getip -Value Get-IPv4Routes

# 3. 获取 IPv6 关键路由
function Get-IPv6Routes {
Get-NetRoute -AddressFamily IPv6 | Where-Object -FilterScript {$_.NextHop -ne '::'}
}
Set-Alias -Name getip6 -Value Get-IPv6Routes
#------------------------------- Set Network END -------------------------------

当然,Windows Terminal 中的配置也可以自行修改,如配置字体颜色,背景图片等

如果使用 vscode,也可以添加相应的 shell 并设置 defaultProfile 为 powershell

命令行命令

Linux 自带命令

cd 切换目录

  • 绝对地址:/home/
  • 相对自制:./path

现代的代替有 autojump

pwd 显示当前目录的绝对路径

ls 默认查看当前目录下的文件和子目录

  • / 显示根目录下的文件和子目录
  • -a 显示隐藏的文件和目录
  • -l 列出包括文件的属性和权限等
  • -R 递归地列出目录,即把子目录也列出来
  • -h 以人类可读的形式列出,即 kB 等而不是 bit 的形式

现代的代替有 exa

mkdir 创建目录

rmdir 删除目录

rm 删除文件或目录

  • -rf 删除非空目录

cp 源文件 目标文件:将源文件复制为目标文件

mv 移动文件,也可以用作文件重命名

sudo 以超级用户的身份执行命令

head 查看文件前 n 行,tail 查看文件后 n 行

which 查找命令所在位置

chmod 修改文件的权限

  • +x:增加“执行”权限

ln 创建文件和目录的链接:

  • 硬链接:基于文件节点创建的链接
  • 软连接:相当于 Windows 下的“快捷方式”

echo 显示文本或变量的值

tar 打包压缩/解包解压缩

  • -c 创建包
  • -x 解包
  • -f 打包/解包为文件
  • -v 处理时显示信息

man:显示某命令的使用方法,或者使用 命令 --help

现代的替代有 tldr

cat 命令用于查看文件内容,通常通过管道与 moreless 一起使用,从而一页页查看数据:cat 文件名

现代的替代有 bat

find 支持查找文件,参数非常多,现代化的替代品为 fd

grep 可以用于匹配输出中的字符串

  • -A 5:显示匹配位置后面的 5 行
  • -B 3:显示匹配位置前面的 3 行
  • -C 2 :显示前后各 2 行
  • -s:区分大小写
  • -i:不区分大小写
  • ^a:以 a 开头的行
  • z$:以 z 结尾的行
  • -n:显示行号
  • -r:递归搜索关键字
  • -c:匹配某关键字的次数

touch 如果文件不存在,则创建文件;如果存在,则更新文件最后修改时间

现代命令

autojump 可以自动跳转常用的目录

  • j foo:跳转到包括 foo 的目录
  • jc bar:跳转到当前目录的子目录

eza-community/eza: A modern, maintained replacement for ls (github.com) 默认彩色输出,默认配置更适用于人类,只说不同的地方

  • --icons:包括图标
  • --tree --level={{3}}:3 层的树状目录

如果浏览的是二进制文件,可以使用 hexyl

如果浏览的是 json 文件,可以使用 jq

TLDR:Too Long; Don't Read,即“太长不看”,故其优点在于简洁,使用:tldr 命令

bat:相比 cat 支持了语法高亮

  • -A:显示不可打印的字符

fd 比 find 更快,更友好

  • fd netfl:直接搜索文件名中包括 netfl 的文件
  • 支持正则表达式
  • fd passwd /etc:第二个参数为搜索的目录
  • fd:没有参数则表示递归地列出当前目录所有文件
  • -e md 查找后缀名为 .md 的所有文件
  • -g libc.so:查找完全匹配 libc.so 名字的文件
  • -x--exec:对所有搜索出来的文件实现外部程序
  • --hidden或-H --no-ignore或-I:查找隐藏文件和忽略文件

fzf 支持模糊搜索

Ncdu 用来代替 du,可以分析磁盘占用,上下键移动,Enter 键进入,d 键删除,q 键退出

htoptop 的替代品,以更加交互和用户友好的方式监控资源利用率

procsps 命令的替代品

  • –-tree 以树状图显示

ripgrepgrep 的替代品

Bash

全名为 Bourne-Again Shell,Linux 和 Unix 的默认 shell,古老且难用,但由于其历史悠久,故还有很多人在使用。

脚本通常以 shebang 开头,指定该脚本的解释器,如 #!/usr/bin/bash,即表示该脚本需要调用 /usr/bin/bash 运行

sh hello.sh:运行脚本 hello.sh;或者将该脚本权限设置为可执行的,然后直接 ./hello.sh 运行

变量是没有类型的,其赋值语句不能有空格:name='world'

使用的时候必须带上 $echo $name

特别的,$? 保存的是上个命令的返回值,0 表示成功退出,其余情况表示出现了异常

特殊的位置参数可以使用传递给脚本的参数,$0 是脚本名,$1 是第一个参数,$# 是传递给脚本的参数个数

由于脚本不考虑类型,所以算术必须这么写:let x=1+1

test 语句:[ 0 -eq 0 ]; echo $?

if 语句:

if TEST-COMMANDS; then
CONSEQUENT-COMMANDS
elif MORE-TEST-COMMANDS; then
MORE-CONSEQUENT-COMMANDS
else
ALTERNATE-CONSEQUENT-COMMANDS;
fi

while 循环:

while TEST-COMMANDS; do
CONSEQUENT-COMMANDS
done

函数定义时不需要指明参数:

name_of_function() {
FUNCTION_BODY
}

调用时直接传入参数:

name_of_function $arg1 $arg2 ... $argN

Zsh

安装与配置

ZSH 是一个兼容 bash 的 shell

安装:sudo apt-get install zsh

查看已经安装的 shell:cat /etc/shells

设置为默认 shell:chsh -s /bin/zsh

使用 Oh My Zsh 配置:

安装:sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

Themes 可以查看内置主题,但这里推荐 powerlevel10k

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

然后在 .zshrc 中设置 ZSH_THEME="powerlevel10k/powerlevel10k"

推荐插件

zsh-syntax-highlighting 可以高亮语法

zsh-autosuggestions 支持自动补全