Bash команды для тестировщика
Введение
Большинству тестировщиков в своей карьере рано или поздно придётся столкнуться с терминалом Linux
Скорее всего это начнётся как необходимость зайти на сервер и посмотреть логи.
Инженер в серверной. Фото: freepik.com
Сервера делают на разных операционных системах:
Из семейства Linux популярны:
Также часто применяют UNIX подобные ОС:
Они немного отличаются друг от друга но есть и общее свойство:
На сервере обычно нет графического интерфейса
Но зато есть командная оболочка вроде bash
Именно поэтому тестировщику нужно освоить основы работы с терминалом Linux.
В этой статье Вы увидите команды нужные именно тестировщику. Больше полезных команд можно найти в статьях:
Работа с директориями
Тестировщику приходится постоянно работать с логами. Каждый найденный баг обычно нужно описать как функционально: что не работает, что при этом делали, что показал UI. Так и подтвердить документально: timestamp + логи клиента/сервера/партнёрского бэкенда.
Для того, чтобы найти логи, нужно уметь перемащаться между директориям и смотреть из содержимое.
Просмотр директорий
Чтобы перейти в директорию с логами достаточно ввести команду cd и её абсолютный адрес.
Если абсолютный адрес директории неизвестен, нужно перемещаться куда-то из текущей директории.
Узнать содержимое текущей директории можно с помощью команды ls
где опция l требует вывода в так называемом длинном формате.
Переместиться в директорию на уровень ниже можно с помощью команды cd название директории
Подняться на уровень выше
Создание директории
Для того, чтобы создать директорию выполните команду:
К примеру, создадим директорию test_Project2:
Копирование директории
Для того, чтобы скопировать директорию из одного места в другое, выполните команду:
Например, скопируем директорию /usr/local/project01 в своу домашнюю директорию и назовем её project01arj:
Перемещение / Переименование директории
За перемещение и переименование директорий, в Linux отвечает команда mv.
перемещение директории /usr/local/projects в уже существующую, в домашней директории, директорию project01arj:
переименование директории /usr/local/projects в /usr/local/testedProjects:
mv /usr/local/statistics /usr/local/newstatistics
Удаление директории
Удаление директории и её содержимого, можно произвести при помощи команд rmdir или rm:
удаляем директорию /usr/local/testedProjects/temp:
или рекурсивно директорию /usr/local/testedProjects/temp, со всеми директориями внутри него:
Работа с логами
Подробнее о том, что такое логи и какими они бывают читайте в параграфе «Изучение логов»
Как развиваться тестировщику. Разбираемся с Linux.
Заметка, которая будет продолжением серии «Как развиваться начинающим тестировщикам». Ранее я писал про Groovy, теперь хочу поделиться опытом изучения Linux.
Лично мое знакомство c Linux началось с того, что у нас на проекте было 4 машинки и на всех стоял разный дистрибутив IBM AIX, Solaris, Red Hat Linux.
Дабы не быть полным профаном, я решил себе дома установить тогда еще Ubuntu 12.04 LTS, чтобы начать разбираться с системой и учить команды. Это была кардинальная перемена, меня затянуло и до сих пор у меня дома стоит Ubuntu, и на все возгласы по поводу выхода новых версий Windows я даже не парюсь.
Чисто в образовательных целях можете установить себе Ubuntu на виртуальную машину. Сделать это максимально быстро можно с помощью Vagrant.
Далее стоит задача в изучении команд, которые поддерживаются командной оболочкой. Конечно же всегда можно посмотреть в гугл, но все же самые основные нужно выучить. На собеседованиях гугл не поможет=).
Отличнейшая книга, которую я прочел на одном дыхании. Идеально подходит для изучения всех самых известных команд Linux.
Под конец, для тех, кто уже хочет научиться писать Bash скрипты:
Последнюю книгу полностью не читал, но могу сказать, что издательство apress всегда издает стОящие книги.
Linux/*nix знания для тестировщика
Здравствуйте, уважаемые форумчане!
Так же интересно какие таски в этой ОС чаще всего приходилось делать, расскажите о вашем опыте.
В конце хочу составить для себя эдакий список-чеклист того, что надо выучить.
Наверное, люди, более близкие к подбору персонала, расскажут Вам подробнее. Но не могу удержаться от пары замечаний.
3) Имхо, знание базовых команд не сильно отличается от умения написать скрипт для bash. Скрипт тоже может быть на «базовом» уровне. А вот поднабрать арсенал полезных утилит и опций можно только на практике: почитайте man даже по самым простым командам и убедитесь, что без опыта всё это множество опций освоить нереально.
Так же интересно какие таски в этой ОС чаще всего приходилось делать, расскажите о вашем опыте.
Здравствуйте, уважаемые форумчане!
И вам день добрый!
Мне только не понятно, так вы хотите научиться производить тестирование продукта или же узнать что такое линукс?! Если первое то лучше учиться на продукте майкрософт ибо я сейчас на нем только начал познавать азы тестирования(ручное, автоматизированное). Если второе, то простейших команд это понятие очень растяжимо (смотря для чего именно).
Оба сразу это навряд ли осуществимо. Я в курсе, что существует такой продукт для тестирования это Selenium и кажется он и в майкрософте работает и в линукс средах.
Я же по своему опыту начинал с Ubuntu ибо она самая добрая в плане познания линукса «Checo» правильно сказал.
После я перешел на Debian так как он мне больше понравился, но он тяжелее в познании. Если в Ubuntu все находиться автоматом и просто нужно нажать установить, то в Debian все по другому.
Консоль— (умение работать без GUI), а линукс без консоли это не линукс! все равно все делается через консольку, вы сначала научитесь работать с граф. оболочкой это во первых, а лишь потом задумывайтесь о консоли. «Простейшие команды»-тогда сами будут всплывать, как говорится гугл в помощь. Я изучал линукс на администрировании (установка и настройка различных серверов). На своем блоге я причем отписывал, что и как надо было сделать (но саморекламой не буду заниматься). Вы сначала поставьте вопрос, а что именно вам нужно и где приоритет выше. Если тестирование, то учитесь пока на майкрософте, инструменты для этого есть куча (Warp PRO, LoadRunner, Visual Studio, TestComplite и тонна других) я сам использую их на майкрософте. Если же линукс то пока забудьте о тестинге и познавайте его, потому что линукс это очень большая тема и в понятие «ЗНАТЬ» входит знать его!
Если не получится составить чек-лист, то есть такой совет. Поставье любой дистрибутив (Altlinux, OpenSuse, Ubuntu). Разверните на нём нужные для работы службы. И обновитесь (ядро обновите, драйвер видеокарты, или ещё-чего). Вот тут нежданчики появятся.
Тут, конечно, не хватает инструментов от Марка Русиновича. Но тут есть свои инструменты.
Поставье любой дистрибутив (Altlinux, OpenSuse, Ubuntu). Разверните на нём нужные для работы службы. И обновитесь (ядро обновите, драйвер видеокарты, или ещё-чего). Вот тут нежданчики появятся.
очень интересно как он будет все это поднимать.
Он почувствует силу, на шаг приблизившись к тому, чтобы стать джедаем. Ведь как известно: «Ядрёная консоль делает меня сильней!». И поднимет.
Или найдёт TFM, и выполнит по отношению к нему действие Read.
Наверное, люди, более близкие к подбору персонала, расскажут Вам подробнее. Но не могу удержаться от пары замечаний.
Сомневаюсь 
2) Научиться работать в консоли можно и в убунте. Просто забудьте, что есть графические конфигураторы, файловые менеджеры и центр установки приложений. Открывайте терминал и пытайтесь делать всё там. Убунта обладает тем преимуществом, что на начальном этапе помогает сберечь нервы и не способствует возникновению антипатии к ОСи.
3) Имхо, знание базовых команд не сильно отличается от умения написать скрипт для bash. Скрипт тоже может быть на «базовом» уровне. А вот поднабрать арсенал полезных утилит и опций можно только на практике: почитайте man даже по самым простым командам и убедитесь, что без опыта всё это множество опций освоить нереально.
Здравствуйте, уважаемые форумчане!
Так же интересно какие таски в этой ОС чаще всего приходилось делать, расскажите о вашем опыте.
В конце хочу составить для себя эдакий список-чеклист того, что надо выучить.
А ядро вам не придется пересобирать (если вы конечно не выберете какой-нибудь gentoo). Людям которым нужно «ехать» это ни к чему, ну а тем кому «шашешчки».
Базовые команды Linux для тестировщиков и не только
Всем привет! Меня зовут Саша, и я больше шести лет занимаюсь тестированием бэкенда (сервисы Linux и API). Мысль о статье у меня появилась после очередной просьбы знакомого тестировщика подсказать ему, что можно почитать по командам Linux перед собеседованием. Обычно от кандидата на позицию QA инженера требуют знание основных команд (если, конечно, подразумевается работа с Linux), но как понять, про какие команды стоит почитать во время подготовки к собеседованию, если опыта работы с Linux мало или вовсе нет?
Поэтому, хоть про это уже и много раз написано, я всё же решился написать ещё одну статью «Linux для новичков» и перечислить здесь базовые команды, которые нужно знать перед любым собеседованием в отдел (или компанию), где используют Linux. Я подумал, какие команды и утилиты и с какими параметрами я использую чаще всего, собрал фидбек от коллег, и скомпоновал это всё в одну статью. Статья условно делится на 3 части: сначала краткая информация об основах ввода-вывода в терминале Linux, затем обзор самых базовых команд, а в третьей части описывается решение типовых задач в Linux.
У каждой команды есть много опций, здесь все они перечислены не будут. Всегда можно ввести `man ` или ` —help`, чтобы узнать о команде подробнее.
Если какая-то команда выполняется слишком долго, её можно завершить, нажав в консоли Ctrl+C (процессу посылается сигнал SIGINT).
Немного о выводе команд
Когда запускается процесс в Linux, создаётся 3 стандартных потока данных для этого процесса: stdin, stdout и stderr. Они имеют номер 0, 1 и 2 соответственно. Но нас сейчас интересуют stdout и, в меньшей степени, stderr. Из названий несложно догадаться, что stdout используется для вывода данных, а stderr — для вывода сообщений об ошибках. По умолчанию при запуске команды в Linux stdout и stderr выводят всю информацию на консоль, однако, если вывод команды большой, может быть удобно перенаправить его в файл. Это можно сделать, например, так:
Если мы выведем содержимое файла man_signal, то мы увидим, что оно идентично тому, что было бы при простом запуске команды `man signal`.
Операция перенаправления `>` по умолчанию использует stdout. Можно указать о перенаправлении stdout явно: `1>`. Аналогично можно указать о перенаправлении stderr: `2>`. Можно эти операции скомбинировать и таким образом разделить обычный вывод команды и вывод сообщений об ошибках:
Перенаправить и stdout, и stderr в один файл можно следующим образом:
Операция перенаправления `2>&1` означает перенаправление stderr туда же, куда направлен stdout.
Еще один удобный инструмент для работы с вводом-выводом (а точнее, это удобное средство межпроцессного взаимодействия) — pipe (или конвейер). Конвейеры часто используются для связи нескольких команд: stdout команды перенаправляется в stdin следующей, и так по цепочке:
Базовые команды Linux
Вывести текущую (рабочую) директорию.
Вывести текущую дату и время системы.
Данная команда показывает, кто залогинен в системе. Помимо этого также на экран выводится uptime и LA (load average).
Вывести содержимое директории. Если не передать путь, то выведется содержимое текущей директории.
Лично я часто использую опции -l (long listing format — вывод в колонку с дополнительной информацией о файлах), -t (сортировка по времени изменения файла/директории) и -r (обратная сортировка — в сочетании с -t наиболее «свежие» файлы будут внизу):
Есть 2 специальных имени директории: «.» и «..«. Первое означает текущую директорию, второе — родительскую директорию. Их бывает удобно использовать в различных командах, в частности, ls:
Также есть полезная опция для вывода скрытых файлов (начинаются на «.«) — -a:
И еще можно использовать опцию -h — вывод в human readable формате (обратите внимание на размеры файлов):
Изменить текущую директорию.
Если не передавать имя директории в качестве аргумента, будет использоваться переменная окружения $HOME, то есть домашняя директория. Также может быть удобно использовать `
` — специальный символ, означающий $HOME:
mkdir
Иногда нужно создать определенную структуру директорий: например, директорию в директории, которой не существует. Чтобы не вводить несколько раз подряд mkdir, можно использовать опцию -p — она позволяет создать все недостающие директории в иерархии. Также с этой опцией mkdir не вернет ошибку, если директория существует.
Копировать файл или директорию.
У этой команды также есть опции -r и -f, их можно использовать, чтобы гарантированно скопировать иерархию директорий и папок в другое место.
Переместить или переименовать файл или директорию.
Вывести содержимое файла (или файлов).
Также стоит обратить внимание на команды head (вывести n первых строк или байт файла) и tail (о ней — далее).
Вывести n последних строк или байт файла.
Очень полезной является опция -f — она позволяет выводить новые данные в файле в реальном времени.
Иногда текстовый файл слишком большой, и неудобно выводить его командой cat. Тогда можно открыть его с помощью команды less: файл будет выводиться по частям, доступна навигация по этим частям, поиск и прочий простой функционал.
Также может оказаться удобным вариант использования less с конвейером (pipe):
Вывести список процессов.
Я сам обычно использую BSD опции «aux» — вывести все процессы в системе (так как процессов может быть много, я вывел только первые 5 из них, использовав конвейер (pipe) и команду head):
Многие также используют BSD опции «axjf«, что позволяет вывести дерево процессов (здесь я убрал часть вывода для демонстрации):
У этой команды много различных опций, так что при активном использовании рекомендую ознакомиться с документацией. Для большинства же случаев хватит просто знать «ps aux«.
Послать сигнал процессу. По умолчанию посылается сигнал SIGTERM, который завершает процесс.
Так как процесс может иметь обработчики сигналов, kill не всегда приводит к ожидаемому результату — моментальному завершению процесса. Чтобы «убить» процесс наверняка, нужно послать процессу сигнал SIGKILL. Однако это может привести к потере данных (например, если процесс перед завершением должен сохранить какую-то информацию на диск), так что нужно пользоваться такой командой осторожно. Номер сигнала SIGKILL — 9, поэтому короткий вариант команды выглядит так:
Помимо упомянутых SIGTERM и SIGKILL существует еще множество различных сигналов, их список можно легко найти в интернете. И не забывайте, что сигналы SIGKILL и SIGSTOP не могут быть перехвачены или проигнорированы.
Послать хосту ICMP пакет ECHO_REQUEST.
По умолчанию ping работает, пока его не завершить вручную. Поэтому может быть полезна опция -c — количество пакетов, после отправки которых ping завершится самостоятельно. Ещё одна опция, которую я иногда использую — -i, интервал между посылками пакетов.
OpenSSH SSH клиент, позволяет подключаться к удаленному хосту.
Есть много нюансов в использовании SSH, также этот клиент обладает большим количеством возможностей, поэтому при желании (или необходимости) можно почитать про это более подробно.
Копировать файлы между хостами (для этого используется ssh).
rsync
Также для синхронизации директорий между хостами можно использовать rsync (-a — archive mode, позволяет скопировать полностью всё содержимое директории «как есть», -v — вывод на консоль дополнительной информации):
Вывести на экран строку текста.
Здесь заслуживают внимания опции -n — не дополнять строку переносом строки в конце, и -e — включить интерпретацию экранирования с помощью «\».
Также с помощью этой команды можно выводить значения переменных. Например, в Linux exit code последней завершенной команды хранится в специальной переменной $?, и таким образом можно узнать, какая именно ошибка произошла в последнем запущенном приложении:
telnet
Клиент для протокола TELNET. Используется для коммуникации с другим хостом.
Если нужно использовать протокол TLS (напомню, что SSL давно устарел), то telnet для этих целей не подойдёт. Зато подойдёт клиент openssl:
Решение типовых задач в Linux
Изменить владельца файла
Изменить владельца файла или директории можно с помощью команды chown:
В параметр этой команде нужно отдать нового владельца и группу (опционально), разделенных двоеточием. Также при изменении владельца директории может быть полезна опция -R — тогда владельцы изменятся и у всего содержимого директории.
Изменить права доступа файла
Эта задача решается с помощью команды chmod. В качестве примера приведу установку прав «владельцу разрешено чтение, запись и исполнение, группе разрешено чтение и запись, всем остальным — ничего»:
Первая 7 (это 0b111 в битовом представлении) в параметре означает «все права для владельца», вторая 6 (это 0b110 в битовом представлении) — «чтение и запись», ну и 0 — это ничего для остальных. Битовая маска состоит из трёх битов: самый младший («правый») бит отвечает за исполнение, следующий за ним («средний») — за запись, и самый старший («левый») — за чтение.
Также можно выставлять права с помощью специальных символов (мнемонический синтаксис). Например, в следующем примере сначала убираются права на исполнение для текущего пользователя, а затем возвращаются обратно:
У этой команды есть много вариантов использования, поэтому советую прочитать про неё подробнее (особенно про мнемонический синтаксис, например, здесь).
Вывести содержимое бинарного файла
Это можно сделать с помощью утилиты hexdump. Ниже приведены примеры её использования.
С помощью этой утилиты можно вывести данные и в других форматах, однако наиболее часто могут пригодиться именно такие варианты её использования.
Искать файлы
Найти файл по части имени в дереве каталогов можно с помощью команды find:
Также доступны другие опции и фильтры поиска. Например, так можно найти файлы в папке test, созданные более 5 дней назад:
Искать текст в файлах
Справиться с этой задачей поможет команда grep. У неё есть множество вариантов использования, здесь в качестве примера указан самый простой.
Один из популярных способов использования команды grep — использование её в конвейере (pipe):
Опция -v позволяет сделать эффект grep‘а обратным — будут выводиться только строки, не содержащие паттерн, переданный в grep.
Смотреть установленные пакеты
Универсальной команды нет, потому что всё зависит от дистрибутива Linux и используемого пакетного менеджера. Скорее всего вам поможет одна из следующих команд:
Посмотреть, сколько места занимает дерево директорий
Один из вариантов использования команды du:
Можно менять значение параметра -d, чтобы получать более подробную информацию о дереве директорий. Также можно использовать команду в комбинации с sort:
Опция -h у команды sort позволяет сортировать размеры, записанные в human readable формате (например, 1K, 2G), опция -r позволяет отсортировать данные в обратном порядке.
«Найти и заменить» в файле, в файлах в директории
Данная операция выполняется с помощью утилиты sed (без флага g в конце заменится только первое вхождение «old-text» в строке):
Можно использовать её для нескольких файлов сразу:
Вывести колонку из вывода
Справиться с этой задачей поможет awk. В данном примере выводится вторая колонка вывода команды `ps ux`:
При этом надо иметь ввиду, что awk обладает гораздо более богатым функционалом, так что при необходимости работы с текстом в командной строке стоит почитать об этой команде подробнее.
Узнать IP адрес по имени хоста
С этим поможет одна из следующих команд:
Сетевая информация
Можно использовать ifconfig:
При этом, если, например, вас интересует только IPv4, то можно добавить опцию -4:
Посмотреть открытые порты
Для этого используют утилиту netstat. Например, чтобы посмотреть все слушающие TCP и UDP порты с отображением PID’а процесса, слушающего порт, и с числовым представлением порта, нужно использовать ее со следующими опциями:
Информация о системе
Получить данную информацию можно с помощью команды uname.
Чтобы понять, в каком формате производится вывод, можно обратиться к help‘у данной команды:
Информация о памяти
Чтобы понять, сколько оперативной памяти занято или свободно, можно воспользоваться командой free.
Информация о файловых системах (свободное место на дисках)
Команда df позволяет посмотреть, сколько места свободно и занято на примонтированных файловых системах.
Опция -T указывает, что нужно выводить тип файловой системы.
Информация о задачах и различной статистике по системе
Для этого используется команда top. Она способна вывести разную информацию: например, топ процессов по использованию оперативной памяти или топ процессов по использованию процессорного времени. Также она выводит информацию о памяти, CPU, uptime и LA (load average).
Эта утилита обладает богатым функционалом, так что если вам надо часто ей пользоваться, лучше ознакомиться с её документацией.
Дамп сетевого трафика
Для перехвата сетевого трафика в Linux используется утилита tcpdump. Чтобы сдампить трафик на порте 12345, можно воспользоваться следующей командой:
Опция -A говорит о том, что мы ходим видеть вывод в ASCII (поэтому это хорошо для текстовых протоколов), -i any указывает, что нас не интересует сетевой интерфейс, port — трафик какого порта дампить. Вместо port можно использовать host, либо комбинацию host и port (host A and port X). И еще полезной может оказаться опция -n — не конвертировать адреса в хостнеймы в выводе.
Что если трафик бинарный? Тогда нам поможет опция -X — выводить данные в hex и ASCII:
При этом надо учитывать, что в обоих вариантах использования будут выводиться IP пакеты, поэтому в начале каждого из них будут бинарные заголовки IP и TCP. Вот пример вывода для запроса «123» посланного в сервер, слушающий порт 12345:




