Bash Cheatsheet - Linux-commando's voor Ubuntu, Mint en Debian

Sommige tools bevatten command line parameters

Inhoud

Niet erg uitgebreid, maar een lijst met voor mij nuttige tips

bash and shell anniversary!

Voor meer ontwikkelaarsgereedschappen en workflows, zie Developer Tools: De Complete Gids voor Moderne Ontwikkelingsworkflows.

Als u een interactieve prompt-patroon nodig heeft in scripts, zie Scripts pauzeren met ‘Druk op een toets’ in Bash, CMD, PowerShell en macOS.

Hoe u de Linux Ubuntu-versie controleert

Voor meer details over het controleren van de Ubuntu-versie, zie Controleer Linux Ubuntu-versie.

Methode 1

lsb_release -a

dit zou iets als dit opleveren:

No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

Methode 2

cat /etc/os-release

dit zou iets als dit opleveren:

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

Bash Archiveren en Ontpakken met Tar

Comprimeren

tar -zcvf archive-name.tgz directory-name

Decomprimeren

tar -zxvf archive-name.tgz

Bash Toegang tot een Remote Server met SSH en SCP

Gebruikersidentiteit pushen naar de remote server

ssh-copy-id user@10.0.0.225

Hierdoor kunt u de volgende keer inloggen zonder wachtwoord, zoals:

ssh user@10.0.0.225

Bestand uploaden

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

Map met geneste bestanden recursief downloaden

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

Bash Mappen- en Bestandsbeheer

Controleren op bestaan

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

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

Map maken voor een specifieke gebruiker

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

Itereren over bestanden in een map

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

Alle bestanden samenvoegen in één

cat ./* > merged.txt

Commando’s toevoegen aan 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 -

hierbij:

  • */15 - uitvoeren elke 15 minuten
  • control-marker-1 - is de identifier van dit commando in de cron-configuratie om het de volgende keer met dezelfde script bij te werken
  • /bin/bash - commando om uit te voeren
  • /home/user/stest/stest.sh - bash-parameter - bash voert dit script uit
  • /home/user/stest - scriptparameter - toegankelijk via $1
  • /home/user/stest/stest.log - logbestand met console-uitvoer van stest.sh

Controleren

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

Logbestanden volgen in Bash

Logbestand live volgen

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

HTTP-statuscode ophalen met curl in Bash

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} # start/restart logica uitvoeren

SSH-commando na afmelden blijven draaien

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

U gaat ervan uit dat u een programma in de voorgrond draait, druk op:

  • ctrl-Z, en vervolgens:

[1]+ Stopped myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

JSON genereren in Bash met jo

Installeer jo

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

zou de volgende output produceren:

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

Iets 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 opmaken in Bash met jq

Gebruik

| jq .

Om de hierboven gegenereerde JSON op te maken:

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

De opgemaakte JSON zal zijn:

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

JSON parsen en veldwaarden extraheren in Bash

Installeer eerst jq

sudo apt-get install jq

Gebruik

  | jq -r '.fieldName'

Zoals het parsen van de output van een oproep aan 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 met Bash

Woordtelling:

wc -w filename.txt

zal iets als dit teruggeven:

261 filename.txt

Als u alleen een getal wilt, kunt u het eerste woord (het getal) uitsnijden:

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

Of gebruik wc als:

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

Gebruikte schijfruimte van een map controleren

du ~/dirname

Het scriptmap pad ophalen in Bash

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

Script-uitvoeringstijd meten in Bash

Een optie is het gebruik van de time-functie

time your_script.sh

Een andere manier is een beetje ingewikkelder:

start=`date +%s`

# zeer belangrijke code
# komt hier

end=`date +%s`

runtime=$((end-start))

Twee bestanden vergelijken met VS Code

code -d <bestand 1> <bestand 2>

Beschikbare pakketten in het Ubuntu-repository controleren

sudo apt-cache policy <packageName>

Abonneren

Ontvang nieuwe berichten over systemen, infrastructuur en AI-engineering.