Skrypt powłoki Bash – komendy Linux dla Ubuntu, Mint i Debian
Niektóre parametry linii poleceń narzędzi
Nie jest to bardzo kompleksowa lista, tylko kilka użytecznych dla mnie elementów

Więcej narzędzi dla programistów i przepływów pracy znajdziesz w Narzędzia dla programistów: Kompletny przewodnik po nowoczesnych przepływach pracy.
Jeśli potrzebujesz interaktywnego wzorca podpowiedzi w skryptach, zobacz Zatrzymywanie skryptów z komunikatem ‘Naciśnij dowolny klawisz’ w Bash, CMD, PowerShell i macOS.
Jak sprawdzić wersję Linux Ubuntu
Więcej szczegółów na temat sprawdzania wersji Ubuntu znajdziesz w Sprawdź wersję Linux Ubuntu.
Metoda 1
lsb_release -a
wygeneruje coś w stylu:
No LSB modules are available.
Distributor ID: Linuxmint
Description: Linux Mint 22.1
Release: 22.1
Codename: xia
Metoda 2
cat /etc/os-release
wygeneruje coś w stylu:
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
Archiwizacja i rozpakowywanie w Bash z użyciem Tar
Kompresowanie
tar -zcvf archive-name.tgz directory-name
Rozpakowywanie
tar -zxvf archive-name.tgz
Dostęp do zdalnego serwera w Bash za pomocą SSH i SCP
Przesyłanie tożsamości użytkownika na zdalny serwer
ssh-copy-id user@10.0.0.225
Dzięki temu kolejne logowanie będzie możliwe bez podawania hasła, np.
ssh user@10.0.0.225
Przesyłanie pliku
scp ~/file.ext user@host-ip:/home/user/file.ext
Pobieranie katalogu z zawartością rekurencyjnie
scp -r user@host-ip:/home/user/dir ~/dir
Zarządzanie katalogami i plikami w Bash
Sprawdzanie istnienia
# utworzenie katalogu, jeśli nie istnieje, wraz ze wszystkimi pośrednimi katalogami
[ -d $repdir ] || mkdir -p $repdir
# lub
if [ -d $fname ]; then
echo "Plik nie istnieje: $fname"
return
fi
Tworzenie katalogu dla konkretnego użytkownika
sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1
Iterowanie po plikach w katalogu
# ten fragment konwertuje wszystkie pliki jpg w danym folderze do formatu fits
for f in some-folder/*.jpg
do
convert "$f" "${f/.jpg/.fits}"
done
Scalanie wszystkich plików w jeden
cat ./* > merged.txt
Dodawanie poleceń do 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 -
gdzie:
- */15 - uruchom co 15 minut
- control-marker-1 - identyfikator tego polecenia w konfiguracji cron do jego aktualizacji kolejnym razem tym samym skryptem
- /bin/bash - polecenie do wykonania
- /home/user/stest/stest.sh - parametr bash - bash uruchomi ten skrypt
- /home/user/stest - parametr skryptu - dostępny jako $1
- /home/user/stest/stest.log - plik logu z wyjściem konsoli stest.sh
Sprawdzenie
grep /home/user/stest/stest.sh /var/log/syslog
crontab -e
Obserwowanie plików logów w Bash
Obserwacja pliku logu na żywo
sudo tail -f /var/log/megalog.log
Pobieranie kodu stanu HTTP za pomocą curl w Bash
response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
# lub
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} # logika uruchamiania/powtórnego uruchamiania
Utrzymywanie działania polecenia SSH po wylogowaniu
Zakładając, że masz program działający w pierwszym planie, naciśnij
- ctrl-Z, a następnie:
[1]+ Stopped myprogram
- disown -h %1
- bg 1
[1]+ myprogram &
- logout
Generowanie JSON w Bash za pomocą jo
Instalacja jo
sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"
wygeneruje:
{"model":"a", "prompt":"b", "stream":false}
Trochę bardziej skomplikowany przykład:
jo -p name=Jane point[]=1 point[]=2 geo[lat]=10 geo[lon]=20
{
"name": "Jane",
"point": [
1,
2
],
"geo": {
"lat": 10,
"lon": 20
}
}
Formatowanie JSON w Bash za pomocą jq
Użyj
| jq .
Aby sformatować wyżej wygenerowany json:
a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .
Sformatowany json będzie wyglądał tak:
{
"model": 123,
"prompt": 456,
"stream": false
}
Parsowanie JSON i wyciąganie wartości pól w Bash
Najpierw zainstaluj jq
sudo apt-get install jq
Użyj
| jq -r '.fieldName'
Np. przy parsowaniu wyniku wywołania Ollama:
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "Dlaczego niebo jest niebieskie?",
"stream": false
}' | jq -r '.response'
Liczenie słów w pliku w Bash
Liczenie słów:
wc -w filename.txt
zwróci coś w stylu:
261 filename.txt
Jeśli chcesz tylko liczbę całkowitą, możesz odcinać pierwsze słowo, które jest liczbą
words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words words"
Lub użyj wc tak:
words=`wc -w < filename.txt`
echo "$words words"
Sprawdzanie użycia dysku w katalogu
du ~/dirname
Pobieranie ścieżki katalogu skryptu w Bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
Mierzenie czasu wykonania skryptu w Bash
Jedną z opcji jest użycie funkcji time
time your_script.sh
Inny sposób jest nieco bardziej skomplikowany:
start=`date +%s`
# bardzo ważny kod
# znajduje się tutaj
end=`date +%s`
runtime=$((end-start))
Porównywanie dwóch plików w VS Code
code -d <plik 1> <plik 2>
Sprawdzanie dostępnych pakietów w repozytorium Ubuntu
sudo apt-cache policy <nazwaPakietu>
Przydatne linki
- Gałąź Git w powłoce Bash
- Karta skrótów Python
- Karta skrótów Conda
- Synchronizacja zakładek za pomocą Floccus
- Ponowna instalacja Linuxa
- Karta skrótów Ollama
- Karta skrótów Docker
- Karta skrótów Kubernetes
- Karta skrótów Markdown
- Kodowanie i dekodowanie Base64 na Windows, Linux i Mac
- Dekodowanie i drukowanie tokena JWT
- Karta skrótów parametrów linii poleceń MinIO