Можно с помощью программы 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
Можно с помощью программы 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
Если вы скопируете файл, содержащий в названии эту замечательную букву с Linux-машины на MacOS-машину и обратно, то
попытавшись обнаружить этот файл, вы, скорее всего, уже не сможете этого сделать (ответом будет File not found):
$ ls *й*
Учитывая, что при простом отображении файлов в директории, вы его увидите:
$ ls
Это происходит потому, что букву Й можно закодировать в UTF-8 как один или два символа. И эти две системы делают это
по-разному. При копировании на MacOS файл кодируется по-другому и при копировании обратно, он не будет уже тем старым
добрым Й, который вы знали на Linux-машине. Короче, аккуратнее с этими вещами.
Спасибо человеку, ответившему на тот же вопрос, с которым я столкнулся: http://ru.stackoverflow.com/a/481109
Например, у нас есть модель такого вида:
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
Скрипт умеет:
- Делать бекапы директорий, например, /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
Скачайте файл 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 часа ночи будет создаваться новый бекап и загружаться в ваш Яндекс.Диск.
Находим все файлы с расширением “.png” и, если их размер больше 1500х1500 пикселей, то уменьшаем их размер,
чтобы пропорционально вписать в квадрат 1500х1500, перезаписывая оригинал изображения.
find . -name '*.png' -exec convert -resize "1500x1500>" {} {} \;
Это позволит хоть немного освободить место на жестком диске, если у вас слишком большие изображения.
grep MemTotal /proc/meminfo | awk ‘{print $2}’
Список запущенных процессов (например, python)
pidof python
Количество запущенных процессов для python/perl/bash и прочих с параметрами (например, python3 acd_cli …). Пример ниже выведет 0, 1 или больше
pidof -x someapp | wc -w
Вывести директории и их размеры в отсортированном виде по убыванию
du -s /my/directory/path/* | sort -nr
Вывести директории и их размеры в человекопонятном стиле
du -sh /my/directory/path/
Найти файлы рекурсивно, начиная с текущей папки, с текстом “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
Команда
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