powershell 基础使用笔记
- powershell 基础使用笔记
- 学习命令行的必要性
- powershell 美化
- 命令行速成课笔记
- win 下 PowerShell 必知必会的命令
- 目录操作
- 文件操作
- 搜索
- 帮助
- Sessions
- 结语
本文是我学习 Zed A. Shaw 的命令行速成课程(The Command Line Crash Course:Controlling Your Computer From The Terminal 点击可下载)。
powershell 美化 未经美化的 powershell 不忍直视,将其美化后能显著提高使用兴趣。至于美化的教程网上很多,我这里记录两个我参考的 将美化进行到底,把 PowerShell 做成 oh-my-zsh 的样子,Powershell 美化和 Win 包管理工具 | ?楠槡的博客,可能因为计算机环境不同,你按上面操作未必能正常运行。不过别慌都是小问题,多百度总有办法解决。
其实,这上面的美化用的都是该开源项目 JanDeDobbeleer/oh-my-posh,也可直接参考该项目文档。
这是我美化的最终效果:
文章图片
谈不上多好,但比原生强多了。其实该项目不仅提供美化,在配置成功后,你可以使用 Tab 键对命令进行补全。
这里首先说明,我是在 win10 系统下,使用 powershell 即使用 5.1 版本(好像是 win10 自带),也使用 7.0.0-preview.3 版本(自己安装,该版本开源并能在多平台使用),这两本版本能同时存在。
另外,这里贴一下我的 PowerShell 配置文件,该文件一般位于 PC 文档目录,PowerShell(7.0版本),WindowsPowerShell(5.1版本)下。无论哪个版本都名为
Microsoft.PowerShell_profile.ps1
。chcp 65001
Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Honukai
命令行速成课笔记 那么开始步入正题,命令行速成课的笔记,这里按课程顺序做笔记。
win 下 PowerShell 必知必会的命令
pwd print working directory这里将常用命令列出来,下文的笔记中只会记录我个人认为的重点,而不会重复记录简单命令。
hostname my computer’s network name
mkdir make directory
cd change directory
Is list directory
rmdir remove directory
pushd push directory
popd pop director
cp copy a file or directory
mv move a file or directory
more page through a file
type print the whole file
forfiles run a command on lots of files
dir -r find files
select-string find things inside files
help read a manual page
echo print some arguments
set export/set a new environment variable
exit exit the shell
runas DANGER! become super user root DANGER!
attrib change permission modifiers
iCACLS change ownership
目录操作
- mkdir:该命令用逗号分隔即可一次创建多个目录。在各系统通用斜杆表示目录,但是在 win 中也可以使用反斜杆。
In this book I’m using the /(slash) character for all paths since they work the same on all computers now. However, Windows users will need to know that you can also use the(backslash) characters and other Windows users will typically expect those at times
- 如果要创建的目录中有空格,那么需要使用引号或者单引号包裹目录。
- PowerShell 中不区分大小写
-
cd ..
返回上级目录,也可使用cd ../..
返回多层目录。
- 【powershell基础使用笔记】win 下
ls
和dir
命令效果一样?,至于为什么以后讲。
-
dir
将当前目录的所有文件及目录列出。dir 具体目录
则将该具体目录下文件及目录列出,而dir -r
命令则可以将子目录内的文件也一并列出。
-
rmdir
命令移除非空目录是会询问如何操作:
? dir temp1Directory: D:\shellCode\temp1ModeLastWriteTimeLength Name ----------------------- ---- -a---2019/5/1121:5046547 p.css# 2 at SUPER-ALPHA in D:\shellCode [16:45:55] ? rmdir temp1Confirm The item at D:\shellCode\temp1 has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes[A] Yes to All[N] No[L] No to All[S] Suspend[?] Help (default is "Y"):
如果,想跳过这一步直接操作,使用如下命令dir temp1 -r
。
-
pushd
临时进入目个目录,popd
返回之前的目录。这个命令可以连续搭配使用:
# 3 at SUPER-ALPHA in D:\shellCode [17:57:07] ? pushd i/love/you # 4 at SUPER-ALPHA in D:\shellCode\i\love\you [17:57:19] ? pushd e:/ # 5 at SUPER-ALPHA in E: [17:57:32] ? popd # 6 at SUPER-ALPHA in D:\shellCode\i\love\you [17:57:40] ? popd # 7 at SUPER-ALPHA in D:\shellCode [17:57:43]
The pushd command takes your current directory and"pushes"it into a list for later, then it changes to another directory. It’s like saying, "Save where I am, then go here.
The popd command takes the last directory you pushed and"pops"it off, taking you back there Finally, on Unix pushd, if you run it by itself with no arguments, will switch between your current directory and the last one you pushed It’s an easy way to switch between two directories. This does not work in Power Shell
-
New-Item
能新建文件,也能新建目录。不过只能在当前目录下建立新文件或目录,无法在子目录下建目录或文件。
-
cp
命令支持子目录下的操作,如:
? cp p.css i/ # 14747 at SUPER-ALPHA in D:\shellCode [18:43:24] ? dir iDirectory: D:\shellCode\iModeLastWriteTimeLength Name ----------------------- ---- d----2019/9/317:54love -a---2019/5/1121:5046547 p.css
并且通过cp -r
命令能实现整个目录的复制:
# 14747 at SUPER-ALPHA in D:\shellCode [18:45:12] ? dir tempDirectory: D:\shellCode\tempModeLastWriteTimeLength Name ----------------------- ---- -a---2019/8/3019:0038 another.txt -a---2019/8/191:3412142 mytest.html -a---2019/8/3018:4910 test1.txt -a---2019/8/3018:5011 test2.txt -a---2019/8/3018:581831 test3.txt -a---2019/8/3019:0038 test4.txt# 14747 at SUPER-ALPHA in D:\shellCode [18:45:16] ? cp -r temp new # 14747 at SUPER-ALPHA in D:\shellCode [18:45:31] ? dir newDirectory: D:\shellCode\newModeLastWriteTimeLength Name ----------------------- ---- -a---2019/8/3019:0038 another.txt -a---2019/8/191:3412142 mytest.html -a---2019/8/3018:4910 test1.txt -a---2019/8/3018:5011 test2.txt -a---2019/8/3018:581831 test3.txt -a---2019/8/3019:0038 test4.txt# 14747 at SUPER-ALPHA in D:\shellCode [18:45:34]
- 作者建议当涉及目录操作时,在目录后加上
/
以确保是目录,建议自然没有问题。但是我目前没加也没有什么不妥。有待后续使用时验证。
-
mv
当操作的文件在同一目录下时,就像重命名一样。只有当操作的文件在不同目录时,你才会觉得真的移动了文件。
- 在用
more
查看文件时,可以按q
退出。
On Unix you use the spacebar and w(the letter w)
to go down and up Arrow keys also work
On Windows just hit spacebar to page through
-
more
是分页输出,而cat
则是全部输出。cat
能一次性输出多个文件内容,此时文件之间应以逗号隔开。
- 感觉
rm
和rmdir
区别不大,都能删除文件或者目录。有待后续研究。
- win 下可以用
>
进行 redirection 操作,而|
为管道符。使用somecommand > somefile
命令即可将命令输出保存到指定文件。
- 通配符(wildcard),
*(asterisk)
可以代表任何东西。当你输入一个星号时,就意味者将通过非星号部分,构建列表。这样,可以结合rm
等命令删除特定文件。
- 获取当前目录下特定文件。
# 14747 at SUPER-ALPHA in D:\shellCode [2:26:45] ? lsDirectory: D:\shellCodeModeLastWriteTimeLength Name ----------------------- ---- d----2019/8/2016:02.vscode d----2019/9/23:33temp1 -a---2019/9/223:091188 mytest.html -a---2019/9/23:45116 newfile.txt -a---2019/9/23:4642 oldfile.txt -a---2019/9/42:269919 powershell基础使用笔记.md -a---2019/9/42:0719733 process.txt -a---2019/8/2121:1812429 temp.html -a---2019/8/191:5012481 test2.html -a---2019/1/3110:4894326 wordfrequency.js -a---2019/9/314:581346 微软PowerShell官方教程笔记.md# 14747 at SUPER-ALPHA in D:\shellCode [2:26:46] ? dir -r -filter "*.txt"Directory: D:\shellCodeModeLastWriteTimeLength Name ----------------------- ---- -a---2019/9/23:45116 newfile.txt -a---2019/9/23:4642 oldfile.txt -a---2019/9/42:0719733 process.txtDirectory: D:\shellCode\temp1ModeLastWriteTimeLength Name ----------------------- ---- -a---2019/8/3019:0038 another.txt -a---2019/8/3018:4910 test1.txt -a---2019/8/3018:5011 test2.txt -a---2019/8/3018:581831 test3.txt -a---2019/8/3019:0038 test4.txt# 14747 at SUPER-ALPHA in D:\shellCode [2:27:02] ?
-
ctrl+c
能中断运行。
-
echo > file.txt
这个命令在 7.0 和 5.1 版本中的效果不一样,5.1 中可以记录任意个输入,需要通过输入一行空行中断。而 7.0 中只能记录一行输入然后自动中断。
-
select-string
实现文本搜索功能:
# 14747 at SUPER-ALPHA in D:\shellCode [2:45:46] ? Select-String fuck *.txtfunny.txt:1:fuck you funny.txt:2:fuck me funny.txt:3:fuck she new.txt:1:i really want to fuck you,idol
-
help command
可以直接搜索相关命令的帮助。
-
help command -online
可以在默认浏览器中打开相关命令帮助,但是注意这个页面的命令名字和你搜索的未必相同,但它们的含义作用是完全一样的。如,你搜ls
,得到的却是Get-ChildItem
,那是因为ls
是Get-ChildItem
的别名。
- 此外,也可以通过通配符,找寻相关的命令,这在自己记不请命令的情况下非常有用。
# 14747 at SUPER-ALPHA in D:\shellCode [2:58:07] ? help *dir*NameCategoryModuleSynopsis -------------------------- dirAliasGet-ChildItem rmdirAliasRemove-Item chdirAliasSet-Location mkdirFunction Get-GitDirectoryFunctionposh-gitGets the path to the current repository's .git dir. Disable-NetAdapterPacketDirectFunctionNetAdapter… Enable-NetAdapterPacketDirectFunctionNetAdapter… Set-NetAdapterPacketDirectFunctionNetAdapter… Get-NetAdapterPacketDirectFunctionNetAdapter…
这一节名不知道该翻译成什么,知道的朋友,还请不吝赐教。
-
ls env:
可以输出系统环境变量。
-
env:variableName
可以输出具体变量路径,但是好像也有的不能正常输出。
-
env:os
输出你当前系统,具体是系统什么我不清楚意思,反正我输出如下:
? $env:os Windows_NT # 14747 at SUPER-ALPHA in D:\shellCode [3:07:56]
- 系统环境变量的新建与改变。
# 14747 at SUPER-ALPHA in D:\shellCode [3:09:44] ? $env:fuckYou = "fuck you good" # 14747 at SUPER-ALPHA in D:\shellCode [3:10:27] ? $env:fuckyou fuck you good # 14747 at SUPER-ALPHA in D:\shellCode [3:10:35] ? rmdir env:/fuckyou # 14747 at SUPER-ALPHA in D:\shellCode [3:11:06] ? $env:fuckyou # 14747 at SUPER-ALPHA in D:\shellCode [3:11:15] ? ls env: | select-string fuckyou # 14747 at SUPER-ALPHA in D:\shellCode [3:12:44]
- 移除环境变量时也可以通过设置其值为空(“”),进行移除操作。
-
exit
命令退出终端。
留待进一步学习的几个命令:
forfiles
runas
attrib
icacls
set
HA in D:\shellCode [3:11:06]
? $env:fuckyou
# 14747 at SUPER-ALPHA in D:\shellCode [3:11:15]
? ls env: | select-string fuckyou
# 14747 at SUPER-ALPHA in D:\shellCode [3:12:44]
- 移除环境变量时也可以通过设置其值为空(“”),进行移除操作。
exit
命令退出终端。
留待进一步学习的几个命令:
forfiles
runas
attrib
icacls
set
推荐阅读
- 配置|【Python】安装pycocotools出错解决并成功安装
- PowerShellGet系列(一)(PowerShell的最佳管理能手)
- 从零开始学PowerShell(9) 创建PowerShell对象
- PowerShellGet系列(二)(用PowerShellGet管理你的模块包)
- powershell
- powershell|关于解决PowerShell 访问PSGallery的InstallationPolicy为Untrusted的问题.
- Powershell基础(类和对象)
- 关于powershell的概述和安装