Linux Bash Cheat Sheet

Vissa verktyg kommandoradsparametrar

Sidinnehåll

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

bash och shell årsdag!

Kontrollera Linux Ubuntu-version

Metod 1

lsb_release -a

kommer att producera något som

Inga LSB-moduler är tillgängliga.
Distributör-ID: Linuxmint
Beskrivning: Linux Mint 22.1
Version: 22.1
Kodnamn: xia

Metod 2

cat /etc/os-release

kommer att 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 & avarkivering

Komprimering

tar -zcvf arkivnamn.tgz mappnamn

Dekomprimering

tar -zxvf arkivnamn.tgz

Avlägsna servrar

Skicka användaridentitet till avlägsen server

ssh-copy-id användare@10.0.0.225

Så att det kommer att tillåta inloggning utan lösenord nästa gång som

ssh användare@10.0.0.225

Ladda upp fil

scp ~/fil.ext användare@host-ip:/home/användare/fil.ext

Ladda ner mapp med inbäddade element rekursivt

scp -r användare@host-ip:/home/användare/mapp ~/mapp

Mappar och filer

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 mapp1
sudo chown specifik_användare mapp1
sudo chown :specifik_grupp mapp1

Iterera över filer i mappen

# detta konverterar alla jpg-filer i någon mapp till fits
for f in någon-mapp/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Slå samman alla filer till en

cat ./* > sammanslagen.txt

Lägg till kommandokörning i crontab

(crontab -l 2>/dev/null | \
  grep -v kontroll-märkare-1; \
  echo '*/15 * * * * /bin/bash /home/användare/stest/stest.sh /home/användare/stest >> /home/användare/stest/stest.log 2>&1 #kontroll-märkare-1') | \
  crontab -

här:

  • */15 - kör var 15:e minut
  • kontroll-märkare-1 - är identifierare för detta kommando i cron-konfigurationen för att uppdatera det nästa gång med samma skript
  • /bin/bash - kommando att köra
  • /home/användare/stest/stest.sh - bash-parametern - bash kommer att köra detta skript
  • /home/användare/stest - skriptparametern - att komma åt av $1
  • /home/användare/stest/stest.log - loggfil med konsolutdata av stest.sh

Kontrollera

grep /home/användare/stest/stest.sh /var/log/syslog
crontab -e

Loggar

Följ loggfil i realtid

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

Statuskod för curl

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

# 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 startar om ${url} # gör start/omstart-logik

Låt ssh-kommando köra efter utloggning

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

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

  • ctrl-Z, sedan:

[1]+ Stoppat myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

Generera JSON

Installera jo

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

kommer att producera

{"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

Använd

| jq .

För att formatera JSON som genererades ovan:

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

Det formaterade JSON kommer att vara:

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

Parsa JSON och returnera värdet av något fält

Installera jq först

sudo apt-get install jq

Använd

  | jq -r '.fältNamn'

Som att parsa output av ett anrop till Ollama:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Varför är himlen blå?",
  "stream": false
}'  | jq -r '.response'

Räkna ord i fil

Ordräkning:

wc -w filnamn.txt

kommer att returnera något som

261 filnamn.txt

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

ord=`wc -w filnamn.txt | cut -f1 -d' '`
echo "$ord ord"

Eller använd wc som:

ord=`wc -w < filnamn.txt`
echo "$ord ord"

Kontrollera hur mycket utrymme mappen tar på HDD

du ~/mappnamn

Hämta mappnamn där körande skript är placerat

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

Mät körningstid för skriptet

En alternativ är att använda time-funktionen

time ditt_skript.sh

Ett annat sätt är bara lite mer komplicerat:

start=`date +%s`

# mycket viktig kod
# går här

slut=`date +%s`

körningstid=$((slut-start))

Jämföra två filer med VS Code

code -d <fil 1> <fil 2>

Kontrollera tillgängliga paket i Ubuntu-repository

sudo apt-cache policy <paketNamn>

Användbara länkar