Linux Bash Cheat Sheet

Enkele tools command line parameters

Inhoud

Niet een zeer uitgebreide lijst, alleen enkele die voor mij nuttig zijn

bash en shell jubileum!

Linux Ubuntu-versie controleren

Methode 1

lsb_release -a

zou iets als volgt produceren

Geen LSB modules beschikbaar.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

Methode 2

cat /etc/os-release

zou iets als volgt produceren

NAME="Linux Mint"
VERSION="22.1 (Xia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 22.1"
VERSION_ID="22.1"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=xia
UBUNTU_CODENAME=noble

Archiveren & onarchiveren

Comprimeren

tar -zcvf archive-name.tgz directory-name

Ontdrukken

tar -zxvf archive-name.tgz

Verwijderde servers

Push gebruikersidentiteit naar externe server

ssh-copy-id user@10.0.0.225

Zodat het mogelijk is om zonder wachtwoord in te loggen de volgende keer zoals

ssh user@10.0.0.225

Bestand uploaden

scp ~/file.ext user@host-ip:/home/user/file.ext

Map met ingekapselde inhoud recursief downloaden

scp -r user@host-ip:/home/user/dir ~/dir

Mappen en bestanden

Bestaanscontrole

# maak een map aan als deze niet bestaat, met alle tussenliggende mappen
[ -d $repdir ] || mkdir -p $repdir

# of
if [ -d $fname ]; then
  echo "Bestand bestaat niet: $fname"
  return
fi

Map aanmaken voor een specifieke gebruiker

sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1

Itereer over bestanden in de map

# deze converteert alle jpg-bestanden in een bepaalde map naar fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Alle bestanden samenvoegen in één

cat ./* > merged.txt

Een opdracht toevoegen aan de crontab

(crontab -l 2>/dev/null | \
  grep -v control-marker-1; \
  echo '*/15 * * * * /bin/bash /home/user/stest/stest.sh /home/user/stest >> /home/user/stest/stest.log 2>&1 #control-marker-1') | \
  crontab -

hier:

  • */15 - uitvoeren elke 15 minuten
  • control-marker-1 - is de identificator van deze opdracht in de cronconfiguratie om deze later met hetzelfde script bij te werken
  • /bin/bash - opdracht om uit te voeren
  • /home/user/stest/stest.sh - bash-parameter - de bash zal dit script uitvoeren
  • /home/user/stest - script-parameter - om te worden aangeroepen via $1
  • /home/user/stest/stest.log - logbestand met console-uitvoer van stest.sh

Controleer

grep /home/user/stest/stest.sh /var/log/syslog
crontab -e

Logbestanden

Live logbestand bekijken

sudo tail -f /var/log/megalog.log

Statuscode van curl

response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
  
# of

url='http://localhost:8080/'
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})

[[ $status == 500 ]] || [[ $status == 000 ]] && echo restarting ${url} # voer opnieuw opstartlogica uit

SSH-opdracht laten draaien na afmelding

https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh

Aanname: je hebt een programma actief in de voorgrond, druk dan

  • ctrl-Z, dan:

[1]+ Gestopt myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • afmelden

JSON genereren

Installeer jo

sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"

zou als uitvoer geven

{"model":"a", "prompt":"b", "stream":false}

Een beetje complexer:

jo -p name=Jane point[]=1 point[]=2 geo[lat]=10 geo[lon]=20
{
   "name": "Jane",
   "point": [
      1,
      2
   ],
   "geo": {
      "lat": 10,
      "lon": 20
   }
}

JSON formatteren

Gebruik

| jq .

Om de hierboven gegenereerde JSON te formatteren:

a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .

Het geverifieerde JSON-bestand zal zijn:

{
  "model": 123,
  "prompt": 456,
  "stream": false
}

JSON parsen en waarde van een bepaald veld retourneren

Installeer eerst jq

sudo apt-get install jq

Gebruik

  | jq -r '.fieldName'

Zoals het uitvoeren van een aanroep naar Ollama:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Why is the sky blue?",
  "stream": false
}'  | jq -r '.response'

Woorden tellen in een bestand

Woorden tellen:

wc -w filename.txt

zal iets als volgt retourneren

261 filename.txt

Als je alleen een geheel wilt, kun je het eerste woord, dat een getal is, verwijderen

words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words woorden"

Of gebruik wc zoals:

words=`wc -w < filename.txt`
echo "$words woorden"

Controleer hoeveel ruimte de map op de HDD inneemt

du ~/dirname

Krijg de mapnaam waarin het uitgevoerde script zich bevindt

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

Meet de uitvoeringstijd van het script

Een optie is om de tijdfunctie te gebruiken

time your_script.sh

Een andere manier is iets ingewikkelder:

start=`date +%s`

# zeer belangrijk code
# komt hier

end=`date +%s`

runtime=$((end-start))

Vergelijk twee bestanden met VS Code

code -d <bestand 1> <bestand 2>

Controleer beschikbare pakketten in de Ubuntu-repository

sudo apt-cache policy <packageName>