- Не запускаются файлы .sh
- Запуск Bash в деталях
- Диаграмма
- Login Shell?
- Интерактивный?
- В оболочке входа?
- В интерактивной оболочке?
- Ни один вариант?
- Типичные трудности и эмпирические правила
- Задания cron
- Скрипты, вызывающие друг друга
- Образ Docker в песочнице
- Как определить и изменить командную оболочку (shell) в Linux
- Что такое командная оболочка
- Оболочки Linux
- Как определить текущую командую оболочку
- Способ 1
- Способ 2
- Способ 3
- Как посмотреть список оболочек, доступных в системе
- Как временно переключиться на другую оболочку
- Как изменить оболочку
- Заключение
- Unix shell: абсолютно первые шаги
- Зачем и для кого статья?
- Что такое шелл
- Где встречаются системы с командной строкой?
- Какие задачи разумно решать шеллом?
- Абсолютно первые шаги
- Начинаем работу: войти и выйти
- Кто я, где я?
- История команд (history)
- Copy-paste
- Ключи и опции
- Права
- STDIN, STDOUT, конвейеры (пайпы)
- Перенаправление ввода-вывода
- Что делать, когда что-то непонятно
- Методы работы
- Базовые команды
- Аналитика
- Диагностика системы
- Массовое и полуавтоматическое выполнение
- Разное
- Составление конвейера-однострочника
- Задания для тренировки
- Что изучать дальше?
- Кому это надо?
- Вопросы?
Не запускаются файлы .sh
Ubuntu Gnome 16.04.1 x86-64. Собственно, проблема. Поставил в наутилусе настройку чтобы спрашивал открыть текст или запустить, запускаю — ноль реакции. На Линукс минт циннамоне работало изначально, тут нет. Как можно решить?
А что в файле? Какой вывод ls -la?
ls -la показывает, что всё root. Хочу уточнить, что не работает не один файл, а все .sh, что я пробовал
а почему всё рут? из терминала работает вообще? Под каким юзером запускаешь? и +х есть?
Ну раз все root — значит, все заrootись! 🙂
А права на файл какие все же?
У него все рут, в этом случае обычный пользун ничего не сможет сделать с этим файлом, кроме как прочитать.
Тогда зарутиться и заюзать chown и можно применять chmod.
Вопрос только в том, есть ли у него доступ к руту.
Если это скрипт из какого-то системного пакета — то так лучше не делать. Хотя, кто его знает, инфы то нет 🙂
Как вариант — запусти скрипт из консоли и посмотри, что пишет. Авось, запускаемой программе зависимостей не хватает.
Согласен, всё зависит от конкретной ситуации.
Да, дейстительно, пишет что не хватает какой-то библиотеки. Сейчас попробую установить
Источник
Запуск Bash в деталях
Если вы нашли эту страницу в поиске, то наверняка пытаетесь решить какую-то проблему с запуском bash.
Возможно, в вашем окружении bash не устанавливается переменная среды и вы не понимаете, почему. Возможно, вы засунули что-то в различные загрузочные файлы bash или в профили, или во все файлы наугад, пока это не сработало.
В любом случае, смысл этой заметки — как можно проще изложить процедуру запуска bash, чтобы вы могли справиться с проблемами.
Диаграмма
Эта блок-схема обобщает все процессы при запуске bash.
Теперь подробнее рассмотрим каждую часть.
Login Shell?
Сперва нужно выбрать, находитесь вы в командной оболочке входа (login shell) или нет.
Оболочка входа — это первая оболочка, в которую вы попадаете при входе в систему для интерактивного сеанса. Оболочка входа не требует ввода имени пользователя и пароля. Вы можете форсировать запуск оболочки входа, добавив флаг —login при вызове bash , например:
Оболочка входа настраивает базовую среду при первом запуске оболочки bash.
Интерактивный?
Затем вы определяете, является оболочка интерактивной или нет.
Это можно проверить по наличию переменной PS1 (она устанавливает функцию ввода команд):
Или посмотреть, установлен ли параметр -i , с помощью специальной переменной дефиса — в bash, например:
Если в выдаче есть символ i , то оболочка является интерактивной.
В оболочке входа?
Если вы находитесь в оболочке входа, то bash ищет файл /etc/profile и запускает, если он существует.
Затем ищет любой из этих трёх файлов в следующем порядке:
Когда находит один, то запускает его и пропускает другие.
В интерактивной оболочке?
Если вы находитесь в интерактивной оболочке без входа в систему (non-login shell), предполагается, что вы уже побывали в оболочке входа, окружение настроено и будет унаследовано.
В этом случае выполняются по порядку следующие два файла, если они существуют:
Ни один вариант?
Если вы не находитесь ни в оболочке входа, ни в интерактивной оболочке, то ваше окружение действительно будет пустым. Это вызывает большую путаницу (см. ниже о заданиях cron).
В этом случае bash смотрит на переменную BASH_ENV вашей среды и выполняет соответствующий файл, который там указан.
Типичные трудности и эмпирические правила
Задания cron
У меня в 95% случаев отладка запуска bash связана с тем, что задание cron работает не так, как ожидалось.
Эта проклятая задача работает нормально, когда я запускаю её в командной строке, но фейлится при запуске в crontab.
Здесь две причины:
- Задания cron не являются интерактивными.
- В отличие от скриптов в командной строке, задания cron не наследуют среду оболочки.
Обычно вы не замечаете или не заботитесь о том, что скрипт оболочки не является интерактивным, потому что среда наследуется от интерактивной оболочки. Это означает, что все PATH и alias настроены так, как вы ожидаете.
Вот почему зачастую приходится установить конкретный PATH для задачи cron, как здесь:
Скрипты, вызывающие друг друга
Обычно так происходит, когда кто-то пытался исправить какую-то ошибку и вроде бы всё заработало. К сожалению, когда нужно разделить эти разные типы сессий, то возникают новые проблемы.
Образ Docker в песочнице
Чтобы поэкспериментировать с запуском оболочки, я создал образ Docker, который можно использовать для отладки запуска оболочки в безопасной среде.
Для принудительного логина и имитации оболочки входа:
Для проверки набора переменных BASH_ENV :
Для отладки crontab каждую минуту выполнятся простой скрипт (в /root/ascript ):
Источник
Как определить и изменить командную оболочку (shell) в Linux
Что такое командная оболочка
Командная оболочка или командный интерпретатор в Linux — это программа, которая в текстовой среде выступает в качестве интерфейса между пользователем и операционной системой. Она интерпретирует вводимые команды с терминала и вызывает необходимые программы.
Когда вы работаете в терминале, именно командная оболочка обрабатывает вводимые вами команды. Более того, оболочки Linux поддерживают написание программ на языке оболочки.
Оболочки Linux
Одна из самых популярных командных оболочек — это оболочка Bash (Bourne Again Shell). Она используется по умолчанию в большинстве дистрибутивов Linux.
Существуют разные оболочки Linux. Можно отметить:
- bash
- csh
- dash
- fish
- ksh
- pdksh
- rbash
- sh
- tcsh
- zsh
Оболочки могут очень сильно отличаться друг от друга. Они отличаются функциональностью, синтаксисом команд, строкой приветствия, дружелюбностью к пользователю и другими параметрами и возможностями.
Как определить текущую командую оболочку
Есть несколько способов определить оболочку, используемую по умолчанию в вашей системе Linux. Рассмотрим несколько из них, так как в разных системах (и оболочках) какие-то способы могут не сработать.
Также нужно знать, что у разных пользователей системы могут использоваться разные оболочки.
Способ 1
Переменная окружения SHELL хранит путь до исполняемого файла оболочки. Выполним команду:
Из вывода команды, мы видим, что используется оболочка bash.
Способ 2
Также можно воспользоваться командой echo $0 . Данная команда выведет на экран имя текущего работающего процесса, внутри которого она выполнена. Так как мы выполняем команду внутри оболочки, то будет выведено имя оболочки.
Способ 3
Определим, работающий процесс оболочки командой ps.
Как посмотреть список оболочек, доступных в системе
Список оболочек, которые в данный момент установлены и доступны в системе Linux, хранится в файле /etc/shells
Выведем содержимое файла /etc/shells , для этого выполняем команду:
Как временно переключиться на другую оболочку
Чтобы временно переключиться на другую оболочку, достаточно выполнить в терминале команду, соответствующую ее имени. После этого вы переключитесь на новую оболочку.
Например, переключимся на оболочку sh. Выполняем команду:
Как изменить оболочку
Для изменения командной оболочки на постоянной основе служит команда chsh (от слов change shell).
Чтобы изменить оболочку текущего пользователя нужно выполнить команду:
В качестве параметра путь_новой_оболочки необходимо указать путь до исполняемого файла оболочки, который вы можете найти в файле /etc/shells (см. выше).
Например, изменим оболочку на sh. Для этого выполняем команду (при выполнении команды нужно будет ввести пароль):
После этого нужно выйти и снова войти в систему.
Чтобы изменить оболочку, используемую по умолчанию, для другого пользователя, то команде chsh необходимо указать имя этого пользователя:
Заключение
Мы рассмотрели, как определить текущую оболочку Linux, как просмотреть список доступных оболочек, а также как изменить оболочку, используемую по умолчанию.
Чтобы получить информацию о какой-либо оболочке (доступной в системе) можно воспользоваться Man-страницами. Например:
Дополнительные оболочки можно устанавливать средствами системы (из репозиториев). Например, для установки оболочки fish в Ubuntu Linux, выполните команду
Источник
Unix shell: абсолютно первые шаги
Зачем и для кого статья?
Изначально это была памятка для студентов, которые начинают работать с unix-подобными системами. Иными словами, статья рассчитана на тех, кто не имеет предыдущего опыта работы в unix-овой командной строке, но по тем или иным причинам хочет или должен научиться эффективно с нею взаимодействовать.
Здесь не будет пересказа манов (документации), и статья никак не отменяет и не заменяет их чтение. Вместо этого я расскажу о главных вещах (командах, приемах и принципах), которые надо осознать с самого начала работы в unix shell-е, чтобы работа происходила эффективно и приятно.
Статья касается полноценных unix-подобных окружений, с полнофункциональным шеллом (предпочтительно zsh или bash)и достаточно широким набором стандартных программ.
Что такое шелл
Shell (шелл, он же «командная строка», он же CLI, он же «консоль», он же «терминал», он же «черное окошко с белыми буковками») — это текстовый интерфейс общения с операционной системой (ну, строго говря, это программа, которая таковой интерфейс обеспечивает, но сейчас это различие несущественно).
В целом работа через шелл выглядит так: пользователь (т.е. вы) с клавиатуры вводит команду, нажимает Enter, система выполняет команду, пишет на экран результат выполнения, и снова ожидает ввода следующей команды.
Типичный вид шелла:
Шелл — это основной способ для взаимодействия со всеми Unix-подобными серверными системами.
Где встречаются системы с командной строкой?
Где вас может поджидать unix-овый шелл, популярные варианты:
- MacOS (bash);
- удаленный доступ на сервер по работе или для личного веб-проекта;
- домашний файл-сервер с удаленным доступом;
- Ubuntu, PC-BSD на ноутбуке/десктопе — unix-подобные системы сегодня просты в установке и использовании.
Какие задачи разумно решать шеллом?
Естественные задачи, для которых шелл пригоден, полезен и незаменим:
- интерактивная работа в терминале:
- выполнение компиляции, запуск заданий через make;
- сравнение текстовых файлов;
- быстрый ad-hoc анализ данных (количество уникальных ip в логе, распределение записей по часам/минутам и т.п.);
- разовые массовые действия (прибить много процессов; если работаете с системой контроля версий — ревертнуть или зарезолвить кучу файлов);
- диагностика происходящего в системе (семафоры, локи, процессы, дескрипторы, место на диске и т.п.);
- скриптование:
- установочные скрипты, для выполнения которых нельзя рассчитывать на наличие других интерпретаторов — это не для новичков;
- функции для кастомизации интерактивного шелла (влияющие на приглашение, меняющие каталог, устанавливающие переменные окружения) — тоже не совсем для новичков;
- одноразовые скрипты типа массового перекодирования файлов;
- makefile-ы.
Абсолютно первые шаги
Начинаем работу: войти и выйти
Убедитесь, что точно знаете, как запустить шелл и как из него выйти.
Если вы работаете за машиной, на которой установлена Ubuntu, вам надо запустить программу Terminal. По окончании работы можно просто закрыть окно.
На MacOS — тоже запустить Terminal.
Для доступа к удаленному серверу — воспользоваться ssh (если локально у вас MacOS, Ubuntu или другая unix-like система) или putty (если у вас Windows).
Кто я, где я?
Выполните следующие команды:
- hostname — выводит имя машины (сервера), на которой вы сейчас находитесь;
- whoami — выводит ваш логин (ваше имя в системе);
- tree -d / |less — псевдографическое изображение дерева каталогов на машине; выход из пролистывания — q ;
- pwd — выводит каталог, в котором вы сейчас находитесь; в командной строке вы не можете быть «просто так», вы обязательно находитесь в каком-то каталоге (=текущий каталог, рабочий каталог). Вероятно, текущий рабочий каталог выводится у вас в приглашении (prompt).
- ls — список файлов в текущем каталоге; ls /home — список файлов в указанном каталоге;
История команд (history)
Важное свойство полноценной командной строки — история команд.
Выполните несколько команд: hostname , ls , pwd , whoami . Теперь нажмите клавишу «вверх». В строке ввода появилась предыдущая команда. Клавишами «вверх» и «вниз» можно перемещаться вперед и назад по истории. Когда долистаете до hostname , нажмите Enter — команда выполнится еще раз.
Команды из истории можно не просто выполнять повторно, а еще и редактировать. Долистайте историю до команды ls , добавьте к ней ключ -l (получилось ls -l , перед минусом пробел есть, а после — нет). Нажмите Enter — выполнится модифицированная команда.
Пролистывание истории, редактирование и повторное выполнение команд — самые типичные действия при работе в командной строке, привыкайте.
Copy-paste
Командная строка очень текстоцентрична: команды — это текст, входные данные для большинства стандартных программ — текст, результат работы — чаще всего тоже текст.
Прекрасной особенностью текста является то, что его можно копировать и вставлять, это верно и для командной строки.
Попробуйте выполнить команду date +»%y-%m-%d, %A»
Вводили ли вы ее целиком руками или скопировали из статьи? Убедитесь, что вы можете ее скопировать, вставить в терминал и выполнить.
После того, как научитесь пользоваться man ‘ом, убедитесь, что можете скопировать и выполнить примеры команд из справки. Для проверки найдите в справке по программе date раздел EXAMPLES , скопируйте и выполните первый приведенный пример (на всякий случай: знак доллара не является частью команды, это условное изображение приглашения к вводу).
Как именно копировать текст из терминала и вставлять его в терминал — зависит от вашей системы и от ее настроек, поэтому дать универсальную инструкцию, к сожалению, не получится. На Ubuntu попробуйте так: копирование — просто выделение мышью, вставка — средняя кнопка мыши. Если не работает, или если у вас другая система — поищите в Интернете или спросите более опытных знакомых.
Ключи и опции
При исследовании истории команд вы уже столкнулись с тем, что у команды ls есть по крайней мере два варианта. Если вызвать ее просто так, она выводит простой список:
Если же добавить ключ -l , к каждому файлу выводится подробная информация:
Это очень типичная ситуация: если к вызову команды добавлять специальные модификаторы (ключи, опции, параметры), поведение команды меняется. Сравните: tree / и tree -d / , hostname и hostname -f .
Кроме того, команды могут принимать в качестве параметров имена файлов, каталогов или просто текстовые строки. Попробуйте:
man — справка по командам и программам, доступным на вашей машине, а также по системным вызовам и стандартной библиотеке C.
Попробуйте: man grep , man atoi , man chdir , man man .
Пролистывание вперед и назад делается кнопками «вверх», «вниз», «PageUp», «PageDown», выход из просмотра справки — кнопкой q . Поиск определенного текста в справочной статье: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям — клавиша n .
Все справочные статьи делятся на категории. Самые важные:
- 1 — исполняемые программы и шелльные команды ( wc , ls , pwd и т.п.);
- 2 — системные вызовы ( fork , dup2 и т.п.)
- 3 — библиотечные функции ( printf , scanf , cos , exec ).
Указывать, из какой именно категории надо показать справку, нужно в случаях совпадений имен. Например, man 3 printf описывает функцию из стандартной библиотеки C, а man 1 printf — консольную программу с таким же именем.
Посмотреть список всех доступных на машине справочных статей можно с помощью команды man -k . (точка — тоже часть комады).
Когда в небольшом окне терминала надо просмотреть очень длинный текст (содержимое какого-то файла, длинный man и т.п.), используют специальные программы-«пейджеры» (от слова page/страница, то есть постраничные листатели). Самый популярный листатель — less , и именно он обеспечивает вам пролистывание, когда вы читаете man-ы.
Попробуйте и сравните поведение:
Можно передать файл в пролистыватель сразу в параметрах:
Пролистывание вверхи и вниз — кнопки «вверх», «вниз», «PageUp», «PageDown», выход — кнопка q . Поиск определенного текста: нажимите / (прямой слеш), введите текст для поиска, нажимите Enter. Перемещение к следующим вхождениям — клавиша n . (Узнаете инструкцию про man ? Ничего удивительного, для вывода справки тоже используется less .)
Права
С любым файлом или каталогом связан набор «прав»: право на чтение файла, право на запись в файл, право исполнять файл. Все пользователи делятся на три категории: владелец файла, группа владельца файла, все прочие пользователи.
Посмотреть права на файл можно с помощью ls -l . Например:
Этот вывод означает, что владельцу (akira) можно читать и писать файл, группе (students) — только читать, всем прочим пользователя — тоже только читать.
Если при работе вы получаете сообщение permission denied , это значит, что у вас недостаточно правна объект, с которым вы хотели работать.
Подробнее читайте в man chmod .
STDIN, STDOUT, конвейеры (пайпы)
С каждой исполняющейся программой связаны 3 стандартных потока данных: поток входных данных STDIN , поток выходных данных STDOUT , поток для вывода ошибок STDERR .
Запустите программу wc , введите текст Good day today , нажмите Enter, введтие текст good day , нажмите Enter, нажмите Ctrl+d. Программа wc покажет статистику по количеству букв, слов и строк в вашем тексте и завершится:
В данном случае вы подали в STDIN программы двухстрочный текст, а в STDOUT получили три числа.
Теперь запустите команду head -n3 /etc/passwd , должно получиться примерно так:
В этом случае программа head ничего не читала из STDIN , а в STDOUT написала три строки.
Можно представить себе так: программа — это труба, в которую втекает STDIN , а вытекает STDOUT .
Важнейшее свойство юниксовой командной строки состоит в том, что программы-«трубы» можно соединять между собой: выход ( STDOUT ) одной программы передавать в качестве входных данных ( STDIN ) другой программе.
Такая конструкция из соединенных программ называется по-английски pipe (труба), по-русски — конвейер или пайп.
Объединение программ в конвейер делается символом | (вертикальная черта)
Выполните команду head -n3 /etc/passwd |wc , получится примерно следующее:
Произошло вот что: программа head выдала в STDOUT три строки текста, которые сразу же попали на вход программе wc , которая в свою очередь подсчитала количество символов, слов и строк в полученном тексте.
В конвейер можно объединять сколько угодно программ. Например, можно добавить к предыдущему конвейеру еще одну программу wc , которая подсчитает, сколько слов и букв было в выводе первой wc :
Составление конвейеров (пайпов) — очень частое дело при работе в командной строке. Пример того, как это делается на практике, читайте в разделе «Составление конвейера-однострочника».
Перенаправление ввода-вывода
Вывод ( STDOUT ) програмы можно не только передать другой программе по конвейеру, но и просто записать в файл. Такое перенаправление делается с помощью > (знак «больше»):
В результате выполнения этой команды на диске появится файл /tmp/today.txt . Посмотрите его содержимое с помощью cat /tmp/today.txt
Если файл с таким именем уже существовал, его старое содержимое будет уничтожено. Если файл не существовал, он будет создан. Каталог, в котором создается файл, должен существовать до выполнения команды.
Если надо не перезаписать файл, а добавить вывод в его конец, используйте >> :
Проверьте, что теперь записано в файле.
Кроме того, программе можно вместо STDIN передать любой файл. Попробуйте:
Что делать, когда что-то непонятно
Если вы сталкиваетесь с поведением системы, которое не понимаете, или хотите добиться определенного результата, но не знаете, как именно, советую действовать в следующем порядке (кстати, это относится не только к шеллам):
- насколько возможно четко сформулируйте вопрос или задачу — нет ничего сложнее, чем решать «то, не знаю что»;
- вспомните, сталкивались ли вы уже с такой же или подобной проблемой — в этом случае стоит попробовать решение, которое сработало в прошлый раз;
- почитайте подходящие man-ы (если понимаете, какие man-ы подходят в вашем случае) — возможно, вы найдете подходящие примеры использования команд, нужные опции или ссылки на другие команды;
- подумайте: нельзя ли немного поменять задачу? — возможно, чуть-чуть изменив условия, вы получите задачу, которую уже умеете решать;
- задайте свой четко сформулированный вопрос в поисковой системе — возможно, ответ найдется на Stack Overflow или других сайтах;
Если ничего из перечисленного не помогло — обратитесь за советом к преподавателю, опытному коллеге или товарищу. И не бойтесь задавать «глупые» вопросы — не стыдно не знать, стыдно не спрашивать.
Если вы разобрались со сложной проблемой (самостоятельно, с помощью Интернета или других людей) — запишите свое решение на случай, если такая же проблема снова возникнет у вас или ваших товарищей. Записывать можно в простой текстовый файл, в Evernote, публиковать в соц.сетях.
Методы работы
Скопировать-и-вставить — из man-ов, из статей на StackOverflow и т.п.Командная строка состоит из текста, пользуйтесь этим: копируйте и используйте примеры команд,записывайте удачные находки на память, публикуйте их в твиттерах и блогах.
Читать man. Nuff said.
Вытащить из истории предыдущую команду, добавить в конвейер еще одну команду, запустить, повторить.См. также раздел «Составление конвейера-однострочника».
Базовые команды
- переход в другой каталог: cd ;
- просмотр содержимого файлов: саt , less , head , tail ;
- манипуляции с файлами: cp , mv , rm ;
- просмотр содержимого каталогов: ls , ls -l , ls -lS ;
- структура каталогов: tree , tree -d (можно передать в качестве параметра каталог);
- поиск файлов: find . -name . ;
Аналитика
- wc , wc -l ;
- sort -k — сортировка по указанному полю;
- sort -n — числовая соритровка;
- diff — сравнение файлов;
- grep , grep -v , grep -w , grep ‘\ ‘ , grep -E — поиск текста;
- uniq , uniq -c — уникализация строк;
- awk — в варианте awk ‘
‘ , чтобы оставить только первое поле из каждой строки, $1 можно менять на $2 , $3 и т.д.;
Диагностика системы
- ps axuww — информация о процессах (запущенных программах), работающих на машине;
- top — интерактивный просмотр самых ресурсоемких процессов;
- df — занятое и свободное место на диске;
- du — суммарный размер файлов в каталоге (рекурсивно с подкаталогами);
- strace , ktrace — какие системные вызовы выполняет процесс;
- lsof — какие файлы использует процесс;
- netstat -na , netstat -nap — какие порты и сокеты открыты в системе.
Некоторых программ у вас может не быть, их надо установить дополнительно. Кроме того, некоторые опции этих программ доступны только привилегированным пользователям ( root ‘у).
Массовое и полуавтоматическое выполнение
На первых порах пропускайте этот раздел, эти команды и конструкции понадобятся вам тогда, когда доберетесь до несложного шелльного скриптинга.
- test — проврека условий;
- while read — цикл по строчкам STDIN ;
- xargs — подстановка строк из STDIN в параметры указанной программе;
- seq — генерация последовательностей натуральных чисел;
- () — объединить вывод нескольких команд;
- ; — выполнить одно за другим;
- && — выполнить при условии успешного завершения первой команды;
- || — выполнить при условии неудачного завершения первой команды;
- tee — продублировать вывод программы в STDOUT и в файл на диске.
Разное
- date — текущая дата;
- curl — скачивает документ по указаному url и пишет результат на STDOUT ;
- touch — обновить дату модификации файла;
- kill — послать процессу сигнал;
- true — ничего не делает, возвращает истину, полезна для организации вечных циклов;
- sudo — выполнить команду от имени root ‘а.
Составление конвейера-однострочника
Давайте рассмотрим пример реальной задачи: требуется прибить все процессы task-6-server , запущенные от имени текущего пользователя.
Шаг 1.
Понять, какая программа выдает примерно нужные данные, хотя бы и не в чистом виде. Для нашей задачи стоит получить список всех процессов в системе: ps axuww . Запустить.
Шаг 2.
Посмотреть на полученные данные глазами, придумать фильтр, который выкинет часть ненужных данных. Часто это grep или grep -v . Клавишей «Вверх» вытащить из истории предыдущую команду, приписать к ней придуманный фильтр, запустить.
— только процессы текущего пользователя.
Шаг 3.
Повторять пункт 2, пока не получатся чистые нужные данные.
— все процессы с нужным именем (плюс, может быть, лишние вроде vim task-6-server.c и т.п.),
— только процессы с нужным именем
— pid-ы нужных процессов, п. 3 выполнен
Шаг 4.
Применить подходящий финальный обработчик. Клавишей «Вверх» вытаскиваем из истории предыдущую команду и добавляем обработку, которая завершит решение задачи:
- |wc -l чтобы посчитать количество процессов;
- >pids чтобы записать pid-ы в файл;
- |xargs kill -9 убить процессы.
Задания для тренировки
Хотите попрактиковаться в новых умениях? Попробуйте выполнить следующие задания:
- получите список всех файлов и каталогов в вашем домашнем каталоге;
- получите список всех man -статей из категории 2 (системные вызовы);
- посчитайте, сколько раз в man-е по программе grep встречается слово grep;
- посчитайте, сколько процессов запущено в данный момент от имени пользователя root ;
- найдите, какая команда встречается в максимальном количестве категорий справки (man);
- подсчитайте, сколько раз встречается слово var на странице ya.ru.
Подсказка: вам понадобится find , grep -o , awk ‘
Что изучать дальше?
Если командная строка начинает вам нравиться, не останавливайтесь, продолжайте совершенствовать свои навыки.
Вот некоторые программы, которые определенно вам пригодятся, если вы будете жить в командной строке:
- awk
- sed
- find со сложными опциями
- apropos
- locate
- telnet
- netcat
- tcpdump
- rsync
- screen
- ssh
- tar
- zgrep , zless
- visudo
- crontab -e
- sendmail
Кроме того, со временем стоит освоить какой-нибудь скриптовый язык,например, perl или python , или даже их оба.
Кому это надо?
А стоит ли вообще изучать сегодня командную строку и шелльный скриптинг? Определенно стоит. Приведу только несколько примеров из требований Facebook к кандидатам, которые хотят поступить на работу в FB.
Data Scientist, Economic Research: Comfort with the command line and with Unix core tools; preferred: adeptness with a scripting language such as Python, or previous software engineering experience.
MySQL Database Engineer: High degree of proficiency in Shell scripting (Bash, Awk, etc); high degree of proficiency in Linux administration.
Manufacturing Quality Engineer, Server: Scripting skills in Bash, Perl, or Python is desirable.
Data Platform Engineer: 2 years experience with Unix/Linux systems.
DevOps Engineer, Data: 2 years experience with Unix/Linux system administration and programming.
Вопросы?
Если у вас есть вопросы по этой статье или вообще по работе в юниксовой командной строке, задавайте их в комментариях или по емейлу liruoko (at) yandex (dot) ru .
Источник