Comment puis-je communiquer avec une socket de domaine Unix via le shell sur Debian Squeeze?

Je cours un server web Debian Squeeze. J'ai installé memcached et j'ai configuré memcached pour écouter sur un socket de domaine Unix (à /tmp/memcached.sock ), car il n'a besoin que de recevoir des messages du site web, qui vit sur le même server.

Il semble fonctionner correctement, mais je voudrais aussi communiquer avec memcached via le shell, pour vérifier qu'il fait ce que je pense qu'il fait.

memcached accepte les messages via un simple protocole ASCII (si je comprends bien). S'il écoutait sur TCP / IP, je pourrais lui envoyer des messages via par exemple nc :

 $ echo "stats settings" | nc localhost 11211 

Mais je ne peux pas comprendre comment envoyer ce text à la prise de domaine à la place.

Sur mon ordinateur portable (qui exécute OS X Lion), à la fois nc et telnet ont des options ( -U et -u respectivement) pour utiliser les sockets du domaine. Cependant, sur mon server web Debian Squeeze, ces options ne sont pas présentes.

Avec netcat-openbsd , il y a une option -U . Si vous ne l'avez pas, vous avez probablement installé netcat-traditional place; Je suggère de changer.

Exemple de command: nc -U /var/run/socket

Avec socat (un «relais de données bidirectionnel entre deux canaux de données»), vous pouvez vous connecter à la socket du domaine unix comme ceci:

 $ socat - UNIX-CONNECT:/tmp/memcached.sock 

Vous pouvez utiliser socat sur Debian. Pour l'installer:

 # apt-get install socat 

netcat-openbsd prend en charge la connection aux sockets UNIX-domaine. En utilisant ceci, vous pouvez vous connecter à un socket de stream de domaine UNIX ou à un socket de datagramme à domaine UNIX , et vous devez donc indiquer le type de socket à netcat.

Par exemple, le file /dev/log dans Linux est un socket de socket de datagramme de domaine UNIX , donc nc -U /dev/log ne fonctionnera pas . Utilisez plutôt nc -uU /dev/log . L'utilisation de -u avec -U indique à netcat qu'il s'agit d'un socket de datagramme à domaine UNIX.

 nc -U /tmp/socket #Connect to UNIX-domain stream socket nc -uU /tmp/socket #Connect to UNIX-domain datagram socket 

De même, en utilisant socat , utilisez l'option UNIX-CLIENT. En utilisant cette option, vous pouvez vous connecter à la fois à un stream de domaine UNIX et à des sockets de datagramme UNIX . De sa page de manuel (man socat) , " Il tente d'abord de se connecter et, en cas d'échec, suppose qu'il s'agit d'un socket datagramme, supportant ainsi les deux types ".

 socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type