По этой причине я написал интерактивный скрипт-оболочку для рабочих столов Unix, и после года использования я рад поделиться им!
Сделано с помощью byzanz
, gifsicle
, xdotool
, а скрипт написан на php
.
Пример вывода:
[1020px, без изменения размера gif ширина 1020px, 70 секунд, 50 цветов, 65Kb ]
Он предоставляет хорошие сжатые GIF-файлы и является хорошей демонстрацией для этого вопроса.
Это довольно простая база, которую вы можете взломать.
Функциональные возможности:Запись Gif в положениях мыши или в полноэкранном режиме, изменение размера, сжатие, сжатие цвета, реверс/объединение, загрузка giphy.com curl.
Чтобы начать 10-секундную запись GIF:gif 10
Для многократной записи с одними и теми же параметрами:gif !
Для запуска полноэкранной 5-секундной GIF-записи:gif 5 --fullscreen
Сценарий запущен, приятно записывает себя:
[ 45 секунд, ширина 645 пикселей, полноцветный режим, 976 КБ ]
Полный скрипт 5 КБ:
#!/usr/bin/php
php xdotool byzanz gifsicle curl
#@ https://webdev23.github.io/gif/gif
echo "Usage:./gif [time in seconds|!] [--fullscreen|-f]\n";
echo "--------------------------------------------------\n";
echo "Gif recorder tool\n";
echo "gif ! to call back last settings\n";
echo "Please move your mouse at the top left corner point\n";
echo "of the wanted gif area. Then press enter.\n";
echo "\n";
#~ Nico KraZhtest | 05/2017 | https://github.com/webdev23/gif
#~ Create fluid GIF's fastly
#~ You can set the gif record time as argument:./gif 10
#~ Default record time is 1 seconde, or set it now:
$recordTime = 1;
#~ ----------------
$t = @$argv[1];
$x1;$y1;$x2;$y2;$gw;$gh;$defc;$rw;
if (!isset($argv[1]) || @$argv[1] === "!") {
$t = $recordTime;
}
if (@$argv[1] === "!") {
$pos = file_get_contents("./.config/gif/pos");
$pos = explode("\n", $pos);
$x1 = $pos[0];
$y1 = $pos[1];
$x2 = $pos[2];
$y2 = $pos[3];
$gw = $pos[4];
$gh = $pos[5];
$t = $pos[6];
@$GLOBALS['defc'] = $pos[7];
@$GLOBALS['$rw'] = $pos[8];
#~ echo $x1." ".$y1." ".$x2." ".$y2." ".$gw." ".$gh." ".$t." ".$defc." ".@$rw;
}
else if (@$argv[2] === "fullscreen" || @$argv[2] === "--fullscreen" || @$argv[2] === "-f" || @$argv[2] === "f") {
echo "############\nStarting fullscreen record\n";
$fs = system("xdpyinfo | grep 'dimensions:'");
echo "\n";
$fs = explode(" ",$fs);
echo $fs[1];
$fs = explode(" ",$fs[1]);
echo $fs[0];
$fs = explode("x",$fs[0]);
echo $fs[0]."\n";
echo $fs[1];
$x1 = "0";
$y1 = "0";
$x2 = "fs";
$y2 = "fs";
$gw = $fs[0];
$gh = $fs[1];
$t = $argv[1];
system("mkdir -p./.config/gif/");
system("cd./.config/gif/ && \
echo '$x1\n$y1\n$x2\n$y2\n$gw\n$gh\n$t\n\n\n\n' > pos");
}
else {
$stdin = fopen('php://stdin', 'r');
$response = rtrim(fgets(STDIN));
$p1 = system("xdotool getmouselocation");
$pos1 = explode(" ",$p1);
$x1 = $pos1[0];
$x1 = explode(":",$x1);
$x1 = $x1[1];
echo "X1: ".$x1;
$y1 = $pos1[1];
$y1 = explode(":",$y1);
$y1 = $y1[1];
echo " Y1: ".$y1;
echo "\nNow move your mousse at the bottom right corner.\nThen enter\n";
$stdin = fopen('php://stdin', 'r');
$response = rtrim(fgets(STDIN));
$p2 = system("xdotool getmouselocation");
$pos2 = explode(" ",$p2);
$x2 = $pos2[0];
$x2 = explode(":",$x2);
$x2 = $x2[1];
echo "X2: ".$x2;
$y2 = $pos2[1];
$y2 = explode(":",$y2);
$y2 = $y2[1];
echo " Y2: ".$y2;
$gw = ($x2 - $x1);
echo "\nGif width: ".$gw;
$gh = ($y2 - $y1);
echo "\nGif height: ".$gh;
echo "\n".$x1." ".$y1." ".$x2." ".$y2." ".$gw." ".$gh." ".$t."\n";
system("mkdir -p./.config/gif/");
system("cd./.config/gif/ && \
echo '$x1\n$y1\n$x2\n$y2\n$gw\n$gh\n$t\n\n\n\n' > pos");
}
$unix = date_timestamp_get(date_create());
echo "\n".$unix." | Starting ".$t."s gif record\n";
@system("byzanz-record \
-v \
--duration=$t \
--x=$x1 \
--y=$y1 \
--width=$gw \
--height=$gh \
~/Pictures/gif$unix.gif");
$named = "gif".$unix;
echo "Saved as ~/Pictures/".$named.".gif\n";
echo "\nOptimize | How many colors to keep? (default 100, max 256) \n";
if (@$argv[1] === "!"){
$pos = file_get_contents("./.config/gif/pos");
$pos = explode("\n", $pos);
$defc = $pos[7];
}
if (!isset($defc)){
$defc = readline("Colors: ");
}
if (empty($defc)){
$defc = "100";
}
echo "\nKeeping ".$defc." colors\n";
system("gifsicle --verbose -i ~/Pictures/$named.gif -O5 --colors=$defc -o ~/Pictures/$named\_reduced.gif");
echo "\nOptimize | Resize width in pixels (default 360px) \n";
if (@$argv[1] === "!"){
$pos = file_get_contents("./.config/gif/pos");
$pos = explode("\n", $pos);
$rw = $pos[8];
}
if (!isset($rw)){
$rw = readline("Width : ");
}
if (empty($rw)){
$rw = "360";
}
echo "\nResized by ".$rw." pixels width\n";
@system("gifsicle --verbose -i ~/Pictures/$named\_reduced.gif --resize-width $rw -o ~/Pictures/".$named."_optimized.gif");
$opt = "~/Pictures/".$named."_optimized.gif";
usleep(5000000);
echo "\nSpecial | Reverse and merge?\n";
system("xdg-open ~/Pictures/".$named."_optimized.gif > /dev/null");
if (@$argv[1] === "!"){
$pos = file_get_contents("./.config/gif/pos");
$pos = explode("\n", $pos);
$rev = $pos[9];
}
if (!isset($rev)){
$stdin = fopen('php://stdin', 'r');
$rev = rtrim(fgets(STDIN));
$rev = "1";
}
if (!isset($rev)){
$rev = "0";
}
@system("cd./.config/gif/ && sed -i '8s/.*/$defc/' pos");
@system("cd./.config/gif/ && sed -i '9s/.*/$rw/' pos");
@system("cd./.config/gif/ && sed -i '10s/.*/$rev/' pos");
if ($rev === "1"){
@system("gifsicle \
-i ~/Pictures/$named\_reduced.gif \
'#-2-1' \
-o ~/Pictures/".$named."_reversed.gif");
$inv = "~/Pictures/".$named."_reversed.gif";
usleep(400000);
@system("gifsicle \
-i ~/Pictures/$named\_reduced.gif \
--append $inv \
--resize-width $rw \
-o ~/Pictures/".$named."_merged.gif");
usleep(3000000);
system("xdg-open ~/Pictures/".$named."_merged.gif > /dev/null");
}
echo "\n####################";
echo "\nUpload to giphy.com?\n";
$stdin = fopen('php://stdin', 'r');
$response = rtrim(fgets(STDIN));
$m = "~/Pictures/".$named."_merged.gif";
$f = system("du -h $m");
$f = explode(" ",$f);
$f = $f[1];
$www = system('curl \
--progress-bar \
-v \
-F "file=@'.$f.'" \
-F "api_key=dc6zaTOxFJmzC" \
"http://upload.giphy.com/v1/gifs"');
$www = json_decode($www);
echo "\n\nhttps://i.giphy.com/".$www->data->id.".gif\n";
echo "\nThanks YOU!\n";
Возможность реверса/слияния для создания художественных материалов.
Оригинал (435 КБ)
Перевернутое, объединенное:(826 КБ)
Для установки с помощью phi:
php <(curl https://webdev23.github.io/phi/phi) install https://webdev23.github.io/gif/gif
Полный экран:
[1920 *1080px, gif 400px, 50 секунд , 100 цветов, 2Mb ]
Источник,с некоторыми дополнительными пояснениями и потенциальными обновлениями :https://github.com/webdev23/gif
Если ваш брандмауэр использует встроенный -брандмауэр ядра, тогда sudo iptables -n -L
выведет список всего содержимого iptables. Если нет брандмауэра, вывод будет в основном пустым.
Возможно, на вашем VPS уже установлено ufw
, поэтому попробуйте ufw status
. ufw
является упрощенным «фасадом» для брандмауэра ядра (, поэтому то, что установлено с ним, также отображается в выводе iptables
), но его намного проще понять и управлять им, поэтому я бы рекомендовал его.
В последних версиях Linux есть команда брандмауэра -cmd. Беги
firewall-cmd --state
Даст вам ответ. Например
# firewall-cmd --state
running
Это означает, что брандмауэр активен.
Я бы посмотрел системные службы . Рекомендуется просмотреть настройку по умолчанию, поскольку могут быть службы, которые вам не нужны, и вы можете отключить их, чтобы повысить производительность и даже уменьшить поверхность атаки(для Например, может быть запущен веб-сервер, который вам не нужен ).
Чтобы просмотреть список всех загруженных служб в вашей системе, включая неработающие службы:
systemctl --type=service
Список активных услуг:
systemctl list-units --type=service --state=active
Если брандмауэр уже установлен, скорее всего, это один из этих :iptables, firewalld, ufw.
Внимание :служба может быть установлена в вашей системе, но отключена . Это означает, что пока он не запущен, он доступен. Например, возможно, что кто-то заменил брандмауэр по умолчанию другим брандмауэром (firewalld, ufw ), но iptables все еще установлен. Таким образом, тот факт, что iptables присутствует, не обязательно означает, что это активный брандмауэр.
И поскольку вы упомянули, что это VPS :в дополнение к встроенному -в Linux брандмауэру, VPS может находиться за каким-то аппаратным/программным устройством, которое действует как брандмауэр или обеспечивает смягчение последствий DDOS. Фильтрация восходящего трафика должна быть минимальной, если таковая имеется, но это то, что вы должны уточнить у веб-хостинга.
Я предполагаю, что у вас «неуправляемый» VPS, а это значит, что вы предоставлены сами себе и должны защищать себя. С другой стороны, «управляемый» VPS может иметь дополнительную защиту,когда он ориентирован на менее технически подкованных конечных пользователей.