Файлы в Linux

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

Все объекты в Linux — файлы

Первое, что вам нужно понять: в Linux на техническом уровне все на самом деле является файлом. Текстовый файл — это файл, папка — это файл, ваша клавиатура — это файл (его система может только читать), ваш монитор — это файл (в него система может только записывать) и т. д. Конечно, эти знания не слишком помогут с тем, что мы делаем сейчас, однако они позволяют лучше понимать поведение Linux. 

В Linux нет расширений

Это немного непривычно, но со временем все станет понятнее. Расширение файла обычно представляет собой набор из 2–4 символов после точки в конце файла, который обозначает тип файла. Ниже приведены распространенные расширения:

  • file.exe — исполняемый файл.
  • file.txt — простой текстовый файл.
  • file.png, file.gif, file.jpg — изображение.

В других системах, таких как Windows, расширение важно: система использует его для определения типа файла. Linux игнорирует расширение и просматривает файл, чтобы определить, какой это тип. Так, например, у нас может быть файл photo.png с какой-то фотографией. Мы можем переименовать файл в photo.txt или просто в photo, и Linux все равно обработает этот файл как файл с изображением. Поэтому иногда бывает трудно определить, к какому типу относится конкретный файл. К счастью, есть команда под названием file, с помощью которой это можно выяснить.

file [путь]

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

Linux чувствителен к регистру

Это часто вызывает проблемы у людей, которые плохо знакомы с Linux. В других системах, таких как Windows, регистр не учитывается при обращении к файлам. С Linux не так. То есть можно иметь два или более файлов и каталогов с одинаковыми именами, но буквами разного регистра. И это будут разные файлы.

1. user@bash: ls Documents
2. FILE1.txt File1.txt file1.TXT
3. …
4. user@bash: file Documents/file1.txt
5. Documents/file1.txt: ERROR: cannot open ‘file1.txt’ (No such file or directory)

Параметры командной строки тоже чувствительны к регистру. Например, для команды ls есть две опции s и S, которые делают совершенно разные вещи. Распространенная ошибка — нам нужна опция, которая пишется в верхнем регистре, а мы пишем ее в нижнем и удивляемся, почему результат не соответствует нашим ожиданиям.

Пробелы в именах файлов

Пробелы в именах файлов и каталогов вполне допустимы, но с ними нужно быть немного осторожнее. Как вы помните, пробел в командной строке разделяет элементы. С его помощью мы узнаем, что является именем программы, а что — аргументами командной строки. Если бы мы хотели перейти в каталог под названием Holiday photos, то способ из примера ниже не сработал бы:

1. user@bash: ls Documents
2. FILE1.txt File1.txt file1.TXT Holiday Photos
3. …
4. user@bash: cd Holiday Photos
5. bash: cd: Holiday: No such file or directory

Дело в том, что Holiday Photos рассматривается как два аргумента командной строки. Команда cd переходит в каталог, указанный только первым аргументом. Чтобы обойти это, нам нужно указать терминалу, что мы хотим, чтобы Linux рассматривал Holiday Photos как один аргумент командной строки. Есть два способа сделать это.

Кавычки

Первый способ — использовать кавычки. Можно использовать одинарные или двойные. Позже мы увидим, что между ними есть небольшая разница, но пока это несущественно. Все, что находится внутри кавычек, считается одним элементом.

1. user@bash: cd 'Holiday Photos'
2. user@bash: pwd
3. /home/karpaff/Documents/Holiday Photos

Управляющие символы

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

1. user@bash: cd Holiday\ Photos
2. user@bash: pwd
3. /home/karpaff/Documents/Holiday Photos

В приведенном выше примере пробел между Holiday и Photos обычно имеет особое значение: он разделяет их на отдельные аргументы командной строки. Поскольку мы поместили перед ним обратную косую черту, это особое значение было отменено.

Примечание. В предыдущем разделе мы узнали о заполнении строки нажатием клавиши Tab. Если вы используете это до того, как столкнетесь с пробелом в имени каталога, терминал автоматически отключит любые пробелы в имени.

Скрытые файлы и каталоги

На самом деле в Linux есть очень простой и элегантный механизм для указания того, что файл или каталог скрыт. Если имя файла или каталога начинается с . (точки), то файл считается скрытым. Вам даже не нужна специальная команда или действие, чтобы скрыть файл.

Файлы и каталоги могут быть скрыты по разным причинам. Например, файлы конфигурации для конкретного пользователя (которые обычно хранятся в домашнем каталоге) скрыты, чтобы они не мешали пользователю выполнять свои повседневные задачи.

Чтобы сделать файл или каталог скрытым, все, что вам нужно сделать, это создать файл или каталог с именем, начинающимся с .. Аналогичным образом вы можете переименовать скрытый файл, удалить точку, и он перестанет быть скрытым.

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

1. user@bash: ls Documents
2. FILE1.txt File1.txt file1.TXT
3. ...
4. user@bash: ls -a Documents
5. ... FILE1.txt File1.txt file1.TXT .hidden .file.txt
6. ...

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

Что нужно запомнить

Команды

file 
Позволяет получить информацию о типе файла.

ls -a 
Перечисляет содержимое каталога, включая скрытые файлы.

Идеи

В Linux все является файлом.
Даже каталоги.

Linux — это система без расширений.
Файлы могут иметь любое расширение или вообще не иметь.

Linux чувствителен к регистру.
Остерегайтесь глупых опечаток.

Практические задания

    1. Попробуйте запустить команду file с различными входными данными. При этом убедитесь, что вы попробовали как абсолютные, так и относительные пути.
    2. Теперь выполните команду, которая выведет список содержимого вашего домашнего каталога, включая скрытые файлы и каталоги.
codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©