Неважно кто вы, разработчик ПО, специалист по данным, менеджер ИТ-инфраструктуры или просто любитель компьютеров — вам нужно знать, как пользоваться терминалом в 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 # отображает в терминале монитор активности
Смена пользователей
При открытии терминального окна все вводимые команды выполняются под текущим пользователем. Однако зачастую приходится выполнять команды от привилегированного пользователя, поэтому важно знать, как их сменять внутри оболочки.
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 в текущий каталог
Создать каталог
Если вы хотите создать папку, используйте команду 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 # выводит количество повторов для каждой строки
Надеюсь вам понравится эта шпаргалка!
Читайте также:
- Как писать Bash-однострочники для клонирования и управления GitHub/GitLab репозиториями
- Автоматизированное семантическое управление версиями с помощью GitVersion
- Основы Git за 5 минут
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Guillermo Barreiro: The Essential Bash Cheat Sheet