Linux Bash Справочник
Параметры командной строки некоторых инструментов
Не очень подробный список, просто несколько полезных для меня пунктов
Проверка версии Linux Ubuntu
Метод 1
lsb_release -a
выдаст что-то вроде
Нет доступных модулей LSB.
Идентификатор дистрибутива: Linuxmint
Описание: Linux Mint 22.1
Версия: 22.1
Кодовое имя: 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
Архивирование и распаковка
Сжатие
tar -zcvf archive-name.tgz directory-name
Распаковка
tar -zxvf archive-name.tgz
Удалённые серверы
Передача идентификатора пользователя на удалённый сервер
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
Папки и файлы
Проверка на существование
# создать папку, если она не существует, со всеми промежуточными папками
[ -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 - bash выполнит этот скрипт
- /home/user/stest - параметр скрипта - будет доступен как $1
- /home/user/stest/stest.log - файл журнала с выводом консоли stest.sh
Проверка
grep /home/user/stest/stest.sh /var/log/syslog
crontab -e
Журналы
Просмотр журнала в режиме реального времени
sudo tail -f /var/log/megalog.log
Код состояния curl
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]+ Остановлено myprogram
- disown -h %1
- bg 1
[1]+ myprogram &
- logout
Генерация JSON
Установите jo
sudo apt-get install jo
a="123"
b="45语
jo "model=a" "prompt=b" "stream=false"
выдаст
{"model":"a", "prompt":"b", "stream":false}
Сlightly более сложный пример:
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
Используйте
| jq .
Для форматирования JSON, созданного выше:
a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .
Форматированный JSON будет:
{
"model": 123,
"prompt": 456,
"stream": false
}
Парсинг JSON и возврат значения определённого поля
Сначала установите 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'
Подсчёт слов в файле
Подсчёт слов:
wc -w filename.txt
вернёт что-то вроде
261 filename.txt
Если вы хотите просто число, вы можете вырезать первое слово, которое является числом
words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words слов"
Или используйте wc так:
words=`wc -w < filename.txt`
echo "$words слов"
Проверка, сколько места занимает директория на HDD
du ~/dirname
Получение имени папки, в которой находится выполняемый скрипт
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
Измерение времени выполнения скрипта
Один из вариантов - использовать функцию 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>
Полезные ссылки
- Справочник по Python
- Справочник по Conda
- Синхронизация закладок с Floccus
- Переустановка Linux
- Справочник по Ollama
- Справочник по Docker
- Справочник по Kubernetes
- Справочник по Markdown
- Кодирование и декодирование Base64 в Windows, Linux и Mac
- Декодирование и вывод JWT токена
- Параметры командной строки MinIO