Основные linux-команды для новичка

Linux — это операционная система. Как винда (windows), только более защищенная. В винде легко подхватить вирус, в линуксе это практически невозможно. А еще линукс бесплатный, и ты сам себе хозяин: никаких тебе неотключаемых автообновлений системы!

Правда, разобраться в нем немного посложнее… Потому что большинство операций выполняется в командной строке. И если вы видите в вакансии «знание linux» — от вас ожидают как раз умение выполнять простейшие операции — перейти в другую директорию, скопировать файл, создать папочку… В этой статье я расскажу про типовые операции, которые стоит уметь делать новичку. Ну и плюс пара полезняшек для тестировщиков.

Я дам кратенькое описание основных команд с примерами + ссылки на статьи, где можно почитать подробнее. Если же хочется копнуть еще глубже, то см раздел «Книги и видео по теме».

Содержание


Где я? Как понять, где находишься


Команда pwd:

pwd   --- мы ввели команду
/home/test   --- ответ системы, мы находимся в домашней директории пользователя test


Очень полезная команда, когда у вас нет ничего, кроме командной строки под рукой. Расшифровывается как Print Working Directory. Запомните ее, пригодится.

Как понять, что находится в папке


Команда ls позволяет просмотреть содержимое каталога:

7nu0ftrctcqsssd0teckvi2soza.png

Хотя лучше использовать команду сразу с флагом «l»:

ls -l


Такая команда выведет более читабельный список, где можно будет сразу увидеть дату создания файла, его размер, автора и выданные файлу права.

38shqsy5vl9hiziow3iy_xmja8c.png

У команды есть и другие флаги, но чаще всего вы будете использовать именно «ls — l».

См также:
Команда ls Linux — подробнее о команде и всех ее флагах
Команда ls — просмотр каталога — о команде для новичков (без перечисления всех флагов)

Как перейти в другую директорию


С помощью команды cd:

cd <путь к директории>


Путь может быть абсолютным или относительным.

По абсолютному пути


Либо у вас где-то записан путь, «куда идти», либо вы подсмотрели его в графическом интерфейсе (например, в WinSCP).

Вставляем путь в командную строку после «cd»

cd /home/student/log


Ну вот, мы переместились из домашней директории (обозначается как ~) в /home/student/log.

d6rjskaxyym0vmqofmaxhctdcda.png

По относительному пути


Относительный путь — относительно вашей текущей директории, где вы сейчас находитесь. Если я уже нахожусь в /home/student, а мне надо в /home/student/log, команда будут такой:

cd log  --- перейди в папку log из той директории, где ты сейчас находишься


Если мне из надо из /home/student/photo в /home/student/photo/city/msk/2017/cat_1, команда будет такой:

cd city/msk/2017/cat_1


Я не пишу /home/student/photo, так как я уже там.

86ot5wazruuyeess6vjxynbiwpq.png

В линуксе можно задавать путь относительно домашней папки текущего пользователя. Домашняя директория обозначается ~/. Заметьте, не ~, а именно ~/. Дальше вы уже можете указывать подпапки:

cd  ~/log


Эта команда будет работать отовсюду. И переместит нас в /home/user/log.

Вот пример, где я вошла под пользователем students. Исходно была в директории /var, а попала в /home/students/log:

tkpv8r9yn8my1fbu1fmienxv4ra.png

С автодополнением


Если вы начнете набирать название папки и нажмете Tab, система сама его подставит. Если просто нажмете Tab, ничего не вводя, система начнет перебирать возможные варианты:

(cd tab) Может, ты имел в виду папку 1?
(tab) Нет? Может, папку 2?
(tab) Снова нет? Может, папку 3?
(tab) Снова нет? Может, файл 1 (она перебирает имена всех файлов и директорий, которые есть в той, где вы сейчас находитесь)?
(tab) У меня кончились варианты, поехали сначала. Папка 1?

ug10y33m2tfoucpzzfyui6vgwmm.png

cd lon (Tab) → cd long-long-long-long-name-folder — начали вводить название папки и система сама подставила имя (из тех, что есть в директории, где мы находимся).

cd (Tab)(Tab)(Tab) — система перебирает все файлы / папки в текущей директории.

Это очень удобно, когда перемещаешься в командной строке. Не надо вспоминать точное название папки, но можно вспомнить первую букву-две, это сократит количество вариантов.

Подняться наверх


Подняться на уровень выше:

cd ..


Если нужно поднять на два уровня выше, то

cd ../..


И так до бесконечности =) Можно использовать файл, лежащий на уровне выше или просто сменить директорию.

Обратите внимание, что команда для линукса отличается от команды для винды — слеш другой. В винде это «cd …\…», а в линуксе именно «cd …/…».

См также:
Путь к файлу в linux

Как создать директорию


Используйте команду mkdir:

mkdir test  --- создает папку с названием «test» там, где вы находитесь


Можно и в другом месте создать папку:

mkdir /home/test   --- создает папку «test» в директории /home, даже если вы 
сейчас не там


Когда это нужно? Например, если вам надо сделать бекап логов. Создаете папку и сохраняете туда нужные логи. Или если вы читаете инструкцию по установке ПО и видите там «создать папку». Через командную строку это делается именно так.

См также:
Как создать каталог в Linux с помощью команды mkdir

Как создать файл


Командой touch:

touch app.log


Такая команда создаст пустой файл с названием «app.log». А потом уже можно открыть файл в редакторе и редактировать.

Как отредактировать файл


Вот честное слово, лучше делать это через графический интерфейс!

Но если такой возможности нет, чтож… Если использовать программы, которые есть везде, то у вас два варианта:

  1. nano — более простая программа, рассчитана на новичков
  2. vim — более сложная, но позволяет сделать кучу всего


Начнем с nano. Указываете имя команды и путь в файлу:

nano test_env.json


Для перемещения по файлу используйте кнопки со стрелками. После того, как закончите редактировать файл, нажмите:

  • Ctrl+O — чтобы сохранить
  • Ctrl+X — для выхода


Самое приятное в nano — это подсказки внизу экрана, что нажать, чтобы выйти.

ajuxt472gaz0qvmuoq9q7su-ir8.png

А вот с vim с этим сложнее. В него легко зайти:

vim test_env.json
vi test_env.json     (предшественник vim)


Войти вошли, а как выйти то, аааа? Тут начинается легкая паника, потому что ни одна из стандартных комбинаций не срабатывает: Esc, ctrl + x, ctrl + q… Если под рукой есть второй ноутбук или хотя бы телефон / планшет с интернетом, можно прогуглить «как выйти из vim», а если у вас только одно окно с терминалом, которое вы заблокировали редактором?

Делюсь секретом, для выхода надо набрать:

  • : q — закрыть редактор
  • : q! — закрыть редактор без сохранения (если что-то меняли, то просто »: q» не проканает)


Двоеточие запускает командный режим, а там уже вводим команду «q» (quit).

Исходно, когда мы открываем файл через vim, то видим его содежимое, а внизу информацию о файле:

c1bdpfpapoguyvtr85g3ybsxfcu.png

Когда нажимаем двоеточие, оно печатается внизу:

r9zka8qp7q-ujgmy2ajjbni0req.png

Если не печатается, не паникуем! Тогда попробуйте нажать Esc (вернуться в нормальный режим), потом Enter (подтвердить команду), а потом снова печатайте. Фух, помогло, мы вышли оттуда!!!

На самом деле сейчас всё не так страшно. Даже если вас заслали работать в банк, где нет доступа в интернет, а вы вошли в vi и не знаете как выйти, всегда можно погулить выход с телефона. Слава мобильному интернету! Ну, а если вы знаете логин-пароль от сервера, то можно просто закрыть терминал и открыть его снова.

См также:
Как редактировать файлы в Ubuntu — подробнее о разных способах
Как пользоваться текстовым редактором vim — подробнее о vim и всех его опциях
Как выйти из редактора Vi или Vim? — зачем нажимать Esc

Как перенести / скопировать файл


Допустим, у нас в директории /opt/app/log находится app.log, который мы хотим сохранить в другом месте. Как перенести лог в нужное место, если нет графического интерфейса, только командная строка?

Скопировать файл


Команда:

cp что_копировать куда_копировать


Если мы находимся в директории /opt/app/log:

cp app.log /home/olga


В данном примере мы использовали относительный путь для «что копировать» — мы уже находимся рядом с логом, поэтому просто берем его. А для «куда копировать» используем абсолютный путь — копируем в /home/olga.

Можно сразу переименовать файл:

cp app.log /home/olga/app_test_2020_03_08.log


В этом случае мы взяли app.log и поместили его в папку /home/olga, переименовав при этом в app_test_2020_03_08.log. А то мало ли, сколько логов у вас в этом папке уже лежит, чтобы различать их, можно давать файлу более говорящее имя.

Если в «куда копировать» файл с таким именем уже есть, система не будет ничего спрашивать, просто перезапишет его. Для примера положим в папку log внутри домашней директории файл «app.log», который там уже есть:

a6r86cpa7jnr84-tixd03mqgo4s.png

Никаких ошибок, система просто выполнила команду.

См также:
Копирование файлов в linux

Скопировать директорию


Команда остается та же, «cp», только используется ключ R — «копировать папку рекурсивно»:

cp -r  путь_к_папке  путь_к_новому_месту


Например:

cp /opt/app/log /home/olga


Так в директории /home/olga появится папка «log».

Переместить файл


Если надо переместить файл, а не скопировать его, то вместо cp (copy) используем mv (move).

cp app.log /home/olga
↓
mv app.log /home/olga


Можно использовать относительные и абсолютные пути:

mv /opt/app/logs/app.log /home/olga — абсолютные пути указаны, команда сработает из любого места


Можно сразу переименовать файл:

mv app.log /home/olga/app_2020_03_08.log — перенесли лог в /home/olga и переименовали


Переместить директорию


Аналогично перемещению файла, команда mv

mv /opt/app/log/  /home/olga/bakup/

Как удалить файл


С помощью команды rm (remove):

rm test.txt  — удалит файл test.txt


Если нужно удалить все файлы в текущей директории (скажем, вычищаем старые логи перед переустановкой приложения), используйте »*»:

rm *  — удалит все файлы в текущей директории

bvgehkv_nem0hjbwejfbjqbhzke.png

Если нужно удалить папку, надо добавить флаг -r (recursive):

rm -r test_folder


Если вы пытаетесь удалить файлы, которые уже используются в программе или доступны только для чтения, система будет переспрашивать:

v3ziyjvzslyu5doqy0t8nmxxajo.png

А теперь представьте, что вы чистите много файлов. И на каждый система переспрашивает, и надо постоянно отвечать «да, да, да…» (y — enter, y — enter, y — enter)… Чтобы удалить все без вопросов, используйте флаг -f (force):

rm -rf test_folder    --- просто все удалит без разговоров


mvrf79hvjxkvysckdzxemfpnl7s.png

Но учтите, что это довольно опасная команда! Вот так надоест подстверждать удаление и введешь »-rf», а директорию неправильно укажешь… Ну и все, прости-прощай нужные файлы. Аккуратнее с этой командой, особенно если у вас есть root-полномочия!

Опция -v показывает имена удаляемых файлов:

rm -rfv test_folder   --- удалит папку со всем содержимым, но выведет имена удаляемых файлов


kx_khxmcvbrxsrljkauwllaxita.png

Тут вы хотя бы можете осознать, что натворили)))

См также:
Как удалить каталог Linux

Как изменить владельца файла


Если у вас есть root-доступ, то вы наверняка будете выполнять все действия под ним. Ну или многие… И тогда любой созданный файл, любая папка будут принадлежать root-пользователю.

Это плохо, потому что никто другой с ними работать уже не сможет. Но можно создать файл под root-ом, а потом изменить его владельца с помощью команды chown.

-slr7l1fek9yffdi0jmilisj5wu.png

Допустим, что я поднимаю сервис testbase. И он должен иметь доступ к директории user и файлу test.txt в другой директории. Так как никому другому эти файлики не нужны, а создала я их под рутом, то просто меняю владельца:

chown -R testbase:testbase test.txt — сменить владельца файла
chown -R testbase:testbase user     — сменить владельца папки


В итоге был владелец root, а стал testbase. То, что надо!

См также:
Команда chown Linux

Как установить приложение


Если вы привыкли к винде, то для вас установка приложения — это скачать некий setup файлик, запустить и до упора тыкать «далее-далее-далее». В линуксе все немного по-другому. Тут приложения ставятся как пакеты. И для каждой системы есть свой менеджер пакетов:

  • yum — red hat, centos
  • dpkg, apt — debian


См также:
5 Best Linux Package Managers for Linux Newbies

Давайте посмотрим на примере, как это работает. В командной строке очень удобно работать с Midnight Commander (mc) — это как FAR на windows. К сожалению, программа далеко не всегда есть в «чистом» дистрибутиве.

И вот вы подняли виртуалку на centos 7, хотите вызвать Midnight Commander, но облом-с.

mc


fhx2nq9bsz53_kzf8myqf21xu1m.png

Ничего страшного, установите это приложение через yum:

yum install mc


mv1vfg82oipmtbctn1fjdjjhdku.png

Он там будет что-то делать, качать, а потом уточнит, согласны ли вы поставить программу с учетом ее размеров. Если да, печатаем «y»:

8s4wr7ky284kflypkoss6q6xjwc.png

И система заканчивает установку.

Вот и все! Никаких тебе унылых «далее-далее-далее», сказал «установи», программа установилась! Теперь, если напечатать «mc» в командной строке, запустится Midnight Commander:

iwyy_z8fawpdzy2bvaugi4ln5o0.png

См также:
Как устанавливать программы для Linux
Yum, шпаргалка — всякие опции и плагины

Как запустить приложение


Некоторые приложения запускаются через скрипты. Например, чтобы запустить сервер приложения WildFly, нужно перейти в папку bin и запустить там standalone.sh. Файл с расширением .sh — это скрипт.

Чтобы запустить скрипт, нужно указать полный путь к нему. Это важно! Даже если вы находитесь в той папке, где и скрипт, он не будет найден. Поиск идет только в каталогах, записанных в переменную PATH. Так что или добавляйте путь туда (если он используется часто), или указывайте полный путь, даже если вы уже находитесь в нужной директории:

/opt/cdi/jboss/bin/standalone.sh — запустили файл standalone.sh


См также:
Запуск скрипта sh в Linux — подробнее о скриптах

k9uiiqzlj6zgl4i5sfn_9q8byx0.png

Если же приложение запускается как сервис, то все еще проще:

service test start — запустить сервис под названием «test»
service test stop — остановить сервис


Чтобы сервис test запускался автоматически при рестарте системы, используйте команду:

chkconfig cdi on 


Она добавит службу в автозапуск.

Как понять, где установлено приложение


Вот, например, для интеграции Jenkins и newman в Jenkins надо прописать полный путь к ньюману в параметре PATH. Но как это сделать, если newman ставился автоматически через команду install? И вы уже забыли, какой путь установки он вывел? Или вообще не вы ставили?

Чтобы узнать, куда приложение установилось, используйте whereis (без пробела):

whereis newman

ekn5xw4b1wvg4blsrjm7-vtpwos.png

Как создать архив


Стандартная утилита, которая будет работать даже на «голой» системе — tar. Правда, для ее использования надо запомнить флаги. Для создания архива стандартная комбинация cvf:

tar -cvf archive.tar.gz /home/test


bmbryogtrc26tqpgz7b7f3xak3a.png

В данном примере мы упаковали директорию /home/test, внутри которой было две картинки — 502.jpg и 504.jpg.

Для распаковки меняем флаг «c» на «x»:

tar -xvf archive.tar.gz


fs6n3ov_tycwcu5o8udv85yviok.png

Хотя система пишет, что распаковала »/home/test», на самом деле папка «test» появляется там, где мы сейчас находимся.

Давайте разберемся, что все эти флаги означают:

  • c — создать архив в linux
  • x — извлечь файлы из архива
  • v — показать подробную информацию о процессе работы (без него мы бы не увидели, какие файлики запаковались / распаковались)
  • f — файл для записи архива


Для упаковки используется опция c — Create, а для распаковки x — eXtract.

seal0vqae7hxov5rgjpyudvphe4.png

Если очень хочется использовать rar, то придется изгаляться. Через yum установка не прокатит:

yum install rar
yum install unrar


Говорит, нет такого пакета:

No package rar available.
Error: Nothing to do


Придется выполнить целую пачку команд! Сначала скачиваем, разархивируем и компилируем:

wget http://rarlabs.com/rar/rarlinux-x64-5.4.0.tar.gz
tar xzf rarlinux-x64-5.4.0.tar.gz
cd rar
make install


Устанавливаем:

mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
cp rar unrar /usr/local/bin
cp rarfiles.lst /etc
cp default.sfx /usr/local/lib


И применяем:

unrar x test.rar


См также:
Установка RAR на Linux

Как посмотреть использованные ранее команды


Вот, допустим, вы выполняли какие-то сложные действия. Или даже не вы, а разработчик или админ! У вас что-то сломалось, пришел коллега, вжух-вжух ручками, magic — работает. А что он делал? Интересно же!

Или, может, вы писали длинную команду, а теперь ее надо повторить. Снова набирать ручками? Неохота! Тем более что есть помощники:

↑  (стрелочка «наверх») — показать последнюю команду
history — показать последние 1000 команд


Если надо «отмотать» недалеко, проще через стрелочку пролистать команды. Один раз нажали — система показала последнюю команду. Еще раз нажали — предпоследнюю. И так до 1000 раз (потому что именно столько хранится в истории).

pes6dxruy3d-gjsvigpxw6vxylm.png

Большой бонус в том, что линукс хранит историю даже при перезапуске консоли. Это вам не как в винде — скопировал текст, скопировал другой, а первый уже потерялся. А при перезагрузке системы вообще все потерялось.

Если тыкать в стрелочку не хочется, или команды была давно, можно напечатать «history» и внимательно изучить команды.

См также:
История команд Linux — больше о возможностях history

Как посмотреть свободное место


Сколько места свободно на дисках

df -h


Сколько весит директория

du -sh
du -sh *  --- с разбиением

Как узнать версию OS


Сидите вы у Заказчика на линуксовой машине. Пытаетесь что-то установить — не работает. Лезете гуглить, а способы установки разные для разных операционных систем. Но как понять, какая установлена на данной машине?

Используйте команду:

cat /etc/*-release


y11k-e9oolhzsg67sjzgleweuce.png

На этой виртуалке стоит CentOs 7.

Если нужна версия ядра:

uname -a


См также:
Как узнать версию Linux

Как создать много тестовых папок и файлов


Допустим, у нас есть некая папка test. Создадим в ней сотню директорий и кучу файликов в каждой:

mkdir -p test/dir--{00{1..9},0{10..99},100}
touch test/dir--{00{1..9},0{10..99},100}/file-{A..Z}


Вот и все, дальше можно играться с ними!

5tf7mzem_ieympvwfwdjlinws54.png

Теперь пояснения:

  • mkdir — создать директорию
  • touch — создать файл (или изменить существующий, но если файла с таким именем нет, то команда создаст новый, пустой)


А выражения в скобках играют роль функции, которая выполняется в цикле и делает ручную работу за вас:

  • {0…10} — пробежится по всем числам от 0 до 10
  • {A…Z} — пробежится по всем буквам английского алфавита от A до Z


Как я пробовала эту команду. Сначала посмотрела, где нахожусь:

$ pwd
/home/test


Символ $ при описании команд означает начало строки, куда мы пишем команду. Так мы отделяем то, что ввели сами (pwd) от ответа системы (/home/test).

Ага, в домашней директории. Создам себе песочницу:

mkdir olga


Вот в ней и буду творить!

mkdir -p olga/dir--{00{1..9},0{10..99},100}
touch olga/dir--{00{1..9},0{10..99},100}/file-{A..Z}


А потом можно проверить, что получилось:

cd olga
ls -l


Как-то так! Имхо, полезные команды.

Я нашла их в книге «Командная строка Linux. Полное руководство», они используются для того, чтобы создать песочницу для прощупывания команды find. Я, как и автор, восхищаюсь мощью командной строки в данном случае. Всего 2 строчки, а сколько боли бы принесло сделать похожую структуру через графический интерфейс!

И, главное, тестировщику полезно — может пригодиться для тестов.

Как протестировать IOPS на Linux


Это очень полезно делать, если машину вам дает заказчик. Там точно SSD-диски? И они дают хороший iops? Если вы разрабатываете серверное приложение, и от вас требуют выдерживать нагрузку, нужно быть уверенными в том, что диски вам выдали по ТЗ.

Наше приложение активно использует диск. Поэтому, если заказчик хочет видеть хорошие результаты по нагрузке, мы хотим видеть хорошие результаты по производительности самих дисков.

Но верить админам другой стороны на слово нельзя. Если приложение работает медленно, они, разумеется, будут говорить, что у них то все хорошо, это «они» виноваты. Поэтому надо тестировать диски самим.


Я расскажу о том, как мы тестировали диски. Как проверили, сколько IOPS они выдают.

ku8mtlhyb4ktmukd2zwhezrku_k.png

Используем утилиту fio — https://github.com/axboe/fio/releases.

1) Скачиваем последнюю версию, распаковываем, переходим в каталог

cd /tmp
wget https://github.com/axboe/fio/archive/fio-2.99.tar.gz
tar xvzf fio-2.99.tar.gz
rm fio-2.99.tar.gz
cd fio-fio-2.99


2) Должны стоять пакеты для сборки

apt-get install -y gcc make libaio-dev | yum install -y make gcc libaio-devel


3) Собираем

make


4) Тестируем

./fio -readonly -name iops -rw=randread -bs=512 -runtime=20 -iodepth 32 -filename /dev/sda -ioengine libaio -direct=1


Какие должны быть результаты:

  • Средний SSD, выпущенный 2–3 года назад — 50 тысяч IOPS.
  • Свежий Samsung 960 Pro, который стоит на одной из железок у нас в офисе — 350 тысяч IOPS.


Свежесть определяется на момент написания статьи в 2017 году.

Если должно быть 50 тысяч, а диск выдает сильно меньше, то:

— он не SSD;
— есть сетевые задержки;
— неправильно примонтирован;
— с ними что-то еще плохое случилось и стоит поднять алярм.

И это все?


Разумеется, нет =))

Еще полезно изучить команду find и регулярные выражения. Тестировщику как минимум надо уметь «грепать логи» — использовать grep. Но это уже остается на самостоятельный гуглеж.
База, которая всегда нужна — pwd, cp, mv, mkdir, touch. Остальное можно легко гуглить, как только возникает необходимость.

Вот вам еще пара ссылочек от меня:


Для понимания структуры папок рекомендую статью «Структура папок ОС Linux. Какая папка для чего нужна. Что и где лежит в линуксе»

Книги и видео по теме


Видео:
ПО GNU/Linux — видео лекции Георгия Курячего — очень хорошие видео-лекции

Книги:
Командная строка Linux. Уильям Шоттс
Скотт Граннеман. Linux. карманный справочник

Где тренироваться


Можно поднять виртуалку. Правда, тут сначала придется разбираться, как поднимать виртуалку)))

А можно купить облачную машину. Когда мне надо было поиграться с линуксом, я пошла на SimpleCloud (он мне в гугле одним из первых выпал и у него дружелюбный интерфейс. Но можно выбрать любой аналог) и купила самую дешманскую машину — за 150 руб в месяц. Месяца вам за глаза, чтобы «пощупать-потыркать», и этой машины с минимумом памяти тоже.

У меня был когда-то план самой платить эти 150р за то, чтобы дать машину в общий доступ. Но увы. Как я не пыталась ее огородить (закрывала команды типа ssh, ping и прочая), у меня не получилось. Всегда есть люди, которых хлебом не корми, дай испортить чужое. Выложил в общий доступ пароли? На тебе ддос-атаку с твоего сервера. Ну и сервер блокируют. После N-ой блокировки я плюнула на это дело. Кто хочет научиться, найдет 150р.

Чтобы подключиться к машине, используйте инструменты:

  • Putty — командная строка
  • WinSCP — графический интерфейс


См также:

WinSCP — что это и как использовать

© Habrahabr.ru