Serie: Zeigt her eure Aliase

  Ralf Hersel   Lesezeit: 6 Minuten  🗪 7 Kommentare

Die Verwendung von Aliasen erleichtern die Arbeit ungemein und erlauben das Einrichten von persönlichen Abläufen.

serie: zeigt her eure aliase

Es ist ein Mythos, der gerne von den Mainstream-Tech-Medien kolportiert wird: "Wenn Du Linux benutzt, bist Du gezwungen, die Kommandozeile zu verwenden!". Richtig ist, dass niemand gezwungen wird, in einem Terminal zu arbeiten. Wer mit einer GNU/Linux-Distribution arbeitet, kann das tun, ohne jemals ein Terminal zu öffnen. Tatsächlich entdecken die meisten Anwender:innen die Kommandozeile früher oder später zu ihrem Vorteil.

Warum die Verwendung des Terminals für viele einen grossen Nutzen bringt, haben wir bereits in hunderten Artikeln beschrieben. Auch über das Thema "Alias" gab es schon einen Beitrag. In dieser Serie geht es jedoch darum, Eure eigenen Alias zu präsentieren und damit anderen Anwender:innen neue Ideen zu vermitteln, wie sie ihre Arbeit im Terminal vereinfachen können.

Beginnen möchte ich mit einer Anfänger-freundlichen Erklärung, was es mit den Aliasen auf sich hat. Wenn ihr auf der Kommandozeile arbeitet, gebt ihr Befehle ein, wie ls, grep, cd, usw. Das können auch umfangreichere Kommandos sein, wie die Suche nach einem Text in Unterverzeichnissen: grep -r "rawhtml" oder noch längere Anweisungen wie: mpv --ytdl-format=bestaudio ytdl://ytsearch:"Titel", um Musikstücke zu suchen und wiederzugeben.

Mit dem alias Befehl könnt ihr umfangreiche Befehlsketten durch ein einfaches Kommando ersetzen. Statt den langen Befehl mpv --ytdl-format=bestaudio ytdl://ytsearch:"Titel" einzutippen, wann immer ihr einen Song hören möchtet, wäre es doch besser, könnte man stattdessen: play "Titel" eingeben.

Zu jeder Shell (Bash, Z-Shell, Fish-Shell) gibt es eine Konfigurationsdatei, die als versteckte Datei in Eurem Home-Verzeichnis liegt. Sie heissen .bashrc oder .zshrc oder ... keine Ahnung, wie sie bei der Fish-Shell heisst. Diese Datei könnt ihr mit einem Texteditor bearbeiten, um eigene Alias-Einträge hineinzuschreiben. Achtet darauf, dass sich neue Einträge erst nach einem Neustart des Terminals auswirken. Um die aktuellen Alias-Einträge der Konfigurationsdatei im Terminal anzeigen zu lassen, tippt ihr alias ein. Bei mir sieht die Ausgabe so aus:

cat=bat
clean='pamac remove -o; flatpak uninstall --unused'
clip2file='wl-paste -t image/png > ~/Bilder/clipboard_image.png'
cp='cp -i'
df='df -h'
free='free -m'
gitu='git add . && git commit && git push'
h=cd
l='ls -l'
ll='ls -la'
ls='ls $LS_OPTIONS'
m=ncmpcpp
play='_y(){ mpv --ytdl-format=bestaudio ytdl://ytsearch:"$*";}; _y'
r=ranger
run-help=man
scan='nmap -sn -oG - 192.168.1.0/24'
which-command=whence
z='_z 2>&1'

Diese Ausgabe dient lediglich der schnellen Information über die verfügbaren Aliase. Besser ist es, die Datei in einem richtigen Editor zu öffnen. Dann sieht es bei mir so aus:

Um eigene Einträge von bestehenden unterscheiden zu können, empfiehlt es sich, diese mit Kommentaren zu umschliessen (#Ralf). Komplizierte Befehle sollten gesondert dokumentiert werden (siehe Tresor). In der Regel können Alias-Einträge nicht mit Parametern umgehen, die von aussen eingespeist werden. In diesen Fällen kann eine function eingesetzt werden (siehe e und tresor).

In meiner .zshrc seht ihr viele Beispiele für einfache Alias-Einträge:

  • für ein einfaches Datei-Listing tippe ich l anstatt ls -l
  • der Befehl ll erzeugt ein Listing mit versteckten Dateien
  • um zum Home-Verzeichnis zu gelangen, gebe ich h, statt cd ein
  • das Kommando scan gibt mir eine Liste aller Geräte im lokalen Netzwerk
  • play habe ich bereits oben erklärt
  • mit clean entferne ich Orphans und ungenutzte Flatpaks
  • statt cat verwende ich bat, weil das eine viel schönere Dateiausgabe erzeugt

Bei manchen Einträgen ist zu beachten, dass zusätzliche Pakete benötigt werden (micro, nmap, ranger, mpv, ytdl, bat). Apropos micro: der export-Befehl ersetzt den Standard-Editor (nano) durch den viel besseren Editor Micro. Da diese Ersetzung Parameter verlangt, kommt eine Funktion statt eines Alias zum Einsatz. Der Alias:

alias e='micro $1'

.. funktioniert nicht, weil der Parameter $1 nicht verarbeitet werden kann. Manchmal klappt das, wie ihr beim play-Alias sehen könnt. Die Erklärung, wann es geht und wann nicht, spare ich mir. Mein Tipp: sobald Parameter mit im Spiel sind, verwendet ihr besser eine Funktion anstatt eines Alias. Offensichtlicher wird das bei der Funktion tresor. Hier haben wir es mit einem ganzen Shell-Skript zu tun, welches man auf keinen Fall in einem Alias unterbringen kann.

Wer sich über den letzten Eintrag wundert (fast directory switch), den verweise ich auf diese Seite.

Ich hoffe, dass Euch der erste Artikel dieser Serie ein paar Erkenntnisse und Ideen zur Vereinfachung Eurer Arbeit im Terminal gebracht hat. Wir freuen uns auf Eure Aliase – schreibt bitte einen Artikel darüber!

Tags

Terminal, Kommandozeile, Alias, Workflow, Effizienz

Marco
Geschrieben von Marco am 10. Februar 2023 um 10:38

Hier ein paar Aliase und Funktionen die ich häufig nutze:

big () {
  # find the 10 biggest files in directory
  # defaults to current dir
  # do not dive into other filesystems
  find ${1:-.} -xdev -type f -ls | sort -n -k7| tail
}

buf () {
 # file backup
  cp ${1?filename not specified}{,_$(date +%Y-%m-%d_%H-%M-%S).bak}
}

h () {
  # grep your history for whatever follows 'h '
  if [ -z "$1" ]; then
    history
  else
    history \
      | grep "$@" \
      | less
  fi
}

man () {
  # Color man pages
  env \
    LESS_TERMCAP_mb=$(printf "\e[1;31m") \
    LESS_TERMCAP_md=$(printf "\e[1;31m") \
    LESS_TERMCAP_me=$(printf "\e[0m") \
    LESS_TERMCAP_se=$(printf "\e[0m") \
    LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
    LESS_TERMCAP_ue=$(printf "\e[0m") \
    LESS_TERMCAP_us=$(printf "\e[1;32m") \
    man "$@"
}

qfind () {
  # find all files in directory $1 containing string $2
  find "$1" -type f -exec grep -H "$2" {} \; | cut -d: -f1| sort -u
}

qs () {
  # Quickly turns a shell-session into a script.
  # --------------------------------------------
  # The function will
  # - delete history number
  # - delete history timestamp
  # - write all commands after "###" to the end of your history to  somefile.sh
  #
  # Usage:
  # - Start your session with "###<enter>".
  # - Type your commands.
  # - Run qs somefilename.sh.
  # - Edit somefile.sh to your liking.
  local filename="$1"
  history \
    | sed 's/^[[:blank:]]\+[0-9]\+[[:blank:]]*//' \
    | sed -E 's/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} //' \
    | sed '/^###/{h;d};H;$!d;x' \
    | sed '$d' \
    > ${filename:?No filename given}
}

xkcd () {
  # create $1 xkcd-style passwords
  # ref: https://xkcd.com/936/
  local count=${1:-1}
  if [[ "$count" -gt 1 ]]; then
    command='column -t'
  else
    command='cat'
  fi
  for i in $(seq $count); do
    grep -E '^[[:alpha:]]{3,8}$' /usr/share/dict/words \
      | shuf -n 4 -r \
      | paste -s -d' ' \
      |sed 's/[^ ]\+/\L\u&/g'
  done \
    | $command
}
cybercow
Geschrieben von cybercow am 10. Februar 2023 um 21:07

Eines das ich sehr schätze, das in meinen Augen Standard sein sollt ist:

function mkcd() { mkdir -p "$@"; cd "$@"; }

UbIx
Geschrieben von UbIx am 11. Februar 2023 um 17:04

Habe eigentlich nur: alias l="exa -al"

yt-dlp alias

alias video="yt-dlp -f 'bv*[height=1080]+ba'"

alias audio="yt-dlp -f 'ba' -x --audio-format mp3"

megamax2
Geschrieben von megamax2 am 12. Februar 2023 um 15:06

Man kann die Konfigurationsdateien auch sourcen.

source .bashrc
# https://www.atlassian.com/git/tutorials/dotfiles
alias dotfiles="/usr/bin/git --git-dir=/home/${USER}/.local/dotfiles/ --work-tree=/home/${USER}"

alias hist="history | grep"
alias listfonts="fc-list | cut -d\ -f2-99 | cut -d: -f1 | sort -u"

alias ls="ls --color='auto' --time-style='long-iso' --group-directories-first"
alias grep="grep --color='auto' --ignore-case"
alias diff="diff --color='auto'"
alias less="less -r"
alias pacman="pacman --color='auto'"
alias pactree="pactree --color"

# Color cat & color less
if $(hash 'pygmentize' 2> /dev/null); then
    alias ccat="pygmentize -g"

    function cless() {
        command pygmentize -g "$1" | less -R
    }
fi

MFG

Bernd
Geschrieben von Bernd am 14. Februar 2023 um 10:46

Ein paar von meinen:


alias 7zultra='7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on'
alias b='byobu attach-session -t smux || byobu new-session -s smux'
alias booklet='pdfbook2 -s -n -p a4paper '
alias free='free -m'
alias gita='git apply --reject'
alias gitb='git branch'
alias gitbb='git branch -a'
alias gitc='git checkout'
alias gitd='git difftool'
alias gitf='git fetch --tags --prune'
alias gith='git reset --hard'
alias giti='git rebase -i'
alias gitl='git log --pretty=oneline --abbrev-commit'
alias gitln='git log --pretty=format:"%h%x09%an%x09%ad%x09%s" --date=short'
alias gito='git format-patch'
alias gitr='git rebase'
alias gits='git status'
alias gitt='git describe --exact-match --tags'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -Alh'
alias lc='ls -ltcr'
alias lk='ls -lSr'
alias ll='ls -lFh'
alias lm='ls -al |more'
alias lr='ls -lR'
alias ls='ls --color=auto'
alias lt='ls -ltr'
alias lu='ls -ltur'
alias lx='ls -lXB'
alias make-print-var='make --eval="print-%: ; @echo $*=$($*)" print-'
alias mkdir='mkdir -p'
alias more='less'
alias pg='ps waux | grep -i'
alias photo-rename-date='exiftool -d %Y-%m-%d_%H-%M-%S '\''-filename<${datetimeoriginal}-${subsectimeoriginal;$_=sprintf("%04d",$_)}%-c.%e'\'' '
alias psc='ps xawf -eo pid,user,cgroup,args'
alias remove-exif-data='exif --remove '
alias sudo='sudo '
alias thumbsdb-delete='find . -type f -name Thumbs.db -exec rm {} \;'
alias tree='tree -Csu'
alias vi='vim'
alias watch='watch -n 1'
Reto
Geschrieben von Reto am 23. Februar 2023 um 23:47

So viele GIT Befehle. Ich habe diese im: .gitconfig

    lo = log --oneline
    ci = commit
    br = branch
    co = checkout
    df = diff
    he = help
    cl = clone
    pu = !"git fetch origin -v; git fetch upstream -v; git merge upstream/master"
sandfrog
Geschrieben von sandfrog am 22. Februar 2023 um 00:47

Hab nicht viele eigentlich nur drei:

alias update='emerge --sync && emerge --ask --verbose --update --deep --newuse @world'

alias top=’btop’

alias cat='bat paging=never $1'