Кратко о Linux
-
Upload
shoumikhin -
Category
Documents
-
view
1.080 -
download
4
description
Transcript of Кратко о Linux
Программирование Linux
План
OpenSource идеологияИсторияАрхитектураСредства разработкиБиблиотеки
Open Source
Методология разработки: доступность кода, а не отсутствие цены
Код распространяется вместе с программой бесплатно
Лицензии GPL, LGPL, AGPL, ISC, MIT Каждая лицензия контролирует
использование кода Linux использует GPL
GPL
Право по желанию бесплатно получить полный исходный код купленного ПО
Право изменять этот код и создавать на его основе ПО, также обязательно GPL со ссылкой на оригинал и указанием внесенных изменений
LGPL
Право по желанию бесплатно получить полный исходный код купленного ПО
Право изменять этот код и использовать в своем ПО, возможно не LGPL
Open Source
Можно:- использовать- исследовать- менять- распространять
Нельзя:- запрещать кому-либо все вышеперечисленное
Причины возникновения
Unix использовался в большинстве ВУЗов
Unix стал требовать деньги за пользование и разработку
Tanenbaum создал Minix для учебных целей, которую использовал Torvalds
Linus начал разработку Linux Stallman запустил проект GNU и FSF
Что есть Unix?
Ядро ОС, изначально созданное в 1969 Kenneth Thompson и Dennis Ritchie
Что есть Unix?
40 лет развития Существует очень много клонов Unix:
BSD, System V, Solaris, HP-UX, AIX, Linux …
Первая в мире коммерческая ОС Относительно легко портируема Почти весь Internet построен на Unix,
80% серверов работают под Linux
Что есть Unix?
Очень мощный CLI – Command Line Interface
Иерархическая файловая система Многопользовательская система Многопроцессная система
Что есть Linux?
Ядро ОС с открытым кодом, созданное студентом для замены Unix
Linux – это ядро, GNU – набор утилит Разрабатывается с 1991 по сей день Выбор №1 промышленности и
компьютерных фанов Поддерживает огромное количество
платформ: i386, x86\64, PPC, Amiga, SPARC, ARM, супер-компьютеры
Что есть 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, …);
Пример fork
if (!fork()){
printf("I'm the child!\n"); exit(0); }
else{
printf("I'm the parent!\n"); wait(0); }
Richard Stallman & Linus Torvalds
История
1971 Richard Stallman начал работать в лаборатории искусственного интеллекта MIT и вошел в хакерское сообщество
В те времена все программисты бесплатно делились своим кодом друг с другом
История
1980 массово начало появляться портируемое ПО
Разработчики стали закрывать код как интеллектуальную собственность
История
1985 Stallman основывает Free Software Foundation и начинает GNU
GNU – GNU is Not Unix – ОС с открытым кодом, совместимая с Unix на уровне программ
Stallman начинает разработку утилит для будущей системы
История
1985 Andy Tanenbaum пишет Unix-подобную ОС Minix для i386 в целях обучения студентов
1989 Stallman издает GNU GPL – General Public License или copyleft
Практически все утилиты написаны, не хватает… ядра
История
1990 Linus Torvalds активно пользуется и изучает Minix, хочет ее усовершенствовать
Tanenbaum запрещает это делать
1991 Torvalds начинает писать свою ОС под GPL, называет ее Linux
Tux
Distributives
Linux is OpenSource, поэтому каждый может создавать свою версию
Дистрибутив = ядро + набор программ + инсталлятор
Большинство дистрибутивов основаны на Debian или RadHat
Distributives
Статистика
Архитектура
Shell
Используется как CLI Из GUI доступна посредством
эмуляторов терминала Самая популярная bash Очень богатый интерпретатор
Shell
Некоторые команды:touch file – создать файлcp file1 file2 - скопировать файлrm file - удалить файлmv file1 file2 – переместить\переименоватьcd directory – изменить текущий каталогless file – просмотреть файлman command – справка о командеfind file – найти файл
Shell
Некоторые команды:ls – содержимое каталогаps – информация о процессахkill <pid> - послать процессу сигналsudo command – выполнить команду как rootchmod file – изменить права доступа./file – запустить файлifconfig – справка о настройках сетиreboot – перезагрузка
GUI
X-сервер – отдельное приложение Графические программы – клиенты X-сервер сообщает программе о
необходимости прорисовки, клавиатурном вводе, позиции и кликах указателя
Программы сообщают серверу как их прорисовывать
Программируется Xlib, Xt, Motif, GTK+, Qt
Window manager
Особый клиент X-сервера для управления окнами
Добавляет окнам декорации и кнопки управления, обрабатывает переключение между окнами и изменение размера
Linux поддерживает множество WM: KDE, Gnome, Xfce, fluxbox, twm…
Window manager
Статистика использования WM
Файловая система
EXT2, EXT3, EXT4 и swap (для подкачки) Монтирует FAT, NTFS, HFS, ReiserFS, XFS … Основные каталоги:
/bin – системные утилиты/boot – файлы для загрузки системы/etc – файлы конфигурации/home – каталоги пользователей/lib – системные и пользовательские библиотеки/media – монтируемые разделы/usr – пользовательские программы и библиотеки
Виртуальная файловая система
Позволяет взаимодействовать с ядром через интерфейс файловой системы
Основные каталоги:/dev – файлы устройства для взаимодействия с драйверами/proc – состояние ядра (процессы)/sys – состояние ядра (устройства)
Права доступа
Право на чтение Право на запись Право на выполнение Идентификатор пользователя Идентификатор группы 9 бит для описателя доступа:
user group other rwx rwx rwx
root
Суперпользователь с ID 0 Не имеет ограничений в системе Лучше реже пользоваться правами root Опасная команда:
rm -rf /*
Users
Результат команды who:
Эмуляция Window$
WINE –WINE is not emulatorWINE – реализация Win API
средствами POSIX Требует установки MFC, VC++ runtime,
VB runtime, IE6 libs, DX9 libs, .NET …
Toolkit
Все разнообразие GCC: С\С++, Java, Fortran, Ada, Smalltalk …
Perl, Python, Ruby обычно входят в состав дистрибутива
JDK, JVM, Mono можно установить Очень много IDE: Eclipse, NetBeans,
KDevelop, QtCreator, Monodevelop, Code::Blocks, Geany, Anjuta, Vim, Emacs + умные редакторы
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);}
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...]
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
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
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
GCC
Самые полезные опции:-o <имя_файлa> - итоговое имя программы-с – только компилировать-static – компоновать статически-shared – создать динамическую библиотеку-L <имя_каталога> - где искать библиотеки-I <имя_каталога> - где искать заголовочные файлы-s – не создавать таблицу символов-O – оптимизировать код-g – генерировать отладочные символы-Wall – показывать все предупреждения
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
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
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);
}
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
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)
Toolkit
gdb – отладчикgprof – профайлерmake – универсальный сборщик
Ко всем этим CLI утилитам есть GUI надстройки
Структура makefile
TARGET : DEPENDENCY ...COMMAND...
Команда – некоторое действие по достижению цели
Цель – результат выполнения списка команд
Зависимость – цель, которую необходимо предварительно достичь
Пример 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
Вопросы?