SQLite3 Запрос, сохраняющий синтаксическую ошибку IP-адреса

perl -p -e 's/\n$//; s/^$/\n\n/;'

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

perl -p -e 's/\n$//; s/^$/\n\n/;' file1 file2 file3 >outfile

Если после последнего абзаца нет пустой строки, это будет пренебрегать выводом новой строки в EOF. Достаточно легкая обработка; просто выполните команду echo > > outfile после этого.

-121--78712-

Эти команды обычно сводятся к одному системному вызову ioctl () , который сбросит (1-я команда) или установит (2-я команда) флаг IF_UP в сетевом драйвере.

Что происходит после этого, зависит от водителя. Он может включать или не включать сетевую интерфейсную плату. Он, вероятно, не будет «останавливаться» (выгружаться?) и «запускаться» (загружаться?) сам (но что-то еще в системе может быть, в ответ на то, что драйвер делает, например, код hotplug).

Драйвер, вероятно, удалит маршрут к интерфейсу, который он установил, когда интерфейс был первоначально запущен, и, вероятно, будет создано какое-то событие в зависимости от ядра (например, hotplug или udev и т.д.).

В Debian, вероятно, лучше использовать ifdown wlan0 и ifup wlan0 .

-121--89181-

Amazon Linux, клон RHEL, использует RPM для определения разрешений на установленные файлы. Для определения владельца можно использовать команду rpm -qf/etc/shadow . Это показывает, что /etc/shadow является частью пакета setup . Затем можно использовать базу данных RPM для запроса разрешений на этот файл. Существует программа rpmls в пакете rpmdevtools, которая делает это, но вы можете сделать это с помощью простых RPM, если вы знаете правильный синтаксис:

$ rpm -q --qf='[%-11{filemodes:perms} %-8{fileusername} %-8{filegroupname} %{filenames}\n]' setup | grep /etc/shadow
----------  root     root     /etc/shadow

Это показывает, что ожидается, что/etc/shadow метод 0000. Ты не должен пытаться изменить его на что-то другое. Стек PAM прекрасно умеет считывать теневой файл. У тебя, наверное, есть другая проблема.

0
07.03.2018, 14:18
2 ответа

Проблема заключается в заключении строк в текстовые поля в кавычки.

Используйте здесь -документ (, который позволит вам написать более красивое выражение):

sqlite3 database <<END_SQL
    UPDATE stats
    SET downspeed=$DN,
        upspeed=$UP,
        downlocalip="$downlocalip",
        downremoteip="$downremoteip",
        uplocalip="$uplocalip",
        upremoteip="$upremoteip"
    WHERE primkey=1
END_SQL

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


Из комментариев:

Выполнение этого через SSH:

ssh user@server sqlite3 database <<END_SQL
    UPDATE stats
    SET downspeed=$DN,
        upspeed=$UP,
        downlocalip="$downlocalip",
        downremoteip="$downremoteip",
        uplocalip="$uplocalip",
        upremoteip="$upremoteip"
    WHERE primkey=1
END_SQL
1
28.01.2020, 02:43

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

Вы получаете сообщение об ошибке с IP-адресом $downlocalip, потому что он фактически не заключен в кавычки, поэтому sqlite3 пытается интерпретировать его как число с плавающей запятой, а не как текстовую строку... а числа с плавающей запятой не имеют двух десятичных знаков точки в них.

Еще одна незначительная проблема заключается в том, что вы заключаете в одиночные -кавычки значения для целочисленных полей(downspeedиupspeed).

Попробуйте вместо этого:

sqlite3 /var/www/server/newserverstats.db "UPDATE stats SET downspeed=$DN,
   upspeed=$UP, downlocalip='$downlocalip', downremoteip='$downremoteip',
   uplocalip='$uplocalip', upremoteip='$upremoteip' WHERE primkey=1;"

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

Или используйте heredoc, поскольку в ответе Кусалананды -он более удобочитаем.

Кстати, если вы выполняете МНОЖЕСТВО операций sqlite, лучше написать сценарий на языке, в котором есть библиотечный модуль sqlite, поддерживающий значения-заполнители. например. и perl, и pythonимеют отличные библиотеки для работы с sqlite3 и другими базами данных SQL. Обычно вы можете писать код с использованием этих библиотек, так что они требуют мало, если таковые вообще имеются,изменения для работы с другими базами данных, такими как postgresql или mysql.

0
28.01.2020, 02:43

Теги

Похожие вопросы