Y a-t-il quelque chose dont vous ne pouvez pas vous passer et qui me facilitera la vie SO beaucoup plus facile? En voici quelques-unes que j'utilise (les "espaces disque" et les "dossiers" sont particulièrement pratiques).
# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CFlh'
alias woo='fortune'
alias lsd="ls -alF | grep /$"
# This is GOLD for finding out what is taking so much space on your drives!
alias diskspace="du -S | sort -n -r |more"
# Command line mplayer movie watching for the win.
alias mp="mplayer -fs"
# Show me the size (sorted) of only the folders in this directory
alias folders="find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn"
# This will keep you sane when you're about to smash the keyboard again.
alias frak="fortune"
# This is where you put your hand rolled scripts (remember to chmod them)
PATH="$HOME/bin:$PATH"
J'ai un petit script qui extrait des archives, je l'ai trouvé quelque part sur le net:
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.Zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
Puisque j'utilise tant de machines différentes, mon .bashrc
définit toujours l'invite de commande pour inclure, entre autres, le nom du serveur auquel je suis actuellement connecté. De cette façon, lorsque j'ai trois niveaux de profondeur dans telnet/ssh, je ne tape pas la mauvaise chose dans la mauvaise fenêtre. Ça craint vraiment de rm -rf .
dans la mauvaise fenêtre! (Remarque: à la maison, telnet est désactivé sur toutes les machines. Au travail, ssh n'est pas toujours activé et je n'ai pas accès root à de très nombreuses machines.)
J'ai un script ~/bin/setprompt
qui est exécuté par mon .bashrc
, qui contient:
RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"
# Throw it all together
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "
Ce script définit l'invite sur le nom d'hôte suivi de :)
si la dernière commande a réussi et :(
si la dernière commande a échoué.
La couleur des pages de manuel en moins facilite la lecture des pages de manuel:
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
Les pages de manuel colorées peuvent également être obtenues en installant la plupart et en l'utilisant comme variable env MANPAGER. Si vous souhaitez utiliser ce pager non seulement pour l'homme, utilisez la variable PAGER, comme ceci:
export PAGER="/usr/bin/most -s"
Monte de nombreux dirs lorsque le nombre est passé en argument, si aucun ne monte de 1 par défaut (trouvé dans un lien dans un commentaire dans stackoverflow.com et modifié un peu)
up(){
local d=""
limit=$1
for ((i=1 ; i <= limit ; i++))
do
d=$d/..
done
d=$(echo $d | sed 's/^\///')
if [ -z "$d" ]; then
d=..
fi
cd $d
}
Je traite avec beaucoup de machines différentes, donc l'un de mes favoris est les alias pour chaque machine que je dois fréquemment SSH pour:
alias claudius="ssh dinomite@claudius"
Il est également utile de configurer un bon .ssh/config
et touches ssh pour rendre le saut parmi les machines encore plus facile.
Un autre de mes alias préférés est de remonter les répertoires:
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
Et certains pour les variations couramment utilisées de ls
(et fautes de frappe):
alias ll="ls -l"
alias lo="ls -o"
alias lh="ls -lh"
alias la="ls -la"
alias sl="ls"
alias l="ls"
alias s="ls"
L'historique peut être très utile, mais par défaut sur la plupart des distributions, votre historique est effacé par chaque shell sortant, et il ne contient pas grand-chose au départ. J'aime avoir 10 000 lignes d'histoire:
export HISTFILESIZE=20000
export HISTSIZE=10000
shopt -s histappend
# Combine multiline commands into one in history
shopt -s cmdhist
# Ignore duplicates, ls without options and builtin commands
HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:[bf]g:exit"
De cette façon, si je sais que j'ai déjà fait quelque chose mais que je ne me souviens pas des détails, un rapide history | grep foo
aidera à rafraîchir ma mémoire.
Je me suis souvent retrouvé à diriger la sortie via awk
afin d'obtenir une certaine colonne de la sortie, comme dans df -h | awk '{print $2}'
pour trouver la taille de chacun de mes disques. Pour faciliter cela, j'ai créé une fonction fawk
dans mon .bashrc:
function fawk {
first="awk '{print "
last="}'"
cmd="${first}\$${1}${last}"
eval $cmd
}
Je peux maintenant exécuter df -h|fawk 2
ce qui économise un peu de frappe.
Si vous devez spécifier un délimiteur ( par exemple , awk -F:
pour /etc/passwd
), cette fonction ne peut évidemment pas gérer cela. La version légèrement révisée dans cet Gist peut gérer des arguments arbitraires awk
avant le numéro de champ (mais nécessite toujours une entrée de stdin).
Je suis sûr que nous avons tous des choses que nous aimerions mettre dans notre bashrc que nous ne voulons pas facilement lisibles par les sudoers. Ma solution à cela est:
if [ -f ~/.bash_private.gpg ]; then
eval "$(gpg --decrypt ~/.bash_private.gpg 2>/dev/null)"
fi
J'ai un agent GPG qui fait en sorte que je n'ai qu'à entrer le mot de passe de ma clé privée toutes les quelques heures. Vous devez toujours avoir une certaine confiance dans les utilisateurs du système, car vos variables, fonctions et alias que vous définissez pourraient être extraits de la RAM. Cependant, je l'utilise principalement pour mon ordinateur portable. S'il est volé, je ne veux pas que quelqu'un voie facilement des choses comme:
alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:[email protected]/latest; }
c'est une ressource géniale pour cela:
J'avais l'habitude de les configurer partout, mais je me suis ensuite rendu compte qu'il valait mieux se rappeler comment les faire `` manuellement '' car cela signifiait que je 1) comprendrais parfaitement ce qui se passait et 2) aurais accès à ces capacités même si mon .bashrc personnalisé n'a pas été installé.
La seule chose que j'utilise des alias ces jours-ci est de réduire la saisie répétitive de très longues lignes (par exemple. alias myhost='ssh -T [email protected] screen -dAr'
)
Les doublures et les minuscules scripts pourraient durer éternellement. Je recommande l'homme bash et l'écriture des choses vous-même. Quelques bons trucs bash bas à http://www.commandlinefu.com . Voici quelques choses.
#use extra globing features. See man bash, search extglob.
shopt -s extglob
#include .files when globbing.
shopt -s dotglob
#When a glob expands to nothing, make it an empty string instead of the literal characters.
shopt -s nullglob
# fix spelling errors for cd, only in interactive Shell
shopt -s cdspell
# vi mode
set -o vi
s() { # do Sudo, or Sudo the last command if no argument given
if [[ $# == 0 ]]; then
Sudo $(history -p '!!')
else
Sudo "$@"
fi
}
Prompt_command() {
p=$PWD # p is much easier to type in interactive shells
# a special IFS should be limited to 1 liners or inside scripts.
# Otherwise it only causes mistakes.
unset IFS
}
Prompt_COMMAND=Prompt_command
# smart advanced completion, download from
# http://bash-completion.alioth.debian.org/
if [[ -f $HOME/local/bin/bash_completion ]]; then
. $HOME/local/bin/bash_completion
fi
extract () { # extract files. Ignore files with improper extensions.
local x
ee() { # echo and execute
echo "$@"
$1 "$2"
}
for x in "$@"; do
[[ -f $x ]] || continue
case "$x" in
*.tar.bz2 | *.tbz2 ) ee "tar xvjf" "$x" ;;
*.tar.gz | *.tgz ) ee "tar xvzf" "$x" ;;
*.bz2 ) ee "bunzip2" "$x" ;;
*.rar ) ee "unrar x" "$x" ;;
*.gz ) ee "gunzip" "$x" ;;
*.tar ) ee "tar xvf" "$x" ;;
*.Zip ) ee "unzip" "$x" ;;
*.Z ) ee "uncompress" "$x" ;;
*.7z ) ee "7z x" "$x" ;;
esac
done
}
Un petit conseil pour Bash si vous êtes un administrateur système et travaillez beaucoup avec les privilèges root:
shopt -o noclobber
Cela vous évitera de détruire accidentellement le contenu d'un fichier déjà existant si vous redirigez la sortie (> nom de fichier). Vous pouvez toujours forcer l'écrasement avec> | nom de fichier.
J'ai ce qui suit dans mon bashrc
function __setprompt {
local BLUE="\[\033[0;34m\]"
local NO_COLOUR="\[\033[0m\]"
local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
if [ $SSH2_IP ] || [ $SSH_IP ] ; then
local SSH_FLAG="@\h"
fi
PS1="$BLUE[\$(date +%H:%M)][\u$SSH_FLAG:\w]\\$ $NO_COLOUR"
PS2="$BLUE>$NO_COLOUR "
PS4='$BLUE+$NO_COLOUR '
}
__setprompt
Sur une machine locale, cela ressemble à:
[17:57][user:~]$
mais sur une télécommande (via ssh) c'est:
[17:57][user@machine:~]$
Je l'ai depuis un moment dans mon .bashrc et je l'ai trouvé utile. Si vous vous connectez à la boîte, l'écran démarre automatiquement lorsque vous vous connectez, de cette façon lorsque votre connexion réseau est interrompue ou autre, vous ne perdez pas ce que vous faisiez. Il doit être placé à la fin.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]
then
STARTED_SCREEN=1 ; export STARTED_SCREEN
[ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs
sleep 1
screen -U -RR && exit 0
echo "Screen failed! continuing with normal bash startup"
fi
J'ai quelques morceaux:
# stop the pc speaker ever annoying me :)
setterm -bfreq 0
# don't put duplicate lines in the history. See bash(1) for more options
HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
HISTCONTROL=ignoreboth
# Expand the history size
HISTFILESIZE=10000
HISTSIZE=100
# commands with leading space do not get added to history
HISTCONTROL=ignorespace
# am I on the internet?
alias p4='ping 4.2.2.2 -c 4'
# pwsafe
alias pw='pwsafe -p'
# ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -laptr' #oldest first sort
alias labc='ls -lap' #alphabetical sort
# cd aliases
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# cd into the old directory
alias bd='cd "$OLDPWD"'
# install a package and automatically respond yes to confirmation Prompt
alias ins="Sudo aptitude install"
# remove a package and its configuration files
alias remp="Sudo aptitude purge"
# search for a package - apt-cache and aptitude search in different ways
# so have both
alias searchc="apt-cache search"
alias search="aptitude search"
alias show="aptitude show"
De combien d'alias à fortune
avez-vous besoin, de toute façon?
J'aime créer un alias cdd
qui m'emmène là où je suis actuellement le plus susceptible de travailler sur ce serveur.
PATH
la redéfinition appartient vraiment à .bash_profile
, ne pas .bashrc
.
Sur un serveur où j'utilise régulièrement un grand nombre de screen
s, mon .bashrc
aura:
alias s1="screen -dr chaos1"
alias s2="screen -dr chaos2"
alias s3="screen -dr chaos3"
# ... and so on
(Les screen
ont été configurés avec, par exemple, screen -U -S chaos1
.)
Entre autres choses, j'ai défini quelques valeurs par défaut pour moins, empêche la fermeture accidentelle de mon terminal et active la navigation vers l'avant dans l'historique:
# ignore case, long Prompt, exit if it fits on one screen, allow colors for ls and grep colors
export LESS="-iMFXR"
# must press ctrl-D 2+1 times to exit Shell
export IGNOREEOF="2"
# allow ctrl-S for history navigation (with ctrl-R)
stty -ixon
Tail tous les journaux dans/var/log
alias logs="find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
Pour avoir des couleurs pour toutes les commandes grep telles que grep, egrep et zgrep, j'ai ce qui suit dans mon .bashrc
export GREP_OPTIONS='--color=auto'
L'alias "dossiers" est génial! Je l'ai légèrement modifié pour que les répertoires avec des espaces ne provoquent pas d'erreurs.
alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
Je voudrais faire écho au commentaire de @ pjz sur la connaissance manuelle des choses plutôt que de les configurer. Surtout si vous accédez à de nombreuses machines, comme je semble toujours le faire.
Donc, je sais certainement que c'est set -o vi
parce que je connais les commandes vi-edit en bash et je ne connais pas celles emacs (en plus, Ctrl + A interfère avec screen
). Sur mes propres boîtes, je mets ça dans .bashrc
Je trouve également que je dois inclure export EDITOR=vim
parce qu'un certain nombre de distributions récentes par défaut sont nano, ce qui est très ennuyeux d'être lancé par un utilitaire qui a besoin de vous pour éditer quelque chose, quand je m'attendais à vi. : - /
Je modifie également mon invite. J'ai trouvé il y a très longtemps que l'ajout du dernier code d'erreur est juste assez utile pour que je l'aime. Et j'aime le chemin d'accès complet dans l'invite. Et le numéro screen
actuel aussi. Et il est tout simplement logique d'inclure l'utilisateur et le nom d'hôte actuels. Mon invite est PS1='\u@\h $PWD $WINDOW [$?] \$ '
Voici les mines:
export HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:bg:fg"
# set variable identifying the chroot you work in (used in the Prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# shows you if you are in a chroot or in a git repository
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30m\]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]$(__git_ps1)\$ '
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
# two handy single-letter aliases
alias u='ls -hltr'
alias e='du * -cs | sort -nr | head'
alias g='grep -C5 --color=auto'
# creates a temp dir and cds into it
alias td='pushd $(mktemp -d)'
# find <dir> <file name regexp> <file contents regexp>
function fing { find "$1" -name "$2" -exec grep -H "$3" "{}" \; }
# shows "git diff" across any project in any subdirectory
alias git-differ='for g in $(find . -name ".git"); do g=${g%%.git};printf "$g\t\t\t";pu $g >/dev/null && git diff |wc -l; p >/dev/null; done'
# does git house keeping across any project in any subdirectory
alias git-housekeep='for g in $(find . -name ".git"); do g=${g%%.git};echo $g;pu $g && git repack && git gc --auto && p;done'
# Debian update
alias apg='aptitude update && aptitude dist-upgrade && aptitude clean'
# Quick way to serve files in HTTP from the local dir
alias webs='python -m SimpleHTTPServer'
Shell-fu.org .bashrc collection
Demandez à bash de vérifier si la taille de la fenêtre a changé (empêche l'édition de ligne de devenir bizarre si vous redimensionnez la fenêtre de votre terminal)
shopt -s checkwinsize
C'est mon préféré. Fait bash ajouter à l'historique au lieu de écraser le. Généralement, lorsque vous lancez bash, il charge l'historique en mémoire et lorsque vous le fermez, il l'écrit. Cela signifie que si vous chargez deux shells, utilisez les deux, puis fermez les deux, celui que vous avez fermé en dernier écrase toutes les modifications.
Cet extrait de code lui fait tout d'abord seulement ajouter des modifications (au lieu de l'écraser avec tout le tampon), puis de le faire, après chaque commande, écrire les modifications. En effet, vous obtenez un .bash_history de mise à jour en direct, donc si vous démarrez un nouveau terminal, vous avez toutes les commandes de l'historique de vos autres sessions en cours d'exécution.
shopt -s histappend
Prompt_COMMAND='history -a'
Voici quelques un de mes préférés:
alias ls='ls -F --color=auto'
alias l='ls'
alias ll='ls -ahl'
alias ..='cd ..'
alias ...='cd ../..'
alias mv='mv -i'
mkcd() {
if [ $# != 1 ]; then
echo "Usage: mkcd <dir>"
else
mkdir -p $1 && cd $1
fi
}
# Git related
alias gs='git status'
alias gc='git commit'
alias ga='git add'
alias Gd='git diff'
alias gb='git branch'
alias gl='git log'
alias gsb='git show-branch'
alias gco='git checkout'
alias gg='git grep'
alias gk='gitk --all'
alias gr='git rebase'
alias gri='git rebase --interactive'
alias gcp='git cherry-pick'
alias grm='git rm'
De Automatisation de l'administration Linux et Unix par Kirk Bauer (grand livre!)
PS1='\n[\u@\h]: \w\n$?> '
La nouvelle ligne au début est la mienne, j'aime avoir une ligne claire entre la sortie précédente et l'invite. Le reste est:
\ u = nom d'utilisateur
\ h = hôte
\ w = répertoire de travail
$? = dernier code retour
J'utilise cela environ 20 fois par jour pour cd dans le dernier répertoire modifié:
cl()
{
last_dir="$(ls -Frt | grep '/$' | tail -n1)"
if [ -d "$last_dir" ]; then
cd "$last_dir"
fi
}
Ces deux gardent des signets permanents des répertoires souvent utilisés:
rd(){
pwd > "$HOME/.lastdir_$1"
}
crd(){
lastdir="$(cat "$HOME/.lastdir_$1")">/dev/null 2>&1
if [ -d "$lastdir" ]; then
cd "$lastdir"
else
echo "no existing directory stored in buffer $1">&2
fi
}
Ce sont mes favoris:
export HISTFILESIZE=1000000000
export HISTSIZE=1000000
J'aime avoir un historique de ligne de commande qui n'oublie jamais.
Malheureusement, il y a quelque temps, j'ai lancé un shell à partir de cron qui ne lisait pas .bashrc d'une manière ou d'une autre, et j'ai tout réduit à 500 lignes, détruisant plus d'un an d'histoire. Je recommande donc ces aller dans/etc/bashrc.
Ceci est l'un de mes favoris:
alias ssh='if [ "$(ssh-add -l)" = "The agent has no identities." ]; then ssh-add; fi; /usr/bin/ssh "$@"'
Si j'ai oublié de m'authentifier, cela me permet de le faire sans avoir à perdre ma saisie en faisant ssh-add after la session ssh.
Quelques bons
Faire en sorte que SSH complète automatiquement le nom d'hôte vers lequel vous utilisez ssh (s'il se trouve dans votre configuration ou votre historique)
complete -o default -o nospace -W "$(/usr/bin/env Ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|Host| Host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh
Quelques paramètres de complétion bash utiles
bind "set completion-ignore-case on" # note: bind used instead of sticking these in .inputrc
bind "set bell-style none" # no bell
bind "set show-all-if-ambiguous On" # show list automatically, without double tab
Quelques-uns utiles pour Mac OS X
alias nospotlight='Sudo mdutil -a -i off'
alias cleardnscache='Sudo killall -HUP mDNSResponder'
alias ldd='otool -L'
alias seq='jot - '
alias eject='drutil eject'
# vi ~/.bashrc # red/green terminal colors regarding exit code
export Prompt_COMMAND='PS1="`
if [[ \$? = "0" ]];
then echo "\\[\\033[0;32m\\]";
else echo "\\[\\033[0;31m\\]";
fi`[\u@\h \w]\[\e[m\] "'
export PS1
IP_ADDRESS_BASH=`ip addr | grep -w inet | gawk '{if (NR==2) {$0=$2; gsub(/\//," "); print $1;}}'`
PS1="\h $IP_ADDRESS_BASH \w % "
Et puis il affiche l'IP de votre machine à laquelle vous venez de vous connecter.
Je compile un certain nombre de choses manuellement dans $ HOME/local, j'ai donc ce petit extrait:
for prog in $HOME/local/*
do
if [ -d "$prog/bin" ]; then
export PATH=$prog/bin:$PATH
fi
if [ -d "$prog/include" ]; then
export C_INCLUDE_PATH=$prog/include:$C_INCLUDE_PATH
fi
if [ -d "$prog/lib" ]; then
export LD_LIBRARY_PATH=$prog/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$prog/lib:$LIBRARY_PATH
fi
if [ -d "$prog/man" ]; then
export MANPATH=$prog/man:$MANPATH
fi
if [ -d "$prog/share/man" ]; then
export MANPATH=$prog/share/man:$MANPATH
fi
done
J'ai également mon IRC sur mon serveur fonctionnant dans l'écran, donc je l'ai (pas une chose .bashrc, mais toujours utile)
#!/usr/bin/env bash
RUNNING=`screen -ls | grep irc`
if [ "" = "$RUNNING" ]; then
screen -S irc irssi
else
screen -dr irc
fi
J'utilise mon bashrc sur de nombreuses machines, j'ai donc ce petit extrait pour m'assurer que LS est colorisé. Cela le corrigera sur les machines OSX, peut-être même * BSD si vous ajustez la ligne uname.
if [ "$TERM" != "dumb" ]; then
if [ `uname` == "Darwin" ]; then
alias ls='ls -G'
else
eval "`dircolors -b`"
alias ls='ls --color=auto'
fi
fi
De plus, j'ai une commande pour sauvegarder un fichier, utile si vous êtes sur le point de changer un fichier de configuration et que vous souhaitez en faire une copie rapide au préalable.
bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }
ecb () { emacsclient -n -a emacs $@ & } # open in emacsclient in the background
ecp () { emacsclient -n $(which $@) & } # open a given file found in a $PATH in emacsclient
ecr () { Sudo_EDITOR="emacsclient -a emacs" sudoedit $@; } # start emacsclient or emacs and open the file as root
eCf () { emacs --batch --eval "(byte-compile-file \"$@\")"; } # byte-compile file
eCa () { emacs --batch --eval "(batch-byte-compile-if-not-done)" *.el; } # byte-compile all el files in the current directory and it's children
. $ HOME/bin/git-Prompt/ git-Prompt.sh
Quelques alias que j'utilise pour retirer l'Edge du quotidien CLI Grind ...
# I find myself doing this a lot
alias hg='history | grep '
# Likewise this, plus I'm always mistyping it...
alias findy='find . -name'
# sometimes you're just not sure you want to delete something...
alias trash='mv -t ~/.local/share/Trash/files --backup=t'
alias vb='vim ~/.bashrc'
# I find typing 'cd ..' less than optimal
alias up='cd ..'
alias 2up='cd ../../'
alias 3up='cd ../../../'
alias 4up='cd ../../../../'
# re-map caps lock key to be Ctrl
# (works on Linux, at least)
xmodmap -e "remove lock = Caps_Lock"
xmodmap -e "add control = Caps_Lock"
# helpful history settings:
export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth
export HISTIGNORE=ls:ll:la:l:cd:pwd:exit:mc:su:df:clear:cls
Je dois parfois utiliser un système Solaris au travail.
Cependant, le système est géré de manière centralisée via Puppet, y compris le fichier de mot de passe (qui inclut le paramètre Shell).
Ma .bashrc
lit donc quelque chose comme:
%!/bin/bash
exec /bin/tcsh
:)
Pour fixer la taille de la fenêtre dans l'écran GNU après le redimensionnement:
shopt -s checkwinsize
Pour afficher les autorisations sur un répertoire, le raccourci ls -ld
:
alias lld='ls -ld'
Visualisation de l'historique:
alias h='history | zgrep'
Et le contenu de mon script zgrep
, que je n'ai pas pu comprendre comment entasser directement dans l'alias:
#!/bin/sh
grep "${*-.}"
Je suis accro à l'écran et j'utilise les raccourcis suivants pour SSHing vers les machines. Avec ce script, je tape p hostname
vers SSH vers un écran Host and run, ou o hostname
pour faire de même mais exécuter l'écran sur la machine locale.
D'abord un script qui se connecte à un serveur SSH du même nom que le script que vous exécutez. J'appelle ça simple_ssh
:
#!/bin/sh
BASENAME=$(basename $0)
if [ "$SCREEN" = "1" ]; then
export SCREEN=0
exec screen -RD scr$BASENAME -s $0
Elif [ "$SCREEN" = "2" ]; then
exec ssh $BASENAME "$@" -t 'screen -RD'
fi
exec ssh $BASENAME "$@"
Créez un lien symbolique vers mars
dans votre chemin et mars
devient un raccourci pour ssh mars
:
adam@pluto:bin$ ln -s simple_ssh mars
adam@pluto:bin$ mars
adam@mars:~$
Le $SCREEN
La variable d'environnement vous permet d'exécuter automatiquement l'écran GNU avec la connexion. SCREEN=1
exécute l'écran localement (par exemple, si l'écran n'est pas installé sur l'hôte) et SCREEN = 2 l'exécute sur l'hôte lui-même.
Utilisez quelques alias pour raccourcir ceci:
alias o='SCREEN=1 exec'
alias p='SCREEN=2 exec'
Utilisez un script pour créer des liens symboliques pour tous vos hôtes avec un ~/.ssh/config
fichier comme celui-ci:
Host mars
HostName mars.example.com
User abackstrom
Le scénario, sshconfig2simplessh
:
#!/bin/sh
BASENAME=$(basename "$0")
USAGE="Usage: $BASENAME /path/to/bin"
if [ -z "$1" ] ; then
echo $USAGE
exit 0
fi
if [ ! -d "$1" ] ; then
echo "$1 is not a directory" >&2
exit 1
fi
cd "$1"
HOSTS=$(grep '^Host ' < ~/.ssh/config | cut -d' ' -f2)
for Host in $HOSTS ; do
if [ ! -e "$Host" ]; then
echo ln -s simple_ssh "$Host"
ln -s simple_ssh "$Host"
fi
done
Feutre
alias install=Sudo yum install
Debian
alias install=Sudo apt-get update && Sudo apt-get install