Команды файловой системы UNIX

Краткое руководство по командам файловой системы UNIX

Я написал это руководство с целью облегчить изучение, запоминание и ссылки на основные утилиты файловой системы UNIX. На практике macOS и GNU / Linux являются системами UNIX. macOS - это сертифицированная UNIX, основанная на BSD UNIX, а GNU / Linux - это UNIX-подобная версия или производная UNIX.

После введения в файловую систему и ее работу я подробно расскажу о следующих командах:

Работа с папками и файлами

  • mkdir
  • cd
  • pwd
  • rmdir
  • ls
  • touch
  • mv
  • cp
  • ln

Разрешения

  • chmod
  • chown
  • chgrp

Содержание файлов

  • cat
  • less
  • find
  • cpio
  • dd
  • wc

Как работает файловая система

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

В этом руководстве я, в частности, исследую файловую систему UNIX, которую можно найти на компьютерах с macOS и GNU / Linux. Файловая система Windows отличается, хотя Windows 10 сПодсистема Windows для LinuxУстановленный позволяет использовать те же утилиты, которые я описываю здесь.

Файловая система начинается с/. Это корневой узел, на котором размещаются каталоги первого уровня.

Обычные каталоги, которые вы найдете в системе UNIX:

  • /binсодержит основные системные команды
  • /etcсодержит конфигурацию системы
  • /devсодержит системные устройства
  • /usrсодержит пользовательские файлы
  • /tmpсодержит временные файлы

… Есть еще кое-что, но вы поняли.

Сколько зависит от типа используемой системы. Linux стандартизировал папки, используя стандарт Linux Standard Base, и обычно у вас есть:

  • /binосновные системные команды
  • /bootфайлы, используемые для загрузки машины (не существующие в macOS)
  • /devсистемные устройства
  • /etcфайлы конфигурации системы
  • /etc/optфайлы конфигурации программ пользователя
  • /homeдомашние каталоги пользователей (/ Users в macOS)
  • /libсистемные библиотеки (отсутствуют в macOS)
  • /mntсмонтированные файловые системы
  • /optпользовательские программы
  • /procпользователь по ядру и процессам (не существует в macOS)
  • /rootдомашняя папка пользователя root (не существует в macOS)
  • /run(не существует в macOS)
  • /sbinпользователь системных двоичных файлов для загрузки системы
  • /tmpвременные файлы
  • /usrсодержит пользовательское программное обеспечение, библиотеки и инструменты
  • /usr/binбинарные файлы пользователя
  • /usr/includeфайлы заголовков пользователей
  • /usr/libпользовательские библиотеки
  • /usr/localиспользуется пользовательским программным обеспечением для хранения установок, например Homebrew на macOS
  • /usr/sbinсистемные двоичные файлы
  • /usr/shareсодержит независимые от архитектуры данные. Он может содержать много разного, включая документацию и справочные страницы.
  • /usr/srcсодержит исходный код установленных пакетов (не существует в macOS)
  • /varсодержит временные файлы, журналы и многое другое

В macOS есть разные папки, в том числе

  • /Applicationsхранит приложения пользователей
  • /Libraryсодержит библиотеку (настройки и ресурсы), которые глобально используются пользователями системы
  • /Systemсодержит системные файлы
  • /privateхранит системные файлы, журналы и многое другое

Каждая папка содержит файлы и каталоги, которые, в свою очередь, могут содержать другие файлы и каталоги, и так далее.

У всех файлов и папок есть имена.

Что делает имя правильным? Он может содержать от 1 до 255 символов и должен состоять из любых буквенно-цифровых символов (a-z/A-Z/0-9), символ подчеркивания (_), точка (.) и запятая (,) символы.

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

В зависимости от системы файловая система может быть чувствительной к регистру. В macOS файловая системанетпо умолчанию чувствителен к регистру, поэтому у вас не может быть файла / папки с именемtestа другой позвонилTest. Это одно и то же.

Теперь я собираюсь представить различные служебные команды. Они выполняются в контексте оболочки, такой как Bash, Fish или Zsh. Когда вы запустите оболочку, вы окажетесь в своем домашнем каталоге. В macOS это находится в/Users/<yourname>/дорожка.

Команды не изменяются, если вы меняете используемую оболочку, потому что это основные, фундаментальные команды UNIX. Вы, вероятно, будете использовать эти команды в течение многих десятилетий, если не произойдет какая-то революция в мире вычислений (а они случаются, но эти серверные вещи обычно продвигаются медленно). Чтобы дать вам некоторую перспективу,mkdirКоманда, которую вы сейчас увидите, была представлена в UNIX AT&T версии 1 в начале 80-х годов.

Работа с папками и файлами

mkdir

Вы создаете папки, используяmkdirкоманда:

mkdir fruits

Вы можете создать несколько папок с помощью одной команды:

mkdir dogs cars

Вы также можете создать несколько вложенных папок, добавив-pвариант:

mkdir -p fruits/apples

Параметры в командах UNIX обычно принимают эту форму. Вы добавляете их сразу после имени команды, и они изменяют поведение команды. Вы также можете часто комбинировать несколько вариантов.

Вы можете узнать, какие параметры поддерживает команда, набравman <commandname>. Попробуйте сейчас сman mkdirнапример (нажмитеqключ для перехода на страницу руководства). Страницы руководства - это замечательная встроенная справка для UNIX.

cd

Создав папку, вы можете перейти в нее, используяcdкоманда.cdсредстваcповеситьdкаталог. Вы вызываете его, указывая папку, в которую нужно перейти. Вы можете указать имя папки или весь путь.

Пример:

mkdir fruits
cd fruits

Теперь вы вfruitsпапка.

Вы можете использовать..специальный путь для указания родительской папки:

cd .. #back to the home folder

Символ # обозначает начало комментария, которое длится всю строку после того, как он был найден.

Вы можете использовать его для формирования пути:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

Есть еще один специальный индикатор пути, который., и указываетТекущийпапка.

Вы также можете использовать абсолютные пути, которые начинаются с корневой папки./:

cd /etc

pwd

Всякий раз, когда вы чувствуете себя потерянным в файловой системе, вызовитеpwdкоманда, чтобы узнать, где вы находитесь:

pwd

Он напечатает текущий путь к папке.

rmdir

Так же, как вы можете создать папку, используяmkdir, вы можете удалить папку, используяrmdir:

mkdir fruits
rmdir fruits

Вы также можете удалить сразу несколько папок:

mkdir fruits cars
rmdir fruits cars

Папка, которую вы удаляете, должна быть пустой.

Чтобы удалить папки с файлами в них, мы будем использовать более общийrmкоманда, которая удаляет файлы и папки, используя-rfопции:

rm -rf fruits cars

Будьте осторожны, так как эта команда не запрашивает подтверждения и немедленно удаляет все, что вы просите удалить.

Здесь нетмусорное ведропри удалении файлов из командной строки и восстановление потерянных файлов может быть затруднено.

ls

Внутри папки вы можете перечислить все файлы, содержащиеся в папке, используяlsкоманда:

ls

Если вы добавите имя папки или путь, он распечатает содержимое этой папки:

ls /bin

lsпринимает много вариантов. Одна из моих любимых комбинаций опций --al. Попытайся:

ls -al /bin

по сравнению с равнинойls, это возвращает гораздо больше информации.

У вас слева направо:

  • права доступа к файлам (и если ваша система поддерживает ACL, вы также получите флаг ACL)
  • количество ссылок на этот файл
  • владелец файла
  • группа файла
  • размер файла в байтах
  • дата и время изменения файла
  • имя файла

Этот набор данных генерируетсяlвариант. Вaопция вместо этого также показывает скрытые файлы.

Скрытые файлы - это файлы, начинающиеся с точки (.).

touch

Вы можете создать пустой файл, используяtouchкоманда:

touch apple

Если файл уже существует, он открывает файл в режиме записи, и метка времени файла обновляется.

mv

Когда у вас есть файл, вы можете перемещать его, используяmvкоманда. Вы указываете текущий путь к файлу и его новый путь:

touch test
mv pear new_pear

Вpearфайл теперь перемещен вnew_pear. Вот как тыпереименоватьфайлы и папки.

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

touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder

cp

Вы можете скопировать файл, используяcpкоманда:

touch test
cp apple another_apple

Для копирования папок необходимо добавить-rвозможность рекурсивного копирования всего содержимого папки:

mkdir fruits
cp -r fruits cars

ln

Давайте теперь познакомимся с концепцией ссылок. Ссылка - это файл, который указывает на другой файл. Они есть во всех основных операционных системах.

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

Мы создаем символическую ссылку, используя этот синтаксис:ln -s original linkname. Пример:

mkdir fruits
ln -s fruits newfruits

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

Разрешения

Я кратко упоминал о разрешениях ранее, когда представлялls -alкоманда.

Странная строка, которую вы видите в каждой строке файла, напримерdrwxr-xr-x, определяет права доступа к файлу или папке.

Давайте рассмотрим это.

Первая буква указывает на тип файла:

  • -означает, что это нормальный файл
  • dозначает, что это каталог
  • lозначает, что это ссылка

Тогда у вас есть 3 набора значений:

  • Первый набор представляет разрешениявладелецфайла
  • Второй набор представляет собой разрешения членовгруппафайл связан с
  • Третий набор представляет разрешениявсе остальные

Эти наборы состоят из 3 значений.rwxозначает, что конкретныйперсонаимеет доступ на чтение, запись и выполнение. Все, что удаляется, заменяется на-, который позволяет формировать различные комбинации значений и относительных разрешений:rw-,r--,r-x, и так далее.

Вы можете изменить разрешения, предоставленные файлу, используяchmodкоманда.

chmodможно использовать 2 способами. Первый использует символьные аргументы, второй - числовые аргументы. Начнем сначала с символов, что более интуитивно понятно.

Вы печатаетеchmodза которым следует пробел и буква:

  • aозначаетвсе
  • uозначаетПользователь
  • gозначаетгруппа
  • oозначаетдругие

Затем вы вводите либо+или же-чтобы добавить разрешение или удалить его. Затем вы вводите один или несколько символов разрешений (r,w,x).

За всем следует имя файла или папки.

Вот некоторые примеры:

chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file

Вы можете применить одни и те же разрешения к нескольким персонажам, добавив несколько букв перед+/-:

chmod og-r filename #other and group can't read any more

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

Числовые аргументы работают быстрее, но мне трудно их запомнить, когда вы не используете их изо дня в день. Вы используете цифру, которая представляет разрешения персонажа. Это числовое значение может быть максимум 7, и оно рассчитывается следующим образом:

  • 1если есть разрешение на исполнение
  • 2если есть разрешение на запись
  • 4если есть разрешение на чтение

Это дает нам 4 комбинации:

  • 0нет разрешений
  • 1может выполнить
  • 2могу писать
  • 3может писать, выполнять
  • 4может читать
  • 5может читать, выполнять
  • 6может читать, писать
  • 7может читать, писать и выполнять

Мы используем их парами по 3, чтобы установить разрешения для всех 3 групп вместе:

chmod 777 filename
chmod 755 filename
chmod 644 filename

Владелец и группа

Вы можете изменить владельца файла, используяchownкоманда:

chown <username> <filename>

Вы можете изменить группу файла, используяchgrpкоманда:

chgrp <group> <filename>

Управление содержимым файлов

less

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

Использование:less <filename>.

Как только вы окажетесь внутриlessсеанс, вы можете выйти, нажавq.

Вы можете перемещаться по содержимому файла, используяupиdownклавишами или с помощьюspace barиbдля навигации по страницам. Вы также можете перейти к концу файла, нажавGи вернитесь к началу нажатияg.

Вы можете искать содержимое внутри файла, нажав/и введите слово для поиска. Этот поисквперед. Вы можете искать в обратном направлении, используя?символ и ввод слова.

Эта команда просто визуализирует содержимое файла. Вы можете напрямую открыть редактор, нажавv. Он будет использовать системный редактор, который в большинстве случаевvim.

Нажатие наFключ входитрежим следования, или жережим часов. Когда файл изменяется кем-то другим, например, из другой программы, вы можете увидеть изменения.жить. По умолчанию этого не происходит, и вы видите только версию файла на момент его открытия. Вам нужно нажатьctrl-Cчтобы выйти из этого режима. В этом случае поведение похоже на запускtail -f <filename>команда.

Вы можете открывать несколько файлов и перемещаться по ним с помощью:n(перейти к следующему файлу) и:p(перейти к предыдущему).

tail

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

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

tail -f /var/log/system.log

Для выхода нажмитеctrl-C.

Вы можете распечатать последние 10 строк файла:

tail -n 10 <filename>

Вы можете распечатать все содержимое файла, начиная с определенной строки, используя+перед номером строки:

tail -n +10 <filename>

tailможет сделать гораздо больше, и, как всегда, мой совет - проверитьman tail.

cat

Похожий наtailкаким-то образом у нас естьcat. Кромеcatтакже может добавлять содержимое в файл, что делает его очень мощным.

В простейшем использованииcatвыводит содержимое файла на стандартный вывод:

cat file

Вы можете распечатать содержимое нескольких файлов:

cat file1 file2

и используя оператор перенаправления вывода>вы можете объединить содержимое нескольких файлов в новый файл:

cat file1 file2 > file3

С помощью>>вы можете добавить содержимое нескольких файлов в новый файл, создав его, если он не существует:

cat file1 file2 >> file3

При просмотре файлов исходного кода приятно видеть номера строк, и вы можетеcatраспечатайте их, используя-nвариант:

cat -n file1

Вы можете добавить число только в непустые строки, используя-b, или вы также можете удалить все несколько пустых строк, используя-s.

catчасто используется в сочетании с оператором трубы|чтобы передать содержимое файла в качестве входных данных другой команде:cat file1 | anothercommand.

wc

wcсредстваколичество слов. Вот наиболее частое использование:

  • wc -l file1подсчитывать строки
  • wc -w file1подсчитывать слова
  • wc -c file1подсчитывать символы
  • wc -m file1подсчет символов с многобайтовой поддержкой (т.е. смайлики считаются как 1, а не как несколько символов)

Вы можете запуститьwcпредоставление нескольких файлов, и в этом случае он будет выполнять вычисления для каждого файла отдельно, а затем распечатывать сводку:

find

ВfindКоманда может использоваться для поиска файлов или папок, соответствующих определенному шаблону поиска. Ищет рекурсивно.

Давайте узнаем это на примере.

Найдите все файлы в текущем дереве с.jsрасширение и выведите относительный путь каждого файла, соответствующего запросу:

find . -name '*.js'

Важно использовать кавычки вокруг специальных символов, например*чтобы оболочка не интерпретировала их.

Найдите каталоги под текущим деревом, соответствующие имени «src»:

find . -type d -name src

Использовать-type fдля поиска только файлов, или-type lдля поиска только символьных ссылок.

-nameчувствителен к регистру. использовать-inameдля выполнения поиска без учета регистра.

Вы можете искать по нескольким корневым деревьям:

find folder1 folder2 -name filename.txt

Найдите каталоги в текущем дереве, соответствующие имени «node_modules» или «public»:

find . -type d -name node_modules -or -name public

Вы также можете исключить путь, используя-not -path:

find . -type d -name '*.md' -not -path 'node_modules/*'

Вы можете искать файлы, содержащие более 100 символов (байтов):

find . -type f -size +100c

Искать файлы размером более 100 КБ, но меньше 1 МБ:

find . -type f -size +100k -size -1M

Искать файлы, отредактированные более 3 дней назад

find . -type f -mtime +3

Искать файлы, отредактированные за последние 24 часа

find . -type f -mtime -1

Вы можете удалить все файлы, соответствующие поисковому запросу, добавив-deleteвариант. Это удалит все файлы, отредактированные за последние 24 часа:

find . -type f -mtime -1 -delete

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

find . -type f -exec cat {} \;

обратите внимание на прекращение\;.{}заполняется именем файла во время выполнения.

Скачать мою бесплатнуюСправочник по командам Linux


Больше руководств по cli: