Хакер - Используй силу, Тукс! Применяем PowerShell в Linux

Хакер - Используй силу, Тукс! Применяем PowerShell в Linux

hacker_frei

https://t.me/hacker_frei

Андрей Попов

Содержание статьи

  • GUI и CLI
  • CLI в Linux
  • CLI в Windows
  • Объединение миров Windows и Linux
  • Установка и запуск
  • PowerShell как командная оболочка
  • Структура команд и псевдонимы
  • Доступность команд
  • Справочная система
  • Работа в командной строке
  • Выводы

«Сан­кции», «импорто­заме­щение» — эти сло­веч­ки в пос­леднее вре­мя все чаще встре­чают­ся в прес­се и сетевых пуб­ликаци­ях. Под дав­лени­ем обсто­ятель­ств некото­рые ком­пании перехо­дят на Linux и сво­бод­ное ПО. Ког­да работа­ешь в Linux или исполь­зуешь две опе­раци­онные сис­темы сра­зу, очень хочет­ся сох­ранить удоб­ное окру­жение и при­выч­ное средс­тво авто­мати­зации, роль которо­го в Windows игра­ет PowerShell. Мож­но ли пол­ноцен­но исполь­зовать его в Linux? Конеч­но, и сей­час мы раз­берем­ся, как.

GUI И CLI

С точ­ки зре­ния обыч­ного поль­зовате­ля, ОС — это гра­фичес­кая обо­лоч­ка для манипу­ляций с фай­ловой сис­темой компь­юте­ра и запус­ка раз­личных при­ложе­ний. Внеш­не опе­раци­онные сис­темы отли­чают­ся друг от дру­га нез­начитель­но, так как гра­фичес­кий интерфейс вез­де сос­тоит из одних и тех же эле­мен­тов (окна, кноп­ки, рас­кры­вающиеся спис­ки и про­чее), а фай­ловые сис­темы пос­тро­ены на одном прин­ципе вло­жен­ных катало­гов и фай­лов.

По­это­му работа с GUI-при­ложе­ниями в Windows и Linux выг­лядит оди­нако­во и инту­итив­но понят­на, основные опе­рации выпол­няют­ся стан­дар­тны­ми спо­соба­ми в более‑менее при­выч­ном интерфей­се.

Прод­винутые поль­зовате­ли и про­фес­сиона­лы для авто­мати­зации работы поль­зуют­ся еще одним инс­тру­мен­том, при­сутс­тву­ющим в любой дес­ктоп­ной опе­раци­онной сис­теме. Это коман­дный интер­пре­татор (обо­лоч­ка) и набор стан­дар­тных ути­лит, исполня­ющих­ся в кон­соль­ном режиме. Коман­дный интер­пре­татор реша­ет сра­зу две задачи:

  • вы­пол­нение команд, которые вво­дят­ся вруч­ную с помощью интерфей­са коман­дной стро­ки (Command Line Interface, CLI);
  • под­дер­жка язы­ка прог­рамми­рова­ния для соз­дания скрип­тов, исполня­емых в опе­раци­онной сис­теме.

В отли­чие от гра­фичес­кого интерфей­са, CLI-инс­тру­мен­ты нель­зя наз­вать инту­итив­ными. Нуж­но знать, какие имен­но коман­ды есть в опе­раци­онной сис­теме, с какими клю­чами их запус­кать, как мож­но ком­биниро­вать эти коман­ды для получе­ния тре­буемо­го резуль­тата.

Де­ло осложня­ется тем, что в Windows и Linux исполь­зуют­ся раз­ные коман­дные обо­лоч­ки со сво­ими набора­ми слу­жеб­ных команд. Это свя­зано как с прин­ципи­аль­ными отли­чиями в архи­тек­туре ОС, так и с исто­ричес­кими при­чина­ми.

CLI в Linux

В Linux работу с коман­дной стро­кой под­держи­вает та или иная модифи­кация ори­гиналь­ной обо­лоч­ки sh опе­раци­онной сис­темы Unix, обыч­но это Bash (Bourne again shell) или Zsh (Z shell).

Ко­ман­дная стро­ка в Linux

Фун­кци­ональ­ность этих коман­дных интер­пре­тато­ров и набор кон­соль­ных ути­лит базиру­ются на стан­дарте POSIX, соз­данном для обес­печения сов­мести­мос­ти раз­личных Unix-подоб­ных опе­раци­онных сис­тем. Поэто­му во всех модифи­каци­ях Linux (как и в опе­раци­онной сис­теме macOS) исполь­зуют­ся одни и те же коман­ды, которые мож­но соеди­нять друг с дру­гом в прог­рам­мные кон­вей­еры, ког­да текст из выход­ного потока одной ути­литы нап­равля­ется на вход дру­гой.

Мно­гие стан­дар­тные коман­ды Linux ори­енти­рова­ны на обра­бот­ку тек­ста (grepsedawksortcuttail), так как в Unix-подоб­ных опе­раци­онных сис­темах тек­сто­вые дан­ные при­нято исполь­зовать в качес­тве уни­вер­саль­ного пред­став­ления информа­ции, раз­личные сис­темные нас­трой­ки и кон­фигура­ции при­ложе­ний хра­нят­ся в обыч­ных тек­сто­вых фай­лах.

Еще один базовый прин­цип Unix, перешед­ший в Linux, выража­ется фра­зой «всё есть файл». Поэто­му одни и те же ути­литы мож­но исполь­зовать для работы как с обыч­ными тек­сто­выми фай­лами, так и с вир­туаль­ными фай­лами, пред­став­ляющи­ми собой каналы свя­зи прог­рамм друг с дру­гом, перифе­рий­ными устрой­ства­ми и устрой­ства­ми, эму­лиру­ющи­ми ядро опе­раци­онной сис­темы.

Та­ким обра­зом, нес­ложные задачи авто­мати­зации в Linux в ито­ге сво­дят­ся к манипу­ляци­ям с фай­ловой сис­темой и обра­бот­ке тек­ста с помощью име­ющих­ся в сис­теме стан­дар­тных команд. Такие задачи удоб­но решать, пос­ледова­тель­но при­меняя нес­коль­ко команд, объ­еди­нен­ных тек­сто­выми потока­ми в кон­вей­ер.

При­мер кон­вей­ера

Ти­пич­ный при­мер: необ­ходимо очис­тить каталог /tmp от фай­лов, которые стар­ше семи дней. Объ­еди­няем в кон­вей­ер коман­ду find для поис­ка фай­лов и коман­ду rm для их уда­ления:

find /tmp -type f -name '*' -mtime +7 -print0 | xargs -0 rm -f

В более слож­ных слу­чаях, ког­да парой кон­вей­еров не обой­тись, пишут сце­нарии на под­держи­ваемом обо­лоч­кой древ­нем коман­дно‑скрип­товом язы­ке, который никак нель­зя наз­вать удоб­ным и инту­итив­но понят­ным, или на одном из уни­вер­саль­ных интер­пре­тиру­емых язы­ков, самый популяр­ный из которых сей­час — Python.

CLI в Windows

Сов­ремен­ные вер­сии Windows базиру­ются на раз­работан­ной в начале 1990-х годов Windows NT, име­ющей, в отли­чие от Unix, API-ори­енти­рован­ную архи­тек­туру. Опе­раци­онные сис­темы это­го семей­ства сос­тоят из огромно­го чис­ла под­систем и ком­понен­тов, дос­туп к которым орга­низо­ван через спе­цифи­чес­кие API. Для упро­щения работы с такой слож­ной сис­темой управля­емые эле­мен­ты груп­пиру­ются в струк­туриро­ван­ные объ­екты.

В этом и сос­тоит прин­ципи­аль­ное отли­чие Windows от Unix-подоб­ных сис­тем, которые ори­енти­рова­ны на исполь­зование тек­ста для пред­став­ления все­го, что толь­ко мож­но. Инс­тру­мент для управле­ния Windows из коман­дной стро­ки дол­жен не толь­ко под­держи­вать работу с фай­ловой сис­темой и тек­сто­выми фай­лами, как в Unix-сис­темах, но и обес­печивать прос­той и еди­нооб­разный дос­туп к свой­ствам и методам мно­жес­тва внут­ренних объ­ектных моделей Windows (.NET Framework, WMI, WSH, ADSI, CDO и так далее).

Стан­дар­тный коман­дный интер­пре­татор cmd.exe, появив­ший­ся в Windows NT и бла­гопо­луч­но дожив­ший до пос­ледних вер­сий Windows, не имел такой воз­можнос­ти, его основной задачей было обес­печивать обратную сов­мести­мость с коман­дным интер­пре­тато­ром command.com пре­дыду­щей опе­раци­онной сис­темы MS-DOS, в которой не было никаких внут­ренних объ­ектных сис­тем. По воз­можнос­тям обо­лоч­ки cmd.exe и сос­таву сис­темных кон­соль­ных ути­лит Windows всег­да усту­пала Unix-подоб­ным сис­темам. Основные уси­лия раз­работ­чиков нап­равля­лись на улуч­шение гра­фичес­кой обо­лоч­ки, а не на коман­дную стро­ку.

Для решения этих проб­лем Microsoft в начале 2000-х раз­работа­ла новую обо­лоч­ку и сре­ду выпол­нения сце­нари­ев Windows PowerShell, которая впи­тала в себя удач­ные решения из дру­гих обо­лочек и скрип­товых язы­ков. PowerShell обес­печива­ет пря­мой дос­туп из коман­дной стро­ки к внут­ренним объ­ектам сис­темы и поз­воля­ет работать с раз­личны­ми источни­ками дан­ных (нап­ример, с сис­темным реес­тром или хра­нили­щем сер­тифика­тов) по прин­ципу фай­ловой сис­темы. Внут­ренний набор команд PowerShell мож­но допол­нять собс­твен­ными коман­дами, которые пол­ностью интегри­руют­ся в обо­лоч­ку.

От всех дру­гих обо­лочек коман­дной стро­ки PowerShell отли­чает глав­ная осо­бен­ность — ее ори­ента­ция на объ­екты. Коман­ды PowerShell, которые при­нято называть коман­дле­тами, вза­имо­дей­ству­ют друг с дру­гом не с помощью сим­воль­ных строк, а через объ­екты. Поэто­му работать в PowerShell ста­новит­ся про­ще, чем в тра­дици­онных обо­лоч­ках: не нуж­но допол­нитель­но ничего делать, что­бы выделить информа­цию из сим­воль­ного потока.

Пос­ледова­тель­ность коман­дле­тов

Нап­ример, нуж­но получить упо­рядо­чен­ный по количес­тву зат­рачен­ного про­цес­сорно­го вре­мени спи­сок про­цес­сов, иден­тифика­торы которых боль­ше 1000. Это дела­ется кон­вей­ером из трех команд, наз­начение которых оче­вид­но из их наз­ваний:

Get-Process | Where-Object Id -gt 1000 | Sort-Object cpu -Descending

Для под­дер­жки объ­ектов раз­работ­чики PowerShell вос­поль­зовались объ­ектной моделью .NET Framework. Таким обра­зом, язык PowerShell отно­сит­ся к .NET-язы­кам прог­рамми­рова­ния (как C#), и при этом он совер­шенно не похож на дру­гие. Это коман­дно‑скрип­товый язык, поз­воля­ющий сов­мещать в сце­нари­ях импе­ратив­ный и дек­ларатив­ный сти­ли прог­рамми­рова­ния.

Объединение миров Windows и Linux

Итак, в Windows и Linux живут совер­шенно раз­ные коман­дные обо­лоч­ки, одна­ко ста­рани­ями Microsoft ста­ло воз­можным работать с при­выч­ной для себя обо­лоч­кой в любой сис­теме:

  • Bash в Windows. С помощью под­систе­мы WSL (Windows Subsystem for Linux) мож­но уста­новить из Microsoft Store один из дис­три­бути­вов Linux и поль­зовать­ся его коман­дной обо­лоч­кой для работы с фай­ловой сис­темой Windows или запус­ка Windows-ути­лит. Так­же в этом слу­чае мож­но будет запус­кать ути­литы Linux в коман­дной стро­ке Windows.
  • PowerShell в Linux. В 2017 году Microsoft откры­ла исходный код PowerShell, теперь это Open Source про­ект (вот ре­пози­торий на GitHub). Обо­лоч­ка, исполь­зующая .NET Core, ста­ла кросс‑плат­формен­ной, с ней мож­но работать в раз­личных дис­три­бути­вах Linux (Debian, Ubuntu, CentOS, Red Hat, openSUSE, Fedora) и в macOS.

Вна­чале кросс‑плат­формен­ная вер­сия обо­лоч­ки называ­лась PowerShell Core 6, что­бы явно ука­зать ее зависи­мость от .NET Core. Начиная с седь­мой вер­сии сло­во Core из наз­вания убра­ли, теперь обо­лоч­ка носит имя прос­то PowerShell. Вер­сия обо­лоч­ки, базиру­ющаяся на пол­ной плат­форме Windows .NET Framework, называ­ется Windows PowerShell. 

УСТАНОВКА И ЗАПУСК

Ус­танов­ка PowerShell зависит от типа опе­раци­онной сис­темы и ее вер­сии, соот­ветс­тву­ющие инс­трук­ции име­ются на сай­те Microsoft. Нап­ример, для уста­нов­ки PowerShell в опе­раци­онной сис­теме Linux Ubuntu 20.04 нуж­но выпол­нить сле­дующие коман­ды:

sudo apt-get update

sudo apt-get install -y wget apt-transport-https software-properties-common

wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

sudo apt-get update

sudo add-apt-repository universe

sudo apt-get install -y powershell

Что­бы запус­тить уста­нов­ленную обо­лоч­ку PowerShell, выпол­ним в тер­минале коман­ду pwsh. Пос­ле вывода информа­ции о вер­сии PowerShell мы получим обыч­ное приг­лашение коман­дной стро­ки с путем к текуще­му катало­гу в качес­тве пре­фик­са.

PowerShell в Linux

POWERSHELL КАК КОМАНДНАЯ ОБОЛОЧКА

Для эффектив­ной и удоб­ной работы в коман­дной стро­ке важ­ны два момен­та.

  1. Нуж­но знать наз­вания команд и их клю­чей. Запом­нить их будет про­ще, если син­таксис команд инту­итив­но понятен и одно­роден. Если мы не пом­ним клю­чи у коман­ды, то дол­жна быть воз­можность быс­тро най­ти справ­ку по этой коман­де и при­меры ее исполь­зования.
  2. Са­ми коман­ды и их клю­чи дол­жны быть крат­кими и удоб­ными для быс­тро­го набора на кла­виату­ре. Обо­лоч­ка дол­жна под­держи­вать механиз­мы авто­допол­нения, поис­ка и пов­тора выпол­нявших­ся ранее команд.

Ес­ли со вто­рым пун­ктом у стан­дар­тных обо­лочек Linux все хорошо, то пох­валить­ся понят­ностью имен и клю­чей команд они не могут: наз­вания мно­гих ути­лит пред­став­ляют собой аббре­виату­ры, при­думан­ные еще в 1960-е годы, а одни и те же клю­чи в раз­ных коман­дах могут иметь раз­ный смысл. В PowerShell такой проб­лемы нет.

Структура команд и псевдонимы

В PowerShell име­на всех внут­ренних команд соот­ветс­тву­ют шаб­лону «дей­ствие‑объ­ект», нап­ример Get-Process (получить информа­цию о про­цес­се), Get-Content (получить содер­жимое фай­ла), Clear-Host (очис­тить экран). Для оди­нако­вых парамет­ров команд исполь­зуют­ся стан­дар­тные име­на, струк­тура парамет­ров во всех коман­дах иден­тична, все коман­ды обра­баты­вают­ся одним син­такси­чес­ким ана­лиза­тором. Это дела­ет семан­тику команд оче­вид­ной и зна­читель­но упро­щает запоми­нание и исполь­зование команд PowerShell.

С дру­гой сто­роны, иног­да PowerShell руга­ют имен­но за этот мно­гос­ловный и необыч­ный для дру­гих обо­лочек син­таксис. Нап­ример, нам нуж­но соз­дать в текущем катало­ге пус­той файл 1.txt. В Bash это дела­ется коман­дой touch из пяти букв:

~ touch 1.txt

При соз­дании фай­ла в PowerShell с помощью коман­ды New-Item с парамет­рами пот­ребу­ется ввес­ти боль­ше двад­цати сим­волов.

Соз­дание фай­ла 1.txt c помощью коман­ды New-Item

Выг­лядит ужас­но, прав­да? Но того же резуль­тата мож­но добить­ся, наб­рав коман­ду ni все­го из двух сим­волов.

Соз­дание фай­ла 2.txt c помощью коман­ды ni

Ко­ман­да ni — это стан­дар­тный псев­доним для New-Item (сок­ращение по пер­вым бук­вам слов коман­ды), зна­чение File для парамет­ра -Type исполь­зует­ся по умол­чанию, имя парамет­ра -Path мож­но опус­тить.

Та­ким обра­зом, стан­дар­тные псев­донимы PowerShell, пол­ный спи­сок которых мож­но получить с помощью коман­ды Get-Alias, помога­ют быс­тро вво­дить коман­ды и соз­давать ком­пак­тные и лаконич­ные кон­вей­еры из нес­коль­ких команд.

По­луче­ние пол­ного спис­ка псев­донимов c помощью коман­ды Get-Alias

От­метим, что в Windows PowerShell за некото­рыми коман­дле­тами зак­репле­ны псев­донимы, соот­ветс­тву­ющие стан­дар­тным коман­дам Unix-подоб­ных сис­тем: lsrmcpmvcatpsmanmount. В PowerShell 6/7 дан­ные псев­донимы не опре­деле­ны, их ввод при­ведет к выпол­нению «род­ных» команд Linux. 

Доступность команд

В .NET Core/.NET 5 реали­зова­на не вся фун­кци­ональ­ность плат­формы .NET Framework, поэто­му в PowerShell 6/7 по умол­чанию заг­ружа­ется мень­ше модулей и будет дос­тупно мень­ше команд, чем в Windows PowerShell. Нап­ример, под Linux недос­тупны коман­ды *-Service, *-Acl, *-Event, Set-ExecutionPolicy.

Часть из отсутс­тву­ющих модулей нап­рямую свя­заны с осо­бен­ностя­ми опе­раци­онной сис­темы Windows и не могут быть перене­сены на дру­гие плат­формы (так, в PowerShell для Linux отсутс­тву­ют про­вай­деры и вир­туаль­ные дис­ки для сис­темно­го реес­тра и хра­нили­ща сер­тифика­тов), некото­рые модули могут быть добав­лены в сле­дующих вер­сиях PowerShell.

При работе с PowerShell в Linux необ­ходимо учи­тывать осо­бен­ности опе­раци­онной сис­темы.

  • За­виси­мость от регис­тра сим­волов. Сама обо­лоч­ка PowerShell, как и опе­раци­онная сис­тема Windows, не зависит от регис­тра сим­волов. Нап­ример, име­на $a и $A обоз­нача­ют одну и ту же перемен­ную, наз­вание коман­дле­тов мож­но писать в любом регис­тре (Get-Processget-process или GET-PROCESS), в путях к фай­лам и катало­гам в Windows тоже мож­но исполь­зовать сим­волы в раз­ных регис­трах (C:\Windows, c:\windows или C:\WINDOWS). Нап­ротив, в Linux важен регистр сим­волов в путях к катало­гам и фай­лам или в име­нах перемен­ных сре­ды. Поэто­му для запус­ка сце­нари­ев, заг­рузки модулей и кор­рек­тной работы авто­допол­нения фай­ловых путей в этих сис­темах нуж­но писать точ­ные име­на с уче­том регис­тра сим­волов. Наз­вания самих коман­дле­тов и перемен­ных PowerShell по‑преж­нему от регис­тра не зависят.
  • Раз­делите­ли в путях фай­ловой сис­темы. В Windows в качес­тве раз­делите­лей в путях к фай­лам и катало­гам мож­но исполь­зовать сим­волы сле­ша / и обратно­го сле­ша . В Linux исполь­зует­ся толь­ко сим­вол сле­ша /.
  • За­пуск команд от име­ни супер­поль­зовате­ля (sudo). Для выпол­нения какой‑либо одной коман­ды с при­виле­гиями супер­поль­зовате­ля root в обо­лоч­ке Linux исполь­зует­ся коман­да sudo. В сеан­се работы PowerShell нап­рямую при­менить sudo не получит­ся, нуж­но с ее помощью запус­тить новый экзем­пляр обо­лоч­ки, и все коман­ды PowerShell будут выпол­нять­ся от име­ни супер­поль­зовате­ля.

Справочная система

При работе с инте­рак­тивной коман­дной обо­лоч­кой важ­но иметь под рукой под­робную и удоб­ную спра­воч­ную сис­тему с опи­сани­ем воз­можнос­тей команд и при­мера­ми их при­мене­ния. В PowerShell такая сис­тема име­ется, в Linux она работа­ет так же, как в Windows, с помощью коман­ды Get-Help.

Спра­воч­ная сис­тема

Под­робная спра­воч­ная информа­ция о коман­дах PowerShell (опи­сания каж­дого из парамет­ров коман­ды, раз­личные замеча­ния и при­меры запус­ка коман­ды с раз­личны­ми парамет­рами и аргу­мен­тами) хра­нит­ся в интерне­те на сай­тах Microsoft. С помощью коман­ды Update-Help мож­но заг­рузить спра­воч­ные фай­лы на свою машину, что­бы обра­щать­ся к ним быс­трее:

Update-Help -Force -UICulture en-US

От­метим, что коман­длет Get-Help поз­воля­ет прос­матри­вать спра­воч­ную информа­цию не толь­ко о раз­ных коман­дах, но и о син­такси­се язы­ка PowerShell, о псев­донимах, фун­кци­ях, скрип­тах и дру­гих аспектах работы обо­лоч­ки. Спи­сок тем, обсужде­ние которых пред­став­лено в спра­воч­ной служ­бе PowerShell, мож­но уви­деть с помощью коман­ды Get-Help about_*.

Вы­вод коман­ды Get-Help about_

Работа в командной строке

При запус­ке PowerShell авто­мати­чес­ки заг­ружа­ется модуль PSReadLine, обес­печива­ющий удоб­ную инте­рак­тивную работу в коман­дной стро­ке.

Наз­вания коман­дле­тов, парамет­ров и перемен­ных, клю­чевые конс­трук­ции и дру­гие эле­мен­ты язы­ка PowerShell при вво­де в коман­дную стро­ку отоб­ража­ются раз­ными цве­тами. Если при наборе коман­ды получа­ется син­такси­чес­ки невер­ная конс­трук­ция (нап­ример, мы забыли пос­тавить зак­рыва­ющую скоб­ку или не написа­ли коман­ду пос­ле зна­ка кон­вей­ера), то пос­ледний знак > в приг­лашении коман­дной стро­ки ста­новит­ся крас­ным.

Мы где‑то ошиб­лись

В PowerShell под­держи­вает­ся авто­мати­чес­кое завер­шение имен команд, их парамет­ров и путей к фай­лам и катало­гам. Для это­го исполь­зует­ся кла­виша Tab. Нап­ример, если наб­рать сим­волы get-p и нажать Tab, то в коман­дной стро­ке появит­ся коман­да Get-Process.

Ес­ли для завер­шения воз­можны нес­коль­ко вари­антов, то они будут выведе­ны все, а ввод коман­ды про­дол­жится. Таким обра­зом, при вво­де коман­ды мож­но узнать все ее воз­можные парамет­ры, даже не обра­щаясь к спра­воч­ной сис­теме (в стан­дар­тных обо­лоч­ках Linux такой воз­можнос­ти нет).

Прос­мотр парамет­ров при вво­де коман­ды

Ес­ли ты пом­нишь толь­ко часть коман­ды (необя­затель­но сна­чала), то по ней мож­но най­ти под­ходящие вари­анты сре­ди тех команд, которые выпол­нялись в обо­лоч­ке рань­ше. По умол­чанию инте­рак­тивный поиск в таком режиме акти­виру­ется нажати­ем кла­виш Ctrl + r (поиск по исто­рии команд назад) или Ctrl + s (поиск по исто­рии команд впе­ред).

По­иск по исто­рии команд

При наборе коман­ды PowerShell может cра­зу выдавать под­ходящий вари­ант из спис­ка вво­див­шихся команд, который мож­но при­нять одним нажати­ем стрел­ки впра­во. Акти­виру­ется этот режим сле­дующей коман­дой: Set-PSReadLineOption -PredictionSource 'History'.

Вклю­чение режима авто­завер­шения вво­да команд

Те­кущие сочета­ния кла­виш, наз­начен­ные в PSReadLine для выпол­нения дей­ствий, мож­но пос­мотреть с помощью коман­ды Get-PSReadlineKeyHandler.

Прос­мотр текуще­го спис­ка горячих кла­виш

Из­менить сочета­ния кла­виш поз­воля­ет коман­да Set-PSReadlineKeyHandler. Нап­ример, наз­начим кла­вишам со стрел­ками вверх и вниз фун­кции HistorySearchBackward (поиск назад по исто­рии команд) и HistorySearchForward (поиск впе­ред по исто­рии команд) соот­ветс­твен­но.

Пе­реназ­начение горячих кла­виш

Те­перь мож­но будет под­став­лять в коман­дную стро­ку коман­ды из исто­рии, наб­рав в коман­дной стро­ке их началь­ные сим­волы и нажимая стрел­ку вверх или вниз.

Что­бы не набирать при каж­дом запус­ке PowerShell коман­ды для нас­трой­ки PSReadLine, их нуж­но помес­тить в свой про­филь — это скрипт, который авто­мати­чес­ки выпол­няет­ся при каж­дом запус­ке PowerShell. Путь к про­филю хра­нит­ся в перемен­ной $PROFILE.

Скрипт $PROFILE

ВЫВОДЫ

Обо­лоч­ка PowerShell впол­не при­год­на для ком­фор­тно­го исполь­зования в Linux, осо­бен­но если ты уже работал с ней в Windows, при­вык к объ­ектной при­роде этой обо­лоч­ки, оце­нил ее воз­можнос­ти и осо­бен­ности. В сос­тав PowerShell вхо­дит мно­жес­тво стан­дар­тных коман­дле­тов, в том чис­ле для работы с фай­ловой сис­темой, струк­туриро­ван­ными дан­ными (в фор­матах CSV и JSON) и веб‑ресур­сами по про­токо­лу HTTP.

Кро­ме внут­ренних коман­дле­тов, в обо­лоч­ке мож­но выпол­нять любые кон­соль­ные ути­литы, уста­нов­ленные в опе­раци­онной сис­теме. Поэто­му получит­ся ком­биниро­вать воз­можнос­ти команд Linux с собс­твен­ными механиз­мами PowerShell (кон­вей­ерная обра­бот­ка объ­ектов, гиб­кая сис­тема фор­матиро­вания выводи­мой информа­ции, обра­бот­ка воз­ника­ющих оши­бок), а так­же поль­зовать­ся всей фун­кци­ональ­ностью биб­лиотек плат­формы .NET Core/.NET 5 (нап­ример, для обра­бот­ки сим­воль­ной информа­ции или работы с датами и вре­менем).

От­дель­ного вни­мания зас­лужива­ют скрип­ты PowerShell. Для авто­мати­зации работы в Linux необя­затель­но углублять­ся в деб­ри Bash-скрип­тинга или отка­зывать­ся от удобств и прос­тоты коман­дно­го язы­ка, пол­ностью перехо­дя на Python. Если ты уже писал скрип­ты PowerShell в Windows, то и в Linux смо­жешь поль­зовать­ся сво­ими наработ­ками и соз­давать новые решения.

Осо­бых отли­чий в скрип­тах PowerShell для раз­ных плат­форм нет, одна­ко интегри­рован­ная сре­да для раз­работ­ки PowerShell ISE дос­тупна толь­ко в PowerShell для Windows, в сос­тав PowerShell 6/7 она не вхо­дит. Для раз­работ­ки скрип­тов в Linux Microsoft рекомен­дует исполь­зовать редак­тор Visual Studio Code с рас­ширени­ем для под­дер­жки язы­ка PowerShell.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei




Report Page