Как устроена команда и где узнать, что она умеет
pwd, ls и cd, различать абсолютные и относительные путиman и --help, а не в случайной статьеТерминал — окно, которое показывает текст и передаёт нажатия клавиш. Оболочка (shell) — программа внутри терминала, которая читает вашу команду, запускает нужную программу и выводит её ответ. В Debian оболочка по умолчанию — bash.
Терминалом может быть консоль ВМ, окно PuTTY или «Терминал» Windows с подключением по SSH (модуль 08) — оболочка на сервере одна и та же.
Оболочка ждёт команду, показывая приглашение:
student@debian:~$
│ │ │ └─ $ — обычный пользователь, # — root
│ │ └─── текущий каталог, ~ — домашний
│ └────────── имя компьютера
└────────────────── имя пользователя
Приглашение с # на конце означает, что вы работаете под root и любая ошибка может повредить систему. В курсе мы так не работаем: команды администратора выполняются по одной через sudo.
$. Набирать нужно то, что после него; строки без $ — ответ системы.Любая команда записывается одинаково: сначала имя, затем через пробел опции и аргументы.
$ ls -l -a /etc
│ └──┬─┘ └┬─┘
│ │ └─ аргумент: с чем работать
│ └────── опции: как работать
└───────────── имя команды
-l. Их можно склеивать: ls -la = ls -l -a.ls --all. Длиннее, зато понятнее в скриптах.ls -r (обратный порядок) и ls -R (рекурсивно) — разные опции; LS — не команда.ls "мои документы".Если команда отработала успешно, она обычно ничего не пишет. Тишина в Linux — признак успеха, а не зависания: оболочка снова показала приглашение, значит, команда завершилась.
В каждый момент оболочка находится в каком-то текущем каталоге. Узнать его — pwd (print working directory). После входа это домашний каталог пользователя:
$ pwd
/home/student
ls показывает содержимое каталога — текущего или указанного:
$ ls /
bin dev home lib lost+found mnt proc run srv tmp var
boot etc initrd.img lib64 media opt root sbin sys usr vmlinuz
Самые нужные опции ls:
$ ls -l /etc/hostname /etc/os-release # подробно
-rw-r--r-- 1 root root 7 окт 10 19:15 /etc/hostname
lrwxrwxrwx 1 root root 21 мая 8 19:10 /etc/os-release -> ../usr/lib/os-release
$ ls -la # подробно и со скрытыми файлами
итого 20
drwx------ 2 student student 4096 окт 14 10:05 .
drwxr-xr-x 3 root root 4096 окт 10 19:20 ..
-rw------- 1 student student 112 окт 14 10:05 .bash_history
-rw-r--r-- 1 student student 220 окт 10 19:20 .bash_logout
-rw-r--r-- 1 student student 3526 окт 10 19:20 .bashrc
-rw-r--r-- 1 student student 807 окт 10 19:20 .profile
$ ls -lh /usr/bin/bash # размер в К, М, Г
-rwxr-xr-x 1 root root 1,3M мая 9 14:07 /usr/bin/bash
Поле ls -l | Пример | Что значит |
|---|---|---|
| Тип и права | -rw-r--r-- | Первый символ — тип: - файл, d каталог, l ссылка. Права — модуль 04 |
| Число ссылок | 1 | Модуль 03 |
| Владелец и группа | root root | Модуль 04 |
| Размер | 7 | В байтах, с -h — в удобных единицах |
| Дата изменения | окт 10 19:15 | Для файлов старше полугода вместо времени — год |
| Имя | /etc/hostname | Для ссылки — ещё и куда она указывает |
Скрытые файлы — те, чьё имя начинается с точки: .bashrc, .profile. Это обычные файлы, точка лишь просит ls не показывать их без -a. Так хранят настройки программ. Записи . и .. — сам каталог и его родитель.
Файловая система Linux — одно дерево с корнем /. Дисков C: и D: нет: другие диски подключаются как каталоги внутри дерева (модуль 06). Разделитель в пути — прямая косая черта /.
/
├── etc/
│ └── hostname
├── home/
│ └── student/ ← домашний каталог, ~
│ └── project/
│ └── README.md
└── tmp/
| Путь | Откуда отсчитывается | Пример для README.md из /home/student |
|---|---|---|
| Абсолютный | От корня, начинается с / | /home/student/project/README.md |
| Относительный | От текущего каталога | project/README.md |
| От домашнего | Начинается с ~ | ~/project/README.md |
Абсолютный путь работает откуда угодно, относительный — только из «своего» каталога. В скриптах и инструкциях для других людей используйте абсолютные пути.
$ cd /etc # абсолютный путь
student@debian:/etc$ cd .. # на уровень выше
student@debian:/$ cd home/student # относительный: из / в home/student
student@debian:~$ cd /tmp
student@debian:/tmp$ cd - # в предыдущий каталог
/home/student
student@debian:~$ cd /tmp; cd # cd без аргументов — домой
student@debian:~$
Если каталога нет, команда сообщит об ошибке и вы останетесь на месте:
$ cd /nonexistent
-bash: cd: /nonexistent: Нет такого файла или каталога
Tab дополняет имена команд, файлов и каталогов. Наберите cd /et и нажмите Tab — оболочка допишет /etc/. Если вариантов несколько, второе нажатие Tab покажет их список. Дополнение заодно проверяет путь: если оно не срабатывает, скорее всего, в имени опечатка.
| Клавиши | Действие |
|---|---|
| ↑ / ↓ | Предыдущая / следующая команда из истории |
| Ctrl+R | Поиск по истории: набирайте часть команды, повторное нажатие — следующее совпадение |
| Ctrl+C | Прервать выполняющуюся команду или стереть набранную строку |
| Ctrl+L | Очистить экран (то же, что clear) |
| Ctrl+A / Ctrl+E | В начало / в конец строки |
| Ctrl+D | Выйти из оболочки (на пустой строке) |
$ history | tail -3
41 cd /etc
42 ls -l hostname
43 history | tail -3
$ !42 # повторить команду номер 42
ls -l hostname
-rw-r--r-- 1 root root 7 окт 10 19:15 hostname
У каждой команды есть встроенная справка. Короткая — опция --help:
$ ls --help
Использование: ls [ПАРАМЕТР]… [ФАЙЛ]…
Выдаёт информацию о ФАЙЛАХ (по умолчанию о текущем каталоге).
...
-a, --all не скрывать записи, начинающиеся с .
...
Синтаксис в справке читается так: в квадратных скобках — необязательное, многоточие — можно повторить. ls [ПАРАМЕТР]… [ФАЙЛ]… значит: опций и файлов может быть сколько угодно, в том числе ни одного.
Полное руководство — man (manual):
$ man ls
| Клавиша в man | Действие |
|---|---|
| Пробел / b | Страница вперёд / назад |
| /слово Enter | Искать слово; n — следующее совпадение |
| q | Выйти |
Если не помните, какая команда нужна, ищите по описаниям: man -k (или apropos). Одно и то же имя бывает в разных разделах руководства: 1 — команды, 5 — форматы файлов, 8 — команды администратора.
$ whatis ls passwd
passwd (1) - изменяет пароль пользователя
passwd (5) - файл паролей
ls (1) - list directory contents
$ man 5 passwd # формат файла /etc/passwd, а не команда
Не у всех команд есть отдельная страница man. cd, history, pwd — встроенные команды оболочки; справка по ним — help cd. Определить, встроенная команда или программа, помогает type:
$ type cd cp
cd — это встроенная команда bash
cp является /usr/bin/cp
LANG=C ls nofile выведет ls: cannot access 'nofile': No such file or directory. Переменная действует только на эту команду.# на конце — вы root/, относительный — от текущего каталога; ~ — домашнийcd .. — вверх, cd - — назад, cd — домой--help — кратко, man — полно, help — для встроенных команд