Se usi Linux usi sicuramente gli alias, ovvero le scorciatoie nel terminale.
Questi alias sono comodissimi e velocizzano il lavoro del sistemista. Un sistemista che usa gli alias (e le funzioni) sarà sempre più veloce ed efficiente di un sistemista che ogni volta scrive gli stessi comandi a mano.
Ovviamente appena ti colleghi a un server remoto con la connessione SSH non puoi usare gli alias che hai creato in bashrc sulla tua macchina. Per poter usare questi alias dovresti copiare il file bashrc sulla macchina remota.
In questo articolo andiamo a vedere come usare SSHRC per portarci dietro i nostri alias quando ci connettiamo a una macchina remota in modo da velocizzare il nostro lavoro.
Table of Contents
Alias bashrc Linux e Mac
Voglio iniziare con una breve introduzione sugli alias.
Se usi Linux, ma anche se usi Mac, è molto probabile che usi spesso il terminale.
Ad esempio è probabile che usi spesso il comando:
ls -alh
Su Linux nella cartella home del tuo utente troverai un file chiamato .bashrc
Questo file contiene alcune direttive, possiamo aggiungere le nostre.
Ad esempio aprendo il file con un editor di testo come “vi” possiamo aggiungere degli alias.
Nel caso del Mac, di default invece di bash il terminale usa zsh, quindi il file da modificare sarà .zshrc. La sintassi resta la stessa, come anche la funzione.
Ad esempio posso aggiungere questa riga al file:
alias l='ls -lah'
A questo punto ogni volta che digiti “l” nel terminale è come se stessi digitando il comando per intero: ls -lah
Va da sé che se hai dei comandi che usi in modo frequente, avere un alias velocizza il lavoro dal momento che devi digitare meno caratteri.
Tieni presente che dopo aver modificato il file .bashrc o il file .zshrc devi chiudere e riaprire il terminale per poter usare il tuo alias.
Adesso che abbiamo visto come possono tornarci utili gli alias vediamo come portarceli dietro quando ci connettiamo a un server remoto.
Se stai iniziando ad approcciarti all’uso del terminale potrebbe farti comodo la nostra lista dei 30 comandi Linux più usati.
SSHRC: cos’è e come possiamo usarlo
È stato creato originariamente da Russell Stewart (Russell91) che ha poi abbandonato il progetto, che adesso è mantenuto da Chris Down (cdown) su github. Trovi tutti i dettagli qui.
SSHRC è uno shell script che puoi installare facilmente sulla tua macchina Mac o Linux che ti permette di portare con te i tuoi alias e le tue funzioni per usarle su un server remoto.
In pratica quando ti connetti usando il comando sshrc invece di ssh, questo script va a cercare il file .sshrc nella cartella home del tuo utente e si porta dietro tutti gli alias.
Normalmente per connetterti tramite SSH a un server remoto useresti il comando:
ssh [email protected]
Per usare SSHRC dovrai invece usare:
sshrc [email protected]
Usando questo comando, una volta connesso al server, avrai tutti i tuoi alias disponibili.
Vedremo poi come fare ad usare SSHRC usando il comando SSH, in pratica vedremo come usare SSHRC come metodo di default per connetterci ad un server remoto.
Come installare SSHRC
Nella repository di github che ho linkato nella sezione precedente trovi le istruzioni di installazione.
A me piace installarlo a mano, vediamo come.
Come prima cosa scarichiamo il file sshrc sulla nostra macchina:
wget https://raw.githubusercontent.com/cdown/sshrc/master/sshrc
Impostiamo i permessi in modo da renderlo eseguibile:
chmod +x sshrc
E lo spostiamo nella cartella /usr/local/bin sia che siamo su Linux che su Mac:
sudo mv sshrc /usr/local/bin
Adesso che abbiamo installato SSHRC e lo abbiamo reso eseguibile, andiamo a creare il file .sshrc.
Ci spostiamo quindi nella home del nostro utente e creiamo il file:
touch .sshrc
Adesso modifichiamo il file aggiungendo tutti gli alias di cui abbiamo bisogno, possiamo fare la prova con l’alias che ho indicato prima:
alias l='ls -lah'
Possiamo adesso connetterci usando SSHRC e portarci dietro i nostri alias.
Connessione SSH con SSHRC
Come accennavo prima, connetterci con SSHRC è facilissimo, in pratica è come usare il comando ssh:
sshrc [email protected]
Una volta che ti sei connesso al server, ti basterà digitare uno dei tuoi alias per assicurarti che funzioni.
Impostare SSHRC come metodo di default
Se credi che questo sistema sia valido e vuoi usarlo sempre, tanto vale impostarlo come default. In questo modo ogni volta che ti connetti usando SSH starai di fatto usando SSHRC.
Fare questo è facilissimo, non dobbiamo fare altro che impostare un alias nel nostro file .bashrc o .zshrc in questo modo:
alias ssh='sshrc'
In questo modo ogni volta che usi il comando ssh starai di fatto usando sshrc.
Nota: se hai degli alias che usano il comando ssh dovresti inserire questo alias prima degli altri.
Se per un qualche motivo decidi che per una specifica connessione vuoi usare il comando ssh normalmente ti basta inserire un backslash prima del comando. Inserire un backslash serve a non usare un alias se presente:
\ssh [email protected]
Usare il file .sshrc
Ognuno ha esigenze diverse, quindi ognuno avrà bisogno di un suo file .sshrc personalizzato.
Se ti trovi a usare lo stesso comando diverse volte potrebbe essere il caso di creare un alias.
Se hai bisogno di lanciare uno script potresti decidere di creare una funzione.
In altri casi può essere utile creare degli alias con funzione di protezione.
Vediamo nel dettaglio.
Usare gli alias come protezione
I primi alias che ho creato li ho creati per evitare errori:
alias mv='mv -i' alias cp='cp -i' alias ln='ln -i' alias rm='rm -i'
In questo modo prima di rimuovere o spostare un file e creare un problema, il server mi chiede una conferma, e sono in grado di evitare un errore per una svista.
Creare alias personalizzati
Come abbiamo visto prima possiamo creare degli alias personalizzati, che ci velocizzano nel digitare i comandi che usiamo in modo più frequente:
alias l='ls -lah' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' alias vi="vim" alias tailf='tail -f' alias head='head -50' alias fixperms='find ./* -type d -exec chmod --preserve-root 0755 {} + && find . -type f -exec chmod --preserve-root 0644 {} +'
Queste sono alcuni degli alias che ho impostato nel mio file.
Impostare funzioni
Possiamo anche creare dei veri e propri script, utilissimi per velocizzare il lavoro di tutti i giorni.
sh(){ echo -n "Enter IP: "; read ip; ssh root@$ip }
Ad esempio questa funzione ci chiede un parametro, che una volta inserito viene usato come indirizzo IP per la connessione SSH.
Una funzione molto utile a mio avviso è questa:
intro () { #esegui varie operazioni echo "benvenuto Ivan"; } intro
In pratica creiamo una funzione e la chiamiamo subito dopo. In questo caso specifico fa un echo di un semplice messaggio di benvenuto.
Io uso una funzione di questo tipo per vedere le versioni software sul server, il load e l’uso del disco.
Esempio di file .sshrc
Vediamo un file di esempio, che potrebbe essere utile come punto di partenza per creare il tuo file.
# Clear alias c="clear" alias cl="clear" alias ckear="clear" alias clr="clear" # Change Directories alias ..="cd .." alias ...="cd ../.." alias ....="cd ../../.." alias .....="cd ../../../.." alias ......="cd ../../../../.." # Automatically do an ls after each cd cd() { if [ -n "$1" ]; then builtin cd "$@" && ls --group-directories-first -al else builtin cd ~ && ls --group-directories-first -al fi } #============================================================= # cd & ls in one :- when you cd to a directory the ls command # automatically lists it's contents however you have configred # ls to do so: #------------------------------------------------------------- cl() { if [ -d "$1" ]; then cd "$1" ls -la --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F else echo "bash: cl: '$1': Directory not found" fi } #============================================================= # cd & ls & more in the same command. Pipes the output to more #for use with directories with many files in their contents: #------------------------------------------------------------- # cd and ls & more in one cm() { if [ -d "$1" ]; then cd "$1" ls | more else echo "bash: cl: '$1': Directory not found" fi } # Estimate file space usage to maximum depth alias du1="du -d 1" # History commands alias h="history" alias h1="history 10" alias h2="history 20" alias h3="history 30" alias hgrep='history | grep' # List commands alias l='ls -lAh' alias ls="ls -a" alias la="ls -a" alias ll="ls -al" # Ping Commands alias pg="ping google.com -c 5" alias pf="ping facebook.com -c 5" alias ping="ping -c 5" alias fastping="ping -c 100 -s.2" # Confirmation alias rm='rm -Iv --preserve-root' alias mv='mv -iv' alias cp='cp -iv' alias ln='ln -i' alias chown='chown --preserve-root' alias chmod='chmod --preserve-root' alias chgrp='chgrp --preserve-root' # Create a new directory and enter it function mkd() { mkdir -p "$@" && cd "$@" } # Install & Update utilties alias sai="sudo apt install" alias sai="sudo apt-get install" alias sau="sudo apt update" alias sau="sudo apt-get update" alias update="sudo apt update" alias update="yum update" alias updatey="yum -y update" # System state alias reboot="sudo /sbin/reboot" alias poweroff="sudo /sbin/poweroff" alias halt="sudo /sbin/halt" alias shutdown="sudo /sbin/shutdown" alias flighton='sudo rfkill block all' alias flightoff='sudo rfkill unblock all' alias snr='sudo service network-manager restart' # Show open ports alias ports='sudo netstat -tulanp' # Free and Used alias meminfo="free -m -l -t" # Get top process eating memory alias psmem="ps auxf | sort -nr -k 4" alias psmem10="ps auxf | sort -nr -k 4 | head -10" # Get top process eating cpu alias pscpu="ps auxf | sort -nr -k 3" alias pscpu10="ps auxf | sort -nr -k 3 | head -10" # Get details of a process alias paux='ps aux | grep' # Get server cpu info alias cpuinfo="lscpu" # Resume wget by default alias wget="wget -c" # Grabs the disk usage in the current directory alias usage='du -ch | grep total' # Gets the total disk usage on your machine alias totalusage='df -hl --total | grep total' # Shows the individual partition usages without the temporary memory values alias partusage='df -hlT --exclude-type=tmpfs --exclude-type=devtmpfs' # Gives you what is using the most space. Both directories and files. Varies on current directory alias most='du -hsx * | sort -rh | head -10' #functions function extract () { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar 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 } #trash function trash(){ if [ -z "$*" ] ; then echo "Usage: trash filename" else DATE=$( date +%F ) [ -d "${HOME}/.Trash/${DATE}" ] || mkdir -p ${HOME}/.Trash/${DATE} for FILE in $@ ; do mv "${FILE}" "${HOME}/.Trash/${DATE}" echo "${FILE} trashed!" done fi } # find - exclude svn, git, mercurial, repo, eclipse and intellij idea directories # usage : f [directory] [find-options] f(){ dir=$1 shift find $dir -type d \( -name .svn -o -name .git -o -name .hg -o -name .repo -o -name .metadata -o -name .idea \) -prune -o $@ -print } pause() { if $(killall -STOP "$1"); then echo "[+] $1 successfully paused!" else echo "[-] Failed to pause $1" fi } unpause() { if $(killall -CONT "$1"); then echo "[+] $1 successfully unpaused!" else echo "[-] Failed to unpause $1" fi }
Conclusioni
In questo articolo abbiamo visto cos’è SSHRC e come possiamo usarlo per velocizzare il nostro lavoro di sistemisti.
Già conoscevi questo sistema? Se sì come lo usi? Se no pensi possa esserti utile? Come lo useresti?
Fammelo sapere in un commento!
Lascia un commento