powershell基础使用笔记

powershell 基础使用笔记

  • powershell 基础使用笔记
    • 学习命令行的必要性
    • powershell 美化
    • 命令行速成课笔记
      • win 下 PowerShell 必知必会的命令
      • 目录操作
      • 文件操作
      • 搜索
      • 帮助
      • Sessions
      • 结语

学习命令行的必要性

要想真正学习编程,那么必须要懂得基本的命令行操作。命令行界面也即 command line interface(CLI)。我之前一直使用 matlab 这样的编程语言(有许多人把matlab当作软件),的确是不需要用到什么命令行操作。但是当我转而学习 python 这样的语言时,就会发现基本的命令行操作必不可少。

本文是我学习 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,也可直接参考该项目文档。

这是我美化的最终效果:

powershell基础使用笔记_第1张图片

谈不上多好,但比原生强多了。其实该项目不仅提供美化,在配置成功后,你可以使用 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

这里将常用命令列出来,下文的笔记中只会记录我个人认为的重点,而不会重复记录简单命令。

目录操作

  1. 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

  2. 如果要创建的目录中有空格,那么需要使用引号或者单引号包裹目录。

  3. PowerShell 中不区分大小写

  4. cd .. 返回上级目录,也可使用 cd ../.. 返回多层目录。

  5. win 下 lsdir 命令效果一样?,至于为什么以后讲。

  6. dir 将当前目录的所有文件及目录列出。dir 具体目录 则将该具体目录下文件及目录列出,而 dir -r 命令则可以将子目录内的文件也一并列出。

  7. rmdir 命令移除非空目录是会询问如何操作:

    ➜ dir temp1
    
    
        Directory: D:\shellCode\temp1
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---           2019/5/11    21:50          46547 p.css
    
    # 2 at SUPER-ALPHA in D:\shellCode [16:45:55]
    ➜ rmdir temp1
    
    Confirm
    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

  8. 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

文件操作

  1. New-Item 能新建文件,也能新建目录。不过只能在当前目录下建立新文件或目录,无法在子目录下建目录或文件。

  2. cp 命令支持子目录下的操作,如:

    ➜ cp p.css i/
    # 14747 at SUPER-ALPHA in D:\shellCode [18:43:24]
    ➜ dir i
    
    
        Directory: D:\shellCode\i
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d----            2019/9/3    17:54                love
    -a---           2019/5/11    21:50          46547 p.css
    

    并且通过 cp -r 命令能实现整个目录的复制:

    # 14747 at SUPER-ALPHA in D:\shellCode [18:45:12]
    ➜ dir temp
    
    
        Directory: D:\shellCode\temp
    
    Mode                 LastWriteTime         Length Name       
    ----                 -------------         ------ ----       
    -a---           2019/8/30    19:00             38 another.txt
    -a---           2019/8/19     1:34          12142 mytest.html
    -a---           2019/8/30    18:49             10 test1.txt  
    -a---           2019/8/30    18:50             11 test2.txt  
    -a---           2019/8/30    18:58           1831 test3.txt  
    -a---           2019/8/30    19:00             38 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 new
    
    
        Directory: D:\shellCode\new
    
    Mode                 LastWriteTime         Length Name       
    ----                 -------------         ------ ----       
    -a---           2019/8/30    19:00             38 another.txt
    -a---           2019/8/19     1:34          12142 mytest.html
    -a---           2019/8/30    18:49             10 test1.txt  
    -a---           2019/8/30    18:50             11 test2.txt  
    -a---           2019/8/30    18:58           1831 test3.txt  
    -a---           2019/8/30    19:00             38 test4.txt  
    
    # 14747 at SUPER-ALPHA in D:\shellCode [18:45:34]
    
  3. 作者建议当涉及目录操作时,在目录后加上 / 以确保是目录,建议自然没有问题。但是我目前没加也没有什么不妥。有待后续使用时验证。

  4. mv 当操作的文件在同一目录下时,就像重命名一样。只有当操作的文件在不同目录时,你才会觉得真的移动了文件。

  5. 在用 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

  6. more 是分页输出,而 cat 则是全部输出。cat 能一次性输出多个文件内容,此时文件之间应以逗号隔开。

  7. 感觉 rmrmdir 区别不大,都能删除文件或者目录。有待后续研究。

  8. win 下可以用 > 进行 redirection 操作,而 | 为管道符。使用 somecommand > somefile 命令即可将命令输出保存到指定文件。

  9. 通配符(wildcard),*(asterisk) 可以代表任何东西。当你输入一个星号时,就意味者将通过非星号部分,构建列表。这样,可以结合 rm 等命令删除特定文件。

搜索

  1. 获取当前目录下特定文件。

    # 14747 at SUPER-ALPHA in D:\shellCode [2:26:45]ls
    
    
        Directory: D:\shellCode
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d----           2019/8/20    16:02                .vscode
    d----            2019/9/2     3:33                temp1
    -a---            2019/9/2    23:09           1188 mytest.html
    -a---            2019/9/2     3:45            116 newfile.txt
    -a---            2019/9/2     3:46             42 oldfile.txt
    -a---            2019/9/4     2:26           9919 powershell基础使用笔记.md    
    -a---            2019/9/4     2:07          19733 process.txt
    -a---           2019/8/21    21:18          12429 temp.html
    -a---           2019/8/19     1:50          12481 test2.html
    -a---           2019/1/31    10:48          94326 wordfrequency.js
    -a---            2019/9/3    14:58           1346 微软PowerShell官方教程笔记.md
    
    # 14747 at SUPER-ALPHA in D:\shellCode [2:26:46]dir -r -filter "*.txt"
    
    
        Directory: D:\shellCode
    
    Mode                 LastWriteTime         Length Name       
    ----                 -------------         ------ ----       
    -a---            2019/9/2     3:45            116 newfile.txt
    -a---            2019/9/2     3:46             42 oldfile.txt
    -a---            2019/9/4     2:07          19733 process.txt
    
        Directory: D:\shellCode\temp1
    
    Mode                 LastWriteTime         Length Name       
    ----                 -------------         ------ ----
    -a---           2019/8/30    19:00             38 another.txt
    -a---           2019/8/30    18:49             10 test1.txt
    -a---           2019/8/30    18:50             11 test2.txt
    -a---           2019/8/30    18:58           1831 test3.txt
    -a---           2019/8/30    19:00             38 test4.txt
    
    # 14747 at SUPER-ALPHA in D:\shellCode [2:27:02]
  2. ctrl+c 能中断运行。

  3. echo > file.txt 这个命令在 7.0 和 5.1 版本中的效果不一样,5.1 中可以记录任意个输入,需要通过输入一行空行中断。而 7.0 中只能记录一行输入然后自动中断。

  4. select-string 实现文本搜索功能:

    # 14747 at SUPER-ALPHA in D:\shellCode [2:45:46]
    ➜ Select-String fuck *.txt
    
    funny.txt:1:fuck you
    funny.txt:2:fuck me
    funny.txt:3:fuck she
    new.txt:1:i really want to fuck you,idol
    

帮助

  1. help command 可以直接搜索相关命令的帮助。

  2. help command -online 可以在默认浏览器中打开相关命令帮助,但是注意这个页面的命令名字和你搜索的未必相同,但它们的含义作用是完全一样的。如,你搜 ls ,得到的却是 Get-ChildItem,那是因为 lsGet-ChildItem 的别名。

  3. 此外,也可以通过通配符,找寻相关的命令,这在自己记不请命令的情况下非常有用。

    # 14747 at SUPER-ALPHA in D:\shellCode [2:58:07]
    ➜ help *dir*
    
    Name                              Category  Module                    Synopsis
    ----                              --------  ------                    --------
    dir                               Alias                               Get-ChildItem
    rmdir                             Alias                               Remove-Item
    chdir                             Alias                               Set-Location
    mkdir                             Function
    Get-GitDirectory                  Function  posh-git                  Gets the path to the current repository's .git dir.
    Disable-NetAdapterPacketDirect    Function  NetAdapter                …
    Enable-NetAdapterPacketDirect     Function  NetAdapter                …
    Set-NetAdapterPacketDirect        Function  NetAdapter                …
    Get-NetAdapterPacketDirect        Function  NetAdapter                …
    

Sessions

这一节名不知道该翻译成什么,知道的朋友,还请不吝赐教。

  1. ls env: 可以输出系统环境变量。

  2. env:variableName 可以输出具体变量路径,但是好像也有的不能正常输出。

  3. env:os 输出你当前系统,具体是系统什么我不清楚意思,反正我输出如下:

    ➜ $env:os
    Windows_NT
    # 14747 at SUPER-ALPHA in D:\shellCode [3:07:56]
    
  4. 系统环境变量的新建与改变。

    # 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]
    
  5. 移除环境变量时也可以通过设置其值为空(“”),进行移除操作。

  6. 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]
  1. 移除环境变量时也可以通过设置其值为空(“”),进行移除操作。
  2. exit 命令退出终端。

结语

留待进一步学习的几个命令:

forfiles
runas
attrib
icacls
set

你可能感兴趣的:(PowerShell)