成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Fedora Linux 系統上安裝 PowerShell

系統 Linux
本文介紹如何在主機上和在 Podman 或其他容器內安裝 PowerShell。

PowerShell(也可寫作 pwsh)是一個功能強大的開源命令行工具,它是面向對象的,由微軟開發和維護。它的語法特征冗長,但對用戶來說比較直觀。本文介紹如何在主機上和在 Podman 或其他容器內安裝 PowerShell。

為何使用 PowerShell

PowerShell,正如它的名字那樣,是一個強大的工具。它的句法冗長,但語義清晰。對那些不愿意寫長命令的開發者來說,PowerShell 的大多數命令都有別名。可以使用 ??Get-Alias?? 或點擊 ??此處?? 查詢別名的使用方法。

PowerShell 和傳統的 Shell 最大的區別在于它的輸出管道。普通的 Shell 輸出的是字符串或字符流,PowerShell 輸出的是對象。這對命令管道的工作方式具有深遠的影響,而且它具有很多的優點。

演示例子

下面的例子體現的是冗長而清晰的特點。以 ??#??? 號開頭的行是注釋行。以 ??PS >??? 開頭的行是命令行,??PS >?? 是提示符:

    # Return all files greater than 50MB in the current directory.
## Longest form
PS > Get-Childitem | Where-Object Length -gt 50MB
## Shortest form (with use of aliases)
PS > gci | ? Length -gt 40MB
## Output looks like this
Directory: /home/Ozymandias42/Downloads
Mode LastWriteTime Length Name
---- ------------- ------ ----
----- 20/08/2020 13:55 2000683008 40MB-file.img
# In order: get VMs, get snapshots, only select the last 3 and remove selected list:
PS > Get-VM VM-1 | Get-Snapshot | Select-Object -Last 3 | Remove-Snapshot

上述例子說明了:Bash 腳本經常需要用 ??cut??、??sed??、??awk?? 等工具對輸入/輸出進行格式化,而使用 PowerShell 時通常就沒有這個必要了。這是因為 PowerShell 的工作機制跟傳統的 POSIX shell(例如 Bash、Zsh、Fish等)有本質的不同。傳統的 Shell 的命令輸出形式是字符串,而在 PowerShell 中,命令輸出形式為對象。

Bash 與 PowerShell 的比較

下面的例子說明了與 Bash 中的字符串輸出模式相比,PowerShell 的對象輸出模式的優點。假設你需要寫一段腳本,該腳本的作用顯示所有進程,這些進程一共占用了 200MB 內存空間。如果使用 Bash,大致如下:

    $ ps -eO rss | awk -F' ' \
'{ if($2 >= (1024*200)) { \
printf("%s\t%s\t%s\n",$1,$2,$6);} \
}'
PID RSS COMMAND
A B C
[...]

第一個顯而易見的差別就是可讀性,或更確切地說是語義清晰度。 ??ps?? 和 ??awk?? 都不是自描述的。??ps?? 命令的功能是顯示進程狀態;??awk?? 是一種文本處理工具和語言,這個詞匯每個字母都是前期開發人員的名字(Aho, Weinberger, Kernighan(詳見 ??維基百科??)的首字母。然而,在把它與 PowerShell 作比較前,先看看這個腳本:

  • ??ps -e?? 輸出所有運行中的進程;
  • ?-O rss?? 輸出 ps 的默認輸出內容,再加上 RSS 字段 —— 每個進程使用的千字節數(以 KB 為單位);輸出結果類似于:
PID  RSS   S TTY TIME     COMMAND  
1 13776 S ? 00:00:01 /usr/lib/systemd/systemd
  • ??|?? 管道操作符使用左邊命令的輸出作為右邊命令的輸入。
  • ??awk -F' '?? 定義“空格”,作為輸入字段分隔符。以上面的例子來說,PID 是第一個字段,RSS 是第二個字段,依此類推。
  • ??'{ if($2 >= (1024*200)) {?? 是實際的 AWK 代碼起始處。它的作用是檢查第二個字段(RSS)是否包含一個大于或等于 1024*200 的數字;
  • ??printf(“%s\t%s\t%s\n”,$1,$2,$6);}?? 腳本繼續。如果前面的條件成立,則輸出第一、第二和第六個字段(分別是 PIDRSS 和 COMMAND 字段)。

考慮到這一點,退一步說,編寫這段腳本需要什么才能令它工作:

  • 輸入命令??ps?? 的輸出中必須包含我們想要過濾的字段。這在默認情況下是沒有的,需要我們使用??-O?? 標志和??rss?? 字段作為參數。
  • 我們需要將??ps?? 的輸出當作一組輸入字段,所以我們還應當知道它們的順序和結構。換句話說,我們至少需要確定??RSS?? 是第二個字段。這也意味著我們需要提前知道??ps?? 的輸出信息的大致情況。
  • 然后我們需要知道過濾的數據是什么單位,以及相關工具的單位是什么。也就是我們需要知道??RSS?? 和??awk?? 字段使用 kb。不然我們就不能寫出??($2 >= 1024*200)?? 這樣的表達式。

現在,我們把前面的命令跟 PoserShell 中等價的命令比較:

    # Longest form
PS > Get-Process | Where-Object WorkingSet -ge 200MB
# Shortest form (with use of aliases)
PS > gps | ? ws -ge 200MB
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
A B C D E F G
[...]

首先應該注意到,語義非常清晰。這些命令都是自描述的,能清晰描述它們做什么。

此外,不需要對輸入-輸出重新格式化,也不需要關心輸入命令使用的單位。這是因為 PowerShell 輸出的是對象,而非字符串。

考慮下述情況,就可以理解這些內容。在 Bash 中,命令的輸出信息就是終端顯示的信息。在 PowerShell 中,終端顯示的信息并不等于實際可用的信息。這是由于 PowerShell 中的輸出-打印系統使用的也是對象。因此 PowerShell 中每一條命令都對輸出的對象的一些屬性作了可打印的標記,也對一些屬性作了不可打印的標記。然而,它總是包括所有的屬性,而 Bash 只包括它實際打印的內容。我們可以把它想象成 JSON 對象。Bash 中的輸出位置被分為一些“字段”,以空格或制表符為標志,在 PowerShell 中它是一個容易尋址的對象屬性,只需要知道它的名稱即可使用。就像上述例子中的 ??WorkingSet?? 那樣。

為了看到一條命令的輸出對象的所有屬性和它們的類型,可以進行以下操作:

PS > Get-Process | Get-Member

安裝 PowerShell

PowerShell 安裝包的形式有若干種,包括 Fedora Linux 中使用的 RPM 安裝包。本文介紹在 Fedora Linux 中如何使用多種方法安裝 PowerShell。

我推薦使用原生的方法安裝。但我也會介紹如何在容器中安裝。我將展示使用官方微軟 PowerShell 容器和 Fedora Linux 30 的 Toolbox 容器。使用容器的優點在于,所有的依賴捆綁在其中,并且與主機隔離,所以它一定是有效的。無論如何,雖然官方文檔只是明確指出支持 Fedora Linux 發行版的 28-30 版本,我還是建議使用原生的方法安裝。

注意: 官方支持意味著一定有效。但其他的版本也不是一定不兼容。也就是說,高于 30 的發行版也應該有效。經過測試,的確如此。

在容器中設置并運行 PowerShell 比直接在主機上運行它難度更大,安裝需要花費更多時間,而且你還不能直接運行主機的命令。

在主機上使用包管理器安裝 PowerShell

方法一:使用微軟倉庫

安裝過程很直接,而且跟通過第三方倉庫安裝其他軟件沒什么區別。

通俗地說,安裝過程可以分為四步:

  1. 添加新倉庫的 GPG 密碼
  2. 在 DNF 倉庫列表中新增相應的倉庫
  3. 刷新 DNF 緩存,將新倉庫中的有關包包含進來
  4. 安裝新包

然后使用命令 ??pwsh?? 啟動 PowerShell。

    $ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
$ curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
$ sudo dnf makecache
$ sudo dnf install powershell
$ pwsh

欲刪除倉庫和包,運行以下命令:

$ sudo rm /etc/yum.repos.d/microsoft.repo
$ sudo dnf remove powershell
方法 2:使用 PRM 文件

這種方法與第一種方法沒有明顯的差別。實際上,在安裝 RPM 文件時,隱式添加了 GPG 密碼和倉庫。這是由于 RPM 文件包含它們兩者的關聯關系,保存在它的元數據中。

首先,從 ??PowerShell GitHub 倉庫?? 獲取相應版本的 ??.rpm?? 文件。然后查看 ??readme.md?? 文件中的 “獲取 PowerShell” 部分的內容。

第二步,輸入以下命令:

$ sudo dnf install powershell-<version>.rhel.7.<architecture>.rpm

在 ??<version>?? 和 ??<architecture>?? 節點中填寫各自的內容,例如 ??powershell-7.1.3-1.rhel.7.x86_64.rpm??。

你也可以使用鏈接運行它,不指定版本和架構,先把它下載到本地。

$ sudo dnf install https://github.com/PowerShell/PowerShell/releases/download/v<version>/powershell-<version>.rhel.7.<architecture>.rpm

欲刪除 PowerShell,運行以下命令:

$ sudo dnf remove powershell

通過容器安裝

方法一:使用 Podman 容器

Podman 是一個兼容 ??開放容器倡議??(OCI)的、嵌入式的容器引擎,它可以代替 Docker。

微軟提供了 ??PowerShell Docker 容器集成工具??。下面的例子將在 Podman 中使用容器。

欲了解更多關于 Podman 的信息,可以訪問 ??Podman.io??。Fedora 雜志還有一個專為 Podman 設計的 ??標簽??。

欲在 Podman 中使用 PowerShell,運行以下腳本:

    $ podman run \
-it \
--privileged \
--rm \
--name powershell \
--env-host \
--net=host --pid=host --ipc=host \
--volume $HOME:$HOME \
--volume /:/var/host \
mcr.microsoft.com/powershell \
/usr/bin/pwsh \
-WorkingDirectory $(pwd)

這段腳本為使用 PowerShell 創建了一個 Podman 容器,并立即接入其中。它還將 ??/home?? 和主機的根目錄掛載到容器中,確保它們在容器中是可用的。無論如何,在 ??/var/host?? 目錄下,主機的根目錄是可訪問的。

但是,在容器內部,你只能間接運行主機命令。有一種變通辦法,就是先運行 ??chroot /var/host?? 改變根目錄,然后運行主機命令。

為了把命令拆分開來講解,除非特別指定,以下所有內容都是強制性的:

  • ??-it?? 創建一個持久環境,當你進入該環境后,不會輕易退出;
  • ??--privileged?? 給予容器擴展的權限(可選);
  • ??--rm?? 當你退出時移除容器;
  • ??--name?? 設置容器名稱;
  • ??--env-host?? 將所有主機的環境變量設置為容器的變量(可選);
  • ??--net=host --pid=host --ipc=host?? 在主機的命名空間中運行進程(而非一組單獨的名稱空間);
  • ??--volume $HOME:$HOME?? 掛載用戶目錄;
  • ??--volume /:/var/host?? 將主機根目錄掛載到??/var/host??(可選);
  • ??mcr.microsoft.com/powershell?? 進入容器;
  • ??/usr/bin/pwsh?? 可選但很方便的參數:用別名??pwsh??,腳本中有了它,可以輸入??pwsh?? 輕松訪問 Podman 容器;
  • ??-WorkingDirectory $(pwd)?? 在當前目錄下進入容器(可選)。

欲移除 PowerShell 鏡像,運行以下命令:

$ podman rmi mcr.microsoft.com/powershell
方法二:Fedora 系統的 Toolbox 容器

在不影響主機系統的情況下安裝持久化環境,使用 Toolbox 容器是一種巧妙的解決方案。它充當了 Podman 的封裝器,負責提供大量的標志,就像方法一中提到的那樣。因此,Toolbox 比 Podman 容易使用。它可以用來開發和調試。有了 Toolbox,你可以運行任何命令,跟你直接在 Fedora 工作站主機上運行是一樣的。

安裝步驟跟在主機上安裝一樣,唯一的區別就是在容器內部進行。你需要確保已經安裝了 ??toolbox?? 包。

使用 Fedora 34 Toolbox 容器需要兩個步驟:

  1. 創建 Fedora 34 Toolbox 容器
  2. 運行 Fedora 34 Toolbox 容器
$ toolbox create --image registry.fedoraproject.org/f34/fedora-toolbox
$ toolbox enter --container fedora-toolbox

接著,按照 ??方法一:使用微軟倉庫?? 中的相關內容操作。

可選但非常方便的做法:使用別名 ??pwsh??,可以輕松地訪問 Toolbox 容器:

toolbox run container fedora-toolbox pwsh

欲移除 Toolbox 容器,需要確保你已經使用 ??exit?? 關閉了 Toolbox 會話,然后運行以下命令:

$ podman kill fedora-toolbox$ toolbox rm fedora-toolbox


責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-01-12 13:19:29

Fedora安裝

2020-08-16 09:00:15

樹莓派FedoraLinux

2021-08-19 18:28:22

FedoraLinuxOpenCV

2021-11-28 06:33:24

Discord消息收發應用 Linux

2021-08-18 11:19:25

FedoraLinuxJava

2010-01-12 17:59:05

2020-12-28 06:44:45

FedoraLinux RPM文件

2024-01-01 18:52:35

軟件包ostree

2020-07-20 18:30:44

Fedora 32DockerLinux

2022-09-22 16:21:43

開源GUI 應用

2022-03-21 21:28:00

Homebrew包管理器Linux

2022-06-16 10:46:43

UbuntuLinux

2021-11-29 14:38:45

FedoraLinuxBrave瀏覽器

2023-11-26 16:23:16

FedoraVSCodium

2009-12-22 16:29:10

Fedora Core

2019-10-29 16:30:10

FedoraSSH端口Linux

2019-11-11 15:10:37

FedoraLinuxbash

2021-10-03 14:47:26

Fedora CoreGitHub Acti運行器

2009-12-28 17:41:10

Fedora Linu

2010-01-12 16:53:23

Fedora Core
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲综合精品 | 成年人黄色一级片 | 黑人精品欧美一区二区蜜桃 | 久久成人免费 | 在线免费看毛片 | 激情婷婷 | 欧美理论在线观看 | 97国产在线观看 | 在线黄 | 久久1区 | 国产一级免费在线观看 | 亚洲国产成人精 | 精品国产乱码久久久久久丨区2区 | 午夜亚洲 | a级大片免费观看 | 国产剧情一区二区三区 | 亚洲 精品 综合 精品 自拍 | 亚洲影音先锋 | 中文字幕国产精品视频 | 天堂网中文字幕在线观看 | 毛片在线免费 | 在线观看免费毛片 | 亚洲第一av | aaa大片免费观看 | 在线精品亚洲欧美日韩国产 | 免费一级欧美在线观看视频 | 四虎永久在线精品免费一区二 | 99久久精品国产一区二区三区 | 午夜精品| 91视频久久久久 | 亚洲欧美在线一区 | 成人av一区 | 自拍偷拍亚洲欧美 | 国产日产久久高清欧美一区 | 国产精品99久久久久久宅男 | 久草资源在线 | 三级黄视频在线观看 | 国产草草视频 | 久久国产精品久久久久久久久久 | 中文字幕在线观看一区 | 欧美视频一区二区三区 |