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
после этого.
Эти команды обычно сводятся к одному системному вызову ioctl ()
, который сбросит (1-я команда) или установит (2-я команда) флаг IF_UP в сетевом драйвере.
Что происходит после этого, зависит от водителя. Он может включать или не включать сетевую интерфейсную плату. Он, вероятно, не будет «останавливаться» (выгружаться?) и «запускаться» (загружаться?) сам (но что-то еще в системе может быть, в ответ на то, что драйвер делает, например, код hotplug).
Драйвер, вероятно, удалит маршрут к интерфейсу, который он установил, когда интерфейс был первоначально запущен, и, вероятно, будет создано какое-то событие в зависимости от ядра (например, hotplug или udev и т.д.).
В Debian, вероятно, лучше использовать ifdown wlan0
и ifup wlan0
.
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 прекрасно умеет считывать теневой файл. У тебя, наверное, есть другая проблема.
Проблема заключается в заключении строк в текстовые поля в кавычки.
Используйте здесь -документ (, который позволит вам написать более красивое выражение):
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
Основная проблема заключается в том, что вы используете три одинарных -кавычки до и после каждой переменной вместо одной. Это не обязательно -на самом деле, это не сработает.
Вы получаете сообщение об ошибке с 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.