Skip to content

Instantly share code, notes, and snippets.

@numbnet
Last active April 1, 2021 13:15
Show Gist options
  • Save numbnet/022f49156e4b3b50948f9e3697fad5d5 to your computer and use it in GitHub Desktop.
Save numbnet/022f49156e4b3b50948f9e3697fad5d5 to your computer and use it in GitHub Desktop.
EXAMPLE
<<<<<<< HEAD
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Component.CoreEditor",
"Microsoft.VisualStudio.Workload.CoreEditor",
"Microsoft.NetCore.Component.Runtime.5.0",
"Microsoft.NetCore.Component.Runtime.3.1",
"Microsoft.NetCore.Component.SDK",
"Microsoft.VisualStudio.Component.NuGet",
"Microsoft.Net.Component.4.6.1.TargetingPack",
"Microsoft.VisualStudio.Component.Roslyn.Compiler",
"Microsoft.VisualStudio.Component.Roslyn.LanguageServices",
"Microsoft.VisualStudio.Component.FSharp",
"Microsoft.ComponentGroup.ClickOnce.Publish",
"Microsoft.NetCore.Component.DevelopmentTools",
"Microsoft.VisualStudio.Component.FSharp.WebTemplates",
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions",
"Microsoft.VisualStudio.Component.DockerTools",
"Microsoft.NetCore.Component.Web",
"Microsoft.Net.Component.4.8.SDK",
"Microsoft.Net.Component.4.7.2.TargetingPack",
"Microsoft.Net.ComponentGroup.DevelopmentPrerequisites",
"Microsoft.VisualStudio.Component.TypeScript.4.0",
"Microsoft.VisualStudio.Component.JavaScript.TypeScript",
"Microsoft.VisualStudio.Component.JavaScript.Diagnostics",
"Microsoft.Component.MSBuild",
"Microsoft.VisualStudio.Component.TextTemplating",
"Component.Microsoft.VisualStudio.RazorExtension",
"Microsoft.VisualStudio.Component.IISExpress",
"Microsoft.VisualStudio.Component.SQL.ADAL",
"Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime",
"Microsoft.VisualStudio.Component.Common.Azure.Tools",
"Microsoft.VisualStudio.Component.SQL.CLR",
"Microsoft.VisualStudio.Component.MSODBC.SQL",
"Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils",
"Microsoft.VisualStudio.Component.ManagedDesktop.Core",
"Microsoft.Net.Component.4.5.2.TargetingPack",
"Microsoft.Net.Component.4.5.TargetingPack",
"Microsoft.VisualStudio.Component.SQL.SSDT",
"Microsoft.VisualStudio.Component.SQL.DataSources",
"Component.Microsoft.Web.LibraryManager",
"Microsoft.VisualStudio.ComponentGroup.Web",
"Microsoft.VisualStudio.Component.Web",
"Microsoft.VisualStudio.Component.IntelliCode",
"Microsoft.VisualStudio.ComponentGroup.Web.Client",
"Microsoft.Net.Component.4.TargetingPack",
"Microsoft.Net.Component.4.5.1.TargetingPack",
"Microsoft.Net.Component.4.6.TargetingPack",
"Microsoft.Net.ComponentGroup.TargetingPacks.Common",
"Microsoft.Net.Core.Component.SDK.2.1",
"Component.Microsoft.VisualStudio.Web.AzureFunctions",
"Microsoft.VisualStudio.ComponentGroup.AzureFunctions",
"Microsoft.VisualStudio.Component.Azure.Compute.Emulator",
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
"Microsoft.VisualStudio.Component.Azure.ClientLibs",
"Microsoft.VisualStudio.Component.Azure.AuthoringTools",
"Microsoft.VisualStudio.Component.CloudExplorer",
"Microsoft.VisualStudio.ComponentGroup.Web.CloudTools",
"Microsoft.VisualStudio.Component.DiagnosticTools",
"Microsoft.VisualStudio.Component.EntityFramework",
"Microsoft.VisualStudio.Component.AspNet45",
"Microsoft.VisualStudio.Component.AppInsights.Tools",
"Microsoft.VisualStudio.Component.WebDeploy",
"Component.Microsoft.VisualStudio.LiveShare",
"Microsoft.VisualStudio.Component.Wcf.Tooling",
"Microsoft.Net.Component.4.6.2.TargetingPack",
"Microsoft.Net.Component.4.7.1.TargetingPack",
"Microsoft.VisualStudio.Workload.NetWeb",
"Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites",
"Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools",
"Microsoft.VisualStudio.Component.Azure.Waverton",
"Microsoft.Component.Azure.DataLake.Tools",
"Microsoft.VisualStudio.Component.Azure.Kubernetes.Tools",
"Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools",
"Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools",
"Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices",
"Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools",
"Microsoft.VisualStudio.Component.Azure.Powershell",
"Microsoft.VisualStudio.Component.Azure.Storage.AzCopy",
"Microsoft.VisualStudio.Workload.Azure",
"Microsoft.Component.PythonTools",
"Microsoft.Component.PythonTools.Miniconda",
"Microsoft.Component.PythonTools.Web",
"Microsoft.VisualStudio.Component.VC.CoreIde",
"Microsoft.VisualStudio.Component.Windows10SDK",
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"Microsoft.VisualStudio.Component.Graphics.Tools",
"Microsoft.VisualStudio.Component.VC.DiagnosticTools",
"Microsoft.VisualStudio.Component.Windows10SDK.18362",
"Component.CPython3.x64",
"Component.CPython3.x86",
"Microsoft.VisualStudio.Workload.Python",
"Microsoft.VisualStudio.Component.Node.Tools",
"Microsoft.VisualStudio.Workload.Node",
"Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
"Microsoft.ComponentGroup.Blend",
"Microsoft.VisualStudio.Component.Debugger.JustInTime",
"Microsoft.VisualStudio.Component.DotNetModelBuilder",
"Microsoft.VisualStudio.Component.FSharp.Desktop",
"Component.Dotfuscator",
"Microsoft.VisualStudio.Component.PortableLibrary",
"Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Component.VC.Redist.14.Latest",
"Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core",
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake",
"Microsoft.VisualStudio.Component.VC.CMake.Project",
"Microsoft.VisualStudio.Component.VC.ATL",
"Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest",
"Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest",
"Microsoft.VisualStudio.Component.VC.ASAN",
"Microsoft.VisualStudio.Component.VC.Modules.x86.x64",
"Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset",
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
"Component.IncredibuildMenu",
"Component.Incredibuild",
"Microsoft.Component.VC.Runtime.UCRTSDK",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.Component.NetFX.Native",
"Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard",
"Microsoft.VisualStudio.Component.Graphics",
"Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin",
"Microsoft.VisualStudio.ComponentGroup.UWP.Support",
"Microsoft.VisualStudio.Component.Windows10SDK.IpOverUsb",
"Microsoft.VisualStudio.Component.VC.Tools.ARM64",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
"Microsoft.VisualStudio.Component.VC.Tools.ARM",
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Workload.Universal",
"Component.OpenJDK",
"Microsoft.VisualStudio.Component.MonoDebugger",
"Microsoft.VisualStudio.Component.Merq",
"Component.Xamarin.RemotedSimulator",
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine",
"Component.Xamarin",
"Component.Android.SDK28",
"Microsoft.VisualStudio.Workload.NetCrossPlat",
"Component.Android.SDK25.Private",
"Component.HAXM.Private",
"Component.Google.Android.Emulator.API25.Private",
"Component.Android.NDK.R16B",
"Component.Ant",
"Component.MDD.Android",
"Microsoft.VisualStudio.Workload.NativeMobile",
"Microsoft.Net.Component.3.5.DeveloperTools",
"Microsoft.VisualStudio.Component.Unity",
"Component.UnityEngine.x64",
"Component.UnityEngine.x86",
"Microsoft.VisualStudio.Workload.ManagedGame",
"Component.Cocos",
"Microsoft.VisualStudio.Component.NuGet.BuildTools",
"Component.Unreal",
"Component.Unreal.Android",
"Microsoft.VisualStudio.Workload.NativeGame",
"Microsoft.VisualStudio.Workload.Data",
"Microsoft.VisualStudio.Workload.DataScience",
"Microsoft.VisualStudio.Component.VSSDK",
"Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites",
"Microsoft.VisualStudio.Component.DslTools",
"Microsoft.Component.CodeAnalysis.SDK",
"Microsoft.VisualStudio.Workload.VisualStudioExtension",
"Microsoft.VisualStudio.Component.Workflow",
"Microsoft.VisualStudio.Component.Sharepoint.Tools",
"Microsoft.VisualStudio.Component.TeamOffice",
"Microsoft.VisualStudio.Workload.Office",
"Component.MDD.Linux",
"Component.Linux.CMake",
"Component.MDD.Linux.GCC.arm",
"Microsoft.VisualStudio.Workload.NativeCrossPlat",
"Microsoft.VisualStudio.Workload.NetCoreTools",
"Microsoft.Component.HelpViewer",
"Component.GitHub.VisualStudio",
"Microsoft.VisualStudio.Component.AzureDevOps.OfficeIntegration",
"Microsoft.VisualStudio.Component.ClassDesigner",
"Microsoft.VisualStudio.Component.GraphDocument",
"Microsoft.VisualStudio.Component.DependencyValidation.Community",
"Microsoft.VisualStudio.Component.LinqToSql",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.Redist.MSM",
"Microsoft.VisualStudio.Web.Mvc4.ComponentGroup",
"Microsoft.NetCore.ComponentGroup.DevelopmentTools.2.1",
"Microsoft.VisualStudio.Component.VisualStudioData",
"Microsoft.VisualStudio.Component.VC.14.21.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.14.21.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.14.21.ATL",
"Microsoft.VisualStudio.Component.VC.14.22.ATL.ARM.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.ATL.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.ATL.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.MFC.ARM.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.MFC.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.MFC.Spectre",
"Microsoft.VisualStudio.Component.VC.14.25.ARM",
"Microsoft.VisualStudio.Component.VC.14.25.x86.x64",
"Microsoft.VisualStudio.Component.VC.14.25.x86.x64.Spectre",
"Microsoft.VisualStudio.Component.VC.14.27.ARM",
"Microsoft.VisualStudio.Component.VC.14.27.ARM64",
"Microsoft.VisualStudio.Component.VC.14.27.x86.x64",
"Microsoft.VisualStudio.Component.VC.14.27.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.14.27.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.14.27.ATL",
"Microsoft.VisualStudio.Component.VC.14.27.CLI.Support"
]
=======
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Component.CoreEditor",
"Microsoft.VisualStudio.Workload.CoreEditor",
"Microsoft.NetCore.Component.Runtime.5.0",
"Microsoft.NetCore.Component.Runtime.3.1",
"Microsoft.NetCore.Component.SDK",
"Microsoft.VisualStudio.Component.NuGet",
"Microsoft.Net.Component.4.6.1.TargetingPack",
"Microsoft.VisualStudio.Component.Roslyn.Compiler",
"Microsoft.VisualStudio.Component.Roslyn.LanguageServices",
"Microsoft.VisualStudio.Component.FSharp",
"Microsoft.ComponentGroup.ClickOnce.Publish",
"Microsoft.NetCore.Component.DevelopmentTools",
"Microsoft.VisualStudio.Component.FSharp.WebTemplates",
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions",
"Microsoft.VisualStudio.Component.DockerTools",
"Microsoft.NetCore.Component.Web",
"Microsoft.Net.Component.4.8.SDK",
"Microsoft.Net.Component.4.7.2.TargetingPack",
"Microsoft.Net.ComponentGroup.DevelopmentPrerequisites",
"Microsoft.VisualStudio.Component.TypeScript.4.0",
"Microsoft.VisualStudio.Component.JavaScript.TypeScript",
"Microsoft.VisualStudio.Component.JavaScript.Diagnostics",
"Microsoft.Component.MSBuild",
"Microsoft.VisualStudio.Component.TextTemplating",
"Component.Microsoft.VisualStudio.RazorExtension",
"Microsoft.VisualStudio.Component.IISExpress",
"Microsoft.VisualStudio.Component.SQL.ADAL",
"Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime",
"Microsoft.VisualStudio.Component.Common.Azure.Tools",
"Microsoft.VisualStudio.Component.SQL.CLR",
"Microsoft.VisualStudio.Component.MSODBC.SQL",
"Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils",
"Microsoft.VisualStudio.Component.ManagedDesktop.Core",
"Microsoft.Net.Component.4.5.2.TargetingPack",
"Microsoft.Net.Component.4.5.TargetingPack",
"Microsoft.VisualStudio.Component.SQL.SSDT",
"Microsoft.VisualStudio.Component.SQL.DataSources",
"Component.Microsoft.Web.LibraryManager",
"Microsoft.VisualStudio.ComponentGroup.Web",
"Microsoft.VisualStudio.Component.Web",
"Microsoft.VisualStudio.Component.IntelliCode",
"Microsoft.VisualStudio.ComponentGroup.Web.Client",
"Microsoft.Net.Component.4.TargetingPack",
"Microsoft.Net.Component.4.5.1.TargetingPack",
"Microsoft.Net.Component.4.6.TargetingPack",
"Microsoft.Net.ComponentGroup.TargetingPacks.Common",
"Microsoft.Net.Core.Component.SDK.2.1",
"Component.Microsoft.VisualStudio.Web.AzureFunctions",
"Microsoft.VisualStudio.ComponentGroup.AzureFunctions",
"Microsoft.VisualStudio.Component.Azure.Compute.Emulator",
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
"Microsoft.VisualStudio.Component.Azure.ClientLibs",
"Microsoft.VisualStudio.Component.Azure.AuthoringTools",
"Microsoft.VisualStudio.Component.CloudExplorer",
"Microsoft.VisualStudio.ComponentGroup.Web.CloudTools",
"Microsoft.VisualStudio.Component.DiagnosticTools",
"Microsoft.VisualStudio.Component.EntityFramework",
"Microsoft.VisualStudio.Component.AspNet45",
"Microsoft.VisualStudio.Component.AppInsights.Tools",
"Microsoft.VisualStudio.Component.WebDeploy",
"Component.Microsoft.VisualStudio.LiveShare",
"Microsoft.VisualStudio.Component.Wcf.Tooling",
"Microsoft.Net.Component.4.6.2.TargetingPack",
"Microsoft.Net.Component.4.7.1.TargetingPack",
"Microsoft.VisualStudio.Workload.NetWeb",
"Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites",
"Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools",
"Microsoft.VisualStudio.Component.Azure.Waverton",
"Microsoft.Component.Azure.DataLake.Tools",
"Microsoft.VisualStudio.Component.Azure.Kubernetes.Tools",
"Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools",
"Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools",
"Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices",
"Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools",
"Microsoft.VisualStudio.Component.Azure.Powershell",
"Microsoft.VisualStudio.Component.Azure.Storage.AzCopy",
"Microsoft.VisualStudio.Workload.Azure",
"Microsoft.Component.PythonTools",
"Microsoft.Component.PythonTools.Miniconda",
"Microsoft.Component.PythonTools.Web",
"Microsoft.VisualStudio.Component.VC.CoreIde",
"Microsoft.VisualStudio.Component.Windows10SDK",
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"Microsoft.VisualStudio.Component.Graphics.Tools",
"Microsoft.VisualStudio.Component.VC.DiagnosticTools",
"Microsoft.VisualStudio.Component.Windows10SDK.18362",
"Component.CPython3.x64",
"Component.CPython3.x86",
"Microsoft.VisualStudio.Workload.Python",
"Microsoft.VisualStudio.Component.Node.Tools",
"Microsoft.VisualStudio.Workload.Node",
"Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
"Microsoft.ComponentGroup.Blend",
"Microsoft.VisualStudio.Component.Debugger.JustInTime",
"Microsoft.VisualStudio.Component.DotNetModelBuilder",
"Microsoft.VisualStudio.Component.FSharp.Desktop",
"Component.Dotfuscator",
"Microsoft.VisualStudio.Component.PortableLibrary",
"Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Component.VC.Redist.14.Latest",
"Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core",
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake",
"Microsoft.VisualStudio.Component.VC.CMake.Project",
"Microsoft.VisualStudio.Component.VC.ATL",
"Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest",
"Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest",
"Microsoft.VisualStudio.Component.VC.ASAN",
"Microsoft.VisualStudio.Component.VC.Modules.x86.x64",
"Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset",
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
"Component.IncredibuildMenu",
"Component.Incredibuild",
"Microsoft.Component.VC.Runtime.UCRTSDK",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.Component.NetFX.Native",
"Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard",
"Microsoft.VisualStudio.Component.Graphics",
"Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin",
"Microsoft.VisualStudio.ComponentGroup.UWP.Support",
"Microsoft.VisualStudio.Component.Windows10SDK.IpOverUsb",
"Microsoft.VisualStudio.Component.VC.Tools.ARM64",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
"Microsoft.VisualStudio.Component.VC.Tools.ARM",
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Workload.Universal",
"Component.OpenJDK",
"Microsoft.VisualStudio.Component.MonoDebugger",
"Microsoft.VisualStudio.Component.Merq",
"Component.Xamarin.RemotedSimulator",
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine",
"Component.Xamarin",
"Component.Android.SDK28",
"Microsoft.VisualStudio.Workload.NetCrossPlat",
"Component.Android.SDK25.Private",
"Component.HAXM.Private",
"Component.Google.Android.Emulator.API25.Private",
"Component.Android.NDK.R16B",
"Component.Ant",
"Component.MDD.Android",
"Microsoft.VisualStudio.Workload.NativeMobile",
"Microsoft.Net.Component.3.5.DeveloperTools",
"Microsoft.VisualStudio.Component.Unity",
"Component.UnityEngine.x64",
"Component.UnityEngine.x86",
"Microsoft.VisualStudio.Workload.ManagedGame",
"Component.Cocos",
"Microsoft.VisualStudio.Component.NuGet.BuildTools",
"Component.Unreal",
"Component.Unreal.Android",
"Microsoft.VisualStudio.Workload.NativeGame",
"Microsoft.VisualStudio.Workload.Data",
"Microsoft.VisualStudio.Workload.DataScience",
"Microsoft.VisualStudio.Component.VSSDK",
"Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites",
"Microsoft.VisualStudio.Component.DslTools",
"Microsoft.Component.CodeAnalysis.SDK",
"Microsoft.VisualStudio.Workload.VisualStudioExtension",
"Microsoft.VisualStudio.Component.Workflow",
"Microsoft.VisualStudio.Component.Sharepoint.Tools",
"Microsoft.VisualStudio.Component.TeamOffice",
"Microsoft.VisualStudio.Workload.Office",
"Component.MDD.Linux",
"Component.Linux.CMake",
"Component.MDD.Linux.GCC.arm",
"Microsoft.VisualStudio.Workload.NativeCrossPlat",
"Microsoft.VisualStudio.Workload.NetCoreTools",
"Microsoft.Component.HelpViewer",
"Component.GitHub.VisualStudio",
"Microsoft.VisualStudio.Component.AzureDevOps.OfficeIntegration",
"Microsoft.VisualStudio.Component.ClassDesigner",
"Microsoft.VisualStudio.Component.GraphDocument",
"Microsoft.VisualStudio.Component.DependencyValidation.Community",
"Microsoft.VisualStudio.Component.LinqToSql",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.Redist.MSM",
"Microsoft.VisualStudio.Web.Mvc4.ComponentGroup",
"Microsoft.NetCore.ComponentGroup.DevelopmentTools.2.1",
"Microsoft.VisualStudio.Component.VisualStudioData",
"Microsoft.VisualStudio.Component.VC.14.21.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.14.21.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.14.21.ATL",
"Microsoft.VisualStudio.Component.VC.14.22.ATL.ARM.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.ATL.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.ATL.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.MFC.ARM.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.MFC.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.14.22.MFC.Spectre",
"Microsoft.VisualStudio.Component.VC.14.25.ARM",
"Microsoft.VisualStudio.Component.VC.14.25.x86.x64",
"Microsoft.VisualStudio.Component.VC.14.25.x86.x64.Spectre",
"Microsoft.VisualStudio.Component.VC.14.27.ARM",
"Microsoft.VisualStudio.Component.VC.14.27.ARM64",
"Microsoft.VisualStudio.Component.VC.14.27.x86.x64",
"Microsoft.VisualStudio.Component.VC.14.27.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.14.27.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.14.27.ATL",
"Microsoft.VisualStudio.Component.VC.14.27.CLI.Support"
]
>>>>>>> c9f29274a070fc252ad363c8a06ab5bd2728eeef
}
Y z,DESKTOP-TECHO/User,DESKTOP-TechO,29.01.2021 18:30,file:///C:/Users/User/AppData/Roaming/OpenOffice/4;
#!/usr/bin/env bash
filename="addConfigSSHkey.sh"
email="$1"
hostname="$2"
#Pkeyssh="$3"
hostalias="$hostname"
tkeyssh="ed25519"
keypath="$HOME/.ssh/${hostname}_${tkeyssh}"
echo "Enter new SSH KEY: " && read PKEYSSH;
ssh-keygen -t $tkeyssh -C $email -f $keypath -N "$PKEYSSH"
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
LogLevel QUIET
ConnectTimeout=10
Host github.com
AddKeystoAgent yes
UseKeychain yes
Hostname $hostname *.$hostname
User git
IdentitiesOnly yes
IdentityFile $keypath
EOF
fi
echo "## и запустить его как";
echo "bash addConfigSSHkey.sh [email protected] github.com"
#!/bin/bash
##=============================================
while true; do
read -e -p "Restart your server now to complete the install (y/n)? " rsn
case $rsn in
[Yy]* ) break;;
[Nn]* ) echo "NO";exit;
esac
done
echo "YES"
<<<<<<< HEAD
#!/bin/bash
ver="v1.0.0"
title="ask-"
title_full="$title $ver"
NAMEFILE=askSelect.sh
##============ ≠≠≠ ============
#типовые функции
##============ ≠≠≠ ============
##============ ≠≠≠ ============
#для рабты с цветами
normal="\033[0m"
green="\033[32m"
red="\033[1;31m"
blue="\033[1;34m"
black="\033[40m"
textcolor=$green
bgcolor=$black
## Color
color() {
case "$1" in
normal|default)
sed -i -e 's/^textcolor=.*/textcolor=$normal/' -e 's/^bgcolor=.*/bgcolor=$normal/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$normal #меняем переменную в текущей сессии
bgcolor=$normal #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
green)
sed -i -e 's/^textcolor=.*/textcolor=$green/' -e 's/^bgcolor=.*/bgcolor=$black/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$green #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
blue)
sed -i -e 's/^textcolor=.*/textcolor=$blue/' -e 's/^bgcolor=.*/bgcolor=$black/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$blue #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
red)
sed -i -e 's/^textcolor=.*/textcolor=$red/' -e 's/^bgcolor=.*/bgcolor=$black/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$red #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
*)echo "цвет указан неверно. Поддерживается только green, blue, red и default/normal"
;;
esac
}
my_clear() { echo -e "$textcolor$bgcolor";clear;}
#функция, которая запрашивает только один символ
myread() { temp=""; while [ -z "$temp" ] #защита от пустых значений
do
read -n 1 temp
done
eval $1=$temp
echo
}
#функция, которая запрашивает только да или нет
myread_yn() {
temp=""
while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запрашиваем значение, пока не будет "y" или "n"
do
echo -n "y/n: "
read -n 1 temp
echo
done
eval $1=$temp
}
#функция, которая запрашивает только цифру
myread_dig() {
temp=""
counter=0
while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запрашиваем значение, пока не будет цифра
do
if [ $counter -ne 0 ]; then echo -n "Неправильный выбор. Ведите цифру: "; fi
let "counter=$counter+1"
read -n 1 temp
echo
done
eval $1=$temp
}
##============ ≠≠≠ ============
#функция установки с проверкой не установлен ли уже пакет
myinstall() {
if [ -z `rpm -qa $1` ]; then
yum -y install $1
else
echo "Пакет $1 уже установлен"
br
fi
}
title() { my_clear;echo "$title"; }
menu() { my_clear;echo "$menu";echo "Выберите Select меню:"; }
wait() { echo "Нажмите любую клавишу, чтобы продолжить..."; read -s -n 1; }
br() { echo ""; }
updatescript() { wget $updpath/$filename -r -N -nd --no-check-certificate; chmod 777 $filename; }
##============ ≠≠≠ ============
## Функция проверки установленного приложения, exist возвращает true если установлена и false, если нет.
installed() {
if [ "$2" == "force" ]; then exist=`rpm -qa $1` #добавили возможности форсированно использовать длинный вариант проверки
else #если нет ключа force, используем старый двойной вариант
exist=`whereis $1 | awk {'print $2'}` #вариант быстрый, но не всегда эффективный
if [ -z $exist ]
then #будем использовать оба варианта
exist=`rpm -qa $1` #вариант медленнее, но эффективнее
fi
fi
if [ -n "$exist" ]
then
exist=true
else
exist=false
fi
}
menu="
● $title $ver$space
├───┬─────────────────────────────────────────┐
│ 1 │ Select 1 │
├───┼─────────────────────────────────────────┤
│ 2 │ Select 2 │
├───┼─────────────────────────────────────────┤
│ 3 │ Select 3 │
├───┼─────────────────────────────────────────┤
│ 4 │ Select 4 │
├───┼─────────────────────────────────────────┤
│ 5 │ Select 5 │
├───┼─────────────────────────────────────────┤
│ 6 │ Select 6 │
├───┼─────────────────────────────────────────┤
│ 7 │ Select 7 │
├───┼─────────────────────────────────────────┤
│ 8 │ Select 8 │
├───┼─────────────────────────────────────────┤
│ 9 │ Select 9 │
├───┼─────────────────────────────────────────┤
│ 0 │ Выход │
└───┴─────────────────────────────────────────┘
"
menu1="
● Основное меню :
└─● выбран Select "$pick":
│ ┌───┬────────────────────────┐
├─┤ 1 │ SubSelect 1 │
│ ├───┼────────────────────────┤
├─┤ 2 │ SubSelect 2 │
│ ├───┼────────────────────────┤
├─┤ 3 │ SubSelect 3 │
│ ├───┼────────────────────────┤
├─┤ 4 │ SubSelect 4 │
│ ├───┼────────────────────────┤
├─┤ 5 │ SubSelect 5 │
│ ├───┼────────────────────────┤
├─┤ 6 │ SubSelect 6 │
│ ├───┼────────────────────────┤
├─┤ 7 │ SubSelect 7 │
│ ├───┼────────────────────────┤
├─┤ 8 │ SubSelect 8 │
│ ├───┼────────────────────────┤
├─┤ 9 │ SubSelect 9 │
│ ├───┼────────────────────────┤
└─┤ 0 │ НА УРОВЕНЬ ВВЕРХ │
└───┴────────────────────────┘
"
##============ ≠≠≠ ============
## Интерфейс
##============ ≠≠≠ ============
repeat=true
chosen=0
chosen2=0
while [ "$repeat" = "true" ] #выводим меню, пока не надо выйти
do
##============ ≠≠≠ ============
## пошёл вывод
if [ $chosen -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
menu
myread_dig pick
else
pick=$chosen
fi
case "$pick" in
1) echo "Select $pick ===="
chosen=1
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
2) echo "Select $pick ===="
chosen=2
my_clear
if [ $chosen2 -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
echo "$title"
echo "$menu1"
myread_dig pick
else
pick=$chosen2
fi
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
3) echo "Select $pick ===="
chosen=3
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Selectect $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
4) echo "Select $pick ===="
chosen=4
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
5) echo "Select $pick ===="
chosen=5
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
6) echo "Select $pick ===="
chosen=6
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
7) echo "Select $pick ===="
chosen=7
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
8) echo "Select $pick ===="
chosen=8
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
9) echo "Select $pick ===="
chosen=9
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
0)
repeat=false
;;
*)
echo "Неправильный выбор."
wait
;;
esac
done
echo "Скрипт ожидаемо завершил свою работу."
echo -e "$normal"
=======
#!/bin/bash
ver="v1.0.0"
title="ask-"
title_full="$title $ver"
NAMEFILE=askSelect.sh
##============ ≠≠≠ ============
#типовые функции
##============ ≠≠≠ ============
##============ ≠≠≠ ============
#для рабты с цветами
normal="\033[0m"
green="\033[32m"
red="\033[1;31m"
blue="\033[1;34m"
black="\033[40m"
textcolor=$green
bgcolor=$black
## Color
color() {
case "$1" in
normal|default)
sed -i -e 's/^textcolor=.*/textcolor=$normal/' -e 's/^bgcolor=.*/bgcolor=$normal/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$normal #меняем переменную в текущей сессии
bgcolor=$normal #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
green)
sed -i -e 's/^textcolor=.*/textcolor=$green/' -e 's/^bgcolor=.*/bgcolor=$black/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$green #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
blue)
sed -i -e 's/^textcolor=.*/textcolor=$blue/' -e 's/^bgcolor=.*/bgcolor=$black/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$blue #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
red)
sed -i -e 's/^textcolor=.*/textcolor=$red/' -e 's/^bgcolor=.*/bgcolor=$black/' $NAMEFILE #меняем переменную в самом скрипте
textcolor=$red #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
*)echo "цвет указан неверно. Поддерживается только green, blue, red и default/normal"
;;
esac
}
my_clear() { echo -e "$textcolor$bgcolor";clear;}
#функция, которая запрашивает только один символ
myread() { temp=""; while [ -z "$temp" ] #защита от пустых значений
do
read -n 1 temp
done
eval $1=$temp
echo
}
#функция, которая запрашивает только да или нет
myread_yn() {
temp=""
while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запрашиваем значение, пока не будет "y" или "n"
do
echo -n "y/n: "
read -n 1 temp
echo
done
eval $1=$temp
}
#функция, которая запрашивает только цифру
myread_dig() {
temp=""
counter=0
while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запрашиваем значение, пока не будет цифра
do
if [ $counter -ne 0 ]; then echo -n "Неправильный выбор. Ведите цифру: "; fi
let "counter=$counter+1"
read -n 1 temp
echo
done
eval $1=$temp
}
##============ ≠≠≠ ============
#функция установки с проверкой не установлен ли уже пакет
myinstall() {
if [ -z `rpm -qa $1` ]; then
yum -y install $1
else
echo "Пакет $1 уже установлен"
br
fi
}
title() { my_clear;echo "$title"; }
menu() { my_clear;echo "$menu";echo "Выберите Select меню:"; }
wait() { echo "Нажмите любую клавишу, чтобы продолжить..."; read -s -n 1; }
br() { echo ""; }
updatescript() { wget $updpath/$filename -r -N -nd --no-check-certificate; chmod 777 $filename; }
##============ ≠≠≠ ============
## Функция проверки установленного приложения, exist возвращает true если установлена и false, если нет.
installed() {
if [ "$2" == "force" ]; then exist=`rpm -qa $1` #добавили возможности форсированно использовать длинный вариант проверки
else #если нет ключа force, используем старый двойной вариант
exist=`whereis $1 | awk {'print $2'}` #вариант быстрый, но не всегда эффективный
if [ -z $exist ]
then #будем использовать оба варианта
exist=`rpm -qa $1` #вариант медленнее, но эффективнее
fi
fi
if [ -n "$exist" ]
then
exist=true
else
exist=false
fi
}
menu="
● $title $ver$space
├───┬─────────────────────────────────────────┐
│ 1 │ Select 1 │
├───┼─────────────────────────────────────────┤
│ 2 │ Select 2 │
├───┼─────────────────────────────────────────┤
│ 3 │ Select 3 │
├───┼─────────────────────────────────────────┤
│ 4 │ Select 4 │
├───┼─────────────────────────────────────────┤
│ 5 │ Select 5 │
├───┼─────────────────────────────────────────┤
│ 6 │ Select 6 │
├───┼─────────────────────────────────────────┤
│ 7 │ Select 7 │
├───┼─────────────────────────────────────────┤
│ 8 │ Select 8 │
├───┼─────────────────────────────────────────┤
│ 9 │ Select 9 │
├───┼─────────────────────────────────────────┤
│ 0 │ Выход │
└───┴─────────────────────────────────────────┘
"
menu1="
● Основное меню :
└─● выбран Select "$pick":
│ ┌───┬────────────────────────┐
├─┤ 1 │ SubSelect 1 │
│ ├───┼────────────────────────┤
├─┤ 2 │ SubSelect 2 │
│ ├───┼────────────────────────┤
├─┤ 3 │ SubSelect 3 │
│ ├───┼────────────────────────┤
├─┤ 4 │ SubSelect 4 │
│ ├───┼────────────────────────┤
├─┤ 5 │ SubSelect 5 │
│ ├───┼────────────────────────┤
├─┤ 6 │ SubSelect 6 │
│ ├───┼────────────────────────┤
├─┤ 7 │ SubSelect 7 │
│ ├───┼────────────────────────┤
├─┤ 8 │ SubSelect 8 │
│ ├───┼────────────────────────┤
├─┤ 9 │ SubSelect 9 │
│ ├───┼────────────────────────┤
└─┤ 0 │ НА УРОВЕНЬ ВВЕРХ │
└───┴────────────────────────┘
"
##============ ≠≠≠ ============
## Интерфейс
##============ ≠≠≠ ============
repeat=true
chosen=0
chosen2=0
while [ "$repeat" = "true" ] #выводим меню, пока не надо выйти
do
##============ ≠≠≠ ============
## пошёл вывод
if [ $chosen -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
menu
myread_dig pick
else
pick=$chosen
fi
case "$pick" in
1) echo "Select $pick ===="
chosen=1
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
2) echo "Select $pick ===="
chosen=2
my_clear
if [ $chosen2 -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
echo "$title"
echo "$menu1"
myread_dig pick
else
pick=$chosen2
fi
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
3) echo "Select $pick ===="
chosen=3
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Selectect $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
4) echo "Select $pick ===="
chosen=4
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
5) echo "Select $pick ===="
chosen=5
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
6) echo "Select $pick ===="
chosen=6
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
7) echo "Select $pick ===="
chosen=7
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
8) echo "Select $pick ===="
chosen=8
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
9) echo "Select $pick ===="
chosen=9
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
0)
repeat=false
;;
*)
echo "Неправильный выбор."
wait
;;
esac
done
echo "Скрипт ожидаемо завершил свою работу."
echo -e "$normal"
>>>>>>> c9f29274a070fc252ad363c8a06ab5bd2728eeef
clear
#!/bin/bash
ver="v1.0.0"
title="TERMUX Shell Script"
title_full="$title $ver"
##============ ≠≠≠ ============
#типовые функции
##============ ≠≠≠ ============
##============ ≠≠≠ ============
#для рабты с цветами
normal="\033[0m"
green="\033[32m"
red="\033[1;31m"
blue="\033[1;34m"
black="\033[40m"
textcolor=$green
bgcolor=$black
color()
{
case "$1" in
normal|default)
sed -i -e 's/^textcolor=.*/textcolor=$normal/' -e 's/^bgcolor=.*/bgcolor=$normal/' breeze.sh #меняем переменную в самом скрипте
textcolor=$normal #меняем переменную в текущей сессии
bgcolor=$normal #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
green)
sed -i -e 's/^textcolor=.*/textcolor=$green/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте
textcolor=$green #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
blue)
sed -i -e 's/^textcolor=.*/textcolor=$blue/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте
textcolor=$blue #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
red)
sed -i -e 's/^textcolor=.*/textcolor=$red/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте
textcolor=$red #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
*)
echo "цвет указан неверно. Поддерживается только green, blue, red и default/normal"
;;
esac
}
##============ ≠≠≠ ============
my_clear() { echo -e "$textcolor$bgcolor"; clear;}
##============ ≠≠≠ ============
#функция, запрашивает только один символ
myread()
{
temp=""
while [ -z "$temp" ] #защита от пустых значений
do
read -n 1 temp
done
eval $1=$temp
echo
}
##============ ≠≠≠ ============
## функция, запрашивает только да/нет
myread_yn() {
temp=""
while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запрашиваем значение, пока не будет "y" или "n"
do
echo -n "y/n: "
read -n 1 temp
echo
done
eval $1=$temp
}
##============ ≠≠≠ ============
## функция, запрашивает только цифру
myread_dig()
{
temp=""
counter=0
while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запрашиваем значение, пока не будет цифра
do
if [ $counter -ne 0 ]; then echo -n "Неправильный выбор. Ведите цифру: "; fi
let "counter=$counter+1"
read -n 1 temp
echo
done
eval $1=$temp
}
##============ ≠≠≠ ============
#функция установки с проверкой не установлен ли уже пакет
myinstall()
{
if [ -z `rpm -qa $1` ]; then
yum -y install $1
else
echo "Пакет $1 уже установлен"
br
fi
}
title() { my_clear;echo "$title";}
menu() { my_clear;echo "$menu";echo "Выберите пункт меню:";}
wait() { echo "Нажмите любую клавишу,чтобы продолжить...";read -s -n 1;}
br() { echo "";}
##============ ≠≠≠ ============
#Функция проверки установленного приложения, exist возвращает true если установлена и false, если нет.
installed() {
if [ "$2" == "force" ]; then exist=`rpm -qa $1` #добавили возможности форсированно использовать длинный вариант проверки
else # если нет ключа force, используем старый двойной вариант
exist=`whereis $1 | awk {'print $2'}` # вариант быстрый, но не всегда эффективный
if [ -z $exist ]
then # будем использовать оба варианта
exist=`rpm -qa $1` # вариант медленнее, но эффективнее
fi
fi
if [ -n "$exist" ]
then
exist=true
else
exist=false
fi
}
##============ ≠≠≠ ============
#задаем переменные
##============ ≠≠≠ ============
## Задаём переменную с нужным количеством пробелов,
## чтобы меню не разъезжалось от смены версии
title_full_len = ${#title_full}
title_len = ${#title}
space=""
let "space_len=43-$title_full_len"
while [ "${#space}" -le $space_len ]
do
space=$space" "
done
space2=""
let "space2_len=30-$title_len"
while [ "${#space2}" -le $space2_len ]
do
space2=$space2" "
done
##============ ≠≠≠ ============
## Меню
menu="
┌─────────────────────────────────────────────┐
│ $title $ver$space│
├───┬─────────────────────────────────────────┤
│ 1 │ TERMUX на Андроид │
├───┼─────────────────────────────────────────┤
│ 2 │ ==================== │
├───┼─────────────────────────────────────────┤
│ 3 │ Установить панель управления хостингом │
├───┼─────────────────────────────────────────┤
│ 4 │ Установка и настройка VPN-сервера │
├───┼─────────────────────────────────────────┤
│ 5 │ Работа с Proxy │
├───┼─────────────────────────────────────────┤
│ 6 │ Работа с файлами и программами │
├───┼─────────────────────────────────────────┤
│ 7 │ Очистка системы │
├───┼─────────────────────────────────────────┤
│ 8 │ Терминал │
├───┼─────────────────────────────────────────┤
│ 9 │ Обновить │
├───┼─────────────────────────────────────────┤
│ 0 │ Выход │
└───┴─────────────────────────────────────────┘
"
menu1="
● Работа скрипта :
└─● Выполнение ТЕСТА № $pick:
│ ┌───┬────────────────────────┐
├─┤ 1 │ Кастомизация Termux │
│ ├───┼────────────────────────┤
├─┤ 2 │ Установка │
│ ├───┼────────────────────────┤
├─┤ 3 │ Test 3 │
│ ├───┼────────────────────────┤
├─┤ 4 │ Test 4 │
│ ├───┼────────────────────────┤
├─┤ 5 │ Test 5 │
│ ├───┼────────────────────────┤
├─┤ 6 │ Test 6 │
│ ├───┼────────────────────────┤
├─┤ 7 │ Test 7 │
│ ├───┼────────────────────────┤
├─┤ 8 │ Test 8 │
│ ├───┼────────────────────────┤
├─┤ 9 │ Test 9 │
│ ├───┼────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴────────────────────────┘
"
##============ ≠≠≠ ============
#Интерфейс
##============ ≠≠≠ ============
repeat=true
chosen=0
chosen2=0
while [ "$repeat" = "true" ] # выводим меню, пока не надо выйти
do
## пошёл вывод
if [ $chosen -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
menu
myread_dig pick
else
pick=$chosen
fi
case "$pick" in
1) echo "Позиция $pick"
chosen=1
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
2) #Работа с ОС
chosen=2
my_clear
if [ $chosen2 -eq 0 ]; then #выводим меню, только если ещё никуда не заходили
echo "$title"
echo "$menu1"
myread_dig pick
else
pick=$chosen2
fi
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
3) #
chosen=3
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
4) # Установка
chosen=4
my_clear
echo "$title"
echo "$menu4"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
5) # Установка
chosen=5
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
6) # Установка
chosen=6
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
7) # установка
chosen=7
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
8) # установка
chosen=8
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
9) # Установка
chosen=9
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9) echo "Select $pick";br;wait;;
0) chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
0) repeat=false
;;
*) echo "Неправильный выбор.";wait
;;
esac
done
echo "Скрипт ожидаемо завершил работу."
echo -e "$normal"
clear
#!/bin/bash
####################
##
echo "Do you want to continue?(yes/no)"
read input
if [ "$input" == "yes" ]
then
echo "continue"
fi
#################################
## var 1
#useConfirm=true - comment out the line below like this to disable confirmation
useConfirm=true
confirm() {
[ "$useConfirm" = true ] && read -p "Proceed? (Enter) - (^C to abort)"
}
echo a
confirm
echo b
echo c
confirm
echo d
################################
## Enter - продолжить; 1 - выйти
## чтобы сломать сценар bash:
read a;
if [ "$a" == "1" ]; then
exit;
fi
#!/bin/bash
## КОНВЕРТАЦИЯ SSL СЕРТИФИКАТОВ В OPENSSL
## Данные команды OpenSSL дают возможность преобразовать сертификаты и ключи в разные форматы. Для того чтобы сделать их совместимыми с определенными видами серверов, либо ПО.
## К примеру, Вам необходимо конвертировать обыкновенный файл PEM, который будет работать с Apache, в формат PFX (PKCS # 12) с целью применения его с Tomcat, либо IIS.
## ==================================
## Конвертировать PEM в DER
openssl x509 -outform der -in certificate.pem -out certificate.der
## Конвертировать PEM в P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
## Конвертировать PEM в PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
## Конвертировать DER в PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
## Конвертировать P7B в PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
## Конвертировать P7B в PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.ceropenssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
## Конвертировать PFX в PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
#!/bin/bash
## OpenSSL -что это? 21 пример команд OpenSSL, которые помогут вам на практике
##Одним из самых популярных инструментов для создания и управления SSL-сертификатами является библиотека OpenSSL. В этой статье я расскажу о часто используемых командах OpenSSL.
##
##Некоторые аббревиатуры, относящиеся к сертификатам:
##
##SSL – Secure Socket Layer (уровень защищённых cокетов).
##CSR – Certificate Signing Request (запрос на получение сертификата).
##TLS – Transport Layer Security (протокол защиты транспортного уровня).
##PEM – Privacy Enhanced Mail (формат файлов для хранения и отправки криптографических ключей).
##SHA – Secure Hash Algorithm (алгоритм криптографического хеширования).
##PKCS – Public-Key Cryptography Standards (стандарты криптографии с открытым ключом).
##Содержание
##Создание нового секретного ключа и запрос на получение сертификата
##Создание самозаверяемого сертификата
##Верификация CSR-файла
##Создание секретного RSA-ключа
##Удаление пароля-фразы из ключа
##Верификация секретного ключа
##Верификация файла сертификата
##Верификация центра сертификации
##Проверка хеш-значения сертификата
##Преобразование формата DER в PEM
##Преобразование формата PEM в DER
##Преобразование сертификата и секретного ключа в формат PKCS#12
##Создание CSR с использованием существующего секретного ключа
##Проверка содержимого сертификата в формате PKCS12
##Преобразование формата PKCS12 в PEM-сертификат
##Проверка SSL-сертификата определенного URL-адреса
##Определение версии OpenSSL
##Проверка даты истечения срока действия PEM-файла
##Проверка срока действия SSL-сертификата для URL-адреса
##Проверка, принимается ли на URL-адресеSSL V2 или V
##Проверка того, принимается ли конкретный шифр на URL-адресе
##
##
##1. Создание нового секретного ключа и запрос на получение сертификата
opensslreq -out geekflare.csr -newkey rsa:2048 -nodes -keyoutgeekflare.key
##Команда генерирует CSR и файл 2048-битногоRSA-ключа. Если вы собираетесь использовать этот сертификат на Apache или Nginx, то необходимо отправить CSR-файл в центр сертификации. Он предоставит вам заверенный сертификат (в формате der или pem), который нужно настроить на веб-сервере Apache или Nginx.
##
#### 2. Создание самозаверяемого сертификата
opensslreq -x509 -sha256 -nodes -newkey rsa:2048 -keyoutgfselfsigned.key -out gfcert.pem
##
##Команда генерирует самозаверенный сертификат и файл 2048-битного RSA-ключа. Я также включил в команду хеш-функцию sha256, поскольку она считается наиболее безопасной.
##
##Совет: По умолчанию команда генерирует самозаверенный сертификат, действительный только один месяц. Для увеличения этого срока переопределите параметра — days.
##
##
##Пример: для получения сертификата, действительного два года.
##
##opensslreq -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyoutgfselfsigned.key -out gfcert.pem
##
##
##3. Верификация CSR-файла
opensslreq -noout -text -in geekflare.csr
##Верификация необходима, чтобы отправленный в регистрационный центр CSR-файл содержал всю необходимую информацию.
##
##4. Создание секретного RSA-ключа
opensslgenrsa -out private.key 2048
##Если нужно создать секретный RSA-ключ, используйте приведенную выше команду.
##
##5. Удаление пароля-фразы из ключа
opensslrsa -in certkey.key -out nopassphrase.key
##Если вы используете составной пароль (фразу) в файле ключа и работаете на Apache, то при каждом запуске нужно вводить секретную фразу. Если вас это раздражает, то можно использовать приведенную выше команду, чтобы удалить пароль-фразу из существующего ключа.
##
##
##
##6. Верификация секретного ключа
##11 примеров использование команд cURL в режиме реального времени
opensslrsa -in certkey.key –check
##Если вы сомневаетесь в файле ключа, то можете использовать данную команду.
##
##7. Верификация файла сертификата
openssl x509 -in certfile.pem -text –noout
##Если хотите проверить данные сертификата, такие как CN, OU и т.д., используйте приведенную выше команду, которая предоставит данные сертификата.
##
##8. Верификация центра сертификации
openssl x509 -in certfile.pem -noout -issuer -issuer_hash
##Для проверки центра сертификации можно использовать приведенную выше команду.
##
##9. Проверка хеш-значения сертификата
openssl x509 -noout -hash -in bestflare.pem
##
##
##10. Преобразование формата DER в PEM
openssl x509 –inform der –in sslcert.der –out sslcert.pem
##Центр сертификации предоставляет SSL-сертификат в формате .der. Если вам необходимо использовать его в формате apache или .pem, примените приведенную выше команду для соответствующего преобразования.
##
##11. Преобразование формата PEM в DER
##Виджеты для сайта - 10 виджетов, которые улучшат функционал сайта
openssl x509 –outform der –in sslcert.pem –out sslcert.der
##Если необходимо изменить формат .pem на .der.
##
##12. Преобразование сертификата и секретного ключа в формат PKCS#12
openssl pkcs12 –export –out sslcert.pfx –inkeykey.pem –in sslcert.pem
##Если необходимо использовать сертификат с Java-приложением, принимающим только формат PKCS#12, примените приведенную выше команду. Она генерирует один pfx файл, содержащий сертификат и ключ.
##
##Совет. Вы также можете включить цепочку сертификатов, передав параметр -chain, как показано в примере ниже.
##
##openssl pkcs12 –export –out sslcert.pfx –inkeykey.pem –in sslcert.pem -chain cacert.pem
##13. Создание CSR с использованием существующего секретного ключа
opensslreq –out certificate.csr –keyexisting.key –new
##Если не хотите создавать новый секретный ключ вместо существующего, выполните приведенную выше команду.
##
##14. Проверка содержимого сертификата в формате PKCS12
openssl pkcs12 –info –nodes –in cert.p12
##Как составить бриф на разработку сайта?
##PKCS12 является двоичным форматом, поэтому вы не сможете просмотреть его содержимое в текстовом редакторе. Для просмотра файла в формате PKCS12 используйте приведенную выше команду.
##
##
##
##15. Преобразование формата PKCS12 в PEM-сертификат
openssl pkcs12 –in cert.p12 –out cert.pem
##Если нужно использовать существующий файл в формате pkcs12 на Apache или только в формате pem, в этом поможет приведенная выше команда.
##
##16. Проверка SSL-сертификата определенного URL-адреса
openssls_client -connect yoururl.com:443 –showcerts
##Я часто использую эту команду для проверки SSL-сертификата URL-адреса. Это удобно для проверки данных протокола, шифрования и сертификата.
##
##17. Определение версии OpenSSL
openssl version
##18. Проверка даты истечения срока действия PEM-файла
openssl x509 -noout -in certificate.pem -dates
##Команда выведет дату в формате notBefore и notAfter. notAfter — это та дата, которая нужна, чтобы определить, истек ли срок действия сертификата или он еще действителен.
##
##Пример:
##
##[root@Chandan opt]# openssl x509 -noout -in bestflare.pem -dates
##notBefore=Jul 4 14:02:45 2015 GMT
##notAfter=Aug 4 09:46:42 2015 GMT
##[root@Chandan opt]#
##19. Проверка срока действия SSL-сертификата для URL-адреса
openssls_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate
##Команда позволяет контролировать дату истечения срока действия SSL- сертификата удаленно или для конкретного URL-адреса.
##
##Пример:
##
##[root@Chandan opt]# openssls_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate
##
##notAfter=Dec 8 00:00:00 2015 GMT
##20. Проверка, принимается ли на URL-адресеSSL V2 или V
##Чтобы проверить SSL V2:
##
##openssls_client -connect secureurl.com:443 -ssl2
##Чтобы проверить SSL V3:
##
##openssls_client -connect secureurl.com:443 –ssl3
##Чтобы проверить TLS 1.0:
##
##openssls_client -connect secureurl.com:443 –tls1
##Чтобы проверить TLS 1.1:
##
##openssls_client -connect secureurl.com:443 –tls1_1
##Чтобы проверить TLS 1.2:
##
##openssls_client -connect secureurl.com:443 –tls1_2
##Если необходимо проверить, включен ли SSL V2 / V3 или нет, используйте приведенную выше команду. Если он включен, то вы получите сообщение «CONNECTED», в противном случае –сообщение «handshake failure».
##
##21. Проверка того, принимается ли конкретный шифр на URL-адресе
openssls_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443
##Если хотите знать, принимаются ли некоторые слабые шифры, то можете использовать приведенную выше команду.
##
##Для этого необходимо задать шифр и URL-адрес. Если шифр будет принят, вы получите сообщение «CONNECTED», иначе – сообщение «handshake failure».
##
##Надеюсь, что приведенные выше команды помогли вам узнать больше об использовании OpenSSL для управления SSL-сертификатами
#$PathFile = '.\Win10_20H2_v2_Russian_x64.iso'
#$Hash = 'A402BF3DB34E8CB274515A8E62AF58139AC2B6F87C65744C6919D9F54E761562'
function Get-TestHashFiles {
$wc = [System.Net.WebClient]::new()
$pkgurl = "$PathFile"
$publishedHash = "$HashFile"
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
}
Get-TestHashFiles -PathFile -HashFile
<<<<<<< HEAD
 #$PathFile = 'D:\SOFT\os\Win10_20H2_v2_Russian_x64.iso'
#$Hash = 'A402BF3DB34E8CB274515A8E62AF58139AC2B6F87C65744C6919D9F54E761562'
function Get-TestHashFiles {
$wc = [System.Net.WebClient]::new()
$pkgurl = "$PathFile"
$publishedHash = "$Hash"
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
}
=======
 #$PathFile = 'D:\SOFT\os\Win10_20H2_v2_Russian_x64.iso'
#$Hash = 'A402BF3DB34E8CB274515A8E62AF58139AC2B6F87C65744C6919D9F54E761562'
function Get-TestHashFiles {
$wc = [System.Net.WebClient]::new()
$pkgurl = "$PathFile"
$publishedHash = "$Hash"
$FileHash = Get-FileHash -InputStream ($wc.OpenRead($pkgurl))
$FileHash.Hash -eq $publishedHash
}
>>>>>>> c9f29274a070fc252ad363c8a06ab5bd2728eeef
Get-TestHashFiles -PathFile -Hash
<<<<<<< HEAD
[data-color-mode=dark], [data-color-mode=light][data-light-theme=dark], [data-color-mode=dark][data-dark-theme=dark] {
--color-scale-black: #010409;
--color-scale-white: #f0f6fc;
--color-scale-gray-0: #f0f6fc;
--color-scale-gray-1: #c9d1d9;
--color-scale-gray-2: #b1bac4;
--color-scale-gray-3: #8b949e;
--color-scale-gray-4: #6e7681;
--color-scale-gray-5: #484f58;
--color-scale-gray-6: #30363d;
--color-scale-gray-7: #21262d;
--color-scale-gray-8: #161b22;
--color-scale-gray-9: #0d1117;
--color-scale-blue-0: #cae8ff;
--color-scale-blue-1: #a5d6ff;
--color-scale-blue-2: #79c0ff;
--color-scale-blue-3: #58a6ff;
--color-scale-blue-4: #388bfd;
--color-scale-blue-5: #1f6feb;
--color-scale-blue-6: #1158c7;
--color-scale-blue-7: #0d419d;
--color-scale-blue-8: #0c2d6b;
--color-scale-blue-9: #051d4d;
--color-scale-green-0: #aff5b4;
--color-scale-green-1: #7ee787;
--color-scale-green-2: #56d364;
--color-scale-green-3: #3fb950;
--color-scale-green-4: #2ea043;
--color-scale-green-5: #238636;
--color-scale-green-6: #196c2e;
--color-scale-green-7: #0f5323;
--color-scale-green-8: #033a16;
--color-scale-green-9: #04260f;
--color-scale-yellow-0: #f8e3a1;
--color-scale-yellow-1: #f2cc60;
--color-scale-yellow-2: #e3b341;
--color-scale-yellow-3: #d29922;
--color-scale-yellow-4: #bb8009;
--color-scale-yellow-5: #9e6a03;
--color-scale-yellow-6: #845306;
--color-scale-yellow-7: #693e00;
--color-scale-yellow-8: #4b2900;
--color-scale-yellow-9: #341a00;
--color-scale-orange-0: #ffdfb6;
--color-scale-orange-1: #ffc680;
--color-scale-orange-2: #ffa657;
--color-scale-orange-3: #f0883e;
--color-scale-orange-4: #db6d28;
--color-scale-orange-5: #bd561d;
--color-scale-orange-6: #9b4215;
--color-scale-orange-7: #762d0a;
--color-scale-orange-8: #5a1e02;
--color-scale-orange-9: #3d1300;
--color-scale-red-0: #ffdcd7;
--color-scale-red-1: #ffc1ba;
--color-scale-red-2: #ffa198;
--color-scale-red-3: #ff7b72;
--color-scale-red-4: #f85149;
--color-scale-red-5: #da3633;
--color-scale-red-6: #b62324;
--color-scale-red-7: #8e1519;
--color-scale-red-8: #67060c;
--color-scale-red-9: #490202;
--color-scale-purple-0: #eddeff;
--color-scale-purple-1: #e2c5ff;
--color-scale-purple-2: #d2a8ff;
--color-scale-purple-3: #bc8cff;
--color-scale-purple-4: #a371f7;
--color-scale-purple-5: #8957e5;
--color-scale-purple-6: #6e40c9;
--color-scale-purple-7: #553098;
--color-scale-purple-8: #3c1e70;
--color-scale-purple-9: #271052;
--color-scale-pink-0: #ffdaec;
--color-scale-pink-1: #ffbedd;
--color-scale-pink-2: #ff9bce;
--color-scale-pink-3: #f778ba;
--color-scale-pink-4: #db61a2;
--color-scale-pink-5: #bf4b8a;
--color-scale-pink-6: #9e3670;
--color-scale-pink-7: #7d2457;
--color-scale-pink-8: #5e103e;
--color-scale-pink-9: #42062a;
--color-auto-black: #f0f6fc;
--color-auto-white: #010409;
--color-auto-gray-0: #0d1117;
--color-auto-gray-1: #161b22;
--color-auto-gray-2: #21262d;
--color-auto-gray-3: #30363d;
--color-auto-gray-4: #484f58;
--color-auto-gray-5: #6e7681;
--color-auto-gray-6: #8b949e;
--color-auto-gray-7: #b1bac4;
--color-auto-gray-8: #c9d1d9;
--color-auto-gray-9: #f0f6fc;
--color-auto-blue-0: #051d4d;
--color-auto-blue-1: #0c2d6b;
--color-auto-blue-2: #0d419d;
--color-auto-blue-3: #1158c7;
--color-auto-blue-4: #1f6feb;
--color-auto-blue-5: #388bfd;
--color-auto-blue-6: #58a6ff;
--color-auto-blue-7: #79c0ff;
--color-auto-blue-8: #a5d6ff;
--color-auto-blue-9: #cae8ff;
--color-auto-green-0: #04260f;
--color-auto-green-1: #033a16;
--color-auto-green-2: #0f5323;
--color-auto-green-3: #196c2e;
--color-auto-green-4: #238636;
--color-auto-green-5: #2ea043;
--color-auto-green-6: #3fb950;
--color-auto-green-7: #56d364;
--color-auto-green-8: #7ee787;
--color-auto-green-9: #aff5b4;
--color-auto-yellow-0: #341a00;
--color-auto-yellow-1: #4b2900;
--color-auto-yellow-2: #693e00;
--color-auto-yellow-3: #845306;
--color-auto-yellow-4: #9e6a03;
--color-auto-yellow-5: #bb8009;
--color-auto-yellow-6: #d29922;
--color-auto-yellow-7: #e3b341;
--color-auto-yellow-8: #f2cc60;
--color-auto-yellow-9: #f8e3a1;
--color-auto-orange-0: #3d1300;
--color-auto-orange-1: #5a1e02;
--color-auto-orange-2: #762d0a;
--color-auto-orange-3: #9b4215;
--color-auto-orange-4: #bd561d;
--color-auto-orange-5: #db6d28;
--color-auto-orange-6: #f0883e;
--color-auto-orange-7: #ffa657;
--color-auto-orange-8: #ffc680;
--color-auto-orange-9: #ffdfb6;
--color-auto-red-0: #490202;
--color-auto-red-1: #67060c;
--color-auto-red-2: #8e1519;
--color-auto-red-3: #b62324;
--color-auto-red-4: #da3633;
--color-auto-red-5: #f85149;
--color-auto-red-6: #ff7b72;
--color-auto-red-7: #ffa198;
--color-auto-red-8: #ffc1ba;
--color-auto-red-9: #ffdcd7;
--color-auto-purple-0: #271052;
--color-auto-purple-1: #3c1e70;
--color-auto-purple-2: #553098;
--color-auto-purple-3: #6e40c9;
--color-auto-purple-4: #8957e5;
--color-auto-purple-5: #a371f7;
--color-auto-purple-6: #bc8cff;
--color-auto-purple-7: #d2a8ff;
--color-auto-purple-8: #e2c5ff;
--color-auto-purple-9: #eddeff;
--color-auto-pink-0: #42062a;
--color-auto-pink-1: #5e103e;
--color-auto-pink-2: #7d2457;
--color-auto-pink-3: #9e3670;
--color-auto-pink-4: #bf4b8a;
--color-auto-pink-5: #db61a2;
--color-auto-pink-6: #f778ba;
--color-auto-pink-7: #ff9bce;
--color-auto-pink-8: #ffbedd;
--color-auto-pink-9: #ffdaec;
--color-text-primary: #c9d1d9;
--color-text-secondary: #8b949e;
--color-text-tertiary: #8b949e;
--color-text-placeholder: #484f58;
--color-text-disabled: #484f58;
--color-text-inverse: #0d1117;
--color-text-link: #58a6ff;
--color-text-danger: #f85149;
--color-text-success: #56d364;
--color-text-warning: #e3b341;
--color-text-white: #f0f6fc;
--color-icon-primary: #c9d1d9;
--color-icon-secondary: #6e7681;
--color-icon-tertiary: #484f58;
--color-icon-info: #79c0ff;
--color-icon-danger: #f85149;
--color-icon-success: #56d364;
--color-icon-warning: #e3b341;
--color-border-primary: #30363d;
--color-border-secondary: #21262d;
--color-border-tertiary: #6e7681;
--color-border-overlay: #30363d;
--color-border-inverse: #f0f6fc;
--color-border-info: rgba(56,139,253,0.4);
--color-border-danger: rgba(248,81,73,0.4);
--color-border-success: rgba(63,185,80,0.4);
--color-border-warning: rgba(187,128,9,0.4);
--color-bg-canvas: #0d1117;
--color-bg-canvas-mobile: #010409;
--color-bg-canvas-inverse: #f0f6fc;
--color-bg-canvas-inset: #06090f;
--color-bg-primary: #0d1117;
--color-bg-secondary: #0d1117;
--color-bg-tertiary: #161b22;
--color-bg-overlay: #21262d;
--color-bg-backdrop: rgba(1,4,9,0.8);
--color-bg-info: rgba(56,139,253,0.1);
--color-bg-info-inverse: #388bfd;
--color-bg-danger: rgba(248,81,73,0.1);
--color-bg-danger-inverse: #da3633;
--color-bg-success: rgba(46,160,67,0.1);
--color-bg-success-inverse: #2ea043;
--color-bg-warning: rgba(187,128,9,0.1);
--color-bg-warning-inverse: #bb8009;
--color-shadow-small: 0 0 rgba(0,0,0,0);
--color-shadow-medium: 0 3px 6px #010409;
--color-shadow-large: 0 8px 24px #010409;
--color-shadow-extra-large: 0 12px 48px #010409;
--color-shadow-highlight: 0 0 rgba(0,0,0,0);
--color-shadow-inset: 0 0 rgba(0,0,0,0);
--color-state-hover-primary-bg: #1f6feb;
--color-state-hover-primary-border: #388bfd;
--color-state-hover-primary-text: #f0f6fc;
--color-state-hover-primary-icon: #f0f6fc;
--color-state-hover-secondary-bg: #161b22;
--color-state-hover-secondary-border: #161b22;
--color-state-selected-primary-bg: #1f6feb;
--color-state-selected-primary-border: #388bfd;
--color-state-selected-primary-text: #f0f6fc;
--color-state-selected-primary-icon: #f0f6fc;
--color-state-focus-border: #388bfd;
--color-state-focus-shadow: 0 0 0 3px #0c2d6b;
--color-fade-fg-10: rgba(240,246,252,0.1);
--color-fade-fg-15: rgba(240,246,252,0.15);
--color-fade-fg-30: rgba(240,246,252,0.3);
--color-fade-fg-50: rgba(240,246,252,0.5);
--color-fade-fg-70: rgba(240,246,252,0.7);
--color-fade-fg-85: rgba(240,246,252,0.85);
--color-fade-black-10: rgba(1,4,9,0.1);
--color-fade-black-15: rgba(1,4,9,0.15);
--color-fade-black-30: rgba(1,4,9,0.3);
--color-fade-black-50: rgba(1,4,9,0.5);
--color-fade-black-70: rgba(1,4,9,0.7);
--color-fade-black-85: rgba(1,4,9,0.85);
--color-fade-white-10: rgba(240,246,252,0.1);
--color-fade-white-15: rgba(240,246,252,0.15);
--color-fade-white-30: rgba(240,246,252,0.3);
--color-fade-white-50: rgba(240,246,252,0.5);
--color-fade-white-70: rgba(240,246,252,0.7);
--color-fade-white-85: rgba(240,246,252,0.85);
--color-alert-info-text: #79c0ff;
--color-alert-info-icon: #79c0ff;
--color-alert-info-bg: rgba(56,139,253,0.1);
--color-alert-info-border: rgba(56,139,253,0.4);
--color-alert-warn-text: #e3b341;
--color-alert-warn-icon: #e3b341;
--color-alert-warn-bg: rgba(187,128,9,0.1);
--color-alert-warn-border: rgba(187,128,9,0.4);
--color-alert-error-text: #ff7b72;
--color-alert-error-icon: #ff7b72;
--color-alert-error-bg: rgba(248,81,73,0.1);
--color-alert-error-border: rgba(248,81,73,0.4);
--color-alert-success-text: #56d364;
--color-alert-success-icon: #56d364;
--color-alert-success-bg: rgba(46,160,67,0.1);
--color-alert-success-border: rgba(46,160,67,0.4);
--color-autocomplete-shadow: 0 16px 32px rgba(1,4,9,0.85);
--color-autocomplete-row-border: #30363d;
--color-blankslate-icon: #535c66;
--color-btn-text: #c9d1d9;
--color-btn-bg: #21262d;
--color-btn-border: #30363d;
--color-btn-shadow: 0 0 rgba(0,0,0,0);
--color-btn-inset-shadow: 0 0 rgba(0,0,0,0);
--color-btn-hover-bg: #30363d;
--color-btn-hover-border: #8b949e;
--color-btn-selected-bg: #161b22;
--color-btn-focus-bg: #21262d;
--color-btn-focus-border: #8b949e;
--color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,0.3);
--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(1,4,9,0.15);
--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(31,111,235,0.3);
--color-btn-primary-text: #ffffff;
--color-btn-primary-bg: #238636;
--color-btn-primary-border: #2ea043;
--color-btn-primary-shadow: 0 0 rgba(0,0,0,0);
--color-btn-primary-inset-shadow: 0 0 rgba(0,0,0,0);
--color-btn-primary-hover-bg: #2ea043;
--color-btn-primary-hover-border: #3fb950;
--color-btn-primary-selected-bg: #238636;
--color-btn-primary-selected-shadow: 0 0 rgba(0,0,0,0);
--color-btn-primary-disabled-text: rgba(240,246,252,0.5);
--color-btn-primary-disabled-bg: rgba(35,134,54,0.6);
--color-btn-primary-disabled-border: rgba(0,0,0,0);
--color-btn-primary-focus-bg: #238636;
--color-btn-primary-focus-border: #3fb950;
--color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,0.4);
--color-btn-primary-icon: #f0f6fc;
--color-btn-primary-counter-bg: rgba(240,246,252,0.2);
--color-btn-outline-text: #58a6ff;
--color-btn-outline-hover-text: #58a6ff;
--color-btn-outline-hover-bg: #30363d;
--color-btn-outline-hover-border: #58a6ff;
--color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,0.1);
--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(240,246,252,0.03);
--color-btn-outline-hover-counter-bg: rgba(240,246,252,0.2);
--color-btn-outline-selected-text: #f0f6fc;
--color-btn-outline-selected-bg: #0d419d;
--color-btn-outline-selected-border: rgba(240,246,252,0.1);
--color-btn-outline-selected-shadow: 0 0 rgba(0,0,0,0);
--color-btn-outline-disabled-text: rgba(88,166,255,0.5);
--color-btn-outline-disabled-bg: #0d1117;
--color-btn-outline-disabled-counter-bg: rgba(31,111,235,0.05);
--color-btn-outline-focus-border: #58a6ff;
--color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,0.4);
--color-btn-outline-counter-bg: rgba(31,111,235,0.1);
--color-btn-danger-text: #f85149;
--color-btn-danger-hover-text: #ffffff;
--color-btn-danger-hover-bg: #da3633;
--color-btn-danger-hover-border: #f85149;
--color-btn-danger-hover-shadow: 0 0 rgba(0,0,0,0);
--color-btn-danger-hover-inset-shadow: 0 0 rgba(0,0,0,0);
--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);
--color-btn-danger-selected-text: #ffffff;
--color-btn-danger-selected-bg: #b62324;
--color-btn-danger-selected-border: rgba(240,246,252,0.1);
--color-btn-danger-selected-shadow: 0 0 rgba(0,0,0,0);
--color-btn-danger-disabled-text: rgba(248,81,73,0.5);
--color-btn-danger-disabled-bg: #0d1117;
--color-btn-danger-disabled-counter-bg: rgba(218,54,51,0.05);
--color-btn-danger-focus-border: #f85149;
--color-btn-danger-focus-shadow: 0 0 0 3px rgba(182,35,36,0.4);
--color-btn-danger-counter-bg: rgba(218,54,51,0.1);
--color-btn-danger-icon: #f85149;
--color-btn-danger-hover-icon: #f0f6fc;
--color-btn-counter-bg: #30363d;
--color-counter-text: #c9d1d9;
--color-counter-bg: #30363d;
--color-counter-primary-text: #c9d1d9;
--color-counter-primary-bg: #6e7681;
--color-counter-secondary-text: #8b949e;
--color-dropdown-shadow: 0 16px 32px rgba(1,4,9,0.85);
--color-label-border: #30363d;
--color-label-primary-text: #b1bac4;
--color-label-primary-border: #6e7681;
--color-label-secondary-text: #8b949e;
--color-label-secondary-border: #30363d;
--color-label-info-text: #388bfd;
--color-label-info-border: rgba(56,139,253,0.4);
--color-label-success-text: #3fb950;
--color-label-success-border: rgba(46,160,67,0.4);
--color-label-warning-text: #e3b341;
--color-label-warning-border: rgba(242,211,91,0.4);
--color-label-danger-text: #f85149;
--color-label-danger-border: rgba(248,81,73,0.4);
--color-label-orange-text: #db6d28;
--color-label-orange-border: rgba(219,109,40,0.4);
--color-input-bg: #0d1117;
--color-input-contrast-bg: rgba(1,4,9,0.3);
--color-input-border: #21262d;
--color-input-shadow: 0 0 rgba(0,0,0,0);
--color-input-disabled-bg: #161b22;
--color-input-disabled-border: #30363d;
--color-input-warning-border: #d29922;
--color-input-error-border: #f85149;
--color-input-tooltip-success-text: #56d364;
--color-input-tooltip-success-bg: #101f1b;
--color-input-tooltip-success-border: #1c532b;
--color-input-tooltip-warning-text: #e3b341;
--color-input-tooltip-warning-bg: #1e1c16;
--color-input-tooltip-warning-border: #5d4411;
--color-input-tooltip-error-text: #ff7b72;
--color-input-tooltip-error-bg: #25171c;
--color-input-tooltip-error-border: #792e2e;
--color-avatar-bg: rgba(240,246,252,0.1);
--color-avatar-border: rgba(240,246,252,0.1);
--color-avatar-stack-fade: #30363d;
--color-avatar-stack-fade-more: #21262d;
--color-avatar-child-shadow: -2px -2px 0 #0d1117;
--color-toast-text: #79c0ff;
--color-toast-bg: #010409;
--color-toast-border: #214981;
--color-toast-shadow: 0 8px 24px #010409;
--color-toast-icon: #79c0ff;
--color-toast-icon-bg: #121d2e;
--color-toast-icon-border: #214981;
--color-toast-success-text: #56d364;
--color-toast-success-border: #1c532c;
--color-toast-success-icon: #56d364;
--color-toast-success-icon-bg: #111f1c;
--color-toast-success-icon-border: #1c532c;
--color-toast-warning-text: #e3b341;
--color-toast-warning-border: #5e4411;
--color-toast-warning-icon: #e3b341;
--color-toast-warning-icon-bg: #1f1c16;
--color-toast-warning-icon-border: #5e4411;
--color-toast-danger-text: #ff7b72;
--color-toast-danger-border: #792e2e;
--color-toast-danger-icon: #ff7b72;
--color-toast-danger-icon-bg: #25171c;
--color-toast-danger-icon-border: #792e2e;
--color-toast-loading-text: #c9d1d9;
--color-toast-loading-border: #30363d;
--color-toast-loading-icon: #f0f6fc;
--color-toast-loading-icon-bg: #30363d;
--color-toast-loading-icon-border: #30363d;
--color-timeline-text: #b1bac4;
--color-timeline-badge-bg: #0d1117;
--color-timeline-target-badge-border: #1f6feb;
--color-timeline-target-badge-shadow: #0d419d;
--color-select-menu-border-secondary: #30363d;
--color-select-menu-shadow: 0 0 18px rgba(1,4,9,0.4);
--color-select-menu-backdrop-bg: rgba(1,4,9,0.5);
--color-select-menu-backdrop-border: #484f58;
--color-select-menu-tap-highlight: rgba(48,54,61,0.5);
--color-select-menu-tap-focus-bg: #0c2d6b;
--color-box-blue-border: #0d419d;
--color-box-row-yellow-bg: rgba(235,196,64,0.1);
--color-box-row-blue-bg: rgba(121,192,255,0.1);
--color-box-header-blue-bg: #0d1117;
--color-box-header-blue-border: #30363d;
--color-box-border-info: rgba(56,139,253,0.4);
--color-box-bg-info: rgba(56,139,253,0.1);
--color-box-border-warning: rgba(187,128,9,0.4);
--color-box-bg-warning: rgba(187,128,9,0.1);
--color-branch-name-text: #c9d1d9;
--color-branch-name-icon: #b1bac4;
--color-branch-name-bg: rgba(88,166,255,0.1);
--color-branch-name-link-text: #58a6ff;
--color-branch-name-link-icon: #58a6ff;
--color-branch-name-link-bg: rgba(88,166,255,0.1);
--color-markdown-code-bg: rgba(240,246,252,0.15);
--color-markdown-frame-border: #3b434b;
--color-markdown-blockquote-border: #3b434b;
--color-markdown-table-border: #3b434b;
--color-markdown-table-tr-border: #272c32;
--color-menu-heading-text: #8b949e;
--color-menu-border-active: #f78166;
--color-menu-bg-active: #161b22;
--color-sidenav-selected-bg: #21262d;
--color-sidenav-border-active: #f78166;
--color-header-text: rgba(240,246,252,0.7);
--color-header-bg: #161b22;
--color-header-logo: #f0f6fc;
--color-filter-item-bar-bg: #12161c;
--color-hidden-text-expander-bg: #21262d;
--color-hidden-text-expander-bg-hover: #30363d;
--color-drag-and-drop-border: #25292f;
--color-upload-enabled-border: #3b434b;
--color-upload-enabled-border-focused: #4487ee;
--color-previewable-comment-form-border: #25292f;
--color-underlinenav-border: rgba(48,54,61,0);
--color-underlinenav-border-hover: #30363d;
--color-underlinenav-border-active: #f78166;
--color-underlinenav-text: #8b949e;
--color-underlinenav-text-hover: #c9d1d9;
--color-underlinenav-text-active: #c9d1d9;
--color-underlinenav-icon: #6e7681;
--color-underlinenav-icon-hover: #c9d1d9;
--color-underlinenav-icon-active: #c9d1d9;
--color-underlinenav-counter-text: #8b949e;
--color-verified-badge-text: #3fb950;
--color-verified-badge-bg: rgba(63,185,80,0.1);
--color-verified-badge-border: rgba(63,185,80,0.4);
--color-social-count-bg: #21262d;
--color-tooltip-text: #f0f6fc;
--color-tooltip-bg: #21262d;
--color-header-search-bg: #0d1117;
--color-header-search-border: #21262d;
--color-search-keyword-hl: rgba(187,128,9,0.4);
--color-diffstat-neutral-bg: #30363d;
--color-diffstat-neutral-border: rgba(240,246,252,0.1);
--color-diffstat-deletion-bg: #da3633;
--color-diffstat-deletion-border: #f85149;
--color-diffstat-addition-bg: #238636;
--color-diffstat-addition-border: #2ea043;
--color-files-explorer-icon: #6e7681;
--color-hl-author-bg: #051d4d;
--color-hl-author-border: #0d419d;
--color-logo-subdued: #30363d;
--color-discussion-border: #34513b;
--color-discussion-bg-success: rgba(46,160,67,0.1);
--color-actions-workflow-table-sticky-bg: rgba(13,17,23,0.95);
--color-repo-language-color-border: rgba(240,246,252,0.2);
--color-code-selection-bg: rgba(121,192,255,0.3);
--color-blob-line-highlight-bg: rgba(210,153,34,0.15);
--color-blob-line-highlight-border: #e3b341;
--color-diff-addition-text: #56d364;
--color-diff-addition-bg: rgba(46,160,67,0.2);
--color-diff-addition-border: #196c2e;
--color-diff-deletion-text: #f85149;
--color-diff-deletion-bg: rgba(218,54,51,0.2);
--color-diff-deletion-border: #b62324;
--color-diff-change-text: #e3b341;
--color-diff-change-bg: #341a00;
--color-diff-change-border: #9e6a03;
--color-diff-blob-num-text: rgba(240,246,252,0.3);
--color-diff-blob-num-hover-text: rgba(240,246,252,0.6);
--color-diff-blob-addition-num-text: #3fb950;
--color-diff-blob-addition-num-hover-text: #7ee787;
--color-diff-blob-addition-num-bg: rgba(46,160,67,0.1);
--color-diff-blob-addition-line-bg: rgba(46,160,67,0.2);
--color-diff-blob-addition-word-bg: rgba(46,160,67,0.55);
--color-diff-blob-deletion-num-text: #f85149;
--color-diff-blob-deletion-num-hover-text: #ffa198;
--color-diff-blob-deletion-num-bg: rgba(218,54,51,0.1);
--color-diff-blob-deletion-line-bg: rgba(218,54,51,0.2);
--color-diff-blob-deletion-word-bg: rgba(218,54,51,0.5);
--color-diff-blob-hunk-text: #8b949e;
--color-diff-blob-hunk-num-bg: rgba(88,166,255,0.15);
--color-diff-blob-hunk-line-bg: rgba(88,166,255,0.1);
--color-diff-blob-empty-block-bg: #161b22;
--color-diff-blob-selected-line-highlight-bg: rgba(187,128,9,0.1);
--color-diff-blob-selected-line-highlight-border: #bb8009;
--color-diff-blob-selected-line-highlight-mix-blend-mode: normal;
--color-diff-blob-expander-icon: #8b949e;
--color-diff-blob-expander-hover-icon: #f0f6fc;
--color-diff-blob-expander-hover-bg: #1f6feb;
--color-diff-blob-comment-button-icon: #f0f6fc;
--color-diff-blob-comment-button-bg: #1f6feb;
--color-diff-blob-comment-button-gradient-bg: #367eed;
--color-global-nav-logo: #f0f6fc;
--color-global-nav-bg: #161b22;
--color-global-nav-text: #c9d1d9;
--color-global-nav-icon: #c9d1d9;
--color-global-nav-input-bg: #0d1117;
--color-global-nav-input-border: #21262d;
--color-global-nav-input-icon: #21262d;
--color-global-nav-input-placeholder: #484f58;
--color-calendar-graph-day-bg: #161b22;
--color-calendar-graph-day-border: rgba(27,31,35,0.06);
--color-calendar-graph-day-L1-bg: #003820;
--color-calendar-graph-day-L2-bg: #00602d;
--color-calendar-graph-day-L3-bg: #10983d;
--color-calendar-graph-day-L4-bg: #27d545;
--color-calendar-graph-day-L4-border: rgba(255,255,255,0.05);
--color-calendar-graph-day-L3-border: rgba(255,255,255,0.05);
--color-calendar-graph-day-L2-border: rgba(255,255,255,0.05);
--color-calendar-graph-day-L1-border: rgba(255,255,255,0.05);
--color-footer-invertocat-octicon: #30363d;
--color-footer-invertocat-octicon-hover: #6e7681;
--color-pr-state-draft-text: #8b949e;
--color-pr-state-draft-bg: rgba(139,148,158,0.1);
--color-pr-state-draft-border: rgba(139,148,158,0.4);
--color-pr-state-open-text: #3fb950;
--color-pr-state-open-bg: rgba(63,185,80,0.1);
--color-pr-state-open-border: rgba(63,185,80,0.4);
--color-pr-state-merged-text: #a371f7;
--color-pr-state-merged-bg: rgba(188,140,255,0.1);
--color-pr-state-merged-border: rgba(188,140,255,0.4);
--color-pr-state-closed-text: #f85149;
--color-pr-state-closed-bg: rgba(218,54,51,0.1);
--color-pr-state-closed-border: rgba(218,54,51,0.4);
--color-topic-tag-text: #58a6ff;
--color-topic-tag-bg: rgba(56,139,253,0.1);
--color-topic-tag-hover-bg: rgba(56,139,253,0.2);
--color-topic-tag-active-bg: rgba(56,139,253,0.15);
--color-merge-box-success-icon-bg: rgba(46,160,67,0.1);
--color-merge-box-success-icon-text: #3fb950;
--color-merge-box-success-icon-border: rgba(46,160,67,0.4);
--color-merge-box-success-indicator-bg: #238636;
--color-merge-box-success-indicator-border: #2ea043;
--color-merge-box-merged-icon-bg: rgba(188,140,255,0.1);
--color-merge-box-merged-icon-text: #a371f7;
--color-merge-box-merged-icon-border: rgba(188,140,255,0.4);
--color-merge-box-merged-box-border: rgba(188,140,255,0.4);
--color-merge-box-neutral-icon-bg: rgba(201,209,217,0.1);
--color-merge-box-neutral-icon-text: #8b949e;
--color-merge-box-neutral-icon-border: rgba(201,209,217,0.4);
--color-merge-box-neutral-indicator-bg: #484f58;
--color-merge-box-neutral-indicator-border: #6e7681;
--color-merge-box-warning-icon-bg: rgba(187,128,9,0.1);
--color-merge-box-warning-icon-text: #e3b341;
--color-merge-box-warning-icon-border: rgba(187,128,9,0.4);
--color-merge-box-warning-box-border: rgba(187,128,9,0.4);
--color-merge-box-warning-merge-highlight: rgba(187,128,9,0.1);
--color-merge-box-error-icon-bg: rgba(248,81,73,0.1);
--color-merge-box-error-icon-text: #f85149;
--color-merge-box-error-icon-border: rgba(248,81,73,0.4);
--color-merge-box-error-indicator-bg: #da3633;
--color-merge-box-error-indicator-border: #f85149;
--color-project-card-bg: #161b22;
--color-project-header-bg: #0d1117;
--color-project-sidebar-bg: #161b22;
--color-project-gradient-in: #161b22;
--color-project-gradient-out: rgba(22,27,34,0);
--color-marketing-icon-primary: #79c0ff;
--color-marketing-icon-secondary: #1f6feb;
--color-prettylights-syntax-comment: #8b949e;
--color-prettylights-syntax-constant: #79c0ff;
--color-prettylights-syntax-entity: #d2a8ff;
--color-prettylights-syntax-storage-modifier-import: #c9d1d9;
--color-prettylights-syntax-entity-tag: #7ee787;
--color-prettylights-syntax-keyword: #ff7b72;
--color-prettylights-syntax-string: #a5d6ff;
--color-prettylights-syntax-variable: #ffa657;
--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
--color-prettylights-syntax-invalid-illegal-bg: #8e1519;
--color-prettylights-syntax-carriage-return-text: #f0f6fc;
--color-prettylights-syntax-carriage-return-bg: #b62324;
--color-prettylights-syntax-string-regexp: #7ee787;
--color-prettylights-syntax-markup-list: #f2cc60;
--color-prettylights-syntax-markup-heading: #1f6feb;
--color-prettylights-syntax-markup-italic: #c9d1d9;
--color-prettylights-syntax-markup-bold: #c9d1d9;
--color-prettylights-syntax-markup-deleted-text: #ffdcd7;
--color-prettylights-syntax-markup-deleted-bg: #67060c;
--color-prettylights-syntax-markup-inserted-text: #aff5b4;
--color-prettylights-syntax-markup-inserted-bg: #033a16;
--color-prettylights-syntax-markup-changed-text: #ffdfb6;
--color-prettylights-syntax-markup-changed-bg: #5a1e02;
--color-prettylights-syntax-markup-ignored-text: #c9d1d9;
--color-prettylights-syntax-markup-ignored-bg: #1158c7;
--color-prettylights-syntax-meta-diff-range: #d2a8ff;
--color-prettylights-syntax-brackethighlighter-angle: #8b949e;
--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
--color-codemirror-text: #c9d1d9;
--color-codemirror-bg: #0d1117;
--color-codemirror-gutters-bg: #0d1117;
--color-codemirror-guttermarker-text: #0d1117;
--color-codemirror-guttermarker-subtle-text: #6e7681;
--color-codemirror-linenumber-text: #8b949e;
--color-codemirror-cursor: #f0f6fc;
--color-codemirror-selection-bg: rgba(121,192,255,0.3);
--color-codemirror-activeline-bg: #161b22;
--color-codemirror-matchingbracket-text: #c9d1d9;
--color-codemirror-lines-bg: #0d1117;
--color-codemirror-syntax-comment: #8b949e;
--color-codemirror-syntax-constant: #79c0ff;
--color-codemirror-syntax-entity: #d2a8ff;
--color-codemirror-syntax-keyword: #ff7b72;
--color-codemirror-syntax-storage: #ff7b72;
--color-codemirror-syntax-string: #a5d6ff;
--color-codemirror-syntax-support: #79c0ff;
--color-codemirror-syntax-variable: #ffa657;
--color-ansi-black: #0d1117;
--color-ansi-black-bright: #161b22;
--color-ansi-white: #b1bac4;
--color-ansi-white-bright: #b1bac4;
--color-ansi-gray: #6e7681;
--color-ansi-red: #ff7b72;
--color-ansi-red-bright: #ffa198;
--color-ansi-green: #3fb950;
--color-ansi-green-bright: #56d364;
--color-ansi-yellow: #d29922;
--color-ansi-yellow-bright: #e3b341;
--color-ansi-blue: #58a6ff;
--color-ansi-blue-bright: #79c0ff;
--color-ansi-magenta: #bc8cff;
--color-ansi-magenta-bright: #d2a8ff;
--color-ansi-cyan: #76e3ea;
--color-ansi-cyan-bright: #b3f0ff;
=======
[data-color-mode=dark], [data-color-mode=light][data-light-theme=dark], [data-color-mode=dark][data-dark-theme=dark] {
--color-scale-black: #010409;
--color-scale-white: #f0f6fc;
--color-scale-gray-0: #f0f6fc;
--color-scale-gray-1: #c9d1d9;
--color-scale-gray-2: #b1bac4;
--color-scale-gray-3: #8b949e;
--color-scale-gray-4: #6e7681;
--color-scale-gray-5: #484f58;
--color-scale-gray-6: #30363d;
--color-scale-gray-7: #21262d;
--color-scale-gray-8: #161b22;
--color-scale-gray-9: #0d1117;
--color-scale-blue-0: #cae8ff;
--color-scale-blue-1: #a5d6ff;
--color-scale-blue-2: #79c0ff;
--color-scale-blue-3: #58a6ff;
--color-scale-blue-4: #388bfd;
--color-scale-blue-5: #1f6feb;
--color-scale-blue-6: #1158c7;
--color-scale-blue-7: #0d419d;
--color-scale-blue-8: #0c2d6b;
--color-scale-blue-9: #051d4d;
--color-scale-green-0: #aff5b4;
--color-scale-green-1: #7ee787;
--color-scale-green-2: #56d364;
--color-scale-green-3: #3fb950;
--color-scale-green-4: #2ea043;
--color-scale-green-5: #238636;
--color-scale-green-6: #196c2e;
--color-scale-green-7: #0f5323;
--color-scale-green-8: #033a16;
--color-scale-green-9: #04260f;
--color-scale-yellow-0: #f8e3a1;
--color-scale-yellow-1: #f2cc60;
--color-scale-yellow-2: #e3b341;
--color-scale-yellow-3: #d29922;
--color-scale-yellow-4: #bb8009;
--color-scale-yellow-5: #9e6a03;
--color-scale-yellow-6: #845306;
--color-scale-yellow-7: #693e00;
--color-scale-yellow-8: #4b2900;
--color-scale-yellow-9: #341a00;
--color-scale-orange-0: #ffdfb6;
--color-scale-orange-1: #ffc680;
--color-scale-orange-2: #ffa657;
--color-scale-orange-3: #f0883e;
--color-scale-orange-4: #db6d28;
--color-scale-orange-5: #bd561d;
--color-scale-orange-6: #9b4215;
--color-scale-orange-7: #762d0a;
--color-scale-orange-8: #5a1e02;
--color-scale-orange-9: #3d1300;
--color-scale-red-0: #ffdcd7;
--color-scale-red-1: #ffc1ba;
--color-scale-red-2: #ffa198;
--color-scale-red-3: #ff7b72;
--color-scale-red-4: #f85149;
--color-scale-red-5: #da3633;
--color-scale-red-6: #b62324;
--color-scale-red-7: #8e1519;
--color-scale-red-8: #67060c;
--color-scale-red-9: #490202;
--color-scale-purple-0: #eddeff;
--color-scale-purple-1: #e2c5ff;
--color-scale-purple-2: #d2a8ff;
--color-scale-purple-3: #bc8cff;
--color-scale-purple-4: #a371f7;
--color-scale-purple-5: #8957e5;
--color-scale-purple-6: #6e40c9;
--color-scale-purple-7: #553098;
--color-scale-purple-8: #3c1e70;
--color-scale-purple-9: #271052;
--color-scale-pink-0: #ffdaec;
--color-scale-pink-1: #ffbedd;
--color-scale-pink-2: #ff9bce;
--color-scale-pink-3: #f778ba;
--color-scale-pink-4: #db61a2;
--color-scale-pink-5: #bf4b8a;
--color-scale-pink-6: #9e3670;
--color-scale-pink-7: #7d2457;
--color-scale-pink-8: #5e103e;
--color-scale-pink-9: #42062a;
--color-auto-black: #f0f6fc;
--color-auto-white: #010409;
--color-auto-gray-0: #0d1117;
--color-auto-gray-1: #161b22;
--color-auto-gray-2: #21262d;
--color-auto-gray-3: #30363d;
--color-auto-gray-4: #484f58;
--color-auto-gray-5: #6e7681;
--color-auto-gray-6: #8b949e;
--color-auto-gray-7: #b1bac4;
--color-auto-gray-8: #c9d1d9;
--color-auto-gray-9: #f0f6fc;
--color-auto-blue-0: #051d4d;
--color-auto-blue-1: #0c2d6b;
--color-auto-blue-2: #0d419d;
--color-auto-blue-3: #1158c7;
--color-auto-blue-4: #1f6feb;
--color-auto-blue-5: #388bfd;
--color-auto-blue-6: #58a6ff;
--color-auto-blue-7: #79c0ff;
--color-auto-blue-8: #a5d6ff;
--color-auto-blue-9: #cae8ff;
--color-auto-green-0: #04260f;
--color-auto-green-1: #033a16;
--color-auto-green-2: #0f5323;
--color-auto-green-3: #196c2e;
--color-auto-green-4: #238636;
--color-auto-green-5: #2ea043;
--color-auto-green-6: #3fb950;
--color-auto-green-7: #56d364;
--color-auto-green-8: #7ee787;
--color-auto-green-9: #aff5b4;
--color-auto-yellow-0: #341a00;
--color-auto-yellow-1: #4b2900;
--color-auto-yellow-2: #693e00;
--color-auto-yellow-3: #845306;
--color-auto-yellow-4: #9e6a03;
--color-auto-yellow-5: #bb8009;
--color-auto-yellow-6: #d29922;
--color-auto-yellow-7: #e3b341;
--color-auto-yellow-8: #f2cc60;
--color-auto-yellow-9: #f8e3a1;
--color-auto-orange-0: #3d1300;
--color-auto-orange-1: #5a1e02;
--color-auto-orange-2: #762d0a;
--color-auto-orange-3: #9b4215;
--color-auto-orange-4: #bd561d;
--color-auto-orange-5: #db6d28;
--color-auto-orange-6: #f0883e;
--color-auto-orange-7: #ffa657;
--color-auto-orange-8: #ffc680;
--color-auto-orange-9: #ffdfb6;
--color-auto-red-0: #490202;
--color-auto-red-1: #67060c;
--color-auto-red-2: #8e1519;
--color-auto-red-3: #b62324;
--color-auto-red-4: #da3633;
--color-auto-red-5: #f85149;
--color-auto-red-6: #ff7b72;
--color-auto-red-7: #ffa198;
--color-auto-red-8: #ffc1ba;
--color-auto-red-9: #ffdcd7;
--color-auto-purple-0: #271052;
--color-auto-purple-1: #3c1e70;
--color-auto-purple-2: #553098;
--color-auto-purple-3: #6e40c9;
--color-auto-purple-4: #8957e5;
--color-auto-purple-5: #a371f7;
--color-auto-purple-6: #bc8cff;
--color-auto-purple-7: #d2a8ff;
--color-auto-purple-8: #e2c5ff;
--color-auto-purple-9: #eddeff;
--color-auto-pink-0: #42062a;
--color-auto-pink-1: #5e103e;
--color-auto-pink-2: #7d2457;
--color-auto-pink-3: #9e3670;
--color-auto-pink-4: #bf4b8a;
--color-auto-pink-5: #db61a2;
--color-auto-pink-6: #f778ba;
--color-auto-pink-7: #ff9bce;
--color-auto-pink-8: #ffbedd;
--color-auto-pink-9: #ffdaec;
--color-text-primary: #c9d1d9;
--color-text-secondary: #8b949e;
--color-text-tertiary: #8b949e;
--color-text-placeholder: #484f58;
--color-text-disabled: #484f58;
--color-text-inverse: #0d1117;
--color-text-link: #58a6ff;
--color-text-danger: #f85149;
--color-text-success: #56d364;
--color-text-warning: #e3b341;
--color-text-white: #f0f6fc;
--color-icon-primary: #c9d1d9;
--color-icon-secondary: #6e7681;
--color-icon-tertiary: #484f58;
--color-icon-info: #79c0ff;
--color-icon-danger: #f85149;
--color-icon-success: #56d364;
--color-icon-warning: #e3b341;
--color-border-primary: #30363d;
--color-border-secondary: #21262d;
--color-border-tertiary: #6e7681;
--color-border-overlay: #30363d;
--color-border-inverse: #f0f6fc;
--color-border-info: rgba(56,139,253,0.4);
--color-border-danger: rgba(248,81,73,0.4);
--color-border-success: rgba(63,185,80,0.4);
--color-border-warning: rgba(187,128,9,0.4);
--color-bg-canvas: #0d1117;
--color-bg-canvas-mobile: #010409;
--color-bg-canvas-inverse: #f0f6fc;
--color-bg-canvas-inset: #06090f;
--color-bg-primary: #0d1117;
--color-bg-secondary: #0d1117;
--color-bg-tertiary: #161b22;
--color-bg-overlay: #21262d;
--color-bg-backdrop: rgba(1,4,9,0.8);
--color-bg-info: rgba(56,139,253,0.1);
--color-bg-info-inverse: #388bfd;
--color-bg-danger: rgba(248,81,73,0.1);
--color-bg-danger-inverse: #da3633;
--color-bg-success: rgba(46,160,67,0.1);
--color-bg-success-inverse: #2ea043;
--color-bg-warning: rgba(187,128,9,0.1);
--color-bg-warning-inverse: #bb8009;
--color-shadow-small: 0 0 rgba(0,0,0,0);
--color-shadow-medium: 0 3px 6px #010409;
--color-shadow-large: 0 8px 24px #010409;
--color-shadow-extra-large: 0 12px 48px #010409;
--color-shadow-highlight: 0 0 rgba(0,0,0,0);
--color-shadow-inset: 0 0 rgba(0,0,0,0);
--color-state-hover-primary-bg: #1f6feb;
--color-state-hover-primary-border: #388bfd;
--color-state-hover-primary-text: #f0f6fc;
--color-state-hover-primary-icon: #f0f6fc;
--color-state-hover-secondary-bg: #161b22;
--color-state-hover-secondary-border: #161b22;
--color-state-selected-primary-bg: #1f6feb;
--color-state-selected-primary-border: #388bfd;
--color-state-selected-primary-text: #f0f6fc;
--color-state-selected-primary-icon: #f0f6fc;
--color-state-focus-border: #388bfd;
--color-state-focus-shadow: 0 0 0 3px #0c2d6b;
--color-fade-fg-10: rgba(240,246,252,0.1);
--color-fade-fg-15: rgba(240,246,252,0.15);
--color-fade-fg-30: rgba(240,246,252,0.3);
--color-fade-fg-50: rgba(240,246,252,0.5);
--color-fade-fg-70: rgba(240,246,252,0.7);
--color-fade-fg-85: rgba(240,246,252,0.85);
--color-fade-black-10: rgba(1,4,9,0.1);
--color-fade-black-15: rgba(1,4,9,0.15);
--color-fade-black-30: rgba(1,4,9,0.3);
--color-fade-black-50: rgba(1,4,9,0.5);
--color-fade-black-70: rgba(1,4,9,0.7);
--color-fade-black-85: rgba(1,4,9,0.85);
--color-fade-white-10: rgba(240,246,252,0.1);
--color-fade-white-15: rgba(240,246,252,0.15);
--color-fade-white-30: rgba(240,246,252,0.3);
--color-fade-white-50: rgba(240,246,252,0.5);
--color-fade-white-70: rgba(240,246,252,0.7);
--color-fade-white-85: rgba(240,246,252,0.85);
--color-alert-info-text: #79c0ff;
--color-alert-info-icon: #79c0ff;
--color-alert-info-bg: rgba(56,139,253,0.1);
--color-alert-info-border: rgba(56,139,253,0.4);
--color-alert-warn-text: #e3b341;
--color-alert-warn-icon: #e3b341;
--color-alert-warn-bg: rgba(187,128,9,0.1);
--color-alert-warn-border: rgba(187,128,9,0.4);
--color-alert-error-text: #ff7b72;
--color-alert-error-icon: #ff7b72;
--color-alert-error-bg: rgba(248,81,73,0.1);
--color-alert-error-border: rgba(248,81,73,0.4);
--color-alert-success-text: #56d364;
--color-alert-success-icon: #56d364;
--color-alert-success-bg: rgba(46,160,67,0.1);
--color-alert-success-border: rgba(46,160,67,0.4);
--color-autocomplete-shadow: 0 16px 32px rgba(1,4,9,0.85);
--color-autocomplete-row-border: #30363d;
--color-blankslate-icon: #535c66;
--color-btn-text: #c9d1d9;
--color-btn-bg: #21262d;
--color-btn-border: #30363d;
--color-btn-shadow: 0 0 rgba(0,0,0,0);
--color-btn-inset-shadow: 0 0 rgba(0,0,0,0);
--color-btn-hover-bg: #30363d;
--color-btn-hover-border: #8b949e;
--color-btn-selected-bg: #161b22;
--color-btn-focus-bg: #21262d;
--color-btn-focus-border: #8b949e;
--color-btn-focus-shadow: 0 0 0 3px rgba(139,148,158,0.3);
--color-btn-shadow-active: inset 0 0.15em 0.3em rgba(1,4,9,0.15);
--color-btn-shadow-input-focus: 0 0 0 0.2em rgba(31,111,235,0.3);
--color-btn-primary-text: #ffffff;
--color-btn-primary-bg: #238636;
--color-btn-primary-border: #2ea043;
--color-btn-primary-shadow: 0 0 rgba(0,0,0,0);
--color-btn-primary-inset-shadow: 0 0 rgba(0,0,0,0);
--color-btn-primary-hover-bg: #2ea043;
--color-btn-primary-hover-border: #3fb950;
--color-btn-primary-selected-bg: #238636;
--color-btn-primary-selected-shadow: 0 0 rgba(0,0,0,0);
--color-btn-primary-disabled-text: rgba(240,246,252,0.5);
--color-btn-primary-disabled-bg: rgba(35,134,54,0.6);
--color-btn-primary-disabled-border: rgba(0,0,0,0);
--color-btn-primary-focus-bg: #238636;
--color-btn-primary-focus-border: #3fb950;
--color-btn-primary-focus-shadow: 0 0 0 3px rgba(46,164,79,0.4);
--color-btn-primary-icon: #f0f6fc;
--color-btn-primary-counter-bg: rgba(240,246,252,0.2);
--color-btn-outline-text: #58a6ff;
--color-btn-outline-hover-text: #58a6ff;
--color-btn-outline-hover-bg: #30363d;
--color-btn-outline-hover-border: #58a6ff;
--color-btn-outline-hover-shadow: 0 1px 0 rgba(1,4,9,0.1);
--color-btn-outline-hover-inset-shadow: inset 0 1px 0 rgba(240,246,252,0.03);
--color-btn-outline-hover-counter-bg: rgba(240,246,252,0.2);
--color-btn-outline-selected-text: #f0f6fc;
--color-btn-outline-selected-bg: #0d419d;
--color-btn-outline-selected-border: rgba(240,246,252,0.1);
--color-btn-outline-selected-shadow: 0 0 rgba(0,0,0,0);
--color-btn-outline-disabled-text: rgba(88,166,255,0.5);
--color-btn-outline-disabled-bg: #0d1117;
--color-btn-outline-disabled-counter-bg: rgba(31,111,235,0.05);
--color-btn-outline-focus-border: #58a6ff;
--color-btn-outline-focus-shadow: 0 0 0 3px rgba(17,88,199,0.4);
--color-btn-outline-counter-bg: rgba(31,111,235,0.1);
--color-btn-danger-text: #f85149;
--color-btn-danger-hover-text: #ffffff;
--color-btn-danger-hover-bg: #da3633;
--color-btn-danger-hover-border: #f85149;
--color-btn-danger-hover-shadow: 0 0 rgba(0,0,0,0);
--color-btn-danger-hover-inset-shadow: 0 0 rgba(0,0,0,0);
--color-btn-danger-hover-counter-bg: rgba(255,255,255,0.2);
--color-btn-danger-selected-text: #ffffff;
--color-btn-danger-selected-bg: #b62324;
--color-btn-danger-selected-border: rgba(240,246,252,0.1);
--color-btn-danger-selected-shadow: 0 0 rgba(0,0,0,0);
--color-btn-danger-disabled-text: rgba(248,81,73,0.5);
--color-btn-danger-disabled-bg: #0d1117;
--color-btn-danger-disabled-counter-bg: rgba(218,54,51,0.05);
--color-btn-danger-focus-border: #f85149;
--color-btn-danger-focus-shadow: 0 0 0 3px rgba(182,35,36,0.4);
--color-btn-danger-counter-bg: rgba(218,54,51,0.1);
--color-btn-danger-icon: #f85149;
--color-btn-danger-hover-icon: #f0f6fc;
--color-btn-counter-bg: #30363d;
--color-counter-text: #c9d1d9;
--color-counter-bg: #30363d;
--color-counter-primary-text: #c9d1d9;
--color-counter-primary-bg: #6e7681;
--color-counter-secondary-text: #8b949e;
--color-dropdown-shadow: 0 16px 32px rgba(1,4,9,0.85);
--color-label-border: #30363d;
--color-label-primary-text: #b1bac4;
--color-label-primary-border: #6e7681;
--color-label-secondary-text: #8b949e;
--color-label-secondary-border: #30363d;
--color-label-info-text: #388bfd;
--color-label-info-border: rgba(56,139,253,0.4);
--color-label-success-text: #3fb950;
--color-label-success-border: rgba(46,160,67,0.4);
--color-label-warning-text: #e3b341;
--color-label-warning-border: rgba(242,211,91,0.4);
--color-label-danger-text: #f85149;
--color-label-danger-border: rgba(248,81,73,0.4);
--color-label-orange-text: #db6d28;
--color-label-orange-border: rgba(219,109,40,0.4);
--color-input-bg: #0d1117;
--color-input-contrast-bg: rgba(1,4,9,0.3);
--color-input-border: #21262d;
--color-input-shadow: 0 0 rgba(0,0,0,0);
--color-input-disabled-bg: #161b22;
--color-input-disabled-border: #30363d;
--color-input-warning-border: #d29922;
--color-input-error-border: #f85149;
--color-input-tooltip-success-text: #56d364;
--color-input-tooltip-success-bg: #101f1b;
--color-input-tooltip-success-border: #1c532b;
--color-input-tooltip-warning-text: #e3b341;
--color-input-tooltip-warning-bg: #1e1c16;
--color-input-tooltip-warning-border: #5d4411;
--color-input-tooltip-error-text: #ff7b72;
--color-input-tooltip-error-bg: #25171c;
--color-input-tooltip-error-border: #792e2e;
--color-avatar-bg: rgba(240,246,252,0.1);
--color-avatar-border: rgba(240,246,252,0.1);
--color-avatar-stack-fade: #30363d;
--color-avatar-stack-fade-more: #21262d;
--color-avatar-child-shadow: -2px -2px 0 #0d1117;
--color-toast-text: #79c0ff;
--color-toast-bg: #010409;
--color-toast-border: #214981;
--color-toast-shadow: 0 8px 24px #010409;
--color-toast-icon: #79c0ff;
--color-toast-icon-bg: #121d2e;
--color-toast-icon-border: #214981;
--color-toast-success-text: #56d364;
--color-toast-success-border: #1c532c;
--color-toast-success-icon: #56d364;
--color-toast-success-icon-bg: #111f1c;
--color-toast-success-icon-border: #1c532c;
--color-toast-warning-text: #e3b341;
--color-toast-warning-border: #5e4411;
--color-toast-warning-icon: #e3b341;
--color-toast-warning-icon-bg: #1f1c16;
--color-toast-warning-icon-border: #5e4411;
--color-toast-danger-text: #ff7b72;
--color-toast-danger-border: #792e2e;
--color-toast-danger-icon: #ff7b72;
--color-toast-danger-icon-bg: #25171c;
--color-toast-danger-icon-border: #792e2e;
--color-toast-loading-text: #c9d1d9;
--color-toast-loading-border: #30363d;
--color-toast-loading-icon: #f0f6fc;
--color-toast-loading-icon-bg: #30363d;
--color-toast-loading-icon-border: #30363d;
--color-timeline-text: #b1bac4;
--color-timeline-badge-bg: #0d1117;
--color-timeline-target-badge-border: #1f6feb;
--color-timeline-target-badge-shadow: #0d419d;
--color-select-menu-border-secondary: #30363d;
--color-select-menu-shadow: 0 0 18px rgba(1,4,9,0.4);
--color-select-menu-backdrop-bg: rgba(1,4,9,0.5);
--color-select-menu-backdrop-border: #484f58;
--color-select-menu-tap-highlight: rgba(48,54,61,0.5);
--color-select-menu-tap-focus-bg: #0c2d6b;
--color-box-blue-border: #0d419d;
--color-box-row-yellow-bg: rgba(235,196,64,0.1);
--color-box-row-blue-bg: rgba(121,192,255,0.1);
--color-box-header-blue-bg: #0d1117;
--color-box-header-blue-border: #30363d;
--color-box-border-info: rgba(56,139,253,0.4);
--color-box-bg-info: rgba(56,139,253,0.1);
--color-box-border-warning: rgba(187,128,9,0.4);
--color-box-bg-warning: rgba(187,128,9,0.1);
--color-branch-name-text: #c9d1d9;
--color-branch-name-icon: #b1bac4;
--color-branch-name-bg: rgba(88,166,255,0.1);
--color-branch-name-link-text: #58a6ff;
--color-branch-name-link-icon: #58a6ff;
--color-branch-name-link-bg: rgba(88,166,255,0.1);
--color-markdown-code-bg: rgba(240,246,252,0.15);
--color-markdown-frame-border: #3b434b;
--color-markdown-blockquote-border: #3b434b;
--color-markdown-table-border: #3b434b;
--color-markdown-table-tr-border: #272c32;
--color-menu-heading-text: #8b949e;
--color-menu-border-active: #f78166;
--color-menu-bg-active: #161b22;
--color-sidenav-selected-bg: #21262d;
--color-sidenav-border-active: #f78166;
--color-header-text: rgba(240,246,252,0.7);
--color-header-bg: #161b22;
--color-header-logo: #f0f6fc;
--color-filter-item-bar-bg: #12161c;
--color-hidden-text-expander-bg: #21262d;
--color-hidden-text-expander-bg-hover: #30363d;
--color-drag-and-drop-border: #25292f;
--color-upload-enabled-border: #3b434b;
--color-upload-enabled-border-focused: #4487ee;
--color-previewable-comment-form-border: #25292f;
--color-underlinenav-border: rgba(48,54,61,0);
--color-underlinenav-border-hover: #30363d;
--color-underlinenav-border-active: #f78166;
--color-underlinenav-text: #8b949e;
--color-underlinenav-text-hover: #c9d1d9;
--color-underlinenav-text-active: #c9d1d9;
--color-underlinenav-icon: #6e7681;
--color-underlinenav-icon-hover: #c9d1d9;
--color-underlinenav-icon-active: #c9d1d9;
--color-underlinenav-counter-text: #8b949e;
--color-verified-badge-text: #3fb950;
--color-verified-badge-bg: rgba(63,185,80,0.1);
--color-verified-badge-border: rgba(63,185,80,0.4);
--color-social-count-bg: #21262d;
--color-tooltip-text: #f0f6fc;
--color-tooltip-bg: #21262d;
--color-header-search-bg: #0d1117;
--color-header-search-border: #21262d;
--color-search-keyword-hl: rgba(187,128,9,0.4);
--color-diffstat-neutral-bg: #30363d;
--color-diffstat-neutral-border: rgba(240,246,252,0.1);
--color-diffstat-deletion-bg: #da3633;
--color-diffstat-deletion-border: #f85149;
--color-diffstat-addition-bg: #238636;
--color-diffstat-addition-border: #2ea043;
--color-files-explorer-icon: #6e7681;
--color-hl-author-bg: #051d4d;
--color-hl-author-border: #0d419d;
--color-logo-subdued: #30363d;
--color-discussion-border: #34513b;
--color-discussion-bg-success: rgba(46,160,67,0.1);
--color-actions-workflow-table-sticky-bg: rgba(13,17,23,0.95);
--color-repo-language-color-border: rgba(240,246,252,0.2);
--color-code-selection-bg: rgba(121,192,255,0.3);
--color-blob-line-highlight-bg: rgba(210,153,34,0.15);
--color-blob-line-highlight-border: #e3b341;
--color-diff-addition-text: #56d364;
--color-diff-addition-bg: rgba(46,160,67,0.2);
--color-diff-addition-border: #196c2e;
--color-diff-deletion-text: #f85149;
--color-diff-deletion-bg: rgba(218,54,51,0.2);
--color-diff-deletion-border: #b62324;
--color-diff-change-text: #e3b341;
--color-diff-change-bg: #341a00;
--color-diff-change-border: #9e6a03;
--color-diff-blob-num-text: rgba(240,246,252,0.3);
--color-diff-blob-num-hover-text: rgba(240,246,252,0.6);
--color-diff-blob-addition-num-text: #3fb950;
--color-diff-blob-addition-num-hover-text: #7ee787;
--color-diff-blob-addition-num-bg: rgba(46,160,67,0.1);
--color-diff-blob-addition-line-bg: rgba(46,160,67,0.2);
--color-diff-blob-addition-word-bg: rgba(46,160,67,0.55);
--color-diff-blob-deletion-num-text: #f85149;
--color-diff-blob-deletion-num-hover-text: #ffa198;
--color-diff-blob-deletion-num-bg: rgba(218,54,51,0.1);
--color-diff-blob-deletion-line-bg: rgba(218,54,51,0.2);
--color-diff-blob-deletion-word-bg: rgba(218,54,51,0.5);
--color-diff-blob-hunk-text: #8b949e;
--color-diff-blob-hunk-num-bg: rgba(88,166,255,0.15);
--color-diff-blob-hunk-line-bg: rgba(88,166,255,0.1);
--color-diff-blob-empty-block-bg: #161b22;
--color-diff-blob-selected-line-highlight-bg: rgba(187,128,9,0.1);
--color-diff-blob-selected-line-highlight-border: #bb8009;
--color-diff-blob-selected-line-highlight-mix-blend-mode: normal;
--color-diff-blob-expander-icon: #8b949e;
--color-diff-blob-expander-hover-icon: #f0f6fc;
--color-diff-blob-expander-hover-bg: #1f6feb;
--color-diff-blob-comment-button-icon: #f0f6fc;
--color-diff-blob-comment-button-bg: #1f6feb;
--color-diff-blob-comment-button-gradient-bg: #367eed;
--color-global-nav-logo: #f0f6fc;
--color-global-nav-bg: #161b22;
--color-global-nav-text: #c9d1d9;
--color-global-nav-icon: #c9d1d9;
--color-global-nav-input-bg: #0d1117;
--color-global-nav-input-border: #21262d;
--color-global-nav-input-icon: #21262d;
--color-global-nav-input-placeholder: #484f58;
--color-calendar-graph-day-bg: #161b22;
--color-calendar-graph-day-border: rgba(27,31,35,0.06);
--color-calendar-graph-day-L1-bg: #003820;
--color-calendar-graph-day-L2-bg: #00602d;
--color-calendar-graph-day-L3-bg: #10983d;
--color-calendar-graph-day-L4-bg: #27d545;
--color-calendar-graph-day-L4-border: rgba(255,255,255,0.05);
--color-calendar-graph-day-L3-border: rgba(255,255,255,0.05);
--color-calendar-graph-day-L2-border: rgba(255,255,255,0.05);
--color-calendar-graph-day-L1-border: rgba(255,255,255,0.05);
--color-footer-invertocat-octicon: #30363d;
--color-footer-invertocat-octicon-hover: #6e7681;
--color-pr-state-draft-text: #8b949e;
--color-pr-state-draft-bg: rgba(139,148,158,0.1);
--color-pr-state-draft-border: rgba(139,148,158,0.4);
--color-pr-state-open-text: #3fb950;
--color-pr-state-open-bg: rgba(63,185,80,0.1);
--color-pr-state-open-border: rgba(63,185,80,0.4);
--color-pr-state-merged-text: #a371f7;
--color-pr-state-merged-bg: rgba(188,140,255,0.1);
--color-pr-state-merged-border: rgba(188,140,255,0.4);
--color-pr-state-closed-text: #f85149;
--color-pr-state-closed-bg: rgba(218,54,51,0.1);
--color-pr-state-closed-border: rgba(218,54,51,0.4);
--color-topic-tag-text: #58a6ff;
--color-topic-tag-bg: rgba(56,139,253,0.1);
--color-topic-tag-hover-bg: rgba(56,139,253,0.2);
--color-topic-tag-active-bg: rgba(56,139,253,0.15);
--color-merge-box-success-icon-bg: rgba(46,160,67,0.1);
--color-merge-box-success-icon-text: #3fb950;
--color-merge-box-success-icon-border: rgba(46,160,67,0.4);
--color-merge-box-success-indicator-bg: #238636;
--color-merge-box-success-indicator-border: #2ea043;
--color-merge-box-merged-icon-bg: rgba(188,140,255,0.1);
--color-merge-box-merged-icon-text: #a371f7;
--color-merge-box-merged-icon-border: rgba(188,140,255,0.4);
--color-merge-box-merged-box-border: rgba(188,140,255,0.4);
--color-merge-box-neutral-icon-bg: rgba(201,209,217,0.1);
--color-merge-box-neutral-icon-text: #8b949e;
--color-merge-box-neutral-icon-border: rgba(201,209,217,0.4);
--color-merge-box-neutral-indicator-bg: #484f58;
--color-merge-box-neutral-indicator-border: #6e7681;
--color-merge-box-warning-icon-bg: rgba(187,128,9,0.1);
--color-merge-box-warning-icon-text: #e3b341;
--color-merge-box-warning-icon-border: rgba(187,128,9,0.4);
--color-merge-box-warning-box-border: rgba(187,128,9,0.4);
--color-merge-box-warning-merge-highlight: rgba(187,128,9,0.1);
--color-merge-box-error-icon-bg: rgba(248,81,73,0.1);
--color-merge-box-error-icon-text: #f85149;
--color-merge-box-error-icon-border: rgba(248,81,73,0.4);
--color-merge-box-error-indicator-bg: #da3633;
--color-merge-box-error-indicator-border: #f85149;
--color-project-card-bg: #161b22;
--color-project-header-bg: #0d1117;
--color-project-sidebar-bg: #161b22;
--color-project-gradient-in: #161b22;
--color-project-gradient-out: rgba(22,27,34,0);
--color-marketing-icon-primary: #79c0ff;
--color-marketing-icon-secondary: #1f6feb;
--color-prettylights-syntax-comment: #8b949e;
--color-prettylights-syntax-constant: #79c0ff;
--color-prettylights-syntax-entity: #d2a8ff;
--color-prettylights-syntax-storage-modifier-import: #c9d1d9;
--color-prettylights-syntax-entity-tag: #7ee787;
--color-prettylights-syntax-keyword: #ff7b72;
--color-prettylights-syntax-string: #a5d6ff;
--color-prettylights-syntax-variable: #ffa657;
--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
--color-prettylights-syntax-invalid-illegal-bg: #8e1519;
--color-prettylights-syntax-carriage-return-text: #f0f6fc;
--color-prettylights-syntax-carriage-return-bg: #b62324;
--color-prettylights-syntax-string-regexp: #7ee787;
--color-prettylights-syntax-markup-list: #f2cc60;
--color-prettylights-syntax-markup-heading: #1f6feb;
--color-prettylights-syntax-markup-italic: #c9d1d9;
--color-prettylights-syntax-markup-bold: #c9d1d9;
--color-prettylights-syntax-markup-deleted-text: #ffdcd7;
--color-prettylights-syntax-markup-deleted-bg: #67060c;
--color-prettylights-syntax-markup-inserted-text: #aff5b4;
--color-prettylights-syntax-markup-inserted-bg: #033a16;
--color-prettylights-syntax-markup-changed-text: #ffdfb6;
--color-prettylights-syntax-markup-changed-bg: #5a1e02;
--color-prettylights-syntax-markup-ignored-text: #c9d1d9;
--color-prettylights-syntax-markup-ignored-bg: #1158c7;
--color-prettylights-syntax-meta-diff-range: #d2a8ff;
--color-prettylights-syntax-brackethighlighter-angle: #8b949e;
--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
--color-codemirror-text: #c9d1d9;
--color-codemirror-bg: #0d1117;
--color-codemirror-gutters-bg: #0d1117;
--color-codemirror-guttermarker-text: #0d1117;
--color-codemirror-guttermarker-subtle-text: #6e7681;
--color-codemirror-linenumber-text: #8b949e;
--color-codemirror-cursor: #f0f6fc;
--color-codemirror-selection-bg: rgba(121,192,255,0.3);
--color-codemirror-activeline-bg: #161b22;
--color-codemirror-matchingbracket-text: #c9d1d9;
--color-codemirror-lines-bg: #0d1117;
--color-codemirror-syntax-comment: #8b949e;
--color-codemirror-syntax-constant: #79c0ff;
--color-codemirror-syntax-entity: #d2a8ff;
--color-codemirror-syntax-keyword: #ff7b72;
--color-codemirror-syntax-storage: #ff7b72;
--color-codemirror-syntax-string: #a5d6ff;
--color-codemirror-syntax-support: #79c0ff;
--color-codemirror-syntax-variable: #ffa657;
--color-ansi-black: #0d1117;
--color-ansi-black-bright: #161b22;
--color-ansi-white: #b1bac4;
--color-ansi-white-bright: #b1bac4;
--color-ansi-gray: #6e7681;
--color-ansi-red: #ff7b72;
--color-ansi-red-bright: #ffa198;
--color-ansi-green: #3fb950;
--color-ansi-green-bright: #56d364;
--color-ansi-yellow: #d29922;
--color-ansi-yellow-bright: #e3b341;
--color-ansi-blue: #58a6ff;
--color-ansi-blue-bright: #79c0ff;
--color-ansi-magenta: #bc8cff;
--color-ansi-magenta-bright: #d2a8ff;
--color-ansi-cyan: #76e3ea;
--color-ansi-cyan-bright: #b3f0ff;
>>>>>>> c9f29274a070fc252ad363c8a06ab5bd2728eeef
}
# ============= .bashrc ============= #
##============ ≠≠≠ ============##
## Aliases
alias ls="ls -a"
alias rm='rm -rf'
alias cp='cp -i'
alias mv='mv -i'
##============ ≠≠≠ ============##
## Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
##============ ≠≠≠ ============##
######### BASH COMMANDS #########
##============ ≠≠≠ ============##
## Отображение Даты и Времени
export HISTTIMEFORMAT="%Y%m%d %H:%M [$(whoami)@$(hostname -b)]# "
##============ ≠≠≠ ============##
## Увеличиваем размер и количество строк
export HISTSIZE=50000
export HISTFILESIZE=50000
##============ ≠≠≠ ============##
## Добавл Команд Bash в Файл с Историей
shopt -s histappend
##============ ≠≠≠ ============##
## Мгновенно Сохранять Историю
###* / == РАНЕЕ НЕ ЗАДАНА :
PROMPT_COMMAND='history -a'
###* / == РАНЕЕ ЗАДАНА :
#PROMPT_COMMAND='$PROMPT_COMMAND; history -a'
##============ ≠≠≠ ============##
## Контролируйте Bash History HISTCONTROL — список опций, разделенных двоеточиями.
export HISTCONTROL=ignorespace:erasedups
##============ ≠≠≠ ============##
## Игнорировать Определенные Команды
export HISTIGNORE="ls:ps:history" # Не сохранять команды ls, ps и history:
##============ ≠≠≠ ============##
## Исправление случайных ошибок.
shopt -s cdspell
##============ ≠≠≠ ============##
## все строки многостроч.,в одной записи
shopt -s cmdhist
##============ ≠≠≠ ============##
## Изменить Имя Файла с Историй Команд
export HISTFILE=~/.history_"$USER"
##============ ≠≠≠ ============##
## Применить изменения в ~/.bashrc:
$ source ~/.bashrc
Как добавить в Notepad++ парсер для Function List
Для начала нужно установить Notepad++ БЕЗ инсталлятора (из архива).
Если Notepad++ поставить при помощи инсталлятора, то все, что описано ниже, работать НЕ будет.
В файле functionList.xml в папке  Notepad++  в секцию <associationMap> добавить строку
<association id= «lua_function» langID=»23″ />
ВАЖНО: если изменить строку «lua_function» на что-либо другое (например, на «lua_parse»), то работать НЕ будет.
В конец секции <parsers> добавить парсер, взятый отсюда (первая выдача в гугле по запросу «notepad++ lua function list»):
https://stackoverflow.com/questions/19246077/how-to-add-lua-functions-to-the-notepad-functionlist-xml
<!-- Basic lua parser for functionList.xml in Notepad++ 6.5.3 -->
<!-- See http://notepad-plus-plus.org/features/function-list.html -->
<parser id="lua_function" displayName="Lua" commentExpr="--.*?$">
<!-- Basic lua table view, nested lua table not supported -->
<classRange
mainExpr="[.\w]+[\s]*=[\s]*\{"
openSymbole="\{"
closeSymbole="\}"
displayMode="node">
<className>
<nameExpr expr="[.\w]+"/>
</className>
<function
mainExpr="[.\w]+[\s]*=[\s]*['&quot;]?[\w]+['&quot;]?">
<functionName>
<funcNameExpr expr=".*"/>
</functionName>
</function>
</classRange>
<!-- Basic lua functions support -->
<function
mainExpr="(function[\s]+[.\w]+(:[\w]+)?)|([.\w]+[\s]*=[\s]*function)"
displayMode="$className->$functionName">
<functionName>
<nameExpr expr="((?<=function)[\s]+[.:\w]+)|(([.\w]+)(?=([\s]*=[\s]*function)))"/>
</functionName>
<className>
<nameExpr expr="[.\w]+(?=:)"/>
</className>
</function>
</parser>
%pre --interpreter /usr/bin/python
#!/bin/sh
outfile='/tmp/part-include'
hds=""
mymedia=""
for file in /proc/ide/h* do
mymedia=`cat $file/media`
if [ $mymedia == "disk" ] ; then
hds="$hds `basename $file`"
fi
done
set $hds
numhd=`echo $#`
drive1=`echo $hds | cut -d' ' -f1`
drive2=`echo $hds | cut -d' ' -f2`
#Write out partition scheme based on whether there are 1 or 2 hard drives
if [ $numhd == "2" ] ; then
# ====== 2 drives
echo "#partitioning scheme generated in %pre for 2 drives" > /tmp/part-include
echo "clearpart --all" >> /tmp/part-include
echo "part /boot --fstype ext3 --size 75 --ondisk hda" >> /tmp/part-include
echo "part / --fstype ext3 --size 1 --grow --ondisk hda" >> /tmp/part-include
echo "part swap --recommended --ondisk $drive1" >> /tmp/part-include
echo "part /home --fstype ext3 --size 1 --grow --ondisk hdb" >> /tmp/part-include
else
# ====== 1 drive
echo "#partitioning scheme generated in %pre for 1 drive" > /tmp/part-include
echo "clearpart --all" >> /tmp/part-include
echo "part /boot --fstype ext3 --size 75" >> /tmp/part-include
echo "part swap --recommended" >> /tmp/part-include
echo "part / --fstype ext3 --size 2048" >> /tmp/part-include
echo "part /home --fstype ext3 --size 2048 --grow" >> /tmp/part-include
fi
## Этот сценарий определяет количество жестких дисков и сохраняет текстовый файл с другой схемой разбиения, если установлены один или два диска. Вместо того, чтобы вставлять набор команд разбиения в файл кикстарта, добавьте строку:
%include "$outfile"
%end
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
# do dangerous stuff
fi
# Я включил предложение levislevis85 И добавил -nвозможность readпринимать один символ без необходимости нажимать Enter. Вы можете использовать один или оба из них.
######################
##Кроме того, отрицательная форма может выглядеть так:
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
# handle exits from shell or function but don't exit interactive shell
fi
####################################
#### info. ######
####################################
#Однако, как указал Эрих, при некоторых обстоятельствах, таких как синтаксическая ошибка, вызванная запуском сценария в неправильной оболочке, инвертированная форма может позволить сценарию продолжить «опасные вещи». Режим отказа должен способствовать наиболее безопасному исходу, поэтому ifследует использовать только первый неотрицательный результат .
## Объяснение:##
## Команда readвыводит приглашение ( -p "prompt"), затем принимает один символ ( -n 1) и принимает обратную косую черту буквально ( -r) (в противном readслучае обратная косая черта будет восприниматься как escape и ждать второго символа). Переменная по умолчанию для readсохранения результата, $REPLYесли вы не укажете такое имя:read -p "my prompt" -n 1 -r my_var
## Этот ifоператор использует регулярное выражение, чтобы проверить, соответствует ли символ в $REPLY( =~) букве «Y» в верхнем или нижнем регистре. В используемом здесь регулярном выражении говорится: «строка, начинающаяся ( ^) и состоящая исключительно из одного из списка символов в выражении в квадратных скобках ( [Yy]) и окончании ( $)». Якоря ( ^и $) предотвращают сопоставление более длинных строк. В этом случае они помогают усилить ограничение в один символ, установленное в readкоманде.
## В инвертированной форме используется логический оператор «не» ( !) для сопоставления ( =~) любого символа, который не является «Y» или «y». Альтернативный способ выразить это менее читабелен и, на мой взгляд, не так ясно выражает намерение в данном случае. Однако вот как это будет выглядеть:if [[ $REPLY =~ ^[^Yy]$ ]]
################%######
##
read -p "Continue (y/n)?" choice
case "$choice" in
y|Y ) echo "yes";;
n|N ) echo "no";;
* ) echo "invalid";;
esac
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/11\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/11\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/investor.kiev.ua\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.9.16"}};
!function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55358,56760,9792,65039],[55358,56760,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='twentytwelve-style-css' href='https://investor.kiev.ua/wp-content/themes/investor/style.css?ver=4.9.16' type='text/css' media='all' />
<link rel='stylesheet' id='fontello-css' href='https://investor.kiev.ua/wp-content/themes/investor/css/search.css?ver=4.9.16' type='text/css' media='all' />
<link rel='stylesheet' id='owl-carousel-css' href='https://investor.kiev.ua/wp-content/themes/investor/owl-carousel/owl.carousel.css?ver=v1.3.2' type='text/css' media='all' />
<script type='text/javascript' src='https://investor.kiev.ua/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script>
<script type='text/javascript' src='https://investor.kiev.ua/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script>
<link rel='https://api.w.org/' href='https://investor.kiev.ua/wp-json/' />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://investor.kiev.ua/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://investor.kiev.ua/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 4.9.16" />
<link rel='shortlink' href='https://investor.kiev.ua/?p=34' />
<link rel="alternate" type="application/json+oembed" href="https://investor.kiev.ua/wp-json/oembed/1.0/embed?url=https%3A%2F%2Finvestor.kiev.ua%2Fkredit-pod-zalog-nedvizhimosti%2F" />
</head>
<!-- Google Tag Manager (noscript) -->
<!-- End Google Tag Manager (noscript) -->
<div id="page" class="hfeed site">
<div id="main" class="wrapper">
<div class="landing-page">
<section class="bg-light-green">
<div class="landing-page-content">
<div class="left bg-gray">
<form action="javascript:void(0)" method="post" id="calc-form">
<h3>Кредитный калькулятор</h3>
<p><label for="currency">Валюта кредитования:</label>
<select name="currency" id="currency">
<option value="USD">USD</option>
<option value="UAH">UAH</option>
</select></p>
<p><label for="schedule">График погашения:</label>
<select name="schedule" id="schedule">
<option value="1">Только процент</option>
<!--<option value="2">На остаток</option>-->
<option value="3">Равными частями</option>
</select></p>
<p><label for="sum">Сумма кредита:</label>
<input type="text" name="sum" id="sum" value="10000"></p>
<p><label for="month">Срок кредита:</label>
<select name="month" id="month">
<option value="2">2 месяца</option>
<option value="3">3 месяца</option>
<option value="4">4 месяца</option>
<option value="5">5 месяцев</option>
<option value="6">6 месяцев</option>
<option value="12">1 год</option>
<option value="24">2 года</option>
<option value="36">3 года</option>
</select></p>
<p><label for="username">Имя:</label>
<input type="text" id="username" name="username"></p>
<p><label for="type-property ">Вид недвижимости:</label>
<select name="type-property" id="type-property">
<option value="Квартира">Квартира</option>
<option value="Дом">Дом</option>
<option value="Нежилое помещение">Нежилое помещение</option>
<option value="Земля">Земля</option>
<option value="Другое">Другое</option>
</select></p>
<p><label for="city">Город:</label>
<input type="text" id="city" name="city"></p>
<p><label for="phone">Ваш телефон:</label>
<input type="text" name="phone" id="phone"></p>
<div style="text-align: center;"><button id="calc-credit" class="button">Расчитать</button>
<input class="button" id="send-credit" type="submit" value="Отправить"></div>
</form>
</div>
<div class="right">
<div id="calcСonditions">
<h3>Почему именно «Инвестор Плюс»?</h3>
<img class="aligncenter" src="https://investor.kiev.ua/wp-content/uploads/zi09qm.png" width="37" height="37">
<p>Необычайно приятные процентные ставки</p>
<img class="aligncenter" src="https://investor.kiev.ua/wp-content/uploads/zj10qn.png" width="37" height="37">
<p>Микро- и макрокредиты до 85 % от стоимости залога</p>
<img class="aligncenter" src="https://investor.kiev.ua/wp-content/uploads/zk11qo.png" width="37" height="37">
<p>В гривнах и долларах США</p>
<img class="aligncenter" src="https://investor.kiev.ua/wp-content/uploads/zl12qp.png" width="37" height="37">
<p>Получение кредита за один-два дня</p>
<img class="aligncenter" src="https://investor.kiev.ua/wp-content/uploads/zm13qq.png" width="37" height="37">
<p>Без кредитной истории и справки о доходах</p>
</div>
<div id="calcTable">
<div class="calcTableHead">
<table class="calcTableInfo">
<thead>
<tr>
<th colspan="2">
<h2>Расчет ежемесячного платежа<!--2-->
</h2></th>
</tr>
<tr>
<th><strong>Месяц</strong></th>
<th><strong>Платеж</strong></th>
</tr>
</thead>
<tfoot></tfoot>
<tbody></tbody>
</table>
</div>
<div id="calcTableBody">
</div>
</div>
</div>
</div></section>
</div>
</div>
<!-- #main .wrapper -->
</div>
<!-- #page -->
<a href="https://investor.kiev.ua/kredit-pod-zalog-nedvizhimosti/#call-back"><div id="fixed-call">
<i class="icon-volume-control-phone"></i>
</div></a>
<div id="call-back" class="modal-dialog">
<div><a href="https://investor.kiev.ua/kredit-pod-zalog-nedvizhimosti/#close" title="Close" class="modal-dialog-close">×</a>
<div class="call-back-form">
<center><h3>Оставьте заявку и мы свяжемся с Вами в ближайшее время</h3></center>
<form id="callback-form" method="post">
<input type="name" name="name" id="callback-form-name" placeholder="Ваше имя">
<input type="phone" name="phone" id="callback-form-phone" placeholder="Ваш телефон">
<center><button id="callback-form-send" class="button">Заказать</button></center>
</form>
</div>
</div>
</div>
<script type="text/javascript" src="https://investor.kiev.ua/wp-content/themes/investor/owl-carousel/owl.carousel.min.js?ver=v1.3.2"></script>
<script type="text/javascript" src="https://investor.kiev.ua/wp-includes/js/wp-embed.min.js?ver=4.9.16"></script>
<script>
jQuery(document).ready(function(a){a("#about-us").click(function(){a("#landing-text-body").slideToggle()}),a("#menu-toggle").click(function(){a("#nav-mobile").slideToggle()}),a("#menu-close-toggle").click(function(){a("#nav-mobile").slideToggle()}),a("#phone-toggle").click(function(){a("#site-header-top").slideToggle()})}),jQuery(document).ready(function(a){var b=a(".entry-title").html();a("#no-display").val(b)});
</script>
<script>
jQuery(document).ready(function(a){var b=a("#owl-carusel");b.owlCarousel({items:2,itemsDesktop:[1e3,2],itemsDesktopSmall:[900,2],itemsTablet:[600,1],itemsMobile:!1})});
</script>
<script type="text/javascript">
///Заявка на оформление кредита
jQuery(document).ready(function(){jQuery("#footer-form").submit(function(){return!1}),jQuery("#footer-form-send").on("click",function(){var r=jQuery("#footer-form-name").val(),e=jQuery("#footer-form-phone").val();jQuery("#msg-error").remove(),""!=r&&""!=e?(jQuery("#footer-form-send").replaceWith("<span> отправка...</span>"),jQuery.ajax({type:"POST",url:"https://investor.kiev.ua/sendcallback.php",data:jQuery("#footer-form").serialize(),success:function(r){"true"==r?(window.location.href = 'https://investor.kiev.ua/stranitsa-blagodarnosti/',jQuery("#footer-form-name").val(""),jQuery("#footer-form-phone").val("")):jQuery("#footer-form").fadeIn("fast",function(){jQuery(this).before("<p id='msg-error'>Ваше сообщение не отправлено :( попробуйте позже</strong></p>")})}})):jQuery("#footer-form").fadeIn("fast",function(){jQuery(this).before("<p id='msg-error'>Пожалуйста, заполните все обязательные поля</p>")})})});
</script>
<script type="text/javascript">
///Заявка на оформление кредита
jQuery(document).ready(function(){jQuery("#callback-form").submit(function(){return!1}),jQuery("#callback-form-send").on("click",function(){var r=jQuery("#callback-form-name").val(),e=jQuery("#callback-form-phone").val();jQuery("#msg-error").remove(),""!=r&&""!=e?(jQuery("#callback-form-send").replaceWith("<span> отправка...</span>"),jQuery.ajax({type:"POST",url:"https://investor.kiev.ua/sendcallback.php",data:jQuery("#callback-form").serialize(),success:function(r){"true"==r?(window.location.href = 'https://investor.kiev.ua/stranitsa-blagodarnosti/',jQuery("#callback-form-name").val(""),jQuery("#callback-form-phone").val("")):jQuery("#callback-form").fadeIn("fast",function(){jQuery(this).before("<p id='msg-error'>Ваше сообщение не отправлено :( попробуйте позже</strong></p>")})}})):jQuery("#callback-form").fadeIn("fast",function(){jQuery(this).before("<p id='msg-error'>Пожалуйста, заполните все обязательные поля</p>")})})});
</script>
<script>
// calc
jQuery(document).ready(function(a){a("#calc-credit").click(function(){var d=(a("#currency").val(),a("#schedule").val(),a("#sum").val()),e=a("#month").val(),j=(a("#type-property").val(),a("#phone").val(),a("#city").val(),0),j=0,k=.025;if(a("#ResultTable").remove(),a("#calcСonditions").slideUp("slow"),a("#calcTable").slideDown("slow"),""==d&&(a("#sum").val("10000"),d=1e4),""==e&&(a("#month").val("1"),e=1),"USD"==a("#currency option:selected").val(),"UAH"==a("#currency option:selected").val(),1==a("#schedule option:selected").val()){for(a("#calcTableBody").append('<table id="ResultTable""><tbody>'),i=0;i<e;i++)a("#calcTableBody table tbody").append("<tr><td>"+(i+1)+"</td><td>"+d*k+"</td></tr>");a("#calcTableBody table tbody").append("<tr><td><strong>Всего:</strong></td><td><strong>"+d*(1+k)*e+"</strong></td></tr>"),a("#calcTableBody").append("</tbody></table>")}if(2==a("#schedule option:selected").val()&&alert("2"),3==a("#schedule option:selected").val()){for(a("#calcTableBody").append('<table id="ResultTable"><tbody>'),j=Math.pow(1+k,e),j=d*k/(1-1/j),j=Math.round(j),i=0;i<e;i++)a("#calcTableBody table tbody").append("<tr><td>"+(i+1)+"</td><td>"+j+"</td></tr>");a("#calcTableBody table tbody").append("<tr><td><strong>Всего:</strong></td><td><strong>"+j*e+"</strong></td></tr>"),a("#calcTableBody").append("</tbody></table>")}}),jQuery("#send-credit").on("click",function(){var b=a("#username").val(),c=a("#currency").val(),d=a("#schedule").val(),e=a("#sum").val(),f=a("#month").val(),g=a("#type-property").val(),h=a("#phone").val(),i=a("#city").val();jQuery("#msg-error").remove(),""!=b&&""!=c&&""!=d&&""!=e&&""!=f&&""!=g&&""!=h&&""!=i?(temp=c+" - "+d+" - "+e+" - "+f+" - "+g+" - "+h+" - "+i,jQuery.ajax({type:"POST",url:"https://investor.kiev.ua/sendcredit.php",data:jQuery("#calc-form").serialize(),success:function(a){"true"==a?jQuery("#calc-form").fadeOut("fast",function(){window.location.href = 'https://investor.kiev.ua/stranitsa-blagodarnosti/'}):jQuery("#calc-form").fadeIn("fast",function(){jQuery(this).before("<p id='msg-error'>Ваше сообщение не отправлено :( попробуйте позже</strong></p>")})}})):jQuery("#calc-form").fadeIn("fast",function(){jQuery(this).before("<p id='msg-error'>Пожалуйста, заполните все обязательные поля</p>")})}),a("#username").val(""),a("#phone").val(""),a("#city").val("")});
</script>
<script type="text/javascript">
jQuery(document).ready(function($) {
$("#seo-btn").click(function() {
$("#seo-text").animate({"max-height": "99999px"}, 1000);
$("#seo-btn").hide();
$("#seo-btn2").show();
});
$("#seo-btn2").click(function(){
$("#seo-text").animate({"max-height": "118px"}, 200);
$("#seo-btn2").hide();
$("#seo-btn").show();
});
});
</script>
#!/bin/bash
##=========≠=================
## Variable
title='ТЕСТ: Выберите пункт';
##============ ≠≠≠≠ ============
wait() {
echo "Нажмите любую клавишу, чтобы продолжить..";
read -s -n 1;
}
##============ ≠≠≠≠ ============
menu() {
echo "=== $title ==="
echo "#======== MENU ==========#";
echo " 1) Select 1";
echo " 2) Select 2";
echo " 3) Select 3";
echo " 4) Select 4";
echo "#========== ≠≠≠≠ ==========#";
}
menu
read n
case $n in
1) echo "Select $n";wait;;
2) echo "Select $n";wait;;
3) echo "Select $n";wait;;
4) echo "Select $n";wait;;
*) echo "Ошибочный выбор";
sleep 3;exit;;
esac
#!/bin/bash
#exampleMenuScript.sh
# Bash Menu Script Example
PS3='Please enter your choice: '
options=( "sel1" "sel 2" "sel 3" "Quit" )
select opt in "${sel[@]}"
do
case $opt in
"sel 1")
echo "you chose choice 1"
;;
"sel2")
echo "you chose choice 2"
;;
"sel 3")
echo "you chose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
#!/bin/bash
title_script='newBree.sh'
ver="v1.0.0"
title="TERMUX Shell Script"
title_full="$title $ver"
##============ ≠≠≠ ============
#типовые функции
##============ ≠≠≠ ============
colorFunction() {
##============ ≠≠≠ ============
# для рабты с цветами
normal="\033[0m"
green="\033[32m"
red="\033[1;31m"
blue="\033[1;34m"
black="\033[40m"
textcolor=$green
bgcolor=$black
color() {
case "$1" in
normal|default)
sed -i -e 's/^textcolor=.*/textcolor=$normal/' -e 's/^bgcolor=.*/bgcolor=$normal/' breeze.sh #меняем переменную в самом скрипте
textcolor=$normal #меняем переменную в текущей сессии
bgcolor=$normal #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
green)
sed -i -e 's/^textcolor=.*/textcolor=$green/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте
textcolor=$green #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
blue)
sed -i -e 's/^textcolor=.*/textcolor=$blue/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте
textcolor=$blue #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
red)
sed -i -e 's/^textcolor=.*/textcolor=$red/' -e 's/^bgcolor=.*/bgcolor=$black/' breeze.sh #меняем переменную в самом скрипте
textcolor=$red #меняем переменную в текущей сессии
bgcolor=$black #меняем переменную в текущей сессии
chosen=0 #выходим из терминала в главное меню
;;
*) ##=============
echo "цвет указан неверно. Поддерживается только green, blue, red и default/normal"
;;
esac
}
##============ ≠≠≠ ============
my_clear() { echo -e "$textcolor$bgcolor"; clear;}
}
##============ ≠≠≠ ============
#функция, запрашивает только один символ
myread()
{
temp=""
while [ -z "$temp" ] #защита от пустых значений
do
read -n 1 temp
done
eval $1=$temp
echo
}
##============ ≠≠≠ ============
## запрашивает да/нет
myread_yn() {
temp=""
while [[ "$temp" != "y" && "$temp" != "Y" && "$temp" != "n" && "$temp" != "N" ]] #запрашиваем значение, пока не будет "y" или "n"
do
echo -n "y/n: "
read -n 1 temp
echo
done
eval $1=$temp
}
##============ ≠≠≠ ============
## функция, запрашивает только цифру
myread_dig() {
temp=""
counter=0
while [[ "$temp" != "0" && "$temp" != "1" && "$temp" != "2" && "$temp" != "3" && "$temp" != "4" && "$temp" != "5" && "$temp" != "6" && "$temp" != "7" && "$temp" != "8" && "$temp" != "9" ]] #запрашиваем значение, пока не будет цифра
do
if [ $counter -ne 0 ]; then echo -n "Неправильный выбор. Ведите цифру: ";
fi
let "counter=$counter+1"
read -n 1 temp
echo
done
eval $1=$temp
}
##============ ≠≠≠ ============
## функция установки с проверкой не установлен ли уже пакет
myinstall()
{
if [ -z `rpm -qa $1` ]; then
yum -y install $1
else
echo "Пакет $1 уже установлен"
br
fi
}
title() { my_clear;echo "$title";}
menu() { my_clear;echo "$menu";echo "Выберите пункт меню:";}
wait() { echo "Нажмите любую клавишу,чтобы продолжить...";read -s -n 1;}
br() { echo "";}
##============ ≠≠≠ ============
## Функция проверки установленного приложения, exist возвращает true если установлена и false, если нет.
installed() {
if [ "$2" == "force" ]; then exist=`rpm -qa $1` #добавили возможности форсированно использовать длинный вариант проверки
else
## если нет ключа force, используем старый двойной вариант
exist=`whereis $1 | awk {'print $2'}` # вариант быстрый, но не всегда эффективный
if [ -z $exist ]
then
## будем использовать оба варианта
exist=`rpm -qa $1`
## вариант медленнее, но эффективнее
fi
fi
if [ -n "$exist" ]
then
exist=true
else
exist=false
fi
}
##============ ≠≠≠ ============
## задаем переменные
##============ ≠≠≠ ============
## Задаём переменную с нужным количеством пробелов,
## чтобы меню не разъезжалось от смены версии
title_full_len = ${#title_full}
title_len = ${#title}
space=""
let "space_len=43-$title_full_len"
while [ "${#space}" -le $space_len ]
do
space=$space" "
done
space2=""
let "space2_len=30-$title_len"
while [ "${#space2}" -le $space2_len ]
do
space2=$space2" "
done
##============ ≠≠≠ ============
## Меню
menu="
┌─────────────────────────────────────────────┐
│ $title $ver$space│
├───┬─────────────────────────────────────────┤
│ 1 │ TERMUX на Андроид │
├───┼─────────────────────────────────────────┤
│ 2 │ ==================== │
├───┼─────────────────────────────────────────┤
│ 3 │ Установить панель управления хостингом │
├───┼─────────────────────────────────────────┤
│ 4 │ Установка и настройка VPN-сервера │
├───┼─────────────────────────────────────────┤
│ 5 │ Работа с Proxy │
├───┼─────────────────────────────────────────┤
│ 6 │ Работа с файлами и программами │
├───┼─────────────────────────────────────────┤
│ 7 │ Очистка системы │
├───┼─────────────────────────────────────────┤
│ 8 │ Терминал │
├───┼─────────────────────────────────────────┤
│ 9 │ Обновить │
├───┼─────────────────────────────────────────┤
│ 0 │ Выход │
└───┴─────────────────────────────────────────┘
"
menu1="
● Работа скрипта :
└─● Выполнение ТЕСТА:
│ ┌───┬────────────────────────┐
├─┤ 1 │ Кастомизация Termux │
│ ├───┼────────────────────────┤
├─┤ 2 │ Установка │
│ ├───┼────────────────────────┤
├─┤ 3 │ Test 3 │
│ ├───┼────────────────────────┤
├─┤ 4 │ Test 4 │
│ ├───┼────────────────────────┤
├─┤ 5 │ Test 5 │
│ ├───┼────────────────────────┤
├─┤ 6 │ Test 6 │
│ ├───┼────────────────────────┤
├─┤ 7 │ Test 7 │
│ ├───┼────────────────────────┤
├─┤ 8 │ Test 8 │
│ ├───┼────────────────────────┤
├─┤ 9 │ Test 9 │
│ ├───┼────────────────────────┤
└─┤ 0 │ Выйти на уровень вверх │
└───┴────────────────────────┘
"
##============ ≠≠≠ ============
## Интерфейс
##============ ≠≠≠ ============
repeat=true
chosen=0
chosen2=0
while [ "$repeat" = "true" ] # выводим меню, пока не надо выйти
do
## пошёл вывод
if [ $chosen -eq 0 ]; then
## выводим меню, только если ещё никуда не заходили
menu
myread_dig pick
else
pick=$chosen
fi
case "$pick" in
1) ##==============
chosen=1
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)
echo "Select $pick";br;wait
;;
0) chosen=0
;;
*)echo "Неправильный выбор";
wait
;;
esac
;;
2) ##==========
chosen=2
my_clear
if [ $chosen2 -eq 0 ]; then ## выводим меню, только если ещё никуда не заходили
echo "$title";echo "$menu1";
myread_dig pick
else
pick=$chosen2
fi
case "$pick" in
1|2|3|4|5|6|7|8|9)
echo "Select $pick";br;wait
;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac;;
3) ##=========
chosen=3
my_clear
echo "$title";echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9) ##=========
echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac;;
4) # Установка
chosen=4
my_clear
echo "$title";echo "$menu4"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9) ##========
echo "Select $pick";br;wait;;
0)chosen=0;;
*) echo "Неправильный выбор";wait;;
esac
;;
5) # Установка
chosen=5
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)
echo "Select $pick";br;wait;;
0)chosen=0;;
*) echo "Неправильный выбор";wait
;;
esac
;;
6) # Установка
chosen=6
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
##========≠==
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
##=============
;;
7) # установка
chosen=7
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
8) # установка
chosen=8
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9)echo "Select $pick";br;wait;;
0)chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
9) # Установка
chosen=9
my_clear
echo "$title"
echo "$menu1"
myread_dig pick
case "$pick" in
1|2|3|4|5|6|7|8|9) echo "Select $pick";br;wait;;
0) chosen=0;;
*)echo "Неправильный выбор";wait;;
esac
;;
0) repeat=false
;;
*) echo "Неправильный выбор.";wait
;;
esac
done
echo "Скрипт ожидаемо завершил работу."
echo -e "$normal"
clear
#!/bin/bash
function BACKUPMENU {
echo "******* -select- *******"
echo "**************************"
echo " 1) = Sel 1"
echo " 2) = Sel 2"
echo " 3) = Sel 3"
echo " 4) = Sel 4"
echo " *) = EXIT "
echo "**************************"
}
BACKUPMENU
read n
case $n in
1)# Sel 1
echo " Select 1"
;;
2)# Sel 2
echo " Select 2"
;;
3)# Sel 3
echo " Select 3"
;;
4)# Sel 4
echo " Select 4"
;;
*)##
echo 'ERROR Select. Exit.....'
sleep 5
exit
;;
esac
#!/bin/bash
function BACKUPMENU {
echo "******* -select- *******"
echo "**************************"
echo " 1) = Sel 1"
echo " 2) = Sel 2"
echo " 3) = Sel 3"
echo " 4) = Sel 4"
echo " *) = EXIT "
echo "**************************"
}
BACKUPMENU
read n
case $n in
1)# Sel 1
echo " Select 1"
;;
2)# Sel 2
echo " Select 2"
;;
3)# Sel 3
echo " Select 3"
;;
4)# Sel 4
echo " Select 4"
;;
*)##
echo 'ERROR Select. Exit.....'
sleep 5
exit
;;
esac
#!/bin/bash
##=========≠=================
## Variable
title='ТЕСТ: Выберите пункт';
##============ ≠≠≠≠ ============
wait() {
echo "Нажмите любую клавишу, чтобы продолжить..";
read -s -n 1;
}
##============ ≠≠≠≠ ============
menu() {
echo "=== $title ==="
echo "#======== MENU ==========#";
echo " 1) Select 1";
echo " 2) Select 2";
echo " 3) Select 3";
echo " 4) Select 4";
echo "#========== ≠≠≠≠ ==========#";
}
SelMenu() {
menu
read n
case $n in
1) echo "Option $n";wait
;;
2) echo "Option $n";wait
;;
3) echo "Option $n";wait
;;
4) echo "Option $n";wait
;;
*) echo "ERROR";sleep 3;exit
;;
esac
}
SelMenu
exit
We can make this file beautiful and searchable if this error is corrected: Any value after quoted field isn't allowed in line 3.
<<<<<<< HEAD
;;;
"##";;;
"###======== Сответствие консольных команд Windows и Linux =======#";;;
"##";;;
"##";"При переходе с Windows на Linux и наоборот, для тех, кто знаком с командной строкой, может пригодиться небольшая справка по соответствию консольных команд этих операционных систем. Естественно, полного соответствия, за редким исключением, не бывает, и в приведенной таблице собраны команды, идентичные по результатам выполнения или функционально близкие.";;
"##";"Соответствие команд CMD Windows командам Linux";;
"##";"Описание";"Команда CMD Windows";"Команда Linux"
"##";"Вызов справочной системы";"HELP";"apropos, man, whatis"
"##";"Вызов командного интерпретатора (оболочки)";"CMD";"bash, csh, sh"
"##";"Очистка экрана";"CLS";"clear, reset"
"##";"Вывод сообщения на экран";"ECHO";"echo"
"##";"Пауза в работе";"PAUSE";"sleep"
"##";"Настройка параметров терминала";"MODE";"stty"
"##";"Установка значений переменных окружения (указание путей к каталогам)";"PATH, SET, SETx";"env, set"
"##";"Изменение системной даты";"DATE";"date"
"##";"Изменение системного времени";"TIME";"date"
"##";"Выход из командной строки";"EXIT";"exit"
"##";"#============== работа с файлами и каталогами ==============#";;
"##";"Отображение списка файлов и каталогов";"DIR";"dir, ls"
"##";"Создание каталога";"MKDIR";"mkdir"
"##";"Удаление каталога";"RMDIR";"rmdir"
"##";"Удаление файла";"DEL, ERASE";"rm"
"##";"Переход в другой каталог";"CD";"cd"
"##";"Копирование файлов или каталогов";"COPY, XCOPY";"cp"
"##";"Переименование файла";"REN, RENAME";"mv"
"##";"Перемещение файлов";"MOVE";"mv"
"##";"Поиск файла";"WHERE";"find, locate"
"##";"Вывод на экран содержимого файла";"TYPE, MORE";"cat, less, more"
"##";"Сравнение содержимого двух файлов";"COMP, FC";"cmp, diff, diff3, sdiff"
"##";"Сортировка строк в текстовом файле";"SORT";"sort"
"##";"Изменение атрибутов файла";"ATTRIB";"chmod"
"##";"Создание символьной ссылки на файл или каталог";"MKLINK";"ln"
"##";"Резервное копирование данных";"ROBOCOPY";"cpio, tar"
"##";"Вызов текстового редактора";"EDIT (нет в Windows Vista и старше)";"vi"
"##";"##============== Работа с томами и разделами ==============##";;
"##";"Создание разделов";"FDISK";"fdisk"
"##";"Управление разделами";"DISKPART";"parted, partx"
"##";"Форматирование диска, создание файловой системы";"DISKPART, FORMAT";"mformat, mkfs"
"##";"Проверка файловой системы";"CHKDSK";"fsck"
"##";"##============== Управление системой ============== ##";;
"##";"Отобразить список процессов";"TASKLIST, QUERY PROCESS";"ps"
"##";"Уничтожить процесс";"TASKKILL";"kill, killall"
"##";"Перезагрузить компьютер";"SHUTDOWN";"shutdown, reboot"
"##";"Выключить компьютер";"SHUTDOWN";"shutdown, halt"
"##";"Выполнить команду от имени другого пользователя";"RUNAS";"sudo"
"##";"Отобразить имя компьютера";"HOSTNAME";"hostname"
"##";"##============== Пользователи и группы.";;
"##";"Создать нового пользователя";"NET USER";"useradd"
"##";"Изменить параметры пользователя";"NET USER";"usermod"
"##";"Изменить пароль пользователя";"NET USER";"passwd"
"##";"Удалить пользователя";"NET USER";"userdel"
"##";"Создать новую группу пользователей";"NET GROUP";"groupadd"
"##";"Изменить параметры группы";"NET GROUP";"groupmod"
"##";"Удалить группу";"NET GROUP";"groupdel"
"##";"Отобразить список активных пользователей";"QUERY USER";"users"
"##";"# ============== Работа с сетью ============== #";;
"##";"Работа с таблицей соответствия IP и MAC адресов ARP";"arp";"arp"
"##";"Конфигурация протокола IP";"IPCONFIG, NETSH";"ifconfig, ip"
"##";"Работа с таблицей маршрутизации";"ROUTE";"route"
"##";"Опрос узла по протоколу ICMP";"PING";"ping"
"##";"Клиент Telnet";"TELNET";"telnet"
"##";"Работа с DNS-сервером в интерактивном режиме";"NSLOOKUP";"dig, nslookup"
"##";"Трассировка маршрута к удаленному узлу";"TRACERT";"traceroute"
"##";"Отобразить статистику сетевых соединений";"NETSTAT";"netstat"
"##";"Строчные и заглавные буквы для команд командной строки Windows воспринимаются одинаково, ECHO и echo - будет интерпретировано как одна и та же команда. При работе в командной строке Linux соблюдение регистра символов обязательно. ";;
"##";;;
"##";;;
"##";;;
=======
;;;
"##";;;
"###======== Сответствие консольных команд Windows и Linux =======#";;;
"##";;;
"##";"При переходе с Windows на Linux и наоборот, для тех, кто знаком с командной строкой, может пригодиться небольшая справка по соответствию консольных команд этих операционных систем. Естественно, полного соответствия, за редким исключением, не бывает, и в приведенной таблице собраны команды, идентичные по результатам выполнения или функционально близкие.";;
"##";"Соответствие команд CMD Windows командам Linux";;
"##";"Описание";"Команда CMD Windows";"Команда Linux"
"##";"Вызов справочной системы";"HELP";"apropos, man, whatis"
"##";"Вызов командного интерпретатора (оболочки)";"CMD";"bash, csh, sh"
"##";"Очистка экрана";"CLS";"clear, reset"
"##";"Вывод сообщения на экран";"ECHO";"echo"
"##";"Пауза в работе";"PAUSE";"sleep"
"##";"Настройка параметров терминала";"MODE";"stty"
"##";"Установка значений переменных окружения (указание путей к каталогам)";"PATH, SET, SETx";"env, set"
"##";"Изменение системной даты";"DATE";"date"
"##";"Изменение системного времени";"TIME";"date"
"##";"Выход из командной строки";"EXIT";"exit"
"##";"#============== работа с файлами и каталогами ==============#";;
"##";"Отображение списка файлов и каталогов";"DIR";"dir, ls"
"##";"Создание каталога";"MKDIR";"mkdir"
"##";"Удаление каталога";"RMDIR";"rmdir"
"##";"Удаление файла";"DEL, ERASE";"rm"
"##";"Переход в другой каталог";"CD";"cd"
"##";"Копирование файлов или каталогов";"COPY, XCOPY";"cp"
"##";"Переименование файла";"REN, RENAME";"mv"
"##";"Перемещение файлов";"MOVE";"mv"
"##";"Поиск файла";"WHERE";"find, locate"
"##";"Вывод на экран содержимого файла";"TYPE, MORE";"cat, less, more"
"##";"Сравнение содержимого двух файлов";"COMP, FC";"cmp, diff, diff3, sdiff"
"##";"Сортировка строк в текстовом файле";"SORT";"sort"
"##";"Изменение атрибутов файла";"ATTRIB";"chmod"
"##";"Создание символьной ссылки на файл или каталог";"MKLINK";"ln"
"##";"Резервное копирование данных";"ROBOCOPY";"cpio, tar"
"##";"Вызов текстового редактора";"EDIT (нет в Windows Vista и старше)";"vi"
"##";"##============== Работа с томами и разделами ==============##";;
"##";"Создание разделов";"FDISK";"fdisk"
"##";"Управление разделами";"DISKPART";"parted, partx"
"##";"Форматирование диска, создание файловой системы";"DISKPART, FORMAT";"mformat, mkfs"
"##";"Проверка файловой системы";"CHKDSK";"fsck"
"##";"##============== Управление системой ============== ##";;
"##";"Отобразить список процессов";"TASKLIST, QUERY PROCESS";"ps"
"##";"Уничтожить процесс";"TASKKILL";"kill, killall"
"##";"Перезагрузить компьютер";"SHUTDOWN";"shutdown, reboot"
"##";"Выключить компьютер";"SHUTDOWN";"shutdown, halt"
"##";"Выполнить команду от имени другого пользователя";"RUNAS";"sudo"
"##";"Отобразить имя компьютера";"HOSTNAME";"hostname"
"##";"##============== Пользователи и группы.";;
"##";"Создать нового пользователя";"NET USER";"useradd"
"##";"Изменить параметры пользователя";"NET USER";"usermod"
"##";"Изменить пароль пользователя";"NET USER";"passwd"
"##";"Удалить пользователя";"NET USER";"userdel"
"##";"Создать новую группу пользователей";"NET GROUP";"groupadd"
"##";"Изменить параметры группы";"NET GROUP";"groupmod"
"##";"Удалить группу";"NET GROUP";"groupdel"
"##";"Отобразить список активных пользователей";"QUERY USER";"users"
"##";"# ============== Работа с сетью ============== #";;
"##";"Работа с таблицей соответствия IP и MAC адресов ARP";"arp";"arp"
"##";"Конфигурация протокола IP";"IPCONFIG, NETSH";"ifconfig, ip"
"##";"Работа с таблицей маршрутизации";"ROUTE";"route"
"##";"Опрос узла по протоколу ICMP";"PING";"ping"
"##";"Клиент Telnet";"TELNET";"telnet"
"##";"Работа с DNS-сервером в интерактивном режиме";"NSLOOKUP";"dig, nslookup"
"##";"Трассировка маршрута к удаленному узлу";"TRACERT";"traceroute"
"##";"Отобразить статистику сетевых соединений";"NETSTAT";"netstat"
"##";"Строчные и заглавные буквы для команд командной строки Windows воспринимаются одинаково, ECHO и echo - будет интерпретировано как одна и та же команда. При работе в командной строке Linux соблюдение регистра символов обязательно. ";;
"##";;;
"##";;;
"##";;;
>>>>>>> c9f29274a070fc252ad363c8a06ab5bd2728eeef
PK�����N=R�l9�..�mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK�����N=R�Configurations2/floater/PK�������N=R'Configurations2/accelerator/current.xml�PK���PK�����N=R�Configurations2/images/Bitmaps/PK�����N=R�Configurations2/menubar/PK�����N=R�Configurations2/progressbar/PK�����N=R�Configurations2/popupmenu/PK�����N=R�Configurations2/toolbar/PK�����N=R�Configurations2/statusbar/PK�����N=R�Configurations2/toolpanel/PK�����N=R =���*�*�Thumbnails/thumbnail.png�PNG � IHDR����p���*�IDATx��]�r�:����< �`����������4t)ӹ %�ҺrCx�� <����讕�Ε\�}3�?�뺬%��v����g��X��}����A���GP�����,`q�%�X�A���GP�����,`q�%�X�A����R��]_��=ѫ����� �E�m#��r���gw�����������X ��ˇ�:�N������>{�5"s[)Y�>� v�0<��ӷ�⌶T,<������n�TKNn�4����� ��3}���$fk�x�������:����k��]>ԩп(-����"3 ����󓫧�m3�E���������+*��߸�p%kwla�̭�0�k���/���� ��."��Nqr���wWS��Z�����j�>S+�l���X�����ٕ���xT˶\�����?u�0�ڼ�ċ�Y�Z\J�XONN������3�r�+�Rz������+�v� �;��d�y�Z���� ��>��vuu�gb�m�� �Sx���"�c��O./W��;1x���奙�����3S��߳*I�>鱢�����tN1��<��������#��;0��;��c��������.~v2)�Go p��/�n�����j����:���.Ҕȫ�=m��:�o��,�P�m�dlݦm��3�z�&ٜ��Ш&�g]���m^HͿ�~,{����X�M���N �����'��������4Eo0��\�A0�2㡻���J(� ��W��Q��'Me�Dx�i��'Â�Fg��3#�jY��z�gw����H��Fw8ZK~�����0�x�lRwT3��X�"��x��k�X��*t�t/����Xӑ�MY��OW�?���Y��ū��o�'�����gE�(U+nj5�Fg���}�W�N�����ݝ��0�X����L�R]L�ر�.�����`ýb����c�l� �����B(oO��:������L��g���OWT����&X!�����Q#q����Z�ZB�4���}_%@����Rτ�m� y��d(�K������혣������H�]$t�Rw���yS<�������7���&����V��8����L1�1�_����ҭ�*�ٚ<�ZVݕ������M�d�Te� �H��;�/���n6�}nn� ��~v�匊.'1����e;���V�]]����/��KEE0�w�f���t���c��tO\Q�������u�uE���I��áj�o�C �cE�z�~yZ�v��7�� [<�)�����;{T�[�jѿ����#������a��#�C��L�W�U��Ƙ���g!��$FU� }���o@3���d���)-����}<�R6��²U*V���FʄA�ځT��3�W C�=S���.���c7��0�i��J���bǸ|(Y���r��n�/9.�X���z�0�b1����V�/�����V^�o}�v!EwË�4�"���ڙ�*����wT�[�������ᑽ�<�Z��'3y�+��l2Z��Ĩ�v�����e///��_��Wf�D�����7h<����$_^�l!��J��������w-Ľ;_�~�Ww���[H�����@���D���'��#~�\m��_/��p{rvuv �L��۠�!����r���k��+�G������t� <�Vy��i����r��7{Zq~Z���"��n{��Q���B�k�-�����~�D���2Kٿ)�����Rg��zݗ��)�n<������6;��~aƯ:�w� ���א��]�*�����d��#(Y���J��8���,��d��#(Y���J��8���,��d��#(Y���J��8���,��d��#(Y���J��8���,��d����]�U���$������_6�:�x��K���� _U���cl��ď�]=�U�dY� '�IG��.��H��2�Rp�����������Ӹ#�?�c�����Q:��;�/��v��7�Z`7�����S����H�����)�o����D����������4#@���:P3� �W!��m�U�n-��i�Uc��!β�������:��$���gh����v�6��܅5�{�Ό�Ovz��=��X�n�uB�-I�J�5�&S��C���Κ������ݺɓ�N�/�Ͳ�MEr��}30g�5���L�Æ�!�X-|��ڑ�U+��(K�f� ���bv�]���W���nC�:�� t���Gt��ђ�wڎ��񒶍�C)�?��m�$��*(��h-k���T_���z(������V�I��?��������~��C��պ-���}%�����2�`-��~hBzC�ÐB�F��}�y����}�4����7�x� ���vF�?Yϻ`;�yF\7�A��xfT�Q}`���Vsʼц�E_>����N�J��wk�f�z�Y�P{��W�Xu��Dݤ�Щ�Y�蘒!ʓ�y�����ڱ� ڣal:Z&B�YQAE�!�}��"+�����U�d�U�����]КUKh��_�GL��]R���nh }� �۞���A���e|R�����#�g�!�a�����JD�6혠������(��(������dD�=��^��{�IƝ��c���l�)�Ȇ�A����e�b����dF��NW��Ԃ�����b��3�J6�fXP �5 a�m�$I���&��8���B7��uu�g�*��������y�f�**��HF�N��3)$�.�7a�צ���^��<��(��Sv^_��� V�m��Gq-�`5;��@�*�-�F� j�껄��%������N����a�����ah &N_L-��������M�����[�э���;r�~�����nǘ *��Bc���=�nJ��WR#���J�,��ޘ=L���ac�� �=�����������'�Bg�IE���7Q6e��錨 Du���$�~ �[��pj3s5}�9)���L��%p9�孖�a䥤��c�N$���aY�xf�E�~~hG�D��ڶ����Y���z�L����R[8���r��B�^�_��˛���m� �(@�6�A���{v�dt�}������pp�� �؀w����y5>�N��k��sH� �8�ac����?����jF��[�f$�9Ӌc���P����hzs�����>6ta�����MFOy2S�0u+>[�e��I�/%3q�D<#��nڦ�ztC��Qh�����L����1�hC���$]���ld����z��%���F�,ˤ����2V>�cO�F�n<��#�Q >ӋkvrG�����\D�����l��&=�b���,s��N����2�A��~_��L�e&-Uƞ��H��f�z�Gl�K_�5Z�),7, ��L�`�N�ܱ���8�%l�_۲_���ya��4��ME�GjZs�z]��!�����|��v�l6���� r����Ð�%2���*��v���=�'uC��H! F�׈����4��Z1뺦��V�c��73����E�P��I�i��������IJT��-7�A��)#˙�Ѷ䡇�5�v���e�5k��:90wd�j{�M��хA>�q�m`�������\�X�dƤ��%�$�͆J�6��&����c��&V"c3����SB*n��̡+��w��ɶ���`���OqAifg�'��^<>e��2�0F5o���La3)#O%(��*�������m�i���I ��q�=�(ϖE9��6��7�����Je)T�1�K����Sb�;L�-^=t7栒{8,�=6�~b�qΨ h�T�'ʆfY°�M[��si����[���h��3�m^�������S�Y+-�%�޵ة�a�QM�Ɠ��T�g�DB��;&�~�@�Y"��zu��]���$�}��gˠH�d�(��Pb�ר�����wJ�ɴ��=۔�6'������R��fj��g�t��.��]9�0<�i=����3��S\�����D�%<��ǧ"DzŪ���ȇ}���J�����La���'��k�*� �T��se�����l���N�;��ϖѵ3gK*z(�bL�����l���p�ۭGo=*������w����E�-���N{��d�m�9��}�/�'����`� X�A���GP���!��3/@�����zy�Y@������h� ��������x���'�D��|U\�ρ8����l���X��6�]|����F����mڔ��k��c܅�Ő������<��C��DxS<��Mj��@_D�� nP�)��M`J6t:�t������v��O�m�m��"�nj�JL���é@��nD:{�����)P!�����_���C�j����ߓ ���:���эQ���ۥ2pc h���S��㼍=����B��.b�a%��]�D�s������n:��W�C�ؤ��n��l��d�6|1 ��L�Rq6������'�� ��A�Fς ���T�j���ӓg��f�9��|<�pC"�G��x����n�K���� ������U����A�d:8G�I;:���8��!:>�ی�e��B��I��� ��Ah�[퉇��)�!��@^�����(�V�}� V��T�>x�]��&��@�|:�rR�X��~ ���,��d���[�鯔�|�\�c�������33������R��E."������#�l�������t��3�d�۾��@y���p�H6�}y��7�p��������Yt��7����s%KXWٷ�g�~��w����*g�&��5=��Ż���>3��92�O��3qJ�@V� �`�������ʸ�V�e�o@���� �}�[�89��Y'���l��{ح�zŞ�ps��uV��3@[���X��E>�������Y:�<��p=%�1 ���L���#(Y���J��8���,��d���[�e�����҃�C���h0%S�.SX�۸�-��ʥ��J&�$��9s��;��H�,���B��8!�p��D?����$�v)��w��Nt+����j�1�2�N�SU��W{�'Q�E$0��,��G��B6�Ҍ����������B*���� ��!1ѭ"��plp�J��!"�>NU)ۛ�J/*&��=�8[�5!�>#��l������Ly%4�*IXpU��jd���J+Ƙq'�i q��iTz� LV�.*Q$�l5,��kB�}8����+��- �d�U�~ (F�J}�ƎO]������֍/*��W�������C�}8����+`a,a���0`��K(Y���`!�c��GP�����,`q�%�X�����%��+��g�tr��߅�s������9�@ɤ��ɽ�&��揲�| ;��Ag�T�D�깜N��鶠�DI��"����(w�}J>oo"&��(�ǖ���Y��lHV�!DY��ޅ7��I"����;l}�蓮���ow������s:U����WgJ��H�����J�u�����]� w��)��=�%���H�c����t��!��'���O"�C�M������Қe�2�[�+��4&�)t��d7��DIB�C��(���Q�2��|��DLD�H�xL]^P����>�3���7`�? %�2��$;�����q������LN���2I��B�M \�(���Ml�6I��N����]~<�wd������s��,��*���>�O�������"��@j#U /'����=T�� K�M�n���HQ&����|#�>���D{��P�M���H�������_�����ds�껩��+.hb�����#V�����d��#(Y������B�ŀ� "-��D���� ^�Q�y�P�/�~�]��������\�!0%3Y�"�[fx��>j���%��y���$9��3Q2ʢI1t���2�a� K�pL�ۥq�Y��t;�6q8��D�g)Q�����9��B��C��.�d���$�s E��&�H���e%��1�������j�5�Ù\i�D( �8���02Ť�����$�s a�),eG�����B���0>j��3+�R=!��{U$4E���/{^BF��rY��c�ט0��ܟ��(Yp�����؀���,`q�%�X�_���~;���/y+yc#��Id}���y�vT����i�D�yi�S���������/���J�/6b���t4Bq�ٱ~�~3�#���f�5��"9�`���� �yiͲ�m�i�s�� �e�,�Z.+�}��/x+yc#��v4Ҍ�}½*3�~�����vh�,�V�bbP^:�Ӱ��r]e��2t�y-���58���/6��҇5��P�CS&��������6G�C�g�qX2�H S��'�dgȯ�e�FEgA�~%���5x�[���q�c����� 7�!�������:��x����+�8,�;�Ҳ����!Mg�������0a|��Ѣ�ށ��)8b;Y�~ �X��~ ���,��d����J �V�M��N���J�7=�@n8���}l����ϡqfc�̈́��8>x��Q���M�u�b�E"�����G�S��᱊(���q����WƓ�ue�y���%3tM�úm���g��s�[>EV4�Z�q��8�d��r~��'��`� X�A���GP�����,`qh�2ˊ�%�z�wɓWŃ��* �As���d.����Or+���b��� q������Yn�/y���tz���7���r��Z�����œ��o��Bm��ж��{ ��̠�nU�e*�Յ�d�Sz��X,�V6 ��V�,��Qѝ�$y�Y�����j�9��0x-_Z1�Vr(���E�<��Cަ�C�Y�BDȷA)Y"�C����%(_�B��Et����h9��ʨ����a����w����� ��[z��n��oZ���y�V�����g.I���!��!�����#��MtESA����96(��7�bo�gY��T�T���˛�@P�/Dn�ø=����6a�>����r�S^w7������5Ȭ[t�!"��p���w�������W���Ψ5 �8�ʦ�TQ�ſi���Msl���i��l���t�:��Z���κe�%��x� �����5����>�oR�Og'���W� ���cl���J��8���,�E+ 6idv��} ���W|��=ُ���J)��͘��$��8�0�SJg>y����!m&��R=���԰�p�4����U� �Τ\. �}����&��z}pI���1 ����+X���w��1Y�B`j��¶��Ȭ��2��ݚY5c�9��I �SnM(��0QD9�a�������i3��yۚD����h+IOIc(&��Y�3H�fY���� �X8A'��T$'���+{���ŀ� YGY� ���s���������#��������q�eR���y�J�Ƶ4j�FS � ���z+ҡ�H�jʯ���;YZ&kF��ȉ�MJ ��0��ؔ����T P9a�+N+ >҆�H�)�0�4�{��?�t]� ���8��*�#�AA'y��>c �s��v�� S�}�p���>��ya���������݄���`&��j�qt0�~�SoŶr�n��W@(��+�K��8W�,�� ��0����S��]��@����QG��aJ�����z7`���{�=�\�?�#"�� R��~���Ⱥ�A'�2T���1f��=IʘfIoB��7��Y~G���4{Kp�8aiE�����fJ�ѱ�1�o�y�J�Ʊ�"�������nA�\���+�e��P�.A�D�0�6�dQ:&b�lRx�����F���i���{�����Z\���E�)V*�UvG�:�d$��h(����{\�������R��v��#Y�? ��P��M�}z�(�SF����������e�k������0`��¼��� Ι-\R@ l�G��Ʒg�I��7��3!1 a�����)���l�M�En������L~�X�/C�Ţ��%����v�c�O��h �d��e������,ܛ�Z�'14aE��^��X�Ͱ� �%������S�Q�y��l�(`y(o����gDR@ۛ����2�i�e�yn���cGQD�� M�a��;���͐Z6��!�(�T�Y�^�����m�B��� E��4ssBbX�����X�� ���}�x��P~1L���-�(`y�������|��O��~����,��d��#(Y���J��8��� ��8 �Ҧ*Mw�q��z���K��pD��8�©N���Ď��Cnf.��|7������M���Q/C��^����K��q$�%w��n���Q�y����\�ލ#�.��}۱+-�j �����K�{��L�!��7�/(Y������J����J��8���,�M+�BX���)���_�M+���%�^�q�υ��A 5�c��K��n�qYC������|�<�ԔG�C��O X�r��o7���b�Lx��o ��|�RL�� �(~˙��=b{��\�/2`��ϓ��>p�А��D�@�k��hiH%[��2g����ix���a����1���:�����W�m�P@V�,���E�4�����CL�H4&C��}��� �V�wd���[%I���� �4��9CQ�L8E��J��s�Zd�/��i���������Dc"D`�X^t��B�J��Y���=�����^g�ϙ厦���K��O�u3g�b8�Ve��xcz������@�1kH�/���Ä�������<���Q������p�J����,`q�%�X�B�X����*f�2t�̓{��X5 ���8���V�]���x������B�Ɓ�z����CόV@R��ǃ>�������ߦ}� �i��@�2��1Q���&I��m�e)X���8f��cUC6�PU�3@�R#򑊌'���kf��[f��CF����A�c{ Y����&m��2T�����~ד�|AE��tM��e��̜n�5�����|H.�p���}rq ��pqA�ͨ��Y,��iix¬ӆ9D�F��I�9����Z��6�}y�����X�q��� .�>�'��&�]m���a��8Uuy��yO��ʛg��^�7��x_;z�ӛt:k��M_>f� �^5����l��u]���T��A]���B�wl�D��2�v�]'Mߙ���������_k����u���h�UC�J������G vT%Nps��kS .oW�yHN���;�f��e�F#�l<+�q��7H5�'�r����\�f�}���|��c�0��̠!<���� Mx�}�:���,ZQ���յݜm�>���n?0�8��_��g�K��\���ݬ��3�6� �4��v�n�tw���d��}�� l�Y�n��{����Nt�a��[��v����[w�cX����E�_wf<���������^������7����|#�Q����5�_��D�#r�J�g��J���(�"}|���m<#v�7ٮ���u!ʈ�����f���3}~����'��Gu/��P��N$����������e�,�P���ӹ���7"�0|�!Y�0z�̀w (��QZ�:�^���J��8���,��d��C*�wXb�|fX��9;3����ƪj2���~M?�%������]1��MJH��v��,.,�E�%�# q3Ӱu�����Ϲ��Ԝ���X}����,�(����jJ��6�'�=���O��eJ6�%J�� l7mV���@7Եp��~HӸZ�E�s��9�1_#���͐��=ѡ���r0NAد�@p<�䆼�����ws�����I]�1v�2~M����FLY�O,P��Z��ˋI{7ѯ�$��c����Z���s����ۥ�2��Sf��v���ɇُ��nZ(Q@�B��E)U� /�� ��Q�� � �.8���(����F��rsb ����sANP���nי��*P^�v�J��&z5��F{�c��,J١�����0%K�.�cF��>��cY�#� *�u;�<��S@�P�]+_���H�]��]զ��b�#�$��t(8�~d�/P^&=���9���\lI����Qx�����������ڪ�,�w���F��k�������U5R����S�VbhӖ=�������J� �D�rV������{�� ;�9�F��;�Z�#nغ���͕� ��*�B�����QPI��D#��4SC���H����n�� ߙm� �gw�G�V���v�b�ف ��x���`G�H���? ����8���,��d��#(Y�ⰸKBH����Y����.��fXECݹɬ^IJN�Ʒ��!��o��]B���)�-�u�D���I�2 �8OJ����M���2�7��.G'����(C���Ş��s�$�M5����"�X���.��XfT�PTD�9q$2��n��9'0�,)i�?D5���3�����B��@q�2��]aRþE"r"�6;������RrJ5���K�b����1a,�Z1����d��#(Y���J��8���,�n��q��������� ��'%ݺ��"���&R�$�ք��2K�i%0���\�o�f��!�du�[3Ch� R��I3?�*�X���,m ɳ����X�A�r�u����,�3�;YZ&k���?<$�ˈ�X�)���,��J�X���8���/ ��qB(��+�K�2��g)�I3?@����>w��eZI.G �0���j�Y:��%��!#��� ,��)<�k5X��J�����pV�����Ԅ�H��OF���,��d��#(Y���J��8���B�?��i%�7�@ ��QbYZ�����}t�X�VzKD��dB4����������.�Glj�i���@T�������B�?���d!�G0��,��d��#(Y�������z�ᅃIEND�B`�PK�������N=R�content.xml��kO�X��� +�V�RBx�eKG,��*���y|4�MbՏ�v��OP�v��H+�*�tfg�@JK��п���=�\۱��0���R�b�{��}�}��t[פ-f٪i�&�FF��3�������F�^�V�ӻ��c����f �Rՙ���p�[�҆=���&��1cʶj������G�1+��J���g�-��v�j���p��ö����6TVތ�2��K�,���0��Q�ŋf��۶�*�@u�";j��ۚj<�M���2�N�j���Ĉi��c�o�N�[�aŇ�T-�� J�i ���c#ci�Vg���?� �dT�MfE&����\�X����. f���eB�U�,][��dVʲ�Y��8,*���2Q���e�܃���+�>V�[re�Q�B����K�D�&���7M�G��pe't�GG'��w�v&x�R�f���3��YS|��z7���X� Rl�E�W"$�ݣ�x�����BϪ�\Y�)e��-`���)հ��hQ�B&���T�b��r|����_�ָ�[�ѵަ��z�%�P� �L�������TV����g���4����2�������ۮ0KŞ�� BJ��h �fe&P�ˢ[2����w='ƅ�N�����REYa��S4���n������x�&�-����n겑��bx���=�M�U�������Ä����S%f@�@�-���DEu���-�R�L�Q��0��B���M�5ն/�����~h;L�H��UE-�RN6li�P!za=���6�k.�㊪X�m���+y��=�k���[^.�h�:P�_\��t/Ms��U��rT%E��*H�!\�s�o�ŒL�8m��� �d�a��F�Y� Y4g6-&?Hm20�P!6������:��#�G������s�n�p����=��n��p�����f��0�������nV/i��Z�b�$������L-�����LN!��F�j��YqT]�R�ҎUe���C�υ��ћ���!���{z�ֹ�.ʚ���=����C�21-��S�H�qq��������#w7)�C����JU��K����(W5��W���DA�+��Е�6�?�F)�C�3�Ь��هef�|-����"[����g"��:�� ����%#e�U��HEu۫�F9L��M�Z�m�%K����A�R�P���I�T���j�4VDa��E�^��j ���A�I.q��?.�<��:�F}��0���(��WkZa飂f��T��8�^��S��j�� 7�0L������.��^����zl��{��F� ����J���j8�pl}#P�k��qt���.��LH�q��U��,�6��W]�5���V�Q�+ �O5�f���h+ T�Z� }��d[� �2��G�����V�DT�^̯��#�v�yD����?���´�ƶ{��-��H�������X���*�+e��Q��YLSY��<� �"�aW+Z�ҏ����_�����2:����������<�� ����0���øfhw�vghw�,��#�0�v�-���+0�w-�c�M�p�54H�� ��&� �� c��I� �ts0M��� ����\�����}�i�����U,&��2c��;|ґ>� H�/9|=�p��-��|���KmY�P]���.�i�;��m��j!�6���X��%�7!�>�ط�i��.��b����>�y�b���Nq�� ��I���ڣ57޻�0Q�[+6e� ��a���))%�#hWd�@�&���[�1����m��8m>j�7�������Q�@j�m�6N���y�|��=n~���k��'�W���kl�q$-�����r�*�t��y�VP�Y!���������M����o'_��M�J�'�vyR��=o��4ރ����oA�^��5w[�tҨs�B��_���t��5)��q��� ���[��Tj��$ (���U���x#�tc%�� �|�߯Q���D��9��'���?��Q��?4���.��AM���БS���C��?GP��O|�OO]�ԛ��&P����GT�A�݈�����m����I£qL�}����I�S]B�CG�BC�$�����b��}�`/�#���G��� :��u�1V��S��G�l�����6���P'��h����KB��t��I�o��$�#]����0�^cg��`���Ka��&I����x~e���A�CΑ._'�O�E���~�qEݪs��@��i�Y��A�\��Q�/����:��؜C��~��r=J�67�_��ѰZ�,��jK�4�i'%��'�Z��C�����#4@� �zB�u��|�z��:��'<��O���O�7Q�����Ԧl�����v9�<������c��O��P�Ѩ���rNTS��d+)��^'����b�S �)^�p��Vhw�b�(�f�����bJٌ'瞃qܣ����� �1H�� '��ks�����l��J<���`�7�}�X�ıw�����{�w��q�$�`�d����q�Ɠ���S�S��&�(�����)�䫟<�dGs�T��oW?�_P�*/���x~�bX��-FG|�}L��ȉ�`gm.���r�<}�7d���6� 䉫��7p����݄F%�@��a���(�syaZ]��vmYGC���^��"k~ie��(!,�a����Yga��|���f=��A��gf�.+1z��l�������8����~��X �*ʝw��H"q��hW�ܼ�ti���#���u�"�wg(�-�R�����T��[Z�f�U��k1ͺ���!���x��!��6̸/�c���Y<������W������@~Y���W������夔Y������x��yp��M�����K>D�i��|������O�=���G����u�GmW�T_,fօ1�������J�SX�,l۔+��}Ez�� ���P8G�_�e��JV�[���Uf���ӊ)g�w�,����8 ���{��� ��|ve-)ݛ��Z��� j��?'����1e1�P�5�;��`+�,�S��ѻ�]��ˣ=.����eׅ%�m�������h���[��)Z���n}�������Sϲn�t�؞���<`辷�ߛ����{��A��u9�}�).C���z_Tk��O���{�����?�u� �W h����d��Y�9�LB���N����}�Ko� r��X����R^���nM��wV|�ڎ��^|5�8�����V�l�������}�N�����s���������d�V������r�\]�����Lu"�.y{^�3L��KA���6'n Q�-P����1ݿ�?r\�(������*�B~�v��?����'+�m�b�HoC��Ə�s�����1}7����c4[��^�����"���zvC�!l%ˬV��� ��כ��u�mv5��כa�������+�� _���+��|�B�������Y״K�� ������A��������]�▖�0K�27�z����Ӥ�4�~.��/Y��O�b������� ���!�{�:�*��ߣ�?���ض$̡,��gW�-}������E5����(����Ɣ���2Z������ri��1��֦A\"��3�K���WW���8e{�]�Ю�0�[�_���kK�� ˮ��x2��]�@�6Hy��}��x����e0��Zs������T.��R����K�O�*��q�a����*��Pa��Ws���}qC��zC��L�A5�>����������6OX��]�Ҷ� "��u��W��=�>7���v۱d���Ov������E�G��{�0 X����tJۖ��]�"󢹼�5�`�mG�d����WХ<|�w��#�/��=�����t��>fX��Y�K{>pXi�B���d׽���C�Wz�+�N]a�wo��eTx�>����K)��+����඄S�����SB�N��Ȍ�n�r�Q����Ă��K��������[��O����[���-�@�#�������zB�|J� >�D�zG�?)%r����n��jllt��Ԙ���Ы~��> U��GM�=�]s"���sRĽ����ĵ�wqk�JV�!����U0��� �"���PK��|`������PK�������N=R settings.xml�Y�s�8������;1��^<����%״����M��h"k=��C���?�c'�m�O ����~�vW���������GV��gu���Q��Y����և����ZQ�����������[dG���I�GV(��DR�p�t��`|��9��$��'O��Ǒ�Q*pl;������������~��|E�UE���E!�OA�T�Dؠ�;���V'S��4�k�����������K���m:��X���E:[ �O�YE��2��~����B��CI�N��[ �c�������x }���@������/�A���� b����)���{�����������n!A���.1Ϡ��^ߖyk�;+#���% �����B�E���B����1��aa�5M�^]��5���"������!��-'�[5��^.!������+��%�����@x1�^��o0��\���N@\�s�KD��[��a�������e�%���_Q���K�|���r�:E�"��0N��`x:����#��ՀU��Ԫ�>�at ��3��! �h�1�~#��J�]0��Kdr���؊�9'��gD*�;���J�od69��0���]�%kv��@y��V�!�<\ztKe��-��+_7tR������w7�9��5��f7�M�����_�j }� �;�W��&�i��=����S�]`&r�3�>��𻐻*$��C�L*���P,����n� �� ��,~����<�H��L�5GY c�%����S����y��P���_��[Mߵ�>q���M��������� >�E���I�pJ��2�J�B���d�q�xZ�+��t��3��&]̍�����u���w��m�șlS��P�����䴔�T�_����i��}��\��cJ4����5�澮O����8�[�q�<�m���ߖD���r�Kw���"�f����|�o���l�!���O�J��J{-s5�2<���T���U�֤tذ�}��˾َ��PK��h��l ���PK�������N=R styles.xml�Y�n�6���S� P��dI���n�`�0t@��Y{�KF�d��(����j��ho����)�֯�6ۺ���������C���.���sAX�q�E�:��YB�l�{��w�^F�\�4%1^',�r\HO�{����Xד���Ś!Aĺ@9�k��Y��#�n��z�zD+�+��mi���\a��Ȣ��+kp[:�h?WXa��m������K����D��X�QR�߸[)˵������t�x懫��׳�plqeũF%��)V� ?\����X�����M���[�g��I4�jɱ�lW��settings.xmlPK��������N=R���D���� �Bstyles.xmlPK��������N=R��h����� �Hmanifest.rdfPK������N=R���݇�����Jmeta.xmlPK��������N=RIH,�&�E���MMETA-INF/manifest.xmlPK����p��O
###======= Сответствие консольных команд Windows и Linux =======#
## При переходе с Windows на Linux и наоборот, для тех, кто знаком с командной строкой,
## может пригодиться небольшая справка по соответствию консольных команд этих операционных систем.
## Естественно, полного соответствия, за редким исключением, не бывает, и в приведенной
## таблице собраны команды, идентичные по результатам выполнения или функционально близкие.
## Соответствие команд CMD Windows командам Linux
##############################################################################################################################
## -------------- Описание ----------------- | --- Команда CMD Windows ----- | --- Команда Linux -----------------
## ----------------------------------------- | ----------------------------- | -----------------------------------
## Вызов справочной системы | HELP | apropos, man, whatis
## Вызов комма. интерпретатора(оболочки) | CMD | bash, csh, sh
## Очистка экрана | CLS | clear, reset
## Вывод сообщения на экран | ECHO | echo
## Пауза в работе | PAUSE | sleep
## Настройка параметров терминала | MODE | stty
## Установка знач.перем.окр.(катал.) | PATH, SET, SETx | env, set
## Изменение системной даты | DATE | date
## Изменение системного времени | TIME | date
## Выход из командной строки | EXIT | exit
## ******************************************* работа с файлами и каталогами ******************************************* ##
## Отображение списка файлов и катаю | DIR | dir, ls
## Создание каталога | MKDIR | mkdir
## Удаление каталога | RMDIR | rmdir
## Удаление файла | DEL, ERASE | rm
## Переход в другой каталог | CD | cd
## Копирование файлов или кат. | COPY, XCOPY | cp
## Переименование файла | REN, RENAME | mv
## Перемещение файлов | MOVE | mv
## Поиск файла | WHERE | find, locate
## Вывод на экран содержимого файла | TYPE, MORE | cat, less, more
## Сравнение содержимого двух файлов | COMP, FC | cmp, diff, diff3, sdiff
## Сортировка строк в текстовом файле | SORT | sort
## Изменение атрибутов файла | ATTRIB | chmod
## Созд. символ.ссылки | MKLINK | ln
## Резервное копирование данных | ROBOCOPY | cpio, tar
## Вызов текстового редактора | EDIT (нет Vista) | vi
## ******************************************* Работа с томами и разделами ******************************************* ##
## Создание разделов | FDISK | fdisk
## Управление разделами | DISKPART | parted, partx
## Формат.диска, создание файл.системы | DISKPART, FORMAT | mformat, mkfs
## Проверка файловой системы | CHKDSK | fsck
## ******************************************* Управление системой ******************************************* ##
## Отобразить список процессов | TASKLIST, QUERY PROCESS | ps
## Уничтожить процесс | TASKKILL | kill, killall
## Перезагрузить компьютер | SHUTDOWN | shutdown, reboot
## Выключить компьютер | SHUTDOWN | shutdown, halt
## Вып.ком.от им.другого польз. | RUNAS | sudo
## Отобразить имя компьютера | HOSTNAME | hostname
## ******************************************* Пользователи и группы ******************************************* ##
## Создать нового пользователя | NET USER | useradd
## Изменить параметры пользователя | NET USER | usermod
## Изменить пароль пользователя | NET USER | passwd
## Удалить пользователя | NET USER | userdel
## Создать новую группу пользователей | NET GROUP | groupadd
## Изменить параметры группы | NET GROUP | groupmod
## Удалить группу | NET GROUP | groupdel
## Отобразить список актив.польз. | QUERY USER | users
## ******************************************* Работа с сетью ******************************************* ##
## Работа с табл.соотв. IP и MAC адр.ARP | arp | arp
## Конфигурация протокола IP | IPCONFIG, NETSH | ifconfig, ip
## Работа с таблицей маршрутизации | ROUTE | route
## Опрос узла по протоколу ICMP | PING | ping
## Клиент Telnet | TELNET | telnet
## Работа с DNS-серв. в интерак.реж. | NSLOOKUP | dig, nslookup
## Трассировка марш. к уд.узлу | TRACERT | traceroute
## Отобразить стат. сет.соед. | NETSTAT | netstat
## Строчные и заглавные буквы для команд командной строки Windows воспринимаются
## одинаково, ECHO и echo - будет интерпретировано как одна и та же команда.
## При работе в командной строке Linux соблюдение регистра символов обязательно.
��ࡱ�;�� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������������������������������������������������������������� l ������\ Calc B��=@ 8�@�"�1����Arial1����Arial1����Arial1����Arial1����Arial1@���Arial1@���Times New Roman1����Times New Roman1����Times New Roman
�GENERAL���� � ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� �� � �+�� �� �)�� �� �,�� �� �*�� �� � �� �� ��!� ��!� ��)� ��!� ��)� � � � �� � ��!� ��� ������������������� ISheet1� �#Sheet2� +%Sheet3
l �  d����MbP?_�%����*+�"!&C&"Times New Roman,???????"&12&A'&&C&"Times New Roman,???????"&12Page &P��&333333�?'333333�?(�-؂-��?)�-؂-��?�" d�,,333333�?333333�?U } _} �B} �} �} � 
D��u@��@9@9@9@9@ 9@
9@ 9@ 9@ 9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@9@�

##�
JB###======== ??????????? ?????????? ?????? Windows ? Linux =======#
##
##�??? ???????? ? Windows ?? Linux ? ????????, ??? ???, ??? ?????? ? ????????? ???????, ????? ??????????? ????????? ??????? ?? ???????????? ?????????? ?????? ???? ???????????? ??????. ???????????, ??????? ????????????, ?? ?????? ???????????, ?? ??????, ? ? ?
##6.???????????? ?????? CMD Windows ???????? Linux
##??????????????? CMD Windows ??????? Linux
## ????? ?????????? ??????? HELPapropos, man, whatis
##2*????? ?????????? ?????????????? (????????) CMD bash, csh, sh
## ??????? ?????? CLS  clear, reset
##
????? ????????? ?? ?????
ECHO
echo
## ????? ? ?????? PAUSE sleep
##& ????????? ?????????? ????????? MODE stty
##L D????????? ???????? ?????????? ????????? (???????? ????? ? ?????????) PATH, SET, SETx env, set
## ????????? ????????? ???? DATE date
##$????????? ?????????? ??????? TIME date
##!????? ?? ????????? ?????? EXIT exit
##E=#============== ?????? ? ??????? ? ?????????? ==============#�

##-%??????????? ?????? ?????? ? ????????? DIRdir, ls
##???????? ???????? MKDIR mkdir
##???????? ???????? RMDIR rmdir
##???????? ?????
DEL, ERASE
rm
## ??????? ? ?????? ???????
CD
cd
##( ??????????? ?????? ??? ????????? COPY, XCOPY
cp
##?????????????? ????? REN, RENAME
mv
##??????????? ?????? MOVE
mv
## ????? ????? WHERE find, locate
##( ????? ?? ????? ??????????? ?????
TYPE, MOREcat, less, more
##)!????????? ??????????? ???? ??????COMP, FCcmp, diff, diff3, sdiff
##*"?????????? ????? ? ????????? ????? SORT sort
##!????????? ????????? ?????ATTRIB chmod
##6.???????? ?????????? ?????? ?? ???? ??? ???????MKLINK
ln 9@!9@"9@#9@$9@%9@&9@'9@(9@)9@*9@+9@,9@-9@.9@/9@09@19@29@39@49@59@69@79@89@99@:9@;9@<9@=9@>9@?�
##$ ????????? ??????????? ?????? ROBOCOPY  cpio, tar
!##"!????? ?????????? ?????????+!#EDIT (??? ? Windows Vista ? ??????)
!vi
"##F"># ============== ?????? ? ?????? ? ????????? ============== #�
"
####???????? ???????? #FDISK #fdisk
$##$?????????? ?????????$DISKPART$ parted, partx
%##7%/?????????????? ?????, ???????? ???????? ???????%DISKPART, FORMAT% mformat, mkfs
&##!&???????? ???????? ???????&CHKDSK &fsck
'##>'6##============== ?????????? ???????? ============== #�
'
(###(?????????? ?????? ?????????(TASKLIST, QUERY PROCESS
(ps
)##)?????????? ???????)TASKKILL) kill, killall
*##*????????????? ?????????*SHUTDOWN*shutdown, reboot
+##+????????? ?????????+SHUTDOWN+shutdown, halt
,##7,/????????? ??????? ?? ????? ??????? ???????????? ,RUNAS ,sudo
-##!-?????????? ??? ??????????-HOSTNAME-hostname
.##@.8##============== ???????????? ? ?????? ============== #�
.
/###/??????? ?????? ????????????/NET USER/useradd
0##'0???????? ????????? ????????????0NET USER0usermod
1##$1???????? ?????? ????????????1NET USER1passwd
2##2??????? ????????????2NET USER2userdel
3##*3"??????? ????? ?????? ?????????????3 NET GROUP3groupadd
4##!4???????? ????????? ??????4 NET GROUP4groupmod
5##5??????? ??????5 NET GROUP5groupdel
6##06(?????????? ?????? ???????? ?????????????6
QUERY USER 6users 7## 870# ============== ?????? ? ????? ============== #�
7
8##;83?????? ? ???????? ???????????? IP ? MAC ??????? ARP 8arp 8arp
9##!9???????????? ????????? IP9IPCONFIG, NETSH9 ifconfig, ip
:##':?????? ? ???????? ????????????? :ROUTE :route
;##$;????? ???? ?? ????????? ICMP ;PING ;ping
<##< ?????? Telnet<TELNET<telnet
=##4=,?????? ? DNS-???????? ? ????????????? ??????=NSLOOKUP= dig, nslookup
>##.>&??????????? ???????? ? ?????????? ????>TRACERT>
traceroute
?##0?(?????????? ?????????? ??????? ???????????NETSTAT?netstat@�@A�B�C�
@##�@�???????? ? ????????? ????? ??? ?????? ????????? ?????? Windows ?????????????? ?????????, ECHO ? echo - ????? ???????????????? ??? ???? ? ?? ?? ???????. ??? ?????? ? ????????? ?????? Linux ?????????? ???????? ???????? ???????????. @
A##
B##
C##>
�����?
l �  d����MbP?_�%����*+�"!&C&"Times New Roman,???????"&12&A'&&C&"Times New Roman,???????"&12Page &P��&333333�?'333333�?(�-؂-��?)�-؂-��?�" d,,333333�?333333�?U } � 
>
����
l �  d����MbP?_�%����*+�"!&C&"Times New Roman,???????"&12&A'&&C&"Times New Roman,???????"&12Page &P��&333333�?'333333�?(�-؂-��?)�-؂-��?�" d,,333333�?333333�?U } � 
>
����
�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Oh��+'��0�HP\ h
t � � ���Y zY z2@�x@�@@�/�#��@�(�х����
�����FMicrosoft Excel 5.0-TabelleBiff5����՜.��+,��D��՜.��+,��\����Root Entry���������F@Book
�����&Ole
������������SummaryInformation(�����CompObj������������JDocumentSummaryInformation8������������t��������������������������������
var amount = $1;
var months = $2;
var rate = $3
var r = rate/43.4782609;
var final_res = 0;
if( rate <= 1 ) final_res = (amount * months * 0.023 ) + amount;
if( amount != 0 && rate != 0) final_res = (( Math.pow( 1+r , months ) * r ) / ( Math.pow( 1+r , months ) - 1 )) * amount;
return final_res;
X
Используешь Telegram? Подпишись на канал автора → посмотреть
Home » Zabbix » Мониторинг времени делегирования домена в zabbix
Мониторинг времени делегирования домена в zabbix
Zerox Обновлено: 14.09.2020 Zabbix 41 комментарий 10,953 Просмотры
Статья исследование на тему проверки и мониторинга данных из whois сервисов. Задача мониторинга времени делегирования домена на деле оказалась не такой простой, как может показаться. Ниже я подробно расскажу обо всех нюансах мониторинга времени оплаты домена с помощью zabbix.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом "Administrator Linux. Professional" в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.
Содержание:
1 Введение
2 Подготовка к мониторингу за доменами
3 Парсинг времени делегирования домена через ruby
4 Linux утилиты whois и jwhois
5 Модуль python-whois для мониторинга оплаты доменов
6 Whois клиент для Node.js
7 Prometheus domain_exporter
8 Скрипт auto discovery доменов для zabbix
9 Настройка zabbix агента
10 Создание шаблона для наблюдения за доменами
11 Заключение
Введение
Данная статья была изначально написана пару лет назад. В целом, она отвечала на вопрос по мониторингу за делегированием доменов, но со временем к ней стало появляться все больше вопросов. В частности, появлялись новые доменные зоны, информацию по которым не получалось достать выбранным методом. К слову, в первоначальной версии статьи использовалась только одна проверка с помощью ruby.
Чем больше доменов я ставил на мониторинг, тем чаще сталкивался с тем, что по каким-то зонам не мог получить инфу. Из свежих примеров - .pro, .fm, .io. Наверняка были и другие, но я сталкивался с проблемами именно в этих зонах. Решил разобраться с этим вопросом поподробнее.
К моему удивлению, оказалось, что простого, понятного и надежного решения по получению информации о времени делегирования домена просто не существует. Очень подробно разобрана эта тема в статье на хабре. Прочитав и осознав все, что в ней написано, я понял, что реализовать простую потребность в мониторинге доменов малой кровью не получится.
Я стал разбираться, копать тему. Погрузился в нее плотно и потратил кучу времени на казалось бы простецкую задачу. Но увы, универсального и надежного решения так и не получил. Полученный опыт хочу зафиксировать и поделиться им с вами. Может кто-то пойдет дальше и придумает что-то более надежное.
Ниже я опишу несколько консольных способов получения информации о времени оплаты домена для передачи этой информации в zabbix:
Ruby gem Whois.
Консольная утилита linux - whois, jwhois.
Питоновский модуль - python-whois.
Whois client для node.js.
Первый способ был описан давно, поэтому он по содержанию немного выбивается из общего повествования. Мне не захотелось редактировать всю статью. Я только добавил в начало описание проблемы и другие способы получения информации в конце. Сама реализация со стороны zabbix осталась той же самой. Меняются только скрипты, которые передают в zabbix данные о сроках делегирования домена.
Для удобного выбора нужного способа, составил табличку, где указал, какой из способов какие домены поддерживает. Использовал только те домены, которые нужны мне. Стандартные домены .ru и .com поддерживают все описанные способы.
способ / домен pro io fm
ruby + + +
whois - + -
python + - +
nodejs + + -
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
Установка CentOS 8.
Настройка CentOS 8.
Установка и настройка zabbix сервера.
То же самое на Debian 10, если предпочитаете его:
Установка Debian 10.
Базовая настройка Debian.
Установка и настройка zabbix на debian.
Подготовка к мониторингу за доменами
Для мониторинга за сроком делегирования доменов мы будем использовать скрипт на языке программирования Ruby. Чтобы скрипт работал, необходимо установить Ruby на сервер. Если вы используете, как я, сервер на базе CentOS 7, то можете воспользоваться моей инструкцией по установке последней версии Ruby на CentOS 7. Там как раз речь идет об установке необходимого гема whois-parser для мониторинга срока делегирования домена.
Парсинг времени делегирования домена через ruby
Если у вас настроен и готов к работе zabbix и установлен ruby, приступаем к настройке скриптов. Идем в папку /etc/zabbix/scripts и создаем там скрипт:
# mcedit /etc/zabbix/scripts/domain_left.rb
#!/usr/bin/env ruby
require 'whois-parser'
record = Whois.whois(ARGV[0])
parser = record.parser
expire = parser.expires_on.strftime("%Y-%m-%d")
today = Time.now.strftime("%Y-%m-%d")
expire_date = DateTime.parse(expire)
today_date = DateTime.parse(today)
left = (expire_date - today_date).to_i
puts left
Его тут же можно проверить. Сохраняете скрипт и запускаете в командной строке, указывая через пробел имя домена для проверки:
# /etc/zabbix/scripts/domain_left.rb serveradmin.ru
394
Отлично, на выходе просто число, которое очень удобно передать в zabbix. Данный скрипт я написал не сам, а подсмотрел у автора этой статьи. У него есть большой минус. В скрипте используется whois-parser и его функция expires_on. Сделано это для упрощения создания скрипта. Не пришлось вручную парсить вывод, за нас это сделали авторы гема whois-parser. Но эти функции работают не со всеми доменами. В разных зонах вывод может быть разным. Покажу на примере.
Для этого создадим простой скрипт на ruby, который будет просто выводить информацию whois без парсинга, в сыром виде.
#!/usr/bin/env ruby
require 'whois-parser'
domain = ARGV[0]
whois = Whois::Client.new
r = whois.lookup(domain)
puts r
Сохраняем скрипт и проверим с его помощью 2 домена: из зоны .pro и зоны .ru.
# ./domain.rb server.pro
# ./domain.rb serveradmin.ru
Если вы внимательно посмотрите на вывод, то обнаружите, что в первом случае строка с информацией о сроке оплаты домена выглядит так:
Registry Expiry Date: 2019-08-18T00:00:00Z
а в другом вот так:
paid-till: 2019-08-09T11:01:06Z
Whois-parser умеет обрабатывать только первую строчку, вторую он не понимает, поэтому приведенный выше скрипт выдаст ошибку. Но в целом, библиотека ruby whois по моим опытам корректно обрабатывает больше всего доменов. Нужно только правильно распарсить вывод. Я программировать на ruby не умею, разбираться у меня не было времени, поэтому я оставил это решение как есть. Можно, конечно, выводить в текстовый файл, а потом парсить вывод через bash. Это я умею, но не захотелось костылить таким образом. Да и в целом, мне не нравится этот способ тем, что надо ставить ruby и регулярно обновлять его библиотеку. Только это гарантирует поддержку новых зон и всех изменений по старым.
В общем и целом способ с приведенным скриптом на ruby работает не хуже всех остальных способов, а если нормально распарсить выводы по всем нужным зонам, то это будет самый информативный и надежный вариант, при условии, что вы будете везде ставить ruby и обновлять библиотеку whois. Только этот способ показывал информацию по всем доменам, что мне попадались. Если доделаю скрипт, чтобы он работал со всеми доменами - обновлю.
Пока же я просто сделал костыль и распарсил вывод с помощью bash следующим образом:
#!/bin/bash
DOMAIN="$1"
data=$(/etc/zabbix/scripts/domain-simple.rb $1 | grep -E 'paid|Expir' | grep -o -E '[0-9]{4}.[0-9]{2}.[0-9]{2}|[0-9]{2}/[0-9]{2}/[0-9]{4}' | tr . / | awk 'NR == 1')
expire=$((`date -d "$data" '+%s'`))
today=$((`date '+%s'`))
lefts=$(($expire - $today))
leftd=$(($lefts/86400))
echo $leftd
Сам скрипт domain-simple.rb:
#!/usr/bin/env ruby
require 'whois-parser'
record = Whois.whois(ARGV[0])
puts record
Я просто делаю полный вывод whois через ruby, а распарсиваю его башем, так как умею в нем работать. Получился вариант, который работает со всеми доменами. Можно этим скриптом передавать данные в zabbix.
Linux утилиты whois и jwhois
В комментариях к первоначальной статье мне подсказали про консольную утилиту whois, а позже я нагуглил и еще одну - jwhois. Я посмотрел на них внимательно и написал простенький скрипт для парсинга информации о делегировании. Данный способ самый простой и удобный. Обе утилиты ставятся через yum, первая из базового репозитория, вторая из репозитория epel. Не нужно дополнительных инструментов. Информативность средняя - все популярные домены есть, в том числе .io, но .pro и .fm не поддерживает. Увы и ах, мне они нужны.
Установим утилиту whois:
# yum install whois
Простой скрипт, который парсит вывод утилиты и показывает, сколько осталось дней до завершения проплаченного периода домена.
#!/bin/bash
DOMAIN="$1"
data=$(whois $1 | grep -E 'paid|Expir|expir' | grep -o -E '[0-9]{4}.[0-9]{2}.[0-9]{2}|[0-9]{2}/[0-9]{2}/[0-9]{4}' | tr . / | awk 'NR == 1')
expire=$((`date -d "$data" '+%s'`))
today=$((`date '+%s'`))
lefts=$(($expire - $today))
leftd=$(($lefts/86400))
echo $leftd
Сохраняйте скрипт и проверяйте работу. Работает так же, как и скрипт для ruby.
# ./domain_left.sh serveradmin.ru
358
Я для себя решил остановиться на этом способе, как самом простом и универсальном.
Модуль python-whois для мониторинга оплаты доменов
В рамках своего исследования я решил проверить как с помощью python можно получать информацию whois. Я подозревал, что должен быть готовый модуль для этого и не ошибся. Такой модуль есть - python-whois. Для его работы нужен python версии 2, который по-умолчанию стоит в системе CentOS 7, что очень удобно.
Нам нужно только установить этот модуль через pip. Pip для 2-й версии ставится из репозитория epel.
# yum install python2-pip
# pip install python-whois
Дальше набросал небольшой скрипт под заданную задачу, аналог предыдущих скриптов.
#!/usr/bin/env python
import whois
from datetime import datetime
from sys import argv,exit
now = datetime.now()
domain = argv[1]
w = whois.whois(domain)
if type(w.expiration_date) == list:
w.expiration_date = w.expiration_date[0]
else:
w.expiration_date = w.expiration_date
domain_expiration_date = str(w.expiration_date.day) + '/' + str(w.expiration_date.month) + '/' + str(w.expiration_date.year)
timedelta = w.expiration_date - now
days_to_expire = timedelta.days
Проверка:
# ./domain-left.py serveradmin.ru
358
Работает так же, как и предыдущие скрипты. Решение на python поддерживает зоны .pro, .fm, не поддерживает .io.
Whois клиент для Node.js
Последнее рассмотренное мной консольное решение по получению данных whois основывается на клиенте для Node.js. Этот способ неудобен, как и с ruby, тем, что надо отдельно ставить node на сервер. Если python на centos сервере точно будет, то node придется ставить отдельно. Сделаем это.
# curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
# yum install nodejs
Устанавливаем whois client:
# npm install whois
Под node.js я программировать вообще не умею и со скриптами не работал никогда. Так что готового скрипта для zabbix не сделал. Покажу на простом примере, как выполнять проверку. Делаем скрипт и в нем сразу указываем домен для проверки.
var whois = require('whois')
whois.lookup('serveradmin.ru', function(err, data) {
console.log(data)
})
Запускаем его:
# node domain-left.js
В выводе увидите привычную информацию whois в таком же виде, как и для остальных проверок. Если бы этот способ проверял все необходимые мне домены, я бы его доделал. Он понимает домены .pro и .io, но не понимает .fm. Так что я не стал на нем подробно останавливаться.
Prometheus domain_exporter
Есть еще один простой и быстрый способ проверять время делегирования домена - использовать экспортер для prometheus domain_exporter. Требуется минимум настроек, так как для него есть готовый docker контейнер, который можно запустить где угодно. Например, на самом Zabbix сервере. Сделаем это:
# docker run -d --restart=always -p 9222:9222 caarlos0/domain_exporter
Он запустился локально на порту 9222. Проверим с его помощью время делегирования домена.
# curl localhost:9222/probe?target=serveradmin.ru
Обработаем вывод, чтобы его было удобно передать в Zabbix.
# curl -s localhost:9222/probe?target=serveradmin.ru | grep domain_expiry_days | grep -v '^#' | awk '{print $2}'
332
Можно сделать скрипт с этой командой и использовать его дальше в настройке zabbix-agent, предложенный мной. Но это не обязательно. Так как экспортер отдает данные по http, их можно забирать напрямую с zabbix сервера с помощью http агента. Я только до конца не понимаю, как тут удобнее сделать автоподстановку списка доменов, чтобы не создавать вручную итем для каждого домена.
Этот экспортер работает на go. Какую базу использует - не знаю. Я погонял новомодные домены, вроде все распознал.
Скрипт auto discovery доменов для zabbix
Для того, чтобы автоматом передавать в заббикс сразу все наши домены, создадим еще один скрипт, который будет парсить текстовый файл со списком доменов и передавать его в zabbix.
# mcedit /etc/zabbix/scripts/domain_discovery.sh
#!/bin/bash
JSON=$(for i in `cat /etc/zabbix/scripts/domain_list.txt`; do printf "{\"{#DOMAIN}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/')
printf "{\"data\":["
printf "$JSON"
printf "]}"
И последнее - создадим файл со списком доменов. Каждый домен с новой строки.
# mcedit /etc/zabbix/scripts/domain_list.txt
yandex.ru
mail.ru
Проверим работу скрипта для парсинга:
# /etc/zabbix/scripts/domain_discovery.sh
{"data":[{"{#DOMAIN}":"mail.ru"},{"{#DOMAIN}":"yandex.ru"}]}
Вывод подходящий для передачи в заббикс.
Настройка zabbix агента
Я настраиваю zabbix агент на работу со скриптом на ruby. Вы можете выбрать скрипт по своему усмотрению. Изменить нужно будет только путь к скрипту в описании итема domain.expire.
Добавим скрипты через пользовательские параметры (UserParameter) агента. Для этого идем в папку с пользовательскими скриптами /etc/zabbix/zabbix_agentd.d и создаем там конфиг для наших параметров:
# mcedit /etc/zabbix/zabbix_agentd.d/domain.conf
UserParameter=domain.discovery[*], /bin/bash /etc/zabbix/scripts/domain_discovery.sh
UserParameter=domain.expire[*], /usr/local/bin/ruby /etc/zabbix/scripts/domain_left.rb $1
Обращаю внимание на путь к ruby. В разных системах он может быть разный. Проверьте куда он у вас установлен и отредактируйте путь. Проверить можно командой:
# whereis ruby
ruby: /usr/lib64/ruby /usr/local/bin/ruby /usr/local/lib/ruby /usr/share/ruby /usr/src/ruby-2.3.1/ruby.o /usr/src/ruby-2.3.1/ruby /usr/src/ruby-2.3.1/ruby.c
Сохраняйте конфиг и перезапускайте zabbix agent:
# systemctl restart zabbix-agent
В консоли закончили настройки, теперь идем в панель администрирования заббикс.
Создание шаблона для наблюдения за доменами
Дальше все стандартно и просто. Я выгрузил готовый шаблон у себя и предлагаю вам его скачать и импортировать, чтобы вручную не создавать все необходимое. Забираем файл - шаблон.
Импортируете шаблон себе в систему. Назначаете его хосту, в котором настроили скрипты и ждете появления данных. Минут через 5 проверяете в Latest Data:
Забавно, время делегирования обоих доменов одинаковое. Сначала подумал, что глюк, решил проверить вручную. Оказалось, что все верно. У них одинаковый срок продления. Без проблем работает наблюдение за доменами .рф. Их нужно перевести в Punycode и добавить так же, как и обычные домены.
Если необходимо, можете настроить повторяющиеся оповещения о времени делегирования домена. В данном случае это может быть актуально, так как не продлив сразу домен, можно потом позабыть.
Заключение
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!
Очередной пример простоты и удобства системы мониторинга Zabbix. С его помощью можно мониторить все, что угодно. Недавно я настраивал мониторинг системы управления насосами. Система передавала параметры в текстовый файл, а я его парсил и отправлял интересующие параметры заббиксу.  Подробнее об этом написал в отдельной статье.
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом "Administrator Linux. Professional" в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
Знание архитектуры Linux.
Освоение современных методов и инструментов анализа и обработки данных.
Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
Владение основными рабочими инструментами системного администратора.
Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по ссылке.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт. Скачать pdf
Tags ZABBIX МОНИТОРИНГ
Автор Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.
Предыдущая
Nginx - Too many open files
Следующая
Мониторинг ssh логинов в zabbix
41 комментарий
Иван08.02.2021 at 10:03
Здравствуйте, хочу поблагодарить автора за этот мануал, все шикарно работает!!
Есть лишь один вопрос, я занес нужные мне домены в domain_list.txt, потом понял что ошибся, и удалил ненужные. Но из мониторинга домены не удалились, пробовал и ребутать, и службу перезапускать. подскажите как удалить домены? повторюсь, в файлике domain_list.txt их нет.
Ответить
Zerox08.02.2021 at 11:18
Тут идея следующая. Домены были добавлены в zabbix server правилом автообнаружения. После удаления из файла они останутся на хосте еще какое-то время. По умолчанию, по-моему, неактивные элементы, добавленные через автообнаружение, удаляются через 30 дней. Это время где-то можно изменить. Так что после удаления домена из файла, надо сходить на хост, к которому прикреплен шаблон с доменами и там вручную удалить все те домены, что больше не нужны.
Ответить
Юрий10.09.2020 at 16:56
Есть проблемка,
zabbix-server 5.0.3
ruby-2.4.4
whois (5.0.1)
whois-parser (1.2.0)
Ошибка:
24601:20200910:164955.472 item "serveradmin.ru:domain.expire[serveradmin.ru]" became not supported: Value of type "string" is not suitable for value type "Numeric (unsigned)". Value "/usr/local/rvm/rubies/ruby-2.4.4/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- whois-parser (LoadError)
from /etc/zabbix/scripts/domain_left.rb:3:in `'"
Ручной запуск выводит:
/etc/zabbix/scripts/domain_left.rb serveradmin.ru
333
zabbix_agentd -t domain.expire[serveradmin.ru]
domain.expire[serveradmin.ru] [t|333]
Ответить
Zerox10.09.2020 at 17:06
У вас тип данных в итеме string, а приходит Numeric (число). Поменяйте на число.
Ответить
Юрий10.09.2020 at 17:20
Так был числовой (целое положительное). Я сейчас переписал на баше, но так же не видело числа, сменил на "Текст" - все работает.
Наверное и на руби с текстом заработало бы.
Ответить
f0ff07.09.2020 at 09:23
Для расширения списка проверяемых доменов, при использовании консольной утилиты, нужно дополнить /etc/whois.conf.
Например списком отсюда:
https://gist.githubusercontent.com/
Для себя взял только одну строку соотв-ю доменам site
Ответить
Zerox07.09.2020 at 11:40
Спасибо за информацию. Не знал об этом. Но ссылка, кажется, ошибочная.
Ответить
f0ff08.09.2020 at 03:22
Каюсь, вот полная ссылка:
https://gist.githubusercontent.com/thde/3890aa48e03a2b551374/raw/a10a5385a9118889cee1c6279975e2bb26ed5177/whois.conf
Ответить
Zerox08.09.2020 at 09:54
А проверка не тормозит с таким огромным списком? Не очень понимаю, как это должно работать. По какому сервису в итоге проверка идет?
Ответить
f0ff09.09.2020 at 08:41
Я для себя взял только одну строку соответствующую доменам site.
Проверка занимает больше времени (5-10 секунд), но на результат не влияет, заббикс обновляет эти итемы раз в трое суток.
Перебровав все варианты указанные в статье так и не получилось проверять зону .site, поэтому использую этот вариант.
Ответить
f0ff20.11.2020 at 08:35
В моем случае /etc/whois.conf выглядит так:
\.site$ whois.nic.site
\.kz$ whois.nic.kz
Ответить
Аноним17.08.2019 at 22:01
Для доменов в зоне .spb.ru ни один из способов не работает без модификации.
Информацию можно получить только с сервера регистратора, поэтому для консольного whois примерно так:
«whois -h whois.regtime.net sample.spb.ru», где whois.regtime.net нужно заменить для каждого домена на сервер регистратора.
Пришлось запилить ещё один скрипт под домены в этой зоне.
Ответить
Zerox18.08.2019 at 15:48
Спасибо, полезная информация. Тоже разок столкнулся с тем, что не мог проверить зону spb.ru Не стал заморачиваться.
Ответить
12327.05.2019 at 13:58
скрипты через whois
Value "% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian)
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).
domain: MAGMA.RU
nserver: ns1.r01.ru.
nserver: ns2.r01.ru.
state: REGISTERED, DELEGATED, VERIFIED
person: Private Person
registrar: RU-CENTER-RU
admin-contact: https://www.nic.ru/whois
created: 2000-10-11T20:00:00Z
paid-till: 2019-10-12T21:00:00Z
free-date: 2019-11-13
source: TCI
Last updated on 2019-05-27T10:56:33Z" of type "string" is not suitable for value type "Numeric (float)"
Ответить
Дмитрий06.03.2019 at 16:01
А не подскажете как правильнее сделать, чтобы в отчете о проблеме что у домена заканчивается срок действия так же указывалось сколько дней осталось. Например если сработал тригерр я мог видеть сколько еще дней осталось. Заранее спасибо.
Ответить
Zerox06.03.2019 at 16:35
Вот прям сейчас настраиваю то же самое. Тестирую новый шаблон, где в названии триггера будет автоматически подставляться остаток дней делегирования. И эта же информация будет в уведомлении на почту. Как сделаю, обновлю шаблон в статье и сообщу тут.
Ответить
Дмитрий06.03.2019 at 16:47
Два чая этому столику!
Ответить
Nurlan20.02.2019 at 06:46
че то у вас скрипты не рабочие....
python whois.py ya.ru
Traceback (most recent call last):
File "whois.py", line 3, in
import whois
File "/home/nurlanizimbetov/whois.py", line 10, in
w = whois.whois(domain)
TypeError: 'module' object is not callable
./whois.py serveradmin.ru
Traceback (most recent call last):
File "./whois.py", line 3, in
import whois
File "/home/nurlanizimbetov/whois.py", line 10, in
w = whois.whois(domain)
TypeError: 'module' object is not callable
....
Ответить
Nurlan20.02.2019 at 07:20
в ходе попыток выяснил что хреново работает с доменами в зоне .ru и .kz (вообще не запускается)
для теста facebook.com отрабатывает...
Ответить
Zerox20.02.2019 at 10:41
Скрипты рабочие, у меня работают в личном мониторинге. Но вот с доменами могут быть проблемы. Хотя то, что описано в статье у меня работает нормально. Уж точно с зоной .ru все в порядке. С .kz не проверял никогда. Возможно проблемы с версиями питона, либо самих библиотек.
Ответить
Photographer23.11.2018 at 20:49
Спасибо! Прекрасно все работает с bash, но в заббиксе не отображается expires домена. Соотвественно не рабоают алерты.
Подскажите, плиз, куда смотреть. Что править? Zabbix 4.0.0.
Ответить
Sergey08.06.2018 at 12:41
Я вижу что есть или появилась проблема
Если это ограничения Ruby Whois есть решение или будем делать другим способом?
Ответить
Аноним08.06.2018 at 10:49
/var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/base.rb:110:in `error!': Unexpected token: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. (Whois::ParserError)
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/base.rb:106:in `unexpected_token'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/base.rb:102:in `tokenize'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/base.rb:29:in `parse'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/scannable.rb:53:in `parse'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/scannable.rb:59:in `ast'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/scanners/scannable.rb:38:in `node'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parsers/base_afilias2.rb:66:in `block in '
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parsers/base.rb:398:in `block in handle_property'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parsers/base.rb:371:in `cached_properties_fetch'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parsers/base.rb:396:in `handle_property'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parsers/base.rb:240:in `expires_on'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parser.rb:361:in `delegate_property_to_parsers'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parser.rb:327:in `expires_on'
from /var/lib/gems/2.3.0/gems/whois-parser-1.1.0/lib/whois/parser.rb:348:in `method_missing'
from /etc/zabbix/scripts/domain_left.rb:9:in `'
Ответить
Аноним08.06.2018 at 07:52
Аналогичная проблема с *.pro *.info *.org, но как я понимаю это ограничения Ruby Whois
Ответить
Zerox08.06.2018 at 20:05
Да, надо делать другую реализацию. У меня не проверяет домены .fm Никак не найду время переделать мониторинг доменов.
Ответить
Sergey08.05.2018 at 14:19
Да ещё на Zabbix.Server показывает что (domain.discovery) Unsupported item key.
Ответить
Sergey17.05.2018 at 11:21
Я добился что-бы домены начали появляться.
Но никаких данных когда заканчивается :
Domain mydomain.ru expire after (и ничего ) а дальше History :
--------------------------------------------------------------------------------------------------------------------
/usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/socket_handler.rb:40:in `rescue in call': Errno::EACCES: Permission denied - connect(2) for "whois.tcinet.ru" port 43 (Whois::ConnectionError)
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/socket_handler.rb:37:in `call'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/adapters/base.rb:183:in `query'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/adapters/standard.rb:51:in `request'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/adapters/base.rb:113:in `block in lookup'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/adapters/base.rb:151:in `buffer_start'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/server/adapters/base.rb:112:in `lookup'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/client.rb:94:in `block in lookup'
from /usr/local/lib/ruby/2.5.0/timeout.rb:93:in `block in timeout'
from /usr/local/lib/ruby/2.5.0/timeout.rb:33:in `block in catch'
from /usr/local/lib/ruby/2.5.0/timeout.rb:33:in `catch'
from /usr/local/lib/ruby/2.5.0/timeout.rb:33:in `catch'
from /usr/local/lib/ruby/2.5.0/timeout.rb:108:in `timeout'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois/client.rb:91:in `lookup'
from /usr/local/lib/ruby/gems/2.5.0/gems/whois-4.0.6/lib/whois.rb:35:in `lookup'
from /etc/zabbix/scripts/domain_left.rb:5:in `'
-----------------------------------------------------------------------------------------------------------------------------------
Самое интересное если делаю проверку в ручную через скрипт то выдаёт нормальные данные правильно.
И если обращаюсь на прямую whois -h whois.tcinet.ru mydomain.ru тоже отвечает правильно
Я просто не не могу понять где я ошибаюсь? Вроде всё правильно.
Если у кого то есть идея что можно исправить я был бы рад попробовать.
Ответить
Аноним07.06.2018 at 10:33
В шаблоне изменить "Правила обнаружения" Тип Zabbix агент "Прототипы элементов данных" Тип Zabbix агент
Ответить
Аноним07.06.2018 at 11:15
Также задать одинаковый "Интервал обновления"
Ответить
Sergey07.06.2018 at 14:32
Но это я и так сделал.
Домены он показывает, проблема в /ruby/gems/2.5.0/ как я описал выше
Ответить
ОрТ12.04.2018 at 13:52
Установил все по вашей инструкции, заббикс агент тоже установил, скрипты при проверке в консоли выводят информацию. Также проверяю напрямую через передачу параметров в заббикс агент:
zabbix_agentd -t 'domain.expire[bash.im]'
domain.expire[bash.im] [t|323]
Значение возвращает.
Создал узел сети, добавил туда шаблон ваш, но в поле Доступность ZBX серым цветом так и остается. Куда копать?
Ответить
ОрТ12.04.2018 at 15:14
С этим разобрался в шаблоне было указано Zabbix агент(активный), надо было выбрать просто Zabbix агент, ZBX стал зеленым, в последних данных появились домены, но данных самих нет, просто строчки с Domain xxxxxxx.com expire after без количества оставшихся дней.
Ответить
Sergey08.05.2018 at 11:53
У меня такая же ситуация.
Domain domain.ru expire after а в конце только Graph
Но там тоже
Daomain domain.ru [no data]
Trigger: domain.ru expire soon [<30]
Может надо что-то подправить ?
Ответить
Sergey25.06.2018 at 10:06
Добрый день!
Мне очень интересно как вы решили эту проблему.
Я уже попробовал многое.
Ответить
Artem25.03.2018 at 18:04
Добрый день!
Только начал изучать zabbix. Спасибо большое автору за труды.
Подскажите, пожалуйста, этот пункт:
"Назначаете его хосту, в котором настроили скрипты и ждете появления данных. Минут через 5 проверяете в Latest Data"
Создал хост, назначил шаблон. Какой ставить интерфейс агента, где и какие скрипты необходимо настроить?
Ответить
Vadim21.03.2017 at 18:18
на команду
# /etc/zabbix/scripts/domain_left.rb serveradmin.ru
ругается
root@zabbix:/etc/zabbix/zabbix_agentd.d# /etc/zabbix/scripts/domain_left.rb serveradmin.ru
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- whois (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /etc/zabbix/scripts/domain_left.rb:2:in `'
Ответить
Leo24.09.2017 at 19:08
установи гем:
gem install whois-parser
Ответить
SolarW31.01.2017 at 17:17
RUBY - это круто...
https://mnorin.com/monitoring-daty-prodleniya-domennogo-imeni.html - так не проще?
Ответить
Zerox31.01.2017 at 18:17
Спасибо за ссылку, так проще. Но мне под руку сразу попался скрипт на руби, поэтому я на нем сделал. В принципе, никаких сложностей у меня не возникло. Про консольный whois я просто не знал.
Ответить
Vadim21.03.2017 at 18:15
в этой статье скрипт дату не верно вычисляет, вернее paid-till видимо ввиду того что при выводе результата от whois в строке paid-till стоит символ T
Ответить
Max30.08.2017 at 22:51
Так там в статье и говорится, что рассматривается три варианта представления даты, если будет четвертый, то надо писать обработку и для четвертого.Это достаточно несложно
Ответить
Добавить комментарий
Ваш адрес email не будет опубликован.
Комментарий
Имя
Email
Сайт
Отправить комментарий
Подписка на новые комментарии:
Отправить уведомление только при ответе на мой комментарий
Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Дешевые дедики от Selectel, есть посуточная оплата. Использую сам.
Ссылки
Админский канал: t.me/srv_admin
Админский чат: t.me/srv_admins
Мой канал: youtube.com/user/zeroxzed
Группа Вконтакте
Системное администрирование
Анонс статей (без спама)
Подписка
Прикольная игра
Популярное
Как настроить микротик routerboard RB951G-2HnD
Написано: 21.11.2018 1,006,590
Сетевые настройки в CentOS 8, 7
Написано: 17.10.2019 659,749
CentOS 7 и 8 настройка сервера после установки
Написано: 05.10.2019 656,200
Asterisk - SIP АТС для офиса, пошаговая инструкция по настройке с нуля
Написано: 03.03.2020 471,871
Как настроить сетевые параметры в Debian
Написано: 06.08.2019 363,110
Вход/Регистрация
Log in Remember Me
Регистрация
Lost your password?
Статистика
Соглашение
Политика конфиденциальности
Свежие записи
Публикация баз 1С в Centos без графического окружения
Написано: 01.04.2021
Код ошибки 0x80004005 Неопознанная ошибка Windows
Написано: 31.03.2021
Перенос контейнеров закрытых ключей и сертификатов CryptoPro
Написано: 25.03.2021
Установка и настройка CrowdSec
Написано: 14.03.2021
Обзор системы видеоразговоров и конференций "Видео Союз" (VideoUnion)
Написано: 09.03.2021
Комментарии
Александр: Не могу понять в чем дело. С сервера и опорной машины клиента пинги идут и на кл...
Zerox: Не уверен, что это хорошая идея для файловых баз. Web публикация хорошо страхует...
iFFgen: Сам нашел ответ на свой же вопрос: "модуль 1с для веб-сервера — однопоточный. Со...
iFFgen: "Сразу же настроим однопоточную работу apache" Скажите, пожалуйста, с какой цель...
Zerox: Это очевидно. А зачем вам все это настраивать, если у вас нет учетки и лицензии...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment