SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
Использование
linux

Дмитрий Смаль
Вам понадобится Ubuntu

2
Установка Ubuntu
1. Создать загрузочную флешку (Unetbootin)
http://unetbootin.sourceforge.net/
2. Установить VirtualBox (диск не менее 20Gb)
3. Установить Ubuntu (12.04 LTS)
http://pingvinus.ru/note/ubuntu-install

4. Желательно установить VirtualBox extension pack
5. Вместо VirtualBox, можно ставить сразу на диск

3
Терминал / консоль
 Запуск консоли – Ctrl + Alt + t
 Для выхода из консоли можно
 Закрыть оболочку командой exit
 Прервать поток ввода Ctrl + D

 Запуск терминала (текстового) – Ctrl + Alt + F1 .. F3
 Обратно в графический интерфейс – Alt + F7

4
Навигация в консоли
 Alt + b / Alt + f – перейти на слово назад / вперед
 Ctrl + w / Alt + d – удалить слово назад / вперед

 Ctrl + u / Ctrl + k – удалить строку назад / вперед
 Ctrl + p / Ctrl + n – предыдущая / следующая команда
 Ctrl + r blabla – поиск по истории команд (!!!)

5
Копирование / вставка
 Через буфер X-windows
 src: Просто выделяем текст
 dst: Наводим курсор, нажимаем среднюю кнопку

 Через буфер оконной системы
 src: Выделяем текст и Ctrl + Ins

 dst: Наводим курсор и Shft + Ins
 Ctrl + c / Ctrl + v могут не работать в консоли

6
Процессы в Linux

7
Процесс
Процесс – экземпляр программы, запущенной в данный
момент на компьютере.
Свойства процесса:
 Образ (программа), есть не у всех процессов.
 Аргументы командной строки
 Переменные окружения
 Стандартные потоки ввода/вывода: stdin, stdout, stderr (файлы)
 Идентификатор pid – число
 Родительский процесс, идентификатор ppid
 Код возврата
8
Программа на Python
import sys
import os
print "argv: " + " ".join(sys.argv)
print "env: " + " ".join(os.environ.keys())
word = sys.stdin.read(3)
sys.stdout.write(word + "n")
sys.stderr.write("bug!n")

print "pid: " + str(os.getpid())
print "ppid: " + str(os.getppid())
exit(1)
9
Запускаем

10
Аргументы командной строки

Зачем нужны ?
– задают опции выполнения программы

Как передаются ?
– при запуске программы в виде массива
Как видны внутри программы ?
– массив argv: os.argv, @ARG, char* argv[] и т.д.
Примеры:

–h (помощь) –f (принудительно) –v (больше вывода)
11
Переменные окружения

Зачем нужны ?
– задают опции выполнения программы
Как передаются ?
– при запуске программы в виде словаря / списка
Как видны внутри программы ?
– словарь env: os.environ, %ENV, char** environ и т.д.
В чем отличие от аргументов ?
– редко меняются, т.е. долгосрочные опции.
12
Примеры переменных
 PATH – директории на диске, в которых будут
искаться запускаемые программы
 USER – имя текущего пользователя
 HOME – домашняя директория текущего пользователя
 TERM – тип текущего терминала (что бы программа
знала, как форматировать свой вывод)

 PYTHON_PATH – специфично для python – список
директорий, в которых python будет искать модули

13
Список процессов

14
Как происходит запуск процесса ?
Процесс запускается 2 шага – fork() и exec()
При fork() – создается полная копия процесса
При exec() – текущий процесс замещается другим
При этом:
 Нужно указать новый образ – программу
 Нужно указать аргументы командной строки

 Можно указать новые переменные окружения

15
Как происходит запуск процесса ?

16
Состояния процесса в unix

17
Дерево процессов

18
Сигналы
Сигнал – «сообщение» отправляемое процессом
или операционной системой другому процессу.

Что может сделать процесс ?
 Поставить функцию – обработчик
 Игнорировать сигнал
 Оставить обработчик по-умолчанию
Некоторые сигналы нельзя игнорировать и
обрабатывать (SIGKILL)
19
Отправка сигналов
«Плохая программка»

import time
while True:
print "Zzz-zzz-zzz..."
time.sleep(1)

Что делать ?
 В той же консоли Ctrl + c – отправит сигнал INT
 Закрыть консоль – процесс получит сигнал HUP
 В другой консоли: kill –INT 12345 , где 12345 – pid
плохой программы
 Если дела совсем плохи kill –KILL 12345
20
Примеры сигналов
 SIGALRM – «будильник»
 SIGHUP – закрытие терминала

 SIGTERM – «корректная» остановка процесса
 SIGSEGV – ошибка работы с памятью
 SIGKILL – безусловное завершение процесс
 SIGPIPE – запись в закрытый канал / сокет
 SIGCHILD – завершение дочернего процесса

 SIGUSR1, SIGUSR2 – на ваше усмотрение

21
22
SHELL (bash)
SHELL – командная оболочка, по сути язык
программирования, ориентированный на запуск других
программ.

bash просто читает программу из stdin и выполняет ее.
Обычно stdin связан с клавиатурой, в stdout/stderr – с
экраном.
23
SHELL (через telnet или ssh)

Но так же можно передавать данные stdin/stdout/stderr
через сеть, для bash ничего не изменится.
24
Примеры команд

25
Переменные
Установка и получение

Экспорт в переменные окружения

26
Запуск программ
Программы будут искаться в путях указанных в $PATH.
Переменные окружения – текущее окружение + export
Аргументы командной строки передаются после
команды, разделены пробелами.
Код возврата программы – в переменной $?

27
Джентельменский набор
exit – выход из оболочки
man program – получение справки по программе
ls – просмотр содержимого директории

cd – переход в директорию
pwd – где я нахожусь ?
cat filename – вывод файла в stdout
rm – удаление файла или директории
cp – копирование …
mv – перемещение …
28
Джентельменский набор
find – гибкий поиск файлов и директорий
locate / updatedb – быстрый и простой поиск файла
grep – фильтрация stdin и файлов, поиск содержимого
sort – сортировка stdin или файлов

wc – подсчет строк, слов, символов
xargs – запуск команды для каждой строки stdin

29
Перенаправление ввода/вывода
По умолчанию при запуске процесса файловые
дескрипторы stdin / stdout / stderr наследуются.

Перенаправление stdout в файл
Перенаправления stdin из файла
Перенаправление stderr в никуда.

Вывод stdout будет дописан в results.txt, stderr - тоже
30
PIPE: конвейеры программ
PIPE – односторонний канал передачи данных
В bash позволяет связать stdout одной программы c
stdin другой, образую «конвеер» обработки данных

31
PIPE: примеры
Найти все файлы содержащие add_product, затем
отобрать c расширением .py
Следить за логом ошибок, фильтровать строки
содержащие /admin/
Вывести список уникальных ip адресов, с которых
обращались к нашему web серверу

32
Условия

IF проверяет код возврата программы, 0 – считается
истинной ( в отличие от С ), [ - просто другое имя для
программы test
33
Циклы

seq – печатает последовательность чисел 1 – 10

34
Пользователи и файлы в
Linux

35
Файловая система
# очень выборочно 
# системные программы

# настройки программ
# скрипты запуска демонов
# «хомяк»
# подключаемые библиотеки

# «хомяк» суперюзера
# временные файлы
# пользовательские программы

# логи, pid-файлы и т.п.
36
А что у нас в одной директории?

Права
доступа

Владелец

Группа

Размер

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

типичная программа
Права для остальных
Права для группы
Права для владельца
Тип файла

38
Спасибо за внимание
Дмитрий Смаль,
smal@corp.mail.ru

Más contenido relacionado

La actualidad más candente

PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
BlackFan
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
Krivoy Rog IT Community
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
Zestranec
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
Andrew Mayorov
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
phpdevby
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
Positive Hack Days
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Badoo Development
 

La actualidad más candente (20)

php frameworks
php frameworksphp frameworks
php frameworks
 
бегун
бегунбегун
бегун
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
бегун
бегунбегун
бегун
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Отладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbgОтладка в Erlang, trace/dbg
Отладка в Erlang, trace/dbg
 
Javascript
JavascriptJavascript
Javascript
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 

Similar a Web осень 2013 лекция 2

Операционные системы
Операционные системыОперационные системы
Операционные системы
yaevents
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
Elena Kotina
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
Technopark
 
Владимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОСВладимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОС
Yandex
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Mikhail Kurnosov
 

Similar a Web осень 2013 лекция 2 (20)

Операционные системы
Операционные системыОперационные системы
Операционные системы
 
Кратко о Linux
Кратко о LinuxКратко о Linux
Кратко о Linux
 
file handling in c
file handling in cfile handling in c
file handling in c
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
Контроль качества и сопровождение программ в реальном времени
Контроль качества и сопровождение программ в реальном времениКонтроль качества и сопровождение программ в реальном времени
Контроль качества и сопровождение программ в реальном времени
 
About Python
About PythonAbout Python
About Python
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениАнтон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времени
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
 
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep «Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
«Отладка приложений с помощью dtrace» — Станислав Краснояров, Redsteep
 
Владимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОСВладимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОС
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 

Más de Technopark

СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 

Más de Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Web осень 2013 лекция 2

  • 3. Установка Ubuntu 1. Создать загрузочную флешку (Unetbootin) http://unetbootin.sourceforge.net/ 2. Установить VirtualBox (диск не менее 20Gb) 3. Установить Ubuntu (12.04 LTS) http://pingvinus.ru/note/ubuntu-install 4. Желательно установить VirtualBox extension pack 5. Вместо VirtualBox, можно ставить сразу на диск 3
  • 4. Терминал / консоль  Запуск консоли – Ctrl + Alt + t  Для выхода из консоли можно  Закрыть оболочку командой exit  Прервать поток ввода Ctrl + D  Запуск терминала (текстового) – Ctrl + Alt + F1 .. F3  Обратно в графический интерфейс – Alt + F7 4
  • 5. Навигация в консоли  Alt + b / Alt + f – перейти на слово назад / вперед  Ctrl + w / Alt + d – удалить слово назад / вперед  Ctrl + u / Ctrl + k – удалить строку назад / вперед  Ctrl + p / Ctrl + n – предыдущая / следующая команда  Ctrl + r blabla – поиск по истории команд (!!!) 5
  • 6. Копирование / вставка  Через буфер X-windows  src: Просто выделяем текст  dst: Наводим курсор, нажимаем среднюю кнопку  Через буфер оконной системы  src: Выделяем текст и Ctrl + Ins  dst: Наводим курсор и Shft + Ins  Ctrl + c / Ctrl + v могут не работать в консоли 6
  • 8. Процесс Процесс – экземпляр программы, запущенной в данный момент на компьютере. Свойства процесса:  Образ (программа), есть не у всех процессов.  Аргументы командной строки  Переменные окружения  Стандартные потоки ввода/вывода: stdin, stdout, stderr (файлы)  Идентификатор pid – число  Родительский процесс, идентификатор ppid  Код возврата 8
  • 9. Программа на Python import sys import os print "argv: " + " ".join(sys.argv) print "env: " + " ".join(os.environ.keys()) word = sys.stdin.read(3) sys.stdout.write(word + "n") sys.stderr.write("bug!n") print "pid: " + str(os.getpid()) print "ppid: " + str(os.getppid()) exit(1) 9
  • 11. Аргументы командной строки Зачем нужны ? – задают опции выполнения программы Как передаются ? – при запуске программы в виде массива Как видны внутри программы ? – массив argv: os.argv, @ARG, char* argv[] и т.д. Примеры: –h (помощь) –f (принудительно) –v (больше вывода) 11
  • 12. Переменные окружения Зачем нужны ? – задают опции выполнения программы Как передаются ? – при запуске программы в виде словаря / списка Как видны внутри программы ? – словарь env: os.environ, %ENV, char** environ и т.д. В чем отличие от аргументов ? – редко меняются, т.е. долгосрочные опции. 12
  • 13. Примеры переменных  PATH – директории на диске, в которых будут искаться запускаемые программы  USER – имя текущего пользователя  HOME – домашняя директория текущего пользователя  TERM – тип текущего терминала (что бы программа знала, как форматировать свой вывод)  PYTHON_PATH – специфично для python – список директорий, в которых python будет искать модули 13
  • 15. Как происходит запуск процесса ? Процесс запускается 2 шага – fork() и exec() При fork() – создается полная копия процесса При exec() – текущий процесс замещается другим При этом:  Нужно указать новый образ – программу  Нужно указать аргументы командной строки  Можно указать новые переменные окружения 15
  • 19. Сигналы Сигнал – «сообщение» отправляемое процессом или операционной системой другому процессу. Что может сделать процесс ?  Поставить функцию – обработчик  Игнорировать сигнал  Оставить обработчик по-умолчанию Некоторые сигналы нельзя игнорировать и обрабатывать (SIGKILL) 19
  • 20. Отправка сигналов «Плохая программка» import time while True: print "Zzz-zzz-zzz..." time.sleep(1) Что делать ?  В той же консоли Ctrl + c – отправит сигнал INT  Закрыть консоль – процесс получит сигнал HUP  В другой консоли: kill –INT 12345 , где 12345 – pid плохой программы  Если дела совсем плохи kill –KILL 12345 20
  • 21. Примеры сигналов  SIGALRM – «будильник»  SIGHUP – закрытие терминала  SIGTERM – «корректная» остановка процесса  SIGSEGV – ошибка работы с памятью  SIGKILL – безусловное завершение процесс  SIGPIPE – запись в закрытый канал / сокет  SIGCHILD – завершение дочернего процесса  SIGUSR1, SIGUSR2 – на ваше усмотрение 21
  • 22. 22
  • 23. SHELL (bash) SHELL – командная оболочка, по сути язык программирования, ориентированный на запуск других программ. bash просто читает программу из stdin и выполняет ее. Обычно stdin связан с клавиатурой, в stdout/stderr – с экраном. 23
  • 24. SHELL (через telnet или ssh) Но так же можно передавать данные stdin/stdout/stderr через сеть, для bash ничего не изменится. 24
  • 27. Запуск программ Программы будут искаться в путях указанных в $PATH. Переменные окружения – текущее окружение + export Аргументы командной строки передаются после команды, разделены пробелами. Код возврата программы – в переменной $? 27
  • 28. Джентельменский набор exit – выход из оболочки man program – получение справки по программе ls – просмотр содержимого директории cd – переход в директорию pwd – где я нахожусь ? cat filename – вывод файла в stdout rm – удаление файла или директории cp – копирование … mv – перемещение … 28
  • 29. Джентельменский набор find – гибкий поиск файлов и директорий locate / updatedb – быстрый и простой поиск файла grep – фильтрация stdin и файлов, поиск содержимого sort – сортировка stdin или файлов wc – подсчет строк, слов, символов xargs – запуск команды для каждой строки stdin 29
  • 30. Перенаправление ввода/вывода По умолчанию при запуске процесса файловые дескрипторы stdin / stdout / stderr наследуются. Перенаправление stdout в файл Перенаправления stdin из файла Перенаправление stderr в никуда. Вывод stdout будет дописан в results.txt, stderr - тоже 30
  • 31. PIPE: конвейеры программ PIPE – односторонний канал передачи данных В bash позволяет связать stdout одной программы c stdin другой, образую «конвеер» обработки данных 31
  • 32. PIPE: примеры Найти все файлы содержащие add_product, затем отобрать c расширением .py Следить за логом ошибок, фильтровать строки содержащие /admin/ Вывести список уникальных ip адресов, с которых обращались к нашему web серверу 32
  • 33. Условия IF проверяет код возврата программы, 0 – считается истинной ( в отличие от С ), [ - просто другое имя для программы test 33
  • 34. Циклы seq – печатает последовательность чисел 1 – 10 34
  • 36. Файловая система # очень выборочно  # системные программы # настройки программ # скрипты запуска демонов # «хомяк» # подключаемые библиотеки # «хомяк» суперюзера # временные файлы # пользовательские программы # логи, pid-файлы и т.п. 36
  • 37. А что у нас в одной директории? Права доступа Владелец Группа Размер Название 37
  • 38. Права доступа типичная директория типичный файл с данными типичная программа Права для остальных Права для группы Права для владельца Тип файла 38