Терминал - шпора
Терминал - шпора
ВВОД-ВЫВОД
echo выводит выражение или содержимое переменной (stdout), но имеет ограничения в использовании[3]
printf команда форматированного вывода, расширенный вариант команды echo
read «читает» значение переменной со стандартного ввода (stdin), в интерактивном режиме это клавиатура
ФАЙЛОВАЯ СИСТЕМА
cd изменяет текущий каталог
pwd выводит название текущего рабочего каталога (от англ. print working directory)
ls — программа, которая выводит список файлов и директорий в рабочей (текущей) директории.
ls -l она выводит дополнительную информацию по каждому файлу
ls -a показывает скрытые файлы
ls -S сортировка по размеру от большего к меньшему
pushd изменяет текущий каталог с возможностью возврата в обратном порядке
popd возвращает текущий каталог после pushd
dirs выводит или очищает содержимое стека каталогов, сохранённых через pushd
.. достаточно указать специальное значение и произойдёт переход на директорию, уровнем выше.
../.. выход на два уровня вверх
Команда cd, выполненная без аргументов, перебрасывает в домашную директорию текущего пользователя.
~ (тильда), которое в момент выполнения команды заменяется на абсолютный путь.
Поэтому из любого места можно сделать прямой переход в любую поддиректорию домашней директории.(cd ~/Music)
Допустим, вы находитесь в домашней директории и решили посмотреть файлы в поддиректории Music.
Один способ вы уже знаете, для этого нужно перейти в директорию Music и выполнить программу ls.
Как обычно, есть другой путь. ls также принимает на вход аргумент — директорию, которую нужно проанилизировать. (ls Music)
Автокомплит выполняется двойным нажатием на клавишу Tab
ДЕЙСТВИЯ НАД ПЕРЕМЕННЫМИ
let производит арифметические операции над переменными
eval транслирует список аргументов из списка в команды
set изменяет значения внутренних переменных скрипта
unset удаляет переменную
export экспортирует переменную, делая её доступной дочерним процессам
declare, typeset задают и/или накладывают ограничения на переменные
getopts используется для разбора аргументов, передаваемых скрипту из командной строки
УПРАВЛЕНИЕ СЦЕНАРИЕМ
source, . (точка) запуск указанного сценария
exit безусловное завершение работы сценария
exec заменяет текущий процесс новым, запускаемым командой exec
shopt позволяет изменять ключи (опции) оболочки на лету
КОМАНДЫ
true возвращает код завершения ноль (успешное завершение)
false возвращает код завершения, который свидетельствует о неудаче
type prog выводит полный путь к prog
hash prog запоминает путь к prog
help COMMAND выводит краткую справку по использованию внутренней команды COMMAND
УПРАВЛЕНИЕ ЗАПУЩЕННЫМИ В КОМАНДНОЙ ОБОЛОЧКЕ ЗАДАЧАМИ
jobs показывает список запущенных в командной оболочке задач, либо информацию о конкретной задаче по её номеру
fg переключает поток ввода на текущую задачу (или на определённую задачу, если указан её номер) и продолжает её исполнение
bg продолжает исполнение текущей приостановленной задачи (или определённых задач, если указаны их номера) в фоновом режиме
wait ожидает завершения указанных задач
Командную оболочку нередко называют реплом (REPL, Read-Eval-Print-Loop), что отражается в способе взаимодействия с пользователем:
Read — шелл ждёт ввода команды от пользователя
Eval — шелл исполняет введённую команду
Print — шелл выводит результат
Loop — возвращаемся к первому пункту
ОБОЗНАЧЕНИЯ ТИПОВ ФАЙЛОВ В ls -l:
* - - обычный файл с пользовательскими данными
* d - каталог
* l - символическая ссылка (символическая ссылка, такой файл похож на ярлык в Windows. Если удалить основной файл, то символическая ссылка начнёт вести в никуда.)
* b - файл блочного устройства
* c - файл символьного устройства
* f - файл FIFO или именованный канал
* s - сокет (специальный файл через который происходит взаимодействие между разными процессами операционной системы. Программисты постоянно сталкиваются с сокетами в реальной жизни.)
* Hard Link — дополнительное имя для уже существующего файла.
ЧТЕНИЕ ТЕКТОВЫХ ФАЙЛОВ:
cat - когда надо посмотреть содержимое небольшого файла;
head и tail - head показывает первые 10 строк, а tail — последние 10 строк файла. Это поведение можно менять, задавая желаемое количество строк через опцию -n.
tail -f - не просто выводит последние строчки файла, но ждёт появления новых.
less - открывает файл и остаётся в этом режиме, подгружает данные только при листании дальше
less команды:
основные:
q — выход
f — вперёд на страницу
b — назад на страницу
если набрать /, затем начать вводить буквы и нажать Enter, то выполнится поиск введённого текста. Перемещение по найденным совпадениям выполняется командой n (переход к следующему совпадению) и командой N (переход к предыдущему совпадению).
ПОИСК ФАЙЛОВ:
grep - утилита для поиска файлов
grep [OPTIONS] PATTERN [FILE...] (PATTERN — это то, что ищется, необязательно конкретная строчка, возможно определённый шаблон (см. регулярные выражения). FILE — путь до файла, в котором нужно искать)
пример: grep aliases .bashrc (aliases - что нужно найти, .bashrc - где нужно найти)
Количество выводимых соседних строк регулируется опциями -B, -A и -C. Первая определяет количество отображаемых строк до искомой (-B, --before-context), вторая — после (-A, --after-context), а третья — до и после одновременно (C, --context). Ниже пример использования -C со значением 1. Это значит, что для каждой найденной строки будет выведена одна строка выше и одна строка ниже. (grep -C 1 aliases .bashrc)
Иногда мы не знаем, в каком файле то, что мы ищем, но знаем директорию, в которой лежит этот файл. В такой ситуации нужно сделать два изменения:
1)Добавить опцию -R, которая говорит о том, что надо искать внутри директории (рекурсивно, то есть включая все поддиректории).
2)Указать путь до директории, а не файла.
Если добавить опцию n, то дополнительно отобразится номер строки.
find — утилита поиска файлов по имени и другим свойствам (документация https://ru.wikipedia.org/wiki/Find#%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9)
ПЕРЕНАПРАВЛЕНИЕ ПОТОКОВ:
ls -la > output (за место вывода в консоль, вывод происходит в файл output)
Символ > означает, что нужно взять вывод из команды, указанной слева, и отправить его в файл, указанный справа. > всегда перезаписывает файл.
Если нужно не перезаписывать, а добавлять, то используйте >>.
echo. Она принимает на вход строчку и выдаёт её в STDOUT, который уже можно перенаправлять.
(echo 'hello' > result
$ cat result
hello)
Флаг l (l а не 1) говорит о том, что надо считать количество строк
$ wc -l < result
2
| — этот символ называется пайп, он указывает шелу взять STDOUT одного процесса и соединяет его с STDIN другого процесса.
Пример:
cat source | grep Dog | uniq | sort
1)Читается файл source
2)Входные данные грепаются по подстроке "Dog"
3)Убираются дубли (в исходном файле две одинаковых строки "Dog")
4)Входные данные сортируются и выводятся на экран
МАНИПУЛИРОВАНИЕ ФАЙЛОВОЙ СТРУКТУРОЙ
Для создания файлов принято использовать утилиту touch.
# В текущей директории создаётся пустой файл
touch empty-file
Удаляется файл командой rm
rm empty-file
В *nix системах не существует понятия "переименовать файл". Переименование всегда равносильно перемещению, которое выполняется командой mv
mv file renamed-file(file - имя файла, renamed-file - имя переименования)
Для копирования файлов и директорий используется утилита cp (copy). Её первый аргумент — имя источника (откуда), второй — имя приёмника (куда).
cp renamed-file renamed-file-copy
Для копирования директории нужно добавить флаг -r (recursive).
Создание директории выполняется командой mkdir
воспользоваться флагом -p, который создаёт директории рекурсивно(несколько директорий одновременно)
mkdir -p one/two/three
Удаление директорий выполняется той же командой, что и удаление файлов, но без флагов оно выдаёт предупреждение:
Чтобы не было ошибки, нужно добавить флаг -r.
rm -r my-dir
Если внутри директории есть файлы, то команда rm начнёт задавать вопрос по каждому из них, нужно ли его удалять. Если вы точно уверены, что удалить нужно всё, добавьте флаг -f.
rm -rf one
ПЕРЕМЕННЫЕ:
Переменные можно создавать и изменять в любой момент времени, например:
# Для вывода переменной используется echo, а перед самой переменной ставится знак $.
$ echo $HOME
/home/kirill.m
# Для установки знак $ не нужен.
# Очень важно чтобы не было пробелов вокруг знака равно
$ HOME=/tmp
существует два способа задавать значение переменной окружения: локальный и глобальный. Когда мы указали HOME=/tmp прямо перед командой cd, то переменная не была изменена для текущей сессии —
она была изменена для запущенной команды, в данном случае cd. Такой трюк можно проделывать с любой командой. Другой способ установки изменяет значение глобально, для всей сессии и выполняется так:
~$ export HOME=/tmp
/home/kirill.m$ cd
~$ pwd
/tmp
~$ echo $HOME
/tmp
ПРАВА ДОСТУПА:
r — чтение, w — запись и x — исполнение.
Символ - в этой записи говорит о том, что перед нами обычный файл
-(обозначение типа-файл) rw-(права доступа для владельца файла) r--(группа прав относится к тем, кто входит в группу) r--(кто не входит в эту группу).
Сам файл не может обозначить прав на своё удаление, они всегда берутся из того места, где он находится. Удалить файл можно только, если у вас есть возможность писать в эту директорию (в соответствии с тем, к какому типу пользователей вы относитесь).
права доступа в числовом виде:
7 read, write and execute rwx
6 read and write rw-
5 read and execute r-x
4 read only r--
3 write and execute -wx
2 write only -w-
1 execute only --x
drwxr-xr-x в числовой форме соответствует 755
Однако пользователь root находится вне этой системы. Для него не имеет никакого значения наличие любых прав — рут может всё.
chown (от англ. change owner) — UNIX‐утилита, изменяющая владельца и/или группу для указанных файлов.(https://ru.wikipedia.org/wiki/Chown)
Помните, что эти команды должны быть выполнены с правами доступа root
Изменить владельца (owner) для /var/run/httpd.pid на 'root' (root — стандартное имя для суперпользователя (Superuser)).
# chown root /var/run/httpd.pid
Поменять владельца для strace.log в 'rob' и идентификатор группы в 'developers'.
# chown rob:developers strace.log
Поменять имя владельца для /tmp и /var/tmp на ‘nobody’ + поменять группу для /tmp и /var/tmp на ‘nogroup’
# chown nobody:nogroup /tmp /var/tmp
Поменять идентификатор группы для /home на 512
# chown :512 /home
chmod (от англ. change mode) — программа для изменения прав доступа к файлам и каталогам.
Использование команды в числовом виде:
Права записываются одной строкой сразу для трёх типов пользователей:
владельца файла (u);
других пользователей, входящих в группу владельца (g);
всех прочих пользователей (o);
Пример: в числовом виде, установить права rwxr-xr-x:
chmod 755 filename
Популярные значения
400 (-r--------)
Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия
644 (-rw-r--r--)
Все пользователи имеют право чтения; владелец может редактировать
Утилита tree, она выводит список файлов в виде дерева.
Если вам интересно узнать, а где лежит исполняемый файл конкретной программы, то можно воспользоваться командой type (а еще which и whereis):~$ type cp
cp is /bin/cp
Прямой запуск программ всегда должен быть путём до файла, например path/to/executable/file. А если файл лежит в текущей директории? Вот тут-то нам и поможет обращение через точку ./: ~/test$ ./runfile
ОШИБКА УСТАНОВКИ ПРИЛОЖЕНИЯ:
Установленная привязка пытается установить Spotify, но по какой-то причине не удалось. Пожалуйста, найдите Идентификатор изменения для неудавшейся установки с помощью команды
snap changes
В следующем списке вы найдете одну строку, которая ведет с номером и заканчивается Install "spotify" snap .
Остановить неудачную установку с найденным номером (давайте притворимся, что это 123 )
(пожалуйста, замените 123 номером, который вы найдете).
sudo snap abort 123
Если команда выполняется успешно, вы сможете повторить установку. Если переустановка не удалась, перезагрузите систему и повторите попытку.
Если другие пакеты Snap также повесили трубку, используйте
sudo snap abort nnn
(где nnn - это номер из списка, сгенерированного snap changes ), чтобы очистить их.
Очень часто нужно записать вывод команд в текстовой файл. Вам нужны команды вывода текста (cat, touch) и соответствующие знаки >> или >. Есть статья про объединение команд как объединить команды BASH. Вам нужно просто сделать некий вывод и записать текст в файл. Для начала сделайте вывод текста в консоли, а потом постарайтесь записать в файл при помощи знака >> (в конец строки) или > (перезапись). Вы можете записывать каждую строку в файл. Подобный способ хорош в том случае если в скрипте мало команд. Если команд много, то лучше использовать специальную конструкцию {блок кода} > file.txt. Внутри конструкции {?} может быть сложный код и большое количество строк.
#!/bin/bash
# запись в файл
{
echo 'записывается первая строчка'
echo 'записывается вторая строчка'
echo 'записывается третья строчка'
} > file.txt
Если только одну строчку:
echo 'Hello World!' >> file.txt
КОМАНДЫ LINUX НА ВСЕ СЛУЧАИ ЖИЗНИ:
КОМАНДЫ LINUX ДЛЯ НАВИГАЦИИ В ТЕРМИНАЛЕ
1) &&. Строго говоря, это не команда. Если вы хотите выполнить сразу несколько команд, поставьте между ними двойной амперсанд вот так: первая_команда && вторая_команда. Терминал выполнит команды по порядку. Вы можете ввести столько команд, сколько захотите.
2) alias. Присваивает созданные вами названия длинным командам, которые вы не можете запомнить. Введите alias длинная_команда короткая_команда.
3) cd. Изменяет текущую терминальную папку. Когда вы запускаете терминал, он использует вашу домашнюю папку. Введите cd адрес_папки, и терминал будет работать с файлами, которые там находятся.
4) clear. Очищает окно терминала от всех сообщений.
5) history. Отображает все недавно введённые вами команды. Кроме того, вы можете переключаться между недавними командами с помощью клавиш «Вверх» и «Вниз». Если вы не хотите, чтобы введённая вами команда была записана, поставьте перед ней пробел так: ваша_команда.
6) man. Отображает руководство по программам и командам Linux. Введите man имя_пакетаили man ваша_команда.
7) whatis. Отображает краткое описание какой-либо программы. Введите команду и название программы whatis имя_пакета.
КОМАНДЫ LINUX ДЛЯ ПОЛУЧЕНИЯ ПРАВ СУПЕРПОЛЬЗОВАТЕЛЯ
8) sudo. Эта команда даст вам права суперпользователя. Введите sudo перед нужной командой (например,sudo apt upgrade), чтобы выполнить её от имени администратора. Система спросит у вас пароль.
9) sudo su. После этой команды все введённые вами команды будут исполняться от имени суперпользователя, пока вы не закроете терминал. Используйте её, если вам нужно выполнить много команд с правами администратора.
10) sudo gksudo. Команда для запуска с правами администратора приложения с графическим интерфейсом. Например, если вы хотите переместить или изменить системные файлы, введите sudo gksudo nautilus (укажите тот файловый менеджер, которым пользуетесь).
11) sudo !!. Эта команда запустит ранее введённую команду с правами администратора. Полезно, если вы набрали команду без sudo.
APT (DEBIAN/UBUNTU/MINT)
Если вам нужно поставить отдельный пакет не из репозитория (что не рекомендуется), то можно воспользоваться следующей командой.
# dpkg -i package.deb
12) sudo apt install имя_пакета. Установить нужный пакет.
13) sudo apt-add-repository адрес_репозитария. Добавить сторонний репозитарий.
14) sudo apt update. Обновить сведения о пакетах.
15) sudo apt upgrade . Обновить все пакеты до самых свежих (выполнять после apt update).
16) sudo apt remove имя_пакета . Удалить ненужный пакет.
17) sudo apt purge имя_пакета . Удалить ненужный пакет со всеми зависимостями, если хотите освободить больше места.
18) sudo apt autoremove . Удалить все ненужные зависимости, бесхозные пакеты и прочий мусор.
КОМАНДЫ LINUX ДЛЯ УПРАВЛЕНИЯ ПРОЦЕССАМИ
19) kill. Эта команда служит для принудительного завершения процессов. Нужно ввести kill PID_процесса. PID процесса можно узнать, введя top.
20) xkill. Ещё одна команда для завершения процессов. Введите её, затем щёлкните по тому окну, которое нужно закрыть.
21) killall. Убивает процессы c определённым именем. К примеру, killall firefox.
22) top. Отображает перечень запущенных процессов, сортируя в зависимости от потребления ресурсов CPU. Своего рода терминальный «Системный монитор».
КОМАНДЫ LINUX ДЛЯ УПРАВЛЕНИЯ ФАЙЛАМИ
Просмотр и изменение файлов
23) cat. Когда команда используется с одним текстовым файлом (вот так: cat путь_к_файлу), она отображает его содержимое в окне терминала. Если указать два и больше файлов, cat путь_к_файлу_1 путь_к_файлу_2, она склеит их. Если ввести cat путь_к_файлу_1 > новый_файл, она объединит содержимое указанных файлов в новый файл.
24) chmod. Позволяет изменять права доступа к файлу. Может пригодиться, если вы хотите внести изменения в системный файл.
25) chown. Изменяет владельца файла. Следует выполнять с правами суперпользователя.
26) file. Выводит информацию об указанном файле.
27) nano. Открывает простой текстовый редактор. Можно создать новый текстовый файл или открыть существующий: nano путь_к_файлу.
28) rename. Переименовывает файл или несколько файлов. Команду можно использовать и для массового переименования файлов по маске.
29) touch. Изменяет дату последнего открытия или модификации указанного файла.
30) wget. Загружает файлы из интернета в терминальную папку.
31) zip. Распаковывает и сжимает архивы.
Создание и удаление файлов и папок
32) mkdir. Создаёт новую папку в текущей терминальной папке или в указанной папке: mkdir путь_к_папке.
33) rmdir. Удаляет указанную папку.
34) rm. Удаляет файлы. Может удалить как отдельный файл, так и группу, соответствующую определённым признакам.
Копирование и перемещение файлов
35) cp. Создаёт копию указанного файла в папке терминала: cp путь_к_файлу. Или вы можете указать назначение cp путь_к_файлу путь_для_копии.
36) mv. Перемещает файл из одной папки в другую. Вы можете указать имя для перемещаемого файла. Забавно, но в Linux эта команда может использоваться и для переименования файлов. Просто укажите ту же папку, где находится файл, и другое имя.
Поиск файлов
37) find. Поиск файлов по определённым критериям, таким как имя, тип, размер, владелец, дата создания и модификации.
38) grep. Поиск текстовых файлов, содержащих определённые строки. Критерии очень гибко настраиваются.
39) locate. Поиск файлов и папок, чьи названия подходят запросу, и отображение их путей в файловой системе.
КОМАНДЫ LINUX ДЛЯ РАБОТЫ С РАЗДЕЛАМИ
40) lsblk. Эта команда демонстрирует, какие диски есть в вашей системе и на какие разделы они поделены. Также команда отображает имена ваших разделов и накопителей, в формате sda1, sda2 и так далее.
41) mount. Монтирует накопители, устройства или файловые системы Linux, чтобы вы могли с ними работать. Обычно устройства подключаются автоматически, как только вы щёлкнете по ним в файловом менеджере. Но иногда может понадобиться примонтировать что-то вручную. Вы можете подключать что угодно: диски, внешние накопители, разделы и даже ISO-образы. Эту команду нужно выполнять с правами суперпользователя. Чтобы примонтировать имеющийся диск или раздел, введите mount sdX.
42) umount. Демонтирует файловые системы. Команда umount sdX отключит файловую систему внешнего носителя, чтобы вы могли извлечь его.
43) dd. Эта команда копирует и преобразовывает файлы и разделы. У неё множество различных применений. Например, dd if=/dev/sda of=/dev/sdb сделает точную копию раздела sda на разделе sdb. dd if=/dev/zero of=/dev/sdX затрёт содержимое указанного носителя нулями, чтобы информацию было невозможно восстановить. А dd if=~/Downloads/ubuntu.iso of=/dev/sdX bs=4M сделает загрузочный носитель из скачанного вами образа с дистрибутивом.
КОМАНДЫ LINUX ДЛЯ УПРАВЛЕНИЯ СИСТЕМОЙ
44) df. Отображает объём вашего диска, и сколько на нём осталось свободного места.
45) free. Отображает объём доступной и занятой оперативной памяти.
46) uname. Отображает сведения о системе Если ввести uname, терминал сообщит только Linux. Но команда uname -a выводит сведения об имени компьютера и версии ядра.
47) uptime. Сообщает, как долго запущена ваша система.
48) whereis. Отображает расположение исполняемого файла нужной программы.
49) whoami. Называет имя пользователя.
КОМАНДЫ LINUX ДЛЯ УПРАВЛЕНИЯ ПОЛЬЗОВАТЕЛЯМИ
50) useradd. Регистрирует нового пользователя. Введите useradd имя_пользователя, и пользователь будет создан.
51) userdel. Удаляет учётную запись и файлы пользователя.
52) usermod. Изменяет учётную запись пользователя. Может переместить домашнюю папку пользователя или назначить дату, когда учётная запись будет заблокирована.
53) passwd. Изменяет пароли учётных записей. Обычный пользователь может изменить пароль только своей учётной записи, суперпользователь может изменить пароль любой учётной записи.
КОМАНДЫ LINUX ДЛЯ УПРАВЛЕНИЯ СЕТЬЮ
54) ip. Многофункциональная команда для работы с сетью. Команда ip address show выводит сведения о сетевых адресах, ip route управляет маршрутизацией и так далее. Давая команды ip link set ethX up, ip link set ethX down, можно включать и выключать соединения. У команды ip много применений, так что перед её использованием лучше ознакомиться с руководством или ввести ip --help
55) ping. Показывает, подключены ли вы к сети, и помогает определить качество связи.