Unix - UNiplexed Information and Computing System
Терминал - программа, которая запускает командную оболочку внутри себя.
Речь пойдёт про оболочку shell
У программ бывают принимаемые опции и аргументы. Опции начинаются с -
или --
Аргументы и опции отделяются от команды символом пробела и между собой разделяются пробелами.
Хорошим тоном считается писать опиции перед аргументами.
Если значение содержит пробелы, то это значение нужно обернуть в двойные "
или одинарные кавычки '
Ещё пробел можно экранировать символом \
Большинство опций имеют два названия (короткое для консоли и длинное для скриптов). Например -v
и --version
ls -a -l
равносильно ls -al
;
-- Разделитель команд, соответствует переносу строки.
&&
и ||
-- имеют такой же смысл как в языке C
, только истиной является код завершения 0
|
-- Pipeline. Конвейер для подачи вывода программы слева на вход программе справа.
Например cat <source> | grep Dog | uniq | sort
Вывод команды можно использовать фрагментом другой команды, если обернуть её в обратные кавычки `
$?
-- код возврата предыдущей выполненной команды.
!!
-- выполнить предыдущую команду.
История команд хранится в обычном файле .bash_history
Стрелками up/down
можно перемещаться по недавним командам.
Открыть режим чтения документации можно командой man [раздел] <имя команды>
Документация разбита на несколько разделов:
1
-- команды оболочки1p
-- команды оболочки, функциональность которых соответствует стандарту POSIX2
-- системные вызовы ядра операционной системы3
-- функции стандартной библиотеки языкаC
3p
-- Си-функции POSIX API4
-- описания модулей ядра и системных устройств5
-- описания форматов конфигурационных файлов6
-- описания программ для X117
-- различные руководства, не попадающие под какую-либо классификацию8
-- руководства по администрированиюn
-- руководства Tcl.
Документация открывается в пейджере less
, вот основы работы с ним:
q
-- выходh
-- helpf
-- вперёдb
-- назад/<строка>
+ Enter -- поиск строки- переход по совпадениям с помощью
n
иN
- переход по совпадениям с помощью
Необязательные опции в документации обозначаются в квадратных скобках []
|
в документации это исключающее или. Например a|b
означает, что можно написать либо только a
, либо только b
C-Буква
-- одновременное нажатиеCtrl
и буквенной клавишиM-Буква
-- одновременное нажатиеAlt
и буквенной клавишиC-Буква1 Буква2
-- сначала одновременное нажатиеCtrl
иБуква1
, затем отпуститьCtrl
и нажатьБуква2
C-Буква1 C-Буква2
-- нажатьCtrl
, затем нажать и отпуститьБуква1
, не отпускаяCtrl
нажать и отпуститьБуква2
C-d
-- сигнал завершения вводаC-c
-- сигнал завершения процессаC-s
-- приостановить процессC-q
-- продолжить выполнение процессаC-l
-- аналог командыclear
C-a
-- поместить курсор в начало строкиC-e
-- поместить курсор в конец строкиC-u
-- удалить всё от начала строки до курсораC-k
-- удалить всё от курсора до конца строкиC-w
-- удалить одно словоC-y
-- вставить удалённый текстC-p
-- показать предшествующую в истории командуC-n
-- показать следующую в истории командуC-r
-- рекурсивный поиск по истории
Все файлы и каталоги находятся внутри корневого каталога /
Текущий каталог обозначается как .
Каталог на уровень выше как ..
Можно сказать, что всё есть файл. Регистр важен. Понятие "расширение файла" отсутствует, но для удобства использования существуют суффиксы имени.
Например, файловому архиву в формате tar
, сжатому компрессором lzma
, часто дают суффикс .tar.lzma
Скрытый файл обозначается точкой перед именем .mySecrets
Переименование файла равносильно перемещению.
Пути бывают абсолютные и относительные.
Абсолютный путь начинается с /
Символ ~
обозначает домашний каталог пользователя (путь до него подставляется автоматически).
Полное имя может быть как абсолютным (начинается с символа /
), так и относительным (начинается с символа .
).
Программы, которые находятся в домашнем каталоге, обычно запускают вводом их полного имени.
Все стандартные программы запускаются по вводу имени их исполняемого файла, так как этот файл располагается в одном из каталогов, перечисленных в переменной окружения PATH.
При нажатии клавиши Tab
набираемый путь любезно автодополняется.
Каждый из потоков по факту тоже является файлом. Вот они по номерам:
- STDIN
- STDOUT
- STDERR
Перенаправление потоков:
>
перезаписывает старый или создаёт новый файл
>>
добавляет в конец файла
<
передача файла на вход программе слева
>/dev/null
игнорирование вывода
&>
отправляет в файл оба потока (STDIN и STDOUT)
2>file
STDERR перенаправляется в файл
2>&1
STDERR перенаправляется в STDOUT
Можно отправлять потоки в разные файлы .prog 1>out.txt 2>err.txt
Или объединить их в один .prog >combined_out.txt 2>&1
// TODO
cat
cd
chmod
chown
clear
cp
curl
cut
df
diff
echo
find
grep
head
hexdump
hostname
iconv
jobs
ls
mkdir
mv
objdump
od
pwd
readelf
rm
rmdir
sort
ssh
sudo
sudo apt autoremove
sudo apt get
sudo apt ugrade
sudo apt update
sudo su
tac
tail
tldr
touch
uniq
valgrind
wc
wget
which
whoami