linux  system  bash

.bash_aliases

Tipps&Trick für .bash_aliases die ich in meine Linux-Systemen verwende!

#Variable zum unterscheiden um welches OS-System es sich handelt um spezifische Befehle auszuführen. 
#Das Prinzip könnte aber z.B. auch mit Hostname durchgeführt werden.
if [ -f /etc/os-release ]; then
  . /etc/os-release
  OS="$NAME"
else
  OS=$(lsb_release -si)
fi

#################### exports ####################
#Setzt meinen Editor für z.B. crontab fix auf nano
export EDITOR="/usr/bin/nano"
#Setzt den Pfad für Go, damit es auch in der Shell verfügbar ist.
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:~/go/bin

#################### install ####################

# Update System
function update {
  if [[ $OS == *"Manjaro"* ]]; then
    pamac update
  elif [[ $OS == *"CachyOS"* ]]; then
    paru -Syu
  elif [[ $OS == *"Fedora"* ]]; then
    sudo dnf --refresh upgrade
  elif [[ $OS == *"Debian"* ]]; then
    sudo apt update
    sudo apt dist-upgrade
    sudo apt autoremove
  else
    echo "OS nicht erkannt für update!"
  fi
}

# Installieren ...
function install {
  if [[ $OS == *"Manjaro"* ]]; then
    sudo pamac install $@
  elif [[ $OS == *"CachyOS"* ]]; then
    paru -S $@
  elif [[ $OS == *"Fedora"* ]]; then
    sudo dnf install $@
  elif [[ $OS == *"Debian"* ]]; then
    sudo apt install $@
  else
    echo "OS nicht erkannt für install!"
  fi
}

# Suchen ...
function search {
  if [[ $OS == *"Manjaro"* ]]; then
    pamac search $@
  elif [[ $OS == *"CachyOS"* ]]; then
    paru $@
  elif [[ $OS == *"Fedora"* ]]; then
    dnf search $@
  elif [[ $OS == *"Debian"* ]]; then
    apt search $@
  else
    echo "OS nicht erkannt für search!"
  fi
}

# Entfernen ...
function remove {
  if [[ $OS == *"Manjaro"* ]]; then
    sudo pamac remove $@
  elif [[ $OS == *"CachyOS"* ]]; then
    paru -R $@
  elif [[ $OS == *"Fedora"* ]]; then
    sudo dnf remove $@
  elif [[ $OS == *"Debian"* ]]; then
    sudo apt auto-remove $@
  else
    echo "OS nicht erkannt für remove!"
  fi
}

# Installiert?
function installed {
  if [[ $OS == *"Manjaro"* ]]; then
    pamac list --explicitly-installed | grep $@
  elif [[ $OS == *"CachyOS"* ]]; then
    paru -Qe | grep $@
  elif [[ $OS == *"Fedora"* ]]; then
    sudo dnf list installed | grep $@
  elif [[ $OS == *"Debian"* ]]; then
    dpkg -l | grep $@
  else
    echo "OS nicht erkannt für installed!"
  fi
}

# Warum installiert?
function why {
  if [[ $OS == *"Manjaro"* ]]; then
    pacman -Qi $@ | grep -E "Required By|Install Reason"
  elif [[ $OS == *"CachyOS"* ]]; then
    paru -Qi $@ | grep -E "Required By|Install Reason"
  elif [[ $OS == *"Fedora"* ]]; then
    sudo dnf why $@
  elif [[ $OS == *"Debian"* ]]; then
    apt-cache show $@ | grep -E "Depends|Suggests"
  else
    echo "OS nicht erkannt für why!"
  fi
}

#################### filesystem ####################

#Verzeichnis auflisten
alias ll='ls -lh'
alias lla='ls -lha'

#Copy
alias cpb='cp --backup=numbered'
alias cp+='rsync -ah --progress'

#Größe von Verzeichnissen ermitteln
alias dux='du -hs *'
alias duxa='du -hs .[!.]* *'
# -h = Dynamische Göße in K/M/G
# -s = Rekursiv die Summe des Verzeichnisses (Fehlt der Parameter wird jeder Unterordner einzeln gelistet)
# * jedes Verzeichnis einzeln in diesem Ordner
# .[!.]* hiddenfiles

#Verzeichnis
alias cd..='cd ..'
alias ~='cd ~'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'
alias .......='cd ../../../../../..'
alias ........='cd ../../../../../../..'
alias .........='cd ../../../../../../../..'

#Laufwerke
alias drives='cd /run/media/$USER'
alias media='drives'

#################### dotfiles git ####################

function dotfiles {
  currentdir=$(pwd)

  if [[ $1 == "init" ]]; then
    mkdir -p ~/.dotfiles
    cd ~/.dotfiles
    git init
  elif [[ $1 == "add" ]]; then
    ln $2 ~/.dotfiles/$2
    cd ~/.dotfiles
    git add $2
    git commit -m initial
  elif [[ $1 == "fix" ]]; then
    rm ~/.dotfiles/$2
    ln $2 ~/.dotfiles/$2
  else
    cd ~/.dotfiles
    git $@
  fi

  cd $currentdir
}

#################### sudo ####################

#Sudo
alias fuck='sudo $(fc -ln -1)' #letzten Befehl als Sudo
alias _='sudo'

#################### shell ####################

#Clear
# alias c='clear'
alias cls='clear'

#History
alias his='history | grep' #Suchbegriff
alias hisx='history -d'    #Zeilennummer löschen

#################### processes ####################

#Taskmanager | falls htop nicht griffbereit
alias psm='ps -AF'
alias ps?='ps -AF | grep' #Suchbegriff

#################### jourlnalctl ####################

alias jb='journalctl -b' #since boot
alias jf='journalctl -f' #follow the log ...
alias j1='journalctl --since "1 minutes ago"'
alias j5='journalctl --since "5 minutes ago"'
alias j15='journalctl --since "15 minutes ago"'

#################### docker & kubernetes ####################

# Docker
alias d='docker'
alias dimg='docker images'
alias dps='docker ps'
alias dpsa='docker ps -a'
alias dvl='docker volume ls'
alias drun='docker run -d --name'
alias dk='docker kill'
alias dlog='docker logs'
alias dexec='docker exec -it' #container-name
alias dbash='docker exec -it $1 /bin/bash' #container-name
alias drm='docker rm'
alias drmi='docker rmi'
alias dbui='docker build . -t'
alias dclean='docker system prune -a --volumes'
function dcu {
  if [[ -z $1 ]]; then
    docker compose up -d
  elif [[ -d $1 ]]; then
    if docker-compose.yaml || [[ -f $1/docker-compose.yaml ]]; then
      docker compose -f $1/docker-compose.yaml up -d
    elif docker-compose.yml || [[ -f $1/docker-compose.yml ]]; then
      docker compose -f $1/docker-compose.yml up -d
    else
      echo "No docker-compose.yaml or docker-compose.yml found in directory $1"
    fi
  else
    docker compose up -d -f $1
  fi
}
function dcd {
  if [[ -z $1 ]]; then
    docker compose down
  elif [[ -d $1 ]]; then
    if docker-compose.yaml || [[ -f $1/docker-compose.yaml ]]; then
      docker compose -f $1/docker-compose.yaml down
    elif docker-compose.yml || [[ -f $1/docker-compose.yml ]]; then
      docker compose -f $1/docker-compose.yml down
    else
      echo "No docker-compose.yaml or docker-compose.yml found in directory $1"
    fi
  else
    docker compose down -f $1
  fi
}
function dcr {
  dcd $@
  dcu $@
}

#kubectl
alias kc='kubectl'
alias kca='kc apply -f '  #yaml-file
alias kcd='kc delete -f ' #yaml-file

#################### copilot ####################

#Copilot
alias copilot='gh copilot suggest'
alias copilot-exp='gh copilot explain'
alias copilot-upd='gh extension upgrade gh-copilot'

#################### ssh & sshfs ####################

alias known='nano ~/.ssh/known_hosts'


#SSH Connect
#m~ssh <HOST|IP> [USER] [PARAMETER]
function m~ssh {
  if [[ -z $1 ]]; then
    echo "Usage: m~ssh <HOST|IP> [USER] [PARAMETER]"
    return 1
  else
    host=$1
  fi
  if [[ -z $2 ]]; then
    user=$(whoami)
  else
    user=$2
  fi
  if [[ -z $3 ]]; then
    parameter="-p22"
  else
    parameter="$3"
  fi
  if [[ -z $4 ]]; then
    nexttry=0
  else
    nexttry=$4
  fi

  echo -e "\e[33mConnecting to $host as $user with parameters: $parameter\e[0m"
  
  rsync -avz -e 'ssh '$parameter ~/.bash_aliases $host:/home/$USER/.bash_aliases
  rsync -avz -e 'ssh '$parameter ~/.blerc $host:/home/$USER/.blerc
  rsync -avz -e 'ssh '$parameter ~/.bash_it/themes/m~/m~.theme.bash $host:/home/$USER/.bash_it/themes/m~/m~.theme.bash
  
  #title
  echo -ne "\033]0;ssh $user@$host\007"

  # echo -e ssh $parameter $user@$host
  ssh $parameter $user@$host
  
  #error handling
  # rc=$?
  # if [[ $rc -ne 0 ]]; then
  #   echo -e "\e[31mFehler: m~ssh fehlgeschlagen (Exit-Code  $rc) für $user@$host!\e[0m"
  #   echo -e "\e[31m$output\e[0m"
  #   if [[ $nexttry -gt 0 ]]; then
  #     read -p "Das ist der $nexttry. versuch, soll es nochmal versucht werden? (yes/no): " answer
  #     if [[ "$answer" != "yes" ]]; then
  #       m~ssh "$host" "$user" "$parameter" "$(($nexttry+1))"
  #       return
  #     fi
  #   fi
  #   if [[ "$output" == *"read: Connection reset by peer"* && "$nexttry" -eq 0 ]]; then
  #     echo -e "\e[32mHost-Key-Problem vermutet! known_hosts-Eintrag wird entfernt...\e[0m"
  #     ssh-keygen -R "$host"
  #     m~ssh "$host" "$user" "$parameter" "$(($nexttry+1))"
  #     return
  #   fi
  # fi
}
# alias <alias>='m~ssh <IP> <title>'

#SSHFS
#ein Verzeichnis
# alias mnt='sshfs -o idmap=user <ip>:<path> ~/<folder>'
# alias umnt='fusermount3 -u ~/<folder>'
# alias umntz='fusermount3 -u -z ~/<folder>'

#mehrere Verzeichnisse besser in einer Funktion, so können Fehler leichter identifziert werden und führt nicht zum abbruch, wie wenn es per && verknüpft ist.
# function mnt {
# }

function m~sshfs {
  mkdir ~/mnt &>/dev/null
  fusermount3 -u ~/mnt &>/dev/null

  sshfs -o idmap=user $3 $1:/$2 ~/mnt
}
# alias <alias>='m~sshfs <IP>'
#
alias umntt='fusermount3 -u ~/mnt'
alias umnttz='fusermount3 -u -z ~/mnt'

#################### calculator ####################

#install bc
function calc {
  last=0
  if [ -f /tmp/calc.log ]; then
    last=$(cat /tmp/calc.log)
  fi

  if [[ $1 == "+"* || $1 == "-"* || $1 == "/"* || $1 == "*"* ]]; then
    value=$(echo "$last $@" | bc -l)
  else
    value=$(echo "$@" | bc -l)
  fi

  echo "$value"
  echo "$value" >/tmp/calc.log
}
alias c='calc'
alias r='calc'

#################### others ####################

#GO
#alias goupdate='sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go*.linux-amd64.tar.gz'
alias gob='go build'
alias gobl='GOOS=linux GOOARCH=amd64 go build'
alias gobw='GOOS=windows GOOARCH=amd64 go build'

#wails
alias wad='wails dev'
alias wab='wails build'
alias wabl='GOOS=linux GOOARCH=amd64 wails build'
alias wabw='GOOS=windows GOOARCH=amd64 wails build'

#Rechte auf/für www-data
#Optional kann ein Ordner übergeben werden....
function fight { # for your rights... ;-)
  if [[ $OS == *"Manjaro"* || $OS == *"cachyos"* ]]; then
    # sudo chown -R http:http /srv/http/$1 && sudo chmod -R 775 /srv/http/$1
    # Nur da wo es noch nicht der Fall ist
    sudo find /srv/http/$1 ! -user http -exec sudo chown http: {} \;
    sudo find /srv/http/$1 ! -group http -exec sudo chown :http {} \;
    sudo find /srv/http/$1 -type d ! -perm 775 -exec sudo chmod 775 {} \;
    sudo find /srv/http/$1 -type f ! -perm 664 -exec sudo chmod 664 {} \;
  elif [[ $OS == *"Debian"* ]]; then
    # sudo chown -R www-data:www-data /var/www/html/$1 && sudo chmod -R 775 /var/www/html/$1
    # Nur da wo es noch nicht der Fall ist
    sudo find /var/www/html/$1 ! -user www-data -exec sudo chown www-data: {} \;
    sudo find /var/www/html/$1 ! -group www-data -exec sudo chown :www-data {} \;
    sudo find /var/www/html/$1 -type d ! -perm 775 -exec sudo chmod 775 {} \;
    sudo find /var/www/html/$1 -type f ! -perm 664 -exec sudo chmod 664 {} \;
  else
    echo "OS nicht erkannt für fight!"
  fi
}
 bash   linux   system