- 5 причин использовать Linux в 2020 году
- ZFS в Linux
- Прерывания Linux
- Linux в кармане
- Новые команды Linux
- Облако, работающее на Linux
- Рост open source
- На правах рекламы
- Семь причин, почему Линукс
- Прозрачность
- Доступность
- Безопасность
- Децентрализация
- Гибкость и разнообразие
- Масштабируемость
- Простота
- Изучите необходимый минимум Linux, чтобы быть продуктивным
- Почему современные бизнес-аналитики должны знать Linux
- Фундаментальная единица Linux: «оболочка»
- Изучаем несколько важных концептов
- Командный синтаксис
- Псевдонимы директорий
- Полезная информация
- STDIN / STDOUT
- Конвейер (piping)
- Шаблоны поиска (wildcards)
- Завершение с помощью tab
- Выход
- Что я помню из команд bash
- Читайте также
- Продвинутые и не часто используемые команды
- Никогда не останавливайтесь:
5 причин использовать Linux в 2020 году
Самые лучшие технологии — это движущаяся мишень. Когда технология стагнирует, общество обычно обгоняет и перерастает её. Linux, широко используемая операционная система с открытыми исходниками — это фундаментальная технология, являющаяся основой для одной из самых прогрессивных современных идей компьютерных систем. Поэтому, хотя на протяжении трёх десятков лет развития она остаётся поразительно неизменной, эта ОС обеспечивает адаптируемость. В результате этого Linux находится в уникальном положении — с одной стороны, это надёжная инвестиция в развитие своих навыков, потому что она не меняется, с другой — это кажущаяся бесконечной движущая сила для изучения новых навыков.
2020 год, как на него не взгляни, был странным, но для Linux он оказался продолжением обычного цикла разработки. В этой статье мы вспомним этот год и вкратце расскажем о том, что нужно знать о Linux в 2020 году.
ZFS в Linux
Файловая система ZFS обеспечивает проверку целостности данных и метаданных, резервирование данных с созданием зеркал, поддержку накопителей объёмом до 256 триллионов йобибайт, нативное шифрование с аппаратным ускорением и эффективную репликацию. ZFS — это инновация, созданная Sun Microsystems; к сожалению, лицензия препятствует её поставкам в комплекте с Linux по умолчанию. Однако коллектив OpenZFS портировал проект на BSD и Linux, поэтому вы можете использовать ZFS на любой системе, от ноутбука до дата-центра.
Осваивать ZFS на удивление легко в Fedora Linux; это продемонстрировал Шэн Мао в своей статье о настройке ZFS в Linux.
Прерывания Linux
Насколько бы ни было близким ваше знакомство с Linux, всегда есть возможность нырнуть глубже и разобраться в том, как ему удаётся настолько хорошо выполнять свою работу. Компьютерам, работающим на фондовых биржах, в студиях цифровых фильмов, звуковых рабочих станциях и других средах, требующих высокой производительности, необходима обработка в реальном времени; в то же время, другие компьютеры могут позволить себе слегка лениться при обработке запросов, поэтому управление множеством циклов, постоянно выполняемых внутри компьютера — непростая задача. Понимание того, как и зачем ядро Linux управляет запросами на прерывания (IRQ), может и не быть обязательным для обычного пользователя, однако изучать это увлекательно вне зависимости от того, чем вы обычно занимаетесь за компьютером. Подробную информацию можно узнать из статьи Стефана Авенведде «How the Linux kernel handles interrupts».
Linux в кармане
Так как ОС Android компании Google работает на ядре Linux, многие из нас могут сказать, что Linux и так находится у них в кармане. Однако несмотря на своё удобство, написанный на Java фронтенд Android не всегда передаёт ощущение Linux, к которому стремятся многие пользователи Linux. А у некоторых пользователей и вовсе нет телефона с Android.
Хорошая новость заключается в том, что в устройстве с Android или iOS можно запускать Linux, дополненный терминалом, Bash, Python, менеджером пакетов и всем тем, что вы любите в этой настольной ОС с открытым исходным кодом.
Если вы пользуетесь Android, то прочитайте мою статью о Termux. А если вы на iOS, то изучите превосходную статью Ли Тусмана о запуске командной строки Linux на устройстве с iOS.
Новые команды Linux
Время идёт вперёд, и иногда старые замысловатые команды прошлого оказываются недостаточными для современных систем. Хотя ваша мышечная память могла привыкнуть к командам наподобие crontab и ifconfig (а также iwconfig и wpa_supplicant ), существуют совершенно приемлемые замены для них и другие возможности. Если вы не можете расстаться со старыми командами, то познакомьтесь с алиасами Bash, потому что эти новые команды стоят изучения.
- Откажитесь от ifconfig в пользу nmcli . В какой-то момент времени вам придётся признать, что ужасное сочетание ifconfig плюс iwconfig и wpa_supplicant (от которой всё равно уже давно втайне отказались в пользу wicd ) попросту неэффективно. Сегодня Linux использует nmcli , и эта команда стала очень удобным, а иногда и интуитивно понятным способом взаимодействия с сетью. Прочитайте превосходный туториал по nmcli Дейва Маккея.
- Задания cron, at и batch — уникальные своим бессмертием команды, которые, вероятно, никогда и не следует заменять. Они отлично подходят для быстрого и простого планирования, однако для сложных задач можно найти функции, которые могут стать им поддержкой: таймеры systemd. Дэвид Бот написал подробный туториал по таймерам systemd, демонстрирующий, как писать и отслеживать важные системные задачи.
- gcore и gdb — важные отладчики, которые могут быть известны разработчикам. Новым подходом к реализации gcore стал ProcDump компании Microsoft, получающий дамп ядра ID процесса (PID), чтобы его можно было проанализировать с помощью gdb . Он является скорее альтернативой, а не заменой, но стоит его попробовать, если вам любопытно изучать разные инструменты. Более подробная информация представлена в туториале по ProcDump Гуарава Камате.
Облако, работающее на Linux
Облачные технологии на всех парах несутся вперёд, и их основной движущей силой остаётся Linux. Облако — это набор компьютеров (узлов) с массово-распределённой файловой системой (например, Ceph), обычно управляемый при помощи Kubernetes или OpenShift.
Как бы хорошо вы ни знали Linux на своём ноутбуке, настольном компьютере или даже частном дата-центре, существует целый новый мир для экспериментов с Linux, находящийся в облачных контейнерах. Для освоения эфемерного контейнера могут потребоваться усилия, но при наличии практики и небольшом знании контекста можно создавать интересные системы и управлять ими (то есть обновлять, масштабировать и настраивать их производительность) с помощью Kubernetes.
Кики Лю написал один из лучших обзоров о процессе работы с облаками в статье «A beginner’s guide to Kubernetes container orchestration». Прочитайте её, а затем скачайте Kubernetes eBook Криса Коллинза, чтобы собрать собственное облако на кластере Raspberry Pi.
Рост open source
Пользователи Linux наслаждаются надёжностью и стабильностью этой ОС, и это принцип архитектуры системы она позаимствовала у Unix: операционная система может оставаться одинаковой, при этом расширяя свои границы и осваивая новые виды технологий. Частью удовольствия от Linux и open source является ощущение исследования, возникающее при изучении новой команды, и ощущение успеха, когда она срабатывает и делает вашу жизнь проще. Узнайте о последних тенденциях Linux и приступите к изучению чего-то нового уже сегодня!
На правах рекламы
VDSina предлагает виртуальные серверы под любые задачи, огромный выбор операционных систем для автоматической установки, есть возможность установить любую ОС с собственного ISO, удобная панель управления собственной разработки и посуточная оплата.
Источник
Семь причин, почему Линукс
Linux доминирует на всех типах компьютеров, кроме настольных (десктопы и ноуты) и, наверное, мейнфреймов. Встроенные системы, мобильные, серверы-облака-суперкомпьютеры — везде преобладают системы на ядре Linux. Линукс провалился на десктопах и мейнфреймах только потому, что в сегментах этих доминируют монополии — Microsoft и IBM. И Майкрософт всеми силами старается удержать своё доминирование (IBM понемногу сдаёт позиции — переводит свои мейнфреймы на Linux).
Майкрософту на руку играет огромная экосистема Windows, её инерция, которая тащит за собой бизнес и домашних юзеров. Но и экосистема Linux сильно разрослась по сравнению с тем, что было лет 15 назад, и сейчас многим организациям и домашним пользователям есть резон перейти на Линукс. И даже не один, а целых семь.
Прозрачность
Linux и большинство софта его экосистемы имеют открытые/свободные лицензии вроде GPL и BSD. Это значит, что исходники программ не хранятся где-то в глубоких программистских копях корпораций, а лежат перед глазами всего мира на публичных серверах. Более того, процесс разработки этого софта тоже полностью открыт, каждое изменение зафиксировано и видно всем. Поэтому код постоянно проверяется децентрализованной сетью специалистов со всего мира на предмет ошибок, уязвимостей и зловредов. Если же изменения (патчи) может присылать любой желающий — такой софт совершенствуется быстрее проприетарного (с поправкой на популярность и модель разработки, конечно).
Доступность
Вы можете получить легальную (лицензионную) копию системы полностью бесплатно, скачав в интернете. Да, есть коммерческие дистрибутивы вроде RHEL, но в них вы платите за обновления и техподдержку. Сами эти дистрибутивы, опять же, можно легально скачать, не платя ни копейки. Предприятие или организация может сильно сэкономить на лицензиях, потому что пиратский софт для них крайне рискован и потому недопустим. На мой взгляд, рядовому домашнему пользователю тоже лучше не пользоваться пиратскими (взломанными) программами, даже несмотря на почти нулевой риск попасть под статью. Ведь взломанная система или программа может работать нестабильно. Да и что мешает пиратам-взломщикам засунуть в код какой-нибудь троян или рекламный модуль?
Имея хорошие скиллы в программировании (и не имея личной жизни), вы можете сами контролировать код программ, которые используете. Тоже совершенно легально. Для организаций и компаний это особенно удобно.
Безопасность
Чуть менее чем все зловреды, обитающие в глобальной сети, разработаны для Windows и её экосистемы. Linux хорошо защищает ваши локальные системы и сети от заразы вроде троянов, вирусов, майнеров, локеров, рекламных модулей.
Да, линуксовые серверы ломают и заражают часто, но большая часть атак происходит через приложения вроде веб-серверов/движков/и т.д. или через явные ошибки в администрировании системы. При надобности уровень защиты можно выкрутить до непробиваемого уровня с помощью hardened-инструментов вроде PaX и SELinux.
Я часто вижу беспечное отношение людей к безопасности своих домашних систем, мол, что этим хакерам с меня взять. На самом деле, у каждого в 2020 году можно много чего взять с компьютеров: рабочие учётки, аккаунты от банков и кошельков, и т.д. Да и личные/рабочие файлы можно потерять из-за какого-нибудь шифровальщика, тоже приятного мало. Хакерам же незачем пыхтеть ломать вручную конкретно вас, боты и вирусня делают всё сами в массовых масштабах.
Децентрализация
Открытые и свободные программы принадлежат сразу всем и никому конкретно. Благодаря этому разные компании, страны, организации, коллективы и даже одиночки вроде Патрика Фолькердинга делают собственные дистрибутивы (комплекты) Linux. Только самых популярных дистрибутивов не меньше десятка, а сколько их всего — неизвестно, потому что дистрибутив для своих внутренних нужд может сделать любая организация.
Как следствие, пользователю Линукса ни один человек, компания или государство не могут диктовать свои условия, особенно если у него есть ресурсы для локального контроля исходников. Да, есть главная ветка ядра, которой командует великий и ужасный (сейчас уже не такой ужасный) Линус Торвальдс, но есть и другие ветки, которыми командуют другие. Да, вы в одиночку скорее всего не сможете влиять на разработку компонентов системы или приложений, но вы можете блокировать или фильтровать изменения. Здесь всё упирается в количество проприетарного софта — чем его больше у вас, тем меньше у вас контроля над происходящим (а проприетарный софт есть и на Линуксах).
Гибкость и разнообразие
Разные дистрибутивы зачастую серьёзно отличаются друг от друга, несмотря на массу всяких Болженосов, у которых из уникальных фич только нескучные обои. Какие-то дистрибутивы делают упор на корпоративную экосистему и поддержку (RHEL, SLED, Fedora, Ubuntu, Calculate), какие-то — на универсальность и мощь (Debian, openSUSE, Arch). Есть узкоспециализированные варианты (медиа-центры, рабочие станции, системы для оборудования и роботов), есть легковесные сборки, есть секурные дистрибутивы для безопасников и Kali для их ночных кошмаров. NixOS и Gentoo предлагают мощные инфраструктуры для кастомизации систем и прикладного софта, для создания заточенных под конкретные задачи сборок. Есть Линуксы для православных и сатанистов (я не шучу), для музыкантов и видеомонтажёров, игровые и образовательные сборки.
Если у вас возникает надобность решить какую-то компьютерную задачу — возможно, для неё уже сделан дистрибутив Линукса.
Масштабируемость
Ядро Linux работает и на встроенных системах, и на суперкомпьютерах. В Линуксах нет искусственных ограничений на количество процессоров, ядер, оперативной памяти, и так далее. Фактически, вы можете скопировать Линукс со своего ноута на взрослый сервер, и он будет работать без проблем. Привет, Microsoft, который даже на Windows 10 Pro не даёт нормально работать больше чем с 64 ядрами 🙂
Это работает и в обратную сторону — любому одиночке-энтузиасту доступны все взрослые возможности вроде упомянутых выше hardened-инструментов или софта для промышленного оборудования и сервисов.
Простота
Да, настольный Linux проще в обращении, чем Windows. Всё, что нужно делать — это ставить-удалять программы через менеджер пакетов и обновлять систему через него же (да и апдейты ставить вас никто не заставляет). Вы избавлены от головной боли поиска и скачивания программ, в которых зачастую то реклама, то куча левых программ впридачу, то вообще зараза какая-нибудь. Система со временем почти не накапливает ошибок и глюков, хотя количество установленных-удалённых пакетов может исчисляться тысячами. Я, например, уже пятый год таскаю за собой Линукс с компа на комп простым копированием корня и домашнего каталога.
Если вам хватает линуксового софта, а железо ваше нормально поддерживается Линуксом, то затруднить переход вам могут только накопленные на Windows привычки и паттерны.
Источник
Изучите необходимый минимум Linux, чтобы быть продуктивным
Разные операционные системы длительное время обслуживают различные аудитории: Windows — бизнес-профессионалов, Mac — творческих, а Linux — разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.
В реальности знания и опыт — динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что «можно иметь способности только к чему-то одному» — это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас есть способности ко многим видам деятельности.
Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.
Почему современные бизнес-аналитики должны знать Linux
Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.
В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров — популярная система контроля версий (VCS), которая называется git. Разработчики могли написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux — экосистема, в которой уже были все необходимые инструменты.
Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:
- Базовые задачи, вроде парсинга файлов, рабочего планирования и поиска текста используются чаще, чем запуск утилиты командной строки.
- Языки программирования (Python, C++) и связанные с ними библиотеки выкидывают ошибки, потому что они ожидают конкретных параметров Linux или специфических локаций файловой системы.
Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов — экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.
Теперь давайте рассмотрим базовые идеи Linux.
Фундаментальная единица Linux: «оболочка»
Shell (оболочка, также известная как терминал, консоль или командная строка) — это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется bash. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию «навести-кликнуть» по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.
Изучаем несколько важных концептов
В сравнении с достаточно зрелым языком программирования, bash имеет всего несколько основных концептов, которые необходимо выучить. Как только вы охватите это, остаток bash — простое запоминание. Я переформулирую понятней: хорошо разбираться в bash значит запомнить 20-30 команд и их часто используемые аргументы.
Linux кажется непроницаемым для тех, кто не касается разработки, из-за способа, которым разработчики (не напрягаясь) извергают эзотерические команды терминала, когда им захочется. Правда в том, что они хорошо знают только несколько десятков команд — за всем более сложным они так же (как и все смертные) обращаются в Google.
Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.
Командный синтаксис
Команды соответствуют синтаксису:
Например, в ‘grep -inr’, grep — это команда (для поиска текстовой строки) и -inr это флаги/аргументы, которые меняют то, что grep выполняет по умолчанию. Единственный способ понять, что это значит, поискать что-то о них через Google или просто ввести ‘man grep’. Я рекомендую выучить команды и их самые используемые аргументы: слишком обременительно помнить, что делает каждый флаг.
Псевдонимы директорий
- Текущая директория (где я?): .
- Родительская директория текущей директории: ..
- Домашняя директория пользователя:
Например, чтобы поменять текущую директорию на родительскую директорию нужно ввести: cd ..
Таким же способом, чтобы скопировать файл, расположенный в «/path/to/file.txt» в текущую директорию, нужно ввести cp /path/to/file.txt . (заметьте, что в конце команды точка). Поскольку это всего лишь псевдонимы, вместо них может использоваться реальное имя пути.
Полезная информация
У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.
STDIN / STDOUT
Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется стандартным вводом (STDIN).
Всё, что программа выводит в ответе в терминал (например текст из файла), называется стандартным выводом (STDOUT)
Конвейер (piping)
Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.
пример: echo ‘test text’ | wc -l
Символ «больше» принимает STDOUT от команды слева и записывает/перезаписывает в новый файл справа
пример: ls > tmp.txt
Два символа «больше» принимают STDOUT от команды слева и добавляют к новому или существующему файлу справа.
пример: date >> tmp.txt
Шаблоны поиска (wildcards)
Можете представить это как символ % в SQL. Например, можно написать WHERE first_name LIKE ‘John%’ , чтобы найти любые позиции, где данные начинаются с имени John.
В bash можно написать John* . Если вы хотите вывести список всех файлов в какой-то папке, заканчивающихся на «.json», пишете : ls *.json
Завершение с помощью tab
Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.
Однако, стоит попробовать что-то вроде zsh или fish для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.
Выход
Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень часто повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего q. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.
Что я помню из команд bash
Это те команды, которые я использую чаще всего в Linux (начиная от самых часто используемых к самым редко используемым). Как я уже писал раньше, знание всего горстки команд поможет выполнять большой набор необходимых программируемых задач.
- cd
изменить директорию - ls -lha вывести директорию в виде списка (подробного)
- vim или nano редактор командной строки
- touch
создать новый пустой файл - cp -R
скопировать файл или директорию (и всё их содержимое) - mv
переместить или переименовать файл - rm
удалить файл - rm -rf
удалить файл или папку без возможности восстановления [использовать аккуратно!] - pwd вывести текущую рабочую директорию
- cat или less или tail или head -n10
вывести в STDOUT содержимое файла - mkdir
создать пустую директорию - grep -inr
найти строку в любом файле этой директории или дочерних директориях
column -s, -t отобразить разделенный запятыми файл в виде столбцов
ssh
tree -LhaC 3 показать структуру директории на 3 уровнями вглубь (с размерами файлов и включая скрытые директории)
htop (или top ) диспетчер задач
pip install —user
pushd . ; popd ; dirs; cd — push/pop/view директорию в стек + изменить обратно на последнюю директорию
sed -i «s/
find . -type f -name ‘*.txt’ -exec sed -i «s/
tmux new -s session, tmux attach -t session создать новую сессию терминала без создания нового окна [продвинутый уровень]
wget загрузить веб-страницу или веб-ресурс
curl -X POST -d «
find вывести список всего содержимого директории и её дочерних директорий рекурсивно
Читайте также
Продвинутые и не часто используемые команды
Я считаю хорошей практикой хранить список команд, которые полезны в определённых ситуациях, даже если подобные ситуации случаются редко (например, какой процесс блокирует конкретный сетевой порт). Вот несколько нестандартных команд, которые у меня всегда под рукой:
- lsof -i :8080 вывести список дескрипторов открытых файлов ( -i — флаг для сетевых интерфейсов)
- netstat | head -n20 вывести список открытых интернет/UNIX сокетов и связанной с ними информации
- dstat -a транслировать текущий диск, сеть, активность CPU и другое
- nslookup найти hostname для удалённого IP-адреса
- strace -f -e отследить системные вызовы программы ( -e — флаг для фильтрования конкретных системных вызовов)
- ps aux | head -n20 вывести текущие активные процессы
- file проверить тип файла (например исполняемый, бинарный, текстовый файл с кодировкой ASCII)
- uname -a информация о ядре ОС
- lsb_release -a информация об ОС
- hostname проверить hostname текущего компьютера (например, название, чтобы другие компьютеры могли иметь доступ к вашему)
- pstree визуализировать форки процессов
- time исполнить команду и составить статистику о том, сколько времени потребовалось на исполнение
- CTRL + z ; bg; jobs; fg отправить процесс в текущий tty в background и обратно на передний план
- cat file.txt | xargs -n1 | sort | uniq -c посчитать количество уникальных слов в файле
- wc -l количество строк в файле
- du -ha показать размер на диске для директорий и их содержимого
- zcat вывести содержимое заархивированного текстового файла
- scp скопировать файл с удалённого на локальный сервер или наоборот
- man
показать инструкцию, (т.е. документацию) для команды (но скорее всего легче использовать Google)
Никогда не останавливайтесь:
В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Источник