Разные команды на shell bash

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 496
Стаж: 3 года 5 месяцев
Откуда: Вологодская область
Поблагодарили: 20 раз
Контактная информация:

Разные команды на shell bash

Сообщение Артём Мамзиков »

Запуск одновременно или поочередно либо при ошибке следующей команды:

echo "2" echo "45"
2 echo 45

echo "2" |echo "45" выполнение по порядку если предыдущая выполнена без ошибки
Ответ:45

echo "2" ||echo "45" если первая команда завершилась ошибкой выполняется следующая
Ответ:2

echo "2" &echo "45" Для одновременного запуска команд
Ответ:
[1] 12111
45
2
#
[1]+ Завершён echo "2"

echo "2" ;echo "45" команды выполняются по порядку
Ответ:
2
45

echo "2" &&echo "45" если первая команда успешно выполнилась выполняется следующая
Ответ:
2
45

echo "2" ;;echo "45"
-bash: синтаксическая ошибка рядом с неожиданным маркером «;;»

Способы запроса IP
LINUX BASH
ip address|sed 's/inet//'|grep -E '192.168.*.5|172.16.*.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'
ip addr|grep -E "192.168.*|172.16.*"|sed 's/inet //'|sed 's|/.*||g'
hostname -i -может отдать одной строкой несколько IP либо локальный вместо реального
grep "nameserver" /etc/resolv.conf |sed 's/nameserver//'|grep -E '.5'|tr -d ' '
grep "nameserver" /etc/resolv.conf |sed 's/nameserver//'|grep -E '.5'|tr -d ' ' |awk -F'.' '{print $1,$2,$3}' OFS='.'
grep "nameserver" /etc/resolv.conf |tr -d 'nameserver'|grep -E '.5'|tr -d ' '
Регулярка для IP
grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"


WINDOWS CMD
ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."
::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)


for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%

for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
Set IP=%IPDNS:~1%


for /f "tokens=2 delims=:(" %%d in ('ipconfig /all^|FIND /I "DNS-"^|FIND /I ".5"') do set IPDNS=%%d

::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%d in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%d") do set IP=%%k.%%l.%%m
)

Регулярка PHP
#^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.|,)?(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$#

Службы
Под su-
Смотри список
chkconfig --list
chkconfig --list finger
service --status-all

Находите нужные и задаёте им необходимые уровни запуска, если они не заданы:
# chkconfig --level необходимые _уровни имя_вашей_службы on
пример:
# chkconfig --level 345 mysqld on - включение

chkconfig -add bluetooth -команд нот фаунд

chkconfig [сервис] on - включение

cprocsp 0:off 1:off 2:on 3:on 4:on 5:on 6:off

chkconfig --level 345 nscd off - отключение запуска

cd /opt/drweb.com && chmod -R -x * && reboot
cd / && ls -f -1 . | grep '^\.[0-9]*$' | grep -v '^.$' | xargs rm -f && reboot


ПРОЦЕССЫ
ps -A
ps -ef
ps -u
ps -fu
ps -ux
ps -e
service --status-all

УДАЛИТЬ ПУСТЫЕ СТРОКИ
sed -e '/^$/d'
sed -i '/^$/d'
awk 'NF > 0'
grep -Ev "^$"
tr -s '\n'
perl -i -n -e "print if /S/"


Регистро не зависемый поиск строки и ее вывод
echo ONE TWO | sed -n 's/one/Ip'

I - заглавной пишем

точное слово поиска
sed '/\<foo\>/d' file\
Или
sed '/\bfoo\b/d' file

В первом решении используется \< начальное слово и \> конечное слово. Во втором решении используется граница \b слова.
P.S. Двойником \b является \B , поэтому для удаления строк, содержащих foobar или foobaz , но не только foo , используйте:
sed '/\bfoo\B/d' file

Дата формат вывода ГГГГ-ММ-ДД
date "+%F %T %A %B %j %u"
2021-09-01 16:17:55 Среда Сентябрь 244 3

date +"%d.%m.%y" формат 13.09.21
date +"%d.%m.%Y" формат 13.09.2021


Для выполнения команды в sed указать команду $(команда)
sed -n '/'$(date "+%F")'/Ip'
sed -n '/'$(date "+%F")\|искомые\|искомые'/Ip'

Вывести все указать .*
sed -n '/'.*'/Ip'


Изменение входных переменных
Задать обычную переменную для входной переменой

Способ 1
if [ -n "$1" ]
then
echo Hello $1.
else
echo "No parameters found. "
fi

if [ $# = 0 ]
then
echo "my default"
else
echo "$1"
fi

test=$1
#Если переменная пустая задать свое дефолтное
if [ -z "$test" ]; then test=указать_свое
fi
echo $test

или так
[ -z "$test" ] || test=указать_свое

Спсоб 2 (если переменная пустая, будет использовано наше значение)
test=${1:-Указать_свое}

var=${1:-default}
${parameter:-word}
echo "${1:-"my default"}"
Если параметр не задан или null, то расширение слова заменяется. В противном случае значение параметра подставляется.
И обратите внимание также, что ${var:-value} и ${var-value} не одно и то же

В некоторых случаях замена проходит для 1 переменной set $2"указать_своё"

tstart=$1
tstop=$2
coord1=$3
coord4=$4
: ${optional1:=100}
: ${optional2:=50000}
: ${optional3:=4}

Суммировать переменные
total=$[ $1 + $2 ]

Получение последнего из переданных скрипту параметров
echo The last parameter was ${!#}

захватить все параметры, переданные скрипту.
$* и $@

замена текста, срезы и непрямые ссылки
${variable//ШАБЛОН/СТРОКА}
2 входная содержит число 50 заменим на Подключено
${2//50/Подключено}

Частичная замена
$ a="111222"
$ echo ${a//1/3}
333222

замена только первого совпадения
$ a="111222"
$ echo ${a/1/3}
311222

Получение среза в значении переменной
${variable:OТСТУП:ДЛИНА}

Сделать срез до конца значения:
$ a="123456789"
$ echo ${a:3}
456789

фиксированную длину, например — два символа после 3-го:
$ a="123456789"
$ echo ${a:3:2}
45

Непрямые ссылки — ${!variable}
$ firstvariable=firstvariable
$ secondvariable=firstvariable
$ echo ${!secondvariable}
firstvariable

Убрать символьные сылки
variable1_=$1_
# Это предотвратит появление ошибок, даже при отсутствии входного аргумента.
critical_argument01=$variable1_
# Дополнительные символы всегда можно "убрать" позднее.
# Это может быть сделано примерно так:
variable1=${variable1_/_/} # Побочный эффект возникает только если имя переменной
# $variable1_ будет начинаться с символа "_".
# Здесь используется один из вариантов подстановки параметров, обсуждаемых в Главе 9.
# Отсутствие шаблона замены приводит к удалению.
# Более простой способ заключается
#+ в обычной проверке наличия позиционного параметра.
if [ -z $1 ]
then
exit $POS_PARAMS_MISSING
fi


sed "s/'//g;s/\"//g" ./исходный.txt > ./результат.txt



|sed 's/:.*/:/'
|grep -o '.*:'
egrep -o '^[^:]*:'
tr [:lower:] [:upper:] - верхний регистр
|sed 's/\s/-/g' - пробелы на тире -

\s+ регулярка пробелы любое количество
A-z- любые en буквы и тире
[0-9]+ блок цифр
.* любые символы


WINE ALTLINUX
Запуск программ
wine имя-программы.exe
wine msiexec /i whatever.msi
wine notepad - блокнот
wine regedit - реестр
winecfg - использование реестра
wine explorer - проводник
wine taskmgr - диспетчер задач
winemine - сапер
wine iexplore - браузер
wine cmd
msiexec - установка msi
wine control - панель управления
wine uninstaller - Установка удаление программ
winecfg - Настройка Wine
wine explorer /desktop=name,1024x768 program.exe - на виртуальном рабочем столе

wine start whatever.msi
wine start 'C:\Games\Tron\tron.exe'
wine start "C:\\Games\\Tron\\tron.exe"
wine start /unix "$HOME/installers/TronSetup.exe"
wine start /ПУТЬ/ДО/ФАЙЛА.bat

Входные аргументы
quake.exe -map e1m1
wine quake.exe -map e1m1
quake.exe -map C:\Quake\e1m1.bsp
wine quake.exe -map C:\\Quake\\e1m1.bsp

Графически
winefile
wine explorer
wine explorer /ПУТЬ/ДО/ПАПКИ

bash -c 'cd /ПУТЬ/ДО/ПАПКИ/С/ФАЙЛОМ/; wine ./ФАЙЛ.exe'
bash -c 'cd "/home/mial/.wine/drive_c/Program Files (x86)/foobar2000/"; wine ./foobar2000.exe'
bash -c 'cd /mnt/disk_d/Share/Conses/ConsFed/; wine ./cons.exe'


Помощники в установке программ и библиотек в Wine

apt install playonlinux
pacman -S playonlinux

Winetricks
apt install winetricks
pacman -S winetricks
wget https://raw.githubusercontent.com/Winet ... winetricks
wget http://www.kegel.com/wine/winetricks

chmod +x winetricks
./winetricks


WINEPREFIX (префиксы)
Для примера, если вы запускаете одно приложение с
env WINEPREFIX=~/.win-a wine program-a.exe
а другое с
env WINEPREFIX=~/.win-b wine program-b.exe
у каждой программы будет свой раздел C:, соответственно, своя копия всех настроек и реестра.
Таким образом, обе программы будут запущены в полностью изолированных друг от друга средах.


env WINEPREFIX=~/.customprefix wineboot -u
export WINEPREFIX=~/.wine-new
wine winecfg

WINEPREFIX=ПУТЬ_ДО_wineprefix wine winecfg

Поумолчанию
unset WINEPREFIX
WINEPREFIX на ~/.wine.

32-битный винный префикс в 64-битной
WINEARCH=win32 WINEPREFIX=ПУТЬ_ДО_wineprefix winecfg
WINEPREFIX=ПУТЬ_ДО_wineprefix wine start /unix ПУТЬ_ДО_УСТАНОВЩИКА


Можете попробовать apt-repo add 283357
и обновить систему. apt-get update apt-get upgrade
Не используйте wine-vanilla. Обычный wine (staging) поддерживает больше программ.
https://www.altlinux.org/WINE

Смотрим какие пакеты wine у нас установлены.
Было установлено
#rpm -qa |grep wine

Для его установки необходимо убедиться, что подключён репозиторий для псевдоархитектуры x86_64-i586
nano /etc/apt/sources.list.d/alt.list
Добавляем
apt-repo add 'rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64-i586 classic'
apt-get update

Устанавливаем для х64
apt-get install i586-libwine

apt-get install wine-gecko wine-mono i586-wine
Работа с сетью и Active Directory
apt-get install i586-glibc-nss i586-sssd-client


grep: опции, регулярные выражения и примеры использования

[:alnum:] - Алфавитные символы: «[:alpha:]» и «[:digit:]»; в локали «C» и кодировке символов ASCII, это то же самое что и «[0-9A-Za-z]».

[:alpha:] - Алфавитные символы: «[:lower:]» и «[:upper:]»; в локали «C» и кодировке символов ASCII, это то же самое что и «[A-Za-z]».

[:blank:] - Пустые символы: пробел и табуляция.

[:cntrl:] - Управляющие символы. В ASCII эти символы имеют восьмеричные коды от 000 до 037 и 177 (DEL). В других наборах символов это эквивалентные символы, если они есть.

[:digit:] - Цифры: 0 1 2 3 4 5 6 7 8 9.

[:graph:] - Графические символы: «[:alnum:]» и «[:punct:]».

[:lower:] - Буквы в нижнем регистре, в локали «C» и кодировке символов ASCII это a b c d e f g h i j k l m n o p q r s t u v w x y z.

[:print:] - Печатные символы: «[:alnum:]», «[:punct:]», и пробел.

[:punct:] - Пунктуационные символы; в локали «C» и кодировке символов ASCII, это ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.

[:space:] - Пробельные символы: в локали «C», это табуляция, новая строка, вертикальная табуляция, разрыв страницы, возврат каретки и пробел.

[:upper:] - Буквы в верхнем регистре: в локали «C» и кодировке символов ASCII, это A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.

[:xdigit:] - Шестнадцатеричные цифры: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.

Обратите внимание, что квадратные скобки в этих классах имён являются частью символических имён и должны быть включены в дополнение к квадратным скобкам, отделяющим выражения в квадратных скобках.
количество слов: 1145
Партнёрская ссылка на Хостинг Beget https://beget.com/p937243

Вернуться в «Linux»