Мне было интересно, есть ли способ зарегистрировать это, но так как большинство современных поисковых систем плохо работают с фразами длиной более 5 слов, мне нужна некоторая помощь по этому вопросу.
Мне было интересно, потому что я делаю bash-скрипт, который должен регистрировать файлы определенного типа и принимать соответствующие решения. Технически это не важно для моего проекта, но мне было любопытно.
Кроме того, если они считаются обычными файлами, то есть ли способ проверить, не являются ли эти файлы жестко связанными без анализа ls -i
? И есть ли способ проверить, жестко ли связан какой-нибудь произвольный файл X с каким-либо другим произвольным файлом Y без использования find -i
команды?
bash
shell-script
files
hard-link
Мистер Минти Фреш
источник
источник
Ответы:
В системах в стиле Unix структура данных, которая представляет объекты файловой системы (другими словами, данные о файле), хранится в так называемом «inode».
Имя файла - это просто ссылка на этот индекс и называется «жесткой ссылкой». Нет разницы между именем файла и любой последующей ссылкой. Поэтому ответ «да»: жесткая ссылка - это обычный файл, и действительно, обычный файл - это жесткая ссылка.
Команда
ls
покажет вам, сколько жестких ссылок существует на файл.Например:
Здесь мы создали файл с именем
/tmp/hello.txt
. В1
выводе fromls -l
указывается, что существует 1 жесткая ссылка на этот файл. Эта жесткая ссылка - само имя файла/tmp/hello.txt
.Если мы сейчас создадим еще одну жесткую ссылку на этот файл:
Теперь вы можете видеть, что оба имени файла указывают на наличие двух жестких ссылок на файл. Ни одно из них не является «правильным» именем файла, они оба одинаково действительны. Мы можем видеть, что они оба указывают на один и тот же индекс (в данном случае 5374043):
Существует распространенное заблуждение, что это не так для каталогов. Я слышал, что люди говорят, что количество ссылок, возвращаемых
ls
для каталога, равно количеству подкаталогов, в том числе.
и..
является неправильным . Или, по крайней мере, хотя он даст вам правильный номер, это верно по неправильным причинам!Если мы создадим каталог и сделаем,
ls -ld
мы получим:Это показывает, что есть 2 жесткие ссылки на этот каталог. Эти:
Обратите внимание, что
/tmp/testdir/..
это не ссылка на этот каталог, это ссылка на/tmp
. И это говорит вам, почему работает функция «количество подкаталогов». Когда мы создаем новый подкаталог:you can now see there are 3 hard links to
/tmp/testdir
directory. These are:Таким образом, каждый новый подкаталог будет увеличивать количество ссылок на единицу из-за
..
записи, которую он содержит.источник
Жесткие ссылки считаются тем, с чем они связаны. Вы можете ссылаться на что-нибудь в той же файловой системе.
Каждая жесткая ссылка на что-либо эквивалентна, базовый объект остается неизменным до тех пор, пока на него есть какая-либо (edit: non-symbolic) ссылка (даже дескриптор открытого файла, за что я смущаюсь, потому что я очень благодарен).
Система будет применять правила для ссылок на каталоги, вы получите одну именованную ссылку на каталог, и система автоматически добавит свою встроенную
.
ссылку и ссылки на любые подкаталоги..
(обратите внимание, что.
в ls выше есть две ссылки), но это явная проверка, для некоторых модов Системные привилегированные пользователи, которые обещают обещание не создавать циклы, могут сами добавлять новые ссылки. Файловая система не заботится, она может просто представлять произвольные графы каталогов, но никто не хочет иметь с ними дело.Существуют (многие не-unix) файловые системы, которые не работают таким образом, включая те, которые называют то, что они предлагают, в качестве замены «жестких ссылок». OS X добавила эквивалент в HFS + (который не имеет их изначально), если я правильно помню, я не знаю, насколько точно он сохраняет семантику здесь.
источник
./tsock
самом деле делает?socket()
создает фактический сокет,bind()
дает ему конкретное имя,connect()
соединяет созданный вами сокет с каким-либо именованным сокетом. Разные виды сокетов используют разные виды имен, например, интернет-сокеты используют интернет-адреса, но все они имеют общий API (включаяread()
иwrite()
, мне грустно, что вы не можетеopen()
использовать сокет файловой системы, и ОС или libc делаютsocket()
иconnect()
для вас) ,man 7 socket
имеет больше, все сетевые протоколы делают для fidgety manpage.