Поиск

Найдено 42 статьи по слову "bash"

Как узнать кодировку файла в Ubuntu?

Можно с помощью программы enca.

Устанавливаем:

$ sudo apt install -y enca

Запускаем:

$ enca myfile.txt

Видим результат, например, такой:

Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from ISO-8859-5
bash

Буква Й - файл не найден

Если вы скопируете файл, содержащий в названии эту замечательную букву с Linux-машины на MacOS-машину и обратно, то
попытавшись обнаружить этот файл, вы, скорее всего, уже не сможете этого сделать (ответом будет File not found):

$ ls *й*

Учитывая, что при простом отображении файлов в директории, вы его увидите:

$ ls

Это происходит потому, что букву Й можно закодировать в UTF-8 как один или два символа. И эти две системы делают это
по-разному. При копировании на MacOS файл кодируется по-другому и при копировании обратно, он не будет уже тем старым
добрым Й, который вы знали на Linux-машине. Короче, аккуратнее с этими вещами.

Спасибо человеку, ответившему на тот же вопрос, с которым я столкнулся: http://ru.stackoverflow.com/a/481109

bash linux macos

Удаление дубликатов в модели Django

Например, у нас есть модель такого вида:

class Email(models.Model):
    email = models.CharField(max_length=50)

И мы хотим удалить дубликаты объектов этой модели. Для этого делаем следующее.

Выбираем список значений поля email без повторов и перебираем его.
Далее перебираем все элементы, у которых количество одинаковых email больше одного и удаляем лишнее. При необходимости можно добавить сортировку.

for email in Email.objects.values_list('email', flat=True).distinct():
    Email.objects.filter(pk__in=Email.objects.filter(email=email).values_list('id', flat=True)[1:]).delete()

Обратите внимание, что если значения будут пустыми строками или null, то они будут также обработаны и удалены, кроме одного.
Для того, чтобы это избежать, можно сделать следующее:

for email in Email.objects.values_list('email', flat=True).distinct():
    Email.objects.exclude(email__isnull=True).exclude(email__exact='').filter(pk__in=Email.objects.filter(email=email).values_list('id', flat=True)[1:]).delete()

Приведенные выше действия можно производить где угодно, но обычно это делает однажды в django shell:

./manage.py shell

Источник: http://stackoverflow.com/questions/5877306/remove-duplicates-in-a-django-query

django

Создание бекапов в Яндекс.Диск (Ubuntu)

Описание

Скрипт умеет:
- Делать бекапы директорий, например, /etc.
- Делать бекапы поддиректорий (разделяя их), например, /var/www/*.
- Делать дампы MySQL.
- Делать дампы PostgreSQL.
- Загружать все это дело в Яндекс.Диск.

Подготовка

Для начала необходимо получить токен для Яндекс.Диска.

Для этого:
1. Перейдите по этому URL https://oauth.yandex.ru/client/new.
2. Название введите любое, например, “server_backup” без кавычек.
3. Права выберите пункт “Яндекс.Диск REST API” и в нем “Доступ к папке приложения на Диске”.
4. Снизу нажмите “Подставить URL для разработки”.
5. Сохраните.

Вам выдаст подобные результаты:

ID: 61bf56f1e72a4112b83e1db9e44dbe9c
Пароль: 74087cd13d2247c48661c75617916b75
Callback URL: https://oauth.yandex.ru/verification_code
  1. Переходим по URL https://oauth.yandex.ru/authorize?response_type=token&display=popup&client_id=%ID%
    Обратите внимание. Замените в URL выше %ID% на то, что получили выше, т.е. в моем примере - “61bf56f1e72a4112b83e1db9e44dbe9c”.
  2. Нажимаем кнопку “Разрешить”.
  3. Копируем полученный токен и вставляем его в скрипт в YD_TOKEN (см. ниже).

Настройка

Скачайте файл backup_yd.sh и сохраните его на сервере.

Далее, вам необходимо изменить переменные в блоке “Init variables”:

# Базовый путь для сохранения бекапов.
BASE_BACKUP_DIR="/home/user/backups"

# Токен Yandex.Disk.
YD_TOKEN=""

# Пароль от пользователя root СУБД MySQL. Если она не используется, оставьте пустым.
MYSQL_ROOT_PASSWORD=""

# Делать дампы СУБД PostgreSQL?
# Пустая строка - нет
# "1" - да
USE_POSTGRESQL=""

# Список директорий, которые необходимо бекапить.
# В данном примере будет забекаплена директория /etc как архив etc.tar.gz и
# все поддиректории /var/www с соответствующими именами.
declare -a DIRS_FOR_BACKUP=('/etc' '/var/www/*');

# Размеры чанков (т.к. максимальный размер файлов ограничен, то необходимо
# разрезать архив на несколько частей. Чанк - и есть эта часть).
SPLIT_BY="200MiB"

Также, необходимо дать права на запуск:

chmod +x ./backup_yd.sh

Проверяем

Для проверки запустим скрипт:

./backup_yd.sh

В директории %BASE_BACKUP_DIR% будет создана директория с текущей датой, в ней поддиректории для файлов и дампов баз данных.
Все файлы бекапов разрезаются на чанки.

Затем будет произведена загрузка на Яндекс.Диск и директория будет удалена.

Примечание: Чтобы собрать бекап из чанков, используйте команду cat:

cat mybackup.tgz_* > mybackup.tgz

Настраиваем ежедневные бекапы по времени

Запускаем cron:

crontab -e

Добавляем следующую строку (впишите правильный путь до файла backup_yd.sh)

0 3 * * * /bin/bash /home/user/backups/backup_yd.sh

После этого сохраняйте и выходите из редактирования cron.

Все, теперь каждый день в 3 часа ночи будет создаваться новый бекап и загружаться в ваш Яндекс.Диск.

bash

Сжимаем картинки рекурсивно и пропорционально bash

Находим все файлы с расширением “.png” и, если их размер больше 1500х1500 пикселей, то уменьшаем их размер,
чтобы пропорционально вписать в квадрат 1500х1500, перезаписывая оригинал изображения.

find . -name '*.png' -exec convert -resize "1500x1500>" {} {} \;

Это позволит хоть немного освободить место на жестком диске, если у вас слишком большие изображения.

bash copypaste

Сколько доступно памяти сейчас

grep MemTotal /proc/meminfo | awk ‘{print $2}’

bash copypaste

Количество запущенных процессов bash

Список запущенных процессов (например, python)

pidof python

Количество запущенных процессов для python/perl/bash и прочих с параметрами (например, python3 acd_cli …). Пример ниже выведет 0, 1 или больше

pidof -x someapp | wc -w
bash copypaste

Размер содержимого директорий bash

Вывести директории и их размеры в отсортированном виде по убыванию

du -s /my/directory/path/* | sort -nr

Вывести директории и их размеры в человекопонятном стиле

du -sh /my/directory/path/
bash copypaste

Поиск файлов с помощью bash

Найти файлы рекурсивно, начиная с текущей папки, с текстом “my_text”

egrep -ir --include=*.* "(my_text)" .

Найти файлы, измененные за последние три дня в указанной директории рекурсивно

find /my/directory/path -type f -mtime -3

Найти последние измененные файлы в указанной директории рекурсивно (10 шт.)

find /my/directory/path/ -type f -printf '%T@ %p\0' | sort -zk 1nr | sed -z 's/^[^ ]* //' | tr '\0' '\n' | head -n 10

Найти рекурсивно все файлы с размером 0, начиная с текущей директории

find ./ -size 0 -print
bash copypaste

Список открытых портов bash

Команда

netstat -tulpn

Мнемоническое запоминание: “сетевая статистика (netstat) тюльпан (tulpn)”

Пример результата

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4636/nginx: worker
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      673/sshd
bash copypaste