Краткое руководство по командам файловой системы 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:
- Оболочка Bash
- Введение в сценарии оболочки Bash
- Раковина рыбы
- Оболочка, наблюдайте за содержимым файла по мере его заполнения
- Как выйти из Vim
- Редакторы UNIX
- Команды файловой системы UNIX
- Учебник по оболочкам Unix
- Как установить псевдоним в оболочке macOS или Linux
- Практическое руководство по домашнему пиву
- Как исправить ошибку неверного пути к активному разработчику xcrun в macOS
- Командная строка для начинающих
- Введение в Linux
- Как найти процесс, использующий порт
- Команды Linux: mkdir
- Команды Linux: cd
- Команды Linux: pwd
- Команды Linux: rmdir
- Команды Linux: ls
- Команды Linux: mv
- Команды Linux: cp
- Команды Linux: меньше
- Команды Linux: хвост
- Команды Linux: коснитесь
- Команды Linux: cat
- Команды Linux: найти
- Команды Linux: ln
- Команды Linux: ps
- Команды Linux: echo
- Команды Linux: вверх
- Команды Linux: kill
- Команды Linux: killall
- Команды Linux: псевдоним
- Команды Linux: вакансии
- Команды Linux: bg
- Команды Linux: fg
- Команды Linux: введите
- Команды Linux: какие
- Команды Linux: whoami
- Команды Linux: кто
- Команды Linux: очистить
- Команды Linux: su
- Команды Linux: sudo
- Команды Linux: chown
- Команды Linux: chmod
- Команды Linux: passwd
- Команды Linux: открыть
- Команды Linux: wc
- Команды Linux: история
- Команды Linux: du
- Команды Linux: umask
- Команды Linux: grep
- Команды Linux: man
- Команды Linux: uname
- Команды Linux: сортировка
- Команды Linux: uniq
- Команды Linux: diff
- Команды Linux: nohup
- Команды Linux: df
- Команды Linux: xargs
- Команды Linux: gzip
- Команды Linux: gunzip
- Команды Linux: ping
- Команды Linux: traceroute
- Команды Linux: tar
- Команды Linux: экспорт
- Команды Linux: crontab
- Команды Linux: dirname
- Команды Linux: базовое имя
- Команды Linux: printenv
- Команды Linux: env
- Краткое руководство по редактору ed
- Краткое руководство по vim
- Краткое руководство по emacs
- Краткое руководство по нано
- Linux, на устройстве не осталось места
- Как использовать Netcat