由 Linux 转移到 windows 环境折腾小记

以前项目都是部署到Centos的Linux环境下的,所以对部署在windows server上的一些不是很熟。
给工作带来了一些不便,总想用linux那套命令行工具,于是就有了该篇折腾记。

该篇主要目的实际就是折腾个轻便的轻量的,能尽量用windows自带的工具实现查windows server 上的tomcat log。

实际不够轻量的各种ssh shell工具也都可以,只是登录的是linux的话一点事的都没有。
登录的是windows server的话,各种麻烦就来了,首当其冲就是中文乱码问题。然后就是各种直接看日志,搜索查找内容命令行都是古老的cmd 下的命令。

大家用Linux的一般会用到bash 或Mac下的zsh ,和下边的一些命令行工具。那么windows下目前最强大的就是powershell了。
默认win10系统的powershell 是5.1版本的。5.1和7.2.1差别很大,参考https://docs.microsoft.com/zh-cn/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.2

一、 powershell 7.2

包管理器 winget scoop choco

https://www.cnblogs.com/baiqiantao/p/8891301.html
大家用Linux会用到yum 或apt 包管理命令,Mac下就是homebrew包管理命令,实际上windows上也有了以上三个包管理器了。

经过各种测试,折腾,建议winget首选,毕竟微软自家的,scoop次选。

scoop提供的类linux可在win环境下用的包还是很多的,常见的有如下:

🦄  scoop list
Installed apps:

  7zip 21.07 [main]
  busybox 4487-gd239d2d52 [main]
  cacert 2022-02-01 [main]
  curl 7.81.0 [main]
  gcc 11.2.0 [main]
  jq 1.6 [main]
  neovim 0.6.1 [main]
  sudo 0.2020.01.26 [main]

curl wget(wget有独立的包,busybox也包含wget)等都是常用的。
neovim 就是linux界的编辑神器了,完全释放你的鼠标,一顿“啪 啪 啪”敲键盘。。。

choco 不建议。以前接触过,就是安装nodejs依赖工具,有个命令行工具

这玩意实际就是自动给你安装上choco,然后安装扩展工具。但这个choco安装什么都需要管理员权限的powershell,不太喜欢,后续用它安装一些包也有一些问题。

1、安装powershell最新版

1.1 选用winget 方式来安装powershell

https://docs.microsoft.com/zh-cn/windows/package-manager/winget/#production-recommended

  先去系统微软应用商店搜winget 安装即可。也可去github 找最新的稳定发布版安装。

1.2 下图 7.2.1 既是稳定的winget微软官方源发布的,安装该版本

image.png
winget install --id Microsoft.Powershell --source winget 用该命令即可安装

你也可以安装下上图的最新的Windows Terminal 。
建议您先安装最新的Windows Terminal ,再在Windows Terminal 下去用winget命令行安装powershell7,然后 设置powershell7是默认启动shell,然后再去参考本文去安装其它内容。


image.png

1.3 必要的设置与美化

 主要是为了类似bash的提示prompt

https://docs.microsoft.com/zh-cn/windows/terminal/tutorials/custom-prompt-setup
我就直接整理给出最后正确的命令了。

先安装字体

https://www.nerdfonts.com/font-downloads

image.png

选的这个,因为vscode 、 IDEA等工具用起来也很好。
Windows Terminal 设置中使用该字体

安装 oh-my-posh

https://ohmyposh.dev/docs/windows
winget install JanDeDobbeleer.OhMyPosh

浏览并选择一个主题
https://ohmyposh.dev/docs/themes

OhMyPosh主题本地存放路径
C:\Users\Archer\AppData\Local\Programs\oh-my-posh\themes

本地执行Get-PoshThemes浏览主题效果
Archer@cmd  ~  Get-PoshThemes
Please enter the themes path: C:\Users\Archer\AppData\Local\Programs\oh-my-posh\themes

输入 PROFILE 查询你的 PowerShell Profile 文件位置: PowerShell 7 PS C:\Users\Archer>PROFILE
C:\Users\Archer\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

PowerShell 5 也就是系统自带的
PS C:\Users\Archer> $PROFILE
C:\Users\Archer\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

在 PowerShell 7 执行 notepad编辑 PROFILE
notepad $PROFILE

Import-Module oh-my-posh
oh-my-posh --init --shell pwsh --config C:\Users\Archer\AppData\Local\Programs\oh-my-posh\themes/fish.omp.json | Invoke-Expression
这样保存重启pwh后就基本上看到主题效果了

遇到的问题:
powershell 7 执行
Archer@cmd  ~  . $PROFILE
Import-Module: C:\Users\Archer\Documents\PowerShell\Microsoft.PowerShell_profile.ps1:1
Line |
1 | Import-Module oh-my-posh
| ~~~~~~~~~~~~~~~~~~~~~~~~
| The specified module 'oh-my-posh' was not loaded because no valid module file was found in any module directory.

在powershell 7 下再执行下安装,可能7是独立的需要再执行下边命令单独安装下。
使用 PowerShell,通过以下命令安装 Oh My Posh:Install-Module oh-my-posh -Scope CurrentUser

其他插件:找的许多古老的资料安装了 posh-git,这里是教你如果装了怎么卸载干净。
Oh-My-Posh 3 (目前已经是 7.多版本的了)本身已经支持 Powerline,不需要额外下载 posh-git
Install-Module posh-git -Scope CurrentUser
卸载掉posh-git:
您必须从C:\Users[yourUser]\Documents\WindowsPowerShell\modules目录手动删除它。
然后编辑 notepad $PROFILE 去掉 Import-Module posh-git

安装 PSReadline 负责提示的插件

https://docs.microsoft.com/zh-cn/powershell/module/psreadline/about/about_psreadline?view=powershell-7.2
https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Core/about/about_history?view=powershell-7.2

Set-PSReadLineOption -PredictionViewStyle ListView 这个配置见下效果图里的[history]历史输入提示,需要安装以下版本的PSReadLine,否则会报错。
Install-Module -Name PSReadLine -RequiredVersion 2.2.0-beta5 -AllowPrerelease
Import-Module PSReadLine

安装命令行小图标显示

Install-Module -Name Terminal-Icons -Repository PSGallery
Import-Module -Name Terminal-Icons
小图标效果图:


image.png

最后的 $Profile内容如下

Import-Module oh-my-posh
Import-Module PSReadLine
Import-Module -Name Terminal-Icons

#oh-my-posh --init --shell pwsh --config C:\Users\Archer\AppData\Local\Programs\oh-my-posh\themes/powerlevel10k_rainbow.omp.json | Invoke-Expression
# Set-PoshPrompt powerlevel10k_rainbow slimfat
Set-PoshPrompt unicorn

#PSReadLine快捷键设置
# 设置预测文本来源为历史记录
Set-PSReadLineOption -PredictionSource History

Set-PSReadLineOption -PredictionViewStyle ListView

# 每次回溯输入历史,光标定位于输入内容末尾
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

最终效果图:


image.png

实际上我还 安装了一些插件如:Z
Install-Module -Name Z -Force
这个东西是为了快速跳转路径用的。

powershell 微软开源后可以在各个环境下安装了win下 linux下也可以用powershell了,也提供了丰富的插件来提升你的类linux部署和命令行体验。大家有时间,可以搜下高人安装的插件来优化配置自己在win下的操作体验。

二、tail 不中文乱码

为了找到个靠谱的tail 可算测试了一些工具的靠谱。


image.png

unxutils 不靠谱,有个bug 而且年代太古老了 。unxutils 2007.03.01 ---tail.exe: write error: No space left on device 实际我的磁盘空间和权限都是好的。 卸掉!

coreutils 不靠谱,安装完 使用直接有个错 tail.exe cannot be found, not a cmdlet 类似的。卸掉!

scoop install busybox                                                                                                                                            ─╯
Installing 'busybox' (4487-gd239d2d52) [64bit]
busybox-w64-FRP-4487-gd239d2d52.exe (627.5 KB) [=============================================================================================================] 100%
Checking hash of busybox-w64-FRP-4487-gd239d2d52.exe ... ok.
Linking ~\scoop\apps\busybox\current => ~\scoop\apps\busybox\4487-gd239d2d52
Creating shim for 'busybox'.
Creating shim for 'ar'.
Creating shim for 'arch'.
Creating shim for 'ash'.
Creating shim for 'awk'.
Creating shim for 'base64'.
Creating shim for 'basename'.
Creating shim for 'bash'.
Creating shim for 'bunzip2'.
Creating shim for 'bzcat'.
Creating shim for 'bzip2'.
Creating shim for 'cal'.
Creating shim for 'cat'.
Creating shim for 'chmod'.
Creating shim for 'cksum'.
Creating shim for 'clear'.
Creating shim for 'cmp'.
Creating shim for 'comm'.
Creating shim for 'cp'.
Creating shim for 'cpio'.
Creating shim for 'cut'.
Creating shim for 'date'.
Creating shim for 'dc'.
Creating shim for 'dd'.
Creating shim for 'df'.
Creating shim for 'diff'.
Creating shim for 'dirname'.
Creating shim for 'dos2unix'.
Creating shim for 'dpkg'.
Creating shim for 'dpkg-deb'.
Creating shim for 'du'.
Creating shim for 'echo'.
Creating shim for 'ed'.
Creating shim for 'egrep'.
Creating shim for 'env'.
Creating shim for 'expand'.
Creating shim for 'expr'.
Creating shim for 'factor'.
Creating shim for 'false'.
Creating shim for 'fgrep'.
Creating shim for 'find'.
Creating shim for 'fold'.
Creating shim for 'fsync'.
Creating shim for 'ftpget'.
Creating shim for 'ftpput'.
Creating shim for 'getopt'.
Creating shim for 'grep'.
Creating shim for 'groups'.
Creating shim for 'gunzip'.
Creating shim for 'gzip'.
Creating shim for 'hd'.
Creating shim for 'head'.
Creating shim for 'hexdump'.
Creating shim for 'httpd'.
Creating shim for 'iconv'.
Creating shim for 'id'.
Creating shim for 'ipcalc'.
Creating shim for 'kill'.
Creating shim for 'killall'.
Creating shim for 'less'.
Creating shim for 'link'.
Creating shim for 'ln'.
Creating shim for 'logname'.
Creating shim for 'ls'.
Creating shim for 'lzcat'.
Creating shim for 'lzma'.
Creating shim for 'lzop'.
Creating shim for 'lzopcat'.
Creating shim for 'man'.
Creating shim for 'md5sum'.
Creating shim for 'mkdir'.
Creating shim for 'mktemp'.
Creating shim for 'mv'.
Creating shim for 'nc'.
Creating shim for 'nl'.
Creating shim for 'od'.
Creating shim for 'paste'.
Creating shim for 'patch'.
Creating shim for 'pgrep'.
Creating shim for 'pidof'.
Creating shim for 'pipe_progress'.
Creating shim for 'pkill'.
Creating shim for 'printenv'.
Creating shim for 'printf'.
Creating shim for 'ps'.
Creating shim for 'pwd'.
Creating shim for 'readlink'.
Creating shim for 'realpath'.
Creating shim for 'reset'.
Creating shim for 'rev'.
Creating shim for 'rm'.
Creating shim for 'rmdir'.
Creating shim for 'rpm'.
Creating shim for 'rpm2cpio'.
Creating shim for 'sed'.
Creating shim for 'seq'.
Creating shim for 'sh'.
Creating shim for 'sha1sum'.
Creating shim for 'sha256sum'.
Creating shim for 'sha3sum'.
Creating shim for 'sha512sum'.
Creating shim for 'shred'.
Creating shim for 'shuf'.
Creating shim for 'sleep'.
Creating shim for 'sort'.
Creating shim for 'split'.
Creating shim for 'ssl_client'.
Creating shim for 'stat'.
Creating shim for 'strings'.
Creating shim for 'su'.
Creating shim for 'sum'.
Creating shim for 'tac'.
Creating shim for 'tail'.
Creating shim for 'tar'.
Creating shim for 'tee'.
Creating shim for 'test'.
Creating shim for 'time'.
Creating shim for 'timeout'.
Creating shim for 'touch'.
Creating shim for 'tr'.
Creating shim for 'true'.
Creating shim for 'truncate'.
Creating shim for 'ts'.
Creating shim for 'ttysize'.
Creating shim for 'uname'.
Creating shim for 'uncompress'.
Creating shim for 'unexpand'.
Creating shim for 'uniq'.
Creating shim for 'unix2dos'.
Creating shim for 'unlink'.
Creating shim for 'unlzma'.
Creating shim for 'unlzop'.
Creating shim for 'unxz'.
Creating shim for 'unzip'.
Creating shim for 'usleep'.
Creating shim for 'uudecode'.
Creating shim for 'uuencode'.
Creating shim for 'vi'.
Creating shim for 'watch'.
Creating shim for 'wc'.
Creating shim for 'wget'.
Creating shim for 'which'.
Creating shim for 'whoami'.
Creating shim for 'whois'.
Creating shim for 'xargs'.
Creating shim for 'xxd'.
Creating shim for 'xz'.
Creating shim for 'xzcat'.
Creating shim for 'yes'.
Creating shim for 'zcat'.
Running post-install script...
INFO  creating ~/.profile
'busybox' (4487-gd239d2d52) was installed successfully!

最终这个比较靠谱,tail可以用了,但是中文是乱码。查看帮助tail --help 也没有类似控制编码的参数。 卸掉!!!实际大家可以试试busybox其他的,这个还是比较全的和稳的。可以直接在Powershell下用上这些类Linux的还是比较美的。

最终,还是想到了git-bash,这玩意儿。。。

这东西还是稳,自带了一些类似的linux 命令行工具。本地找了个中文的log测试了下 tail -f 是无中文乱码的。

可以直接在powershell中切换到该bash。


image.png

三 查看远程windows server 上的tomcat log

直接Powshell ssh 登录到远程某一windows server服务器。
ssh 的配置 参考:https://cloud.tencent.com/developer/article/1420930
ssh 默认登录的是远程机器上的cmd或terminal 需要输入Powershell 来切换到远程机器上的powershell。
然后就可以直接用3.1节的pwh自带的 Get-Content Select-String 这些。

3.1 直接用Powershell 自带的命令行:

 实际也排了许多坑,-Encoding utf8 比如这个 不带还是输出中文乱码的,网上有许多解决方案,都不靠谱。

比如 https://www.lovesofttech.com/windows/win10CmdCharacter.html 这种都太复杂且破坏系统了,不够轻量。
最后查到官方文档 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content?view=powershell-7.2
提供了参数 -Encoding utf8 可惜 busybox下的tail 是不提供该输出内容编码参数的,所以。。。。我卸载了busybox 和类似的coreutils。

大家如果再轻便些,实际可以直接用以下命令来 实现tail -f grep等类似效果,就是命令太难记。
我直接整理如下

powershell  查看实时滚动日志:
Get-Content .\all.log  -Tail 20 -wait   -Encoding utf8
Get-Content .\error.log  -Tail 20 -wait   -Encoding utf8

powershell 解压:
.zip 
Expand-Archive -Path  *.zip

.gz 
https://scatteredcode.net/download-and-extract-gzip-tar-with-powershell/   
你们看看解压都这么麻烦,powershell下居然没有类似 tar -zxvf *.gz 的命令。

powershell  搜索内容:

https://blog.csdn.net/sinat_41104353/article/details/83046182
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string?WT.mc_id=thomasmaurer-blog-thmaure&view=powershell-7.2

文件中搜索字符串
select-string -pattern "exception"  .\all.log

匹配正则
Select-String -Pattern "EX.*E"  .\all.log

查看匹配项的前2行
Select-String -Pattern "exception" - Context 2,0 .\all.log

查看匹配项的后3行
Select-String -Pattern "exception" -Context 0,3 .\all.log

查看匹配前2行和匹配后3行
Select-String -Pattern "exception" -Context 2,3 .\all.log

匹配整个单词。给定的搜索词或字符串会部分或全部显示。 如果我们需要匹配被空格包围的整个单词,则应在搜索词前后加上空格。 我们将把exception搜索词作为一个整体进行搜索。
Select-String -Pattern " exception " .\all.log

递归搜索文件。 递归搜索将在所有当前文件夹和子文件夹中查找给定的字符串。
Get-ChildItem -Path 文件路径 -Recurse | select-string -pattern "模式"
Get-ChildItem c:\*.txt -Recurse | Select-String -Pattern EX

Get-ChildItem -Path .\all.log  -Recurse | select-string -pattern "01-21 15:4"

Get-ChildItem -Path .\all.log  -Recurse | select-string -pattern "exception"

重定向输出到文件:
select-string -pattern "exception"  .\all.log  |  Out-File exception.log -Encoding utf8

select-string -pattern " Lock wait " -Context 9,9  .\all.log  |  Out-File exception.log -Encoding utf8
select-string -pattern " exception " -Context 9,9  .\all.log  |  Out-File exception.log -Encoding utf8

Get-ChildItem -Path .\all.log  -Recurse | select-string -pattern "exception"   |  Out-File exception.log -Encoding utf8 


过滤搜索关键词:
exception    Deadlock   Lock    timeout  

3.2 用类linux 命令来查

上述命令好是好,也满足了需求,可是比起以前的linux 的,我记不住啊。而且远程上的powershell 不可以乱部署 美化部分的内容和装一些插件。
好就好在,远程的windows server上边有部署git,那按照二的思路,我可以在远程上的powershell 切换到远程机器上的git-bash吗?
答案是可以的。
见图 我由远程的ps 找到bash 就可以切换到远程机器上的bash了。


image.png

2022-02-14 草草编辑完。没有markdown排版。但看还是能看的。给排掉了许多坑。应该可以照抄直接用。
目录大纲,没的选,只能选linux下边。实际应该有个 工具配置 类似的板块。管理员看到了,可以帮我转移下。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容