Catégorie : Ligne de commande

2 mai 2016 /

Voici un petit mémo qui montre comment changer le répertoire de données MySQL par défaut, puis à régler SELinux pour qu’il tienne compte des changements.

Arrêt du serveur MySQL:

service mysqld stop

Création d’un nouveau répertoire de données:

mkdir /nouveau/repertoire/mysql
chown mysql:mysql /nouveau/repertoire/mysql

Déplacer la base de données d’origine:

mv /var/lib/mysql/* /nouveau/repertoire/mysql

Modification du fichier de configuration MySQL:

vi /etc/mysql/my.cnf

Et on y change cette ligne:

datadir = /var/lib/mysql

devient:

datadir = /nouveau/repertoire/mysql

ainsi que celle la:

socket = /var/lib/mysql/mysql.sock

qui devient:

socket = /nouveau/repertoire/mysql/mysql.sock

Mappage du contexte SELinux pour le répertoire /nouveau/repertoire/mysql/ , avec la commande semanage:

semanage fcontext -a -t mysqld_db_t "/nouveau/repertoire/mysql(/.*)?"

Application du contexte pour une prise en compte par le système à chaud:

restorecon -Rv /nouveau/repertoire/mysql/

Démarrage du serveur MySQL:

service mysqld start

Vérification de l’accès et de la connectivité:

mysql -u root -p

mysql> show databases;

Si cela fonctionne, vous avez changé le répertoire par défaut de MySQL avec une prise en compte par SELinux avec succès.

Par contre si vous obtenez un message de ce genre:

ERROR 2002 (HY000): Impossible de se connecter au serveur MySQL local par socket '/var/lib/mysql/mysql.sock'

Il faudra ajouter cela à votre fichier /etc/my.cnf :

[client]
socket = /srv/mysql/mysql.sock

Et dernière chose, pour éviter la connexion via le socket:

mysql -u root -p --protocol tcp

1 mai 2016 /

Telnet, (depuis un serveur distant)

telnet 192.168.0.14 20000

Si le port est ouvert:

Trying 192.168.0.14...
Connected to entropia (192.168.0.14).
Escape character is '^]'.

Si le port est fermé (ou service non démarré):

Trying 192.168.0.14...
telnet: connect to address 192.168.0.14: Connection refused
telnet: Unable to connect to remote host: Connection refused

Netstat, (pour tester en local)

netstat -paunt | grep 3306; echo $?

Si le port est ouvert:

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1979/mysqld
0

Si le port est fermé (ou service non démarré):

1

Netcat, (depuis un serveur distant)

nc -v -z 192.168.0.14 3306; echo $?

Si le port est ouvert:

Connection to 192.168.0.14 3306 port [tcp/mysql] succeeded!
0

Si le port est fermé (ou service non démarré):

nc: connect to 192.168.0.14 port 3306(tcp) failed: Connection refused
1

nc  192.168.0.14 3306< /dev/null ; echo $?

Si le port est ouvert:

4
5.1.73▒d))4f*<,i▒N*'%#~rC8/#`0

Si le port est fermé (ou service non démarré):
1

Wget pour tester un serveur web, (depuis un serveur distant)

wget -qO- 192.168.0.14:80 ; echo $?

wget -q --spider 192.168.0.14:80 ; echo $?

Curl, (depuis un serveur distant)

curl telnet://192.168.0.14:22

Si le port est ouvert, la commande restera bloquée car elle attend que l’on saisisse quelque chose. ctrl+c pour sortir.

Si le port est fermé:

curl: (7) couldn't connect to host

Bash, (depuis un serveur distant)

timeout 1 bash -c 'cat < /dev/null > /dev/tcp/192.168.0.14/22' ; echo $?

Si le port est ouvert:
0
Si le port est fermé:

bash: connect: Connexion refusée
bash: /dev/tcp/192.168.0.14/22: Connexion refusée
1

Nmap, (depuis un serveur distant)

nmap -p 80 192.168.0.14

Si le port est ouvert:

Starting Nmap 5.51 ( http://nmap.org ) at 2016-03-29 10:00 CEST
Nmap scan report for entropia.local (192.168.0.14)
Host is up (0.00068s latency).
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:50:56:01:27:55 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

Si le port est fermé:

Starting Nmap 5.51 ( http://nmap.org ) at 2016-03-29 10:06 CEST
Nmap scan report for entropia.local (192.168.0.14)
Host is up (0.00045s latency).
PORT   STATE  SERVICE
80/tcp closed http
MAC Address: 00:50:56:01:27:55 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Pour tester plusieurs port en même temps:

nmap -p 22,1944,20000 192.168.0.14

Python, (depuis un serveur distant)

python
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('192.168.0.14' , 80))
clientsocket.sent('\n')

Si le port est ouvert, vous arriverez à faire un « clientsocket.sent(‘\n’) » (qui vous retournera surement cette une erreur):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: '_socketobject' object has no attribute 'sent'

Si le port est fermé, au moment du « clientsocket.connect((‘192.168.0.14’ , 80)) » :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused

26 avril 2016 /

Le timestamp désigne le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC précise. Noter le temps de cette façon, indépendamment du fuseau horaire, est très pratique pour comparer des dates, mais cela s’avère difficile à lire pour l’utilisateur.

giphy

Heureusement, sous Linux on peut facilement y parvenir.

Pour obtenir le timestamp de la date et de l’heure courante :

date +%s

Pour avoir le timestamp d’une date précise:

date -d "2016-02-22 04:30:00" +%s

Et enfin, convertir un timestamp en date:

date -d @1461655272.314

21 avril 2016 /

​Pour faire une modification sur la ligne du curseur:
:s/texte_à_remplacer/nouveau_texte/g​

​Pour agir sur l’ensemble du fichier:
:%s/texte_à_remplacer/nouveau_texte/g

​​​Pour agir sur l’ensemble du fichier avec une confirmation:
​​:%s/texte_à_remplacer/nouveau_texte/gc​

​Pour agir sur l’ensemble du fichier en ignorant la casse:
​​:%s/texte_à_remplacer/nouveau_texte/gci​

Pour agir sur l’ensemble du document​ en prenant en compte la casse:
:%s/texte_à_remplacer/nouveau_texte/gcI ​

Pour agir sur les lignes avec le mot rototo, remplaçant toto par titi, laissant intacte les lignes ne contenant pas le mot rototo​:
​:g/rototo/s/toto/titi/g

Pour agir sur une ligne commençant par le mot rototo, remplaçant toto par titi, laissant intacte les lignes ne contenant pas le mot rototo​:
:g/^rototo/s/toto/titi/g

20 avril 2016 /

Opus (à l’origine Harmony3) est un format ouvert de compression audio avec pertes, libre de redevances, développé par l’Internet Engineering Task Force (IETF) dans le but d’être utilisé par des applications interactives sur Internet.

Opus est la proposition, en format standard, acceptée dans la compétition codec de l’IETF pour un « nouvel Internet à large bande audio », actuellement en développement par le groupe de travail IETF codec.
Il est basé sur deux propositions standards, initialement séparées, de la Fondation Xiph.org et Skype Technologies : respectivement le codec CELT, à faible temps de latence, et le codec SILK, orienté sur la communication à distance.
Ses principaux développeurs sont Jean-Marc Valin (Xiph.org, Octasic, Mozilla Corporation), Koen Vos (Skype Technologies) et Timothy B. Terriberry (Mozilla Corporation). Raymond Chen (Broadcom), Gregory Maxwell (Xiph.org) et Christopher Montgomery (Xiph.org), entre autres, ont également participé.

Pour faire cette conversion, on va se servir de ffmpeg:

ffmpeg -i 4_saisons_vivaldi.opus -ab 160k -ar 44100 4_saisons_vivaldi.mp3

Si vous avez une multitude de fichier .opus à convertir, vous pouvez lancer cette boucle:

cd /repertoire/cible/
find . -name « *.opus » -print0 |while read -d $’\0′ file; do ffmpeg -i « $file » -ab 128k -ar 44100 -y « ${file%.opus}.mp3 »;done

Note:
ab: Le bitrate en bps.
ar: Fréquence d’échantillonnage en hertz