Неважно кто вы, разработчик ПО, специалист по данным, менеджер ИТ-инфраструктуры или просто любитель компьютеров  —  вам нужно знать, как пользоваться терминалом в Linux и macOS. Но сложность в том, что необходимо запомнить слишком много команд. И если у вас нет чудо-памяти, время от времени приходится искать в Интернете ту или иную команду.

Сегодня я поделюсь с вами самыми популярным и полезными командными интерпретаторами.

Основные

Помощь

Забыли аргументы для cp? Какая опция у команды mkdir? Вот вам подсказка:

help nano # кратко о команде “nano”

man nano # подробная информация о “nano”

Конвейер

Зачастую с его помощью перенаправляют вывод одной команды на ввод другой или приписывают команду к файлу:

a | b # конвейер: передать вывод команды a на ввод b

a > file.txt # сохранить вывод команды a в file.txt (перезаписать)

a >> file.txt # сохранить вывод команды a в file.txt (добавить)

echo "Hello!" | xargs echo # направить вывод первой команды, как аргумент второй

Фильтрация вывода

Бывает, что команда выводится слишком долго. В этом случае вы либо разделите страницу с помощью команды more или less, либо выведите строки, которые содержат специальное слово или предложение с grep:

cat verylongfile.txt | more # постранично показывает содержимое verylongfile.txt

cat verylongfile.txt | постранично показывает содержимое verylongfile.txt, и позволяет перемещаться по файлу

cat verylongfile.txt | grep “I love you” # показывает строчку, где расположена строка “I love you”

Очистка экрана

Слишком много текста в терминале? Просто напишите clear и продолжайте работать.

clear # очистка терминала

Система

Информация о системе

С этими командами вы с легкостью получите все подробности о компьютере:

uname -a # показывает информацию о системе (kernel, architecture…)

sudo lshw # (только для Linux) предоставляет информацию об аппаратном обеспечении

sudo lshw -short # (только для Linux) краткая информацию об аппаратном обеспечении

lscpu # (только для Linux) Показывает информацию о ЦП

lsusb # (только для Linux) вывод информации о подключенном USB устройстве

date # выводит дату и время

Работам с процессами

Следующие команды предоставляют общие сведения о всех процессах, происходящих в системе. В macOS и некоторых дистрибутивах Linux htop не установлен, поэтому перед использованием нужно установить его с помощью стандартного менеджера пакетов (для macOS  — Homebrew):

ps # показывает текущие процессы, происходящие в терминальном сеансе
ps aux # показывает все процессы, происходящие на компьютере
htop # отображает в терминале монитор активности
Команда htop в Linux 

Смена пользователей

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

su # смена текущего пользователя на администратора(root)

su - # смена текущего пользователя на администратора(root), со сменой локальных переменных

su maria # смена текущего пользователя на "maria"

sudo nano # выполнить команду "nano" от имени администратора (root)

Копирование и вставка в буфер обмена

Вы можете скопировать и вставить текст из/в терминал, выделив их и нажав Ctrl + C или Ctrl + V. Но иногда хочется напрямую получить доступ к буферу обмена. И как вы видите ниже, это не так уж и просто, что на Linux, что на macOS.

# Linux

echo "Hello my friend!" | xclip # копировать "Hello my friend!" в буфер обмена

xclip -o >> pasted_text.txt # вставить содержимое буфера в текст файла

# macOS

echo "Hello my friend!" | pbcopy # копировать "Hello my friend!" в буфер обмена

pbpaste >> pasted_text.txt # вставить содержимое буфера в текст файла

Переменные и путь

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

echo "hello" # вывод hello на консоль

echo $USER # вывод значение переменной USER на консоль

env # вывод список всех переменных окружения

set # вывод список всех локальных переменных

MY_FRIENDS=William # создать локальную переменную MY_FRIENDS

MY_FRIENDS=$MY_FRIENDS:John:Anna # объединение значения 'John' и 'Anna' в MY_FRIENDS

export MY_FRIENDS # сделать локальную переменную MY_FRIENDS переменной окружения

unset MY_FRIENDS # удалить переменную MY_FRIENDS

Ещё один интересный инструмент  —  alias (псевдоним), сокращение для длинных команд. Посмотрим, как он строится:

alias clone_my_repo = "git clone http://verylongurl.com" # создать псевдоним

Для тех, кто не знает, путь (Path) – это каталоги, в которых ОС ищет файлы для исполнения. С его помощью можно запустить файл, написав лишь название, даже не нужно знать его расположение. Кроме того, в путь можно добавить папку, а также найти каталог, где находится исполняемый файл, с помощью команд:

export PATH=$PATH:/home/john/myprogram # добавление каталога к пути /home/john/myprogram

which nano # отобразить расположение исполняемого файла "nano"

whereis nano # отобразить расположение исполняемого файла, справочных страниц, исходного кода и т.д. "nano"

Файлы и каталоги

Смена текущего каталога

Для перехода между каталогами файловой системы вам лишь нужно знать, как применять команду cd.

pwd # перейти к текущему каталогу

cd # сменить текущий каталог на домашний

cd /bin # перейти в каталог /bin

cd .. # перейти в родительский каталог

Содержимое каталога

Чтобы вывести в каталоге файлы, папки, а также их свойства, не обойтись без команды ls.

ls # вывести список файлов и каталогов в текущем каталоге

ls /bin # вывести список файлов и каталогов в /bin

ls -l # вывести подробную информацию (размер, дата...)

ls -a # показать скрытые файлы и каталоги

ls -ld # вывести информацию о текущем каталоге (не файлов)

ls my* # вывести файлы с именем, начинающимся на my...

tree # показать дерево текущего каталога

Скачать файл из Интернета

Самый простой способ скачать файл с веб-серверов  —  это команда wget.

wget https://somewebpage.com/somefile.zip # скачать файл с указанного URL в текущий каталог
Скачивание файла с помощью wget

Создать каталог

Если вы хотите создать папку, используйте команду mkdir.

mkdir movies # создать папку с названием "movies" в текущем каталоге

mkdir -p movies/genres/scifi # создать папку с названием "movies", вложенный в "genres", и "scifi"

Копирование, перемещение и удаление

Как правило, функции копирования, перемещения и удаления выполняют через файловый менеджер, но можно делать это и через терминал.

rmdir movies # удалить пустой каталог movies

rm -rf movies # удалить каталог movies и его файлы

rm file1.txt # удалить файл file1.txt

mv /home/michael/myfile.txt /home/john/important.txt # переместить файл из /home/michael в /home/john

cp /home/michael/myfile.txt /home/john/important.txt # скопировать файл из /home/michael в /home/john

cp -R letters/ memories/ # скопировать содержимое папки "letters" в папку "memories"

cp -R letters ~/Desktop # скопировать папку "letters" вставить на рабочий стол

Права доступа и владельцы

Права доступа и владельца файла или каталога можно изменить с помощью команды chmod и chown.

chmod 777 script.sh # изменить права  файла script.sh

chmod +x script.sh # сделать файл script.sh выполняющим

chown guille script.sh # сменить владельца файла "script.sh" на пользователя "guille"

./script.sh # запустить script.sh

Поиск файлов

Забыли где файл contacts.json? Хотите вывести все PDF файлы, находящиеся в папке? С помощью команды find вы можете сделать это и многое другое.

find . -name hello.txt # найти файл с названием "hello.txt" в текущем каталоге

find /home/joe/Downloads -name *.pdf # найти PDF файлы в папке Downloads

find / -executable -atime -10 # найти исполняемые файлы в каталоге root, доступ к котором был 10 минут назад

find ~ -newer reference.txt # найти в домашнем каталоге файл, который редактировался после файла "reference.txt"

Вычисление контрольной суммы SHA256 файла

При скачивании любой программы из Интернета, рекомендуется проверить контрольную сумму SHA, чтобы убедиться, всё ли верно скачалось. И сделать это гораздо легче через терминал:

# Linux

sha256sum file.txt # вычисление контрольной суммы SHA 256 файла

echo -n “foobar” | sha256sum # вычисление контрольной суммы SHA 256 слова “foobar”

# macOS

shasum -a 256 file.txt # вычисление контрольной суммы SHA 256 файла

echo -n “foobar” | shasum -a 256 # вычисление контрольной суммы SHA 256 слова “foobar”

Сжатие и распаковка TAR/ZIP файлов

Неважно, что у вас TAR или ZIP файл, вы можете распаковать его через терминал или же создать из существующих папок:

# Tar / untar

tar -cvzf myfile.tar myfolder # сжатие папки "my_folder" в архив "myfile.tar"

tar -xvzf myfile.tar # распаковка файла myfile.tar в текущий каталог

tar -C /opt/abc -xvzf myfile.tar # распаковка файла myfile.tar в /opt/abc

# Zip / unzip

zip -r myfile.zip myfolder # сжатие папки "my_folder" в архив "myfile.zip"

unzip myfile.zip # распаковка файла myfile.zip в текущий каталог

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

Хотите узнать доступное место на жестком диске? Или на внешнем? Или в текущем каталоге? В этих вопросах помогает команда df.

df -k . # свободное место в текущем каталоге
df -k # доступное пространство во смонтированных файловых системах
свободное место на моём компьютере 

Просмотр содержимого файла

Через терминал можно не только просматривать содержимое текстового файла, но и проводить анализы, например сортировать и менять порядок строк по содержанию, подсчитывать количество строк, слов, символов, и выделить столбцы, если это табличный файл. Рассмотрим их в действии:

# grep: фильтрация по строкам

grep 455 sales.txt # вывести строку, где есть 455

# cut: отображение столбцов

cut -f 3 sales.txt # вывести только третий столбец

cut -f 2-3 sales.txt # вывести 2-ой и 3-ий столбец

cut -c 9-19 sales.txt # вывести от 9-ти до 19-ти символов каждой строки

cut -f 1 -d ';' clients.txt # в файле clients.txt использовать ';' в качестве разделителя вместо tab

# awk: то же, что и cut, но имеет ещё больше разделителей, фильтров и он более сложный в вычислении

awk '{print $3}' sales.txt # вывести 3-ий столбец

awk '{print $2 ", " $3}' sales.txt # вывести 2-ой и 3-ий столбец, и разделить запятой

awk '{print $2 + $3}' sales.txt # вывести сумму 2-го и 3-го столбца

awk 'length($0) > 20' sales.txt # вывести все строки длиннее 20 символов

awk '$2 > 100' sales.txt # вывести строки, в которых значение второго столбца больше 100

# wc

wc sales.txt # вывести количество строк, слов и символов в текстовом файле

ls -1 | wc # вывести количество строк, слов и символов каждого файла в текущем каталоге

# sort: сортировка строк по алфавиту

sort sales.txt # сортировка строк файла

sort -r sales.txt # сортировка в обратном порядке

sort -R sales.txt # сортировка в случайном порядке

sort -t $'\t' -k 3n,3 sales.txt # сортировать строки по числовому значению третьего столбца

# uniq: отображает неповторяющиеся и повторяющиеся строки файла

uniq hello.txt # опускает повторяющиеся строки

uniq -d hello.txt # выводит только повторяющиеся строки

uniq -u hello.txt # выводит только те строки, у которых нет повторов

uniq -c hello.txt # выводит количество повторов для каждой строки

Надеюсь вам понравится эта шпаргалка!

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Guillermo Barreiro: The Essential Bash Cheat Sheet

Предыдущая статьяСоздаем юнит-тесты с помощью ИИ-инструмента
Следующая статьяСуть 4 хитроумных концепций Python для новичков