Partagez vos fonctionnalités et astuces en ligne de commande pour Unix/Linux. Essayez de garder le Shell/distro agnostique si possible. Intéressé à voir des alias, des lignes simples, des raccourcis clavier, de petits scripts Shell, etc.
Cela s'étend un peu sur le !!
astuce mentionnée dans cette réponse . Il y a en fait un tas de commandes liées à l'histoire qui ont tendance à être oubliées (les gens ont tendance à poignarder Up 100 fois au lieu de chercher une commande qu'ils savent avoir tapée).
history
affichera une liste des commandes récemment exécutées avec un désignateur d'événement à gauche!N
remplacera la commande associée au désignateur d'événement N
!-N
remplacera le N
e commande la plus récente; par exemple. !-1
remplacera la commande la plus récente, !-2
le deuxième plus récent, etc.!!
est un raccourci pour !-1
, pour remplacer rapidement la dernière commande!string
remplacera la commande la plus récente commençant par string
!?string?
remplacera la commande la plus récente qui contient string
Des désignateurs de mots peuvent être ajoutés à un !
commande historique pour modifier les résultats. Un deux-points sépare les désignateurs d'événement et de mot, par exemple !!:0
. Le désignateur d'événement !!
peut être abrégé en !
lorsque vous utilisez un indicateur Word, donc !!:0
est équivalent à !:0
.
!:0
obtiendra la commande qui a été exécutée!:1
obtiendra le premier argument (et !:2
le deuxième, etc.)!:2-3
obtiendra les deuxième et troisième arguments!:^
est une autre façon d'obtenir le premier argument. !:$
obtiendra le dernier!:*
obtiendra tous les arguments (mais pas la commande)Les modificateurs peuvent également être ajoutés à un !
commande historique, chacune précédée d'un deux-points. N'importe quel nombre peut être empilé (par exemple !:t:r:p
).
h
- Aligne sur le nom de fichier de baset
- Seul le nom de fichier de baser
- Aligne l'extension de nom de fichiere
- Seule l'extension du nom de fichiers/search/replacement
- Remplace la première occurrence de search
par replacement
gs/search/replacement
- Remplace toutes les occurrences de search
par replacement
bash - insérer le paramètre final de la ligne précédente
alt-. la combinaison de touches la plus utile de tous les temps, essayez-la et voyez, pour une raison inconnue, personne ne la connaît.
appuyez encore et encore pour sélectionner les derniers paramètres les plus anciens.
génial quand vous voulez faire quelque chose de plus avec l'argument/fichier que vous avez utilisé il y a un instant.
Mon favori est
man 7 ascii
Simple et donc très utile.
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
Jetez un œil à ce site Web commandlinefu.com .
Vous pouvez également consulter ces quatre articles de Peteris Krumins sur son blog
Exécutez la dernière commande en tant que root:
Sudo !!
Je ne sais pas si cela compte comme un "truc", mais les gens semblent très peu au courant des raccourcis clavier de ligne de lecture standard. D'une utilisation particulière dans les coquilles:
CTRL+R en BASH pour rechercher/activer des commandes précédemment exécutées (le contenu de ~/.bash_history).
C'est souvent extrêmement utile. L'exécution de cet alias servira le PWD sur HTTP (indexé) sur le port 8000:
alias webserver="python -m SimpleHTTPServer"
Et parce que je lance make tout le temps, et que je tape trop vite, ces alias sont probablement mes plus utilisés (sérieusement):
alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make
Et probablement mon morceau de BASH le plus fréquemment utilisé est un simple script que j'appelle upload. Je l'utilise pour intégrer tout type de contenu à mon Linode, et il copie l'URL HTTP résultante dans mon presse-papiers (clic du milieu). Très utile pour coller des trucs à des personnes dans IRC:
scp -r $* $user@$Host:public_html && {
URL="http://$Host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
Juste un couple. Je peux poster beaucoup plus tard, je dois retourner au travail!
diff
la sortie de deux commandes sans créer manuellement un fichier temporaire (bash):
diff <(ls dir1) <(ls dir2)
Assez basique, mais les gens ne semblent pas le savoir, vous ramène au répertoire précédent:
cd -
L'expansion d'accolade est un mécanisme par lequel des chaînes arbitraires peuvent être générées.
Il vous permet de remplacer les lignes fastidieuses comme:
mv loong/and/complex/file/name loong/and/complex/file/name.bacukup
avec une instance plus courte
mv loong/and/complex/file/name{,backup}
quelques autres utilisations
# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}
# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share
Expansion arithmétique :
L'expansion arithmétique permet l'évaluation d'une expression arithmétique et la substitution du résultat. Le format de l'expansion arithmétique est le suivant:
$((expression))
L'expression est traitée comme si elle se trouvait entre guillemets doubles, mais un guillemet double entre parenthèses n'est pas traité spécialement. Tous les jetons de l'expression subissent une expansion de paramètre, une expansion de chaîne, une substitution de commande et une suppression de devis. Les extensions arithmétiques peuvent être imbriquées.
$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
C'est généralement dans mon script de démarrage (.bashrc, .profile, peu importe)
shopt
bonté, vérifiez les commentaires:
shopt -s cdspell # try to correct typos in path
shopt -s dotglob # include dotfiles in path expansion
shopt -s hostcomplete # try to autocomplete hostnames
Un alias qui enregistre les frappes: mkdir
et cd
dedans:
mkcd () { mkdir -p "$@" && cd "$@"; }
Et enfin et surtout, j'ai abandonné la mémorisation de la syntaxe tar, donc:
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.Zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
Deux fonctions bash qui me font économiser de nombreux coups de touches.
Faites automatiquement un ls après chaque cd réussi:
function cd {
builtin cd "$@" && ls
}
Montez n niveaux:
# Usage .. [n]
function .. (){
local arg=${1:-1};
local dir=""
while [ $arg -gt 0 ]; do
dir="../$dir"
arg=$(($arg - 1));
done
cd $dir #>&/dev/null
}
Étant donné que je suis généralement à mi-chemin d'une ligne de commande avant de vouloir rechercher (CTRL-R en bash), j'ai ce qui suit dans mon .bashrc
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
Cela signifie que si je tape cd puis appuyez sur haut/bas, je peux voir toutes les options que j'ai sur cd'd. Fondamentalement, je l'utilise pour les répertoires souvent utilisés. Comme "cd w" et je finis par parcourir tous les espaces de travail que j'utilise beaucoup.
Une chose qui me fait gagner beaucoup de temps est les commandes pushd/popd. Ces gars vous permettent de créer une pile de répertoires et de réduire beaucoup la frappe:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
Le screen
commande . Il enregistre essentiellement votre session de ligne de commande lorsque vous revenez. C'est une sorte de gestionnaire de terminaux, comme un gestionnaire de fenêtres. De cette façon, dans une seule session de terminal, vous pouvez avoir plusieurs terminaux virtuels en cours. C'est vraiment cool.
Si l'on utilise screen
, cette fonction Shell (mettez-la dans .bashrc
) est extrêmement utile:
function scr {
if screen -ls | grep -q Main; then
# reattach to Main:
screen -xr Main
else
# name session "Main":
screen -S Main
fi
}
en tapant scr
, il vérifiera si votre session principale existe et s'y attachera. Sinon, il le créera.
Si vous devez modifier une ligne de commande particulièrement longue dans bash
^X^E (Ctrl-X Ctrl-E)
l'ouvrira dans l'éditeur ($ EDITOR).
Dans zsh, vous pouvez obtenir le même comportement en ajoutant ceci à .zshrc:
autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line
Si vous êtes un dactylographe rapide, ceux-ci sont utiles:
alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'
Cette macro vous aide à calculer les totaux d'une colonne de sortie: tailles de fichier, octets, paquets, tout ce que vous avez à faire est de spécifier la colonne que vous souhaitez ajouter:
total ()
{
if [ x$1 = x ]; then set `echo 1`; fi
awk "{total += \$$1} END {print total}"
}
Vous l'utilisez comme ceci par exemple, sans argument, il ajoute le total de la première colonne:
du | total
Si vous fournissez l'argument, il additionnera cette colonne, par exemple, cela vous donne le nombre total d'octets utilisés par tous les fichiers C # dans/tmp:
ls -l /tmp/*cs | total 5
Parfois, votre console est gâchée parce que vous avez accidentellement consulté un fichier binaire (cat/bin/ls par exemple), vous pouvez restaurer le terminal avec cette fonction Shell:
restaura ()
{
Perl -e 'print "\e)B";'
}
J'aime que mes ls utilisent des caractères pour distinguer la classe de fichiers, et aussi pour cacher les fichiers de sauvegarde générés par mon éditeur (les fichiers de sauvegarde se terminent par le caractère ~):
alias ls='ls -FB'
alias s='Sudo'
alias r='rake' # i'm a Ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
Un de mes favoris quand j'oublie s
:
$ s !! # last command with super user priviledges
Si une commande prend l'entrée stdin, vous pouvez lire l'entrée d'un fichier avec <filename
. Cela peut apparaître n'importe où dans la commande, donc ces lignes sont équivalentes:
cat filename
cat <filename
<filename cat
Ceci est particulièrement utile pour grep, car il vous permet de placer l'expression à la fin de la ligne, de sorte que vous pouvez rapidement modifier une commande grep en appuyant sur Up, sans avoir besoin de faire défiler vers la gauche pour dépasser le nom de fichier:
<filename grep 'expression'
Vous pouvez utiliser CDPATH
pour configurer l'équivalent du répertoire de PATH
; si vous essayez de cd foo
et il n'y a pas de foo
dans le répertoire courant, le Shell vérifiera chacun des répertoires dans CDPATH
recherchant foo
dedans, et basculera vers le premier qu'il trouve:
export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
vi `which scriptname`
Car quand vous ne savez pas où vit quelque chose et que vous vous en fichez.
Le esperluette. Il met votre commande en arrière-plan, vous pouvez donc continuer à taper.
$> Sudo updatedb &
En travaillant le long et après un certain temps, vous voyez:
[1] 17403
Et votre processus est terminé! Idéal pour les choses où vous n'avez pas besoin d'attendre qu'elles se terminent.
Fin de tabulation. À quel point cela serait-il nul si vous deviez taper tous les caractères de chaque chemin?
J'ai ceci dans mon .bashrc
#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'
function find-all() {
python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
if type(i) == type(''):
print i
else:
print i[0]"
}
Et quand j'ai du code source html dans le presse-papiers et que je veux trouver tous les liens que j'utilise
c-v | find-all 'href="([^"]*)"' | c-c
Et j'ai toutes les URL dans le presse-papiers
J'ai aussi cette fonction
function lsq(){
ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}
qui affichent la taille (lisible par l'homme) et le nom du fichier.
alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'
cet alias est pour afficher la température
function separate() {
python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}
avec cette fonction, je peux calculer le produit ou la somme des arguments.
alias sum='separate + | bc'
alias product='separate * | bc'
function split-join() {
python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}
Il s'agit d'une fonction utile qui divise l'entrée standard séparée par l'expression régulière et joint ensuite le résultat.
function factorial() {
seq -s* $1 | bc
}
fonction factorielle
function wiki() { Dig +short txt $1.wp.dg.cx; }
Cette fonction affiche le texte wiki sur DNS
J'ai aussi trois fonctions de couleur
function blue() {
echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}
function green() {
echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}
function red() {
echo -e "\x1b[31m\x1b[1m"$@"\x1b[0m";
}
function md5check() {
test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}
Cette fonction valide le hachage du fichier md5.
cela affichera un message d'erreur pour un code donné
function strerror() { python -c "import os; print os.strerror($1)"; }
Vous pouvez imprimer tous les messages avec
alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
Dernier appareil monté:
mount /media/whatever
...
u!mo
!mo
se développe jusqu'à la dernière commande qui a commencé par mo
(au moins en bash). Parfois, on fait mv
au milieu, donc u!m
ne fonctionnera pas aussi souvent.
Une autre astuce ZSH utile:
Traitez la sortie d'une commande comme un fichier:
emacs =(hg cat -r 100 somefile)
Cela ouvre une ancienne version d'un fichier suivi Mercurial dans emacs pour une visualisation mise en évidence par la syntaxe. Sans cela, je devrais jouer avec hg revert
, hg archive
, ou envoyer explicitement hg cat
sortie vers un fichier temporaire.
Bien sûr, cela fonctionne avec tout programme qui ouvre des fichiers et tout programme qui imprime sur une sortie standard.
Une fonction spécifique à ZSH est constituée d'alias de suffixe, définis en donnant à alias
le -s
drapeau:
alias -s ext=program
Si une extension donnée a un alias de suffixe, vous pouvez exécuter un fichier avec cette extension directement, et ZSH lancera le programme donné et passera le nom de fichier comme argument. Donc, si l'alias ci-dessus est en vigueur, ces lignes sont équivalentes:
/path/to/foo.ext
program /path/to/foo.ext
Une de mes fonctionnalités ZSH préférées de tous les temps est nommée répertoires. Vous pouvez exporter une variable avec un nom donné, avec une valeur qui pointe vers un certain chemin:
export foo=/usr/bin
Vous pouvez maintenant utiliser ~foo
dans une commande pour faire référence à /usr/bin
:
cd ~foo
~foo/ls
cat ~foo/filename
La commande ne rien faire :
un péché
while :; do :; done
Expansion de l'entretoise en combinaison avec des boucles for:
for c in {1..3}; do :; done
!
opérateur et opérateurs de court-circuit ||
et &&
[ -d /tmp/dir ] || mkdir /tmp/dir
if ! ping 34.41.34.1; then :; fi
utiliser des sous-shells au lieu de pop/Push (est très pratique dans les scripts)
~$ ( cd /tmp; echo $PWD )
/tmp
~$
le genre de what-is commande type
~$ type type
type is a Shell builtin
~$ type ls
ls is aliased to `ls --color=auto'
~$ f(){ :; }
~$ type f
f is a function
f ()
{
:
}
aussi très sympa: ici-cordes
~$ cat <<<"here $PWD"
here /home/yourname
~$
et mon préféré: redirection sur une liste de commandes
{ w; ps; ls /tmp; } 2>/dev/null |less
Voir ceci question.
Lorsque vous exécutez ps ax | grep string
:
[steve@sage-Arch ~]$ ps ax | grep 'openbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
5100 pts/0 S+ 0:00 grep openbox
la dernière ligne contenant grep
est quelque chose d'un peu ennuyeux
Vous pouvez vous en débarrasser en exécutant ps ax | grep '[s]tring'
:
[steve@sage-Arch ~]$ ps ax | grep '[o]penbox'
3363 ? Ss 0:00 /usr/bin/openbox
3382 ? Ss 0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
3386 ? S 0:00 /bin/sh /usr/bin/openbox-session
3388 ? S 0:00 /bin/sh /usr/bin/openbox-session
3389 ? S 0:00 /bin/sh /usr/bin/openbox-session
3390 ? S 0:00 /bin/sh /usr/bin/openbox-session
mise à jour : ou exécutez simplement pgrep string
Parfois, les paramètres bash sont tels que rm
est aliasé à rm -i
et nécessite donc une confirmation pour chaque fichier supprimé. Lorsque je travaille occasionnellement sur un tel compte, j'utilise \rm
pour récupérer le comportement d'origine de rm
sans modifier la configuration utilisateur.
J'adore insérer autant de choses que possible dans ma PS1. Quelques choses utiles à retenir:
\e[s
et \e[u
enregistrer et annuler la position du curseur respectivement. Je l'utilise pour créer une "barre d'informations" en haut de l'écran, longue de quelques lignes, qui peut contenir plus de choses. Exemple:
PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '
Combiner avec alias clear='echo -e "\e[2J\n"'
. Essaye le!
Également Prompt_COMMAND
variable définit une commande à exécuter avant la PS1 à chaque fois.
Une autre est la commande bg
. Si vous oubliez de mettre &
à la fin d'une commande, appuyez simplement sur ^Z et tapez bg
, et il s'exécute en arrière-plan.
Afficher la branche et l'état de Git dans l'invite
export GIT_PS1_SHOWDIRTYSTATE = true if ["$ color_Prompt" = yes]; alors PS1 = '$ {debian_chroot: + ($ debian_chroot)}\[\ 033 [01; 32m \]\u @\h\[\ 033 [00m \]:\[\ 033 [01; 34m \]\w\[\ 033 [00m \] $ (__ git_ps1 "#% s")\$ ' Else PS1 =' $ {debian_chroot: + ($ debian_chroot)}\u @\h:\w $ (__ git_ps1 "#% s")\$ ' fi
Ma commande préférée est 'trouver', je l'utilise partout ... exemples:
find . -name "*.log" -exec ls -l {} \; | grep "$(find . -name "*.log" -exec ls -l {} \;| nawk '{print $5}' | sort -n | tail )"
Affichez simplement les fichiers les plus lourds au format ls -l (long).
Ensuite, si vous avez besoin de votre code avec les autorisations 0640, recherchez simplement:
find . \( \( ! -perm 0640 \) -a \( -name "*.cpp" -o -name "*.h" \) \) -ls | nawk '{print $3"\t"$11}'
ou remplacer:
find . \( -name "*.cpp" -o -name "*.h" \) | xargs chmod 640
Alors, avez-vous besoin d'un symbole et vous ne savez pas où il se trouve ??
(
for myObj in $(find . -name "*.o"); do
gotSym=$(dump -Xany -t $myObj | grep .MY_SYMBOL)
if ! test "x$gotSym" = "x"
then
echo "OBJECT [$myObj] ========================"
echo "$gotSym"
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"^
fi
done
)
Fichiers plus récents que XFILE ??
find . -newer XFILE -type f
Ouais, "trouve" rulez!
Une fois si souvent lorsque vous avez tapé une longue commande et avant de la terminer, vous avez réalisé que cela ne fonctionnera pas tout de suite, car vous devez exécuter autre chose avant (par exemple, entré git commit -m "long commit message here"
), vous pouvez appuyer sur ^A^K
pour aller au début de la ligne et la tuer (sauvegarde dans un tampon), ensuite exécuter une commande pour corriger les choses, et enfin ^Y
pour coller la commande supprimée et continuer. Économise beaucoup de retaper. Tout cela, bien sûr, c'est quand readline
est en mode Emacs.
Un autre gain de temps: mkdir -p some/nested/dirs/to/be/created
crée tous les répertoires d'un chemin s'ils sont manquants.
Affiche un bel art ascii de l'arbre de processus actuel, avec le processus le plus intensif en CPU mis en évidence.
while true; do
clear;
pstree $( ps -eo pid --sort %cpu | tail -n 1 );
sleep 1;
done
Tuez-le avec Ctrl + C
Voir la sortie de commande mise à jour toutes les n secondes
watch -n 60 df -h (displays df -h every 60 seconds)
Afficher les statistiques sur le périphérique réseau wlan0
ip -s link ls wlan0
Afficher la table de routage pour le périphérique eth1
ip route ls dev eth1
Afficher les statistiques de tous les routeurs parcourus par les paquets pour atteindre l'hôte
mtr --interval 5 HOSTNAME
Consulter les enregistrements DNS inversés pour les noms d'hôte sur le RÉSEAU
nmap -sL NETWORK
Comparer un site Web
ab
Obtenez tous les liens d'une page Web
lynx -dump http://www.yahoo.com | awk '/http/{print $2}'
Afficher la passerelle par défaut
netstat -rn | awk '/UG/{print $2}'
Écrire une erreur standard dans un fichier
foo 2> errors.txt
Rediriger stderr vers stdout
foo 2>&1
Redirigez stderr et stdout vers le même fichier.
foo > file.txt 2>&1
# change chmod to file dowloaded --> $_
wget -c http://link/to/file -O /path/to/save/namefile && chmod 0755 $_
# extract tar.bz2 or tar.gz whit less work
# this avoids having to unpack and then move the files to another location, in this case have # already extracted in the desired location
tar jxvf file.tar.bz2 -C /pat/to/extract
# calculator with bc - in bashrc
calc(){ echo "scale=2;$@" | bc;}
# set magic-space in bashrc
bind Space:magic-space # !pin<space> expand last cmd pin...
# alias to open last edited file in vim
alias lvim="vim -c \"normal '0\""
# alias to show your path set
alias path='echo -e ${PATH//:/\\n}'
Remplacez des parties de la commande précédente:
^
chercher^
remplacer
$ echo a b c d
a b c d
$ ^b c^X
echo a X d
a X d
Idéal pour les fautes de frappe:
$ mkae
-bash: mkae: command not found
$ ^ka^ak
make
[...]
Résumer la taille du répertoire, avec une taille humaine décroissante
du -hs */ | sort -hr
par exemple.
10.2G foo/
4M bar/
expansion double étoile avec zsh (qui descend récursivement l'arborescence des répertoires, pas seulement un niveau, quelque chose de similaire à $(find ! -type d)
:
grep string **/*.cc
ma fonction préférée est PAS DE COULEURS! =)
TERM = xterm-mono ou TERM = linux-m dépend du système d'exploitation ...
J'aime vraiment l'IRSSI en noir et blanc, le mc et tout autre outil "Interface utilisateur texte"
ZSH a des alias globaux. Il étend l'alias n'importe où dans la ligne de commande. J'ai trouvé cela utile pour les noms d'hôtes:
Par exemple.:
alias -g sub='sub.domain.tld'
Ensuite, je peux faire par exemple:
sftp sub
ssh sub
etc.
Pas vraiment un one-liner mais je pense que c'est utile. Convertissez de nombreux fichiers en majuscules, par exemple file_to_upper *php *c
. Il existe de nombreux cas similaires comme la conversion en versions inférieures, le changement de nom de tous les fichiers par suffixe/préfixe, etc.
file_to_upper ()
{
for file in "$@"
do
if [ ! -f "$file" ]; then
echo "File $file does not exist";
else
mv -f "$file" "`echo "$file" | tr '[a-z]' '[A-Z]'`"
fi
done
return 0
}
obtenir le nom du fichier avec l'horodatage le plus récent dans le répertoire courant:
latest () { ls -lrt | tail -1 | awk '{print $NF}' }
function calc() { echo $* p | dc }
dc est une calculatrice RPN; cette fonction me permet de taper l'expression comme arguments de commande:
$ calc 5 3 +
8
Afficher une invite où le nom d'hôte est gras. J'ai essayé les invites de couleur pendant un certain temps, mais la couleur semblait parfois mauvaise en fonction de l'arrière-plan. Bold fonctionne pour moi pour un fond clair, un fond sombre, un fond bleu, etc.
C'est dans mon .bashrc:
bold=$(tput bold)
reset=$(tput sgr0)
export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
J'ai trouvé les éléments suivants utiles lors de la commutation constante entre Windows et Unix/Linux:
alias dir="ls -l"
alias copy="cp"
alias del="rm"
C'est pour zsh, pas bash, fyi (si vous ne l'avez pas utilisé, vous ne regretterez pas de l'avoir essayé). C'est vraiment utile pour taper rapidement de longs chemins pour les transferts scp. Cela fonctionne exactement comme pour compléter ou lister les noms de fichiers/répertoires disponibles.
Exemple
scp [email protected]:/home/webdev/domains/example.com/http.public/long<tab>
terminera le chemin vers /home/webdev/domains/example.com/http.public/longdirname
.
Je suis mauvais dans les exemples, mais cela devrait vous donner l'idée. Essayez-le, cela peut vraiment vous éviter de taper des doigts.
# SSH Completion
zstyle ':completion:*:scp:*' tag-order \
files users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:scp:*' group-order \
files all-files users hosts-domain hosts-Host hosts-ipaddr
zstyle ':completion:*:ssh:*' tag-order \
users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:ssh:*' group-order \
hosts-domain hosts-Host users hosts-ipaddr
zstyle '*' single-ignored show
ReTTY , qui vous permet de déplacer un programme en cours d'exécution d'un terminal à un autre. De cette façon, si vous avez un programme ncurses exécuté en dehors de screen, tmux ou ssh, vous pouvez le joindre à une session ssh ou à un écran en réseau ou à une session tmux en exécutant ReTTY dans le terminal où vous souhaitez utiliser le programme en question. En d'autres termes, il est similaire à screen et tmux mais avec les exceptions que (a) il ne peut exécuter qu'un seul programme à la fois, et (b) il peut être exécuté après vous démarrez le processus enfant.
Mon préféré est d'utiliser la commande python pour créer le serveur http temporaire:
python -m SimpleHTTPServer
et accéder aux fichiers de cette machine sur le lan en tant que:
Une autre consiste à télécharger le fichier tar sous forme extraite sous la forme:
wget -qO - http://192.168.1.70:8000/test.bz2 | tar xjvf -
Ici, le lien peut être n'importe lequel sur le www et bz2 peut être soit gz, tgz ou bz2 lui-même d'ailleurs.
mkdir -p ~/.bashrc.d
cat<<'EOF' >> ~/.bashrc
echo ""
echo -n ".bashrc.d warming up: "
for script in ~/.bashrc.d/* ; do
if [ -x "$script" ] ; then
echo -n "${script##*/} "
. "$script"
fi
done
echo ""
echo ""
echo " All systems are go."
echo ""
EOF
rm() {
local src
local final_status=0
for src in "$@"; do
# Process only non command-line arguments.
if [[ "$src" != -* ]]; then
local trash="$HOME/.Trash"
if [ ! -e "$src" ]; then
echo "Safer rm: $src: No such file or directory."
final_status=1
fi
# Create the trash directory if needed.
if [ ! -d "$trash" ]; then
# Assume Mac trash, but it'll work on *nix too.
mkdir -p "$trash"
if [ ! -d "$trash" ]; then
echo "Safer rm: Unable to create trash directory $trash"
echo ""
echo " Nothing moved or deleted. Consider carefully:"
echo ""
echo " /bin/rm -rf $src"
return 1
fi
fi
local dest="$trash/${src##*/}"
# Find a filename combination which does not already exist.
if [ -e "$dest" ]; then
# Try appending ISO datetime.
dest="$dest.$(date +%Y-%m-%dT%H-%M-%S)"
if [ -e "$dest" ]; then
local n=1
# Try increasing monotony.
while [ -e "$dest.$n" ]; do
n = $[n + 1]
done
dest="$dest.$n"
fi
fi
echo -n "Safer rm: Trashing $src to $dest ..."
/bin/mv "$src" "$dest"
echo " done."
echo ""
echo " To restore: /bin/mv '$dest' '$src'"
echo ""
echo " To purge: /bin/rm -rf '$dest'"
echo ""
echo ""
fi
done
return $final_status
}
# Don't ask why I need 15 levels of cd ..
alias ..='cd ..'
alias .2='cd ../..'
alias ...='.2'
alias .3='cd ../../..'
alias .4='cd ../../../..'
alias .5='cd ../../../../..'
alias .6='cd ../../../../../..'
alias .7='cd ../../../../../../..'
alias .8='cd ../../../../../../../..'
alias .9='cd ../../../../../../../../..'
alias .10='cd ../../../../../../../../../..'
alias .11='cd ../../../../../../../../../../..'
alias .12='cd ../../../../../../../../../../../..'
alias .13='cd ../../../../../../../../../../../../..'
alias .14='cd ../../../../../../../../../../../../../..'
alias .15='cd ../../../../../../../../../../../../../../..'
bind -p | egrep -v '(not|self)' # No existential jokes included.
Après avoir regardé des milliards de polices, j'utilise 14 pt Monaco
, Anti-aliased
avec iTerm2
.
KeyCue (tm) (r) (c) ($) donne le contexte de presque TOUTE application en cours d'exécution en tenant simplement command.
fonction pushd automatique de zsh:
setopt autopushd
et avec ça:
alias dirs='dirs -v'
Pour qu'à tout moment, je puisse taper dirs
et obtenir l'historique de ma position:
0 /var/log
1 /tmp
2 /usr/local/bin
3 ~
puis je peux cd
revenir par exemple /usr/local/bin
en tappant:
cd ~2
Aucun des "trucs" suivants n'est techniquement difficile ou impressionnant, mais ils ont un certain impact sur l'autre personne. Si nous ne pouvons pas utiliser nos emplois pour rendre nos vies plus heureuses, alors nous devrions réfléchir à nouveau à certaines choses.
J'aime alias
. Mon astuce préférée est d'éditer les ~/.bash_aliases sur l'ordinateur de mon amie car elle est manquante et d'ajouter une ligne comme:
alias gfname='echo Myname is thinking of you'
ou une autre citation romantique.
Un autre "truc" que j'aime particulièrement est:
#!/bin/bash
xaa=123`
for ((a=1; a <= xaa; a++))
do
#sleep 1;
mail -s "Happy Birthday $a" [email protected] < mails.txt
done
exit 0`
où 123 est celui de la personne à qui j'aimerais souhaiter un joyeux anniversaire et mails.txt contient le message que j'aimerais écrire comme corps de l'email. Sleep 1; est parfois nécessaire car il y a une limite sur fork (). Vous pouvez également utiliser des arguments de ligne de commande $1
etc...
J'ai des dossiers nommés dans mon dossier d'accueil comme Document, Téléchargements, Temp, etc. avec la première lettre en majuscule. Quand je travaille sur le terminal, c'est ennuyeux de changer de position, appuyez sur la première touche lorsque vous êtes dans un répertoire. Saisissez simplement les informations suivantes dans votre terminal et bash corrigera automatiquement le cas pour vous.
shopt -s nocaseglob
Utilisation pgrep foo
au lieu de ps aux | grep foo
si vous voulez savoir combien d'instances de foo sont en cours d'exécution et leurs pids:
par exemple. au lieu de ps aux | grep firefox
, utilisation pgrep firefox
Je ne peux pas vivre sans
set editing-mode vi
set blink-matching-paren on
dans mon ~/.inputrc.
Les active dans chaque application compatible avec la lecture en ligne. Seule l'activation de l'édition de ligne de commande vi dans le shell fonctionne via:
set -o vi
Ainsi, en appuyant sur ESC ou CTRL + [ vous obtenez le mode vi-commande bien connu. Et vous pouvez utiliser des commandes vi puissantes partout!
Il existe un excellent site pour cela à: http://www.commandlinefu.com/commands/browse
Mon préféré est
find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'
Ce que fait la commande ci-dessus, c'est de trouver un fichier de nom x, puis de rechercher dans ce fichier le modèle que vous recherchez. Incroyablement utile si vous recherchez un morceau de code particulier dans un fichier quelque part dans vos sous-répertoires.
find path expr -exec ls -ld {} \;
Belle façon facile de voir la propriété, les autorisations, les tailles (si les fichiers) et d'autres caractéristiques de tout ce que votre expression de recherche renvoie.
Je remarque souvent, juste après avoir démarré une commande de 15 minutes, que j'aurais voulu ajouter d'autres éléments à la ligne de commande en utilisant &&
. Au lieu d'interrompre le travail déjà en cours d'exécution, j'ai tendance à utiliser at
pour mettre le deuxième en file d'attente, me donnant ainsi plus de temps, je n'ai pas besoin de regarder le terminal.
Généralement, at
met en file d'attente les tâches à exécuter à un moment donné:
$ at 14:30
> myscript
> anotherscript
> <CTRL-D>
Les entrées de la file d'attente peuvent être affichées avec atq
et supprimées avec atrm
.
Un autre ajout aux conseils de personnalisation de l'invite bash: j'aime inverser l'invite, car cela donne de bons indices visuels où la sortie de la commande commence et se termine dans de longues listes de terminaux. Cela fonctionne bien pour les arrière-plans lumineux et sombres.
export PS1="\[\e[7m\][\u@\h \w]\[\e[0m\]$ "
synchronisation; synchronisation; synchronisation; redémarrage
peut être très utile parfois. Faites attention !
Je trouve que la compréhension des frappes de touches bash conduit à un décorticage plus efficace, et que beaucoup d'entre elles sont directement issues d'emacs clarifie leur utilisation (c'est-à-dire que meta-XXX
est la version grand frère de ctrl-XXX
commande habituellement).
La touche "méta" est généralement la touche "alt", mais peut également être la touche "esc". par exemple. meta-f
peut être obtenu avec alt-f
ou esc f
.
Pour que les mappages de touches alt fonctionnent, vous devrez peut-être désactiver les "touches d'accès au menu" ou son équivalent dans les options de la console. Fondamentalement, si vous appuyez sur alt-f et que le menu Fichier s'affiche, désactivez les menus d'accès Alt-Key.
ctrl-a / ctrl-e : move to start / end of line
notions de base dont vous ne pouvez vous passer
ctrl-f, meta-f : forward char/Word
appuyer sur alt-f vous fait avancer "1 mot" qui sur la ligne de commande est à peu près une commande ou un argument
ctrl-b, meta-b : backwards char/Word
identique à alt-f, mais en arrière pour revenir en arrière à travers la ligne de commande
ctrl-d, meta-d : delete char/Word
appuyer sur alt-d supprimera (jusqu'à la fin de) le mot en cours sous le curseur. beaucoup plus rapide puis en maintenant la touche Suppr enfoncée pendant 30 secondes. Utile lorsque vous complétez un onglet au milieu de quelque chose et que vous souhaitez transférer la suppression à la fin de Word.
ctrl-k : kill line
supprime jusqu'à la fin de la ligne
ctrl-u : undo
par exemple. en tapant un mot de passe, et vous savez que vous vous êtes trompé quelque part, au lieu de revenir 20 fois en arrière, appuyez simplement sur ctrl-u. efface également la ligne de commande actuelle.
meta-# : insert comment
c'est idéal pour conserver votre ligne de commande que vous créez en tant que commentaire avant de l'exécuter si vous devez d'abord faire autre chose. il entrera dans l'historique de vos commandes mais ne s'exécutera pas.
ctrl-r : reverse search
recherche en arrière dans l'historique de votre Shell (répétition des touches ctrl-r pour le match suivant)
ctrl-g : abort
si vous êtes au milieu de ctrl-r
et souhaitez simplement revenir à l'endroit où vous avez tapé, abandonnez simplement votre recherche avec ctrl-g
meta-space / ctrl-x ctrl-x : set mark and jump to mark
si vous devez passer rapidement à une position dans votre ligne de commande, définissez d'abord la marque, puis revenez-y avec ctrl-x ctrl-x
. Notez que vous devrez peut-être utiliser esc-space
pour obtenir la marque définie comme alt-space
est souvent lié à la réduction du menu de la console.
ctrl-] <char> : quick jump to <char>
saute vers le caractère saisi après le ctrl-]
sur la ligne de commande. Le grand frère Meta-ctrl-] <char>
saute en arrière.
Mes favoris sont ci-dessous. J'utilise la plupart d'entre eux régulièrement
df -k (vérifier les systèmes de fichiers) kill ou kill -9 (kill a process) set -o vi (définissez votre ligne de commande sur vi) topas (outil de performance) monter/démonter
oh ouais et comment pourrais-je oublier le> (pour rediriger la sortie vers un fichier) ls> /tmp/tmp.txt
Beaucoup plus, mais certains du haut de ma tête.