Файловая структура *nix систем серьёзно отличается от структуры в Windows и представляет собой дерево, в узлах которого находятся директории, а в листьяхфайлы.

Кстати, понятие "папка" в *nix системах не используется, говорят "директория" или "каталог", хотя по существу эти термины означают одно и тоже.

В Windows файловая структура представлена не одним, а несколькими деревьями, так как каждая структура находится на своём диске. В *nix системах — единственное дерево с корнем (корень обозначен символом: /). Все устройства, физические и логические диски находятся внутри этого дерева в виде директорий и файлов.

Информация о любом файле или директории доступна по команде stat (file system status):

# Не обращайте внимание на непонятные для вас данные, об их значении поговорим позже
                    $ stat .bashrc
                      File: '.bashrc'
                      Size: 3771        Blocks: 8          IO Block: 4096   regular file
                    Device: ca01h/51713d    Inode: 259234      Links: 1
                    Access: (0644/-rw-r--r--)  Uid: ( 1002/kirill.m)   Gid: ( 1002/kirill.m)
                    Access: 2018-08-27 17:24:11.237498138 +0000
                    Modify: 2015-08-31 23:27:45.000000000 +0000
                    Change: 2018-01-22 08:13:27.611966864 +0000
                     Birth: -
                    

В Windows имена файлов регистронезависимы. В *nix системах регистр имеет значение. Файлы index.html, Index.html, INDEX.HTML и index.HTML — это разные файлы. Всегда обращайте внимание на регистр, потому что ошибиться довольно легко.

MacOS в этой ситуации идет по пути Windows и тоже не учитывает регистр

Говорят, что в *nix "всё есть файл". На нижнем уровне так и есть (почти). Директория — это специальный файл, который содержит список файлов. Любое подключаемое устройство становится файлом или директорией, если это накопитель. Такая концепция довольно удобна для разработчиков, потому что печать на принтер и вывод на экран между собой ничем не отличаются — для кода это просто "запись в файл". На пользовательском уровне директория всё же отличается от файла и имеет собственные команды для создания, удаления и модификации.

В *nix системах есть базовый набор каталогов, который стандартизирован FHS. За каждым закреплена какая-то особая роль. Например, каталог /etc содержит конфигурацию программ в обычных текстовых файлах (в юниксах нет реестра, вся конфигурация лежит в обычных файлах), а каталог /home содержит домашние директории пользователей системы (исключением является суперпользователь root, его домашний каталог обычно находится по адресу /root).

. В *nix системах развитая система прав, завязанная на пользователей и группы. Не во все директории можно заходить, не все файлы можно читать или менять, и не все программы можно запускать. Об этих правах поговорим позже. Пока достаточно знать, что такие ограничения есть. Их можно увидеть в выводе команды ls -l.

В отличие от Windows, в *nix системах отсутствует понятие "расширение файла". Точка — полноправная часть имени. Это не значит, что в юниксах невозможно понять тип файла. Это возможно, более того, файлы почти всегда именуются так же, как и в Windows, например hello.mp3, но важно понимать, что вся эта строчка — имя файла. Нередко встречаются и такие имена: index.html.haml. В *nix также есть скрытые файлы, но, в отличие от Windows, это не свойство файла, а определённое имя файла. Все файлы и директории, начинающиеся с точки, считаются скрытыми. Вывести все файлы, включая скрытые, можно командой ls -a:

$ ls -a
                    .  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  .ssh
                    

Обратите внимание на две особые директории, обозначенные "точкой" (.) и "двумя точками" (..). Точка означает текущую директорию, а две точки — директорию верхнего уровня. Именно благодаря этой схеме работает команда cd .., которая перемещает нас на уровень выше.

Кроме регулярных файлов, в *nix существует ряд других:

Это наиболее важные типы файлов. Есть ещё и другие, но этого достаточно чтобы понять общее устройство файловой системы в POSIX совместимых ОС.

Теперь рассмотрим способы взаимодействия с файлами

Самый простой способ прочитать файл — команда cat.

$ man cat

NAME
     cat -- concatenate and print files

SYNOPSIS
     cat [-benstuv] [file ...]

...

cat ожидает аргументы — пути до файлов, которые надо читать. В простейшем случае достаточно передать один путь, это довольно удобно, когда надо посмотреть содержимое небольшого файла:

$ cat .bash_logout
# ~/.bash_logout: executed by bash(1) when login shell exits.

# when leaving the console clear the screen to increase privacy

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

Иногда бывает нужно посмотреть только начало файла или его конец, в такой ситуации помогают команды head и tail. Они тоже принимают на вход путь до файла, только head показывает первые 10 строк, а tail — последние 10 строк файла. Это поведение можно менять, задавая желаемое количество строк через опцию -n.

Head

$ head -n 2 .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)

Tail

$ tail -n 2 .bashrc
  fi
fi

Некоторые файлы наполняются очень интенсивно. Например, так называемые "логи". Логи (иногда говорят "журналы") — это текстовые файлы, в которые заносится информация о происходящих процессах в определённой системе. В этой ситуации поможет tail, запущенный в особом режиме благодаря флагу -f. tail -f path/to/file не просто выводит последние строчки файла, но ждёт появления новых. Как только файл дописывается, tail сразу выводит на экран добавленные строки. Для остановки её выполнения нажмите Ctrl + C.

# Вероятно у вас не хватит прав смотреть файл syslog( в каталоге /var/log), чтобы получить к нему доступ,
# наберите sudo перед командой tail как показано ниже, в следующих уроках этот вопрос рассматривается подробнее
# Есть вероятность того что sudo попросить вас ввести пароль. Сделайте это и нажмите Enter. При наборе пароля
# курсор не будет двигаться, это сделано для безопасности.
$ sudo tail -f syslog
Aug 28 18:00:01 ip-10-0-1-223 systemd-udevd[15400]: Could not generate persistent MAC address for veth5c6ed9c: No such file or directory
Aug 28 18:00:01 ip-10-0-1-223 kernel: [126412.013499] device veth6969122 entered promiscuous mode
Aug 28 18:00:01 ip-10-0-1-223 systemd[1]: Starting Update resolvconf for networkd DNS...
Aug 28 18:00:01 ip-10-0-1-223 systemd-timesyncd[522]: Network configuration changed, trying to establish connection.
Aug 28 18:00:01 ip-10-0-1-223 systemd-timesyncd[522]: Synchronized to time server 91.173.73.198:123 (ntp.ubuntu.com).
Aug 28 18:00:01 ip-10-0-1-223 sh[15415]: sed: cant read /run/systemd/netif/leases/*: No such file or directory
Aug 28 18:00:01 ip-10-0-1-223 kernel: [126412.086162] IPv6: ADDRCONF(NETDEV_UP): veth6969122: link is not ready
Aug 28 18:00:01 ip-10-0-1-223 systemd-udevd[15403]: Could not generate persistent MAC address for veth6969122: No such file or directory
Aug 28 18:00:02 ip-10-0-1-223 systemd-timesyncd[522]: Network configuration changed, trying to establish connection.
Aug 28 18:00:02 ip-10-0-1-223 systemd-timesyncd[522]: Synchronized to time server 91.173.73.198:123 (ntp.ubuntu.com).
Aug 28 18:00:02 ip-10-0-1-223 systemd-timesyncd[522]: Network configuration changed, trying to establish connection.

Особая категория программ для просмотра содержимого файла — пейджеры. Пейджер похож на текстовый редактор, но открытый только в режиме чтения. Самый распространённый пейджер называется less. Попробуем открыть с помощью него файл syslog:

# Снова придется воспользоваться sudo
$ sudo less syslog
# здесь много вывода

less открывает файл и остаётся в этом режиме. Он позволяет перемещаться по файлу вперёд и назад, производить поиск. Одна из отличительных особенностей пейджеров состоит в том, что они одинаково хорошо и быстро работают с файлами любых размеров. Всё потому, что пейджер не пытается загрузить в память весь файл до его отображения. Он грузит только ту часть, которая помещается на экран и при перемещении подгружает остальное.

less предоставляет несколько десятков команд для перемещения по тексту и его поиску, про большинство из них можно прочитать в соответствующем мануале. Здесь же затронем основные:

Возможно, вы увидели сходство поведения пейджеров с тем, что мы наблюдали в мануалах. Открою секрет: когда мы запускали man, то перед нами открывался less с загруженным туда контентом. Как вы увидите позже, пейджеры невероятно популярны и неявно запускаются другими программами.