The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Алгоритм Тетрис ..., !*! redd, (C/C++) 30-Мрт-18, 15:56  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Пересмотрел кучу вариантов, не могу понять сам смысл, ...
У нас два массива, один статический, второй динамический,.
С каждым тиком складываем два массива ...
Статический идет с нарастающей суммой ...

Фигуру вращаем в динамическом массиве проверяя на границы ???

У каждой фигуры есть центр ? Вокруг которого ёе вращаем ???





Свой bash-completion, нужен case-insensetive, !*! Перспективный, (Shell скрипты) 29-Мрт-18, 21:10  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Привет. У меня есть несколько тем иконок(значков), я их периодически меняю/смотрю как с ними что-то выглядит. Для удобства сделал функцию в .bashrс:

function theme-icon { theme=${1:-"hicolor"}; dconf write /org/gnome/desktop/interface/icon-theme "'$theme'"; }

Ну и чтобы было совсем отлично сделал $HOME/.config/bash-completion.d/theme-icon:

_theme-icon()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    local list=$(while read line; do echo -n "${line%%/*} ";done< <(find -L $HOME/.local/share/icons -maxdepth 2 -type f -name index.theme -prune -printf "%P\n"))
    COMPREPLY=( $(compgen -W "${list}" -- $cur) )
}
complete -F _theme-icon theme-icon

Набираю theme-icon нажимаю Tab, выходит нужный список, нажимаю первую букву и т.д. как ожидалось, но приходится нажимать буквы в нужном регистре "А", а не "а", когда очень хочется case-insensetive.

grep ignore < <(bind -v)
set completion-ignore-case on

То есть эта настройка работает в системе, но в случае моего theme-icon нет. Что тут нужно переделать?

сделать замену строки в файле, !*! Владислав, (Shell скрипты) 28-Мрт-18, 12:42  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый День, подскажите как сделать замену строки  <keepDependencies>false</keepDependencies> на
<keepDependencies>true</keepDependencies>
Нужно закомментировать пару строк в файле-конфиге, !*! universite, (Shell скрипты) 18-Мрт-18, 20:35  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]

Сабж.

1) закомментировать 5,24,26,27 строки в file.conf

2) закомментировать после строки 'enable_php5="yes"' три последующие строки в file.conf

Явно sed просится...



Проверить существование строки в кронтабе со сппецсимовлами *, !*! universite, (Shell скрипты) 18-Мрт-18, 06:00  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Subj на Debian 8.

Пробую разные варианты, но или баш интерпретируют * как показать файлы, то "grep: заданы конфликтующие образцы"


if [ $(egrep -P "^\* \* \* \* \* /bin/bash /root/script.sh > /dev/null" /var/spool/cron/crontabs/root) ]; then
        echo "good";
                else
        echo bad;
fi



сделать замену строки в файле , !*! TazMan, (Shell скрипты) 16-Мрт-18, 11:51  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый День !   подскажите как сделать замену строки $config['create_default_folders'] = true;   в файле на строку $config['create_default_folders'] = false;    
перепробовал всё что знал :) не получается
shaper traffic counter, !*! blasterjon2018, (Shell скрипты) 15-Мрт-18, 13:14  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]

дравствуйте написал программу подсчета трафика на linux
но шейпер не работает
помогите пожалуйста

Мои сетевые настройки следующие

ens5 - сеть интернет адрес ХХХ.ХХХ.ХХХ.ХХХ
ens2 - локадьная сет адрес 192.168.10.1

IP адрес пользователей хранится в файле /var/www/traf/users следующим образом
192.168.10.2
192.168.10.3
192.168.10.4
 и далее
Если IP не прописанов этом файле то не должно имет доступ к Интернет

программа подсчета трафика приведене ниже


//=================================================

#/bin/bash
date=`date '+%Y-%m-%d'`;
time=`date '+%H:%M:%S'`;

IPTABLES="/sbin/iptables"


$IPTABLES -t mangle -nxvL PREROUTING | awk '/ACCEPT.*ens2/ {print $8,$2}'>/var/www/traf/trafinput

cat /var/www/traf/trafinput | while read line;
do
var1=`echo "$line"|awk '{print $1}'`
var2=`echo "$line"|awk '{print $2}'`
MYSQL_RESULT=`mysql -D trafic -u root --password=12345678 -e "INSERT INTO minutinput (m_date, m_time, m_ip_address, m_input) VALUES('$date','$time','$var1','$var2')"`;
done;


$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -X -t nat
$IPTABLES -X -t mangle
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPTABLES -A INPUT -i lo -p all -j ACCEPT
$IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
$IPTABLES -A INPUT -i ens2 -j ACCEPT
$IPTABLES -A OUTPUT -o ens2 -j ACCEPT
$IPTABLES -A FORWARD -i ens2 -s 192.168.10.0/255.255.255.0 -p tcp -m multiport --dports 21,22,25,110,143,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i ens2 -s 192.168.10.0/255.255.255.0 -p udp -m multiport --dports 53 -j ACCEPT
$IPTABLES -A FORWARD -i ens2 -s 192.168.10.0/255.255.255.0 -p tcp -m multiport --dports 53 -j ACCEPT
$IPTABLES -A INPUT -i ens2 -p ICMP -j ACCEPT
$IPTABLES -A OUTPUT -o ens2 -p ICMP -j ACCEPT
$IPTABLES -A INPUT -i ens5 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
$IPTABLES -A OUTPUT -o ens5 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT

cat /var/www/traf/users | while read line;
do
var1=`echo "$line"|awk '{print $1}'`

$IPTABLES -t mangle -A PREROUTING -i ens2 -s $var1 -j ACCEPT
$IPTABLES -t mangle -A POSTROUTING -o ens2 -d $var1 -j ACCEPT
done;

$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

$IPTABLES -t nat -A POSTROUTING -s 192.168.10.0/255.255.255.0 -j SNAT --to-source ХХХ.ХХХ.ХХХ.ХХХ
$IPTABLES -t nat -A POSTROUTING -o ens5 -j MASQUERADE

//=================================================

программа шейпинга приведена ниже

//=================================
#!/bin/bash
TC=/sbin/tc

IF=ens2             # Interface

DNLD=40kbit          # DOWNLOAD Limit

UPLD=40kbit          # UPLOAD Limit

IP=192.168.10.2     # Host IP

tc qdisc del dev ens5 root
tc qdisc del dev ens2 root
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"
$TC qdisc add dev $IF root handle 1: htb default 30
$TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
$TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
$U32 match ip dst $IP/32 flowid 1:1
$U32 match ip src $IP/32 flowid 1:2

но программа не работает пожалуйста помогите



Скрипт проверки работы локального ДНС, !*! universite, (Shell скрипты) 07-Мрт-18, 20:30  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужен сабж.
Пока сделано так (для Дебиана):


if [ -e /usr/sbin/dnsmasq ] && [ -e /etc/dnsmasq.d/localhost ] && [ "$(netstat -ntulp | grep 127.0.0.1:53)" ]; then

...

fi

Но непонятно как чекать ответы вида:
dig +short example.com @localhost


P.S. Да, я в курсе, что localhost имеет несколько IP...

Запуск двух демонов из одного скрипта, !*! NickToLay, (Shell скрипты) 05-Мрт-18, 22:57  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Вот такой скрипт-пример (запуск двух комманд):

echo ">>> RUN#1"
sh -c "./php.exe"
echo ">>> RUN#2"
sh -c "./nodejs.exe"

Пока запуск первой комманды не вернул EXIT CODE (процесс еще висит) скрипт не перейдет к запуску второй комманды. Вопрос в том, как продолжить выполнение скрипта не дожидаясь, пока 1-ый запущенный процесс завершит работу??

Сканер портов на Golang, !*! Saamuel, (Языки программирования) 14-Фев-18, 13:39  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте,

Подскажите решение такой ситуации. Необходимо на go написать скрипт который при запуске будет проверять ip адрес на хосте и сканировать всю локальную сеть на доступность порта 22.



Получить данные из QHeightMapSurfaceDataProxy, !*! v.karak, (GUI, XWindow, Qt, GTK) 05-Фев-18, 09:47  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет!

Подскажите, пожалуйста, можно ли получить данные координатной сетки из QHeightMapSurfaceDataProxy? Поверхность отрисовывается нормально. Я делал попытки получить данные через:

const QSurfaceDataArray *array = layerNewProxy->array();

и другие, подходящие по смыслу методы, но все что, пробовал возвращает 0 или ASSERT(...).

    Q3DSurface *surface = new Q3DSurface();
    QImage layerOneHMap(":/maps/layer_1.png");
    QHeightMapSurfaceDataProxy *layerOneProxy = new QHeightMapSurfaceDataProxy(layerOneHMap);
    QSurface3DSeries *layerOneSeries = new QSurface3DSeries(layerOneProxy);
    layerOneSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
    layerOneProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
    layerOneSeries->setDrawMode(QSurface3DSeries::DrawSurface);
    layerOneSeries->setFlatShadingEnabled(false);
    surface->addSeries(layerOneSeries);

Массив строк, который заполняю сам - всегда возвращается, но вот тот, что создается через
QHeightMapSurfaceDataProxy никогда :( В Qt только начинаю. Ссылка на пример:

https://doc.qt.io/qt-5.10/qtdatavisualization-surface-exampl...

Буду благодарен, за любую помощь!

Не выполняется программа Packing Widgets из GTK+ 2.0 Tutorial, !*! hrm, (GUI, XWindow, Qt, GTK) 13-Янв-18, 02:27  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Помогите пожалуйста найти ошибку, почему программа из документации вылетает с ошибкой "Process terminated with status 1".
Ошибка происходит уже в процессе выполнения программы.
При этом в программе есть такой код:
================================================================
  if(argc != 2) {
    fprintf(stderr, "usage: packbox num, where num is 1, 2, or 3.\n");
    /* Очищаем поток выхода GTK и выходим со статусом 1. */
    exit(1);
  }
================================================================
Но тогда в описании ошибки должна быть строка "usage: packbox num, where num is 1, 2, or 3.\n", но ее нет.
Логи не помогли мне найти место ошибки. Подскажите плз где мне искать ошибку. Вот логи, которые выдает CodeBlocks при компиляции и выполнении программы.

==================================================================

-------------- Сборка: Debug in Packing_Widgest (compiler: GNU GCC Compiler)---------------

mingw32-gcc.exe -mms-bitfields -Wall -g -IC:\prog\CodeBlocks\GTK\include -IC:\prog\CodeBlocks\GTK\include\gtk-2.0 -IC:\prog\CodeBlocks\GTK\include\cairo -IC:\prog\CodeBlocks\GTK\include\gdk -IC:\prog\CodeBlocks\GTK\include\glib-2.0 -IC:\prog\CodeBlocks\GTK\lib\glib-2.0\include -IC:\prog\CodeBlocks\GTK\include\pango-1.0 -IC:\prog\CodeBlocks\GTK\lib\gtk-2.0\include -IC:\prog\CodeBlocks\GTK\include\atk-1.0 -IC:\prog\CodeBlocks\GTK\include\gdk-pixbuf-2.0 -c C:\work\GTK\Packing_Widgest\main.c -o obj\Debug\main.o
mingw32-g++.exe -LC:\prog\CodeBlocks\GTK\lib -o bin\Debug\Packing_Widgest.exe obj\Debug\main.o   -lgtk-win32-2.0 -lgobject-2.0 -lglib-2.0 -mwindows
Output file is bin\Debug\Packing_Widgest.exe with size 50,73 КБ
Process terminated with status 0 (0 minute(s), 20 second(s))
0 error(s), 0 warning(s) (0 minute(s), 20 second(s))

-------------- Запустить: Debug in Packing_Widgest (compiler: GNU GCC Compiler)---------------

Проверка наличия: C:\work\GTK\Packing_Widgest\bin\Debug\Packing_Widgest.exe
Выполняется: "C:\work\GTK\Packing_Widgest\bin\Debug\Packing_Widgest.exe"  (в C:\work\GTK\Packing_Widgest\.)
Process terminated with status 1 (0 minute(s), 12 second(s))
=======================================================================

Я не привожу код программы, потому что он есть по адресу https://www.opennet.me/docs/RUS/gtk_plus/x405.html. Программу я вычитал и у меня ошибок нет. Да и компилятор не выдает никаких ошибок.

С уважением, Рамиль.

3DES через OpenSSL на чистом С , !*! kolyanchi, (C/C++) 26-Дек-17, 20:02  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужна функция 3DES на чистом С, программирую на Ubuntu. Буду рад любой помощи!
Добавление IP адресов и имен в переменную из файла, !*! Saamuel, (Shell скрипты) 26-Дек-17, 12:36  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте,

Необходимо написать скрипт который бы добавлял параметры в переменные из файла.
Скрипт добавляет ДНС записи в яндекс.

#!/bin/bash

NAME="100"
DOMAIN="domain.ru"

ip1="192"
ip2="168"
ip3="1"
ip4="224"

let "ipM = $ip4 + 1"
let "ipC = $ip4 + 2"

M=`echo $ip1.$ip2.$ip3.$ipM`
NAME_M="$NAME"mk

C=`echo $ip1.$ip2.$ip3.$ipC`
NAME_C="$NAME"cs

curl -H "PddToken: 00000000000000000000000" -d "domain=$DOMAIN&type=A&subdomain=$NAME_M&ttl=14400&content=$M" "https://pddimp.yandex.ru/api2/admin/dns/add"
curl -H "PddToken: 00000000000000000000000" -d "domain=$DOMAIN&type=A&subdomain=$NAME_C&ttl=14400&content=$C" "https://pddimp.yandex.ru/api2/admin/dns/add"

В таком виде скрипт отрабатывает нормально для одного филиала. Но проблема в том что таких филиалов более 500.

Помогите доработать скрипт чтоб подставлялись значения для переменных NAME и IP из файла.

Содержимое файла NAME:
100;192.168.0.1/24
101;192.168.1.1/24
102;192.168.2.1/24
103;192.168.3.1/24
104;192.168.4.1/24

Прошу улучшить скрипт для curl, !*! tochki, (Shell скрипты) 09-Дек-17, 21:03  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Хочу отправлять многострочные запросы на сайт, например яндекс. Мой скрипт:

SITE="http://ya.ru";
cat - > ~/input;
curl --data "text=$(cat ~/input)" $SITE;

Вопрос: как закончить редактирование многострочного текста по нажатию ctrl+d -- сразу в запрос curl без помощи файла ~/input (и без использования cat)?

Перефразирую вопрос: команда cat - > ~/input сохраняет многострочный текст в файл. Как сделать чтобы скрипт cat_curl отправлял многострочный текст на сайт?

cat_curl - > www.ya.ru

PS cat привел в качестве примера, потому что уже привык к комбинации ctrl+d

значение переменной в строковом массиве, !*! creapt, (C/C++) 02-Дек-17, 23:17  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Подскажите пожалуйста.
С++

char OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"};

например: нужно присвоить значение 100 переменной OCR2 (OCR_sh[0]) и в дальнейшем изменять ее значение
OCR_sh[0]=100;
Как, какую функцию применить?

посчитать количетсво определенного слова в файле, !*! boxerwba, (C/C++) 01-Дек-17, 19:25  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main()
{   FILE *myfile;

        int k=0;
        char name[100];
        char word[20];

        printf("Enter name of file: ");
        scanf("%s", name);
        if ((myfile = fopen(name, "r")) == NULL)
        {
         puts ("File is not found");
         exit(0);
        }


        printf("Enter word: ");
        scanf("%s", word);

       return 0;
    }

Помогите дописать код
нужно посчитать количество слова, которое записано в переменной «word», в файле «name»
например ввели слово «dog»
посчитать сколько раз оно повторяеться в файле «new»

Спасибо за внимание и советы!

Проверить на ввод символов в переменную, !*! Дима, (Shell скрипты) 29-Ноя-17, 14:01  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Программа суммирует два числа и проверяет пустая ли переменная но мне нужно исключить ввод букв тд и тп Если в переменную будет введено хоть одна буква, то нужно выводить ошибку и выходит со скрипта

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

прошу помощи и совета

#!/bin/bash
echo -n "Enter first number: "
read n1
if [ -z "${n1// /}" ]
then
    echo "You didn't enter number"
    exit
fi
echo -n "Enter second number: "
read n2
if [ -z "${n2// /}" ]
then
    echo "You didn't enter number"
    exit
fi
sum=$(($n1 + $n2))
echo "The sum of two numbers="$sum

Использование перенаправлений и конвейера (программного канала), !*! iop, (Shell скрипты) 30-Окт-17, 15:24  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Помогите пожалуйста с заданием,хотя бы начать.
В созданном текстовом файле оставить в каждой строке не более 2-х слов. Остаток перенести в следующую строку. Если вторая строка в паре оказывается пустой - печатать в ней символ '='.
Нужно ли здесь использовать cut и как это сделать?
GREP, найти строки содержащие <шаблон1>, кроме <шаблон2>, !*! Assoll, (Shell скрипты) 27-Окт-17, 10:07  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет

грепаю maillog:
grep -c "imap-login: Login: user=<.*\@domain.ru>, method=PLAIN, rip=.*," /var/log/mail/maillog

всё замечательно,
теперь пытаюсь отсечь строки с внутренними адресами:
grep -c "imap-login: Login: user=<.*\@domain.ru>, method=PLAIN, rip=.*," /var/log/mail/maillog | grep -v "rip=192.168.2"

ничего не меняется.

что я делаю не так?
спасибо

чайниковский вопрос про tty  , !*! Alex_S, (Демоны, Сигналы) 26-Окт-17, 10:30  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
сильно не пинайте...

Есть древняя коробочка, внутри линукс 2.4 и busybox.
Ядро грузится, через строку в /etc/inittab стартует agetty  для  ttyS0, которая запускает логин скрипт, который вместо собссно логина просто стартует некую программку. К com-порту можно подцепить терминал и пообщаться с программкой - у нее текстовый интерфейс. Но при разрыве сеанса она, естественно, срубается SIGHUPoм и скрипт ее перезапускает ( или не скрипт а вообще  agetty респаунится  - ну неважно)


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

Я мог бы программку сделать демоном - но тогда она перестает быть интерактивной. Собстно вопрос  - это вообще технически возможно , отцепить stdin/stdout программки при закрытии сеанса и прицепить их обратно при новом подключении ?


Как работает fork(), !*! rdzxx, (Процессы, Треды, RPC) 14-Окт-17, 11:39  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит развоение процеса в точке вызова. Но вот что под копотом непонятно. С памятью понятно там используется 'copy on write' механизм, но вот что с кодом? Откуда потомок берет код?


sysctl редактируем, !*! Alex, (Shell скрипты) 12-Окт-17, 16:56  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
shell freebsd (/bin/sh)

В установочном скрипте надо отредактировать
/etc/sysctl.conf

- если строка задокументирована, то убрать #
- если нету, добавить
- если не то значение, изменить.

Я делаю через sed с копирование во временный файл.

Не получается красивый читабильный код для всех ветвей.
Хочется наглядности.
Кто как делает?



Bash кириллица, !*! Alex, (Shell скрипты) 20-Сен-17, 16:30  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
простая операция сравнения:

if [ $dd -eq "1" ] ;
then
  echo "ura" ;
fi

если dd равна 2, то все работает, а если "п"
то получаем:
integer expression expected

что с этим можно поделать ?

Почему не хватает привелегий для setreuid?, !*! belmondo, (Разное) 17-Сен-17, 12:53  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
написал небольшой кодик асм:
section .text
global _start
_start:
xor eax, eax
mov al, 0x71
xor ebx, ebx
xor ecx, ecx
xor esi, esi
xor edi, edi
syscall
mov al, 0x3c
syscall
который дропает ошибку:
$sudo nasm -static -f elf64 exit.asm && sudo ld exit.o -o exit && sudo ./exit; strace ./exit
[sudo] пароль для belmondo:
execve("./exit", ["./exit"], [/* 61 vars */]) = 0
setreuid(0, 0)                          = -1 EPERM (Operation not permitted)
strace: [ Process PID=7703 runs in x32 mode. ]
syscall_18446744072635809596(0, 0, 0, 0, 0, 0) = -1 (errno 38)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xffffffffffffffda} ---
+++ killed by SIGSEGV (core dumped) +++
Ошибка сегментирования (сделан дамп памяти)
Но код с такой же сутью на плюсах ее не дропает:
#include <unistd.h>
#include <iostream>
using namespace std;

int main() {
    cout << setreuid(0,0) << endl;
    return 0;
}
$ g++ -o check check.cpp && sudo ./check
0
В чем может быть проблема?

Не могу додумать алгоритм, !*! Перспективный, (Shell скрипты) 17-Сен-17, 08:52  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Привет. Есть файл полученный awk '{print $3" "$8}' /var/log/access.log.1|sort|uniq -c >src
30 127.0.0.1 u1
23 192.168.0.2 u1
52 192.168.0.2 u3
106 192.168.0.2 u2
7 192.168.3.3 u2
36 192.168.3.3 u4

Хочу вывести строки уникальные по второму полю (по ip), но где цифра в первом поле больше.

Пока я застрял на таком. Двойным перебором сравниваю построчно, и если 2е поле совпадает и
1е поле больше, то печатаю строку. Для одинаковых выведенных строк к конце будет sort -u

IFS=$'\n'
for a in `cat src`; do
# $b нужно чтобы взять 2е поле. пока не научился взять 2е поле сразу из $a
    b=${a% *}
    for i in `cat src`; do
        [ "$a" = "$i" ] && continue
        j=${i% *}
        if [ "${j#* }" = "${b#* }" ] && [ "${i%% *}" -gt "${a%% *}" ];then
            echo "$i"
        fi
    done
done

#./test123.sh|./123.sh |sort -u
106 192.168.0.2 u2
36 192.168.3.3 u4
52 192.168.0.2 u3

хотя по идее должен был получить
106 192.168.0.2 u2
36 192.168.3.3 u4
30 127.0.0.1 u1

Подскажите, где доделать алгоритм или сразу неверно начал решать и надо переделать?

Странно сортирует MYSQL, !*! REVERT_BUILD, (MySQL) 15-Сен-17, 02:24  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Вот запрос
SELECT * FROM journal WHERE ( error like '%timeout%' AND date >= STR_TO_DATE('01.09.2017 00:00:00', '%d.%m.%Y %H:%i:%s') AND date <= STR_TO_DATE('14.09.2017 23:59:59', '%d.%m.%Y %H:%i:%s') ) ORDER BY liftid ASC LIMIT 0, 50

А странность заключается в том, что данные он не сортирует.
Что я делаю не так? Может я чего-то не знаю?

Звук Bash, !*! Alex, (Shell скрипты) 13-Сен-17, 13:40  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Подскажите, как в скрипте можно пикнуть в наушники.
Скажем 600Гц 1сек.
Спасибо.
Perl и символ $, !*! Перспективный, (Perl) 12-Сен-17, 18:57  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Привет, у меня не получается замена с символом $ на perl 5.26.0

вот так я делаю на sed
echo "aa bb$ cc"|sed -E 's|\S+\$|XXX|g'
aa XXX cc

а вот на perl
perl -E 'my $p="aa bb$ cc"; $p =~ s/\S+\$/XXX/g;  say "$p"'
aa bb

варианты с \Q \E не работают тоже. Как тут правильно делается?

Оставить в директории только три последние, по списку, файла, !*! universite, (Shell скрипты) 22-Авг-17, 01:02  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Оставить в директории только три последние, по списку, файла

Вот список файлов:


# ls vzdump-qemu-502-*.log
vzdump-qemu-502-2017_08_11-03_15_02.log vzdump-qemu-502-2017_08_14-03_15_03.log vzdump-qemu-502-2017_08_17-03_15_01.log vzdump-qemu-502-2017_08_20-03_15_03.log
vzdump-qemu-502-2017_08_12-04_20_32.log vzdump-qemu-502-2017_08_15-03_15_02.log vzdump-qemu-502-2017_08_18-03_15_02.log vzdump-qemu-502-2017_08_21-03_15_02.log
vzdump-qemu-502-2017_08_13-03_15_03.log vzdump-qemu-502-2017_08_16-03_15_03.log vzdump-qemu-502-2017_08_19-04_22_59.log

Нужно оставить только эти три файла:


# ls vzdump-qemu-502-*.log | tail -3
vzdump-qemu-502-2017_08_19-04_22_59.log
vzdump-qemu-502-2017_08_20-03_15_03.log
vzdump-qemu-502-2017_08_21-03_15_02.log

Остальные удалить.

Вижу алгоритм:
1) переименовать файлы, оставленные жить.
2) удалить весь список файлов к удалению
3) переименовать обратно файлы

Хочется по-проще...

 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру