Push 163 file(s) from Obsidian
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
---
|
||||
title: Linux Bash Справочник
|
||||
source: https://www.glukhov.org/ru/post/2024/04/bash-cheat-sheet/
|
||||
author:
|
||||
- "[[Рост Глухов | Персональный сайт и технический блог]]"
|
||||
published: 2024-04-18
|
||||
created: 2025-08-23
|
||||
description: "Bash: Справочник"
|
||||
tags:
|
||||
- clippings
|
||||
- "#linux"
|
||||
- "#bash"
|
||||
---
|
||||
Не очень подробный список, просто несколько полезных для меня пунктов
|
||||
|
||||

|
||||
|
||||
## Проверка версии Linux Ubuntu
|
||||
|
||||
Метод 1
|
||||
|
||||
```bash
|
||||
lsb_release -a
|
||||
```
|
||||
|
||||
выдаст что-то вроде
|
||||
|
||||
```bash
|
||||
Нет доступных модулей LSB.
|
||||
Идентификатор дистрибутива: Linuxmint
|
||||
Описание: Linux Mint 22.1
|
||||
Версия: 22.1
|
||||
Кодовое имя: xia
|
||||
```
|
||||
|
||||
Метод 2
|
||||
|
||||
```bash
|
||||
cat /etc/os-release
|
||||
```
|
||||
|
||||
выдаст что-то вроде
|
||||
|
||||
```bash
|
||||
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 -zcvf archive-name.tgz directory-name
|
||||
```
|
||||
|
||||
Распаковка
|
||||
|
||||
```bash
|
||||
tar -zxvf archive-name.tgz
|
||||
```
|
||||
|
||||
## Удалённые серверы
|
||||
|
||||
Передача идентификатора пользователя на удалённый сервер
|
||||
|
||||
```bash
|
||||
ssh-copy-id user@10.0.0.225
|
||||
```
|
||||
|
||||
Это позволит войти без пароля в следующий раз, например:
|
||||
|
||||
```bash
|
||||
ssh user@10.0.0.225
|
||||
```
|
||||
|
||||
Загрузка файла
|
||||
|
||||
```bash
|
||||
scp ~/file.ext user@host-ip:/home/user/file.ext
|
||||
```
|
||||
|
||||
Загрузка папки с вложенными элементами рекурсивно
|
||||
|
||||
```bash
|
||||
scp -r user@host-ip:/home/user/dir ~/dir
|
||||
```
|
||||
|
||||
## Папки и файлы
|
||||
|
||||
Проверка на существование
|
||||
|
||||
```bash
|
||||
# создать папку, если она не существует, со всеми промежуточными папками
|
||||
[ -d $repdir ] || mkdir -p $repdir
|
||||
|
||||
# или
|
||||
if [ -d $fname ]; then
|
||||
echo "Файл не существует: $fname"
|
||||
return
|
||||
fi
|
||||
```
|
||||
|
||||
Создание папки для определённого пользователя
|
||||
|
||||
```bash
|
||||
sudo mkdir dir1
|
||||
sudo chown specific_user dir1
|
||||
sudo chown :specific_group dir1
|
||||
```
|
||||
|
||||
Итерация по файлам в папке
|
||||
|
||||
```bash
|
||||
# этот пример конвертирует все jpg файлы в некоторой папке в fits
|
||||
for f in some-folder/*.jpg
|
||||
do
|
||||
convert "$f" "${f/.jpg/.fits}"
|
||||
done
|
||||
```
|
||||
|
||||
Объединение всех файлов в один
|
||||
|
||||
```bash
|
||||
cat ./* > merged.txt
|
||||
```
|
||||
|
||||
## Добавление выполнения команды в crontab
|
||||
|
||||
```bash
|
||||
(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
|
||||
|
||||
Проверка
|
||||
|
||||
```bash
|
||||
grep /home/user/stest/stest.sh /var/log/syslog
|
||||
crontab -e
|
||||
```
|
||||
|
||||
## Журналы
|
||||
|
||||
Просмотр журнала в режиме реального времени
|
||||
|
||||
```bash
|
||||
sudo tail -f /var/log/megalog.log
|
||||
```
|
||||
|
||||
## Код состояния 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 работающей после выхода
|
||||
|
||||
[https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh](https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh)
|
||||
|
||||
Предположим, у вас запущена программа в переднем плане, нажмите
|
||||
|
||||
- ctrl-Z, затем:
|
||||
|
||||
\[1\]+ Остановлено myprogram
|
||||
|
||||
- disown -h %1
|
||||
- bg 1
|
||||
|
||||
\[1\]+ myprogram &
|
||||
|
||||
- logout
|
||||
|
||||
## Генерация JSON
|
||||
|
||||
Установите jo
|
||||
|
||||
```bash
|
||||
sudo apt-get install jo
|
||||
```
|
||||
```bash
|
||||
a="123"
|
||||
b="45语
|
||||
jo "model=a" "prompt=b" "stream=false"
|
||||
```
|
||||
|
||||
выдаст
|
||||
|
||||
```bash
|
||||
{"model":"a", "prompt":"b", "stream":false}
|
||||
```
|
||||
|
||||
Сlightly более сложный пример:
|
||||
|
||||
```bash
|
||||
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 .
|
||||
```
|
||||
|
||||
Для форматирования JSON, созданного выше:
|
||||
|
||||
```bash
|
||||
a="123"
|
||||
b="456"
|
||||
jo "model=$a" "prompt=$b" "stream=false" | jq .
|
||||
```
|
||||
|
||||
Форматированный JSON будет:
|
||||
|
||||
```bash
|
||||
{
|
||||
"model": 123,
|
||||
"prompt": 456,
|
||||
"stream": false
|
||||
}
|
||||
```
|
||||
|
||||
## Парсинг JSON и возврат значения определённого поля
|
||||
|
||||
Сначала установите jq
|
||||
|
||||
```bash
|
||||
sudo apt-get install jq
|
||||
```
|
||||
|
||||
Используйте
|
||||
|
||||
```bash
|
||||
| jq -r '.fieldName'
|
||||
```
|
||||
|
||||
Например, парсинг вывода вызова Ollama:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
вернёт что-то вроде
|
||||
|
||||
```bash
|
||||
261 filename.txt
|
||||
```
|
||||
|
||||
Если вы хотите просто число, вы можете вырезать первое слово, которое является числом
|
||||
|
||||
```bash
|
||||
words=\`wc -w filename.txt | cut -f1 -d' '\`
|
||||
echo "$words слов"
|
||||
```
|
||||
|
||||
Или используйте wc так:
|
||||
|
||||
```bash
|
||||
words=\`wc -w < filename.txt\`
|
||||
echo "$words слов"
|
||||
```
|
||||
|
||||
## Проверка, сколько места занимает директория на HDD
|
||||
|
||||
```bash
|
||||
du ~/dirname
|
||||
```
|
||||
|
||||
## Получение имени папки, в которой находится выполняемый скрипт
|
||||
|
||||
```bash
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
```
|
||||
|
||||
## Измерение времени выполнения скрипта
|
||||
|
||||
Один из вариантов - использовать функцию time
|
||||
|
||||
```bash
|
||||
time your_script.sh
|
||||
```
|
||||
|
||||
Другой способ немного сложнее:
|
||||
|
||||
```bash
|
||||
start=\`date +%s\`
|
||||
|
||||
# очень важный код
|
||||
# здесь
|
||||
|
||||
end=\`date +%s\`
|
||||
|
||||
runtime=$((end-start))
|
||||
```
|
||||
|
||||
## Сравнение двух файлов с помощью VS Code
|
||||
|
||||
```bash
|
||||
code -d <файл 1> <файл 2>
|
||||
```
|
||||
|
||||
## Проверка доступных пакетов в репозитории Ubuntu
|
||||
|
||||
```bash
|
||||
sudo apt-cache policy <packageName>
|
||||
```
|
||||
|
||||
## Полезные ссылки
|
||||
|
||||
- [Справочник по Python](https://www.glukhov.org/ru/post/2024/08/python-cheat-sheet/)
|
||||
- [Справочник по Conda](https://www.glukhov.org/ru/post/2024/10/conda-cheatsheet/ "Справочник по Conda")
|
||||
- [Синхронизация закладок с Floccus](https://www.glukhov.org/ru/post/2024/08/sync-bookmarks-floccus/)
|
||||
- [Переустановка Linux](https://www.glukhov.org/ru/post/2024/04/reinstall-linux/)
|
||||
- [Справочник по Ollama](https://www.glukhov.org/ru/post/2024/12/ollama-cheatsheet/ "Справочник по Ollama")
|
||||
- [Справочник по Docker](https://www.glukhov.org/ru/post/2024/10/docker-cheatsheet/ "список и описание наиболее часто используемых и полезных команд Docker - справочник по Docker")
|
||||
- [Справочник по Kubernetes](https://www.glukhov.org/ru/post/2024/10/kubernetes-cheatsheet/ "список и описание наиболее часто используемых и полезных команд k8s - справочник по k8s")
|
||||
- [Справочник по Markdown](https://www.glukhov.org/ru/post/2024/03/markdown-cheatsheet/ "Полный справочник по Markdown")
|
||||
- [Кодирование и декодирование Base64 в Windows, Linux и Mac](https://www.glukhov.org/ru/post/2025/04/base64/ "Справочник по кодированию/декодированию Base64 в Linux, Windows и Mac")
|
||||
- [Декодирование и вывод JWT токена](https://www.glukhov.org/ru/post/2025/04/decode-and-print-jwt-token/ "Как декодировать и вывести полезную нагрузку JWT токена в Linux bash")
|
||||
- [Параметры командной строки MinIO](https://www.glukhov.org/ru/post/2025/05/minio-cheatsheet/ "Справочник по параметрам командной строки MinIO")
|
||||
Reference in New Issue
Block a user