Robocopy – simple BackUp under Windows

robocopy <source> <destination> /E /Purge

/E – копира със субдиректориите
/Purge – изтрива от destination липсващите файлове в source

Трябва да се отбележи, че командата копира съдържанието на посочените директории, без да копира самата source директория.

Под Linux ползвам rsync със следната команда:

rsync -r -n -t -v --progress --delete -s /source/some_dir /destination

В този случай rsync копира директорията some_dir в /destination/some_dir.

Share and Enjoy !

Shares

nginx portable web server

Трябва ми лек сървар с който да управлявам едн компютър, който ползвам за нещо като локален NAS. Apache тотално не ми се вписва в сметките, защото напоследък брах ядове с пълното му деинсталиране от системата. Затова се спрях на конкурента му nginx. По-долу поствам някои интересни моменти от тестовете, които направих под Windows.
За да мога да достъпвам сървара в локална мрежа, трябваше да променя настройките на Firewall-а на Windows 10. В моя случай промених настройки на firewall на Nod32, който е асоцииран по подразбиране в firewall-a на Win.

Изтеглих Mainline version на nginx от тук: nginx download

Разархивирах го в една директория и му промених conf/nginx.conf така, че да отговаря на моите нужди. Важно е да се отбележи, че предварително имам инсталиран PHP 7.2, който е добавен в променливите на обкръжението на Win10.

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    # gzip  on;

    server {
        listen       80;
        server_name  192.168.0.21;

        location / {
            root F:\\nginx-1.19.7\\site\\local;
            index  index.php;
            try_files $uri $uri/ /index.php?$args;
        }

        #rewrite ^/(.*)$ /index.php/$1 last;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           F:\\nginx-1.19.7\\site\\local;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

Реда:

try_files $uri $uri/ /index.php?$args;

казва на сървара първо да потърси файл, след това директория и най-накрая ако не намери предните две да потърси index.php, като всичко след името на домейна го постави като аргумент. Примерно:
https://localhost/system-info
ще се преобразува в:
https://localhost/index.php?/system-info
По този начин мога да ползвам френдли адресиране, вместо да изписвам остарелите GET променливи. В Apache се ползва .htaccess за тая цел. Но в nginx тези инструкции се поместват в основния кофигурационен файл.

За да спирам и пускам сървара използвах batch код, който намерих някъде в мрежата. Коментирал съм с REM кодове в скрипта, които могат да са полезни след време, но които не са ми необходими, като спиране и пускане на MySQL. Напоследък за леки проекти ползвам основно SQLite с RedBeanPHP като ORM:

@echo off
REM cd C:\WebServer\nginx


IF "%1" == "stop" (
	GOTO STOPSERVER
)else IF "%1" == "start" (
	GOTO STARTSERVER
)else (
	echo Use these commands:
	echo.
	echo myserver start
	echo myserver stop
)
GOTO END

:STARTSERVER
REM QPROCESS * | find /I /N "mysqld.exe">NUL
REM IF "%ERRORLEVEL%"=="0" (
REM	 echo MYSQLD is already running.
REM )else (
REM 	RunHiddenConsole.exe mysqld --console
REM	echo MYSQLD is now running.
REM )

QPROCESS * | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
	echo NGINX is already running.
)else (
	RunHiddenConsole.exe nginx
	echo NGINX is now running.
)

QPROCESS * | find /I /N "php-cgi.exe">NUL
IF "%ERRORLEVEL%"=="0" (
	echo PHP-CGI is already running.
)else (
	RunHiddenConsole.exe php-cgi -b 127.0.0.1:9000
	echo PHP-CGI is now running.
)

echo.
echo To stop, type "myserver stop"

GOTO END

:STOPSERVER

REM QPROCESS * | find /I /N "mysqld.exe">NUL
REM IF "%ERRORLEVEL%"=="0" (
REM 	taskkill /F /IM mysqld.exe>NUL
REM 	echo MYSQLD ended successfully.
REM )else (
REM 	echo MYSQLD is not running
REM )

QPROCESS * | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
	::nginx -s stop
	taskkill /F /IM nginx.exe>NUL
	echo NGINX ended successfully.
)else (
	echo NGINX is not running
)

QPROCESS * | find /I /N "php-cgi.exe">NUL
IF "%ERRORLEVEL%"=="0" (
	taskkill /F /IM php-cgi.exe>NUL
	echo PHP-CGI ended successfully.
)else (
	echo PHP-CGI is not running
)

:END

Запазих по-горния код в директорията с exe-то на nginx в файла myserver.bat. Пускане и спиране на сървара става с командите:

myserver start
myserver stop

За файлов фмениджър на NAS-чето за сега съм се спрял на Tiny File Manager. Този файлов мениджър е поместен само в един файл и има достатъчно опции за редактиране, които са ми напълно достатъчни.

Това е. Получи се много гот.

Share and Enjoy !

Shares

Batch get latest C Sharp compiler from Microsoft.NET directory

Простичък код на batch който взима последния csc.exe от Microsoft.NET\Framework. Кода се пейства в bat-файл и при двоен клик компилира script.cs.

1
2
3
4
5
6
7
@echo off
for /f "TOKENS=1" %%x in ('dir %windir%\Microsoft.Net\framework\v* /b ^| findstr "v[1-9]"') do (
  set myPID=%%x
)
set csc=%windir%\Microsoft.Net\framework\%myPID%\csc.exe
 
%csc% /t:winexe script.cs

Share and Enjoy !

Shares




Perl start from batch file – md5 sum check

Има много хитър начин да си набавим в Windows някои от популярните инструменти в Mac, UNIX, Linux, Android и т.н., като е достатъчно да имаме инсталиран Perl. Ето един пример, как да си набавим md5 sum checker за стрингове от командния ред:

@rem = 'source http://www.dostips.com
@CD/d"%~dp0"&perl -s "%~nx0" %*&Exit/b&:';
 
#perl script starts below here
use strict;
use Digest::MD5  qw(md5_hex);
if($ARGV[0]== ""){
	print "Vyvedi string!!!\n";
	exit;
}
my $md5_data = $ARGV[0];
my $md5_hash = md5_hex( $md5_data );
print "$md5_hash\n";

Запазваме кода в batch-файл, като md5.bat. Добра идея е да го запазим там където имаме достъп, чрез променлива на обвивката, примерно директорията system32. След това си генерираме md5 суми от стрингове директно през промпта:

md5 "proba"

Резултата е: c0a8e1e5e307cc5b33819b387b5f01fd

Share and Enjoy !

Shares