В этом руководстве для начинающих, ты узнаешь как применять самые полезные и распространенные команды для работы с терминалом/консолью в Linux, macOS и других UNIX-подобных системах.

pwd - вывести текущую директорию

Команда pwd (print working directory) используется, чтобы понять в какой директории мы находимся. Она дает простой и понятный ответ на вопрос “Где я?”. Команду pwd полезно выполнить в самом начале работы с терминалом.

Вот пример выполнения pwd сразу после логина на Linux сервер:

root@scw-tender-lewin:~# pwd
/root

ls - показать содержимое директории

Чтобы посмотреть содержимое директории (папки), в UNIX-подобных системах используется команда ls (list).

В базовом случае, ее вызывают без аргументов и на экране появляется содержимое текущего каталога:

root@scw-tender-lewin:/# ls
bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv       sys  usr  vmlinuz
boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  swapfile  tmp  var  vmlinuz.old

Если ты хочешь проверить содержимое какого-то определенного каталога, например /var, ты можешь сделать это добавив путь к каталогу после ls:

root@scw-tender-lewin:/# ls /var
backups  cache  crash  lib  local  lock  log  mail  opt  run  snap  spool  tmp

К команде ls, ты можешь добавить несколько флагов, чтобы улучшить формат вывода.

Расширенная информация (Long list view)

Флаг -l добавит к каждому файлу и каталогу информацию о размере, уровне доступа, дате создания и владельце.

root@scw-tender-lewin:/# ls -l
total 4194396
drwxr-xr-x   2 root root       4096 May 15 06:46 bin
drwxr-xr-x   4 root root       4096 Sep  3 06:15 boot
drwxr-xr-x  16 root root       3680 May 20 06:35 dev
drwxrwxr-x  93 root root       4096 Sep  3 06:15 etc
drwxr-xr-x   3 root root       4096 Mar  6 09:14 home
lrwxrwxrwx   1 root root         34 Sep  3 06:15 initrd.img -> boot/initrd.img-4.15.0-115-generic
lrwxrwxrwx   1 root root         34 Sep  3 06:15 initrd.img.old -> boot/initrd.img-4.15.0-112-generic
drwxr-xr-x  23 root root       4096 Mar  6 09:16 lib
drwxr-xr-x   2 root root       4096 Jul  8 06:20 lib64
drwx------   2 root root      16384 Mar  5  2019 lost+found
drwxr-xr-x   2 root root       4096 Feb  4  2019 media
drwxr-xr-x   2 root root       4096 Feb  4  2019 mnt
drwxr-xr-x   3 root root       4096 Mar  6 09:17 opt
dr-xr-xr-x 189 root root          0 May  4 06:16 proc
drwx------   8 root root       4096 Mar 19 08:13 root
drwxr-xr-x  28 root root       1120 Sep  3 07:21 run
drwxr-xr-x   2 root root      12288 Jul  8 06:20 sbin
drwxr-xr-x   2 root root       4096 Mar  6 09:14 snap
drwxr-xr-x   2 root root       4096 Feb  4  2019 srv
-rw-------   1 root root 4294967296 Mar  6 10:10 swapfile
dr-xr-xr-x  13 root root          0 May  4 06:16 sys
drwxrwxrwt  10 root root       4096 Sep  3 07:22 tmp
drwxrwxr-x  10 root root       4096 Mar  5  2019 usr
drwxr-xr-x  13 root root       4096 Mar  5  2019 var
lrwxrwxrwx   1 root root         31 Sep  3 06:15 vmlinuz -> boot/vmlinuz-4.15.0-115-generic
lrwxrwxrwx   1 root root         31 Sep  3 06:15 vmlinuz.old -> boot/vmlinuz-4.15.0-112-generic

Кстати, если ты хочешь посмотреть расширенную информацию о каком-то одном файле, ты можешь указать его точно так же как и каталог, после команды ls. Это полезно если в директории много файлов, информация о которых тебя не интересует.

Вот как это сработает с файлом swapfile:

root@scw-tender-lewin:/# ls -l swapfile
-rw------- 1 root root 4294967296 Mar  6 10:10 swapfile

Показать скрытые файлы и папки

Чтобы вывести на экран скрытые файлы и директории, нужно добавить флаг -a к команде ls:

root@scw-tender-lewin:/# ls -a
.   bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv       sys  usr  vmlinuz
..  boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  swapfile  tmp  var  vmlinuz.old

Так, мы всегда получим две скрытые записи: . и ... Одна точка служит для доступа к текущей директории, а две — для доступа к родительскому каталогу.

Сортировка вывода команды ls

Флаг -S используется, чтобы отсортировать вывод на экран по размеру файлов и каталогов:

root@scw-tender-lewin:/# ls -S
swapfile    sbin  boot  home  lib64  mnt  root  srv  usr  dev  initrd.img      vmlinuz      proc
lost+found  bin   etc   lib   media  opt  snap  tmp  var  run  initrd.img.old  vmlinuz.old  sys

Объединение флагов команды ls

Иногда одного флага недостаточно. Например, ты хочешь одновременно получить расширенную информацию с помощью флага -l, отформатировать размер каждой записи с помощью -h и отсортировать все файлы и папки по размеру с помощью -S.

Чтобы получить такое поведение, нужно объединить несколько флагов. Порядок флагов не имеет значение и -lhS будет значить то же самое, что и -hSl, поэтому можешь выбирать любую последовательность которая тебе нравится:

root@scw-tender-lewin:/# ls -lhS
total 4.1G
-rw-------   1 root root 4.0G Mar  6 10:10 swapfile
drwx------   2 root root  16K Mar  5  2019 lost+found
drwxr-xr-x   2 root root  12K Jul  8 06:20 sbin
drwxr-xr-x  23 root root 4.0K Sep  3 06:15 .
drwxr-xr-x  23 root root 4.0K Sep  3 06:15 ..
drwxr-xr-x   2 root root 4.0K May 15 06:46 bin
drwxr-xr-x   4 root root 4.0K Sep  3 06:15 boot
drwxrwxr-x  93 root root 4.0K Sep  3 06:15 etc
drwxr-xr-x   3 root root 4.0K Mar  6 09:14 home
drwxr-xr-x  23 root root 4.0K Mar  6 09:16 lib
drwxr-xr-x   2 root root 4.0K Jul  8 06:20 lib64
drwxr-xr-x   2 root root 4.0K Feb  4  2019 media
drwxr-xr-x   2 root root 4.0K Feb  4  2019 mnt
drwxr-xr-x   3 root root 4.0K Mar  6 09:17 opt
drwx------   8 root root 4.0K Mar 19 08:13 root
drwxr-xr-x   2 root root 4.0K Mar  6 09:14 snap
drwxr-xr-x   2 root root 4.0K Feb  4  2019 srv
drwxrwxrwt  10 root root 4.0K Sep  3 07:22 tmp
drwxrwxr-x  10 root root 4.0K Mar  5  2019 usr
drwxr-xr-x  13 root root 4.0K Mar  5  2019 var
drwxr-xr-x  16 root root 3.6K May 20 06:35 dev
drwxr-xr-x  28 root root 1.1K Sep  3 07:21 run
lrwxrwxrwx   1 root root   34 Sep  3 06:15 initrd.img -> boot/initrd.img-4.15.0-115-generic
lrwxrwxrwx   1 root root   34 Sep  3 06:15 initrd.img.old -> boot/initrd.img-4.15.0-112-generic
lrwxrwxrwx   1 root root   31 Sep  3 06:15 vmlinuz -> boot/vmlinuz-4.15.0-115-generic
lrwxrwxrwx   1 root root   31 Sep  3 06:15 vmlinuz.old -> boot/vmlinuz-4.15.0-112-generic
dr-xr-xr-x 191 root root    0 May  4 06:16 proc
dr-xr-xr-x  13 root root    0 Sep  3 08:25 sys

cd - сменить директорию

Итак, после того, как ты узнал все о содержимом текущей директории, самое время ее сменить. Команда cd принимает имя каталога как аргумент и перемещает тебя туда.

Команда cd выводит информацию на экран только если возникнет ошибка, поэтому советую сразу использовать ls, чтобы осмотреться:

root@scw-tender-lewin:/# cd var
root@scw-tender-lewin:/var# ls -a
.  ..  backups  cache  crash  lib  local  lock  log  mail  opt  run  snap  spool  tmp

Перемещаемся на одну директорию выше

Чтобы перейти на одну папку выше текущей, нужно указать две точки cd .. вместо точного имени каталога. Чтобы перейти на два уровня вверх - cd ../.. и так далее.

Если ты попробуешь перейти в каталог, который не существует, то ты получишь такое сообщение:

root@scw-tender-lewin:/var# cd local42
-bash: cd: local42: No such file or directory
root@scw-tender-lewin:/var# cd ..
root@scw-tender-lewin:/# ls
bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv       sys  usr  vmlinuz
boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  swapfile  tmp  var  vmlinuz.old

Идем домой

Если ты используешь тильду cd ~ вместо имени каталога, то ты переместишься в домашнюю директорию. Это полезная ссылка, потому что где бы ты ни был, по ней ты сможешь всегда вернуться домой.

root@scw-tender-lewin:/# cd ~
root@scw-tender-lewin:~# pwd
/root

touch - создать файл

Команду touch используют для создания новых файлов. План такой:

  1. Переходим в домашний каталог: cd ~
  2. Проверяем что он пустой: ls
  3. Создаем новый файл с помощью touch и пишем сразу после команды имя файла
  4. Выполняем команду ls чтобы убедиться, что файл создался успешно
root@scw-tender-lewin:/var/log# cd ~
root@scw-tender-lewin:~# ls
root@scw-tender-lewin:~# touch hello.txt
root@scw-tender-lewin:~# ls
hello.txt

mkdir - создать директорию

Чтобы создать директорию в Linux, используют команду mkdir. Она работает почти так же как touch и ожидает от тебя имя директории.

root@scw-tender-lewin:~# mkdir internal
root@scw-tender-lewin:~# ls
hello.txt  internal

man - показать мануал / получить помощь

И наконец, сверхсила! Команда man покажет тебе краткое руководство по использованию любой Linux, UNIX или MacOS команды. Ее можно применить даже к самой себе напечатав man man.

Если ты хочешь сделать, что-то полезное, но забыл как именно пользоваться какой-то командой, то выполни man и укажи после нее имя интересующей тебя команды. Вот так:

root@scw-tender-lewin:~# man ls
NAME
     ls -- list directory contents

SYNOPSIS
     ls [-ABCFGHLOPRSTUW@abcdefghiklmnopqrstuwx1%] [file ...]

DESCRIPTION
     For each operand that names a file of a type other than directory, ls displays its name as well as any requested, associated information.
     For each operand that names a file of type directory, ls displays the names of files contained within that directory, as well as any
     requested, associated information.

     If no operands are given, the contents of the current directory are displayed.  If more than one operand is given, non-directory operands
     are displayed first; directory and non-directory operands are sorted separately and in lexicographical order.

     The following options are available:
...

Вывод

В этом руководстве я рассказал тебе о самых часто используемых команда Linux, macOS, и *nix систем. Теперь ты умеешь работать с ls, pwd, cd, touch, mkdir, и man.

Если ты только начинаешь программировать, то Linux и терминал могут показаться тебе чем-то очень страшным. Но, как видишь, все довольно просто и прямолинейно.