Trucs linux

De Wiki de Nelly & Richard
Sauter à la navigation Sauter à la recherche

Commandes UNIX

mon éditeur de texte préféré : vim

Bon je vais pas en faire son apologie mais avec lui on découvre de nouvelles astuces tous les jours (vi improved).

Je vais simplement mettre quelques raccourcis pratiques tant pour le tous les jours que pour des utilisations spécifiques.

Je par du principe que vous avez installez le paquet vim-full qui contient entre autre vimtutor pour bien commencer.

Il ne reste plus qu'à bouquiner l'aide de vim pour aller plus loin.

liens

les frontends graphiques

  • vim pour les nuls : evim (easy vim)
  • vim simplement : gvim

déplacement

  • début de ligne : [^]
  • fin de ligne : [$]
  • début de fichier : [gg]
  • Fin de fichier : [G]

insertion/remplacement

  • insertion : [i]
  • derrière le curseur : [a]
  • début de ligne : [gI]
  • fin de ligne : [A]
  • ligne au-dessus : [O]
  • ligne au-dessous : [o]
  • ajouter x tabulations : x[>>]
  • supprimer x tabulations : x[<<]
  • remplacer x caractères : x + [r]
  • remplacer : [touche inser] ou [R]
  • remplacer le caractère actuel : [s]
  • remplacer la ligne actuelle : [S]
  • défaire : [u]
  • refaire : [Ctrl] + [r]

couper, copier, coller

  • couper x lignes : x[dd]
  • copier x : x[yy] ou x[Y]
  • couper x mots : [d]x[w]
  • copier x mots : [y]x[w]
  • coller avant ou après le curseur : [p] ou [P]

chercher/remplacer

  • recherche après le curseur : [/]regex
  • recherche avant le curseur : [?]regex
  • se balader dans la recherche : [n] ou [N]
  • sed : remplacement ligne courante (fonctionne en mode visuel) : [:s/regex_recherchée/remplacement/gi]
  • sed : remplacement sur la totalité du fichier : [:%s/regex_recherchée/remplacement/gi]
  • recherche du mot identique après le curseur : [*]

mode visuel [v]

  • mode visuel standard : [v]
  • mode visuel ligne : [Maj] + [v]
  • mode visuel bloc : [Ctrl] + [v]
  • copie de la sélection : [y]
  • coupe/supprime la sélection : [d]
  • ajout/suppression de tabulations : [>>] ou [<<]

mode Explore

  • Parmi la fulltitude de fonctions que contient vim, la navigation dans votre système de fichier est bien pratique
  • dossier supérieur : [-]
  • éditer le fichier ou se déplacer dans le dossier sous le curseur : [Enter]
  • idem avec un split horizontal : [o]
  • idem avec un split vertical : [v]
  • idem dans un nouvel onglet : [t]
  • prévisualisation du fichier : [p]
  • marquer des fichiers / dossiers : [mf]
  • marquer tous les fichiers / dossiers correspondants à une regexp : [mr] puis entrer la regexp
  • imprimer les fichiers marqués : [mp]
  • tous désélectionner : [mu]
  • exécuter une commande sur tous les fichiers marqués : [mx] puis commande
  • vim . et [F1] pour plus d'options

complétion

  • des mots se trouvant dans votre fichier actuel et séparés par des espaces, des points, slash, ... : [Ctrl] + [p] ou [Ctrl] + [n]
  • des fichiers : [Ctrl] + [x], [Ctrl] + [f] et [Ctrl] + [n] ou [p]
  • python (affiche les choix et split l'écran pour l'aide) : [Ctrl] + [x], [Ctrl] + [o] puis [Ctrl] + [n] ou [p]

onglets

  • nouvel onglet : [:tabnew] ou [:tabnew fichier]
  • onglet suivant : [:tabnext] ou [Ctrl] + [pg down]
  • onglet précédant : [:tablast] ou [Ctrl] + [pg up]

split

  • split vertical (nouveau fichier) : :[vne]
  • split vertical (même fichier) : [Ctrl] + [w], [Ctrl] + [v]
  • split horizontal (nouveau fichier) : [Ctrl] + [w], [Ctrl] + [n] | :[new] | :[split]
  • split horizontal (même fichier) : [Ctrl] + [w], [Ctrl] + [s]
  • switch d'une fenêtre à l'autre : [Ctrl] + [w], [Ctrl] + [w]
  • rotation des splits ouvert : [Ctrl] + [w], [Ctrl] + [r|R|x]

divers

  • ouverture d'un fichier : [:e nom_du_fichier]
  • activation de la coloration syntaxique : [:syntax on]
  • changement de colorscheme : [:colorscheme slate]
  • adapter son colorscheme à son environnement : [:set background=dark|light]
  • quitter tout : [:qa]
  • quitter et sauver : [:x] ou [:wq]
  • quitter sans sauver : [:q!]
  • ouverture d'un shell : [:sh] (le quitter avec [Ctrl] + [d])
  • agrandir reduire la taille du texte : [Ctrl] + [-] ou [+]
  • répète la dernière commande : [.]
  • ...

Terminal

Les raccourcis utiles du terminal:

  • Nouvel onglet : Ctrl + Maj + t
  • Début de ligne : Ctrl + a
  • Fin de ligne : Ctrl + e
  • Effacer le dernier mot : Ctrl + w
  • Effacer toute la ligne : Ctrl + u
  • Navigation dans les dernières commandes : ↓ ↑
  • Recherche : Ctrl + r (répéter l'opération pour retrouver les commandes précédentes)
  • Inversion des 2 derniers caractères : Ctrl + t
  • Coller la sélection : Maj + inser ou Clic droit ou Clic bouton du milieu ou Clic simultané gauche et droit
  • Completion : Tabulation
  • Afficher les différentes solutions : Tabulation Tabulation
  • Avorte le processus courant : Ctrl + z
  • Processus au premier plan : fg
  • Kill processus : Ctrl + c
  • Deconnexion : Ctrl + d

Terminator

split

Horizontal
  • split horizontal : [Ctrl]+[maj]+[o]
  • resize horizontal : [Ctrl]+[maj]+[↓]|[↑]
Vertical
  • split vertical : [Ctrl]+[maj]+[e]
  • resize vertical : [Ctrl]+[maj]+[←]|[→]
Navigation
  • preview screen : [Ctrl]+[maj]+[p]
  • next screen : [Ctrl]+[maj]+[n]
  • switch between split : [Ctrl]+[Tab]

Tab

  • new tab : [Ctrl]+[maj]+[t]

Outils

  • search : [Ctrl]+[maj]+[f]
  • zoom le split courant : [Ctrl]+[maj]+[z]

Configuration

  • fichier .config/terminator/config
# terminator config file

# aspect
#font = Monospace 8
background_type = "transparent"
enable_real_transparency = True
use_theme_colors = False
background_darkness = 0.9
background_color = "#000000"
foreground_color = "#FFFFFF"
borderless = True
maximise = True
extreme_tabs = False
mouse_autohide = False
word_chars = "-A-Za-z0-9,./?&_+@~"

# nb de lignes enregistrées
scrollback_lines = 2000
scrollbar_position = "disabled"
# flash lors des erreurs de frappe
audible_bell = False
# suppression des bips
force_no_bell = True
# pas de curseur clignotant
cursor_blink = False

[keybindings]
# ne pas interférer avec le déplacement dans les onglets de vim 
next_tab = <Ctrl>Down
prev_tab = <Ctrl>Up

conky

  • Conky permet d'intégrer sur son bureau un moniteur système.
  • conky site

configuration

# file ~/.conkyrc
alignment top_right
background no
border_width 0
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
use_xft yes
xftfont DejaVu Sans Mono:size=10
gap_x 5
gap_y 7
minimum_size 5 5
net_avg_samples 2
# no_buffers yes
double_buffer yes
out_to_console no
out_to_stderr no
own_window yes
own_window_transparent yes
own_window_class Conky
own_window_type desktop
own_window_hints below,skip_taskbar,skip_pager,sticky
stippled_borders 0
update_interval 1.0
uppercase no
use_spacer none
show_graph_scale no
show_graph_range no

TEXT
${color lightblue}$nodename - $sysname $kernel on $machine
${color white}$hr
${color lightblue}Battery: ${color white}${battery BAT0} - ${battery_time BAT0} ${battery_bar 10 BAT0}
${color white}$hr
${color lightblue}Uptime:$color $uptime
${color lightblue}RAM Usage:$color $mem/$memmax - $memperc% ${membar 6}
${color lightblue}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 6}
${color white}$hr
${color white}CPU Usage (core0):$color ${cpu cpu0}% ${cpubar cpu0 6}
${color white} ${cpugraph cpu0 20,310 ffffff 000fff}
${color white}CPU Usage (core1):$color ${cpu cpu1}% ${cpubar cpu1 6}
${color white} ${cpugraph cpu1 20,310 ffffff 000fff}
$hr
${color lightblue}File systems:
${color white} / $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
 /home $color${fs_used /home}/${fs_size /home} ${fs_bar 6 /home}
$hr
${color lightblue}Networking:
Up:$color ${upspeed eth0}               ${color lightblue}Down:$color ${downspeed eth0}
${color white}${downspeedgraph eth0 30,160 ffffff 000fff} ${color white}${upspeedgraph eth0 30,160 ffffff fff000}
${color white}$hr
${color lightblue}loadavg: ${color white}${execi 1 cat /proc/loadavg}
${color lightblue}Name              PID   CPU%   MEM%
${color lightblue} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1} 
${color lightblue} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightblue} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightblue} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}

Zsh : le shell alternatif

  • Zsh offre des fonction de complétion avancées.
  • Concernant l'UTF-8, 16, 32 préféré une version beta supérieure à 4.3.1 zsh-beta
  • Sur une ubuntu 9.04 zsh est en version 4.3.9
  • On en profitera pour mettre des couleurs à less

fichier ~/.zshrc

# prompt shell
export PS1="$(print '%{\e[3;32m%}%m%{\e[0m%}'):$(print '%{\e[1;33m%}%~%{\e[0m%}')"
if [ $USER = "root" ] ; then
 export PS1="$PS1%# "
else
 export PS1="$PS1%% "
fi

# inscription des info dans la barre de titre des terminaux
case $TERM in
 rxvt|*term)
   precmd() { print -Pn "\e]0;%n@%m:%~\a" }
   preexec () { print -Pn "\e]0;$1\a" }
 ;;
 screen)
   bindkey "^[[1;5C" forward-word
   bindkey "^[[1;5D" backward-word
   bindkey "^E" end-of-line
   bindkey "^R" history-incremental-search-backward
 ;;
esac

# historique
export HISTFILE=~/.histfile
export SAVEHIST=5000
export HISTSIZE=5000
setopt HIST_REDUCE_BLANKS # suppression des doublons inutiles
setopt HIST_SAVE_NO_DUPS # ne sauvegarde pas les doublons
setopt SHARE_HISTORY # partage instantanee des historiques

# alias
. ~/.bash_aliases

# ls
eval "`dircolors -b`"

# less
export LESS="-rIg"
export LESSOPEN='| /usr/bin/lesspipe %s'
export LESSCLOSE='/usr/bin/lesspipe %s %s'
# Less Colors for Man Pages
export LESS_TERMCAP_mb=$'\E[01;32m'       # begin blinking
export LESS_TERMCAP_md=$'\E[03;32m'       # begin bold
export LESS_TERMCAP_me=$'\E[0m'           # end mode
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
export LESS_TERMCAP_so=$'\E[01;42m'       # begin standout-mode - info box
export LESS_TERMCAP_ue=$'\E[0m'           # end underline
export LESS_TERMCAP_us=$'\E[04;37m'       # begin underline

# inscription des info dans la barre de titre des terminaux
case $TERM in
 rxvt|*term)
   precmd() { print -Pn "\e]0;%n@%m:%~\a" }
   preexec () { print -Pn "\e]0;$1\a" }
 ;;
esac

# Completion of hostnames, pulled out of ~/.ssh/config.
_myhosts=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p'))
zstyle ':completion:*' hosts ${_myhosts[1, -2]} # Slices off the last entry

# case-insensitive (uppercase from lowercase) completion
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# process completion
zstyle ':completion:*:processes' command 'ps -au$USER'
zstyle ':completion:*:*:kill:*:processes' list-colors "=(#b) #([0-9]#)*=36=31"

# zstyle
zstyle ':completion:*' completer _expand _complete _ignored _approximate
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s'
zstyle ':completion:*:descriptions' format '%U%F{yellow}%d%f%u'
zstyle :compinstall filename '/home/user/.zshrc'

autoload -Uz compinit
autoload colors
compinit

Problème debian screen

En tant que root lors de recherche sur les précédentes commandes le curseur revient en début de ligne.

file /etc/zsh/zshenv

[...]
 if [[ $TERM == "screen" ]] ; then
   setopt noglobalrcs
 fi

Problème avec les touches suppr, début, fin, Ctrl + ←|→

  • utiliser le script zkbd pour les codes qui créait un fichier sous le dossier ~/.zkbd
user:~% zsh -f /usr/share/zsh/4.3.10/functions/Misc/zkbd
  • vous pourrez ensuite récupérer les codes qui vous interesse pour compléter votre .zshrc
[...]
typeset -g -A key
key[Insert]='^[[2~'
key[Home]='^[OH'
key[PageUp]='^[[5~'
key[Delete]='^[[3~'
key[End]='^[OF'
key[PageDown]='^[[6~'
bindkey "${key[Insert]}" overwrite-mode
bindkey "${key[Home]}" beginning-of-line
bindkey "${key[Delete]}" delete-char
bindkey "${key[End]}" end-of-line
bindkey ";5C" forward-word
bindkey ";5D" backward-word
[...] 
  • Pour plus de détails :

screen

fichier ~/.screenrc

# general
autodetach on

# visual bell
vbell on

# scrollback history
defscrollback 5000

# status bar
hardstatus alwayslastline "%{= k}%{+ y}%w%{-}%=%{+ b}load:%l%{-}%=%{+ y}%D %d/%m/%Y %c%{-}"

# keys
bindkey -k k1 prev
bindkey -k k2 next

# tabs
screen -t htop htop
screen -t logs multitail /var/log/messages /var/log/syslog
dcreen -t procinfo procinfo -dn2
screen -t user1
screen -t user2 su - user2

commandes

Les commandes de base :

  • Lancement d'un nouveau screen : screen
  • Lister les screen en cours : screen -ls
  • Réattache le dernier screen (ou liste si > 1) : screen -r


Les commandes qui suivent sont à taper dans un screen :

  • Détacher le screen : Ctrl + a puis d


  • Nouveau shell dans le même screen : Ctrl + a puis Ctrl + c
  • Switch dans les shell d'un screen : Ctrl + a puis [0-9]
  • ou : Ctrl + a puis ' puis nom du shell ou # du shell
  • ou : Ctrl + a puis n ou : Ctrl + a puis p
  • Where are you : Ctrl + a puis N
  • Liste des shell du screen en cours : Ctrl + a puis "
  • ou : Ctrl + a puis w
  • Renommer le shell en cours : Ctrl + a puis A


  • Split : Ctrl + a puis S
  • Changement de région : Ctrl + a puis TAB
  • Tuer la région : Ctrl + a puis X
  • Nouveau shell dans le même screen : Ctrl + a puis Ctrl + c

watch

  • watch permet d'afficher une commande à interval régulier, et entre autre de mettre en surbrillance les différences
# exemple
$ watch -d -n 2 date
  • En voilà une commande qu'elle est sympathique :)

procinfo

  • procinfo permet pour ~40ko d'avoir les informations nécessaire du filesystem /proc
# example avec la v2.0
$ procinfo -bHn1

Redirection dans un pts

  • On utilisera la commande script
# sur la machine distante
riri:~$ w
rdeniro    pts/1    :0.0             12:54    5:36m  0.08s  0.08s /bin/bash
riri       pts/2    :0.0             17:17    2:39m  0.14s  0.04s ssh riri@machine
riri:~$ script -c uptime -f /dev/pts/1
Le script a débuté, le fichier est /dev/pts/1
 18:35:57 up  6:15,  4 users,  load average: 0.06, 0.04, 0.00
Script complélé, le fichier est /dev/pts/1 

# localement sur pts/1 robert verra :
rdeniro:~$
Le script complété sur dim. 26 Avril 2009 00:00:00 CEST
 18:35:57 up  6:15,  4 users,  load average: 0.06, 0.04, 0.00
Script complélé sur dim. 26 Avril 2009 00:00:10 CEST

console redirection

BIOS

Si il est possible dans les options de votre BIOS, utilisez la redirection vers le port série.

command line

  • redirection des info du noyau sur COM1

Ajoutez à la ligne du kernel l'argument console

root   (hd0,0)
kernel /vmlinuz26 root=/dev/mapper/main-root ro quiet vga=30 nomodeset console=tty0 console=ttyS0,115200n8
initrd /kernel26.img
  1. le premier conserve la sortie vers le tuyau principale
  2. le deuxième redirige sur le port série COM1 à 115200bps sans bit de parité et en 8 bits

/etc/grub/menu.lst

  • redirection de grub sur COM1
[...]
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=5 console serial
[...]

/etc/inittab

  • redirection du prompt sur COM1
[...]
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100
[...]

liens externes

Infos système

Alternatives aux cat /proc/cpuinfo et compagnies lshw avec les options -html ou -xml ou encore -short Aida n'a qu'à bien se tenir.

  • dmidecode
# dmidecode -t
dmidecode: option requires an argument -- t
Type number or keyword expected
Valid type keywords are:
 bios
 system
 baseboard
 chassis
 processor
 memory
 cache
 connector
 slot
  • lspci
  • lsusb
  • lshw

Un man vous en expliquera plus que moi, sinon je vous en laisse deux ou trois sympathiques :

# lshw -class disk -class volume -short
# lshw -html > `hostname`.html && firefox `hostname`.html

Les touches multimedia

  • Sous gnome:
Bureau > Préférences > Raccourcis clavier (ou gnome-keybinding-properties)

Vous devriez trouver facilement des touches non définies.

Vous pouvez également les modifier avec gconf-editor

Voici les chemins:
~/.gconf/apps/metacity/global_keybindings
~/.gconf/apps/metacity/window_keybindings
~/.gconf/apps/gnome_settings_daemon/keybindings 
  • En utilisant Xmodmap:

Vous pouvez utiliser xev pour retrouver les keycodes correspondant aux actions, puis à l'aide de /usr/share/X11/XKeysymDB vous pourrez aisément compléter /etc/X11/Xmodmap.

Voici les touches du volume :
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume

Encodage

  • Informations sur le type et l'encodage de votre fichier :
$ file fichier
  • Convertir des noms de fichiers venant de zindozs par exemple :
$ convmv -r --nosmart --notest -f iso-8859-1 -t utf8 *
  • Convertir des fichiers venant de zindozs par exemple :
$ iconv -f iso-8859-1 -t utf8 file.iso -o file.utf8
  • Pour plus de précision cet article est complet.

Conversions

HTML > WIKI

  • Convertir des pages HTML au format wiki (mediawiki, pmwiki, moinmoin, ...)
$ sudo apt-get install libhtml-wikiconverter-perl
$ html2wiki --dialect mediawiki file.html > file.wiki

HTML <> text

  • Convertir du texte HTML en texte et vice versa o_O
$ recode UTF-8..HTML /tmp/index.html

PDF > HTML

  • Conversion d'un fichier PDF en fichier HTML
$ pdftohtml file.pdf file.html

liens mailto firefox

  • Dans firefox vous pouvez faire que les liens du type mailto: pointe sur gmail ou yahoo facilement. Mais vous pouvez également paramétrer un webmail différent :

configuration

  • Dans votre barre d'adresse : about:config (puis une recherche sur mailto)
gecko.handlerService.schemes.mailto.2.name=webmail du boulot
gecko.handlerService.schemes.mailto.2.uriTemplate=http://example.org/squirrelmail/src/mailto.php?emailaddress=%s
  • Pour que les modifications prennent effet incrémentez la valeur de la clef qui suit
gecko.handlerService.defaultHandlersVersion=2
  • Redémarrez firefox
  • Dans le choix des préférences, onglet application, mailto vous trouverez votre nouvelle entrée.

documentation

  • dans votre barre d'adresse : chrome://browser-region/locale/region.properties (puis une recherche sur mailto)

Recherche sur le site http://www.commandlinefu.com/

  • Ajouter cette fonction dans votre .bashrc ou .bash_aliases
 [...]
 # command line fu search
 function clfu-search() {
  wget -q -O /dev/stdout --post-data "q=$1" http://www.commandlinefu.com/search/autocomplete | \
  grep "class=\"autocomplete-command\"" | \
  sed -e 's/^.*<strong>\(.*\)<\/strong>/\1/' -e 's/<\/div>//' | sort -u
 }
 [...]
  • Utilisation
user@machine:~# clfu-search find
find . -name "*.[ch]" -exec grep -i -H "search pharse" {} \;
find . -name "*.php" -exec iconv -f ISO-8859-1 -t UTF-8 {} -o ../newdir_utf8/{} \;
find ~ -name '*.sqlite' -exec sqlite3 '{}' 'VACUUM;' \;
find /path/to/dir -type f -print0 | xargs -0 rm
find * -type d -exec mkdir /where/you/wantem/\{\} \;
find ./ -type f -exec chmod 644 {} \;
user@machine:~#