Шпаргалка по Bash — команды Linux для Ubuntu, Mint и Debian
Некоторые параметры командной строки инструментов
Не очень полный список, но некоторые пункты полезны для меня

Для получения большего количества инструментов разработчика и рабочих процессов см. Инструменты разработчика: Полное руководство по современным рабочим процессам разработки.
Если вам нужен интерактивный шаблон ввода в скриптах, см. Пауза скриптов с нажатием любой клавиши в Bash, CMD, PowerShell и macOS.
Как проверить версию Linux Ubuntu
Для получения более подробной информации о проверке версии Ubuntu см. Проверка версии Linux Ubuntu.
Метод 1
lsb_release -a
выдаст что-то вроде
No LSB modules are available.
Distributor ID: Linuxmint
Description: Linux Mint 22.1
Release: 22.1
Codename: xia
Метод 2
cat /etc/os-release
выдаст что-то вроде
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 с помощью Tar
Сжатие
tar -zcvf archive-name.tgz directory-name
Распаковка
tar -zxvf archive-name.tgz
Доступ к удаленному серверу в Bash через SSH и SCP
Передача идентификационных данных пользователя на удаленный сервер
ssh-copy-id user@10.0.0.225
Таким образом, следующий вход будет возможен без пароля:
ssh user@10.0.0.225
Загрузка файла
scp ~/file.ext user@host-ip:/home/user/file.ext
Скачивание папки с вложенными файлами рекурсивно
scp -r user@host-ip:/home/user/dir ~/dir
Управление папками и файлами в Bash
Проверка существования
# создать папку, если она не существует, со всеми промежуточными папками
[ -d $repdir ] || mkdir -p $repdir
# или
if [ -d $fname ]; then
echo "Файл не существует: $fname"
return
fi
Создание папки для конкретного пользователя
sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1
Перебор файлов в папке
# этот пример конвертирует все файлы jpg в некоторой папке в формат fits
for f in some-folder/*.jpg
do
convert "$f" "${f/.jpg/.fits}"
done
Объединение всех файлов в один
cat ./* > merged.txt
Добавление команд в 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 -
здесь:
- */15 - запуск каждые 15 минут
- control-marker-1 - идентификатор этой команды в конфигурации cron для её обновления при следующем запуске скрипта
- /bin/bash - команда для выполнения
- /home/user/stest/stest.sh - параметр bash - скрипт, который будет выполнен
- /home/user/stest - параметр скрипта - доступен как $1
- /home/user/stest/stest.log - файл логов с выводом консоли от stest.sh
Проверка
grep /home/user/stest/stest.sh /var/log/syslog
crontab -e
Мониторинг файлов логов в Bash
Просмотр лог-файла в реальном времени
sudo tail -f /var/log/megalog.log
Получение HTTP-кода статуса с помощью curl в Bash
response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
# или
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} # логика запуска/перезапуска
Сохранение выполнения команды SSH после выхода из системы
Предположим, что у вас запущена программа в переднем плане, нажмите:
- ctrl-Z, затем:
[1]+ Stopped myprogram
- disown -h %1
- bg 1
[1]+ myprogram &
- logout
Генерация JSON в Bash с помощью jo
Установка jo
sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"
выведет
{"model":"a", "prompt":"b", "stream":false}
Чуть более сложный пример:
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 в Bash с помощью jq
Использовать
| jq .
Для форматирования JSON, сгенерированного выше:
a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .
Отформатированный JSON будет выглядеть так:
{
"model": 123,
"prompt": 456,
"stream": false
}
Парсинг JSON и извлечение значений полей в Bash
Сначала установите jq
sudo apt-get install jq
Использовать
| jq -r '.fieldName'
Например, для парсинга ответа от вызова Ollama:
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "Why is the sky blue?",
"stream": false
}' | jq -r '.response'
Подсчет слов в файле с помощью Bash
Подсчет слов:
wc -w filename.txt
вернет что-то вроде
261 filename.txt
Если вам нужно только число, можно отсечь первое слово, которое является числом:
words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words words"
Или использовать wc как:
words=`wc -w < filename.txt`
echo "$words words"
Проверка использования дискового пространства в директории
du ~/dirname
Получение пути к директории скрипта в Bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
Измерение времени выполнения скрипта в Bash
Один из вариантов — использовать функцию time:
time your_script.sh
Другой способ чуть более сложен:
start=`date +%s`
# очень важный код
# идет здесь
end=`date +%s`
runtime=$((end-start))
Сравнение двух файлов с помощью VS Code
code -d <файл 1> <файл 2>
Проверка доступных пакетов в репозитории Ubuntu
sudo apt-cache policy <packageName>
Полезные ссылки
- Ветка Git в подсказке Bash
- Шпаргалка по Python
- Шпаргалка по Conda
- Синхронизация закладок с Floccus
- Переустановка Linux
- Шпаргалка по Ollama
- Шпаргалка по Docker
- Шпаргалка по Kubernetes
- Шпаргалка по Markdown
- Кодирование и декодирование Base64 на Windows, Linux и Mac
- Декодирование и вывод токена JWT
- Шпаргалка по параметрам командной строки MinIO