Affichage des articles dont le libellé est Shell. Afficher tous les articles
Affichage des articles dont le libellé est Shell. Afficher tous les articles

lundi 22 septembre 2008

Version graphique de CP

Salut, voilà juste un petit script pour faires des copies avec cp tout en voyant la progression sur une interface graphique.

#!/bin/sh
set -e
( strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf percent
printf "\n"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0 ) \
| zenity --progress --auto-close --title="Copie de fichiers..." --width=600 --text="Copy of file ${1} ($(file -b ${1}), $(du -h ${1} | awk '{print $1}')) to ${2} ($(file -b ${2}))" 2>&1

Pour l'utiliser, enregistrer ce code dans un fichier

Ensuite, avant de l'utiliser, veillez à le rendre executable (chmod +x mon_script).

Et puis ensuite, faire ./mon_script source destination, pour faire la copie.

Ca fonctionne de la même manière que la commande "cp", mais en version graphique, et qui affiche un pourcentage, la taille, et le type des fichiers. Par exemple en faisant :

./cp_p document.pdf copie_document.png, je vois :

Interface graphique pour scripts sous Linux

Salut,

voilà 2 logiciels très très pratiques pour faire des scripts sous Linux, quelque soit le language, puisqu'ils sont sous formes executables.

  • Zenity (sous Gnome, équivalent de kDialog sous KDE)
  • libnotify-bin, vous connaisssez probablement libnotify, la librairie qui permet d'afficher des notifications sous les systèmes GNU/Linux en général. Pourquoi ne pas afficher une notification dans votre script en utilisant notify-send, disponible dans libnotify-bin.

Il y en a d'autres mais j'ai oublié les noms...

vendredi 5 septembre 2008

Identifiant unique pour les disques durs dans le fstab

Salut all,

récemment j'ai été confronté à un petit problème. J'ai un disque dur USB de 320 Go avec environ 80 Go de Musique dessus. Pour qu'il se monte tout seul, je l'ai mit dans /etc/fstab. J'ai donc indiqué dans le fstab l'adresse de la partition de mon disque dur externe : /dev/sdb3.

Jusque là ça marchait. Mais un jour, je débranche le disque dur un peu brusquement, et évidemment les adresses de disque restent dans "/dev". Donc quand je rebranche mon disque dur, il passe en "/dev/sdc3". Pareil quand je branche une clé USB avant.

J'ai donc cherché une solution. En gros, le noyau Linux créé des liens symboliques dans le répertoire "/dev/disk/". Ces fichiers sont des liens symboliques vers les périphériques dans "/dev" correspondants !

Et voici donc mon fstab tout neuf :
# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
# /dev/sda6
UUID=3db9ba9f-1339-4bd2-9434-881de54e7ccb / ext3 relatime,errors=remount-ro 0 1
# /dev/sda7
UUID=7811eda4-f252-4672-b8e0-46557bf88b04 /home ext3 relatime 0 2
# /dev/sda5
UUID=f8ad669e-bd1b-4a26-9c4a-58c490645d42 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
/dev/disk/by-id/usb-Seagate_FreeAgentDesktop_5QF31RXF-0:0-part3 /media/Musique ntfs user,auto,nodevx 0 0
#tmpfs /home/pistache/RAM Disk tmpfs nosuid,sync,noexec,nodev 0 0

Exemple :
[ (13) bash 3.2.39 in device 0, 09:47:22 ]
pistache@pistache-laptop:~$dir /media/Musique
[ (14) bash 3.2.39 in device 0, 09:47:35 ]
pistache@pistache-laptop:~$sudo mount -a
[ (15) bash 3.2.39 in device 0, 09:47:44 ]
pistache@pistache-laptop:~$dir /media/Musique
mpd_status Musique Musique (à encoder) Musique (DB)

pistache

mercredi 13 août 2008

Comment ouvrir rapidement un nouveau TTY ?

Salut,

Bon rapidement une petite astuce pour ouvrir un autre TTY sur son système Linux...

Utilisez juste la commande... open, ou alors openvt, si open est déjà assigné !

Attention, la commande doit etre exécutée à partir d'une console Linux, donc d'un TTY.

Vous pouvez spécifier la commande à exécuter, par défaut openvt ouvre votre shell, pour plus d'informations, man open ^^

pistache

Les niveaux d'éxecutions de Linux

Vous avez déjà probablement entendu parlé des niveaux d'éxecutions. Mais qu'est-ce que c'est au juste ?

En fait le niveau d'éxecution correspond à un stade du fonctionnement de l'OS.

Il en existe plusieurs, que vous pouvez en fait personnaliser, mais là n'est pas le but de ce post.

  • 0 pour l'arrêt du système
  • 1 pour l'arrêt du système en mode mono-utilisateur
  • S qui permet le passage en mono-utilisateur. Celui-ci n'est pas directement utilisé, il est appelé lors du passage en niveau 1
  • 6 pour le redémarrage du système

Généralement le niveau 2 est utilisé pour l'interface graphique.

Le mode mono-utilisateur est un mode qui ouvre une seule console (/dev/console), connectée en root tout de suite. Quand on démarre en "Recovery Mode", on démarre tout en restant en mode 1 (mono-utilisateur), il faut donc bien protéger le Recovery Mode (le mot de passe sur le recovery mode dans grub est une bonne solution).

Pour changer de mode, il faut utiliser la commande init. En fait quand init est lancé par un utilisateur et non par le kernel, il redirige la commande vers telinit.

En fait init, c'est le processus lancé au début par le kernel, et qui lance touts les autres (dont les ttys, l'interface graphique, les services init.d) en lisant son fichier de configuration :

/etc/inittab

Avec ce fichier on peut rajouter des TTY sur Ctrl+Alt+F8 par exemple, ou encore une deuxième interface graphique, même si c'est plus compliqué.

Si jamais vous voulez passer du mode Multi-Utilisateur au mode Mono-Utilisateur, utilisez juste la commande init (ou telinit) avec comme argument le numéro du niveau d'éxecution de votre choix... Attention, passer en mono-utilisateur ferme le serveurs X et vous perdez vos tâches en cours !

Dernière astuce, pour voir le runlevel (niveau d'execution chez Shakespeare ;) ), entre la commande... runlevel ! Facile, non ?

Personnaliser son bash avec des couleurs

Salut tout le monde,

petit mini-tutoriel sur la personnalisation du Shell de Linux (ou encore de Cygwin), plus précisément de... Bash. C'est le Shell (interface de ligne de commande) par défaut de Linux, donc c'est celui que vous utilisez probablement. De toute façon, les diférences sont minimes dans la plupart des cas. Ce que je vais vous apprendre à faire, c'est tout simplement changer votre "Prompt". Le prompt c'est quoi ?

Eh beh le prompt c'est tout simplement, la partie qui s'affiche à l'écran en permanence dans le shell, juste avant les commandes que vous entrez. Par exemple : pistache@pistache-laptop:~$.

Le prompt par défaut est souvent un peu tristounet, sans couleurs, mais nous allons changer ça. Alors déjà, comment modifier le prompt ? C'est tout simple, il est stocké dans la variable d'environnement PS1.
Essaiez d'entrer "echo $PS1" et vous verrez votre prompt. Le prompt est presque toujours dynamique. C'est à dire que le nom d'utilisateur n'est pas stocké en dur dans le prompt, on met plutot le code \*, ou * est remplacé par une lettre, ce qui formera un code qui sera remplacé par Bash pour mettre la valeur correspondante. Voilà un petit tableau récapitulatif des codes qu'on peut utiliser dans la Bash :

  • \a : an ASCII bell character (07)
  • \d : the date in "Weekday Month Date" format (e.g., "Tue May 26")
  • \D{format} : the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required
  • \e : an ASCII escape character (033)
  • \h : the hostname up to the first '.'
  • \H : the hostname
  • \j : the number of jobs currently managed by the shell
  • \l : the basename of the shell’s terminal device name
  • \n : newline
  • \r : carriage return
  • \s : the name of the shell, the basename of $0 (the portion following the final slash)
  • \t : the current time in 24-hour HH:MM:SS format
  • \T : the current time in 12-hour HH:MM:SS format
  • \@ : the current time in 12-hour am/pm format
  • \A : the current time in 24-hour HH:MM format
  • \u : the username of the current user
  • \v : the version of bash (e.g., 2.00)
  • \V : the release of bash, version + patch level (e.g., 2.00.0)
  • \w : the current working directory, with $HOME abbreviated with a tilde
  • \W : the basename of the current working directory, with $HOME abbreviated with a tilde
  • \! : the history number of this command
  • \# : the command number of this command
  • \$ : if the effective UID is 0, a #, otherwise a $
  • \nnn : the character corresponding to the octal number nnn
  • \\ : a backslash
  • \[ : begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
  • \] : end a sequence of non-printing characters

C'est en anglais mais ça devrait pas être dur à comprendre si ?

Le plus dur là dedans, c'est les "non-printing characters", les deux derniers de la liste. Ils sont très utiles (obligatoires en fait) et servent à entourer les autres codes. En fait Bash fait le compte des charactères du prompt en comptant les codes, il faut lui dire explicitement de pas le faire en entourant touts les codes avec \[ et \].

Par exemple un prompt très simple pourrait être : \[\u\]@\[\h\]$, qui donnerait : user@host$.

Pour tester votre prompt, écrivez :PS1="\[\u\]@\[\h\]$"

Et remplacez la valeur de PS1 par votre valeur.

Oui mais ça ne nous dit pas comment changer la couleur tout ça ? Eh bien c'est encore des autres codes :

Pour ouvrir la partie en couleurs :\e[x;ym Pour fermer : \e[m


Et vous remplacez X et Y par votre code de couleur, que vous prenez de ce tableau :
Color Code
Black 0;30
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
Blue 0;34
Green 0;32
Cyan 0;36
Red 0;31
Purple 0;35
Brown 0;33
Le premier nombre, définit le format d'écriture de la couleur (souligné, gras, transparent, léger, couleur de fond, etc ,etc, essaiez les valeurs pour voir).

N'oubliez pas les non-printing characters (\[ et \]), c'est hyper important, le retour à la ligne ne marchera pas et votre bash sera vraiment foireux.

Après un peu de temps on peut obtenir un bash vraiment à son gout. Perso le mien est :

[ (compte de commandes) version de bash, périphérique, heure ]
utilisateur@hostname:repertoire$

\[\e[3;32m\][\[\e[m\] (\#) \[\e[4;31m\]\s \V\[\e[m\]\[\e[0;31m\] in device \l\[\e[m\]\[\e[3;32m\],\[\e[m\] \[\e[0;33m\]\t\[\e[m\] \[\e[3;32m\]]\[\e[m\]\n\[\e[1;32m\]\u\[\e[m\]\[\e[1;34m\]@\[\e[m\]\[\e[1;32m\]\H\[\e[m\]\[\e[0;36m\]:\[\e[m\]\[\e[1;34m\]\w\[\e[m\]\[\e[0;0m\]$\[\e[m\]

Vous pouvez vous en inspirer sans problème... On copyrighte pas les prompt à ce que je sache (pas encore ?)


Ce qui me donne :


Voilà... Merci à tous !


Sources :
PS: J'ai parlé de Matthieu Aubry et de PhpMyVisites au dernier post. Eh bien PhpMyVisites n'est plus, il a été remplacé par Piwik, beaucoup plus évolué. Son site : piwik.org
 
Pistaaaaaaaaaaaaaaache