курс bash. Введение в Linux и Bash
![]()
|
Введение в Linux и Bash Курс Опубликовано: https://younglinux.info/linux Версия: сентябрь 2020 Автор: Светлана Шапошникова (plustilino)plustilino) Курс "Введение в Linux и Bash" – серия статей-уроков, знакомящих с историей, особенностями и философией операционных систем GNU/Linux, принципами работы в режиме командной строки и основными командами, выполняемыми в Bash. Курс будет полезен начинающим пользователям операционной системы GNU/Linux, будущим системным администраторам и веб-разработчикам, планирующим самостоятельно развертывать сайты на веб-серверах. Содержание курса № Тема Страница 1 История Linux 3 2 GNU GPL 6 3 Ядро Linux 9 4 Каталоги Linux 11 5 Типы файлов Linux 15 6 Интерфейс командной строки 17 7 Bash – командная оболочка Linux 19 8 Параметры команд 23 9 Ctrl + C, Ctrl + D, Ctrl + Z 25 10 История команд и автодополнение 27 11 Перенаправление ввода-вывода 29 12 Документация Linux 31 13 Абсолютная и относительная адресация. Команда cd 35 14 Команда ls – просмотр каталога 37 15 Копирование, перемещение, создание и удаление файлов и каталогов 40 16 Жесткие и символьные ссылки 42 17 Создание ссылок в Linux 45 18 Права доступа 46 19 Команда chmod – изменение прав доступа 50 20 Шаблоны имен файлов 53 21 Поиск файлов. Команда find 54 22 Команда sudo – администрирование системы 57 23 Пакетный менеджер APT 58 24 Архиватор tar 62 25 Утилита grep 63 26 Знакомство с потоковым редактором sed 66 2 История Linux Операционные системы на базе ядра Linux представляют собой большую группу Unix- подобных ОС. Конкретную разновидность принято называть дистрибутивом Linux. Каждый дистрибутив имеет собственное имя. Например, наиболее популярными дистрибутивами GNU/Linux по данным на 2018 год являются Manjaro, Ubuntu, Mint, elementary, MX Linux, Debian, Fedora. Всего существуют сотни различных дистрибутивов. Дистрибутивы развиваются на протяжении своего периода «жизни», поэтому представлены различными версиями. Более новые версии поддерживаются, остальные являются устаревшими. Одни дистрибутивы умирают, другие – рождаются. Появление систем GNU/Linux можно считать естественной эволюцией компьютерных технологий. Далее в общих чертах излагаются предпосылки их возникновения и история развития. История Unix GNU/Linux не являются разновидностью систем Unix, однако они являются Unix- подобными. Это значит, что в Linux соблюдаются принципы разработки, функционирования, организации среды, которые были заложены в Unix. Однако код, лежащий в основе Linux, не был взят из Unix. Его писали с нуля. Когда-то Unix была представлена одной системой и сыграла огромную историческую роль в развитии компьютерной науки. Позже на основе Unix были разработаны другие системы. На сегодняшний день "чистой" Unix не существует. Unix начал разрабатываться в 1969 году группой программистов, работавших в американской фирме Bell Labs. В начале 70-х годов для удобства разработки Unix, а скорее для того, чтобы большая часть ОС была независима от архитектуры компьютера, Денисом Ритчи и Кеном 3 Томпсоном был создан язык Си. На этом языке до сих пор пишутся основные части большинства ОС. Основными задачами операционных систем того времени было создание удобной среды для программистов, организация их совместной работы над проектами. Все это учитывалось при разработке Unix. К середине 70-х Unix получил широкое распространение. Тут следует оговорить, что в то время персональных компьютеров еще не было и под словами "широкое распространение" имеются в виду организации, в основном это были университеты и крупные фирмы. На тот момент Unix распространялся бесплатно. Обзаведясь копией ПО, организация могла его расширять и адаптировать под свои задачи. В результате к концу десятилетия начинают появляться разновидности Unix'а, в том числе проприетарные (коммерческие).а, в том числе проприетарные (plustilino)коммерческие). В начале 80-х Unix был выбран в качестве системы, под которой планировалось развивать сетевой протокол TCP/IP, тем самым ОС получила хорошую поддержку и прижилась на серверах. Однако появление коммерческих Unix'а, в том числе проприетарные (коммерческие).ов тормозило развитие ОС. Фирмы, продающие свои дистрибутивы, запрещали распространять их исходные коды. Другие программисты не могли воспользоваться уже сделанным и начинали реализовывать функцию или программу заново. Кроме того, каждая фирма вносила в ПО свои собственные изменения. В результате программы, написанные в одной системе, не могли работать в другой; то есть Unix'а, в том числе проприетарные (коммерческие).ы стали несовместимы. Проблема совместимости важна в IT, это касается как оборудования, так и ПО. Хотя впоследствии вопросами стандартизации Unix стали заниматься, закрытость системы оказала негативное влияние. Возможно это привело к тому, что Unix упустил шанс развиваться в сторону операционной системы для персональных компьютеров. История GNU В 1982 году Ричард Столлман столкнулся с проблемой, когда лицензия ПО не позволяла ему обмениваться исходными кодами в стенах института. Он ушел с работы и в 1983 году основал проект GNU, целью которого было создание открытой и свободной ОС. GNU является рекурсивной аббревиатурой от "GNU is Not Unix". Кроме того, gnu с английского переводится как "антилопа гну", которая и стала символом проекта. Для того, чтобы программисты могли разрабатывать ПО, Столлман создал редактор Emacs. В рамках GNU был основан благотворительный фонд, отвечающий за распространение 4 свободного ПО. Фонд получал некоторые деньги, в том числе от продажи руководств и сопутствующих услуг. На протяжении 80-х годов в рамках проекта GNU была создана большая коллекция ПО, основная часть которого впоследствии стала входить в состав дистрибутивов Linux. Поэтому их правильнее называть GNU/Linux. Однако к 90-му году в рамках GNU ядро операционной системы так и не было готово. Minix В 1987 году Эндрю Таненбаум создал маленькую учебную Unix-подобную операционную систему, которую назвал Minix. С ее помощью студенты Таненбаума знакомились с принципами работы ОС и с тем, из чего она состоит. Чтобы каждый мог изучать исходные коды, Minix распространялась под одним из вариантов свободных лицензий. Операционная система Minix оказала влияние на появление Linux, так как большинство студентов изучали строение ОС именно на основе Minix. Рождение Linux В начале 90-х Линус Торвальдс изучал ОС Minix. Однако его не устроили скромные возможности учебной системы. Тогда он начал создавать собственную операционную систему, программируя системные вызовы. К концу лета 1991 года появился сырой вариант ядра. Позже ядро назвали Linux. Отметим, что ядро операционной системы не является полноценной ОСью с точки зрения пользователя. Ядро обеспечивает взаимодействие системных и прикладных программ с аппаратной частью компьютера, управляет распределением памяти и процессорного времени между работающими программами. Поскольку Linux был свободно-распространяемым, а его исходные коды были открыты, он начал быстро развиваться благодаря большому сообществу программистов. Развитие GNU/Linux Так как проекту GNU до полноценной системы не хватало только ядра, Linux оказался как нельзя кстати. Ядро "обросло" многочисленным ПО из проекта Столлмана и превратилось в полноценную операционную систему GNU/Linux. Чаще ее называют просто Linux. В последующей разработке ядра Linux и прикладного ПО приняли участие программисты со всего мира, основным средством взаимодействия был и остается Интернет. Постепенно начали появляться компании, продающие свои дистрибутивы – версии операционных систем на базе ядра Linux. В основном такие фирмы зарабатывали на технической поддержке и продаже дисков. Не будем забывать, что в 90-е и нулевые Интернет был относительно медленный и дорогой. Поэтому установочные диски пользовались популярностью. Если первые версии Linux были ориентированы на компьютерных специалистов, то разработчики дистрибутивов позаботились о том, чтобы поставить ОС мог обычный пользователь. 5 Дистрибутивы отличаются между собой не столько графическим интерфейсом, сколько областью применения (plustilino)для сервера или настольного компьютера), системой управления пакетами и другим. С течением времени Linux адаптировали под разные архитектуры. В настоящее время его можно встретить на многих электронных устройствах. Отметим, что Android также создан на базе ядра Linux. Однако и по сегодняшний день операционные системы GNU/Linux чаще встречаются на серверах, в том числе веб-серверах, и суперкомпьютерах. В меньшей степени – на настольных компьютерах. GNU GPL GNU GPL – это одна из разновидностей лицензий для свободного программного обеспечения. Вероятно, самая популярная. GNU GPL была разработана в рамках проекта GNU. Существуют три версии этой лицензии, созданные в 1988, 1991 и 2007 годах. GPL есть аббревиатура от General Public License, что на русский язык можно перевести как "универсальная общественная лицензия". Лицензируя программный продукт с помощью GNU GPL или другой копилефт-лицензии, разработчик, сохраняя за собой авторство, передает программу в общественную собственность. В остальном лицензии типа "копилефт" имеют небольшие отличия, нередко специфику областей применения. Здесь мы не будем вдаваться в юридические особенности и подробно анализировать текст лицензии. Рассмотрим, почему возникла проблема лицензирования ПО, и какие преимущества есть у свободного ПО. Как распространяются программы Компьютерные программы создаются с помощью разных языков программирования, которые в настоящее время развиты настолько, что напоминают естественные. Программа на таком языке недоступна для "понимания" аппаратным обеспечением компьютера (plustilino)железом). Поэтому для каждого языка программирования существуют специальные программы – трансляторы – осуществляющие перевод текста программы с языка программирования, на котором она была написана, на язык вычислительной машины. Команды, которые понимает и пишет программист, называются исходным кодом; команды, которые выдает транслятор, и которые способен выполнить компьютер, называются исполняемым (машинным) кодом. Следовательно, программы могут распространяться в двух видах: в файлах с исходным кодом и в файлах с исполняемым кодом. Для конечного пользователя последний вариант может быть более удобным, т. к. ему не надо устанавливать на компьютер специальную программу-транслятор и переводить код из одного вида в другой. Однако для программистов интересен исходный код. Они могут научиться чему-то новому, улучшить программу, позаимствовать часть кода для своей разработки и т. п. В 70-е года XX века и ранее, когда компьютеры встречались редко, были большими и пользовались ими в основном специалисты, обмен исходными кодами был 6 преимущественным способом распространения программ. Кроме того, это было связано с плохой совместимостью. Код, трансляция которого была выполнена под одну машину, не запускался на другой. Поэтому нужны были исходники. Программное обеспечение с закрытым исходным кодом В процессе развития общества открытия и разработки сначала появляются, затем начинают распространяться. Обычно новую технологию внедряют люди и организации, преследующие коммерческие цели. В 80-х годах прошлого века компьютеры начали широко использоваться. Возрос спрос на программное обеспечение. Стали появляться фирмы, продающие ПО. Желая защититься от конкурентов, они "закрывали" исходные коды своих программ, чтобы другие программисты и фирмы не могли их изучать. Покупатель же в большинстве случаев получал уже скомпилированный исполняемый файл, который ему было запрещено передавать другим. Другими словами, произошел отказ от принципов открытости исходных кодов и свободного распространения ПО. Коммерческие организации поспособствовали тому, чтобы сделать общество информационным, внедрили компьютерные технологии во многие сферы нашей жизни, создали удобные интерфейсы, ориентированные на неподготовленного пользователя. Однако их проприетарные лицензии тормозили развитие компьютерной науки. Программы с открытым исходным кодом Когда исходные коды начали закрываться, а программы запрещаться к распространению, появились несогласные. Яркий пример – Ричард Столлман. Многие программисты не лицензировали свои разработки, а предоставляли исходные коды сообществу. Эти программы становились общественным достоянием. Другой программист мог взять таковую и использовать на свое усмотрение. Измененная версия также могла стать общественным достоянием. Но могла не стать. Программист, взявший за основу открытую программу, доработав ее, мог закрыть свою версию. Оказалось, что открытому ПО требуется защита его открытости не в меньшей степени, чем закрытому требуется защита права собственности. В результате начали появляться лицензии, охраняющие открытое ПО от превращения в закрытое. Copyleft и лицензия GNU GPL Copyleft – это разновидность лицензий, запрещающих ограничение свобод. Причем программа, выпущенная под лицензией вида Copyleft, при изменении не может выпускаться под проприетарными Copyright-лицензиями. Как говорят, "копилефт заразен". 7 Самым известным примером копилефтной лицензии является GNU GPL – GNU General Public License Разработчикам, выпускающим свои программы под GNU GPL, гарантируется, что • авторское право будет сохранено; • каждый может копировать и использовать программу; • исходный код всегда будет открыт для изучения и изменения; • измененные версии программ будут лицензированы копилефтом. Преимущества открытого и свободного ПО Можно отметить следующие преимущества программ, распространяемых с открытым исходным кодом: • В таких программах быстрее исправляются ошибки, так как код может просмотреть большее количество людей. • Безопасность. В закрытые программы разработчик может встроить "секретный" код, делающий что-либо на компьютере пользователя, о чем никто может не знать. С открытым ПО такое невозможно. • Открытые программы повышают профессиональный уровень программистов. Каждый может научиться чему-то у другого, исправить ошибки и др. Если говорить о свободе копирования программного обеспечения, то следует отметить такое преимущество как социальная справедливость. Каждый человек может получить программу, в которой нуждается. Вопрос 1. Чем отличаются понятия "свободное ПО" и "открытое ПО"? 8 Ответ. Под открытым программным обеспечением понимается то, чьи исходные коды открыты, т. е. каждый может их просматривать и изменять. В случае использования понятия "свободное программное обеспечение" акцент делается на свободу распространения ПО. Каждый может копировать, устанавливать на неограниченное число компьютеров, передавать другому. Путаница между понятиями в основном связана с тем, что если ПО является открытым, оно фактически становится свободным. Однако обратное не совсем верно, так как бывают свободно-распространяемые программы, исходный код которых закрыт. Такие программы распространяются в основном через исполняемые файлы. Хотя термины "открытое ПО" и "свободное ПО" являются устоявшимися и разными, часто, говоря об одном, подразумевают одновременно и другое. Вопрос 2. Почему сделать закрытыми исходные коды программ, написанных на интерпретируемых языках, сложнее, чем на компилируемых? Ответ. Машинный код интерпретируемой программы получается в момент ее выполнения, т. е. пользователь в любом случае должен получить исходный код, который будет транслироваться в машинный на его компьютере. Однако существует способ не открывать код. Для этого создается так называемый байт-код – некий промежуточный машинно- независимого код. Кроме того, многие интерпретируемые языки используются в веб-разработке и программы на них исполняются на стороне сервера (plustilino)Python, PHP). Пользователь "получает в браузер" результат работы программы-скрипта, а нее ее исходный код. Ядро Linux Что такое ядро операционной системы Ядро является главной частью любой операционной системы. Существует точка зрения, которая понятие операционной системы приравнивает к ядру. Есть точка зрения, когда в понятие операционной системы включают как ее ядро, так и системные программы, позволяющие пользователю обращаться через ядро к аппаратным ресурсам. Так что же такое ядро ОС и каковы его функции? Как известно, компьютер – не только система аппаратного обеспечения (plustilino)железа), но и набор работающего на нем программного обеспечения. Чтобы второе могло эффективно работать на первом, нужна более низкоуровневая программа, скрывающая сложности работы с железом и предоставляющая обычным программам и пользователям удобный для них интерфейс. Железо говорит на языке сигналов, регистров, секторов, переводов головок. Программам все это не надо. Они говорят на языке "записать, прочитать, сложить, вычесть ...". Специальной программой, обеспечивающей остальным простой и понятный интерфейс для работы на имеющемся оборудовании, является ядро операционной системы. Однако создание виртуальной машины – не единственная функция ядра. 9 Представим себе, что ядра нет, а каждая запущенная программа сама обращается к железу и обрабатывает сигналы от него. Вроде бы ничего страшного, кроме дублирования кода в каждой такой программе. Но на компьютере одновременно работает множество программ. Как они будут "договариваться" между собой о совместном использовании общего аппаратного обеспечения? Конечно, они могут встать в очередь, и сначала одна программа выполнится полностью, затем другая. Однако одни программы должны работать постоянно в фоновом режиме, другие – могут долго ожидать ввода или вывода, третьи – должны получать данные из другой работающей программы. Поэтому функция оптимального распределения аппаратных ресурсов возлагается на ядро. Оно организует как бы параллельную работу множества программ, играет роль менеджера. Ядро операционной системы – это тоже программа, написанная на том или ином языке программирования и скомпилированная в исполняемый файл. Однако, в отличии от других программ, ядро всегда загружается первым и потом постоянно "сидит" в определенной области оперативной памяти. То есть это программа, которая всегда находится в запущенном состоянии и взаимодействует, с одной стороны, с железом, а с другой – с системными и пользовательскими программами. В коде ядра особо выделяют драйверы устройств. Драйвер – это программный код, функция которого заключается в предоставлении возможности использовать определенное железо (plustilino)например, видеокарту). Причем конкретный драйвер не всегда загружается в память вместе с остальной частью ядра. Он туда грузится, лишь когда возникает потребность в ресурсах устройства. Так экономится память, но в ущерб скорости. Выделяют операционные системы на монолитном ядре и микроядре, а также разные промежуточные варианты. Монолитное ядро проще и быстрее работает, так как в памяти всегда находится почти весь код. Микроядро меньше, сложнее, работает медленнее, однако нередко считается более передовым из-за легкости подключения новых частей кода. Микроядро, находясь в памяти, организует взаимодействие между другими частями кода операционной системы, которые являются самостоятельными программами (plustilino)см. пример выше про загрузку драйверов). |