Базовые команды Linux

pwd

Вывести текущую (рабочую) директорию.

[user@testhost ~]$ pwd
/home/user

date

Вывести текущую дату и время системы.

[user@testhost ~]$ date
Mon Dec 16 13:37:07 UTC 2019
[user@testhost ~]$ date +%s
1576503430

w

Данная команда показывает, кто залогинен в системе. Помимо этого также на экран выводится uptime и LA (load average).

[user@testhost ~]$ w
 05:47:17 up 377 days, 17:57,  1 user,  load average: 0,00, 0,01, 0,05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     pts/0    32.175.94.241    05:47    2.00s  0.01s  0.00s w

ls

Вывести содержимое директории. Если не передать путь, то выведется содержимое текущей директории.

Лично я часто использую опции

  • l

(long listing format — вывод в колонку с дополнительной информацией о файлах),

  • t

(сортировка по времени изменения файла/директории) и

  • r

(обратная сортировка — в сочетании с

  • t

наиболее «свежие» файлы будут внизу):

Есть 2 специальных имени директории: "

.

" и "

..

". Первое означает текущую директорию, второе — родительскую директорию. Их бывает удобно использовать в различных командах, в частности,

ls

:

Также есть полезная опция для вывода скрытых файлов (начинаются на "

.

") —

  • a

:

И еще можно использовать опцию

  • h

— вывод в human readable формате (обратите внимание на размеры файлов):

cd

Изменить текущую директорию.

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

$HOME

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

~

` — специальный символ, означающий

$HOME

:

mkdir

Создать директорию.

Иногда нужно создать определенную структуру директорий: например, директорию в директории, которой не существует. Чтобы не вводить несколько раз подряд

mkdir

, можно использовать опцию

  • p

— она позволяет создать все недостающие директории в иерархии. Также с этой опцией

mkdir

не вернет ошибку, если директория существует.

rm

Удалить файл.

Опция

  • r

позволяет рекурсивно удалять директории со всем их содержимым, опция

  • f

позволяет игнорировать ошибки при удалении (например, о несуществующем файле). Эти опции позволяют, грубо говоря, гарантированно удалить всю иерархию файлов и директорий (если на это есть права у пользователя), поэтому, их нужно использовать с осторожностью (классический пример-шутка — "

rm -rf /

", при определенных обстоятельствах удалит вам если не всю систему, то очень много важных для её работоспособности файлов).

cp

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

У этой команды также есть опции

  • r

и

  • f

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

mv

Переместить или переименовать файл или директорию.

cat

Вывести содержимое файла (или файлов).

Также стоит обратить внимание на команды

head

(вывести

n

первых строк или байт файла) и

tail

(о ней — далее).

tail

Вывести

n

последних строк или байт файла.

Очень полезной является опция

  • f

— она позволяет выводить новые данные в файле в реальном времени.

less

Иногда текстовый файл слишком большой, и неудобно выводить его командой

cat

. Тогда можно открыть его с помощью команды

less

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

Также может оказаться удобным вариант использования

less

с конвейером (

pipe

):

ps

Вывести список процессов.

Я сам обычно использую BSD опции "

aux

" — вывести все процессы в системе (так как процессов может быть много, я вывел только первые 5 из них, использовав конвейер (

pipe

) и команду

head

):

Многие также используют BSD опции "

axjf

", что позволяет вывести дерево процессов (здесь я убрал часть вывода для демонстрации):

У этой команды много различных опций, так что при активном использовании рекомендую ознакомиться с документацией. Для большинства же случаев хватит просто знать "

ps aux

".

kill

Послать сигнал процессу. По умолчанию посылается сигнал

SIGTERM

, который завершает процесс.

Так как процесс может иметь обработчики сигналов,

kill

не всегда приводит к ожидаемому результату — моментальному завершению процесса. Чтобы «убить» процесс наверняка, нужно послать процессу сигнал

SIGKILL

. Однако это может привести к потере данных (например, если процесс перед завершением должен сохранить какую-то информацию на диск), так что нужно пользоваться такой командой осторожно. Номер сигнала

SIGKILL

— 9, поэтому короткий вариант команды выглядит так:

Помимо упомянутых

SIGTERM

и

SIGKILL

существует еще множество различных сигналов, их список можно легко найти в интернете. И не забывайте, что сигналы

SIGKILL

и

SIGSTOP

не могут быть перехвачены или проигнорированы.

ping

Послать хосту ICMP пакет

ECHO_REQUEST

.

По умолчанию

ping

работает, пока его не завершить вручную. Поэтому может быть полезна опция

  • c

— количество пакетов, после отправки которых

ping

завершится самостоятельно. Ещё одна опция, которую я иногда использую —

  • i

, интервал между посылками пакетов.

ssh

OpenSSH SSH клиент, позволяет подключаться к удаленному хосту.

Есть много нюансов в использовании SSH, также этот клиент обладает большим количеством возможностей, поэтому при желании (или необходимости) можно почитать про это

более подробно

.

scp

Копировать файлы между хостами (для этого используется

ssh

).

rsync

Также для синхронизации директорий между хостами можно использовать

rsync

(

  • a

— archive mode, позволяет скопировать полностью всё содержимое директории «как есть»,

  • v

— вывод на консоль дополнительной информации):

echo

Вывести на экран строку текста.

Здесь заслуживают внимания опции

  • n

— не дополнять строку переносом строки в конце, и

  • e

— включить интерпретацию экранирования с помощью "\".

Также с помощью этой команды можно выводить значения переменных. Например, в Linux exit code последней завершенной команды хранится в специальной переменной

$?

, и таким образом можно узнать, какая именно ошибка произошла в последнем запущенном приложении:

telnet

Клиент для протокола TELNET. Используется для коммуникации с другим хостом.

Если нужно использовать протокол TLS (напомню, что SSL давно устарел), то

telnet

для этих целей не подойдёт. Зато подойдёт клиент

openssl

:

Пример использования openssl с выводом ответа на GET запрос

Решение типовых задач в 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

:

А можно и

ip

:

При этом, если, например, вас интересует только 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:

Last updated

Was this helpful?