IT science

трудовые будни

проверяем запущена ли служба в windows и если надо — запускаем

Ну, что же... бывают случаи, когда какая нибудь важная служба (сервис, service) тормознула, с разработчиком связи нет, а сам продукт является «черным ящиком». На выручку нам приходит очередной «костыльный» метод. Задача: в кроне шедулере сделать проверку, жива ли служба и если померла — стартануть.

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

Но, учтите, писать надо именно display name (выводимое имя).

net start | find /i %1 
if errorlevel==1 net start %1

удаляем дубликаты с помощью fdupes

Накопилось за несколько лет море фотографий, и столкнулся я с тем, что некоторые фотографии продублированы. Думал, телефон несколько раз выгрузил их на сервер, но оказалось их немало, да в разных папках и это неприятный факт, т. к. руками перелопатить миллионы фотографий — нереально... а сравнивать по содержимому процесс очень ресурсоемкий. Порывшись на просторах, нашел интересную утилитку fdupes, написал ее Андриан Лопес (Adrian Lopez), за что ему огромное спасибо. Программа сравнивает размер файла и MD5 хэш, и после сравнения начинает сверку по-байтно.

fdupes /home/user/photos

ищет дубликаты в указанном каталоге

-r — рекурсивный поиск

fdupes -r /home/user/photos > duplicate_list.txt

сохранит в файле список дубликатов

а, дальше с помощью awk отфильтруем дублирующиеся файлы для дальнейшего удаления

awk 'BEGIN{d=0} NF==0{d=0} NF>0{if(d)print;d=1}' duplicate_list.txt > delete_list.txt

а затем удаляем по списку

rm `cat delete_list.txt`

или так

xargs rm < delete_list.txt
 Нет комментариев    31   1 мес   fdupes   linux

find и суммарный объем данных

объем этих файлов, как это сделать?
Задача нетривиальная, нашлось два решения (их может быть и больше)

первое, используем du:

find параметры_поиска -exec du -b {} + | awk ’{sum = sum+$1 }; END { print sum }’

пример:

find /volume1/photo/ -maxdepth 1 -type f -exec du -b {} + | awk ’{sum = sum+$1 }; END { print sum }’

второе, используем ls:

find параметры_поиска -ls | awk ’{sum = sum+$7 }; END { print sum }’

пример:

find /volume1/photo/ -maxdepth 1 -type f -ls | awk ’{sum = sum+$7 }; END { print sum }’

 Нет комментариев    13   1 мес   find   linux

поиск пользователей с заданным паролем в домене

Представьте ситуацию: новые пользователи заводятся в домен автоматически с заранее известным паролем, например password. Т. е. политика сложности пароля позволяет использовать простые пароли, хоть 111111. Смена пароля лежит на совести пользователя, а значит — не меняется. С помощью данного vbs-скрипта можно проверить какие пользователи используют словарные пароли

Dim adoCommand, adoConnection, strBase, strFilter, strAttributes 
Dim objRootDSE, strDNSDomain, strQuery, adoRecordset 
Dim strUser, strPassword, objDomain, objNS 
Dim iplus, iall 
Dim fso, f1 
Dim WshShell, Path 

Const ADS_SECURE_AUTHENTICATION = &H1 
Const ADS_USE_ENCRYPTION = &H2 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set f1 = fso.CreateTextFile("c:\testfile.txt", True) 
iplus = 1 
iall = 1 
Set objNS = GetObject("LDAP:") 
strPassword = InputBox("Введите пароль для проверки") 
Set adoCommand = CreateObject("ADODB.Command") 
Set adoConnection = CreateObject("ADODB.Connection") 
adoConnection.Provider = "ADsDSOObject" 
adoConnection.Open "Active Directory Provider" 
adoCommand.ActiveConnection = adoConnection 

Set objRootDSE = GetObject("LDAP://RootDSE") 
strDNSDomain = objRootDSE.Get("defaultNamingContext") 
strBase = "<LDAP://" & strDNSDomain & ">" 

strFilter = "(&(objectCategory=person)(objectClass=user))" 
strAttributes = "sAMAccountName" 
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree" 
adoCommand.CommandText = strQuery 
adoCommand.Properties("Page Size") = 100 
adoCommand.Properties("Timeout") = 30 
adoCommand.Properties("Cache Results") = False 

Set adoRecordset = adoCommand.Execute 
Do Until adoRecordset.EOF 
    strUser = adoRecordset.Fields("sAMAccountName").Value 
    On Error Resume Next 
    Set objDomain = objNS.OpenDSObject("LDAP://" & strDNSDomain, _ 
        strUser, strPassword, ADS_SECURE_AUTHENTICATION) 
    If (Err.Number = 0) Then 
        On Error GoTo 0 
   f1.WriteLine(iplus & " User : " & strUser & vbTab & vbTab & " Пароль : '" & strPassword & "'") 
   iplus = iplus + 1 
    End If 
    On Error GoTo 0 
    adoRecordset.MoveNext 
   iall = iall + 1 
Loop 

f1.WriteLine("Всего проверено " & iall & " пользователей") 
f1.Close 
adoRecordset.Close 
adoConnection.Close 

Set WshShell = WScript.CreateObject("WScript.Shell") 
On Error Resume Next 
Path = "notepad c:\testfile.txt" 
WshShell.Run Path

lifehack для windows или как создать пользователя не заходя в систему

» — Деда, а ты сколько в войну сбил самолетов?

  • Три, внучек. Хотя как «сбил» — недозаправил»

Приходит как-то раз ко мне ноутбук Sony Vaio из новых. Жалуется на жизнь и хочет все начать с чистого листа, т. е. восстановиться из скрытого раздела. Казалось бы что может быть проще. Волшебная кнопочка Assist и понеслась. Но через некоторое непродолжительное время пациент выплюнул ошибку «не удалось завершить процесс установки» и кнопочку ok. По нажатию «ок» уходит в ребут.

Казалось бы что может быть проще — еще раз нажмем «Assist» и повторим операцию, ан нет — не работает кнопочка... Снимаем процесс — audit.exe, оказывается windows установщик считает что установился не полностью и проверить себя не может, хотя система полностью рабочая. После завершения вышеозначенного процесса успешно запускается оболочка, но после перезагрузки картина повторяется.

Гуглим. Объясняем через реестр, что система таки установлена до конца, проверять ничего не надо и давай уже работать. Ок, говорит система, вот у меня два пользователя: Administrator и Гость; первый отключен, а второй бесправен. Не беда, вспомним старый лайвхак:

Берем установочный диск с windows 7. После отрисовки графического инсталлятора жмем Shift+F10 попадаем в шелл:

D:\
copy D:\Windows\system32\sethc.exe D:\Windows\system32\sethc.exe.old
copy D:\Windows\system32\cmd.exe D:\Windows\system32\sethc.exe

отменяем установку и ребутим машинку. И вот перед нами знакомое приглашение windows 7, но теперь у нас есть бэкдорчик) Жмем shift 5 раз и, О чудо!, открывается шелл. Дальше дело техники:

net user Administrator /active:yes
net user User Password /add
net localgroup //Получим список групп и найдем как называется группа админов Administrators или Администраторы
net localgroup "Название_группы_админов" User /add
shutdown -r -t 0 -f

После перезагрузки логинимся либо под вновь созданной учеткой User либо под админом и видим, что винда все-таки встала коряво....

Мораль: гуглим, Alt+f10 при загрузке — recovery mode для Sony Vaio. Повторяем процесс восстановления. На этот раз все гладко. Теперь ясно где был «поворот не туда»

Ранее Ctrl + ↓