15 января, 2012

Как линуксоиду выжить в Windows

Человеку, хорошо знающему Bash или другой UNIX-shell, при работе с Windows не хватает привычных утилит. К счастью есть PowerShell. Это не Bash или csh, он не привычен и не столь удобен, но позволяет выполнить некоторые полезные операции. Этот пост будет моей памяткой по PowerShell, надеюсь он окажется полезен ещё кому-нибудь.

grep, что может быть лучше для поиска нужной строки в логах? А как же Windows? А в Windows есть Select-String:

select-string "TO: " C:\Windows\System32\LogFiles\SMTPSVC1\in120113.log

А теперь вариант похуже, скорее для расширения кругозора. Используем Where-Object (он же ? и where, об алиасах немного позже)

cat C:\Windows\System32\LogFiles\SMTPSVC1\in120113.log | ? {$_ -match "TO: "}

Переменная $_ тут является аналогом одноимённый переменной в Perl. cat это алиас для Get-Content (алиасы: cat, gc, type)

Замечательно, а как же grep -R? Тут всё немного сложнее, нам понадобится Get-ChildItem (он же ls, dir и gci)

ls -Recurse -Include *.config C:\inetpub\wwwroot | select-string SMTP

В PowerShell мы не найдём ключа -h и команд man и info. Найти выход поможет Get-Help (он же help)

help ls

Выше уже упоминались алиасы, получить их список в рамках текущей сессии поможет Get-Alias, можно выполнять и обратный поиск:

Get-Alias -Definition Get-Alias

это команда подскажет, что у Get-Alias есть более короткое написание - gal. Создать свои алиасы поможет Set-Alias.

sed, как же его не хватает. Как написать тетрис не знаю, приведу лишь вариант с заменой с помощью ForEach-object (он же % и foreach)

cat somefile.txt | % {$_ -replace "foo","bar"}

head, tail - нам поможет Select-Object (он же select):

cat somefile.txt | select -First 10
cat somefile.txt | select -Last 10

Далее сводная таблица:

UnixPowerShellпримечание
grep -i pattern [file ...]Select-String pattern [file,...] Несколько файлов нужно указывать через запятую, а не через пробел, как в UNIX
grep pattern [file]Select-String -CaseSensitive pattern [file]
grep -iR --include=match pattern ls -Recurse -Include match | Select-String patten
cat [file ...]cat [file,...]
wcmeasure -Line -Word -Character
aliasGet-Alias
passwd username$user = [adsi]"WinNT://hostname/username,user"
$user.SetPassword("password")
envGet-Variable

Пока всё...

Комментариев нет:

Отправить комментарий