Существует два аспекта:
Существуют некоторые компиляторы C, которые не могут проанализировать последнюю строку, если она не заканчивается новой строкой. Стандарт C указывает, что файл C должен закончиться новой строкой (C11, 5.1.1.2, 2.) и что последняя строка без новой строки приводит к неопределенному поведению (C11, J.2, 2-й объект). Возможно, по историческим причинам, потому что некоторый поставщик такого компилятора был частью комитета, когда первый стандарт был записан. Таким образом предупреждение GCC.
diff
программы (как используемый git diff
, GitHub и т.д.), показывают линию за линией различия между файлами. Они обычно печатают сообщение, когда только один файл заканчивается новой строкой, потому что еще Вы не видели бы это различие. Например, если бы единственной разницей между двумя файлами является присутствие последнего символа новой строки, без подсказки было бы похоже, что оба файла были тем же, когда diff
и cmp
возвратите код выхода неравный успех и контрольные суммы файлов (например, через md5sum
) не соответствовать.
При применении полномочий к каталогам на Linux биты полномочий имеют различные значения, чем на регулярных файлах.
r
) позволяет нужному пользователю перечислять файлы в рамках каталогаw
) позволяет нужному пользователю создавать, переименовывать, или удалять файлы в рамках каталога и изменять атрибуты каталогаx
) позволяет нужному пользователю вводить каталог, и файлы доступа и каталоги внутриT
, или t
если выполнить бит установлен для других), указывает, что файлы и каталоги в рамках того каталога могут только быть удалены или переименованы их владельцем (или корень)Во-первых, думайте: Что такое каталог? Это - просто список объектов (файлы и другие каталоги), это живет в. Так: каталог = список имен.
Считайте бит =, Если установлено, можно прочитать этот список. Так, например, если Вам назвали каталог poems
:
ls poems
и Вы получите список объектов, живущих в (-l
не покажет деталей!).touch poems/so <TAB> poems/somefile
.poems
Ваш рабочий каталог (т.е. cd
в него).Запишите бит =, Если установлено, можно изменить этот список, т.е. Вы можете {добавлять, переименовывать, удалять} имена на нем. Но! Можно на самом деле сделать это, только если выполнить бит установлен также.
Выполнитесь бит = Делают этот каталог Вашим рабочим каталогом т.е. cd
в него. Вам нужно это разрешение, если Вы хотите:
Интересный случай 1: Если у Вас есть запись +, выполняют полномочия на каталоге, Вы можете {удалять, переименовывать} объекты, живущие в том, даже если у Вас нет записи perimission на тех объектах. (используйте липкий бит для предотвращения этого),
Интересный случай 2: Если Вы имеете, выполняют (но не запись) разрешение на каталоге, И у Вас есть разрешение записи на файле, живущем в, Вы не можете удалить файл (потому что это включает удаление его из списка). Однако можно стереть его содержание, например, если это - текстовый файл, можно использовать vi, чтобы открыть его и удалить все. Файл все еще будет там, но это будет пусто.
Сводка:
Считайте бит =, можно считать имена в списке.
Запишите бит =, Вы можете {добавлять, переименовывать, удалять} имена в списке, ЕСЛИ выполнить бит установлен также.
Выполните бит =, можно сделать этот каталог рабочим каталогом.
PS: статья, упомянутая Kusalananda, является хорошим чтением.
x
бит для любого доступа к этому файлу: для cat a/b/c/d
, Мне нужно x
обдумал все a
, b
и c
, даже если я не использую их в качестве cwd.
– glglgl
03.11.2014, 11:24
x
разрешение на каталоге, если Вы не имеете x
разрешение на файле в, Вы не можете действительно "выполнить" файл. Вы можете только cat
это, например, но Вы не можете выполнить сам файл.
– xji
16.02.2015, 11:19
ls -l
работа для папки, нуждайтесь в обоих r
и x
разрешение.
– Eric Wang
12.06.2015, 12:48
Сводка:
Каталог с x
набор битов позволяет пользователю cd
(измените каталог) в этот каталог и доступ файлы в нем.
Подробнее:
Читайте (r
)
Способность считать названия файлов, хранивших в этом каталоге.
Запишите (w
)
Способность переименовать файлы в каталоге, создайте новые файлы или удалите существующие файлы, если Вы также имеете, Выполняют полномочия. Если Вы не имеете, выполняют перманент, то пишут, что перманент бессмыслен.
Выполнитесь (x
)
Способность к
cd
в этот каталог и доступ файлы в этом каталоге.
Вот несколько примеров, которые должны помочь понять:
# "Full Access". Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------ 1 reegen reegen 4096 Jan 01 2003 dir
# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------ 1 reegen reegen 4096 Jan 01 2003 dir
# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory. If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself. She can access any file (file
# permissions permitting) if she knows its name. She can
# create new files, or rename/delete existing ones.
d-wx------ 1 reegen reegen 4096 Jan 01 2003 dir
# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------ 1 reegen reegen 4096 Jan 01 2003 dir
В статье Hacking Linux Exposed существует еще больше информации.
Я подготовил эту таблицу со всеми возможными разрешениями и их практическими последствиями.
(*) Только имена файлов : другие атрибуты, такие как размер или дата, недоступны. Например. вы можете использовать клавишу табуляции для автозаполнения, но не команду ls.
Некоторые мысли :
Для любой операции, обращающейся к файлу или каталогу, она должна сначала разрешить путь к файлу или каталогу. Для разрешения требуется, чтобы у пользователя было разрешение на выполнение для всех каталогов по пути, кроме конечного компонента пути. Таким образом, для каталогов вы можете думать, что бит выполнения означает «разрешимый».
В качестве примера возьмем путь /a/b/c.txt
, скажем, у пользователя есть 1 )разрешение на выполнение /
и /a
; 2 )имеет разрешение на чтение /a/b
; 3 )разрешение на чтение и запись на /a/b/c.txt
.
Пользователь не сможет прочитать (список )/a
, так как у него нет разрешения на чтение. Но разрешение пути не терпит неудачу.
Пользователь сможет читать (список )/a/b
, поскольку у него есть разрешение на выполнение /
, /a
и разрешение на чтение /a/b
. Обратите внимание, что при чтении /a/b
видно имя файла c.txt
, но метаданные (, например. размер файла ), а содержимое — нет, потому что имя файла хранится вместе с каталогом, а не с файлом, а метаданные хранятся в иноде файла.
Пользователю не удастся прочитать /a/b/c.txt
, потому что при разрешении пути от /
до /a
и до /a/b
происходит сбой в /a/b
, поскольку у пользователя нет разрешения на выполнение.
См. также , как путь разрешается в файл .
Полезная аналогия состоит в том, чтобы думать о каждом файле как о книге, а о каждом каталоге как о комнате, где хранятся книги.
Существуют правила, позволяющие перечислить все имена в комнате :бит чтения для каталогов. Правила удаления книги из комнаты :бит записи для каталогов. И правила войти в комнату и исследовать :получившийся каталог исполняют бит.
Эти правила являются отдельными и отличаются от правил для каждой книги. Существуют правила, позволяющие кому-либо открывать книгу и читать ее содержимое :бит чтения (с )для каждого файла. Существуют правила изменения содержимого книги :бит записи (с )для каждого файла. И для выполнения файла :бит выполнения (с )для каждого файла.
Я пишу бит (с ), потому что для каждого действия есть три бита. Существует один бит чтения для владельца, один бит чтения для группы (s )и бит чтения для всех остальных (других ). Если какой-либо из этих трех битов установлен для определенного пользователя, у этого пользователя активен бит чтения. Неважно, как этот бит был обнаружен активным, либо u ser, g roup, либо o ther, он дает одинаковые эффективные результаты.
Таким образом, пользователю может быть разрешено войти в комнату и взять книги из библиотеки, но не разрешено читать содержимое той же книги.
Вот почему бит чтения для каталогов требуется :для управления тем, кому разрешено перечислять содержимое комнаты (названия книг ).
А бит выполнения используется для управления тем, кто может входить в комнату с книгами.
доступ (2 )— справочная страница Linux
A file is accessible only if the permissions on each of the directories in the path prefix of pathname grant search (i.e., execute) access. If any directory is inaccessible, then the access() call fails, regardless of the permissions on the file itself.
путь _разрешение (7 )— страница руководства Linux
Эта справочная страница объясняет, как разрешается имя пути в отношении разрешений
Step 2: walk along the path
If the process does not have search permission on the current lookup directory, an EACCES error is returned ("Permission denied").
«Разрешение на поиск» означает разрешение на выполнение каталогов.
+x
на каталоге предоставляет доступ в файлы inodes через этот определенный каталог (ничто меньше, ничто больше, хорошо …, возможно,chdir
потребности+x
также). Чтобы считать или записать содержание одного файла, пользователю также нужно+r
/+w
на этом файле, но это - отличные полномочия (они ничего не переопределяют). – Stéphane Gimenez 22.09.2011, 16:06+x
на каталоге предоставляет доступ в файлы inodes" - Это походит на хороший nemonic, но возможно не рассказывает целую историю? Без выполнить набора битов на каталоге Вы не можете изменить имя файла файла в том каталоге. Я задаюсь вопросом, почему это, потому что имя файла хранится в записи каталога, не inode. очень интересный – Kevin Wheeler 18.12.2015, 00:11