IT Блог

Документации и переводы

Статьи на технические темы

Команды Linux

Команды, которые мне пригодились для настройки Linux. Список будет пополняться по мере использования команд.

Операции с файлами

Копирование файла с удалённого сервера

$ scp root@site.ru:/home/somefile.txt somefile.txt

Быстрая очистка файла

$ cp /dev/null file.txt

Просмотр нагрузки системы

$ top

Настройка производительности

Просмотр сведений о системе

$ cat /etc/*release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=14
DISTRIB_CODENAME=nadia
DISTRIB_DESCRIPTION="Linux Mint 14 Nadia"
NAME="Ubuntu"
VERSION="12.10, Quantal Quetzal"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu quantal (12.10)"
VERSION_ID="12.10"

Просмотр версии ядра

$ uname -r
2.6.32-042stab076.8
$ uname -a
Linux vivazzi 2.6.32-042stab076.8 #1...

pycharm run/debug configuration. Примеры конфигураций

Конфигурации бывают нескольких видов. В моей практике распространены две:

  1. Django server - для запуска самого сайта.
  2. Python - для выполнения различных скриптов, у меня чаще всего management-команд.

Расмотрим в отдельности.

Запуск Django приложения в PyCharm (Пример конфигурации Django server)

У меня лично этот процесс происходит автоматически, то есть при открытии папки проекта (через меню "File \ Open...") PyCharm самостоятельно создаёт конфигурацию Django server с необходимыми настройками:

Если у меня открыть настройки, то он будут такими:

Атоматически распознать Django server и проставить настройки помогает структура папок проекта. У меня она выглядит следующим образом:

collect_static - папка, куда собирается вся статика на боевом сервере для раздачи...

Ошибка PIL: decoder jpeg not available

При использовании PIL в Linux может возникнуть ошибка: decoder jpeg not available. Ниже описываются несколько способов, позволяющих решить данную проблему.

1) PIL требует наличие библиотеки libjpeg-dev

Попробуйте установить её (ключ -I в команде pip install выполняет переинсталяцию библиотеки):

$ sudo apt-get install libjpeg-dev​
$ pip install -I PIL

Но если у вас это не сработает, попытайтесь сделать симлинки библиотек в указанные ниже пути:

Для x64 разрядной системы:

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib

Для x32 разрядной системы:

$ sudo...

Резервное копирование баз данных postgresql

Бекап базы данных

Все знают насколько важна задача резервирования данных, и чем скорее вы это сделаете, тем спокойнее будет. Существуют многие подходы к решению данной задачи. Я лишь опишу свой с ответами на вставшие передо мной вопросы:

  1. Создание бекапа БД postgresql без пароля утилитой pg_dump.
  2. Написание скрипта, который создаёт бекап базы данных (с сжатием) картинкок.
  3. Добавление задания в cron.

Так как резервное копирование должно осуществляться периодически, например, каждый день, то необходимо сделать так, чтобы бекап происходил без пароля. На просторах интернета я наткнулся на примеры:

pg_dump -h localhost -p 5432 -U user_name -F c -b -v -f mydb.backup mydb...

Полезные и востребованные команды postgresql

Список команд, которыми я пользуюсь для управления posqresql 9.Х:

Создание нового пользователя:

su postgres
createuser -P -s postgreadmin
# и введите пароль

Создание владельца базы данных test_user

su postgres
psql
CREATE ROLE test_user WITH NOSUPERUSER LOGIN PASSWORD 'test_pass';

Изменения пароля пользователя postgresql:

# для root:
passwd postgres
# вводим два раза пароль (для подтверждения)
su postgres
psql  # вошли в клиент postgresql
alter user имя_пользователя with password 'пароль';

Расширение/ограничение прав пользователя:

alter user user_name superuser createrole createdb;  # расширяем
alter user user_name nosuperuser nocreaterole nocreatedb;  # ограничиваем

Запуск, перезапуск, остановка postgresql:

service postgresql start
service postgresql restart
service postgresql stop

список баз данных

psql...

Удалённый доступ к PostgreSQL

​В первую очередь нужно разрешить подключаться к postgresql с внешних ip. Для этого находим файл postgresql.conf (у меня находится в папке /etc/postgresql/9.1/main) и правим следующую строчку:

# /etc/postgresql/9.1/main/postgresql.conf
listen_addresses = '*'

Обратите внимание, что нужно убрать перед директивой listen_addresses знак комментария #.

А в файле pg_hba.conf (лежит в там же, что и postgresql.conf) добавляем следующую строчку:

# /etc/postgresql/9.1/main/pg_hba.conf
hostssl  all  postgreadmin  0.0.0.0/0  md5

где:
hostssl - подключаемся через SSL
all - разрешаем подключение ко всем базам
postgreadmin - имя пользователя, которому разрешаем подключение
0.0...


Добавляем сайт в поисковики google, yandex, mail, rambler, bing

Для того чтобы ускорить индексацию ваших сайтов, нужно их добавить в популярные поисковые системы. Для России на сегодняшний день популярны поисковики google, yandex, mail, rambler, bing. Далее приводится список ссылок, где вы можете добавить свой сайт на индексацию.

google
yandex
mail
rambler
bing


Рекурсивное удаление файла в python

Удаление файла

Стандартное удаление файла в python:

import os
os.remove(path)

path - путь до папки.

Удаление папки

Для удаления папки нужно подключить специальный пакет shutil:

import shutil
shutil.rmtree(path, True)

path - путь до папки.

Аргумент True в методе rmtree() позволяет команде игнорировать ошибки, которые могут встретиться при удалении каталога.

Рекурсивное удаление файлов и папок

Недавно надо было удалить ненужный файл placeholder из некоторого числа вложенных папок. Немного допилив чужой скрипт, у меня вышла следующая полезная функция, которая удаляет и файлы, и папки по заданному имени (при необходимости можно этот скрипт модифицировать для удаления только файла или только папки...


Проблема при отправке данных на сервер с помощью ajax

Обновление зависимостей проекта - всегда "весёлая" штука. Бывает после обновления отваливается какая-то функциональность. Обнаружить поломки нам помогают автоматизированные тесты, которые помогли и мне после того как я обновил Django до версии 1.5.

После обновления возникла проблема: view перестал видеть данные отправленные через аjax. Решением послужило удаление всего одного параметра при вызове метода ajax - contentType: "application/json". Поэтому, если у вас что-то похожее на мой код:

$.ajax({
    type: 'POST',
    contentType: "application/json",
    url: '{% url 'my_app.views.my_ajax_hander' %}',
    data: data_dict,
}).done(function(result) {
        some_function()
    });

то уберите строчку - contentType: "application/json", и у вас должно заработать.


range цикл в шаблоне Django

Бывают случаи, когда нужно в шаблоне пройтись циклом не по объектам, а по диапазону значений. Но шаблонный движок Django этого не позволяет. Также нет специального фильтра в стандартном наборе фильтров Django, но можно легко написать свой. Например так: в файле my_app/templatetags/my_filters.py пишем:

@register.filter
def create_range(value, start_index=0):
    return range(start_index, value+start_index)

И теперь в шаблоне уже можно использовать созданный фильтр:

{% load my_filters %}
{% for i in 10|create_range %}
...
{% endfor %}

Если нам нужно возвращать i, начиная с единицы, то используем в шаблоне так:

{% load my_filters %}
{% for i in 10|create_range:1 %}
...
{% endfor %}

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте