пятница, 18 января 2013 г.

Команды терминала Ubuntu

Основные команды терминала Ubuntu:
cd, ls, pwd, touch, mkdir, rmdir, cр, mv, rm, su, whoami, sudo, chmod.

Перейти в папку.

cd ~ - перейти в домашнюю папку (cd - change directory).
cd / - перейти в самую верхнюю папку.
cd /bin - перейти во внутреннюю папку.
cd ../ - перейти в родительскую папку.
cd - - перейти в предыдущую папку.

Посмотреть список файлов в папке.

dir - посмотреть список файлов в папке.
ls - посмотреть список файлов в папке (выводит в строку).
ls -1 - (минус один) посмотреть список файлов в папке (выводит в 1 столбец - вертикальный список) (1 - one).
ls -l - (минус эль) посмотреть список файлов в папке (выводит в виде таблицы с правами доступа и подробными сведениями о владельцах файлов) (l - long).
ls -a - посмотреть список файлов в папке, включая скрытые файлы (выводит в виде столбиков) (a - all). Названия скрытых файлов начинаются с точки (.pulse-cookie).
ls -la - посмотреть список файлов в папке.
ls -m - посмотреть список файлов в папке (выводит в строку с разделительными запятыми) (m - comma).
ls -F - посмотреть расширения файлов. / на конце - признак папки. * - признак исполняемого файла.




ls --color - вывод информации в цвете.



ls -r - посмотреть список файлов в папке в обратном порядке.

ls -x - сортировка содержимого папки по суффиксам имен файлов (x - extension).

ls -t - сортировка содержимого папки по дате и времени (t - time).
ls -tr - сортировка содержимого папки по дате и времени в обратном порядке.

ls -s  - сортировка содержимого папки по размеру файлов (s - size).

ls -h  - посмотреть список файлов в папке с размерами по килобайтам и мегабайтам..

ls /bin - посмотреть содержимое папки bin.
ls -R ~/iso  - посмотреть содержимое внутренних папок (R - recursive).

ls -l -a -s - r - команды можно разделять пробелами.

Создать папку.

mkdir test - создать папку.
mkdir -p ~/pictures/personal/family  - создать папку и подпапки в ней (p - parents).
mkdir -pv ~/pictures/personal/family  - создать папку и подпапки в ней с указанием всех выполненных действий по порядку (v - verbose).

Скопировать файл.

cp файл_источник целевой_файл - копирование файла (cp - copy).

cр pix/libby_arrowrock.jpg libby/arrowrock.jpg  - копирование файла в папку.
cр pix/libby_arrowrock.jpg . - скопировать файл в текущую папку, обозначенную точкой.
cр pix/libby_arrowrock.jpg /libby - скопировать файл в папку libby.

cр /pix/by_pool*.jpg - копирование всех файлов.
cр /pix/by_pool[1-3].jpg  - копирование группы файлов.

cр -v /pix/by_pool[1-3].jpg  - копирование группы файлов с указанием всех выполненных действий по порядку (v - verbose).

cp -i pix/libby_arrowrock.jpg  - копирование файла с выводом предупреждения в случае перезаписи файла (i - interactive).

cp -R libby libby_bak - копирование всей папки.

cp -a libby libby_bak - создание резервной копии файла или папки (a - archive).

Создать псевдоним для команды.

alias cр='cp -i' - создание псевдонима в файле .bashrc для сокращенного ввода команды.

Переместить файл.

mv - команда перемещает и переименовывает папки и файлы (mv - move).
mv dogs/ /libby - перемещение папки dogs в папку libby.

Узнать путь к текущей директории.

pwd - узнать в какой папке я нахожусь сейчас (pwd - print working directory).

Справка по командам.

help - вызов справки по командам.

Очистить экран терминала.

clear - очистить экран.

Показывть список текущих процессов.

top - показывает список текущих процессов, изменяющихся во времени. Чтобы выйти нажмите Ctrl+C.

Повтор ранее введенных команд.

Стрелка вверх или вниз на клавиатуре - повтор ранее введенных команд.

Изменение информации о времени доступа и модификации файла.

touch wireless.log - изменение информации о времени доступа и модификации файла.

touch wireless.log -a - изменение только времени доступа файла (a - access).
touch wireless.log -m - изменение только времени модификации файла (m - modify).
touch -t 197002160701 wre1ess.log  - установка произвольного времени для файла (t - time). Формат: [[CC]YY]MMDDhhmm[.ss]



touch /var/test.txt - создает пустой файл test.txt, или обновляет время создания существующего файла.

Запуск команд от имени суперпользователя.

sudo - программа запуска команд от имени суперпользователя (sudo - super user do).

sudo touch /var/test - создает пустой файл test, или обновляет время создания существующего файла после ввода пароля пользователя.

sudo rm /var/test -  удаляет файл после ввода пароля пользователя.

Запуск графических программ из консоли.

gksu - программа запуска графических программ из консоли (используется взамен sudo для графических программ).

gksu gedit - запуск программы графического редактора GEdit из консоли.

gedit ~/.bashrc - открытие файла для редактирования в редакторе GEdit.

gksu gedit ~/.bashrc - открытие файла для редактирования в редакторе GEdit с правами суперпользователя, позволяющими сохранять изменения в документе.

Обновление файлов операционной системы.

sudo apt-get update - команда обновления файлов операционной системы.

sudo apt-get upgrade
sudo apt-get dist-upgrade - 2 выполненные подряд команды вызовут менеджер обновления операционной системы из консоли.

Установленновка программ из репозитория.

sudo apt-get имя программы - установленновка программы из репозитория.

Удаление программ.

sudo apt-get remove имя программы - удаление установленной программы.
sudo apt-get remove krusader

sudo apt-get purge имя программы - удаление установленной программы и ее зависимостей.

sudo apt-get autoremove - удаление зависимостей, которые не используются ни одной программой. Все скачанные пакеты автоматически сохраняются в директории /var/cache/apt/archives/

sudo apt-get clean - удаление пакетов программ из кэша, расположенного в папке /var/cache/apt/archives/


sudo dpkg -i имя программы - установка программы вручную.
sudo dpkg -i smplayer_0.6.2_i386.deb

sudo apt-get -f install - установка дополнительных пакетов или удаление поломанного пакета.


sudo apt-get install alien - установка программы Alien, которая позволяет конвертировать программы из формата .deb в формат .rpm

alien имя_файла.rpm - конвертация программы из формата .deb в формат .rpm

Удаление файлов.

rm pool.jpg - удаление файлов (rm - remove).

rm 'pool 23.jpg' - удаление файла с пробелом в названии.


rm -v *.bak - удаление файлов с указанием всех выполненных действий по порядку (v - verbose).

rm -i pool.jpg - удаление файла с выводом предупреждения об удалении (i - interactive).

Удаление сразу нескольких файлов из папки.

rm * - звездочка отмечает любое, в том числе нулевое, количество символов в названии файла (* - 0 и более символов).

libbyl.jpg
libby2.jpg
libbyз.jpg
libby4.jpg
libby5.jpg
libbyб.jpg
libby7.jpg
libby8.jpg
libby9.jpg
libby10.jpg
libby11.jpg
libby12.jpg
libby1.txt


rm ? - вопрос соотвествует только одному произвольному символу (? -  только 1 символ).



rm [12] - квадратные скобки соответствуют одному символу из набора или диапазону символов ([1-3] - символы из диапазона).



rmdir lieberman_pool_bak - удаление только пустой папки (rmdir - remove directory).

rm -Rf lieberman_pool_bak - удаление всех файлов и внутренних папок, содержащих файлы (R - recursive, f - force).

Показать имя текущего пользователя.

whoami - показать имя текущего пользователя.

Изменение текущего пользователя системы (перелогиниться).

su boris - изменить пользователя системы (перелогиниться) (su - switch user).
su -l boris - перелогиниться в качестве другого пользователя, используя его окружение (l - login).
su -l root - залогиниться в качестве супер пользователя root.

Вывод подсказки по командам.

man ls -  получение подсказки по команде ls (man - manual).
man -f ls -получение подсказки о назначении команды ls (f - what is).
Аналог команды man -f ls - whatis ls

man -t 1s | lpr -p hp_laserjet  - конвейерная обработка команд.

Получение подсказки по справочному руководству.

info info - получение подсказки по справочному руководству.

Получение пути размещения файла.

whereis kword - получение пути размещения файла.

whereis -b kword - получение пути размещения только исполняемого файла программы.

whereis -m kword - получение пути размещения справочного руководства программы.

whereis -s kword - получение пути размещения исходных файлов программы.

Получение пути запуска программы.

which kword - получение пути запуска программы.

Объединение команд: ;, |,  >,  >>,  < .

; - запись команд последовательно в строку чере точку с запятой с последующим последовательным выполнением:
sleep 3 ; import -frame wiпdоw.tif

&& - последовательное выполнение команд при условии успешного завершения предыдущих:
apt-get update && apt-get upgrade

|| - последовательное выполнение команд при условии, что предыдущая команда была выполнена с ошибкой:
ping -c 1 -w 15 -n 72.14.203.104 ||
{
    echo "Server down" | mail -s
       'Server down' admin@google.com
}

$() - включение результата выполнения одной команды внутрь другой команды:
mkdir $(date "+%Y-%m-%d")

| - передача данных в результате выполнения одной команды в другую команду по конвейеру:
ls -l | less

> - перенаправление выходных данных в результате выполнения команды в файл:
ls -lF Hank_Mobley/* > hank_mobley.txt

Установка запроса на разрешение перезаписи файла при выводе на него потока с данными:
set -o noclobber
ls -lF Hank_Mobley/* >| hank_mobley.txt

Сбросить noclobber:
set +o noclobber


>> - перенаправление выходных данных в результате выполнения команды и запись их в конец файла:
ls -lF Hank_Mobley/* >> hank_mobley.txt


< - использование содержимого файла в качестве входных данных для команды:
echo < hank_mobley.txt


echo "I can say" - вывод сообщение на экран.

cat shakespeat.txt - вывод содержимого файла на экран. 
cat файл1 файл2 - объединение содержимого двух файлов и вывод его на экран (cat - concatenate).
cat файл1 файл2 > файл3 - объединение содержимого двух файлов и запись содержимого в третий файл.
cat -n shakespeat.txt - вывод содержимого файла на экран с нумерацией строк.

less shakespeat.txt - постраничный вывод содержимого файла на экран.
less shakespeat.txt - постраничный вывод содержимого файла на экран с нумерацией строк.

Установка паузы перед выполнением команды.

sleep 3 - заснуть на 3 секунды.

Показать выполняющиеся в сисете процессы.

ps - показать выполняющиеся в сисете процессы (ps - process).

Поиск строк в файлах.

grep - поиск строк в файлах.

Управление правами доступа к файлам.

chgrp admins some_file.sh - изменение группы, к которой принадлежит управление данным файлом.

chgrp -R family - изменение группы для файлов во всей папке.

chown boris some_file.sh - изменение владельца файла.

chown boris:admins some_file.sh - изменение владельца и группы для файла.

chmod g+w libby.jpg - изменение прав доступа к файлам и папкам ( [ugo] [+-=] [rwx] , [0-7] [0-7] [0-7] ).

chmod 664 libby.jpg

chmod -R 660 family - изменение прав доступа всех файлов в папке.











В принципе для файла или папки может быть выполнена команда chmod 000. В этом случае единственным пользователем, имеющим право на выполнение каких-либо действий, в том числе на вызов команды chmod, остается пользователь root.

Архивирование и разархивация файлов.

zip grandpa.zip edgar_intl_shoe.tif edgar_baby.tif young_edgar_scott.tif - архивация файлов в архив grandpa.zip.

zip grandpa.zip edgar_scott  - архивация папки edgar_scott в архив grandpa.zip.

zip -0 moby.zip *.txt - архивация всех файлов в папке в формате txt в архив moby.zip со степенью сжатия 0. Степень сжатия может устанавливаться от 0 до 9, где 0 - самая маленькая степень сжатия, а 9 - самая большая. По умолчанию используется степень сжатия 6.

zip -e moby.zip *.txt  - архивация всех файлов в папке в формате txt в архив moby.zip с требование ввода пароля.


unzip grandpa.zip - разархивированние архива.

unzip -v moby.zip - разархивированние архива с указанием всех выполненных действий по порядку (v - verbose).


unzip -l moby.zip - вывод списка файлов внутри архива без разархивации (l - list).

unzip -t moby.zip  - проверка архива на ошибки и возможность разархивации без разархивации (t - test).



gzip paradise_lost.txt - архивация файла  в архив paradise_lost.txt.gz с удалением исходного файла paradise_lost.txt.

gzip -c paradise_lost.txt > paradise_lost.txt.gz - архивация файла в архив paradise_lost.txt.gz с сохранением исходного файла paradise_lost.txt.

gzip -r *  - архивация всех файлов в папке, но по отдельности друг от друга.

gzip -c -1 moby_dick.txt > moby_dick.txt.gz  -  архивация файла  в архив moby_dick.txt.gz с удалением исходного файла moby_dick.txt и степенью сжатия 1. Степень сжатия может устанавливаться от 0 до 9, где 0 - самая маленькая степень сжатия, а 9 - самая большая. По умолчанию используется степень сжатия 6.


gzip -d paradise_lost.txt.gz - разархивированние архива paradise_lost.txt.gz, с последующим удалением файла архива (d - decompress).

gunzip paradise_lost.txt.gz - разархивированние архива paradise_lost.txt.gz, с последующим удалением файла архива.

gunzip -c paradise_lost.txt.gz > paradise_lost.txt - разархивированние архива paradise_lost.txt.gz, с последующим сохранением файла архива.

gzip -t paradise_lost.txt.gz - проверка архива на ошибки и возможность разархивации без разархивации (t - test).



bzip2 moby_dick.txt - архивация файла  в архив moby_dick.txt.bz2 с удалением исходного файла paradise_lost.txt.

bzip2 -c moby_dick.txt > moby_dick.txt.bz2 - архивация файла в архив moby_dick.txt.bz2 с сохранением исходного файла moby_dick.txt.

bzip2 -c -1 moby_dick.txt > moby_dick.txt.gz  -  архивация файла  в архив moby_dick.txt.bz2 с удалением исходного файла moby_dick.txt и степенью сжатия 1. Степень сжатия может устанавливаться от 0 до 9, где 0 - самая маленькая степень сжатия, а 9 - самая большая. По умолчанию используется степень сжатия 6.



bzip2 -d paradise_lost.txt.bz2 - разархивированние архива paradise_lost.txt.bz2, с последующим удалением файла архива (d - decompress).

bunzip2 paradise_lost.txt.bz2 - разархивированние архива paradise_lost.txt.bz2, с последующим удалением файла архива.

bunzip2 -c paradise_lost.txt.bz2 > paradise_lost.txt - разархивированние архива paradise_lost.txt.bz2, с последующим сохранением файла архива.

bunzip2 -t paradise_lost.txt.bz2 - проверка архива на ошибки и возможность разархивации без разархивации (t - test).



tar -cf moby.tar *.txt - архивация всех файлов txt в папке, но без сжатия (cf - create file).

tar -cf moby.tar moby_dick/ | gzip -c > moby.tar.gz - создание архива файлов и его последующее сжатие.

tar -zcvf moby.tar.gz moby_dick/ - создание архива файлов и его последующее сжатие с указанием всех выполненных действий по порядку (z - gzip, c - create, f - file, v - verbose).

tar -jcvf moby.tar.bz2 moby_dick/ - - создание архива файлов и его последующее сжатие с указанием всех выполненных действий по порядку (j - bzip2, c - create, f - file, v - verbose).




tar -zvtf moby.tar.gz - проверка архива на ошибки и возможность разархивации без разархивации в формат gzip (t - test).

tar -jvtf moby.tar.bz2 - проверка архива на ошибки и возможность разархивации без разархивации в формат bzip2 (t - test).

tar -zxvf moby.tar.gz  - разархивированние архива в формате gzip (x - extract).

tar -jxvf moby.tar.bz2 - разархивированние архива в формате bzip2 (x - extract).

Поиск файлов.

locate haggard - найти на диске файл с именем, имеющим в своем составе haggard, с учетом регистра.

locate -i haggard - найти на диске файл с именем, имеющим в своем составе haggard, без учета регистра.

locate pdf | less - найти на диске файл с именем, имеющим в своем составе pdf, с учетом регистра и выводом найденных файлов постранично.

locate -n 3 pdf - найти на диске файл с именем, имеющим в своем составе pdf, с учетом регистра и выводом только 3-х первых найденных файлов.

updatedb - обновить базу данных быстрого поиска файлов для команды locate.

time updatedb - обновить базу данных быстрого поиска файлов для команды locate с указанием затраченного времени на обновление базы.

Поиск текста в составе файла.

grep pain three_no_more_forever.txt  - поиск текста pain в составе файла three_no_more_forever.txt.

grep pain * - поиск текста pain в составе всех файлов в папке.



grep 'hey you!' * - поиск текста, состоящего из нескольких слов, в составе всех файлов в папке.

grep -R hideous * | less - поиск текста по всем файлам с постраничным выводом результатов поиска.

grep -R hideous * > hideous_in_horror.txt - поиск текста по всем файлам с записью результатов поиска в файл hideous_in_horror.txt.

grep -i hideous h_p_lovecraft/* - поиск текста hideous по всем файлам в папке h_p_lovecraft без учета регистра.

grep -w раin * - поиск только конкретного слова по всем файлам в папке (w - word).

grep -n pain * -  поиск поиск текста по всем файлам  с указанием строк найденных результатов (n - number).

ls -1 | grep 1960  - поиск текста в выходных данных других команд.

ps -fu boris | grep firefox - поиск выполняющегося процесса программы Firefox.

ls -1 | grep -v Led_Zeppelin - поиск текста в котором нет слова Led_Zeppelin (v - invert).

grep -l hideous h_p_lovecraft/*  - поиск текста в папке с выводом только названий файлов, в которых был найден искомый текст.

ls -1 | grep 19б[б-7] | grep -v Live - поиск текста внутри результатов поиска при конвейерной обработке команд.

Поиск файлов в реальном времени.

find . -name ".shaggs." - поиск файла с именем shaggs во внутренней папке с относительным заданием пути.

find / -name ".shaggs." - поиск файла с именем shaggs во внутренней папке с абсолютным заданием пути.

find . -user boris - поиск файлов с владельцем boris во внутренней папке с относительным заданием пути.

find . ! -user boris - поиск файлов не принадлежащих владельцу boris во внутренней папке с относительным заданием пути.

find . ! -group music - поиск файлов не принадлежащих группе musix во внутренней папке с относительным заданием пути.

find . -size 10М - поиск файлов заданного размера во внутренней папке с относительным заданием пути.

 

find . -size +10М - поиск файлов заданного размера или выше во внутренней папке с относительным заданием пути.

find Steely_Dan/ -type d - поиск файлов по типу.



find Steely_Dan/ -type d | sort - поиск файлов по типу с последующей сортировкой.

find . -name "Rolling_Stones*" -a -type f  - поиск по нескольким условиям сразу (a - and).

find . -size +10М -о -size 10М - поиск по условию или (o - or).
find . \( -size +10м -o -size 10М \) ! -name "*25*"  - поиск по сложному условию или (o - or).

find . ! \( -nаmе "*mр*" -o -nаmе "*ogg" -o -nаmе "*flac" -o type d \) - поиск по условию не (! - not).


find . -nаme "*мР3" -exec rename 's/MP3/mp3/g' {} \; - выполнение действий над найденными файлами (exec - execute).

find . ! \( -name "*mp*" -о -name "*ogg" -o -name "*flac" -o -type d \) -fprint non_music_files.txt - вывод результатов поиска в файл.

Просмотр списка ранее введенных команд.

history - показать список ранее введенных команд.

history | less - показать список ранее введенных команд постранично.

!! - повторное выполнение последней введенной команды.

!452 - вывод предыдущей команды путем указания ее номера.

!cat - вызов предыдущей команды путем указания содержащихся в ней некоторых символов.

Посмотр списка прописанных в файле .bashrc команд синонимов.

alias - посмотр списка прописанных в файле .bashrc команд синонимов.

alias wgetpage - просмотр псевдонима конкретной команды.

alias ls d = 'ls d */' - создание временного псевдонима для команды.

Создание постоянного псевдонима для команды.

Добавьте строчку с псевдонимом для команды alias ls d = 'ls d */' в файл .bashrc.
Чтобы псевдоним вступил в действие неоюходимо завершить сеанс работы и снова войти или просто перезагрузить файл командой:
. .bashrc

Удаление временного псевдонима команды.

unalias lslist - удаление временного псевдонима команды lslist.

Удаление постоянного псевдонима команды.

Для удаления псевдонима команды просто закомментируйте символом # необходимую строчку в файле .bashrc или просто сотрите ее.

# alias ls d = 'ls d */' - удаление постоянного псевдонима команды.

Вывод информации о процессах, выполняемых в операционной системе.

ps aux - вывод информации о процессах, выполняемых в операционной системе (a - all users, u - user oriented, x - processes without controlling ttys).



Z - означает процесс зомби, который завис.

ps aux | grep [f]irefox - показать процесс запущенного браузера Firefox.


ps axjf - просмотр дерева процессов (j - job control, f - forest).



ps U boris - вызов всех процессов, запущенных пользователем boris.

Завершить процесс программы.

kill 27921 - завершить процесс программы, используя его pid номер (pid - process identificator).



Отображение динамически обновляемого списка выполняющихся процессов.

top - отображение динамически обновляемого списка выполняющихся процессов.

Показ списка открытых файлов.

lsof - показать список открытых файлов (lsof - list open files).

lsof | less - поэкранный просмотр списка открытых файлов.

lsof -u boris - показать список файлов, открытых пользователем boris.

lsof /usr/sbin/sshd - получение списка пользователей конкретного файла.

lsof -c sshd - отображение сведений о процессах, соответсвующих конкретной программе.

Отображение информации об оперативной памяти системы.

free - показать информацию об оперативной памяти (по умолчанию в килобайтах).

free -m - показать информацию об оперативной памяти в мегабайтах.

Отображение информации об использовании дискового пространства.

df - показать информацию об использовании дискового пространства (df - disk free).

df -h - показать информацию об использовании дискового пространства в формате удобном для чтения (h - human readable).

du - определить размер области, занятой содержимым данной папки (du - disk usage).

du -h - определить размер области, занятой содержимым данной папки в формате удобном для чтения (h - human readable).

du -s - показать общий объем пространства занятого данной папкой (s - size).

Установка программ.

rpm -ihv пmар 4.01-1.iЗ86.rрm - установить программу в формате rpm (i - install, h - h - human readable, v -verbose).

rpm -Uhv пmар 4.01-1.iЗ86.rрm - обновить программу в формате rpm (U - upgrade, h - h - human readable, v -verbose).

Удаление программ.

rpm -e nmap - удалить программу nmap.

Установка зависимостей.

yum install xmms - установка пакета с зависимостями.

Удаление зависимых программных пакетов.

yum remove xmms - удаление зависимостей.

Обновление программ.

yum update - обновить программы.

Показать пакеты, использующиеся программой.

yum list available | grep gimp - показать пакеты, использующиеся программиой gimp.

Исталяция программных пакетов Debian.

sudo dpkg -i skуре _1.2.0.18-1.i386.deb - установить Skype.

Удаление програмных пакетов Debian.

dpkg -r skype - удалить Skype.

Установка зависимых пакетов в системе Debian.

apt-get install sshfs - установка зависимых пакетов в системе Debian.

Обновление зависимых пакетов в системе Debian.

apt-get update - обновление зависимых пакетов в системе Debian.

Удаление зависимых пакетов в системе Debian.

apt-get remove sshfs - удалить пакет sshfs.

Удалить все элементы пакетов в системе Debian.

apt-get --purge remove sshfs - удалить все элементы, связанные с программой sshfs,  включая конфигурационные файлы.

Обновление системных пакетов в системе Debian.

apt-get upgrade - обновление всех системных пакетов в системе Debian.

apt-get update && apt-get upgrade - сокращенная команда обновления системыных пакетов (alias upgrade="apt-get update && apt-get upgrade').

Поиск пакетов, доступных для копирования в систему Debian. 

apt -cache search dvdcss - поиск пакетов, доступных для копирования в систему Debian.

Удаление ненужных инсталяционных пакетов из системы Debian.

apt-get clean - удалить ненужные инсталяционные пакеты из системы.

Определение состояния сетевых интерфейсов.

ifconfig - получить информацию о всех сетевых устройствах системы (ifconfig - interface configutration).

ifconfig -a - получить информацию о всех сетевых устройствах системы, даже неактивных (a - all).

Проверка способности компьютера принимать интернет-запросы.

ping www.google.com - проверить способность принимать интернет-запросы для сайта Google.

Выполнение команды ping не прекратится, пока вы не нажмете Ctrl + C.

ping -c 3 www.google.com - роверить способность принимать интернет-запросы для сайта Google, передав только 3 пакета.

Контроль прохождения пакета между узлами сети.

traceroute www.google.com - отобразить сведения о каждом шаге на пути пакета от моего компьютера к каждому узлу. По умолчанию число отображаемых переходов равно 30.

traceroute -m 40 www.google.com - увеличить число отоюражаемых переходов пакета до 40.

Определить IP-адрес соотвествующий доменному имени.

host www.google.com - определить ip-адрес сайта Google.

Определить доменное имя по IP-адресу.

host 65.214.39.152 - определить доменное имя по ip-адресу.

Изменить IP-aдpec Ethernet-карты.

ifconfig eth0 192.168.0.125 - изменить IP-aдpec Ethernet-карты, cooтветствующей интерфейсу eth0, на 192.168.0.125.

Получение информации о состоянии беспроводной связи.

iwconfig - получть информацию о состоянии беспроводной связи.

Подключение к удаленному компьютеру для управления им через Secure Shell.

ssh tom@192.168.0.25

Данные о ключе хранятся в файле ~/.ssh/known_hosts


Сформировать ключ для SSH.

ssh-keygen -t dsa

В результате будут сформированы:
~/.ssh/id_dsa - закрытый ключ.
~/.ssh/id_das.pub - открытый ключ.

Защищенная передача файлов по SFTP.

 sftp tom@192.168.0.25

Наиболее часто используемые команды SFTP.



Копирование файлов из интернета.

wget -r -l2 -np -w 5 -A.mp3 -R.html,.gif http://www.oldt;merad;oarch;ves.com/mp3/

Загррузка данных из интернета.

curl -o http://www.wbez.org/ta/[1-10].rm

понедельник, 14 января 2013 г.

Cron и Crontab

Cron - это программа, выполняющая задания по запуску программ по вашему расписанию. Cron позволяет выполнять неоднократный запуск заданий, то есть задание можно запустить в определенное время или через определенный промежуток времени.

При загрузке операционной системы, запускается демон cron, который проверяет очередь заданий at и заданий пользователей в файлах crontab. При запуске демон cron сначала проверяет каталог /var/spool/cron на наличие файлов crontab. Файлы crontab имеют имена пользователей соответствующие именам пользователей из /etc/passwd. Каждый пользователь может иметь только один файл crontab, записей в файле может быть несколько.

Другими словами, файлы crontab содержат инструкции для демона cron, который запустит задание(я) описанное в файле crontab. Все файлы crontab из каталога /var/spool/cron загружаются в память. Одновременно с ними загружаются файлы из /etc/cron.d. После этого демон cron загружает содержимое файла /etc/crontab

При стандартных настройках, содержимое /etc/crontab имеет следующий вид:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Информация в данном файле указывает, что:

- содержимое каталога /etc/cron.hourly будет запускаться каждый час на первой минуте часа.

- содержимое каталога /etc/cron.daily будет запускаться каждый день на второй минуте четвертого часа.

- содержимое каталога /etc/cron.weekly будет запускаться каждое воскресенье на 22-ой минуте 4'го часа.

- содержимое каталога /etc/cron.monthly будет запускаться каждый первый день месяца на 42-ой минуте 4-го часа.

SHELL=/bin/bash означает: использовать для запуска команд /bin/bash. Если переменная не указана, то значение будет взято из /etc/passwd для пользователя являющегося владельцем файла.

HOME=/ это корневой каталог для пользователя. Данный араметр не обязателен. При необходимости доступа к специальным свойствам интерпретатора значения переменных SHELL и HOME можно изменить независимо от того, что прописано в /etc/passwd.

MAILTO=root означает кому отсылать сообщение о результате работы команд.

Все содержимое из этих каталогов будет запускаться с правами доступа пользователя root и файлы должны иметь права доступа на "выполнение". Поэтому перед размещением файлов в одном из этих каталогов необходимо убедиться, что сценарии не насесут вред системе.

После того, как демон cron запущен и прочел содержимое всех файлов crontab, он бездействует, просыпаясь каждую минуту и проверяя не требуется ли запуск какой-либо команды или не появился ли новый файл crontab, который необходимо обработать. Демон cron определяет изменения по времени модификации файлов или каталогов, такое его свойство избавляет от необходимости перезапуска демона.

Как файлы для cron располагаются в директориях:

/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

доступных только пользователю root. Для использования файлов crontab другими пользователями, необходимо использовать команду crontab. Команда crontab служит для создания, изменения и добавления файла для демона cron.

Пример.

Рассмотрим пример создания файла crontab для пользователя user, домашняя директория которого /home/user.

Задача: запускать каждую минуту файл /home/user/mail, который будет отправлять почту.

#содержимое файла mail
#!/bin/bash
mess="test cron"
echo "$mess" |mutt -s "subj" -m application/octet-stream bob@server.ru

1.Создаем временный файл /home/user/test:

SHELL=/bin/bash
MAILTO=user
0-59 * * * * /home/user/mail

2. Запускаем в терминале команду crontab /home/user/test

После этого в каталоге /var/spool/cron будет создан файл "user" примерно с таким содержимым:

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/home/user/test installed on Mon Mar 29 02:31:34 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
SHELL=/bin/bash
MAILTO=user
0-59 * * * * /home/user/mail

Файл /home/user/mail будет запускаться демоном cron каждую минуту.

Доступ в каталог /var/spool/cron непривилегированному пользователю закрыт. Чтобы посмотреть пользователю "user" есть ли у него файл crontab, достаточно набрать команду crontab -l. Если файл существует, то будет показано его содержимое.

Для удаления файла используется команда crontab -r

Для редактирования файла crontab -e

Для управления файлами crontab пользователем "root" используется синтаксис:

-------------------------
crontab -u user_name file -создание файла crontab
-------------------------          из файла "file" для
                                        юзера "user_name"

-u означает чей crontab будет обработан. Если опция не задана, то будет обработан crontab того пользователя, который запустил команду crontab.

-------------------------
crontab -u user_name -l  -просмотр файла crontab
-------------------------         юзера "user_name"

-------------------------
crontab -u user_name -r -удаление файла crontab
-------------------------       юзера "user_name"

-------------------------
crontab -u user_name -e  -редактирование файла crontab
-------------------------         юзера "user_name" используя
                                       редактор, заданный переменной
                                       окружения VISUAL или EDITOR

Формат и значения полей.

Каждая команда в пользовательском файле crontab занимает одну строку и состоит из шести полей. Пользовательские файлы crontab находятся в каталоге /var/spool/cron.

Общий формат команды:

------------------------------------------------
минута час день_месяца месяц день_недели команда
------------------------------------------------

Допустимые значения:
минута - от 0 до 59
час - от 0 до 23
день_месяца - от 1 до 31
месяц  - от 1 до 12 (можно три буквы из названия месяца, регистр не имеет значения от jan до dec)
день_недели - от 0 до 6  (0 это воскресенье, можно писать от sun до sat)

Каждое из полей даты и времени может быть обозначено символом *, что будет соответствовать любому возможному значению. Для этих полей можно указывать диапазоны значений, разделенных дефисом, например:

* 5 4-10 0-3 * echo "HELLO" -печать HELLO в 5:00 на 4, 5, 6, 7, 8, 9, 10 день января, февраля, марта и апреля.

Пошаговая запись

* */2 * * sat echo "HELLO" -печать HELLO каждый четный час каждую субботу.

Равнозначная предыдущему примеру запись (списком)

* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo "HELLO"  -печать HELLO каждый четный час каждую субботу.

То же самое с указанием диапазона

* 0-23/2 * * sat echo "HELLO"  -печать HELLO каждый четный
                                час, каждую субботу

59 23 31 dec * echo "Happy new year" - поздравит с новым годом.

Для отладки задания cron можно перенаправить результат в файл.

Пример:

0-59 * * * * /home/user/mail 2>/tmp/tmp.cron

Если при запуске команды /home/user/mail возникнут ошибки, то они будут записаны в файл /tmp/tmp.cron и вы всегда сможете узнать причину. В случае перенаправленния вывода в файл письмо юзеру, указаному в переменной MAILTO, отправлено не будет.

Посмотреть информацию о всех командах, запускаемых демоном cron можно в каталоге /var/log (называются cron, cron1 и так далее).

В файле /var/log/cron записано время запуска всех заданий cron за предыдущий день:

Mar 29 04:03:00 rst CROND[4434]: (user) CMD (/home/user/mail)
Mar 29 04:03:59 rst CROND[4493]: (user) CMD (/home/user/mail)
Mar 29 04:05:00 rst CROND[4507]: (user) CMD (/home/user/mail)
Mar 29 04:06:00 rst CROND[4549]: (user) CMD (/home/user/mail)

В остальных файлах cron1, cron2 находится подобная информация, но более старая чем в cron.

Вот практически и все, что требуется знать для использования cron и crontab.

пятница, 11 января 2013 г.

Django на Nginx через FastCGI

Когда разрабатываешь сайт на Django, так легко просто открыть консоль и напечатать:

python manage.py runserver

С этой простой командой управления ваши медиа файлы админки сайта поддерживаются правильным образом, PYTHONPATH правильно настроен и включает корневую папку нашего проекта, а так же запущен автоматически перегружающийся веб-сервер на указанном нами порту (по умолчанию порт 8000). Так просто!

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

Однако иногда Apache - не идеальное решение. Может быть ваш VPS имеет только 256 МБ памяти, а может быть вы хотите избежать сложности настройки Apache при установке. Или может быть вам просто не нравиться Apache. По любой из этих причин мы можем обратить свое внимание на FastCGI.

Прежде всего


До того, как мы начнем наше развертывание, нам необходимо удостовериться, что основа нашей системы установлена. Во-первых, нам нужен сервер на котором мы развертываем наше приложение. Это может быть любой сервер и операционная система, но ради простоты мы предполагаем, что это Ubuntu Linux.

Давайте установим основу системы, включая некоторые компиляторы, заголовочные файлы для питона и setuptools

sudo apt-get install build-essential python-dev python-setuptools

Поставим так же Nginx в качестве нашего веб-сервера. Это можно сделать так:

sudo apt-get install nginx

Так же следует поставить daemontools – это коллекция инструментов для управления сервисами. Мы будем использовать их, чтобы быть уверенными, что наши сервисы будут оставаться запущенными (или по крайней мере будут возвращаться к жизни) даже в случае ошибки или перезапуска сервера. Чтобы поставить daemontools напечатайте:

sudo apt-get install daemontools

К сожалению, пакет daemontools требует нашей небольшой дополнительной работы, чтобы автоматически перезапускаться при перезагрузке. Сначала создайте файл /etc/event.d/svscanboot со следующим содержимым:

start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /usr/bin/svscanboot


Затем создайте папку /etc/service , выполнив следующую команду:

sudo mkdir /etc/service

В конце запустим daemontools, выполнив эту команду:

sudo initctl start svscanboot

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

adduser mysite

Если мы хотим использовать команду sudo с нашим пользователем, то нам так же нужно отредактировать /etc/sudoers. Найди в этом файле строку root ALL=(ALL) ALL и под ней добавь:

mysite ALL=(ALL) ALL

Сейчас мы можем переключиться на нашего пользователя:

su - mysite

Итак, основа нашей системы готова. Мы умышленно не рассказываем про базу данных, почтовые сервера, системы контроля версий, memcached и другие различные сервисы, потому что они могут сильно варьироваться в зависимости от персональных предпочтений.

Настройка нашей виртуальной среды для Python


Сейчас, когда основа нашей системы установлена, мы можем сфокусироваться на интересных вещах. Во-первых, мы собираемся поставить virtualenv – это инструмент для создания изолированной среды для Python. Мы будем использовать virtualenv для создания изолированной среды для нашего приложения.

sudo easy_install virtualenv

С нашей свежей копией virtualdev мы можем пойти дальше и настроить новую виртуальную среду:

mkdir ~/virtualenvs
virtualenv ~/virtualenvs/mysite


Мы создали директорию virtualenvs в нашей домашней папке и внутри нее мы создали виртуальную среду под названием mysite. Сейчас давайте начнем использовать ее и происталлируем pip, чтобы легко инсталлировать питоновские пакеты:

source ~/virtualenvs/mysite/bin/activate
easy_install pip


Сейчас нам необходимо убедиться, что у нас установлен пакет Flup. Это набор полезных инструментов для работы с WCGI приложениями, включая адаптер для превращения WSGI приложения в FastCGI (и SCGI, и AJP… но это за пределами данной статьи). Django требует, чтобы Flup был проинсталлирован до того, как вы сможете использовать команду управления runfcg. Используя pip мы можем легко проинсталлировать его:

pip install flup

Если мы хотим использовать адаптеры базы данных, графические библиотеки или xml парсеры, инсталлированные по системному пути Python, мы должны убедиться, что они доступны из нашей виртуальной среды. Для этого мы добавляем .pth файл в директорию виртуальной среды site-packages:

echo "/usr/lib/python2.6/dist-packages/" > ~/virtualenvs/mysite/lib/python2.6/site-packages/fix.pth

Следующий шаг – клонировать код Django на наш сервер (очевидно git может быть заменен на mercurial, svn или даже rsync):

git clone github.com/myusername/mysite.git

Если у вашего проекта есть pip requirements файл, сейчас вы можете его использовать:

pip install -U -r mysite/requirements.txt

Или, если у вас нет requirements file, вы можете проинсталлировать зависимости вручную. Например:

pip install -U Django simplejson python-memcached

Выбор опций для нашего FastCGI сервера


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

Первый выбор, который нужно сделать – какой метод распараллеливания мы хотим использовать:
  • threaded:
    Выполнение потокового сервера в одном процессе для всех HTTP запросов. Это сохраняет много памяти, но все потоки упираются в проблему одного Global Interpreter Lock (GIL). Это означает, что производительность может быть ограничена интенсивной процессорной загрузкой. Заметьте, что операции ввода-вывода происходят за пределами GIL, поэтому интенсивная загрузка операциями ввода-вывода не упирается в проблему GIL. Так же некоторые расширения питона не предполагались быть потоко-безопасными, что означает, что они не могут быть использованы с этим методом конкуренции.
  • prefork:
    Выполнение разветвляющего сервера порождающего пул процессов, каждый из которых со своей собственной копией джанги и питона загруженного в память. Это означает, что будет использоваться больше памяти, но нет вышеупомянутых проблем с GIL или потоко-безопасностью.

Давайте предположим, что нам интересен FastCGI, потому что у нас сервер с маленьким размером памяти. Так как разветвляющий (prefork) метод будет использовать больше памяти, поэтому мы выберем потоковый (threaded) метод.

Сейчас мы выберем несколько опций, которые говорят серверу, как ему действовать под нагрузкой:
  • minspare:
    Какое минимальное кол-во процессов/потоков сервер будет поддерживать готовыми и ожидающими будущих запросов?
  • maxspare:
    Какое максимальное кол-во процессов/потоков сервер будет поддерживать готовыми и ожидающими будущих запросов?
  • maxrequests (только для prefork метода):
    Как много запросов каждый процесс будет обслуживать до того, как он будет убит и запущен заново. Чтобы предотвратить утечки памяти, до того момента как это станет проблемой. Это хорошая идея установить эту опцию.
  • maxchildren (только для prefork метода):
    Как много дочерних процессов могут поддерживать запросы в любое заданное время?

Наш сервер работает на небольшом VPS с 265 МБ памяти, поэтому мы выберем очень скромные настройки: 2 для
minspare, 4 для maxspare, 6 для maxchildren и 500 для maxrequests.

В конце мы выбираем наши последние несколько настроек:
  • host
    Имя хоста (hostname), который будет слушать входящие соединения?
  • port
    На каком порту слушать входящие соединения?
  • pidfile
    Когда FastCGI сервер стартует, он создает файл со своим идентификатором процесса (process ID). Этот process ID – pid главного потока/процесса. Это процесс который будет поддерживать сигналы OS, например SIGHUP. Эта опция определяет расположение этого файла.

После того, как мы сделали наши выборы, мы можем запустить сервер выполнив runfcgi команду:

python manage.py runfcgi method=threaded host=127.0.0.1 port=8080 pidfile=mysite.pid minspare=4 maxspare=30 daemonize=false

Заметьте, что мы добавили флаг daemonize=false. Он всегда должен быть установлен (по мнению автора пропуск этой опции является просчетом в команде runfcgi). Так же заметьте, что результатом выполнения этой команды будет создан mysite.pid файл в нашей директории проекта, так что это хорошая идея удостовериться, что ваша система контроля версий игнорирует этот файл.

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

Daemontools выполняет наш FastCGI сервер


Daemontools будет смотреть во все поддиректории в /etc/service директории и в каждой из них он ищет исполняемый файл, называемый run. Если он находит такой файл, то он запускает его и перезапускает его, если он умирает. Итак, давайте создадим mysite директорию:

sudo mkdir /etc/service/mysite

Сейчас, давайте сделаем небольшой скрипт, который запускает наш fastcgi сервер. Используйте ваш любимый текстовый редактор, чтобы записать этот текст в /etc/service/mysite/run:

#!/usr/bin/env bash

source /home/mysite/virtualenvs/mysite/bin/activate
cd /home/mysite/mysite
exec envuidgid mysite python manage.py runfcgi method=threaded host=127.0.0.1 port=8080 pidfile=mysite.pid minspare=4 maxspare=30 daemonize=false


Тут нет ничего хитрого. Сначала мы проверяем, что мы в правильной виртуальной среде (virtualenv), затем мы изменяем текущую директорию на mysite и затем выполняем runfcgi команду, которую мы обсуждали раньше. envuidgid mysite просто убеждается, что следующая команда выполняется под пользователем mysite, вместо root.

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

sudo chmod +x /etc/service/mysite/run

Сейчас мы можем проверить, что он выполняется, используя команду svstat:

sudo svstat /etc/service/mysite/

Результат должен выглядеть примерно так:

/etc/service/mysite/: up (pid 3610) 33 seconds

Это означает, что процесс поднят, ему присвоен process id = 3610 и он проработал 33 секунды. Вы можете использовать команду svc, чтобы остановить процесс:

sudo svc -d /etc/service/mysite/

Затем, если вы выполните снова svstat, то получите примерно такой вывод:

/etc/service/mysite/: down 4 seconds, normally up

Чтобы вернуть процесс обратно, просто выполните:

sudo svc -u /etc/service/mysite/

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

Конфигурируем Nginx для работы с нашим сервером


Мы уже близко к финишной черте. Все что нам осталось сделать – сконфигурировать nginx для беседы с нашим FastCGI сервером, получения от него ответов и передачи их пользователю.

Ubuntu поставляется с полезным /etc/nginx/fastcgi_params файлом. К сожалению, он не совсем правильный. Он кодирует (encode) SCRIPT_NAME параметр, но то, что наш сервер реально хочет – PATH_INFO. Вы можете выполнить поиск и замену или скопировать содержимое ниже в /etc/nginx/fastcgi_params файл:

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;


Сейчас мы создадим определение для нашего сайта. Используя текстовый редактор, давайте создадим файл /etc/nginx/sites-available/mysite со следующим содержанием:

server {
listen 80;
server_name mysite.com www.mysite.com;
access_log /var/log/nginx/mysite.access.log;

location /media {
autoindex on;
index index.html;
root /home/mysite/mysite;
break;
}
location / {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8080;
break;
}
}


Он говорит: слушать порт 80 (стандарт для HTTP) для mysite.com/ и http://www.mysite.com/. Запросы для /media следует обрабатывать сразу с диска из /home/mysite/mysite/media директории. И самое важное: все остальные запросы будут передаваться через FastCGI нашему серверу.

Сейчас давайте подключим его через symlink:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite

Наконец перезапускаем nginx, чтобы новые настройки вступили в силу:

sudo /etc/init.d/nginx restart

Заключение


Мы настроили минимальный сервер, используя nginx, чтобы обслуживать media файлы на умопомрачительной скорости и чистый питоновский FastCGI сервер, чтобы обслуживать динамические запросы без каких-либо промежуточных слоев между ними. Используя daemontools мы имеем полный контроль над FastCGI процессом и можем останавливать его, перезапускать или изменять его настройки в любой момент.

По настоящему интересная вещь – достаточно только нескольких маленьких подстроек и этот же самый стэк мог бы использоваться для решений на базе gunicorn, spawning, или paste. Вместо использования fastcgi_pass мы могли бы использовать proxy_pass. Мы могли бы по прежнему использовать daemontools, чтобы поддерживать наш процесс в рабочем состоянии и контролировать его. Почти каждый шаг этой статьи останется тот же самый.
Это очень жизнеспособная альтернатива часто навязываемому стэку из Apache/mod_wsgi и надеюсь после прочтения этой статьи больше людей будут рассматривать его, как метод развертывания своего сайта на Django.

четверг, 10 января 2013 г.

Запуск Django из Apache

Создайте новый проект Django:

django-admin.py startproject testserver

В папку проекта testserver добавьте файл django.wsgi, имеющий следующий код:


import os, sys

sys.path.append('C:/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'testserver.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


Перейдите в папку сервера Apache, расположенную по адресу
C:\Program Files\Apache Software Foundation\Apache2.2\conf

Откройте файл httpd.conf и добавьте в него следующий код:


WSGIScriptAlias / "C:/django/testserver/django.wsgi"

<Directory "C:/django/testserver/">
    Options +Indexes FollowSymLinks +ExecCGI
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all
</Directory>


Запустите сервер Apache.

Перейдите в браузере по адресу http://localhost/

В результате вы увидите стартовую страницу Django.