LINUX.ORG.RU
ФорумAdmin

ln /path/to/my/file работает подозрительно

 жоская ссылка


0

1

Таким образом создается «жесткая» ссылка. Ожидается, что при изменении оригинала, либо этой ссылки будет меняться оба файла: и ссылка, и оригинал - с какой стороны в них не влезай, меняешь одно, меняется другое. Но не меняется. Посему 2 вопрса: Так и должно быть? Как сделать так, чтоб ожидаемое поведение было реальным?

[убиват за такие тэги]

man hardlink! При изменении файла происходит unlink с созданием нового файла, в результате чего другая ссылка будет ссылаться на неизмененный оригинал.

Как сделать так, чтоб ожидаемое поведение было реальным?

симлинк

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

Тогда надо писать свой редактор, который не будет при изменении файла делать ему unlink. Что не очень-то тривиально.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от zolden

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

ksenofor
() автор топика
Ответ на: комментарий от Eddy_Em

Вот — работающий «редактор»:

#include <stdio.h>

main(){
	long pos;
	FILE *f = fopen("ori", "r+");
	fseek(f, 0, SEEK_END);
	pos = ftell(f);
	printf("filesize: %ld\n", pos);
	fseek(f, 0, SEEK_SET);
	fprintf(f, "old size: %ld\n", pos);
	fseek(f, 0, SEEK_END);
	fprintf(f, "this is tail of file\n");
	fclose(f);
}

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ksenofor

Фигасе. Тогда точно не будет работать.

Дропбокс делает unlink при перезаписи файла.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от ksenofor
mkdir /{first,second}/dropbox/folder/shared-folder
mount -B /{first,second}/dropbox/folder/shared-folder

Как-то так. В линуксе нельзя сделать такое без лишнего каталога, за bind'ом отдельных файлов в plan9.

x3al ★★★★★
()
Ответ на: комментарий от x3al

спасибо. «за bind'ом отдельных файлов в plan9» требует перевода на русский. я нуб. :) «{first, second}» - это что? я понял это так:

mkdir /first_path/dropbox/folder/shared-folder
mkdir /second_path/dropbox/folder/shared-folder
mount ...
mount ...
Прально понял?

ksenofor
() автор топика
Ответ на: комментарий от ksenofor

mount — один. Одну папку во вторую с ключом -B. Если сработает — в fstab с -o bind. Можно симлинк на папку вместо маунта попробовать, кстати.

x3al ★★★★★
()
Ответ на: комментарий от true_admin

Блин, я говорю не о недостатке хардлинка: он-то работает на ура (см. мой пример), а о недостатке редакторов и прочей дребедени, которая при обновлении файла делает unlink, а потом заново сохраняет его с тем же именем.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от beastie

mcedit спрашивает.

Опаньки: geany по умолчанию не разрывает ссылку.

Хм, и medit не разрывает.

Похоже, зря я клеветал

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от x3al

Та машина, на которой предполагается производить изменения - на винде. Боюсь она не поймет, что такое симлинк с убунты, пускай даже и на папку. :) UPD: работает! Как догадались? :) «Если сработает — в fstab с -o bind» - требует пояснения, или примера. UPD: по желанию - первый вариант и проще, и «дешевле».

ksenofor
() автор топика

Напомню, что при hard links понятие «ссылка» бессмысленно. Всё есть суть оригинал, но с разными именами. Даже если у файла (точнее даже иноды) одно имя — то у него и один hard link.

beastie ★★★★★
()
Ответ на: комментарий от Eddy_Em

при обновлении файла делает unlink, а потом заново сохраняет его с тем же именем.

а, это проблема, да. Я поэтому больше доверяю симлинкам.

true_admin ★★★★★
()
Ответ на: комментарий от Eddy_Em

о недостатке редакторов и прочей дребедени, которая при обновлении файла делает unlink, а потом заново сохраняет его с тем же именем.

Так это же убивает основную идею хардлинка.

Нифига себе. Не ожидал от инструментов mc такой подлянки (я никогда mcedit не пользовался).

DeVliegendeHollander ★★
()
Ответ на: комментарий от ksenofor

Система забудет о mount после перезагрузки, если не записать его в fstab (в стандартном формате, /directory/1 /directory/2 bind bind 0 0, пробелы заменять на %40 если есть. Поэтому симлинк на каталог лучше, если он работает.

x3al ★★★★★
()
Ответ на: комментарий от Eddy_Em

«ln -s» на папку - что может быть проще? извращения как раз-таки это mount'ы всякие. Хотя приведите пример - мб я просто не правильно вас понимаю.

ksenofor
() автор топика
Ответ на: комментарий от x3al

В линуксе нельзя сделать такое без лишнего каталога, за bind'ом отдельных файлов в plan9.

В линуксе можно биндить файлы с помощью mount --bind.

gentoo_root ★★★★★
()
Ответ на: комментарий от x3al

Сенкс за пояснения и за идею. Будущие поколения будут рады такому простому и рабочему решению. :)

ksenofor
() автор топика
Ответ на: комментарий от gentoo_root

Мне пора выходить из криокамеры. Если оно ещё и оригинальный файл может скрыть — совсем офигенно, но и без того сносно. Ещё бы сделать нерутовый mount -B и per-user неймспейсы из коробки и линуксом можно будет пользоваться.

x3al ★★★★★
()
Ответ на: комментарий от Eddy_Em

проверил. работает. пробуйте - если что, бум знать, что не у всех ;)

ksenofor
() автор топика
Ответ на: комментарий от x3al

Если оно ещё и оригинальный файл может скрыть — совсем офигенно, но и без того сносно.

Вроде бы, скрывает, хотя можно сделать что-то вроде mount --bind / /mnt и увидеть оригинальный файл под /mnt. Более того, чтобы оно работало, целевой файл должен существовать (как и в случае с обычными точками монтирования), поэтому не скрыть его содержимого оно не может.

gentoo_root ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.