uuidgen <DEVICE> |
например
uuidgen eth0 |
http://www.itechlounge.net/2014/03/linux-how-to-generate-uuid-for-network-interface-on-rhelcentos/
By Kaven G. | March 11, 2014
uuidgen <DEVICE> |
например
uuidgen eth0 |
http://www.itechlounge.net/2014/03/linux-how-to-generate-uuid-for-network-interface-on-rhelcentos/
By Kaven G. | March 11, 2014
Ну а на своей машине я сделал следующее:
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd |
Посмотреть список пользователей MySQL
SELECT USER from mysql.user; |
Посмотреть кодировку базы
use database; SHOW VARIABLES LIKE "character_set_database"; |
Делаем бекап
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql |
Fabien Potencier
February 03, 2009
Last year, I deployed a new tool to manage symfony plugins. The first goal of this tool was to simplify the process of contributing new plugins. It proved to be very successful, and I had a good feeling that the plugin creation rate was rising since then. And yesterday, I wanted to have hard numbers to back me up.
The question I wanted to answer was quite simple:
How many plugins were created per month before and after the change?
As the symfony project provides free SVN hosting for community plugins, most plugins are actually hosted on the official symfony Subversion repository. And thankfully, the svn command line can give you a lot of information about your project in a very friendly format to parse: XML.
The first step is to get the log file as an XML file:
$ svn log --xml --verbose http://svn.symfony-project.com/plugins > svn_log.xml |
The output is similar to something like this:
<?xml version="1.0"?> <log> <logentry revision="1949"> <author>fabien</author> <date>2006-09-05T14:40:20.603942Z</date> <paths> <path action="A">/plugins/sfGuardPlugin</path> </paths> <msg>added sfGuardPlugin</msg> </logentry> <!-- many more entries --> </log> |
This XML file contains everything I need: the date of each commit and the paths that were modified, added, or deleted.
Reading an XML file with PHP is insanely easy thanks to simplexml:
$xml = simplexml_load_file(dirname(__FILE__).'/svn_log.xml'); |
The simplexml_load_file() function reads an XML file and returns an object that can manipulated to access the various information contained in the XML.
Iterating over the logentry and extracting data is also simple enough:
foreach ($xml->logentry as $logentry) { $date = (string) $logentry->date; foreach ($logentry->paths as $paths) { foreach ($paths->path as $path) { $action = $path['action']; $content = (string) $path; } } } |
Each tag is accessible as a property of the object and returns an object representing the XML child elements:
$xml->logentry; |
As SimpleXML returns objects, we sometimes need to cast them to string:
$date = (string) $logentry->date; |
Getting a tag attribute is as simple as using the object as an array:
$action = $path['action']; |
Eventually, getting the content of a tag can be done by casting the object itself to a string:
$content = (string) $path; |
Without further ado, the following code parses the XML file and detect plugin creation by checking if the path has been created (A) and if the path is of the form /plugins/XXXPlugin (a symfony plugin name always ends with Plugin).
$numbers = array(); $xml = simplexml_load_file(dirname(__FILE__).'/svn_log.xml'); foreach ($xml->logentry as $logentry) { $date = date('d/m/Y', strtotime((string) $logentry->date)); foreach ($logentry->paths as $paths) { foreach ($paths->path as $path) { if ('A' == $path['action'] && preg_match('#^/plugins/.+Plugin$#', (string) $path, $matches)) { if (!isset($numbers[$date])) { $numbers[$date] = 1; } else { ++$numbers[$date]; } } } } } |
The $numbers array contains the days as keys, and the number of plugins created for this specific particular day as values.
To create a graph, the array can be exported as a simple CSV file to be read by Excel:
foreach ($numbers as $date => $number) { echo "$date,$number\r\n"; } |
It outputs the following data:
02/02/2009,1 01/02/2009,1 31/01/2009,1 30/01/2009,2 29/01/2009,1 27/01/2009,3 ... |
And here is the graph for the data as of today:
I was right. We more than doubled the number of plugin creation per month after the change: from 14 plugins to 30 plugins per month.
http://fabien.potencier.org/article/7/getting-information-from-svn-with-php
kvz.io
24 Jul 2007
Not everyone knows about PHP’s capabilities of making SSH connections and executing remote commands, but it can be very useful. I’ve been using it a lot in PHP CLI applications that I run from cronjobs, but initially it was a pain to get it to work. The PHP manual on Secure Shell2 Functions is not very practicle or thorough for that matter, so I would like to share my knowledge in this how to, to make it a little less time consuming setting this up.
In this article I’m going to assume that:
Update
On recent Ubuntu machines, there’s no need to do any compiling anymore:
$ aptitude install libssh2-1-dev libssh2-php |
You can now test if PHP recognizes it’s new ssh2 extension by running:
$ php -m |grep ssh2 |
It should return: ssh2
If the above works for you (you should see also: «Build process completed successfully»), you can skip to: Great! PHP supports SSH — time to code.
Otherwise we need to compile manually, continue reading here.
Prerequisites
Packages
First let’s install the following packages:
$ aptitude install php5-dev php5-cli php-pear build-essential openssl-dev zlib1g-dev |
That should set us up alright.
libssh2
We need libssh2 from sourcefourge. We have to compile this, but no worries, this is all you need to do:
$ cd /usr/src \ && wget http://surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gz \ && tar -zxvf libssh2-0.14.tar.gz \ && cd libssh2-0.14/ \ && ./configure \ && make all install |
Вот и все! Легко, не так ли?
Installation
ssh2.so
Next we need to link libssh & PHP together. There’s a PECL module for this so let’s install using:
$ pecl install -f ssh2 |
The -f makes sure ssh2 is installed even though there’s not a stable candidate. You could also use the package name: ssh2-beta to overrule this.
Now you need to make sure our new ssh2.so
module is loaded by PHP. Edit a php.ini file (I’d recommend a separate one: /etc/php5/conf.d/ssh2.ini
). Make sure it reads:
extension=ssh2.so |
Great! PHP supports SSH — time to code
You’ve just enabled ssh2 support in PHP. Now how can we make use of this? There are 2 options. SSH supports the:
Метод 1: Execute
Best would be to create functions or even a class for the following code, but this is the basic idea and will definitely get you started:
<?php if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); // log in at server1.example.com on port 22 if(!($con = ssh2_connect("server1.example.com", 22))){ echo "fail: unable to establish connection\n"; } else { // try to authenticate with username root, password secretpassword if(!ssh2_auth_password($con, "root", "secretpassword")) { echo "fail: unable to authenticate\n"; } else { // allright, we're in! echo "okay: logged in...\n"; // execute a command if (!($stream = ssh2_exec($con, "ls -al" ))) { echo "fail: unable to execute command\n"; } else { // collect returning data from command stream_set_blocking($stream, true); $data = ""; while ($buf = fread($stream,4096)) { $data .= $buf; } fclose($stream); } } } ?> |
Метод 2: Shell
Best would be to create functions or even a class for the following code, but this is the basic idea and will definitely get you started:
<?php if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); // log in at server1.example.com on port 22 if (!($con = ssh2_connect("server1.example.com", 22))) { echo "fail: unable to establish connection\n"; } else { // try to authenticate with username root, password secretpassword if (!ssh2_auth_password($con, "root", "secretpassword")) { echo "fail: unable to authenticate\n"; } else { // allright, we're in! echo "okay: logged in...\n"; // create a shell if (!($shell = ssh2_shell($con, 'vt102', null, 80, 40, SSH2_TERM_UNIT_CHARS))) { echo "fail: unable to establish shell\n"; } else { stream_set_blocking($shell, true); // send a command fwrite($shell, "ls -al\n"); sleep(1); // & collect returning data $data = ""; while ($buf = fread($shell,4096)) { $data .= $buf; } fclose($shell); } } } ?> |
Tips
Sometimes when a server is busy, or a connection is buggy, the buffer may run dry, and the PHP script stops collecting data from a command output (even though the command hasn’t completed yet!). There are a couple of things you could do about that:
<?php ssh2_exec($con, 'ls -al; echo "__COMMAND_FINISHED__"' ); ?> |
Now, in the loop where you keep checking for the buffer, just see if the COMMAND_FINISHED line is coming by. Because then you know you have all the data. To avoid infinite loops, just limit the loop with a timeout of 10 seconds or so:
<?php $time_start = time(); $data = ""; while (true){ $data .= fread($stream, 4096); if (strpos($data,"__COMMAND_FINISHED__") !== false) { echo "okay: command finished\n"; break; } if ((time()-$time_start) > 10 ) { echo "fail: timeout of 10 seconds has been reached\n"; break; } } ?> |
In the example above, you’d better set streamsetblocking to false.
Can’t get enough?
PHP can send files over ssh!
<?php ssh2_scp_send($con, "/tmp/source.dat", "/tmp/dest.dat", 0644); ?> |
Не работает?
Check the following:
/etc/ssh/sshd_config: PasswordAuthentication yes
If you’ve made any changes, ssh needs a restart
$ /etc/init.d/ssh restart |
Post a comment here if it’s still failing. Don’t forget to paste the error that you’re getting.
make: *** [ssh2.lo] Error 1
If you get the error:
/usr/include/php5/Zend/zend_API.h:361: note: expected char * but argument is of type const unsigned char * make: *** [ssh2.lo] Error 1 |
that’s because of PHP 5.3 incompatibility. Try this patch:
$ mkdir -p /usr/src \ && cd /usr/src \ && wget http://pecl.php.net/get/ssh2-0.11.0.tgz \ && tar xvfz ssh2-0.11.0.tgz \ && cd ssh2-0.11.0 \ && wget http://remi.fedorapeople.org/ssh2-php53.patch \ && patch -p0 < ssh2-php53.patch \ && phpize && ./configure --with-ssh2 \ && make |
make: *** [ssh2fopenwrappers.lo] Error 1
If you get the error:
/tmp/pear/download/ssh2-0.11.0/ssh2_fopen_wrappers.c:49: error: for each function it appears IN.) make: *** [ssh2_fopen_wrappers.lo] Error 1 ERROR: `make' failed |
This is the reported fix (thanks to BuNker).
Альтернативы
There have been some additional developments since the writing of this article. Checkout:
Net_SSH2, PEAR’s SSH wrapper (driver based to support multiple ways of establishing the connection)
SSH2, another wrapper by Jaimie Sirovich
phpseclib, a pure PHP implementation — no additional libraries, binaries, bindings required (against all odds, still pretty fast with mcrypt installed)
http://kvz.io/blog/2007/07/24/make-ssh-connections-with-php/