- Знакомство с Linux
- Изучите необходимый минимум Linux, чтобы быть продуктивным
- Почему современные бизнес-аналитики должны знать Linux
- Фундаментальная единица Linux: «оболочка»
- Изучаем несколько важных концептов
- Командный синтаксис
- Псевдонимы директорий
- Полезная информация
- STDIN / STDOUT
- Конвейер (piping)
- Шаблоны поиска (wildcards)
- Завершение с помощью tab
- Выход
- Что я помню из команд bash
- Читайте также
- Продвинутые и не часто используемые команды
- Никогда не останавливайтесь:
Знакомство с Linux
Как всё началось
А началось всё в 2005(?) году (через год после появления у меня компьютера), когда я взял у одноклассника диск с Ubuntu 5.10. Он, в свою очередь, достался ему от друга, который получил их «пачку на халяву». Я тогда и знать — не знал, слышать – не слышал про какой-то там Linux и пользовался (играл в игрушки, конечно!) Windows XP. С английским тоже было плохо (первый ин. яз. — немецкий), а на коробочке всё на английском! Я долго (месяца два) на неё смотрел и наконец решил, что надо попробовать.
Благо, к тому времени опыт переустановки Windows уже был и эти синих установочных экранов я уже не пугался. Побил жёсткий диск из-под Windows. загрузился с установочного CD, начал установку. С третьей попытки поставил. Загружаюсь. Загрузчик уже красивый, далее – какие-то странные звуки (приветствие) и коричневый рабочий стол с коричневым же оформлением окон. Ну и что делать дальше? Где мои диски с содержимым Windows? Где моя музыка? Как оказалось потом NTFS-разделы он не читал, mp3 проигрывать не мог, да и вообще было как-то плохо всё понятно. Начал изучать методом научного тыка. Первое, что понравилось – рабочие столы, но привык не сразу – на кой их так много (4 рабочих стола)? Потом стал пробовать встроенные игрушки. И, собственно, всё – больше ничего интересного не нашёл. Из-под Windows слазил в интернет (по GPRS – ужасно дорого было, но всё же хочется узнать что с этой Ubuntu можно ещё делать) на форумы, почитал и ничего не понял. Так прошло ещё пара месяцев и интерес мой погас.
Потом я у дяди видел Linux на его домашнем компьютере и снова заинтересовался этой операционкой. У меня появилось 2-3 DVD с софтом под Linux. Радости не было предела – наконец-то я смогу хоть что-то делать в Ubuntu (слушать mp3, смотреть видео. ). «Тщательно» изучил инструкцию по установке на английском языке и начал пытаться устанавливать rpm на Ubuntu… А устанавливал я AmaroK. Выяснилось (только как?), что не хватает Qt/KDE библиотек. Потом ещё что-то не устанавливалось (не удивительно. ). В то время я не знал ни про какие разделения на X-систему, менеджера окон, графическую подсистему… Для меня Gnome, Nautilus и Ubuntu было одним целым. Именно тогда я проклял этот самый Gnome не зная что это всего лишь часть Linux.
Позже я спросил у дяди «какой-нибудь нормальный Linux» :), и он дал мне несколько дисков: Fedora Core, ASP Linux, и FreeBSD 6. Больше всего я слышал о Fedora и поэтому решил поставить сначала её (про виртуальные машины я, естественно, ещё ничего не знал). Диска было всего три и при установке системы со второго диска возникала ошибка и установка прерывалась. Fedora так и не пошла у меня. Далее следовал ASP Linux в отсканированной «фирменной» обложке с русским описанием. Установка в графическом режиме пошла только с третьего раза, а после установки и ввода логина и пароля всё намертво повисло. Перезагрузка и повторный ввод данных привели к тому же эффекту. ASP Linux тоже не пошёл. Пришло время FreeBSD. только текстовый установщик на английском меня сильно испугал, а когда пришлось размечать жёсткий диск ручками с fdisk’ом… Не помню как, но я его поставил! Как оказалось – без X’ов. Собственно, делать было нечего и я вернулся к Ubuntu. Ещё месяца два-три я мучился в поисках того самого «нормального Linux», а потом опять мой интерес угас.
Перейдя в другую школу, я на первом же уроке информатики увидел на учительском столе пачку (штук десять) тех самых коробочек с Ubuntu 5.10, а на мониторе рядом с учительским компьютером бегал в виде скринсэйвера текстовый чёртик BSD. Тогда я стал спрашивать у учителей про Linux, на что они отвечали, что сами ничего не знают, а заведует всем этим делом наш (не)злобный Админ. Админ оказался на самом деле незлобным и показал на сервере (тот самый, с чёртиком) место положения iso-образов, раздававшихся на школьные компьютеры. На вопрос «А что ты мне посоветуешь, как новичку?» я получил ответ – «Как совсем чайнику – Mandriva 2007. Записывай DVD – там софта больше.»
Ну я и записал. Установка прошла удивительно гладко, в графическом режиме. А на вопрос, что я хочу использовать GNOME или KDE я без раздумья ответил KDE (вспоминая добрым словом Gnome)! И, наконец, я загрузился в работающую систему, которая может «из коробки» играть мою музыку, которую видит на NTFS-разделах(!), клипы и… собственно, больше делать там пока было нечего. Потом я научился ставить разный софт, те самые rpm. И AmaroK тут работал просто на ура! Практически сразу я стал читать книгу «Linux для пользователя» Виктора Костромина и узнал и научился многому новому. Так меня Linux и затянул… Но делать там по-прежнему было нечего – игр-то не было! Потом я начал осваивать HTML, PHP и переполз с Windows на Linux, но не окончательно. Оказалось, что это реально удобно: Vim+Рабочие столы.
Наконец, осенью (через год после знакомства с Mandriva) я обновился с Mandriva 2007 Free до Mandriva 2008 PowerPack, списанной всё с того же школьного сервера. Так я и живу с Mandriva 2008 и жду новых релизов этого дистрибутива.
Источник
Изучите необходимый минимум 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)
Никогда не останавливайтесь:
В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Источник