Основные команды Linux для начинающих
Содержание
- 1 Основные команды Linux для начинающих
Linux — это ядро операционной системы. Возможно, вы слышали о UNIX. Ну, так вот, Linux — это клон UNIX. Он был создан Линусом Торвальдсом из Scratch. Linux является бесплатным и имеет открытый исходный код — вы можете просто изменить что-либо в Linux и распространять это под своим названием! Существует несколько сборок на основе Linux, обычно называемых дистрибутивами.
- Ubuntu Linux
- Red Hat Enterprise Linux
- Linux Mint
- Debian
- Fedora
Linux в основном используется на серверах. Около 90% интернета работает на серверах Linux и вот почему.
Linux бесплатный,а основной проблемой использования Windows-серверов является их стоимость. Linux быстрый: ОС, которая работает примерно на 80% смартфонов в мире, Android, также сделана из ядра Linux. Linux безопасный, а большинство вирусов в мире работают на Windows.
Запуск команды top и расшифровка таблицы
Подключитесь к серверу по SSH и введите в консоли top — Enter и вы увидите таблицу, в которой выведен список запущенных процессов. Изначально перечень составлен в порядке убывания нагрузки, приходящейся на процессор.
О том, как сортировать данные по критерию, который нужен вам, поговорим дальше. А сейчас давайте рассмотрим, как расшифровать столбцы в таблице и о чем свидетельствуют значения в каждом из них.
Первые два столбика — номер процесса (PID) и имя пользователя, его запустившего (USER).
Следующие 2 столбца показывают, какой приоритет имеет процесс в данный момент (PR) и приоритет, присвоенный ему командой NICE (NI).
Информация, содержащаяся в других колонках, характеризует непосредственно уровень потребления ресурсов. Расшифровываются они следующим образом:
**VIRT — виртуальная память, которую использует процесс
**RES — физическая память, занятая данным процессом
**SHR — общий объем памяти, которую данный процесс делит с другими
**S — текущий статус процесса: R — running; S — sleeping, Z — zombie
**%CPU — процент используемого времени центрального процессора
**%MEM — процент ОЗУ, используемой процессом
**TIME+ — продолжительность работы процесса с момента запуска
**COMMAND — название команды (программы), которая инициировала процесс.
Базовый цикл командной оболочки
В первую очередь нам нужно подумать о том, как программа должна запускаться. И здесь важно понимать, что делает оболочка во время цикла. Простой способ обработки команд состоит из трех шагов:
- Чтение: считывание команды со стандартных потоков.
- Парсинг: распознавание программы и аргументов во входной строке.
- Исполнение: запуск распознанной команды.
Эта идея реализована в функции lsh_loop() :
Пройдемся по коду. Первые несколько строк — это просто объявления. Цикл с постусловием более удобен для проверки состояния переменной, поскольку выполняется перед проверкой ее значения. Внутри цикла выводится приглашение ввода, вызываются функции для чтения входной строки и разбиения строки на аргументы, а затем исполняются аргументы. Далее освобождается память, выделенная под строку и аргументы. Стоит обратить внимание, что в коде используется переменная состояния, возвращаемая в lsh_execute() и определяющая, когда нужно выйти из функции.
Команды Linux для управления пакетным менеджером
Установку и удаление приложений в Linux выполняют пакетные менеджеры. В Ubuntu и Debian пакетный менеджер называется apt, в Fedora — dnf, в Arch и Manjaro — pacman. Они загружают приложения из сетевых репозитариев, источников пакетов. Давать им команды следует с правами суперпользователя.
apt (Debian/Ubuntu/Mint)
- sudo apt install имя_пакета . Установить нужный пакет.
- sudo apt-add-repository адрес_репозитария . Добавить сторонний репозитарий.
- sudo apt update . Обновить сведения о пакетах.
- sudo apt upgrade . Обновить все пакеты до самых свежих (выполнять после apt update ).
- sudo apt remove имя_пакета . Удалить ненужный пакет.
- sudo apt purge имя_пакета . Удалить ненужный пакет со всеми зависимостями, если хотите освободить больше места.
- sudo apt autoremove . Удалить все ненужные зависимости, бесхозные пакеты и прочий мусор.
dnf (Red Hat/Fedora/CentOS)
- sudo dnf install имя_пакета . Установить нужный пакет.
- sudo dnf config-manager —add-repo адрес_репозитария . Добавить сторонний репозитарий.
- sudo dnf upgrade . Обновить все пакеты до самых свежих.
- sudo dnf remove имя_пакета . Удалить ненужный пакет.
- sudo dnf autoremove . Удалить все ненужные зависимости.
pacman (Arch/Manjaro)
- sudo pacman -S имя_пакета . Установить нужный пакет.
- sudo yaourt -S имя_пакета . Установить пакет из AUR, если его нет в основном репозитарии.
- sudo pacman -Sy . Обновить сведения о пакетах.
- sudo pacman -Syu . Обновить все пакеты до самых свежих.
- sudo pacman -R имя_пакета . Удалить ненужный пакет.
- sudo pacman -Rs имя_пакета . Удалить ненужный пакет со всеми зависимостями.
Вы можете устанавливать и удалять сразу несколько пакетов, просто перечисляя их через пробел.
sudo apt install firefox clementine vlc
Если вы хотите установить какой-то пакет, но не знаете его точного названия, введите несколько первых букв имени пакета и дважды нажмите Tab. Пакетный менеджер покажет все пакеты, названия которых начинаются одинаково.
Запуск команды top и расшифровка таблицы
Подключитесь к серверу по SSH и введите в консоли top — Enter и вы увидите таблицу, в которой выведен список запущенных процессов. Изначально перечень составлен в порядке убывания нагрузки, приходящейся на процессор.
О том, как сортировать данные по критерию, который нужен вам, поговорим дальше. А сейчас давайте рассмотрим, как расшифровать столбцы в таблице и о чем свидетельствуют значения в каждом из них.
Первые два столбика — номер процесса (PID) и имя пользователя, его запустившего (USER).
Следующие 2 столбца показывают, какой приоритет имеет процесс в данный момент (PR) и приоритет, присвоенный ему командой NICE (NI).
Информация, содержащаяся в других колонках, характеризует непосредственно уровень потребления ресурсов. Расшифровываются они следующим образом:
**VIRT — виртуальная память, которую использует процесс
**RES — физическая память, занятая данным процессом
**SHR — общий объем памяти, которую данный процесс делит с другими
**S — текущий статус процесса: R — running; S — sleeping, Z — zombie
**%CPU — процент используемого времени центрального процессора
**%MEM — процент ОЗУ, используемой процессом
**TIME+ — продолжительность работы процесса с момента запуска
**COMMAND — название команды (программы), которая инициировала процесс.
Изучите необходимый минимум 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
- CTRL+c
- q
- exit
- Python: quit()
- Nano: CTRL+x
- Vim: :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 вывести список всего содержимого директории и её дочерних директорий рекурсивно
Читайте также
Продвинутые и не часто используемые команды
Я считаю хорошей практикой хранить список команд, которые полезны в определённых ситуациях, даже если подобные ситуации случаются редко (например, какой процесс блокирует конкретный сетевой порт). Вот несколько нестандартных команд, которые у меня всегда под рукой:
Linux Shell или «Терминал»
Linux Shell — это программа, которая получает команды от пользователя и передает их ОС для обработки и показывает выходные данные. Shell Linux является его основной частью. Большинство дистрибутивов поставляются с графическим интерфейсом пользователя (GUI), но в основном в серверных Linux используется CLI (интерфейс командной строки).
В этом руководстве мы рассмотрим основные команды, которые мы используем в оболочке Linux.
Чтобы открыть терминал, нажмите Ctrl + Alt + T в Ubuntu или нажмите Alt + F2, введите gnome-терминал и нажмите ввод. В Raspberry Pi введите lxterminal.
Примеры
Прежде чем перейти непосредственно к исполнению команды kill, следует сделать ряд важных замечаний:
- Пользователь может прервать любой свой процесс.
- Пользователь не может прервать процесс другого пользователя..
- Суперпользователь (root) может прервать системный процесс и процесс любого пользователя.
- Пользователь не может прервать системный процесс
Чтобы “убить” процесс с указанным PID, нужно выполнить следующую команду (приведен пример для процесса mysqld из предыдущего раздела):
Будет “убит” процесс с PID=1684, то есть mysqld.
Можно использовать не только номер, но и название сигнала/ Например, для запроса на прерывание, который можно обработать или проигнорировать:
Аналогично, команда kill -SIGKILL PID эквивалентна команде # kill -9 PID
Для прерывания нескольких процессов можно указать их идентификаторы через пробел:
Подводя итоги
Очевидно, что эта оболочка не является многофункциональной. Некоторые из ее упущений:
- аргументы разделяются только пробелами, нет поддержки кавычек или обратного слеша;
- нет перенаправления и конвейеров;
- мало встроенных функций;
- нет подстановки имён файлов.
Чтобы разобраться в системных вызовах, рекомендуем обратиться к мануалу: man 3p . Если вы не знаете, какой интерфейс вам предлагают стандартная библиотека C и Unix, советуем посмотреть спецификацию POSIX, в частности раздел 13.