52
Программирование Linux

Кратко о Linux

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Кратко о Linux

Программирование Linux

Page 2: Кратко о Linux

План

OpenSource идеологияИсторияАрхитектураСредства разработкиБиблиотеки

Page 3: Кратко о Linux

Open Source

Методология разработки: доступность кода, а не отсутствие цены

Код распространяется вместе с программой бесплатно

Лицензии GPL, LGPL, AGPL, ISC, MIT Каждая лицензия контролирует

использование кода Linux использует GPL

Page 4: Кратко о Linux

GPL

Право по желанию бесплатно получить полный исходный код купленного ПО

Право изменять этот код и создавать на его основе ПО, также обязательно GPL со ссылкой на оригинал и указанием внесенных изменений

Page 5: Кратко о Linux

LGPL

Право по желанию бесплатно получить полный исходный код купленного ПО

Право изменять этот код и использовать в своем ПО, возможно не LGPL

Page 6: Кратко о Linux

Open Source

Можно:- использовать- исследовать- менять- распространять

Нельзя:- запрещать кому-либо все вышеперечисленное

Page 7: Кратко о Linux

Причины возникновения

Unix использовался в большинстве ВУЗов

Unix стал требовать деньги за пользование и разработку

Tanenbaum создал Minix для учебных целей, которую использовал Torvalds

Linus начал разработку Linux Stallman запустил проект GNU и FSF

Page 8: Кратко о Linux

Что есть Unix?

Ядро ОС, изначально созданное в 1969 Kenneth Thompson и Dennis Ritchie

Page 9: Кратко о Linux

Что есть Unix?

40 лет развития Существует очень много клонов Unix:

BSD, System V, Solaris, HP-UX, AIX, Linux …

Первая в мире коммерческая ОС Относительно легко портируема Почти весь Internet построен на Unix,

80% серверов работают под Linux

Page 10: Кратко о Linux

Что есть Unix?

Очень мощный CLI – Command Line Interface

Иерархическая файловая система Многопользовательская система Многопроцессная система

Page 11: Кратко о Linux

Что есть Linux?

Ядро ОС с открытым кодом, созданное студентом для замены Unix

Linux – это ядро, GNU – набор утилит Разрабатывается с 1991 по сей день Выбор №1 промышленности и

компьютерных фанов Поддерживает огромное количество

платформ: i386, x86\64, PPC, Amiga, SPARC, ARM, супер-компьютеры

Page 12: Кратко о Linux

Что есть POSIX?

Portable Operating System Interface for Unix

Набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой

Основные вызовы:int open(const char *pathname, int flags, mode_t mode);int close(int descriptor);ssize_t write(int descriptor, void *buffer, size_t length);ssize_t read(int descriptor, void *buffer, size_t length);int fork();int exec*(const char *path, …);

Page 13: Кратко о Linux

Пример fork

if (!fork()){

printf("I'm the child!\n"); exit(0); }

else{

printf("I'm the parent!\n"); wait(0); }

Page 14: Кратко о Linux

Richard Stallman & Linus Torvalds

Page 15: Кратко о Linux

История

1971 Richard Stallman начал работать в лаборатории искусственного интеллекта MIT и вошел в хакерское сообщество

В те времена все программисты бесплатно делились своим кодом друг с другом

Page 16: Кратко о Linux

История

1980 массово начало появляться портируемое ПО

Разработчики стали закрывать код как интеллектуальную собственность

Page 17: Кратко о Linux

История

1985 Stallman основывает Free Software Foundation и начинает GNU

GNU – GNU is Not Unix – ОС с открытым кодом, совместимая с Unix на уровне программ

Stallman начинает разработку утилит для будущей системы

Page 18: Кратко о Linux

История

1985 Andy Tanenbaum пишет Unix-подобную ОС Minix для i386 в целях обучения студентов

1989 Stallman издает GNU GPL – General Public License или copyleft

Практически все утилиты написаны, не хватает… ядра

Page 19: Кратко о Linux

История

1990 Linus Torvalds активно пользуется и изучает Minix, хочет ее усовершенствовать

Tanenbaum запрещает это делать

1991 Torvalds начинает писать свою ОС под GPL, называет ее Linux

Page 20: Кратко о Linux

Tux

Page 21: Кратко о Linux

Distributives

Linux is OpenSource, поэтому каждый может создавать свою версию

Дистрибутив = ядро + набор программ + инсталлятор

Большинство дистрибутивов основаны на Debian или RadHat

Page 22: Кратко о Linux

Distributives

Page 23: Кратко о Linux

Статистика

Page 24: Кратко о Linux

Архитектура

Page 25: Кратко о Linux

Shell

Используется как CLI Из GUI доступна посредством

эмуляторов терминала Самая популярная bash Очень богатый интерпретатор

Page 26: Кратко о Linux

Shell

Некоторые команды:touch file – создать файлcp file1 file2 - скопировать файлrm file - удалить файлmv file1 file2 – переместить\переименоватьcd directory – изменить текущий каталогless file – просмотреть файлman command – справка о командеfind file – найти файл

Page 27: Кратко о Linux

Shell

Некоторые команды:ls – содержимое каталогаps – информация о процессахkill <pid> - послать процессу сигналsudo command – выполнить команду как rootchmod file – изменить права доступа./file – запустить файлifconfig – справка о настройках сетиreboot – перезагрузка

Page 28: Кратко о Linux

GUI

X-сервер – отдельное приложение Графические программы – клиенты X-сервер сообщает программе о

необходимости прорисовки, клавиатурном вводе, позиции и кликах указателя

Программы сообщают серверу как их прорисовывать

Программируется Xlib, Xt, Motif, GTK+, Qt

Page 29: Кратко о Linux

Window manager

Особый клиент X-сервера для управления окнами

Добавляет окнам декорации и кнопки управления, обрабатывает переключение между окнами и изменение размера

Linux поддерживает множество WM: KDE, Gnome, Xfce, fluxbox, twm…

Page 30: Кратко о Linux

Window manager

Статистика использования WM

Page 31: Кратко о Linux

Файловая система

EXT2, EXT3, EXT4 и swap (для подкачки) Монтирует FAT, NTFS, HFS, ReiserFS, XFS … Основные каталоги:

/bin – системные утилиты/boot – файлы для загрузки системы/etc – файлы конфигурации/home – каталоги пользователей/lib – системные и пользовательские библиотеки/media – монтируемые разделы/usr – пользовательские программы и библиотеки

Page 32: Кратко о Linux

Виртуальная файловая система

Позволяет взаимодействовать с ядром через интерфейс файловой системы

Основные каталоги:/dev – файлы устройства для взаимодействия с драйверами/proc – состояние ядра (процессы)/sys – состояние ядра (устройства)

Page 33: Кратко о Linux

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

Право на чтение Право на запись Право на выполнение Идентификатор пользователя Идентификатор группы 9 бит для описателя доступа:

user group other rwx rwx rwx

Page 34: Кратко о Linux

root

Суперпользователь с ID 0 Не имеет ограничений в системе Лучше реже пользоваться правами root Опасная команда:

rm -rf /*

Page 35: Кратко о Linux

Users

Результат команды who:

Page 36: Кратко о Linux

Эмуляция Window$

WINE –WINE is not emulatorWINE – реализация Win API

средствами POSIX Требует установки MFC, VC++ runtime,

VB runtime, IE6 libs, DX9 libs, .NET …

Page 37: Кратко о Linux

Toolkit

Все разнообразие GCC: С\С++, Java, Fortran, Ada, Smalltalk …

Perl, Python, Ruby обычно входят в состав дистрибутива

JDK, JVM, Mono можно установить Очень много IDE: Eclipse, NetBeans,

KDevelop, QtCreator, Monodevelop, Code::Blocks, Geany, Anjuta, Vim, Emacs + умные редакторы

Page 38: Кратко о Linux

Toolkit

cpp – препроцессор:$ cat > main.c#define TRUE 1int main(int argc, char **argv){

int true = TRUE;return(0);

}

$ cpp main.cint main(int argc, char **argv){ int true = 1; return(0);}

Page 39: Кратко о Linux

Toolkit

cс1 – компилятор С, создает ассемблерный код:

cat > main.c#include <stdio.h>int main(int argc, char **argv){

printf(“Hello World\n”);return(0);

}

$ cpp main.c main.i$ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i$ lsmain.c main.i main.s$ cat main.s

.file "main.i"

.section.rodata.LC0:

.string "Hello World”[long output continues...]

Page 40: Кратко о Linux

Toolkit

as – ассемблер:cat > main.c#include <stdio.h>int main(int argc, char **argv){

printf(“Hello World\n”);return(0);

}

$ cpp main.c main.i$ /usr/lib/gcc/i486-linux-gnu/4.3.2/cc1 main.i$ lsmain.c main.i main.s$ as main.s -0 main.o$ lsmain.c main.i main.s main.o

Page 41: Кратко о Linux

Toolkit

collect2 – компоновщик:

/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$ lsmain main.c main.i main.o main.s$ ./mainHello World

Page 42: Кратко о Linux

Toolkit

gcc – все в одном флаконе:

cat > main.c#include <stdio.h>int main(int argc, char **argv){

printf(“Hello World\n”);return(0);

}

$ gcc -static main.o /usr/lib/libc.a -o main$ ./mainHello World

Page 43: Кратко о Linux

GCC

Самые полезные опции:-o <имя_файлa> - итоговое имя программы-с – только компилировать-static – компоновать статически-shared – создать динамическую библиотеку-L <имя_каталога> - где искать библиотеки-I <имя_каталога> - где искать заголовочные файлы-s – не создавать таблицу символов-O – оптимизировать код-g – генерировать отладочные символы-Wall – показывать все предупреждения

Page 44: Кратко о Linux

Toolkit

nm – прочитать таблицу символов:

cat > main.c#include <stdio.h>int main(int argc, char **argv){

printf(“Hello World\n”);return(0);

}

$ gcc main.с$ nm main.o00000000 T main U puts

Page 45: Кратко о Linux

Toolkit

strip – удалить таблицу символов:

$ gcc main.с –o main$ nm main | grep ‘ U ’U __libc_start_main@@GLIBC_2.0U puts@@GLIBC_2.0$strip main$nm mainnm: main: no symbols

Page 46: Кратко о Linux

Toolkit

ar – создание архива модулей:

$ cat > helloworld.h#include <stdio.h>int say_hello_to_world(void);int say_hello_to_this_person(const char *person);$ cat > helloworld_functions.c#include “helloworld.h”int say_hello_to_world(void){

printf(“Hello World\n”);return(0);

}int say_hello_to_this_person(const char *person){

printf(“Hello %s\n”, person);return(0);

}$ cat > helloworld.c#include “helloworld.h”int main(int argc char **argv){

say_hello_to_world();say_hello_to_this_person(“everyone”);return(0);

}

Page 47: Кратко о Linux

Toolkit

ar – создание архива модулей:$ lshelloworld.c helloworld_functions.c helloworld.h$ gcc -c helloworld_functions.c$ gcc -c helloworld.c$ lshelloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o$ ar cr libhelloworld.a helloworld_functions.o$ lshelloworld.c helloworld_functions.c helloworld_functions.o helloworld.h helloworld.o libhelloworld.a$ gcc -static -o helloworld helloworld.o libhelloworld.a$ file *helloworld: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, statically linked, not strippedhelloworld.c: ASCII C program texthelloworld_functions.c: ASCII C program texthelloworld_functions.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not strippedhelloworld.h: ASCII C program texthelloworld.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not strippedlibhelloworld.a: current ar archive$ ./helloworldHello WorldHello everyone

Page 48: Кратко о Linux

Toolkit

ldd – показать зависимости модуля:$ ldd /bin/ls

linux-gate.so.1 => (0xb7f68000)librt.so.1 => /lib/tls/i686/cmov/librt.so.1

(0xb7f33000)libselinux.so.1 => /lib/libselinux.so.1 (0xb7f19000)libacl.so.1 => /lib/libacl.so.1 (0xb7f10000)libc.so.6 => /lib/tls/i686/cmov/libc.so.6

(0xb7db2000)libpthread.so.0 =>

/lib/tls/i686/cmov/libpthread.so.0 (0xb7d99000)/lib/ld-linux.so.2 (0xb7f4e000)libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2

(0xb7d95000)libattr.so.1 => /lib/libattr.so.1 (0xb7d90000)

Page 49: Кратко о Linux

Toolkit

gdb – отладчикgprof – профайлерmake – универсальный сборщик

Ко всем этим CLI утилитам есть GUI надстройки

Page 50: Кратко о Linux

Структура makefile

TARGET : DEPENDENCY ...COMMAND...

Команда – некоторое действие по достижению цели

Цель – результат выполнения списка команд

Зависимость – цель, которую необходимо предварительно достичь

Page 51: Кратко о Linux

Пример makefile

all : libhelloworld.so.0.0.1 helloworld

libhelloworld.so.0.0.1 : helloworld.h helloworld_functions.cgcc -c helloworld_functions.cgcc -shared -Wl,-soname,libhelloworld.so.0.0.1 -o libhelloworld.so.0.0.1 helloworld_functions.oln -f -s libhelloworld.so.0.0.1 libhelloworld.so

helloworld : helloworld.h helloworld.c libhelloworld.so.0.0.1gcc -c helloworld.cgcc -o helloworld helloworld.o libhelloworld.so.0.0.1

install : allcp -f helloworld.h /usr/includecp -f libhelloworld.so.0.0.1 /usr/libln -f -s /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.socp helloworld /usr/binldconfig -v

uninstall :rm -f /usr/include/helloworld.hrm -f /usr/lib/libhelloworld.so.0.0.1 /usr/lib/libhelloworld.sorm -f /usr/bin/helloworldldconfig -v

clean :rm -f *.orm -f libhelloworld.so*rm -f helloworld

Page 52: Кратко о Linux

Вопросы?