anonymous@RULINUX.NET~# Last login: 2024-06-01 03:20:03
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Это свершилось!

Ура! Мы ждали этого события 10 лет. PowerShell от Microsoft стал opensource-проектом на GitHub под лицензией MIT, его теперь можно установить на Ubuntu 16.04 и другие линуксы. Это событие также осветилось в студийных СМИ и на msdn.

Почему PoserShell нас так волнует?

But what can you do with it?  Well, you might remember that whole .NET Framework thing - basically Microsoft's modern windows API.  Turns out, you can do *literally* anything the framework can, with a little effort. That' fine and dandy, but what can you do easily and well?

Almost everything. See, between .NET and WMI and few other things, Microsoft has abstracted out the entire operating system into objects we can work with, and written PS stuff that manages it.

So pretty much every Microsoft product can me talked to / managed from / poked with via Powershell. And so can most things on top of it by major vendors. VMWare (which has Python options too of course) for example.

I wanted to hate PowerShell. I did at first, and then I didn't. But, now I do again. Want to know why?

I hate PowerShell, because it's not available for Linux, and I've realized part of why it can't be available for Linux. PowerShell exposed me to how "unified" Windows is (or can be made to seem), and how heterogenous Linux is.


Powershell унифицирует использование .Net, WMI, консольных утилит Windows, API продуктов Microsoft и сторонних производителей в манере .Net. А теперь еще и скриптовое администрирование Windows, MacOS и Linux.

AMUR-WOLF(*) (2016-08-27 16:49:56)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Пример использования. В философии bash вы запускаете утилиту, передаете ей в качестве параметра строку, и на выходе имеете строку. В философии PowerShell вы запускаете утилиту, передаете ей объект, и на выходе получаете объект. Всегда.

Например, запустим интерпретатор Питон с параметром:

text

PS /home/dmn/Загрузки> python -c "print('Hi!')"
Hi!
 


Ок. Питон вернул нам объект. Давайте сохраним вывод Питона в переменную, а потом посмотрим на все доступные методы и свойства этого объекта:
text

PS /home/dmn/Загрузки> $data = python -c "print('Hi!')"                        
PS /home/dmn/Загрузки> $data                                                    
Hi!
PS /home/dmn/Загрузки> $data | get-member                                      


   TypeName: System.String

Name             MemberType            Definition                              
----             ----------            ----------                              
CompareTo        Method                int CompareTo(System.Object value), i...
Contains         Method                bool Contains(string value)            
CopyTo           Method                void CopyTo(int sourceIndex, char[] d...
EndsWith         Method                bool EndsWith(string value), bool End...
Equals           Method                bool Equals(System.Object obj), bool ...
GetEnumerator    Method                System.Collections.IEnumerator IEnume...
GetHashCode      Method                int GetHashCode()                      
GetType          Method                type GetType()                          
GetTypeCode      Method                System.TypeCode GetTypeCode(), System...
IndexOf          Method                int IndexOf(char value), int IndexOf(...
IndexOfAny       Method                int IndexOfAny(char[] anyOf), int Ind...
Insert           Method                string Insert(int startIndex, string ...
LastIndexOf      Method                int LastIndexOf(char value), int Last...
LastIndexOfAny   Method                int LastIndexOfAny(char[] anyOf), int...
PadLeft          Method                string PadLeft(int totalWidth), strin...
PadRight         Method                string PadRight(int totalWidth), stri...
Remove           Method                string Remove(int startIndex, int cou...
Replace          Method                string Replace(char oldChar, char new...
Split            Method                string[] Split(Params char[] separato...
StartsWith       Method                bool StartsWith(string value), bool S...
Substring        Method                string Substring(int startIndex), str...
ToBoolean        Method                bool IConvertible.ToBoolean(System.IF...
ToByte           Method                byte IConvertible.ToByte(System.IForm...
ToChar           Method                char IConvertible.ToChar(System.IForm...
ToCharArray      Method                char[] ToCharArray(), char[] ToCharAr...
ToDateTime       Method                datetime IConvertible.ToDateTime(Syst...
ToDecimal        Method                decimal IConvertible.ToDecimal(System...
ToDouble         Method                double IConvertible.ToDouble(System.I...
ToInt16          Method                int16 IConvertible.ToInt16(System.IFo...
ToInt32          Method                int IConvertible.ToInt32(System.IForm...
ToInt64          Method                long IConvertible.ToInt64(System.IFor...
ToLower          Method                string ToLower(), string ToLower(cult...
ToLowerInvariant Method                string ToLowerInvariant()              
ToSByte          Method                sbyte IConvertible.ToSByte(System.IFo...
ToSingle         Method                float IConvertible.ToSingle(System.IF...
ToString         Method                string ToString(), string ToString(Sy...
ToType           Method                System.Object IConvertible.ToType(typ...
ToUInt16         Method                uint16 IConvertible.ToUInt16(System.I...
ToUInt32         Method                uint32 IConvertible.ToUInt32(System.I...
ToUInt64         Method                uint64 IConvertible.ToUInt64(System.I...
ToUpper          Method                string ToUpper(), string ToUpper(cult...
ToUpperInvariant Method                string ToUpperInvariant()              
Trim             Method                string Trim(Params char[] trimChars),...
TrimEnd          Method                string TrimEnd(Params char[] trimChars)
TrimStart        Method                string TrimStart(Params char[] trimCh...
Chars            ParameterizedProperty char Chars(int index) {get;}            
Length           Property              int Length {get;}
 


Ок. Давайте разобъем строку на две, используя разделитель 'i'. Очевидно, нам нужно вызвать метод 'Split':
text

PS /home/dmn/Загрузки> $data.Split("{i}")
H
!
 

AMUR-WOLF(*)(2016-08-27 17:48:12)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Чтобы с удобством писать скрипты на Powershell в Linux, можно установить IDE 'Visual Studio Code' и в нем установить плагин для программирования PowerShell.

AMUR-WOLF(*)(2016-08-27 18:17:25)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Пример администрирования в Linux. Скрипт:

text

# Скрипт считает ошибки в логах
#------------------------------

# Очищаем экран
Clear-Host

$Directory = "/var/log"
$Phrase = "error"

# Получаем массив объектов, описывающих файлы логов в
# директории /var/log и его поддиректориях
$Files = Get-Childitem $Directory -recurse -Include *.log `
    -ErrorAction SilentlyContinue

# Ищем строки, содержащие "Error",
# группируем строки по имени файла, их содержащего
# сортируем вывод групп на экран по количеству
# строк с ошибками в порядке убывания
$Files | Select-String $Phrase -ErrorAction SilentlyContinue `
    | Group-Object filename | Sort-Object count -descending
 


Результат:
text

Count Name                      Group                                          
----- ----                      -----                                          
  340 kern.log                  {/var/log/kern.log:15:Aug 22 11:45:30 dmn-As...
   12 unattended-upgrades.log   {/var/log/unattended-upgrades/unattended-upg...
    8 dpkg.log                  {/var/log/dpkg.log:264:2016-07-19 20:42:24 i...
    4 bootstrap.log             {/var/log/bootstrap.log:356:Selecting previo...
    1 term.log                  {/var/log/apt/term.log:3046:DATA/SFX/drag_er...
    1 gpu-manager.log           {/var/log/gpu-manager.log:29:Error: can't ac...
    1 Xorg.0.log                {/var/log/Xorg.0.log:15:        (WW) warning, (EE) ...
 

AMUR-WOLF(*)(2016-08-27 19:06:38)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-27 19:06:38
avatar
Скрыть

Re:Это свершилось!

> $Directory = "/var/log"
> # Получаем массив объектов, описывающих файлы логов в
> # директории /var/log и его поддиректориях
> $Files = Get-Childitem $Directory -recurse -Include *.log ` -ErrorAction SilentlyContinue

Я не понял, "/var/log" - это же объект типа строки, с чего повершелл взял что надо директорию по этому пути рекурсить?

anonymous(*)(2016-08-27 19:18:36)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 19:18:36
avatar
Скрыть

Re:Это свершилось!

$Files = Get-Childitem $Directory -recurse

Командлет Get-Childitem ищет дочерние элементы указанной директории. В качестве первого входного параметра (который обязательный) я передал ему объект класса System.string, описывающий строку "/var/log", поэтому командлет ищет по тому адресу. В качестве второго входного параметра (необязательный) я передал ему ключ -recurse, поэтому командлет ищет рекурсивно. Третий параметр, -Include *.log, задает фрагмент, который должен содержаться в полном имени дочерних файлов, то есть ищем все файлы с расширением log.

AMUR-WOLF(*)(2016-08-27 19:28:22)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

> теперь можно установить на Ubuntu 16.04 и другие линуксы.
А зайчем?

anonymous(*)(2016-08-27 19:35:17)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 19:35:17
avatar
Скрыть

Re:Это свершилось!

>> теперь можно установить на Ubuntu 16.04 и другие линуксы.
>А зайчем?
А затем, что sh, bash и прочие линуксовые шеллы морально устарели.

AMUR-WOLF(*)(2016-08-27 19:38:30)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-27 19:28:22
avatar
Скрыть

Re:Это свершилось!

> Командлет Get-Childitem ищет дочерние элементы указанной директории.

The Get-ChildItem cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get items in all child containers.

Совершенно неочевидное поведение. Строка - это контейнер букв. Вот если бы ты передал объект класса "Directory" или "Filesystem" я бы ещё понял. Но вот так вот огульно взять и принять строку за путь в файловой системе и возвращать дочерние элементы не переданного объекта, а ФС - нет, это надо сразу закопать такой шелл я считаю.

anonymous(*)(2016-08-27 19:42:29)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 19:42:29
avatar
Скрыть

Re:Это свершилось!

> Вот если бы ты передал объект класса "Directory" или "Filesystem" я бы ещё понял. Но вот так вот огульно взять и принять строку за путь в файловой системе и возвращать дочерние элементы не переданного объекта, а ФС - нет, это надо сразу закопать такой шелл я считаю.
Если для тебя это проблема, то это проблема не шелла, а командлета Get-ChildItem. PowerShell не есть сумма командлетов, с которыми его распространяют. Напиши правильный аналогичный командлет, который будет принимать объект, описывающий директорию.

AMUR-WOLF(*)(2016-08-27 19:57:49)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-27 19:57:49
avatar
Скрыть

Re:Это свершилось!

Ну ты же сам понимаешь, что никто не станет заниматься дублированием функциональности и повершелл так навсегда и останется уёбищным убунтопакетом.

anonymous(*)(2016-08-27 20:05:41)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 20:05:41
avatar
Скрыть

Re:Это свершилось!

> Ну ты же сам понимаешь, что никто не станет заниматься дублированием функциональности и повершелл так навсегда и останется уёбищным убунтопакетом.
Конечно. Никто больше не видит проблемы в том командлете. Вполне интуитивная реализация. А если не интуитивная, то справка по нему легко ищется командлетом Get-Help:

text

PS /home/dmn/Загрузки> Get-Help Get-ChildItem                                                                                                                                          

NAME
    Get-ChildItem
   
SYNOPSIS
    Gets the items and child items in one or more specified locations.
   
   
SYNTAX
    Get-ChildItem [[-Path] <String[]>] [[-Filter] <String>] [-Exclude <String[]>] [-Force] [-Include <String[]>] [-Name] [-Recurse] [-UseTransaction <SwitchParameter>] [<CommonParameters>]
   
    Get-ChildItem [[-Filter] <String>] [-Exclude <String[]>] [-Force] [-Include <String[]>] [-Name] [-Recurse] -LiteralPath <String[]> [-UseTransaction <SwitchParameter>] [<CommonParameters>]
   
   
DESCRIPTION
    The Get-ChildItem cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get items in all child containers.
   
    A location can be a file system location, such as a directory, or a location exposed by a different Windows PowerShell provider, such as a registry hive or a certificate store.
   

RELATED LINKS
    Online Version: http://go.microsoft.com/fwlink/?LinkId=821580
    Get-Item
    Get-Location
    Get-Process
    Get-PSProvider

REMARKS
    To see the examples, type: "get-help Get-ChildItem -examples".
    For more information, type: "get-help Get-ChildItem -detailed".
    For technical information, type: "get-help Get-ChildItem -full".
    For online help, type: "get-help Get-ChildItem -online"
 


AMUR-WOLF(*)(2016-08-27 20:16:18)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 20:05:41
avatar
Скрыть

Re:Это свершилось!

> уёбищным убунтопакетом.
> Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
Федороёб, хех. Юзай дальше свой унылый аутсайдерский дистр.

AMUR-WOLF(*)(2016-08-27 20:19:42)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-27 20:19:42
avatar
Скрыть

Re:Это свершилось!

Ладно, ту строчку правильнее было написать так:

text

$Files = Get-Childitem -Path $Directory -recurse -Include *.log -ErrorAction SilentlyContinue
 


Поскольку обязательный параметр там единственный, то -Path можно не писать, и так всё ясно.

AMUR-WOLF(*)(2016-08-27 20:27:15)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

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

Традиционные текстовые шеллы затрудняют анализ потому, что всё есть текст. Текст - это замечательно, что вы видите, то вы и получаете. К несчастью, что вы видите - это всё, что вы получаете. Вы не можете легко проводить с текстом трюки, какие вы можете проводить с объектами PowerShell. Например, в традиционном шелле вы получили набор описаний файлов, включающий дату создания, размер и полное имя:

text

02/26/2004 10:58 PM    45,452 Q810833.log
02/26/2004 10:59 PM    43,808 Q810834.log
02/26/2004 11:03 PM    48,684 Q810835.log
 


Чтобы выделить из этого текста даты создания, вам придется парсить эту хрень. Это занятие усложняется еще и тем, что в разных локалях дата будет представлена по-разному. Вместо '/' будет '.' или ',', а год будет стоять первым, или день будет перед месяцем, или еще как-нибудь.

В PowerShelle задача парсинга встречается редко потому, что отдельные свойства вывода можно получать через методы и свойства объектов вывода. Причем, если в $file вы запишите вывод командлета, возвращающего объекты файлов, то $file.CreationDate вернет вам не текст, а объект типа DateTime, с которым возможны свои трюки.

Пример работы с DateTime:
text

PS /home/dmn/Загрузки> $now = Get-Date                                                    
PS /home/dmn/Загрузки> $now                                                                

Воскресенье, 28 августа 2016 г. 3:03:51


PS /home/dmn/Загрузки> $now.year                                                          
2016
PS /home/dmn/Загрузки> $now.month                                                          
8
PS /home/dmn/Загрузки> $now.day                                                            
28
PS /home/dmn/Загрузки> $now.ToString()                                                    
28.08.16 3:03:51
PS /home/dmn/Загрузки> $now.AddDays(-1)                                                    

Суббота, 27 августа 2016 г. 3:03:51


PS /home/dmn/Загрузки> $now.AddDays(-2)                                                    

Пятница, 26 августа 2016 г. 3:03:51


PS /home/dmn/Загрузки> $oneWeekAgo =  $now.AddDays(-7)                                    
PS /home/dmn/Загрузки> $oneWeekAgo -lt $now  # lt = 'less then'                            
True
 

AMUR-WOLF(*)(2016-08-27 21:11:55)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

И какие там зависимости (в мире ляликса)?

Vasily(*)(2016-08-27 23:25:56)

Mozilla/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko/20100101 Firefox/40.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-27 19:38:30
avatar
Скрыть

Re:Это свершилось!

> А затем, что sh, bash и прочие линуксовые шеллы морально устарели.
Это чем же?))) Все что ты здесь нам показывал, гораздо практичнее сделать на том же питоне, если уж на баше не получается)))

anonymous(*)(2016-08-27 23:34:46)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 23:34:46
avatar
Скрыть

Re:Это свершилось!

Если так нужен невменяемый шелл, то недавно представили питоношелл который заменяет баш. Не помню как называется.

Dr.uid(*)(2016-08-28 00:21:54)

Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-27 21:11:55Фильтры
avatar
  • матерные выражения
Скрыть

Re:Это свершилось!

> Get-Help Get-ChildItem

Кстати непонятно зачем там минусы вставлены в каждую команду.

text
DESCRIPTION
    The Get-ChildItem cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get items in all child containers.
   
    A location can be ЧТО УГОДНО, был бы провайдырь
 


Короче, трудно предугадать что там с этой строкой будет..



text


PS /home/dmn/Загрузки> $now = Get-Date                                                    
PS /home/dmn/Загрузки> $now                                                                

Воскресенье, 28 августа 2016 г. 3:03:51
/home/dmnЗагрузки>$now.ToString()                                                    
28.08.16 3:03:51
 


Во-первых вот это вот "> $now" мне категорически не нравится что шелл сам принял решение напечатать дату. А что если там будет строка вида "rm -rf /" - шелл поймет что это не дата, а команда, которую надо выполнить? А читатель кода поймёт, что это ты просто случайно enter перед именем переменной воткнул?

Во-вторых, мне непонятно почему дата печатается в формате, отличном от того, что возвращает метод ToString(). Такое ощущение, что этот павершелл писали какие-то ебанутые на всю голову дауны, которых к этому принудили клоуны.

anonymous(*)(2016-08-28 02:05:49)
Отредактировано anonymous по причине "не указана"
Mozilla/5.0 (X11; Fedora; Linux i686; rv:47.0) Gecko/20100101 Firefox/47.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 02:05:49Фильтры
avatar
  • матерные выражения
Скрыть

Re:Это свершилось!

> Короче, трудно предугадать
Да что тут предугадывать, хуету какую-то пропагандирует))) Ну ниче, еще пару годков под линуксом потрется и завяжет окончательно с этой хуетой)))

anonymous(*)(2016-08-28 02:44:16)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-27 23:34:46
avatar
Скрыть

Re:Это свершилось!

> Это чем же?))) Все что ты здесь нам показывал, гораздо практичнее сделать на том же питоне, если уж на баше не получается)))
Ok. Посчитай ошибки в логах на питоне.

AMUR-WOLF(*)(2016-08-28 05:03:24)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Работа с процессами. У меня запущен один экземпляр IDE Geany. Возьмем его процесс, сохраним в переменную:

text

PS /home/dmn/Документы> $geanyProcess = Get-Process | ?{$_.ProcessName -eq 'geany'}
PS /home/dmn/Документы> $geanyProcess

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                    
-------  ------    -----      -----     ------     --  -- -----------                    
      0       0        0         10     11,690   5052 790 geany                          
 


Посмотрим, что мы можем делать с процессом:
text

PS /home/dmn/Документы> $geanyProcess | Get-Member                                        


   TypeName: System.Diagnostics.Process#HandleCount

Name                       MemberType     Definition                                      
----                       ----------     ----------                                      
Handles                    AliasProperty  Handles = Handlecount                          
Name                       AliasProperty  Name = ProcessName                              
NPM                        AliasProperty  NPM = NonpagedSystemMemorySize64                
PM                         AliasProperty  PM = PagedMemorySize64                          
SI                         AliasProperty  SI = SessionId                                  
VM                         AliasProperty  VM = VirtualMemorySize64                        
WS                         AliasProperty  WS = WorkingSet64                              
ErrorDataReceived          Event          System.Diagnostics.DataReceivedEventHandler E...
Exited                     Event          System.EventHandler Exited(System.Object, Sys...
OutputDataReceived         Event          System.Diagnostics.DataReceivedEventHandler O...
BeginErrorReadLine         Method         void BeginErrorReadLine()                      
BeginOutputReadLine        Method         void BeginOutputReadLine()                      
CancelErrorRead            Method         void CancelErrorRead()                          
CancelOutputRead           Method         void CancelOutputRead()                        
Dispose                    Method         void Dispose(), void IDisposable.Dispose()      
Equals                     Method         bool Equals(System.Object obj)                  
GetHashCode                Method         int GetHashCode()                              
GetType                    Method         type GetType()                                  
Kill                       Method         void Kill()                                    
Refresh                    Method         void Refresh()                                  
Start                      Method         bool Start()                                    
ToString                   Method         string ToString()                              
WaitForExit                Method         void WaitForExit(), bool WaitForExit(int mill...
HandleCount                NoteProperty   int HandleCount=0                              
__NounName                 NoteProperty   string __NounName=Process                      
BasePriority               Property       int BasePriority {get;}                        
EnableRaisingEvents        Property       bool EnableRaisingEvents {get;set;}            
ExitCode                   Property       int ExitCode {get;}                            
ExitTime                   Property       datetime ExitTime {get;}                        
HasExited                  Property       bool HasExited {get;}                          
Id                         Property       int Id {get;}                                  
MachineName                Property       string MachineName {get;}                      
MainModule                 Property       System.Diagnostics.ProcessModule MainModule {...
MaxWorkingSet              Property       System.IntPtr MaxWorkingSet {get;set;}          
MinWorkingSet              Property       System.IntPtr MinWorkingSet {get;set;}          
Modules                    Property       System.Diagnostics.ProcessModuleCollection Mo...
NonpagedSystemMemorySize64 Property       long NonpagedSystemMemorySize64 {get;}          
PagedMemorySize64          Property       long PagedMemorySize64 {get;}                  
PagedSystemMemorySize64    Property       long PagedSystemMemorySize64 {get;}            
PeakPagedMemorySize64      Property       long PeakPagedMemorySize64 {get;}              
PeakVirtualMemorySize64    Property       long PeakVirtualMemorySize64 {get;}            
PeakWorkingSet64           Property       long PeakWorkingSet64 {get;}                    
PriorityBoostEnabled       Property       bool PriorityBoostEnabled {get;set;}            
PriorityClass              Property       System.Diagnostics.ProcessPriorityClass Prior...
PrivateMemorySize64        Property       long PrivateMemorySize64 {get;}                
PrivilegedProcessorTime    Property       timespan PrivilegedProcessorTime {get;}        
ProcessName                Property       string ProcessName {get;}                      
ProcessorAffinity          Property       System.IntPtr ProcessorAffinity {get;set;}      
SafeHandle                 Property       Microsoft.Win32.SafeHandles.SafeProcessHandle...
SessionId                  Property       int SessionId {get;}                            
StandardError              Property       System.IO.StreamReader StandardError {get;}    
StandardInput              Property       System.IO.StreamWriter StandardInput {get;}    
StandardOutput             Property       System.IO.StreamReader StandardOutput {get;}    
StartInfo                  Property       System.Diagnostics.ProcessStartInfo StartInfo...
StartTime                  Property       datetime StartTime {get;}                      
Threads                    Property       System.Diagnostics.ProcessThreadCollection Th...
TotalProcessorTime         Property       timespan TotalProcessorTime {get;}              
UserProcessorTime          Property       timespan UserProcessorTime {get;}              
VirtualMemorySize64        Property       long VirtualMemorySize64 {get;}                
WorkingSet64               Property       long WorkingSet64 {get;}                        
PSConfiguration            PropertySet    PSConfiguration {Name, Id, PriorityClass, Fil...
PSResources                PropertySet    PSResources {Name, Id, Handlecount, WorkingSe...
Company                    ScriptProperty System.Object Company {get=$this.Mainmodule.F...
CPU                        ScriptProperty System.Object CPU {get=$this.TotalProcessorTi...
Description                ScriptProperty System.Object Description {get=$this.Mainmodu...
FileVersion                ScriptProperty System.Object FileVersion {get=$this.Mainmodu...
Path                       ScriptProperty System.Object Path {get=$this.Mainmodule.File...
Product                    ScriptProperty System.Object Product {get=$this.Mainmodule.F...
ProductVersion             ScriptProperty System.Object ProductVersion {get=$this.Mainm...
 


Сколько потоков создал процесс?
text

PS /home/dmn/Документы> $geanyProcess.Threads.count
4
 


Какой путь у файла процесса?
text

PS /home/dmn/Документы> $geanyProcess.Path
/usr/bin/geany
 


Какой приоритет?
text

PS /home/dmn/Документы> $geanyProcess.PriorityClass
Normal
 


Какой размер виртуальной памяти?
text

PS /home/dmn/Документы> $geanyProcess.VirtualMemorySize64
799289344
 


Список модулей, КОТОРЫЕ ЗАГРУЗИЛ ЭТОТ ПРОЦЕСС
text

PS /home/dmn/Документы> $modules = $geanyProcess.Modules                                  
PS /home/dmn/Документы> $modules                                                          

   Size(K) ModuleName                                         FileName                    
   ------- ----------                                         --------                    
         4 geany                                              /usr/bin/geany              
         8 ISO8859-1.so                                       /usr/lib/x86_64-linux-gnu...
        20 libpixbufloader-png.so                             /usr/lib/x86_64-linux-gnu...
        44 libnss_files-2.23.so                               /lib/x86_64-linux-gnu/lib...
        44 libnss_nis-2.23.so                                 /lib/x86_64-linux-gnu/lib...
        88 libnsl-2.23.so                                     /lib/x86_64-linux-gnu/lib...
        32 libnss_compat-2.23.so                              /lib/x86_64-linux-gnu/lib...
     25304 libicudata.so.55.1                                 /usr/lib/x86_64-linux-gnu...
      1532 libicuuc.so.55.1                                   /usr/lib/x86_64-linux-gnu...
      1724 libxml2.so.2.9.3                                   /usr/lib/x86_64-linux-gnu...
       220 libcroco-0.6.so.3.0.1                              /usr/lib/x86_64-linux-gnu...
       212 librsvg-2.so.2.40.13                               /usr/lib/x86_64-linux-gnu...
         8 libpixbufloader-svg.so                             /usr/lib/x86_64-linux-gnu...
       408 libibus-1.0.so.5.0.511                             /usr/lib/x86_64-linux-gnu...
        24 im-ibus.so                                         /usr/lib/x86_64-linux-gnu...
       100 libgioremote-volume-monitor.so                     /usr/lib/x86_64-linux-gnu...
        44 libdconfsettings.so                                /usr/lib/x86_64-linux-gnu...
       216 libgvfscommon.so                                   /usr/lib/x86_64-linux-gnu...
       192 libgvfsdbus.so                                     /usr/lib/x86_64-linux-gnu...
        28 libogg.so.0.8.2                                    /usr/lib/x86_64-linux-gnu...
       168 libvorbis.so.0.4.8                                 /usr/lib/x86_64-linux-gnu...
        36 libltdl.so.7.3.1                                   /usr/lib/x86_64-linux-gnu...
        80 libtdb.so.1.3.8                                    /usr/lib/x86_64-linux-gnu...
        28 libvorbisfile.so.3.3.7                             /usr/lib/x86_64-linux-gnu...
        64 libcanberra.so.0.2.5                               /usr/lib/x86_64-linux-gnu...
        16 libcanberra-gtk.so.0.1.9                           /usr/lib/x86_64-linux-gnu...
        20 libcanberra-gtk-module.so                          /usr/lib/x86_64-linux-gnu...
       192 libmurrine.so                                      /usr/lib/x86_64-linux-gnu...
        64 libunity-gtk2-parser.so.0.0.0                      /usr/lib/x86_64-linux-gnu...
        20 libunity-gtk-module.so                             /usr/lib/x86_64-linux-gnu...
        72 libgpg-error.so.0.17.0                             /lib/x86_64-linux-gnu/lib...
       864 libgcrypt.so.20.0.5                                /lib/x86_64-linux-gnu/lib...
       132 liblzma.so.5.0.0                                   /lib/x86_64-linux-gnu/lib...
       296 libdbus-1.so.3.14.6                                /lib/x86_64-linux-gnu/lib...
       176 libatspi.so.0.0.1                                  /usr/lib/x86_64-linux-gnu...
       180 libatk-bridge-2.0.so.0.0.0                         /usr/lib/x86_64-linux-gnu...
         4 libatk-bridge.so                                   /usr/lib/x86_64-linux-gnu...
        28 libgailutil.so.18.0.1                              /usr/lib/x86_64-linux-gnu...
       312 libgail.so                                         /usr/lib/x86_64-linux-gnu...
        68 liboverlay-scrollbar.so                            /usr/lib/x86_64-linux-gnu...
       140 libgraphite2.so.3.0.1                              /usr/lib/x86_64-linux-gnu...
        24 libdatrie.so.1.3.3                                 /usr/lib/x86_64-linux-gnu...
        20 libXdmcp.so.6.0.0                                  /usr/lib/x86_64-linux-gnu...
         8 libXau.so.6.0.0                                    /usr/lib/x86_64-linux-gnu...
       152 libexpat.so.1.6.0                                  /lib/x86_64-linux-gnu/lib...
       368 libharfbuzz.so.0.10000.1                           /usr/lib/x86_64-linux-gnu...
       440 libpcre.so.3.13.2                                  /lib/x86_64-linux-gnu/lib...
        12 libdl-2.23.so                                      /lib/x86_64-linux-gnu/lib...
        28 libffi.so.6.0.4                                    /usr/lib/x86_64-linux-gnu...
        92 libresolv-2.23.so                                  /lib/x86_64-linux-gnu/lib...
       124 libselinux.so.1                                    /lib/x86_64-linux-gnu/lib...
        32 libthai.so.0.2.4                                   /usr/lib/x86_64-linux-gnu...
        28 librt-2.23.so                                      /lib/x86_64-linux-gnu/lib...
       100 libz.so.1.2.8                                      /lib/x86_64-linux-gnu/lib...
       132 libxcb.so.1.1.0                                    /usr/lib/x86_64-linux-gnu...
        32 libxcb-render.so.0.0.0                             /usr/lib/x86_64-linux-gnu...
         8 libxcb-shm.so.0.0.0                                /usr/lib/x86_64-linux-gnu...
       144 libpng12.so.0.54.0                                 /lib/x86_64-linux-gnu/lib...
       636 libpixman-1.so.0.33.6                              /usr/lib/x86_64-linux-gnu...
       656 libfreetype.so.6.12.1                              /usr/lib/x86_64-linux-gnu...
        68 libXext.so.6.4.0                                   /usr/lib/x86_64-linux-gnu...
         8 libXdamage.so.1.1.0                                /usr/lib/x86_64-linux-gnu...
         8 libXcomposite.so.1.0.0                             /usr/lib/x86_64-linux-gnu...
        36 libXcursor.so.1.0.2                                /usr/lib/x86_64-linux-gnu...
        40 libXrandr.so.2.2.0                                 /usr/lib/x86_64-linux-gnu...
        60 libXi.so.6.1.0                                     /usr/lib/x86_64-linux-gnu...
         8 libXinerama.so.1.0.0                               /usr/lib/x86_64-linux-gnu...
        36 libXrender.so.1.3.0                                /usr/lib/x86_64-linux-gnu...
       244 libfontconfig.so.1.9.0                             /usr/lib/x86_64-linux-gnu...
        80 libpangoft2-1.0.so.0.3800.1                        /usr/lib/x86_64-linux-gnu...
       136 libatk-1.0.so.0.21809.1                            /usr/lib/x86_64-linux-gnu...
        20 libXfixes.so.3.1.0                                 /usr/lib/x86_64-linux-gnu...
      1236 libX11.so.6.3.0                                    /usr/lib/x86_64-linux-gnu...
        88 libgcc_s.so.1                                      /lib/x86_64-linux-gnu/lib...
      1056 libm-2.23.so                                       /lib/x86_64-linux-gnu/lib...
      1480 libstdc++.so.6.0.21                                /usr/lib/x86_64-linux-gnu...
      1084 libglib-2.0.so.0.4800.1                            /lib/x86_64-linux-gnu/lib...
        12 libgmodule-2.0.so.0.4800.1                         /usr/lib/x86_64-linux-gnu...
       328 libgobject-2.0.so.0.4800.1                         /usr/lib/x86_64-linux-gnu...
      1536 libgio-2.0.so.0.4800.1                             /usr/lib/x86_64-linux-gnu...
       292 libpango-1.0.so.0.3800.1                           /usr/lib/x86_64-linux-gnu...
       132 libgdk_pixbuf-2.0.so.0.3200.2                      /usr/lib/x86_64-linux-gnu...
      1080 libcairo.so.2.11400.6                              /usr/lib/x86_64-linux-gnu...
        48 libpangocairo-1.0.so.0.3800.1                      /usr/lib/x86_64-linux-gnu...
       704 libgdk-x11-2.0.so.0.2400.30                        /usr/lib/x86_64-linux-gnu...
      4344 libgtk-x11-2.0.so.0.2400.30                        /usr/lib/x86_64-linux-gnu...
      1792 libc-2.23.so                                       /lib/x86_64-linux-gnu/lib...
        96 libpthread-2.23.so                                 /lib/x86_64-linux-gnu/lib...
      2544 libgeany.so.0.0.0                                  /usr/lib/x86_64-linux-gnu...
       152 ld-2.23.so                                         /lib/x86_64-linux-gnu/ld-...
       512 libsystemd.so.0.14.0                               /lib/x86_64-linux-gnu/lib...
 


Что мы можем делать с модулями?
text

PS /home/dmn/Документы> $modules[0] | get-member                                          


   TypeName: System.Diagnostics.ProcessModule

Name              MemberType     Definition                                              
----              ----------     ----------                                              
Equals            Method         bool Equals(System.Object obj)                          
GetHashCode       Method         int GetHashCode()                                        
GetType           Method         type GetType()                                          
ToString          Method         string ToString()                                        
BaseAddress       Property       System.IntPtr BaseAddress {get;}                        
EntryPointAddress Property       System.IntPtr EntryPointAddress {get;}                  
FileName          Property       string FileName {get;}                                  
ModuleMemorySize  Property       int ModuleMemorySize {get;}                              
ModuleName        Property       string ModuleName {get;}                                
Company           ScriptProperty System.Object Company {get=$this.FileVersionInfo.Compa...
Description       ScriptProperty System.Object Description {get=$this.FileVersionInfo.F...
FileVersion       ScriptProperty System.Object FileVersion {get=$this.FileVersionInfo.F...
Product           ScriptProperty System.Object Product {get=$this.FileVersionInfo.Produ...
ProductVersion    ScriptProperty System.Object ProductVersion {get=$this.FileVersionInf...
Size              ScriptProperty System.Object Size {get=$this.ModuleMemorySize / 1024;}
 


Убьем процесс с Geany:
text

PS /home/dmn/Документы> $geanyProcess.Kill()
 

AMUR-WOLF(*)(2016-08-28 06:08:57)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Амурыч разошелся! Ты б лучше на вопросы интересующихся отвечал. .net какой-то. В ляликсе, значит, mono надо для работы этого шелла или что? Нафиг оно надо, тады.

А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата. Нет никаких механизмов передачи этих ваших объектов из отработавшей программы наружу. Следовательно, и смысла в объектах в шелле нет.

Vasily(*)(2016-08-28 07:41:23)

Mozilla/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko/20100101 Firefox/40.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 06:08:57
avatar
Скрыть

Re:Это свершилось!

> Работа с процессами. У меня запущен один экземпляр IDE Geany. Возьмем его процесс, сохраним в переменную:
Ну как я и говорил, обычный ps им не катит, так как он не возвращает никаких объектов. Давай лучше дублировать функциональность и делать из шелла комбайн. Как бы и вся фишка Unix-like осей не делать комбайнов тут нарушается

Vasily(*)(2016-08-28 07:44:34)

Mozilla/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko/20100101 Firefox/40.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от Vasily 2016-08-28 07:41:23
avatar
Скрыть

Re:Это свершилось!

> .net какой-то. В ляликсе, значит, mono надо для работы этого шелла или что?

text

dmn@dmn-Aspire-E5:~$ apt-rdepends powershell
Reading package lists... Done
Building dependency tree      
Reading state information... Done
powershell
  Depends: libicu55
  Depends: libunwind8
libicu55
  Depends: libc6 (>= 2.14)
  Depends: libgcc1 (>= 1:3.0)
  Depends: libstdc++6 (>= 5.2)
libc6
  Depends: libgcc1
libgcc1
  Depends: gcc-6-base (= 6.0.1-0ubuntu1)
  Depends: libc6 (>= 2.14)
gcc-6-base
libstdc++6
  Depends: gcc-5-base (= 5.3.1-14ubuntu2)
  Depends: libc6 (>= 2.18)
  Depends: libgcc1 (>= 1:4.2)
gcc-5-base
libunwind8
  Depends: libc6 (>= 2.4)
  Depends: liblzma5 (>= 5.1.1alpha+20110809)
liblzma5
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
multiarch-support
  Depends: libc6 (>= 2.3.6-2)
 


То есть даже .Net Core не нужен.

> А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата. Нет никаких механизмов передачи этих ваших объектов из отработавшей программы наружу. Следовательно, и смысла в объектах в шелле нет.
Времена меняются. Скоро будут корпоративные приложения на Linux, которые будут предоставлять командлеты, а те всегда возвращают объекты. Уже сейчас на Linux можно юзать командлеты для MS Azure.

AMUR-WOLF(*)(2016-08-28 08:09:28)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Сейчас утилиты, скрипты и программы в Linux возвращают в основном или текст, или код завершения, поэтому может показаться, что объектная модель PowerShell здесь неприменима.

Но эту проблему легко обойти. Пускай скрипт на Python3 возвращает текст. Но если этот текст будет в формате JSON, то PowerShell легким движением конвейера сможет преобразовать текстовый вывод в объект. Рассмотрим следующий пример:

python

#!/usr/bin/python3

import json

# Класс с методом, возвращающим текст в формате json
class class1:
    def returnJSON(this):
        return json.dumps(['foo',
                            {
                                'bar': ('baz', None, 1.0, 2),
                                'buz': ('foo1', 'foo2', 'foo3')
                            },
                            'alpha',
                            1,2,3])

object1 = class1()
print (object1.returnJSON())
 


Сохраним его в файле pythonClass.py и сделаем его исполняемым.

А теперь из его текстового вывода создадим объект PowerShell и поработаем с ним:
text

PS /home/dmn/Документы> $pythonOutput = ./pythonClass.py | ConvertFrom-JSON                
PS /home/dmn/Документы> $pythonOutput                                                      
foo

buz                bar              
---                ---              
{foo1, foo2, foo3} {baz, $null, 1, 2}
alpha
1
2
3


PS /home/dmn/Документы> $pythonOutput.buz                                                  
foo1
foo2
foo3
PS /home/dmn/Документы> $pythonOutput.bar                                                  
baz
1
2
 


Жаль, что таким образом можно передать только объекты без методов. Но есть возможность выдавать структурированным текстом объект, содержащий в себе объекты стандартных классов .Net, такие, как DateTime или Item. Тогда можно будет преобразовать текстовый выхлоп в объект с методами.

AMUR-WOLF(*)(2016-08-28 08:51:28)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Поадминим задания Cron.

Скачаем модуль с командлетами для работы с Cron:

text

wget https://raw.githubusercontent.com/PowerShell/PowerShell/master/demos/crontab/CronTab/CronTab.psm1
 


Теперь загрузим модуль и посмотрим на доступные командлеты:
text

PS /home/dmn> Import-Module /home/dmn/CronTab.psm1                                        
PS /home/dmn> Get-Command -Module CronTab                                                  

CommandType     Name                                               Version    Source      
-----------     ----                                               -------    ------      
Function        ConvertTo-CronJob                                  0.0        CronTab    
Function        Get-CronJob                                        0.0        CronTab    
Function        Get-CronTab                                        0.0        CronTab    
Function        Get-CronTabUser                                    0.0        CronTab    
Function        Import-CronTab                                     0.0        CronTab    
Function        Invoke-CronTab                                     0.0        CronTab    
Function        New-CronJob                                        0.0        CronTab    
Function        Remove-CronJob                                     0.0        CronTab    
 


Посмотрим на уже имеющиеся задачи Cron:
text

PS /home/dmn> Get-CronJob
 
Ничего не получили, значит, задач нет. Создадим новую:
text

PS /home/dmn> $jobs = New-CronJob -Command 'rm -rf /tmp/*' -Hour 1 -DayOfWeek 1-5
PS /home/dmn> $jobs

Minute     : *
Hour       : 1
DayOfMonth : *
Month      : *
DayOfWeek  : 1-5
Command    : rm -rf /tmp/*
 


Убедимся, что задача создалась через утилиту bash:
text

PS /home/dmn> crontab -l                                                                  

* 1 * * 1-5 rm -rf /tmp/*
 


Удалим задачу:
text

PS /home/dmn> $job | Remove-CronJob                                                      

Confirm
Are you sure you want to perform this action?
Performing the operation "Remove" on target "rm -rf /tmp/*".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
 

AMUR-WOLF(*)(2016-08-28 11:37:55)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 11:37:55
avatar
Скрыть

Re:Это свершилось!

ты прямо шелл решил переписать? О_О

vilfred(*)(2016-08-28 13:30:59)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 05:03:24
avatar
Скрыть

Re:Это свершилось!

> Ok. Посчитай ошибки в логах на питоне.

Я плохо ориентируюсь в петоне, но неужели там нельзя как-нибудь запустить внешнюю команду типа `grep -c "error text" filename.log`?

anonymous(*)(2016-08-28 13:51:43)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от Vasily 2016-08-28 07:41:23
avatar
Скрыть

Re:Это свершилось!

> А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата.

Я так понял ТСа, что это как раз одна из проблем, которую и пытается на скорую руку решить повершелл.

> Нет никаких механизмов передачи этих ваших объектов из отработавшей программы наружу. Следовательно, и смысла в объектах в шелле нет.

Шелл сам по себе "программа" - мог бы и придержать что-нибудь созданное дочерними процессами. А ещё есть всякие IPC чтобы ты мог сохранить свой объект в разделяемой памяти или передать его другому процессу на хранение. А ещё ты можешь сериализовать объект и сохранить его хоть в файл, хоть аттачментом послать волку амурскому на е-майл.

anonymous(*)(2016-08-28 14:13:29)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 08:09:28
avatar
Скрыть

Re:Это свершилось!

> Времена меняются. Скоро будут корпоративные приложения на Linux, которые будут предоставлять командлеты

А под "скоро" сколько времени подразумевается?

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

anonymous(*)(2016-08-28 14:19:43)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от vilfred 2016-08-28 13:30:59
avatar
Скрыть

Re:Это свершилось!

> ты прямо шелл решил переписать? О_О

Это Микрософт выкатил. В венде повершелл уже давно присутствует, хотя я ни разу не видел скриптов на нём.

anonymous(*)(2016-08-28 14:24:30)

Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 14:13:29
avatar
Скрыть

Re:Это свершилось!

>> А вообще про объекты -- это дурацкая идея во всем unix-like мире. Там все программы могут лишь вывести текст или вернуть код возврата.
> Я так понял ТСа, что это как раз одна из проблем, которую и пытается на скорую руку решить повершелл.
Да, в Windows все программы возвращают примерно то же самое, что и в Unix, но для них дополнительно пишут на C# модули с десятками командлетов PowerShell, которые этими программами управляют и возвращают объекты для совместной конвейерной обработки. Благодаря этому там добились самого удобного администрирования.

Можно написать несколько модулей, которые будут содержать по 10-50 командлетов, которые будут управлять многими программами и утилитами Unix и обмениваться друг с другом объектами. Например, будет неплохо написать командлеты, управляющие всякими мелочами типа wget, немелочами типа apt-get, настройками Grub и так далее. Когда такие модули появятся, тогда все админы Linux перейдут на PS.

AMUR-WOLF(*)(2016-08-28 14:52:03)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 05:03:24
avatar
Скрыть

Re:Это свершилось!

> Ok. Посчитай ошибки в логах на питоне.
Ты действительно считаешь что это не возможно?)))

anonymous(*)(2016-08-28 14:59:17)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 11:37:55
avatar
Скрыть

Re:Это свершилось!

> Скачаем модуль с командлетами для работы с Cron:


Уймите уже его кто-нибудь)))

python

import os
import os.path

directory = "/var/log"
phrase = "error"

result = dict()
for path, _, files in os.walk(directory):
    for filename in files:
        filename = os.path.join(path, filename)
        if os.path.splitext(filename)[1] == '.log':
            result[filename] = 0
            try:
                with open(filename) as file:
                    line = file.readline()
                    while line:
                        if line.find(phrase) >= 0:
                            result[filename] += 1
                        line = file.readline()
            except IOError:
                result[filename] = -1
for name, err_cnt in sorted(result.items(), key=lambda a: a[1]):
    if err_cnt > 0:
        print "%s\t%s" % (err_cnt, name)

 

anonymous(*)(2016-08-28 15:00:33)
Отредактировано anonymous по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 14:59:17
avatar
Скрыть

Re:Это свершилось!

>> Ok. Посчитай ошибки в логах на питоне.
> Ты действительно считаешь что это не возможно?)))
Я просто не считаю это практичнее, чем две строчки на Powershell

AMUR-WOLF(*)(2016-08-28 15:05:29)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

И вот что я подумал. Если моя корпорация напишет эти несчастные 200-300 командлетов для администрирования Linux и Apach, то она заработает миллионы баксов и станет всемирно известным игроком в IT-сегменте.

AMUR-WOLF(*)(2016-08-28 15:17:39)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 15:05:29Фильтры
avatar
  • матерные выражения
Скрыть

Re:Это свершилось!

На хуй кому нужны эти твои две строчки? В чем практичность? А мой код, даже чел незнающий питон прочтем и поймет что он делает.

Какой профит от твоего повершелла в хниксах?

anonymous(*)(2016-08-28 15:24:48)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 15:24:48Фильтры
avatar
  • матерные выражения
Скрыть

Re:Это свершилось!

> На хуй кому нужны эти твои две строчки? В чем практичность? А мой код, даже чел незнающий питон прочтем и поймет что он делает.
Давай свой код, я попытаюсь его прочитать и понять, что он делает)

AMUR-WOLF(*)(2016-08-28 15:28:17)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 15:28:17
avatar
Скрыть

Re:Это свершилось!

Выше добавил в свой коммент))) Ну и ля разнообразия добавь в свой скрипт, что бы файлы к которым не удалось получить доступ как-то помечались, например прочерком в кол-ве ошибок. Ведь ты же не будешь запускать в своей корпорации скрипты из под рута)))

anonymous(*)(2016-08-28 15:30:18)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 15:30:18
avatar
Скрыть

Re:Это свершилось!

> Выше добавил в свой коммент))) Ну и ля разнообразия добавь в свой скрипт, что бы файлы к которым не удалось получить доступ как-то помечались, например прочерком в кол-ве ошибок. Ведь ты же не будешь запускать в своей корпорации скрипты из под рута)))


Ок. Здесь правильнее будет не добавить, а убавить. Убрать "-ErrorAction SilentlyContinue" там, где открываются файлы. Тогда будут выходить ошибки. А запускать скрипт нужно под юзером группы, у которой есть права на чтения логов.

Резульат:

text

PS /home/dmn> $Files | Select-String $Phrase | Group-Object filename | Sort-Object count -descending                                                                                  
Select-String : The file /var/log/installer/casper.log cannot be read: Access to the path
'/var/log/installer/casper.log' is denied.
At line:1 char:10
+ $Files | Select-String $Phrase | Group-Object filename | Sort-Object  ...
+          ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/lightdm/lightdm.log cannot be read: Access to the path '
/var/log/lightdm/lightdm.log' is denied.
At line:1 char:10
+ $Files | Select-String $Phrase | Group-Object filename | Sort-Object  ...
+          ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/lightdm/seat0-greeter.log cannot be read: Access to the
path '/var/log/lightdm/seat0-greeter.log' is denied.
At line:1 char:10
+ $Files | Select-String $Phrase | Group-Object filename | Sort-Object  ...
+          ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/lightdm/x-0.log cannot be read: Access to the path '/var
/log/lightdm/x-0.log' is denied.
At line:1 char:10
+ $Files | Select-String $Phrase | Group-Object filename | Sort-Object  ...
+          ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/Unacceptable.log cannot be read: Access to the path '/va
r/log/Unacceptable.log' is denied.
At line:1 char:10
+ $Files | Select-String $Phrase | Group-Object filename | Sort-Object  ...
+          ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 

Count Name                      Group                                                    
----- ----                      -----                                                    
   20 kern.log                  {/var/log/kern.log:929:Aug 28 20:19:53 dmn-Aspire-E5 ke...
   12 unattended-upgrades.log   {/var/log/unattended-upgrades/unattended-upgrades.log:9...
    8 dpkg.log                  {/var/log/dpkg.log:264:2016-07-19 20:42:24 install libg...
    4 bootstrap.log             {/var/log/bootstrap.log:356:Selecting previously unsele...
    2 auth.log                  {/var/log/auth.log:26:Aug 28 17:38:07 dmn-Aspire-E5 dbu...
    1 term.log                  {/var/log/apt/term.log:3046:DATA/SFX/drag_error.wav fil...
    1 gpu-manager.log           {/var/log/gpu-manager.log:29:Error: can't access /sys/b...
    1 Xorg.0.log                {/var/log/Xorg.0.log:15:        (WW) warning, (EE) error, (NI)...

 


Да и из сканирования директории тоже стоит убрать эту фигню. Все исключения должны выводиться. А то на сканирование директории тоже может прав не быть. Или директория /var/log вообще будет отсутствовать.

AMUR-WOLF(*)(2016-08-28 16:00:01)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Это свершилось! от AMUR-WOLF 2016-08-27 16:49:56
avatar
Скрыть

Re:Это свершилось!

Итак, почему вот это

python

import os
import os.path

directory = "/var/log"
phrase = "error"

result = dict()
for path, _, files in os.walk(directory):
    for filename in files:
        filename = os.path.join(path, filename)
        if os.path.splitext(filename)[1] == '.log':
            result[filename] = 0
            try:
                with open(filename) as file:
                    line = file.readline()
                    while line:
                        if line.find(phrase) >= 0:
                            result[filename] += 1
                        line = file.readline()
            except IOError:
                result[filename] = -1
for name, err_cnt in sorted(result.items(), key=lambda a: a[1]):
    if err_cnt > 0:
        print "%s\t%s" % (err_cnt, name)
 


будет более практичным и понятным, чем это
text

$Directory = "/var/log"
$Phrase = "error"
$Files = Get-Childitem $Directory -recurse -Include *.log
$Files | Select-String $Phrase | Group-Object filename | Sort-Object count -descending
 


?

AMUR-WOLF(*)(2016-08-28 16:06:16)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:06:16
avatar
Скрыть

Re:Это свершилось!

Зато замени в моем коде две последние строчки на:

python

    if err_cnt != 0:
        print "%s\t%s" % (err_cnt if err_cnt > 0 else 'N/A', name)
 


И получишь)))
bash

$ python err.py
N/A     /var/log/lightdm/seat0-greeter.log
N/A     /var/log/installer/casper.log
N/A     /var/log/lightdm/lightdm.log
N/A     /var/log/lightdm/x-0.log
N/A     /var/log/lightdm/x-1-greeter.log
N/A     /var/log/lightdm/x-2.log
N/A     /var/log/lightdm/x-3.log
N/A     /var/log/lightdm/x-3-greeter.log
N/A     /var/log/lightdm/x-4-greeter.log
N/A     /var/log/lightdm/x-4.log
N/A     /var/log/lightdm/x-2-greeter.log
N/A     /var/log/lightdm/x-0-greeter.log
N/A     /var/log/lightdm/x-1.log
1       /var/log/Xorg.0.log
1       /var/log/Xorg.1.log
1       /var/log/Xorg.2.log
1       /var/log/Xorg.4.log
1       /var/log/apt/history.log
1       /var/log/Xorg.3.log
4       /var/log/bootstrap.log
26      /var/log/kern.log
 


И шо? У кого гибче в итоге?)))

ЗЫ: Все жду от тебя пример скрипта с аналогичным выводом)))

anonymous(*)(2016-08-28 16:22:17)
Отредактировано anonymous по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:06:16
avatar
Скрыть

Re:Это свершилось!

Безусловно практичнее и понятнее, потому что легко модифицируется, пример привел и не надо запоминать новый странный синтаксис и держать в голове хуеву тучу всяких "Get-Childitem"ов)))

anonymous(*)(2016-08-28 16:23:48)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:00:01
avatar
Скрыть

Re:Это свершилось!

> Все исключения должны выводиться.
На хуй? Достаточно если в итоговом списке будет N/A (not accesable)))

anonymous(*)(2016-08-28 16:26:32)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:06:16
avatar
Скрыть

Re:Это свершилось!

Вывод отличается. Питон вернул

text

1       /var/log/Xorg.0.log
1       /var/log/apt/term.log
2       /var/log/auth.log
4       /var/log/bootstrap.log
8       /var/log/dpkg.log
13      /var/log/kern.log
 


Повершелл вернул
text

Count Name                      Group                                                    
----- ----                      -----                                                    
   20 kern.log                  {/var/log/kern.log:929:Aug 28 20:19:53 dmn-Aspire-E5 ke...
   12 unattended-upgrades.log   {/var/log/unattended-upgrades/unattended-upgrades.log:9...
    8 dpkg.log                  {/var/log/dpkg.log:264:2016-07-19 20:42:24 install libg...
    4 bootstrap.log             {/var/log/bootstrap.log:356:Selecting previously unsele...
    2 auth.log                  {/var/log/auth.log:26:Aug 28 17:38:07 dmn-Aspire-E5 dbu...
    1 term.log                  {/var/log/apt/term.log:3046:DATA/SFX/drag_error.wav fil...
    1 gpu-manager.log           {/var/log/gpu-manager.log:29:Error: can't access /sys/b...
    1 Xorg.0.log                {/var/log/Xorg.0.log:15:        (WW) warning, (EE) error, (NI)...
 


Вот я легко-легко модифицирую скриптик
text

Clear
$Directory = "/var/log"
$Phrase = "error"
$Files = Get-Childitem $Directory -recurse -Include *.log
$groups = $Files | Select-String $Phrase | Group-Object filename | Sort-Object count -descending
$groups | %{Write-Host "`n`n`n====== $_.Name ======`n"; foreach($line in $_.Group){$line; "`n"}}
 


и получаю
text

PS /home/dmn/Документы> ./first.ps1                                                        

Get-Childitem : Access to the path '/var/log/speech-dispatcher' is denied.
At /home/dmn/Документы/first.ps1:4 char:10
+ $Files = Get-Childitem $Directory -recurse -Include *.log
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (/var/log/speech-dispatcher:String) [Get-
   ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.Ge
   tChildItemCommand
 
Select-String : The file /var/log/installer/casper.log cannot be read: Access to the path
'/var/log/installer/casper.log' is denied.
At /home/dmn/Документы/first.ps1:5 char:20
+ $groups = $Files | Select-String $Phrase | Group-Object filename | So ...
+                    ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/lightdm/lightdm.log cannot be read: Access to the path '
/var/log/lightdm/lightdm.log' is denied.
At /home/dmn/Документы/first.ps1:5 char:20
+ $groups = $Files | Select-String $Phrase | Group-Object filename | So ...
+                    ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/lightdm/seat0-greeter.log cannot be read: Access to the
path '/var/log/lightdm/seat0-greeter.log' is denied.
At /home/dmn/Документы/first.ps1:5 char:20
+ $groups = $Files | Select-String $Phrase | Group-Object filename | So ...
+                    ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/lightdm/x-0.log cannot be read: Access to the path '/var
/log/lightdm/x-0.log' is denied.
At /home/dmn/Документы/first.ps1:5 char:20
+ $groups = $Files | Select-String $Phrase | Group-Object filename | So ...
+                    ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 
Select-String : The file /var/log/Unacceptable.log cannot be read: Access to the path '/va
r/log/Unacceptable.log' is denied.
At /home/dmn/Документы/first.ps1:5 char:20
+ $groups = $Files | Select-String $Phrase | Group-Object filename | So ...
+                    ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
    + FullyQualifiedErrorId : ProcessingFile,Microsoft.PowerShell.Commands.SelectStringCo
   mmand
 



====== Microsoft.PowerShell.Commands.GroupInfo.Name ======


/var/log/kern.log:929:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [    1.102674] nouveau: probe
of 0000:01:00.0 failed with error -22


/var/log/kern.log:1050:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [    8.493685] EXT4-fs (sda8)
: re-mounted. Opts: errors=remount-ro


/var/log/kern.log:1082:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076637] pcieport 0000:
00:1d.2: AER: Multiple Corrected error received: id=00ea


/var/log/kern.log:1083:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076647] pcieport 0000:
00:1d.2: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00ea(Receiver ID)


/var/log/kern.log:1084:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076650] pcieport 0000:
00:1d.2:   device [8086:9d1a] error status/mask=00000001/00002000


/var/log/kern.log:1085:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076652] pcieport 0000:
00:1d.2:    [ 0] Receiver Error         (First)


/var/log/kern.log:1086:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076656] pcieport 0000:
00:1d.2: AER: Multiple Corrected error received: id=00ea


/var/log/kern.log:1088:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076663] pcieport 0000:
00:1d.2: AER: Multiple Corrected error received: id=00ea


/var/log/kern.log:1090:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.076669] pcieport 0000:
00:1d.2: AER: Multiple Corrected error received: id=00ea


/var/log/kern.log:1093:Aug 28 20:19:53 dmn-Aspire-E5 kernel: [   11.206458] ath10k_pci 000
0:03:00.0: Direct firmware load for ath10k/cal-pci-0000:03:00.0.bin failed with error -2


/var/log/kern.log:1220:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.955762] pcieport 0000:
00:1d.2: AER: Multiple Corrected error received: id=00ea


/var/log/kern.log:1221:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.955772] pcieport 0000:
00:1d.2: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00ea(Receiver ID)


/var/log/kern.log:1222:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.955775] pcieport 0000:
00:1d.2:   device [8086:9d1a] error status/mask=00000001/00002000


/var/log/kern.log:1223:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.955777] pcieport 0000:
00:1d.2:    [ 0] Receiver Error         (First)


/var/log/kern.log:1224:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.986798] pcieport 0000:
00:1d.2: AER: Multiple Corrected error received: id=00ea


/var/log/kern.log:1225:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.986807] pcieport 0000:
00:1d.2: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00ea(Receiver ID)


/var/log/kern.log:1226:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.986812] pcieport 0000:
00:1d.2:   device [8086:9d1a] error status/mask=00000001/00002000


/var/log/kern.log:1227:Aug 28 20:20:05 dmn-Aspire-E5 kernel: [   31.986813] pcieport 0000:
00:1d.2:    [ 0] Receiver Error         (First)


/var/log/kern.log:1251:Aug 28 20:20:07 dmn-Aspire-E5 NetworkManager[2689]: <warn>  [147237
9607.8349] failed to enumerate oFono devices: GDBus.Error:org.freedesktop.DBus.Error.Servi
ceUnknown: The name org.ofono was not provided by any .service files


/var/log/kern.log:1254:Aug 28 20:20:07 dmn-Aspire-E5 kernel: [   34.362325] i2c_hid: probe
 of i2c-ELAN0501:00 failed with error -61





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/unattended-upgrades/unattended-upgrades.log:9:2016-08-12 01:32:23,568 ERROR Возни
кла ошибка: 'Временная ошибка при попытке получить IP-адрес «security.ubuntu.com»'


/var/log/unattended-upgrades/unattended-upgrades.log:10:2016-08-12 01:32:23,569 ERROR Нево
зможно скачать URI 'http://security.ubuntu.com/ubuntu/pool/main/libg/libgd2/libgd3_2.1.1-4
ubuntu0.16.04.3_amd64.deb', останов


/var/log/unattended-upgrades/unattended-upgrades.log:54:2016-08-19 11:06:07,370 ERROR Возн
икла ошибка: 'Временная ошибка при попытке получить IP-адрес «ru.archive.ubuntu.com»'


/var/log/unattended-upgrades/unattended-upgrades.log:55:2016-08-19 11:06:07,370 ERROR Нево
зможно скачать URI 'http://security.ubuntu.com/ubuntu/pool/main/f/fontconfig/libfontconfig
1_2.11.94-0ubuntu1.1_amd64.deb', останов


/var/log/unattended-upgrades/unattended-upgrades.log:60:2016-08-19 18:18:56,812 ERROR Возн
икла ошибка: 'Временная ошибка при попытке получить IP-адрес «ru.archive.ubuntu.com»'


/var/log/unattended-upgrades/unattended-upgrades.log:61:2016-08-19 18:18:56,812 ERROR Нево
зможно скачать URI 'http://security.ubuntu.com/ubuntu/pool/main/f/fontconfig/libfontconfig
1_2.11.94-0ubuntu1.1_amd64.deb', останов


/var/log/unattended-upgrades/unattended-upgrades.log:66:2016-08-20 11:21:54,703 ERROR Возн
икла ошибка: 'Временная ошибка при попытке получить IP-адрес «ru.archive.ubuntu.com»'


/var/log/unattended-upgrades/unattended-upgrades.log:67:2016-08-20 11:21:54,703 ERROR Нево
зможно скачать URI 'http://security.ubuntu.com/ubuntu/pool/main/f/fontconfig/libfontconfig
1_2.11.94-0ubuntu1.1_amd64.deb', останов


/var/log/unattended-upgrades/unattended-upgrades.log:72:2016-08-20 22:11:11,961 ERROR Возн
икла ошибка: 'Временная ошибка при попытке получить IP-адрес «ru.archive.ubuntu.com»'


/var/log/unattended-upgrades/unattended-upgrades.log:73:2016-08-20 22:11:11,961 ERROR Нево
зможно скачать URI 'http://security.ubuntu.com/ubuntu/pool/main/f/fontconfig/libfontconfig
1_2.11.94-0ubuntu1.1_amd64.deb', останов


/var/log/unattended-upgrades/unattended-upgrades.log:107:2016-08-27 10:07:29,068 ERROR Воз
никла ошибка: 'Временная ошибка при попытке получить IP-адрес «ru.archive.ubuntu.com»'


/var/log/unattended-upgrades/unattended-upgrades.log:108:2016-08-27 10:07:29,068 ERROR Нев
озможно скачать URI 'http://security.ubuntu.com/ubuntu/pool/main/e/eog/eog_3.18.2-1ubuntu2
.1_amd64.deb', останов





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/dpkg.log:264:2016-07-19 20:42:24 install libgpg-error0:amd64 <none> 1.21-2ubuntu1


/var/log/dpkg.log:265:2016-07-19 20:42:24 status half-installed libgpg-error0:amd64 1.21-2
ubuntu1


/var/log/dpkg.log:266:2016-07-19 20:42:24 status unpacked libgpg-error0:amd64 1.21-2ubuntu
1


/var/log/dpkg.log:267:2016-07-19 20:42:24 status unpacked libgpg-error0:amd64 1.21-2ubuntu
1


/var/log/dpkg.log:495:2016-07-19 20:42:30 configure libgpg-error0:amd64 1.21-2ubuntu1 <non
e>


/var/log/dpkg.log:496:2016-07-19 20:42:30 status unpacked libgpg-error0:amd64 1.21-2ubuntu
1


/var/log/dpkg.log:497:2016-07-19 20:42:30 status half-configured libgpg-error0:amd64 1.21-
2ubuntu1


/var/log/dpkg.log:498:2016-07-19 20:42:30 status installed libgpg-error0:amd64 1.21-2ubunt
u1





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/bootstrap.log:356:Selecting previously unselected package libgpg-error0:amd64.


/var/log/bootstrap.log:357:Preparing to unpack .../libgpg-error0_1.21-2ubuntu1_amd64.deb .
..


/var/log/bootstrap.log:358:Unpacking libgpg-error0:amd64 (1.21-2ubuntu1) ...


/var/log/bootstrap.log:701:Setting up libgpg-error0:amd64 (1.21-2ubuntu1) ...





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/auth.log:26:Aug 28 17:38:07 dmn-Aspire-E5 dbus[2637]: [system] Rejected send mess
age, 3 matched rules; type="error", sender=":1.79" (uid=1000 pid=3866 comm="/usr/bin/pulse
audio --start --log-target=syslog ") interface="(unset)" member="(unset)" error name="org.
bluez.MediaEndpoint1.Error.NotImplemented" requested_reply="0" destination=":1.6" (uid=0 p
id=2695 comm="/usr/lib/bluetooth/bluetoothd ")


/var/log/auth.log:27:Aug 28 17:38:07 dmn-Aspire-E5 dbus[2637]: message repeated 3 times: [
 [system] Rejected send message, 3 matched rules; type="error", sender=":1.79" (uid=1000 p
id=3866 comm="/usr/bin/pulseaudio --start --log-target=syslog ") interface="(unset)" membe
r="(unset)" error name="org.bluez.MediaEndpoint1.Error.NotImplemented" requested_reply="0"
 destination=":1.6" (uid=0 pid=2695 comm="/usr/lib/bluetooth/bluetoothd ")]





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/apt/term.log:3046:DATA/SFX/drag_error.wav file added to VFS.





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/gpu-manager.log:29:Error: can't access /sys/bus/pci/devices/0000:01:00.0/driver





====== Microsoft.PowerShell.Commands.GroupInfo.Name ======

/var/log/Xorg.0.log:15: (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
 


Строки с "Error" тоже есть в логах. А если мне нужна чувствительность к регистру, то нужно всего-лишь добавить ключ "–caseSensitive".

AMUR-WOLF(*)(2016-08-28 16:29:35)
Отредактировано AMUR-WOLF по причине "не указана"
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:29:35
avatar
Скрыть

Re:Это свершилось!

Замени строчку:

if line.find(phrase) >= 0:

на

if line.upper().find(phrase.upper()) >= 0:

и радуйся жизни дальше)))

Так что со скриптом где будет N/A выводится?)))

anonymous(*)(2016-08-28 16:32:05)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 16:26:32
avatar
Скрыть

Re:Это свершилось!

>> Все исключения должны выводиться.
>На хуй? Достаточно если в итоговом списке будет N/A (not accesable)))
А где нечитаемые директории у тебя?)

AMUR-WOLF(*)(2016-08-28 16:35:38)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:35:38
avatar
Скрыть

Re:Это свершилось!

Сначала ты покажи мне свой скиптик, с N/A а потом я тебе список не читаемых директорий)))

anonymous(*)(2016-08-28 16:37:07)

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от anonymous 2016-08-28 16:32:05
avatar
Скрыть

Re:Это свершилось!

> Так что со скриптом где будет N/A выводится?)))
Так всё же выводится. Даже в более удобочитаемом виде.

Select-String : The file /var/log/installer/casper.log cannot be read: Access to the path '/var/log/installer/casper.log' is denied

AMUR-WOLF(*)(2016-08-28 16:37:09)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:Это свершилось! от AMUR-WOLF 2016-08-28 16:37:09
avatar
Скрыть

Re:Это свершилось!

Это твоя простыня с ошибками и была что ли удобочитаемым видом? Ты что смеешься?))) В таком виде как у меня ЗДЕСЬ сделай пожалуйста)))

anonymous(*)(2016-08-28 16:39:29)
Отредактировано anonymous по причине "не указана"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!