Кратко о Linux

1,102 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,102
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Кратко о Linux

  1. 1. Программирование Linux
  2. 2. План <ul><li>OpenSource идеология </li></ul><ul><li>История </li></ul><ul><li>Архитектура </li></ul><ul><li>Средства разработки </li></ul><ul><li>Библиотеки </li></ul>
  3. 3. Open Source <ul><li>Методология разработки: доступность кода, а не отсутствие цены </li></ul><ul><li>Код распространяется вместе с программой бесплатно </li></ul><ul><li>Лицензии GPL, LGPL, AGPL, ISC, MIT </li></ul><ul><li>Каждая лицензия контролирует использование кода </li></ul><ul><li>Linux использует GPL </li></ul>
  4. 4. GPL <ul><li>Право по желанию бесплатно получить полный исходный код купленного ПО </li></ul><ul><li>Право изменять этот код и создавать на его основе ПО, также обязательно GPL со ссылкой на оригинал и указанием внесенных изменений </li></ul>
  5. 5. LGPL <ul><li>Право по желанию бесплатно получить полный исходный код купленного ПО </li></ul><ul><li>Право изменять этот код и использовать в своем ПО, возможно не LGPL </li></ul>
  6. 6. Open Source <ul><li>Можно: </li></ul><ul><li>- использовать </li></ul><ul><li>- исследовать </li></ul><ul><li>- менять </li></ul><ul><li>- распространять </li></ul><ul><li>Нельзя: </li></ul><ul><li>- запрещать кому-либо все вышеперечисленное </li></ul>
  7. 7. Причины возникновения <ul><li>Unix использовался в большинстве ВУЗов </li></ul><ul><li>Unix стал требовать деньги за пользование и разработку </li></ul><ul><li>Tanenbaum создал Minix для учебных целей, которую использовал Torvalds </li></ul><ul><li>Linus начал разработку Linux </li></ul><ul><li>Stallman запустил проект GNU и FSF </li></ul>
  8. 8. Что есть Unix? <ul><li>Ядро ОС , изначально созданное в 1969 Kenneth Thompson и Dennis Ritchie </li></ul>
  9. 9. Что есть Unix? <ul><li>40 лет развития </li></ul><ul><li>Существует очень много клонов Unix: BSD, System V, Solaris, HP-UX, AIX, Linux … </li></ul><ul><li>Первая в мире коммерческая ОС </li></ul><ul><li>Относительно легко портируема </li></ul><ul><li>Почти весь Internet построен на Unix , 80% серверов работают под Linux </li></ul>
  10. 10. Что есть Unix? <ul><li>Очень мощный CLI – Command Line Interface </li></ul><ul><li>Иерархическая файловая система </li></ul><ul><li>Многопользовательская система </li></ul><ul><li>Многопроцессная система </li></ul>
  11. 11. Что есть Linux? <ul><li>Ядро ОС с открытым кодом, созданное студентом для замены Unix </li></ul><ul><li>Linux – это ядро, GNU – набор утилит </li></ul><ul><li>Разрабатывается с 1991 по сей день </li></ul><ul><li>Выбор №1 промышленности и компьютерных фанов </li></ul><ul><li>Поддерживает огромное количество платформ: i386, x8664, PPC, Amiga, SPARC, ARM, супер-компьютеры </li></ul>
  12. 12. Что есть POSIX? <ul><li>Portable Operating System Interface for Unix </li></ul><ul><li>Набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой </li></ul><ul><li>Основные вызовы: </li></ul><ul><li>int open(const char *pathname, int flags, mode_t mode); </li></ul><ul><li>int close(int descriptor); </li></ul><ul><li>ssize_t write(int descriptor, void *buffer, size_t length); </li></ul><ul><li>ssize_t read(int descriptor, void *buffer, size_t length); </li></ul><ul><li>int fork(); </li></ul><ul><li>int exec * (const char *path, … ); </li></ul>
  13. 13. Пример fork <ul><ul><li>if (!fork()) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><li>printf(&quot;I'm the child!n&quot;); </li></ul><ul><li>exit(0); </li></ul><ul><li>} </li></ul><ul><li>else </li></ul><ul><li>{ </li></ul><ul><li>printf(&quot;I'm the parent!n&quot;); </li></ul><ul><li>wait(0); </li></ul><ul><li>} </li></ul>
  14. 14. Richard Stallman & Linus Torvalds
  15. 15. История <ul><li>1971 Richard Stallman начал работать в лаборатории искусственного интеллекта MIT и вошел в хакерское сообщество </li></ul><ul><li>В те времена все программисты бесплатно делились своим кодом друг с другом </li></ul>
  16. 16. История <ul><li>1980 массово начало появляться портируемое ПО </li></ul><ul><li>Разработчики стали закрывать код как интеллектуальную собственность </li></ul>
  17. 17. История <ul><li>1985 Stallman основывает Free Software Foundation и начинает GNU </li></ul><ul><li>GNU – G NU is N ot U nix – ОС с открытым кодом, совместимая с Unix на уровне программ </li></ul><ul><li>Stallman начинает разработку утилит для будущей системы </li></ul>
  18. 18. История <ul><li>1985 Andy Tanenbaum пишет Unix- подобную ОС Minix для i386 в целях обучения студентов </li></ul><ul><li>1989 Stallman издает GNU GPL – General Public License или copyleft </li></ul><ul><li>Практически все утилиты написаны, не хватает… ядра </li></ul>
  19. 19. История <ul><li>1990 Linus Torvalds активно пользуется и изучает Minix, хочет ее усовершенствовать </li></ul><ul><li>Tanenbaum запрещает это делать </li></ul><ul><li>1991 Torvalds начинает писать свою ОС под GPL, называет ее Linux </li></ul>
  20. 20. Tux
  21. 21. Distributives <ul><li>Linux is OpenSource , поэтому каждый может создавать свою версию </li></ul><ul><li>Дистрибутив = ядро + набор программ + инсталлятор </li></ul><ul><li>Большинство дистрибутивов основаны на Debian или RadHat </li></ul>
  22. 22. Distributives
  23. 23. Статистика
  24. 24. Архитектура
  25. 25. Shell <ul><li>Используется как CLI </li></ul><ul><li>Из GUI доступна посредством эмуляторов терминала </li></ul><ul><li>Самая популярная bash </li></ul><ul><li>Очень богатый интерпретатор </li></ul>
  26. 26. Shell <ul><li>Некоторые команды: </li></ul><ul><li>touch file – создать файл </li></ul><ul><li>cp file1 file2 - скопировать файл </li></ul><ul><li>rm file - удалить файл </li></ul><ul><li>mv file1 file2 – переместитьпереименовать </li></ul><ul><li>cd directory – изменить текущий каталог </li></ul><ul><li>less file – просмотреть файл </li></ul><ul><li>man command – справка о команде </li></ul><ul><li>find file – найти файл </li></ul>
  27. 27. Shell <ul><li>Некоторые команды: </li></ul><ul><li>ls – содержимое каталога </li></ul><ul><li>ps – информация о процессах </li></ul><ul><li>kill <pid> - послать процессу сигнал </li></ul><ul><li>sudo command – выполнить команду как root </li></ul><ul><li>chmod file – изменить права доступа </li></ul><ul><li>./file – запустить файл </li></ul><ul><li>ifconfig – справка о настройках сети </li></ul><ul><li>reboot – перезагрузка </li></ul>
  28. 28. GUI <ul><li>X- сервер – отдельное приложение </li></ul><ul><li>Графические программы – клиенты </li></ul><ul><li>X- сервер сообщает программе о необходимости прорисовки, клавиатурном вводе, позиции и кликах указателя </li></ul><ul><li>Программы сообщают серверу как их прорисовывать </li></ul><ul><li>Программируется Xlib, Xt, Motif, GTK+, Qt </li></ul>
  29. 29. Window manager <ul><li>Особый клиент X -сервера для управления окнами </li></ul><ul><li>Добавляет окнам декорации и кнопки управления, обрабатывает переключение между окнами и изменение размера </li></ul><ul><li>Linux поддерживает множество WM: KDE, Gnome, Xfce, fluxbox, twm… </li></ul>
  30. 30. Window manager <ul><li>Статистика использования WM </li></ul>
  31. 31. Файловая система <ul><li>EXT2, EXT3, EXT4 и swap ( для подкачки ) </li></ul><ul><li>Монтирует FAT, NTFS, HFS, ReiserFS, XFS … </li></ul><ul><li>Основные каталоги: </li></ul><ul><li>/bin – системные утилиты </li></ul><ul><li>/boot – файлы для загрузки системы </li></ul><ul><li>/etc – файлы конфигурации </li></ul><ul><li>/home – каталоги пользователей </li></ul><ul><li>/lib – системные и пользовательские библиотеки </li></ul><ul><li>/media – монтируемые разделы </li></ul><ul><li>/usr – пользовательские программы и библиотеки </li></ul>
  32. 32. Виртуальная файловая система <ul><li>Позволяет взаимодействовать с ядром через интерфейс файловой системы </li></ul><ul><li>Основные каталоги: </li></ul><ul><li>/dev – файлы устройства для взаимодействия с драйверами </li></ul><ul><li>/proc – состояние ядра ( процессы ) </li></ul><ul><li>/sys – состояние ядра ( устройства ) </li></ul>
  33. 33. Права доступа <ul><li>Право на чтение </li></ul><ul><li>Право на запись </li></ul><ul><li>Право на выполнение </li></ul><ul><li>Идентификатор пользователя </li></ul><ul><li>Идентификатор группы </li></ul><ul><li>9 бит для описателя доступа: </li></ul><ul><li>user group other </li></ul><ul><li> rwx rwx rwx </li></ul>
  34. 34. root <ul><li>Суперпользователь с ID 0 </li></ul><ul><li>Не имеет ограничений в системе </li></ul><ul><li>Лучше реже пользоваться правами root </li></ul><ul><li>Опасная команда: </li></ul><ul><ul><li>rm -rf /* </li></ul></ul>
  35. 35. Users <ul><li>Результат команды who: </li></ul>
  36. 36. Эмуляция Window$ <ul><li>WINE –WINE is not emulator </li></ul><ul><li>WINE – реализация Win API средствами POSIX </li></ul><ul><li>Требует установки MFC, VC++ runtime, VB runtime, IE6 libs, DX9 libs, .NET … </li></ul>
  37. 37. Toolkit <ul><li>Все разнообразие GCC : СС++ , Java, Fortran, Ada, Smalltalk … </li></ul><ul><li>Perl, Python, Ruby обычно входят в состав дистрибутива </li></ul><ul><li>JDK, JVM, Mono можно установить </li></ul><ul><li>Очень много IDE: Eclipse, NetBeans, KDevelop, QtCreator, Monodevelop, Code::Blocks, Geany, Anjuta, Vim, Emacs + умные редакторы </li></ul>
  38. 38. Toolkit <ul><li>cpp – препроцессор: </li></ul><ul><li>$ cat > main.c </li></ul><ul><li>#define TRUE 1 </li></ul><ul><li>int main(int argc, char **argv) </li></ul><ul><li>{ </li></ul><ul><li>int true = TRUE; </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>$ cpp main.c </li></ul><ul><li>int main(int argc, char **argv) </li></ul><ul><li>{ </li></ul><ul><li> int true = 1; </li></ul><ul><li> return(0); </li></ul><ul><li>} </li></ul>
  39. 39. Toolkit <ul><li>c с1 – компилятор С , создает ассемблерный код: </li></ul><ul><li>cat > main.c </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>int main(int argc, char **argv) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Hello Worldn”); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>$ cpp main.c main.i </li></ul><ul><li>$ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i </li></ul><ul><li>$ ls </li></ul><ul><li>main.c main.i main.s </li></ul><ul><li>$ cat main.s </li></ul><ul><li>.file &quot;main.i&quot; </li></ul><ul><li>.section .rodata </li></ul><ul><li>.LC0: </li></ul><ul><li>.string &quot;Hello World” </li></ul><ul><li>[long output continues...] </li></ul>
  40. 40. Toolkit <ul><li>as – ассемблер: </li></ul><ul><li>cat > main.c </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>int main(int argc, char **argv) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Hello Worldn”); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>$ cpp main.c main.i </li></ul><ul><li>$ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i </li></ul><ul><li>$ ls </li></ul><ul><li>main.c main.i main.s </li></ul><ul><li>$ as main.s -0 main.o </li></ul><ul><li>$ ls </li></ul><ul><li>main.c main.i main.s main.o </li></ul>
  41. 41. Toolkit <ul><li>collect2 – компоновщик: </li></ul><ul><li>/usr/lib/gcc/i486-linux-gnu/4.3.2/collect2 -m elf_i386 -static –o main /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.3.2/crtbeginT.o main.o /usr/lib/libc.a --start-group -lgcc -lgcc_eh -lc --end-group /usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crtn.o </li></ul><ul><li>$ ls </li></ul><ul><li>main main.c main.i main.o main.s </li></ul><ul><li>$ ./main </li></ul><ul><li>Hello World </li></ul>
  42. 42. Toolkit <ul><li>gcc – все в одном флаконе: </li></ul><ul><li>cat > main.c </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>int main(int argc, char **argv) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Hello Worldn”); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>$ gcc -static main.o /usr/lib/libc.a -o main </li></ul><ul><li>$ ./main </li></ul><ul><li>Hello World </li></ul>
  43. 43. GCC <ul><li>Самые полезные опции: </li></ul><ul><li>- o < имя_файл a> - итоговое имя программы </li></ul><ul><li>-с – только компилировать </li></ul><ul><li>- static – компоновать статически </li></ul><ul><li>- shared – создать динамическую библиотеку </li></ul><ul><li>- L < имя_каталога > - где искать библиотеки </li></ul><ul><li>- I < имя_каталога > - где искать заголовочные файлы </li></ul><ul><li>- s – не создавать таблицу символов </li></ul><ul><li>- O – оптимизировать код </li></ul><ul><li>- g – генерировать отладочные символы </li></ul><ul><li>- Wall – показывать все предупреждения </li></ul>
  44. 44. Toolkit <ul><li>nm – прочитать таблицу символов: </li></ul><ul><li>cat > main.c </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>int main(int argc, char **argv) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Hello Worldn”); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>$ gcc main. с </li></ul><ul><li>$ nm main.o </li></ul><ul><li>00000000 T main </li></ul><ul><li> U puts </li></ul>
  45. 45. Toolkit <ul><li>strip – удалить таблицу символов: </li></ul><ul><li>$ gcc main. с – o main </li></ul><ul><li>$ nm main | grep ‘ U ’ </li></ul><ul><li>U __libc_start_main@@GLIBC_2.0 </li></ul><ul><li>U puts@@GLIBC_2.0 </li></ul><ul><li>$strip main </li></ul><ul><li>$nm main </li></ul><ul><li>nm: main: no symbols </li></ul>
  46. 46. Toolkit <ul><li>ar – создание архива модулей: </li></ul><ul><li>$ cat > helloworld.h </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>int say_hello_to_world(void); </li></ul><ul><li>int say_hello_to_this_person(const char *person); </li></ul><ul><li>$ cat > helloworld_functions.c </li></ul><ul><li>#include “helloworld.h” </li></ul><ul><li>int say_hello_to_world(void) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Hello Worldn”); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>int say_hello_to_this_person(const char *person) </li></ul><ul><li>{ </li></ul><ul><li>printf(“Hello %sn”, person); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul><ul><li>$ cat > helloworld.c </li></ul><ul><li>#include “helloworld.h” </li></ul><ul><li>int main(int argc char **argv) </li></ul><ul><li>{ </li></ul><ul><li>say_hello_to_world(); </li></ul><ul><li>say_hello_to_this_person(“everyone”); </li></ul><ul><li>return(0); </li></ul><ul><li>} </li></ul>
  47. 47. Toolkit <ul><li>ar – создание архива модулей: </li></ul><ul><li>$ ls </li></ul><ul><li>helloworld.c helloworld_functions.c helloworld.h </li></ul><ul><li>$ gcc -c helloworld_functions.c </li></ul><ul><li>$ gcc -c helloworld.c </li></ul><ul><li>$ ls </li></ul><ul><li>helloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o </li></ul><ul><li>$ ar cr libhelloworld.a helloworld_functions.o </li></ul><ul><li>$ ls </li></ul><ul><li>helloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o libhelloworld.a </li></ul><ul><li>$ gcc -static -o helloworld helloworld.o libhelloworld.a </li></ul><ul><li>$ file * </li></ul><ul><li>helloworld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, statically linked, not stripped </li></ul><ul><li>helloworld.c: ASCII C program text </li></ul><ul><li>helloworld_functions.c: ASCII C program text </li></ul><ul><li>helloworld_functions.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped </li></ul><ul><li>helloworld.h: ASCII C program text </li></ul><ul><li>helloworld.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped </li></ul><ul><li>libhelloworld.a: current ar archive </li></ul><ul><li>$ ./helloworld </li></ul><ul><li>Hello World </li></ul><ul><li>Hello everyone </li></ul>
  48. 48. Toolkit <ul><li>ldd – показать зависимости модуля : </li></ul><ul><li>$ ldd /bin/ls </li></ul><ul><li>linux-gate.so.1 => (0xb7f68000) </li></ul><ul><li>librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f33000) </li></ul><ul><li>libselinux.so.1 => /lib/libselinux.so.1 (0xb7f19000) </li></ul><ul><li>libacl.so.1 => /lib/libacl.so.1 (0xb7f10000) </li></ul><ul><li>libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7db2000) </li></ul><ul><li>libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7d99000) </li></ul><ul><li>/lib/ld-linux.so.2 (0xb7f4e000) </li></ul><ul><li>libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d95000) </li></ul><ul><li>libattr.so.1 => /lib/libattr.so.1 (0xb7d90000) </li></ul>
  49. 49. Toolkit <ul><li>gdb – отладчик </li></ul><ul><li>gprof – профайлер </li></ul><ul><li>make – универсальный сборщик </li></ul><ul><li>Ко всем этим CLI утилитам есть GUI надстройки </li></ul>
  50. 50. Структура makefile <ul><li>TARGET : DEPENDENCY ... </li></ul><ul><li>COMMAND </li></ul><ul><li>... </li></ul><ul><li>Команда – некоторое действие по достижению цели </li></ul><ul><li>Цель – результат выполнения списка команд </li></ul><ul><li>Зависимость – цель, которую необходимо предварительно достичь </li></ul>
  51. 51. Пример makefile <ul><li>all : libhelloworld.so.0.0.1 helloworld </li></ul><ul><li>libhelloworld.so.0.0.1 : helloworld.h helloworld_functions.c </li></ul><ul><li>gcc -c helloworld_functions.c </li></ul><ul><li>gcc -shared -Wl,-soname,libhelloworld.so.0.0.1 -o libhelloworld.so.0.0.1 helloworld_functions.o </li></ul><ul><li>ln -f -s libhelloworld.so.0.0.1 libhelloworld.so </li></ul><ul><li>helloworld : helloworld.h helloworld.c libhelloworld.so.0.0.1 </li></ul><ul><li>gcc -c helloworld.c </li></ul><ul><li>gcc -o helloworld helloworld.o libhelloworld.so.0.0.1 </li></ul><ul><li>install : all </li></ul><ul><li>cp -f helloworld.h /usr/include </li></ul><ul><li>cp -f libhelloworld.so.0.0.1 /usr/lib </li></ul><ul><li>ln -f -s /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.so </li></ul><ul><li>cp helloworld /usr/bin </li></ul><ul><li>ldconfig -v </li></ul><ul><li>uninstall : </li></ul><ul><li>rm -f /usr/include/helloworld.h </li></ul><ul><li>rm -f /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.so </li></ul><ul><li>rm -f /usr/bin/helloworld </li></ul><ul><li>ldconfig -v </li></ul><ul><li>clean : </li></ul><ul><li>rm -f *.o </li></ul><ul><li>rm -f libhelloworld.so* </li></ul><ul><li>rm -f helloworld </li></ul>
  52. 52. Вопросы?

×