LINUX.ORG.RU

Избранные сообщения gedisdone

Вычитание чисел в строках, используя awk, perl или другой однострочник

Форум — General

Доброго времени суток!

Подскажите, пожалуйста, каким способом можно решить следующую задачу с помощью однострочника?

Задача в том, чтобы вычитать значение из первого столбца предыдущей стройки из первого столбца текущей строки и помещать его перед текущей строкой.

Есть файл, вида:

$ cat blabla 
13:06:27.578195 blablabla
13:06:27.578243 bla bla
13:06:27.578271 bla
13:06:27.578337 zzz
13:06:27.578372 zzz zzz zzz
13:06:27.578372 zzz zzz zzz
13:07:02.224100 aaa bbb ccc

Необходимо, используя любую команду(ы) в одну строку получить вывод вида:

0 13:06:27.578195 blablabla
0.000048 13:06:27.578243 bla bla
0.000028 13:06:27.578271 bla
0.000066 13:06:27.578337 zzz
0.000035 13:06:27.578372 zzz zzz zzz
34,645728 13:07:02.224100 aaa bbb ccc

Кажется, что это можно сделать с помощью awk, но у меня не получилось.

Спасибо за любую помощь!!

 ,

ameame2021
()

Какой формат анализировать в консоли: CSV, XML или JSON?

Форум — General

Здравствуйте. Подскажите, какой формат удобней анализировать в консоли: CSV, XML или JSON?

На данный момент у меня есть минимальный опыт работы парсинга, а точнее анализа с помощью регулярных выражений, формата CSV. Но эти же данные (выгрузка из 1С) могут предоставить в формате XML и JSON.

О XML я читал в книге Дмитрия Котерова «PHP5 на практике» лет так 13 назад, до практики дело не дошло. А о JSON имею посредственное представление т.к. правил пару конфигов.

Стоит ли вообще смотреть в сторону XML и JSON если мне нужно только анализировать в консоли поля БД на несоответствие регулярному выражению т.к. эти форматы древовидные в отличии от CSV.

 , , ,

Gnom7
()

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

Форум — General

Да я один из тех, кто смотрит на клавиатуру, когда печатает. Это обсуждать не будем. Нужен скрипт/прога которая по заданной клавише будет конвертировать раскладку текущей строки. И ещё по ctrl (именно ctrl и это не обсуждается) переключать языки.

 

KOT040188
()

Самопроизвольно запускается второй жесткий диск

Форум — Admin

Приветствую всех. Подскажите пожалуйста, нуот асус K95V с двумя жесткими дисками, ssd где стоит система и hdd где хранятся файлы с ф.с ntfs. Система opensuse LEAP 15.2 в простоее самопроизвольно запускается hdd. Как определить что его запускает? До этого стоял минт и дебиан и такого не наблюдалось. И это одна из причин была почему ушел с виндовс.

 ,

AndreyTM
()

mail.ru помогите кто может

Форум — Talks

Сори за оффтоп, но тут может есть кто сведующий. У жены внезапно перестал работать ящик на мейле (в котором миллион всего лежит), просто выкинул из аккаунта и говорит, что такого больше нет. Помощь мейла предлагает писать в спортлото, слов кроме мата нет. Не знаете, можно что-нибудь сделать с этим?

ЗЫ. Переезд на другой сервис уже в процессе, но терять то что там есть не очень здорово.

 ,

hrum
()

График с русской легендой в eps из gnuplot

Форум — Desktop

Добрый вечер, ЛОР.

Встала задача вставить в текст иллюстрации-графики, построенные по файлам CSV. Поскольку редакция всё равно требует иллюстрации отдельными файлами (допустимые форматы: eps, gif, tiff, jpg), я не стал углубляться во встроенные средства рисования графиков LaTeX и решил подготовить их в gnuplot.

Из перечня форматов выбрал eps, поскольку gnuplot умеет его писать, а pdflatex — читать.

Скрипт для одного из графиков gnuplot в UTF8:

set encoding utf8                                                                                                                                
set datafile separator ','                                                                                                                       
set term "postscript" eps                                                                                                                       
set output "st-mt.eps"                                                                                                                          
plot "st.csv" using 1:2 with lines ti "1 поток", \                                                                
     "mt.csv" using 1:2 w li lw 3 lt 0 ti "8 потоков"                                                           
pause -1                                                                                                                                         

График нарисован, но русские буквы в легенде «съелись», видны только цифры 1 и 8.

В итоге я вместо EPS вывел в PNG, потом GIMP-ом вручную перевёл каждый PNG в EPS и уже их вставил в документ LaTeX. Задача решена, но осадочек остался.

Это глюк gnuplot или?..

gnuplot 5.0.6, Fedora 29.

 ,

hobbit
()

Буква Л=?

Форум — General

Объясните новичку, что с буквой Л-большое:

$ nano -w Лето &
[3] 3299

$ ps axww | grep 3299
 3299 pts/0    T      0:00 nano -w ?ето

Проверялось на gentoo, Ubuntu 18.04.4 LTS bionic
Для ubuntu:

$ locale 
LANG=ru_RU.UTF-8
LANGUAGE=ru
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

 , ,

novus
()

Нюансы запуска процессов через system/exec

Форум — Development

Случай #1:

Как известно, при вызове exec происходит завершение всех нитей вызывающего кроме той, что вызвала system. При этом открытые дескрипторы клонируются в новый процесс (если у них не указан флаг FD/SOCK_CLOEXEC).

Представим следующую гипотетическую ситуацию:

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

Положим, что так как эта строка может содержать переменные среды, какие-то выражения подстановки и shell-related команды и синтаксис программист, написавший эту программу посчитал, что самым оптимальным образом будет запускать эту строку с помощью команды system, которая не требует списка аргументов, как семейство exec*. Плюс, так как system «под капотом» вызывает sh -c ..., то автоматически подставятся переменные, а shell-related команды и синтаксис будут работать как нужно. Так вот, глянем исходник system, например, для glibc:

<Сначала хотел показать исходник glibc, но тут слишком дофига получается кода, поэтому сжато: clone + exec + waitpid, кстати ман говорит про fork + exec + waitpid, что не совсем то же самое>

При вызове clone/fork происходит копирование открытых дескрипторов, которые наследует процесс, который запустил system. Предположим, что кто-то передал для запуска строку, содержащую запуск программы (назовем ее evil), выполняющей следующие действия:

if (fork() != 0)
    exit(0);

Что превращает ее в отвязанного от родителя демона. Однако этот fork тоже наследует все открытые хэндлеры, что приводит нас к тому, что этот демонутый процесс evil получил копию всех открытых хендлеров супервизора, однако стал от него отвязан (system вернул 0, супервизор считает, что работа выполнена).

Теперь предположим, что это супервизор с управлением по сети. То есть супервизор открывает серверный сокет и слушает команды, которые ему приходят извне. Не будем обсуждать защищенность передачи или канала связи, всё можно сломать, суть сейчас не в этом. Суть в том, что на момент запуска system супервизор владел открытым серверным сокетом (!). Да, по совести и по правилам при его создании ему нужно было выставить SOCK_CLOEXEC, но скажем честно, кто своим серверным сокетам выставляет флаг, о котором даже в мануалах на socket из 153 строк отдано 2 (!), т.е. всего 1.3%?

Таким образом, пройдя через всю цепочку форков копия серверного сокета оказывается у демонутого evil:

super      9053 alex    3u  IPv4 11458560      0t0  TCP *:34002 (LISTEN)
super      9053 alex    4u  IPv4 11464960      0t0  TCP localhost:34002->localhost:41308 (ESTABLISHED)
evil       9257 alex    3u  IPv4 11458560      0t0  TCP *:34002 (LISTEN)

Положим, что процесс супервизора по какой-то причине завершился. Ну, например, выполнив свою работу или по ошибке. И теперь начинается самая мякотка. Ведь в системе уже открыт слушающий на порту 34002 сокет! И принадлежит он программе evil! Таким образом она может прикинуться сервером, а супервизор, в свою очередь, не сможет вернуть свой сокет, поэтому система не даст ему открыть второй сокет на том же порту без REUSEPORT:

SO_REUSEPORT (since Linux 3.9)
              Permits multiple AF_INET or AF_INET6 sockets to be bound to an identical socket address.  This option must be set on each socket (including the first socket) prior to calling bind(2) on the socket.  To prevent port hijacking, all of  the  pro‐
              cesses binding to the same address must have the same effective UID.  This option can be employed with both TCP and UDP sockets.

В общем случае, когда какая-то программа-сервер запускается и получает ALREADYINUSE то надо бы сказать мол, «не не могу работать, наверное другая копия меня уже запущена» и выключиться (ну или ожидать его освобождения).

Мы же не хотим port hijacking, верно? А вот все равно профукали. Ну и теперь evil может делать что угодно. Может получать данные от клиентов, может им даже что-то отвечать,может получать список команд для запуска и запускать вместо них что угодно, сообщая наверх что всё хорошо.

Собственно, вопрос #1: почему на серверный сокет автоматически при создании не вешается FD_CLOEXEC?

Случай #2:

Мы - супервизор, запускающий программы, забудем про сетевое взаимодействие, мы сами знаем, что нам запускать. Запускают нас от root, для того, чтобы мы могли делать какую-то очень важную вещь, ну, например, читать какой-то root-owned файл:

-rw-------  1 root root        7 июн  5 23:51 rootonly

Изобразим супервизор упрощенно:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>       
#include <sys/wait.h>
#include <errno.h>       
#include <pwd.h>


static void dowork(void) {
    int pid = fork();
    int status;
    switch (pid) {
        case -1 : exit(EXIT_FAILURE);
        case 0  :
            if (setuid(1000) == -1) {
                printf("u:%u\n", errno);
            }
            if (seteuid(1000) == -1) {
                printf("e:%u\n", errno);
            }
            execl("./hijack_evil.elf", "./hijack_evil.elf", NULL);
            printf("cannot run\n");
            exit(EXIT_FAILURE);
        default :
            wait(&status);
    }
}

int main(void) {
    FILE * fileroot = fopen("/tmp/rootonly", "r");
    printf("I am %s, #%u/%u\n", getpwuid(getuid())->pw_name, geteuid(), getuid());
    
    dowork();
    
    fclose(fileroot);
    return 0;
}
gcc hijack_root.c -o hijack_root.elf

И программу, которой нельзя давать рутовые права:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>       
#include <sys/wait.h>
#include <pwd.h>

int main(void) {
    printf("I am %s, #%u/%u\n", getpwuid(getuid())->pw_name, geteuid(), getuid());
    // my stdin is 0, stdout is 1, stderr is 2, therefore...
    char buf[1024];
    read(3, buf, 1024);
    printf("%s\n", buf);
    return 0;
}
gcc hijack_evil.c -o hijack_evil.elf

Проверяем, что просто так файл прочитать нельзя:

alex@ThinkPad-L560:~$ cat /tmp/rootonly 
cat: /tmp/rootonly: Отказано в доступе
alex@ThinkPad-L560:~$ echo $USER/$UID
alex/1000

И запускаем супервизор:

$ sudo ./hijack_root.elf 
I am root, #0/0
I am alex, #1000/1000
SECRET

При этом мы не можем ставить FD_CLOEXEC на каждый хендлер, открываемый в супервизоре, потому что он может понадобиться для целей супервизора в его форках. Соответственно вопрос #2: почему внешние программы, запускаемые через exec наследуют хендлеры? Ведь очевидно, что это может быть использовано только для «угона» файлов

 ,

PPP328
()

Запись pid процесса в логах iptables

Форум — General

Всем привет, подскажите по такому вопросу - хочу чтобы все входящие и исходящие соединения iptables выводились в логи, причем с pid'ом процесса, создал в iptables отдельные цепочки в которые передаются цепочки INPUT и OUTPUT, к этим цепочкам применяется действие LOG

:WALL-FORW - [0:0]
:WALL-INPUT - [0:0]
:WALL-OUTPUT - [0:0]
-A INPUT -j WALL-INPUT
-A INPUT -j LOG -m owner --pid-owner 0:65535 --log-level debug --log-prefix "CHAIN=WALL-INPUT-REJECT "
-A FORWARD -j WALL-FORW
-A FORWARD -j LOG  -m owner --pid-owner 0:65535 --log-prefix "CHAIN=WALL-FORW-REJECT "
-A OUTPUT -j WALL-OUTPUT
-A OUTPUT -j LOG  -m owner --pid-owner 0:65535 --log-prefix "CHAIN=WALL-OUTPUT-REJECT "

Но в /var/log/syslog я потом наблюдаю строчки следующего вида:

May 24 20:00:00 user kernel: [16316.803782] CHAIN=WALL-OUTPUT-REJECT IN= OUT=wlan0 SRC=192.168.1.1 DST=210.130.149.177 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=15470 DF PROTO=TCP SPT=443 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0 

Что только ни пробовал но PID процесса в логи не попадает, как заставить iptables его туда выводить?

 

barmaley99
()

Игровые топы. По версии меня

Форум — Games

Самые лучшие, при этом крутые, и вообще и всё остальное игры всех времён и народов, Top6. За скобки выносится то, что выше этого топа - это Doom, Mario и Tetris.

1. The Secret of Monkey Island
2. Civilization
3. Space Quest 5
4. Duke Nukem 3D
5. Dune II
6. X-COM: Enemy Unknown


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

1. Simearth
2. Street Rod
3. Horde
4. Defender of the Crown
5. It come from the desert
6. Mad TV

Хотел сюда Sundog добавить, но вроде бы на него современный ремейк под названием FTL вышел, знач не сильно забытый


Самые крутые саундреки из игр:

1. Monkey Island 2: Le Chuck Revenge (а также mi1 и 3)
2. Warcraft II : тамтатмаааааамтамтамтамтам
3. Duke 3D : туду-ту туду-ту тудутууууууууу
4. Need for Speed Underground
5. The Battle for Wesnoth
6. Red Alert III


Срыв башки:

0. Doom
1. The Elder Scrolls II: Daggerfall - размер графически выполненного мира и количество багов. ну или Minecraft, я их не различаю
2. The 7th Guest
3. Blade Runner
4. Carmageddon
5. Heroes of Might and Magic II


Самые не оправдавшие ожидание игры:

1. Omikron


Самые лучше игры, не вошедшие ни в один из этих топов:

1. Pizza Tycoon

 

buratino
()

Ищу клавиатуру с BigAss Enter

Форум — Linux-hardware

Аналог mitsumi classic с железным основанием :

  1. Big Ass Enter
  2. Длинный ход клавиш
  3. Короткий Backspace (клавиша "|" рядом с Backspace)
  4. Функциональные клавиш не «липнут» к ряду цифр

Сейчас есть старенькая sven comfort 3050 - она както напоминает желаемое, но подраздолбалась, а новые их не производят На «авито» брать не вариант - убитые скорее всего будут

Попробовал новую sven s300 - неудобно (пишу на ней), ход короче, клавиши гуляют, ентер хуже, мне неудобно она

В магазах ничего не вижу, только геймеровское с подсветкой, хвалимое ютуберами, тьфу срамота

 

x905
()