Saturday, March 10th, 2012
Бывает нужно копировать файлы с сервера на локальный компьютер и наоборот. Раньше я поднимал ftp для этих целей, но вот вчера с удивлением узал что существует специальная команда которая позволяет перемещать и копировать данные используя ssh сессию, по специальному (шифрованному!) протоколу – scp.
С помощью программы scp (Secure Copy) вы можете копировать файлы и директории между разными Unix или Linux-машинами.
Scp использует ssh для соединения и предоставляет аналогичный уровень безопасности.
SCP (от англ. secure copy) — протокол RCP копирования файлов, использующий в качестве транспорта не RSH, а SSH. В UNIX-подобных операционных системах существует одноимённая (scp) утилита удалённого копирования файлов (входит в состав openssh).
Использовать примерно так:
scp root@32.1.20.77:/home/database.sqlite ~
Копирует файл с сервера в рабочую папку текущего юзера на локальном компьютере.
Для виндовс, говорят тоже есть специальное приложение WinSCP.
Posted in Linux, Notes | 3 Comments »
Friday, March 2nd, 2012
Вчера встала задача разбить 19 мегабайтный файл (с линками на профиля собранные для дальнейшего извлечения маркетинговой информации) с почти 50 000 строк на небольшие файлики по, скажем, 500 строк для последующей обработки. Сгоряча начал даже набрасывать небольшой скрипт на python, потом внезапно обнаружил что в linux есть замечательная команда – split
user@machine:~$ split --help
Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'. With no INPUT, or when INPUT
is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-a, --suffix-length=N use suffixes of length N (default 2)
-b, --bytes=SIZE put SIZE bytes per output file
-C, --line-bytes=SIZE put at most SIZE bytes of lines per output file
-d, --numeric-suffixes use numeric suffixes instead of alphabetic
-l, --lines=NUMBER put NUMBER lines per output file
--verbose print a diagnostic just before each
output file is opened
--help display this help and exit
--version output version information and exit
Пример использования:
split -d -l 450 -a 5 file.txt
Надеюсь это сэкономит кому-то время )
Posted in Linux | No Comments »
Tuesday, February 28th, 2012
Долго не писал, был крайне занят в разных проектах, получая madskillz в различных областях программирования. Ну что могу сказать, программировать мне пока нравится больше чем предыдущие занятия SEO. Сама оптимизация канешно весьма полезное умение и имеет скажем так прикладное значение, но я считаю трЪ вебмастер должен уметь собственно делать сайты. Причем не на вордпрессе или на какой-нибудь сраной point-and-click CMS, а уметь писать легковесные, быстрые, заточенные под задачу решения.
Это было интро, собственно переходим к сути статьи. Итак, как правило программист нуждается в редакторе в котором он будет набирать код. Некоторые предпочитают огромный монстроподобные, тяжеловесных, кросплатформенных java-IDE (eclipse, netbeans и т.д.) весь функционал которых как правило не исползуется, в то время лаги gui достаточно ощутимы, кто бы что не говорил. Однако линуксу уже не первый год и на нем существуют достаточно хорошие нэйтивные решения, которым уже по 30 (с хуем) лет, но которые тем не менее активно развиваются и многие предпочитают набирать код именно в этих редакторах, я имею в виду Emacs и Vim. Звезды сложились так что я стал использовать emacs, сначала для того чтобы набирать небольшие программки параллельно с netbeans, затем понял что netbeans мне уже не нужен.
Собственно уже не первый раз устанавливая Ubuntu на разные компьютеры я сталкиваюсь с необходимостью заново создавать рабочее окружение Emacs’а.
И вот в очередной раз решил записать последовательность действий.
Установка и настройка Emacs для разработки на Python

Для начала все свои настройки и плагины я храню в репозитории на гитхабе, который доступен мне из любой точки мира где есть интернет.
Сперва поставим сам емакс, открываем терминал и пишем:
sudo apt-get install emacs
Поставим гит если его нет (а если система совсем новая то нужно еще перед этим сделать sudo apt-get update)
user@machine:~$ sudo apt-get install git-core
Coбственно осталось кланировать репозиторий куда-нибудь в папке юзера.
user@machine:~$ cd ~
user@machine:~$ mkdir temp
user@machine:~$ cd temp
user@machine:~$ git clone https://github.com/istinspring/iemacs
Затем копируем файлы конфигурации в папку юзера
user@machine:~$ cp -r iemacs ~/.emacs.d
user@machine:~$ cd iemacs
user@machine:~$ cp .emacs ~/.emacs
Если сейчас запустить Emacs он покажет ошибку, т.к. нет нужных плагинов.
Ставим их:
user@machine:~$ sudo apt-get install pymacs
user@machine:~$ sudo apt-get install python-ropemacs
user@machine:~$ sudo apt-get install python-mode
Все. Остальные плагины уже установленны в папочке. Я использую минимальный набор плагинов, хотя можно при желании наворотить очень много всякого, и проверку синтаксиса на лету и соответствие PEP8.
YASnippets – сниппеты. очень удобно вбить туда повторяющиеся паттерны кода. Например у меня вбиты сниппеты для быстрого создания скелета паука – grab:spider.
Autocomplete – тут и сказать нечего автокомплит. Так же ускоряет процесс набивание кода.
Далее можно начать разбираться и потихоньку выстраивать удобное окружение для работы с кодом.
Posted in Code, Linux, Notes, Python | 4 Comments »
Friday, March 4th, 2011
Наткнулся в Линуксе на очень удобную штучку: в окне терминала можно работать сразу с несколькими процессами, посылая какие-то на фоновое выполнения и переключаясь между тем что нужно на данный момент.
Когда вы находитесь в терминале и, к примеру, у вас запущен mc, можно в любой момент послать эту задачу на фоновое выполнение нажав [ctrl+z]
Чтобы посмотреть список задач которые “висят” на фоне нужно набрать: [jobs] (без квадратных скобок конечно)
Для переключение между задачами [fg номер задачи] (где номер задачи 1, 2… такой же как и в списке который выводится после команды [jobs])
Чтобы сразу запустить задачу как фоновый процесс нужно добавить [&]. Например [mc &]
Очень удобно )
Posted in Linux, Notes | No Comments »
Thursday, March 3rd, 2011
Вообщем удаленные репозитории это очень хорошо. Во первых появляется какая-то строгость в работе, во вторых безопасность данных и удобство управления, список можно продолжить, но собственно, думаю, основная мысль понятна : “репозитории это хорошо”. К сожалению GitHub бесплатно предоставляет только открытый репозитории, т.е. если вы не хотите чтобы код вашего проекта смотрел кто-то еще придется заплатить кэш, что не всегда целесообразно. Однако bitbucket.com позволит вам абсолютно бесплатно содержать 5 закрытых репозиториев кода.
Резюмирую выше написанное – GitHub хорошо подходит для OpenSource проектов.
Как добавить файлы на github?
Теперь расскажу как это сделать. На примере небольшой утилиты которая разбивает текст на предложения : textsplitter.py
Для тех кто еще не зарегистрировался и не создал ключи для гитхаба ранее была статья :
Работа с Github. Генерация SSH ключей.
На гитхабе создаем новый репозиторий – New Repository
Далее все просто. На своей рабочей Linux машине пишем следующее :
$ mkdir Utils # создаем папку Utils
$ cd Utils # заходим туда
$ git init # инициализируем гит
$ touch README # создаем ридми файл
# каким нибудь редактором пишем в этот файл пару строк о проекте или оставляем пустым
$ git add README # добавляем ридми в список коммитов
$ git commit -m 'first commit' # проводим первый коммит, с комментарием к нему
До этого момента все действия были совершены локально. Настало время присоединится к гитхабу и применить изменения которые были проведены на локальной машине.
$ git remote add origin git@github.com:username/Utils.git # связываем локальный прокт с репозиторием на гитхабе
$ git push origin master # применяем изменения попросят ввести пароль который вы задали для ключей.
# если ключи генерировали под root юзером нужно писать sudo git....
Теперь таким же образом можно создавать файлы, добавлять их в проект (git add filename), делать коммиты, загружать новые версии и т.д.
Все теперь можно заходить GitHub и смотреть что получилось.
Posted in Code, social networks | No Comments »
Sunday, December 12th, 2010
Наверняка многие из вас знают как организуется работа нескольких человек над одним проектом с помощью систем управления версиями. В наши дни технология улучшилась на столько, что появился отдельный вид веб сайтов – хостниги для проектов. Один из них – github основанный на системе контроля версий git.
что внутри?
Можно создать аккаунт, фалловить другие проекты, делать коммиты. Размещение OpenSource проектов абсолютно бесплатно, но есть возможность сделать приватный проект (за $). Вообщем нет лучше места для храниения и поддержки своего OpenSource кода. Так же думают ребята из :
Расчет прост – выкладывать части своих проектов которые могут пригодится другим, при этом получая поддержку коммунити и сообща доводя компоненты до совершенства.
Там же можно найти массу готового кода, чтобы каждый раз не изобретать велосипед.
Как начать свой проект?
Практически все серьезные девелоперы сидят на Linux.
Для начала вам понадобится сам git.
http://help.github.com/linux-git-installation/
sudo apt-get install git-core
я поставил только git-core. далее нужно сгенерировать ssh кеи.
http://help.github.com/linux-key-setup/
# идем в папку где должны хранится ключи
$ cd ~/.ssh
# смотрим есть ли файлы типа id_rsa, id_dsa или identity
ls
# если нет - генерируем новые
$ ssh-keygen -t rsa -C "youmail@gmail.com"
Я несколько раз создавал удалял, так что можно снести если у вас уже есть ключи но вы что называется don’t give a fuck (т.е. не знаете откуда они и зачем). предварительно лучше всего все же скопировать то что есть в отдельную папку. На всякий случай. Мне еще пришлось скопировать ключи в /root/.ssh (создавал в /home/(youruser)/.ssh)
Теперь нужно добавить свой public key в https://github.com/account. Public Key находится в файле id_rsa.pub – скопировать его в clipboard можно с помощью xclip :
$ sudo apt-get install xclip
$ cat ~/.ssh/id_rsa.pub | xclip -sel clip
Тестируем что получилось :
$ ssh git@github.com
....
ERROR: Hi tekkub! You've successfully authenticated,
but GitHub does not provide shell access
Connection to github.com closed.
Если все окей можно приступать к созданию проекта. Если нет – troubleshooting common issues
Posted in Code, social networks | 1 Comment »
Sunday, June 13th, 2010
Бывает банят по ипу социальные сети, или форумы, или нужно работать с нескольких аккаунтов, короче говоря нужен дополнительный айпи. Если есть свой сервер, где-нибудь в европе или США, то реализовать это довольно просто, нужно лишь поставить Squid :
Fedora/Centos : yum install squid
Ubuntu/Debian : sudo apt-get install squid
Поставим его на автозагрузку (при ребуте)
chkconfig squid on
Старт/Стоп/Рестарт (рестарт нужно делать при обновлении конфига)
service squid start
service squid stop
service squid restart
Посмотреть запущен ли Squid можно так :
pgrep squid
Файл конфигурации должен быть тут : /etc/squid/squid.conf
Если, вдруг, его там нет >>> whereis squid и внимательно втыкаем в показанные папки
По дефолту должно все быть настроено, единственное что нужно это указать свой ип с которого планируется пользоваться прокси.
acl my_work src 192.168.1.0/24
http_access allow my_work
Внимательно правите конфиг, там есть небольшая подъебка, которая неопытных пользователей линукса может ввести в ступор.
После всех объявлений идет такая строчка :
# And finally deny all other access to this proxy
http_access deny all
Т.е. запрет доступа от всего что не перечисленно выше, поэтому все настройки доступа нужно прописывать до этого. Если вам все равно что вашей проксей будут пользоваться все – делаете http_access allow all, тем самым разрешая доступ всему что имеет честь законнектится на 3128 порт. Между делом говоря, деволтный порт так же легко меняется в конфиге :
http_port 3128
Подробнее можно прочитать тут. Если у вас поднять файр, то все несколько сложнее, придется прописывать правила. Squid без проблем работает на OpenVZ контейнере, т.е. на VPS/VDS
Posted in Notes, Proxy, Server | 2 Comments »
Friday, May 21st, 2010
Самое время установить FTP сервер. Комрады рекомендуют – vsftpd. Eго используют на таких серьезных сайтах, как : ftp.redhat.com, ftp.suse.com, ftp.debian.org, ftp.gnu.org, ftp.gnome.org, ftp.kde.org, т.е. фтп с высокой загрузкой. для которых не менее важна надежность.
Внимание!!! FTP сервер может быть уже установлен (проверьте это попробовав зайти на ftp://youserverIP).
У меня отлично поставился через yum (если версия linux у вас 64 битная, то рекомендую для начала проверить наличие 64 битной весии yum search vsftpd) :
yum install vsftpd
[root@server/]# yum install vsftpd
...... [cut]
Downloading Packages:
(1/1): vsftpd-2.0.6-6.fc9.x86_64.rpm | 143 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: vsftpd ######################### [1/1]
Installed: vsftpd.x86_64 0:2.0.6-6.fc9
Complete!
Из кусочка лога видно, что поставилась нужная 64 битная версия, yum сработал как надо.
Теперь для тех лузеров у кого не получилось установить из репозитария с помощью yum’а. Ниггер, как ты правильно понял тебя ждут суровые испытания
скопировать нужную версию тут. Качаем последний архив .tar.gz в папку например root/install :
[root@server install]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz
C помощью mc распаковываем его. Заходим в папку куда распаковали и втыкаем маунал в файле install. Ну а что? Установка с исходников дело неинтеллигентное. Для RedHat/Fedora систем есть rpm, нужно только погуглить и поставить vsftpd из rpm точно таким же образом как например webmin. Думаю если поискать, то можно найти и rpm для CentOS’а.
Я оптимистично полагаю, что все же yum сработал и vsftpd установился без проблем. Теперь нужно сконфигурировать и запустить.
/etc/vsftpd/ – в этой папке находятся файлы конфигурации (это можно посмотреть набрав команду whereis vsftpd)
Делаем следующее :
Создаем папку для фтп – /var/ftpwww/
Через webmin создаем юзера – ftpwww (system->Users and Groups), задаем ему папку (/var/ftpwww), shell – /sbin/nologin и пароль.
Теперь нужно поправить файл конфига – vsftpd.conf (находится в /etc/vsftpd/vsftpd.conf)
# Example config file /etc/vsftpd/vsftpd.conf
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd whith two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
Это пример конфига для vsftpd. Обратите внимание, что вот эти строчки нужно раскомментировать.
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
затем создать файл chroot_list – и туда записать юзера ftpwww, это необходимо для того, чтобы запретить юзеру ходить дальше назначенной папки.
+ закомментировать anonymous_enable=YES, на всякий случай, нам же не нужно чтобы на фтп сервер коннектились разные анонимусы =)
Вот и все! Осталось только перезапустить vsftpd :
/etc/init.d/vsftpd restart
Теперь можно соединятся с сервером используя FAR или Total Commander. Настраиваем подключение через свой фтп менеджер :
Server – IP вашего сервера, ну и логин/пасс – юзера которого вы создали через вебмин.
Posted in Server | No Comments »
Sunday, April 25th, 2010
Многие конечно же имеют свой сервер для белых проектов или других более темных вещей, но как известно за удобную панель управления вроде CPanel или DirectAdmin’а нужно доплачивать деньги, кажется не так много, но сервера сейчас дешевые поэтому эти 10-20$ дают ощутимую прибавку к конечной стоимости. К этому стоит еще добавить глючность и наличие дыр в этих самых панелях, благодаря которым умные парни с хак-форумов могут получить доступ туда, куда не нужно. Вариант второй : иногда бывает, что берут безабузный сервер для апостера, и тратить лишние деньги за не нужную панель – грех. К счастью это linux, и тут есть масса бесплатных вариантов, об одном из них расскажу подробнее. Итак :
Установка панели управления сервером – Webmin.
Может отличаться для разных версий Linux’а.
Для начала нужно скачать webmin из репозитария :
yum install webmin
затем проверьте все ли прошло нормально
whereis webmin
если не получилось (у меня на CentOS не получилось, хз в чем дело) то после выполнения команды yum install webmin будет что-то вроде этого :
[root@server etc]# yum install webmin
Setting up Install Process
Setting up repositories
...
...
Excluding Packages in global exclude list
Finished
Parsing package install arguments
No Match for argument: webmin
Nothing to do
что может ввести в заблуждение, вроде что-то качается и даже что-то пишет, на самом деле это yum стягивает список продуктов, а вебмина нету в репозитарии.
Если не судьба поставить на автопилоте, то придется скачивать самому. Для этого идем сюда – http://www.webmin.com/download.html и качаем дистрибутив для своей системы. Для меня подошел этот http://prdownloads.sourceforge.net/webadmin/webmin-1.430-1.noarch.rpm.
Качаем нужный командой wget :
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.430-1.noarch.rpm
wget копирует файл в текущую дерикторию. Люди рекомендуют сохранять такие файлы в /root – например /root/installs . Инсталлируем :
rpm -i webmin-1.430-1.noarch.rpm
далее все происходит на автомате. Скорее всего выведет complete.
Теперь нужно зайти и залогинится. Логинимся так yourserverip:10000 Но тут возможны варианты, в конце инсталяции rpm написал, что теперь могу логиниться со своим рут паролем, однако может быть так что пароль будет пустым (этот вариант вполне возможен если сразу ставить из репозитария). Если пароль пустой, то естественно нужно его сменить в интерфейсе Webmin’а.
Posted in Server | No Comments »