В текущей папке
grep -Ril "\*\*\* SPAM \*\*\*" | xargs sed -i "s/\*\*\* SPAM \*\*\*/ /"
cd Maildir
grep -Ril "^From.*admin@mail\.ru.*$" | xargs cp -Rp -t ./Sent/cur
или
grep -Ril "^From.*admin@mail\.ru.*$" | xargs mv -t ./.Sent/cur
cp:
-p - сохранять владельца, временные метки и флаги доступа при копировании
-t, --target-directory - считать файл-назначения директорией и копировать файл-источник или директорию-источник в эту директорию с оригинальным именем;
-r, --recursive - копировать папку Linux рекурсивно;
grep:
-i - Игнорирует регистр символов при сравнениях.
-l - Выдает только имена файлов, содержащих сопоставившиеся строки, по одному в строке. Если образец найден в нескольких строках файла, имя файла не повторяется.
-R (или -r) - Ищем текстовое вхождение во всех файлах внутри директории и ее поддиректорий.
Получаем бренд по парт номеру детали
<?php
if ((include $_SERVER["DOCUMENT_ROOT"].'/services/include.php') != TRUE) {
exit;
}
if(isset($_POST['partnum'])) {
$s = preg_replace('/[^a-zа-яё\d]/ui', '',$_POST['partnum'] );
$json = BrandsGet($s);
$obj = json_decode($json);
error_log ("levam.php blyat` ".var_export($obj, true), 0);
$part = $obj->parts;
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
print json_encode($part);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/services/include.php
<?php
class ConfigClass {
public $levam;
public $db;
public $suppliers;
private function array2obj($data) {
$object = new stdClass();
foreach ($data as $key => $val) {
if (is_array($val)){
$val = $this->array2obj($val);
}
$object->$key = $val;
}
return $object;
}
public function __construct(Array $data ) {
foreach ($data as $key => $val){
if (is_array($val)){
$this->{$key} = $this->array2obj($val);
} else
$this->{$key} = $val;
}
}
}
if(file_exists($_SERVER["DOCUMENT_ROOT"].'/services/.config.php')){
$config = new ConfigClass(include ($_SERVER["DOCUMENT_ROOT"].'/services/.config.php'));
}
function get_content($URL){
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $URL);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function BrandsGet($part_number){
global $config;
return get_content($config->levam->urlAPI.$config->levam->VersionAPI.
'BrandsGet?api_key='.$config->levam->api_key.
'&part_number='.urlencode($part_number).
'&lang='.$config->levam->lang);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/services/.config.php
<?php
return array(
'levam' =>
array(
'api_key' => "001t1bly'bly'bly'bly'bly'bly'bly'bly'bly'bly'",
'VersionAPI' => 'v1/',
'urlAPI' => 'https://am-api.levam.net/',
'lang' => 'ru',
),
'db' =>
array(
'host' => 'localhost',
'database' => 'bitrix',
'login' => 'root',
'password' => 'password',
),
);
HTML
<div class="replacement " value="<?=$value->search_number.";".$value->brand_name?>">
<div class="daydeliverysupplier">
Доставка:
</div>
<div class="kolrest">
В наличии
</div>
<div class="price">
Цена
</div>
</div>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
JS
$(document).ready(function(){
var Arr='';
$(".replacement").each(
function( index, element){
$(this).on( "getprice"+index, function(event, data) { //добавить событие к каждому .replacement
if ( typeof(data) !== "undefined" && data !== null && Object.keys(data).length !== 0 ) {
if('price' in data){
$( this ).find(".price").text( Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB" }).format(Number(data['price']),) );
$( this ).find(".spinner-border").hide();
$( this ).find(".kolrest").text("На складе: " + data['kolrest'] + "шт." );
$( this ).find(".daydeliverysupplier").text("Доставка: " + (Number(data['daydeliverysupplier']) + 2) + "д." );
} else $( this ).hide();
}else $( this ).hide();
});
xData = $.ajax({
type: 'POST',
cache: false,
url: '/services/suppliers/moskvorechie/?'+$( this ).attr("value"),
data: {partnumbrand: $( this ).attr("value")},
success: function (data) {
console.log("mos data: ", data);
$('.replacement').trigger('getprice'+index, data);
}
});
}
);
});
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/services/suppliers/moskvorechie/index.php
<?php
if ((include $_SERVER["DOCUMENT_ROOT"].'/services/include.php') != TRUE) { exit;}
function price_by_nr_firm($part_number, $brand_name){
global $config;
$url = $config->suppliers->moskvorechie->urlAPI
. "l=".$config->suppliers->moskvorechie->login_name
. '&p='.$config->suppliers->moskvorechie->login_password
. '&act=price_by_nr_firm&v=1'
. '&nr='.urlencode($part_number)
. '&f='.urlencode($brand_name)
. '&cs=utf8';
$json = get_content($url);
if (false === $json) {
echo "error";
return false;
}
$part = json_decode($json);
return $json;
}
if(isset($_POST['partnumbrand'])) {
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
$array=array();
$arr = explode(';', $_POST['partnumbrand']);
if(count($arr)<2){
print json_encode($array);
exit();
}
error_log ("moskvorechie arr: ".var_export($arr, true), 0);
$c = price_by_nr_firm($arr[0], $arr[1]);
error_log ("moskvorechie c: ".var_export($c, true), 0);
if($c->idtovoemshort!=null){
if(strcasecmp($c->idtovoemshort, $arr[0]) == 0 and strcasecmp($c->nbrand, $arr[1]) == 0){
$array[]=array(
'value'=>$_POST['partnumbrand'],
'kolrest'=>(string)$c->kolrest,
'price'=>(string)$c->price,
'daydeliverysupplier'=>(string)$c->daydeliverysupplier,
'minpart'=>(string)$c->minpart);
}
}else $array[]=array('value'=>$_POST['partnumbrand']);
print json_encode($array);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/services/include.php
<?php
class ConfigClass {
public $levam;
public $db;
public $suppliers;
private function array2obj($data) {
$object = new stdClass();
foreach ($data as $key => $val) {
if (is_array($val)){
$val = $this->array2obj($val);
}
$object->$key = $val;
}
return $object;
}
public function __construct(Array $data ) {
foreach ($data as $key => $val){
if (is_array($val)){
$this->{$key} = $this->array2obj($val);
} else
$this->{$key} = $val;
}
}
}
if(file_exists($_SERVER["DOCUMENT_ROOT"].'/services/.config.php')){
$config = new ConfigClass(include ($_SERVER["DOCUMENT_ROOT"].'/services/.config.php'));
}
function get_content($URL){
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $URL);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/services/.config.php
<?php
return array(
'db' =>
array(
'host' => 'localhost',
'database' => 'bitrix',
'login' => 'root',
'password' => 'password',
),
'suppliers' =>
'moskvorechie' =>
array(
'urlAPI' => 'http://portal.moskvorechie.ru/portal.api?',
'login_name' => 'lunevstes',
'login_password' => 'hrRqxsfPYr5HARELrEzhkw9ecYwyTa9RPExCGIdeSS9GTSDOeTnx5q4CHzhtAED8',
'margin'=>'',
'deliverydays'=>'',
),
),
);
sed -i "s/.*PasswordAuthentication.*/PasswordAuthentication no/" /etc/ssh/sshd_config
cp file.ovpn /etc/openvpn/client/file.conf
sudo systemctl enable openvpn-client@file
sudo systemctl start openvpn-client@file
sudo systemctl stop openvpn-client@file
/usr/bin/google-chrome --kiosk --window-size=1281,1025 --window-position=0,0 --no-first-run --incognito --no-default-browser-check --disable-translate --app=https://kinopoisk.ru/
Встроенный веб-сервер php
cd ~/public_html
sudo php -S localhost:80
Средствами nc
http://хост netcat:80/index.html. Для использования стандартного порта веб-сервера под номером 80 необходимо запустить nc c root привелегиями:
while true; do sudo nc -lp 80 < index.html; done
ajax запрос...
$(".cartr").on("click", function() {
$.ajax({
type: 'POST',
cache: false,
url: '/services/cart/',
data: {item: $(this).closest('.replacement').attr('value')+';'+$(this).closest('.replacement').find(".price").text()},
success: function (data) {
$('.basket-line-block-icon-cart').text(data['count']+" позиции");
$(this).find("path").css('stroke: #836063;');
}
});
return false;
});
Обработка ajax запрос...
/services/cart/index.php
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
use \Bitrix\Main\Loader;
Loader::includeModule('iblock');
Loader::includeModule('sale');
Loader::includeModule('catalog');
if ((include $_SERVER["DOCUMENT_ROOT"].'/services/include.php') != TRUE) {
exit;
}
if(isset($_POST['item'])) {
$json = $_POST['item'];
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
$arr = explode(';', $json);
$vowels = array(" ", "₽", " ");
$siteId = 's1'; // ID сайта, к которому будет привязана корзина
$basket = \Bitrix\Sale\Basket::create($siteId);
$item = $basket->createItem('catalog', rand(10000000000, 11000000000));
$item->setFields([
'QUANTITY' => '1',
'CURRENCY' => Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => Bitrix\Main\Context::getCurrent()->getSite(),
'NAME' => $arr[0]." / ".$arr[1],
'PRICE' => ceil(floatval(str_replace($vowels, "", $arr[2]))),
'CUSTOM_PRICE' => 'Y',
]);
$b = $basket->save();
$dbRes = \Bitrix\Sale\Basket::getList(
[
'select' => ['NAME', 'QUANTITY'],
'filter' => [
'=FUSER_ID' => \Bitrix\Sale\Fuser::getId(),
'=ORDER_ID' => null,
'=LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
'=CAN_BUY' => 'Y',
]
]
);
$c=0;
while ($item = $dbRes->fetch())
{
$c++;
}
print json_encode(array('result' => $b->isSuccess(), 'count' => $c, 'user' => \Bitrix\Sale\Fuser::getId()));
}
sudo nvim /etc/ssh/sshd_config
Удаляем диезы # у сток:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
Перезапускаем SSHD
sudo systemctl reload sshd
//Разбить дамп по 50000 строк for i in `ls *.sql`; do split -d -l 50000 -a 4 --additional-suffix=.sql $i "$(basename "$i" .sq...