Bash-snabbkurs – Linux-kommandon för Ubuntu, Mint och Debian

Några verktyg för kommandoradens parametrar

Sidinnehåll

Inte en särskilt omfattande lista, bara några som är användbara för mig

bash and shell anniversary!

För fler utvecklarverktyg och arbetsflöden, se Developer Tools: The Complete Guide to Modern Development Workflows.

Om du behöver ett interaktivt frågemönster i skript, se Pause scripts with Press any key in Bash CMD PowerShell and macOS.

Hur man kontrollerar Linux Ubuntu-version

För mer detaljer om hur man kontrollerar Ubuntu-version, se Check linux ubuntu version.

Metod 1

lsb_release -a

skulle producera något som

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

Metod 2

cat /etc/os-release

skulle producera något som

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

Arkivering och packning med Tar i Bash

Komprimera

tar -zcvf archive-name.tgz directory-name

Depacka

tar -zxvf archive-name.tgz

Bash-åtkomst till fjärrserver med SSH och SCP

Skicka användaridentitet till fjärrserver

ssh-copy-id user@10.0.0.225

Så att du kan logga in utan lösenord nästa gång som

ssh user@10.0.0.225

Ladda upp fil

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

Ladda ner mapp med innehåll rekursivt

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

Bash-mappar och filhantering

Kontrollera existens

# skapa en mapp om den inte finns, med alla mellanliggande mappar
[ -d $repdir ] || mkdir -p $repdir

# eller
if [ -d $fname ]; then
  echo "Filen finns inte: $fname"
  return
fi

Skapa mapp för specifik användare

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

Iterera över filer i mappen

# denna konverterar alla jpg-filer i en mapp till fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Sammanfoga alla filer till en

cat ./* > merged.txt

Lägg till kommandon i 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 -

här:

  • */15 - kör var 15:e minut
  • control-marker-1 - är identifierare för detta kommando i cron-konfigen för att uppdatera det nästa gång med samma skript
  • /bin/bash - kommando att köra
  • /home/user/stest/stest.sh - bash-param - bash kommer köra detta skript
  • /home/user/stest - skript-param - för att nås via $1
  • /home/user/stest/stest.log - loggfil med konsolutdata från stest.sh

Kontrollera

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

Att övervaka loggfiler i Bash

Övervaka loggfil live

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

Hämta HTTP-statuskod med curl i Bash

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

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} # starta/omstarta logik

Hålla SSH-kommando igång efter utloggning

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

Antar att du har ett program som körs i förgrunden, tryck på

  • ctrl-Z, sedan:

[1]+ Stopped myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

Generera JSON i Bash med jo

Installera jo

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

skulle ge ut

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

Lite mer komplext:

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

Formatera JSON i Bash med jq

Använd

| jq .

För att formatera den JSON som genererades ovan:

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

Den formaterade JSON blir:

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

Parsa JSON och extrahera fältvärden i Bash

Installera jq först

sudo apt-get install jq

Använd

  | jq -r '.fieldName'

Liksom att parsar utdata från ett anrop till Ollama:

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

Räkna ord i en fil med Bash

Ordräkning:

wc -w filename.txt

kommer att returnera något som

261 filename.txt

Om du vill ha bara ett heltal kan du klippa bort första ordet, som är ett nummer

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

Eller använd wc som:

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

Kontrollera skivanvändning för mappar

du ~/dirname

Hämta skriptmappens sökväg i Bash

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

Mäta skriptkörningstid i Bash

En möjlighet är att använda time-funktionen

time your_script.sh

Ett annat sätt är lite mer komplicerat:

start=`date +%s`

# mycket viktig kod
# går hit

end=`date +%s`

runtime=$((end-start))

Jämföra två filer med VS Code

code -d <fil 1> <fil 2>

Kontrollera tillgängliga paket i Ubuntu-repositoriet

sudo apt-cache policy <paketnamn>

Användbara länkar

Prenumerera

Få nya inlägg om system, infrastruktur och AI-ingenjörskonst.