команды для удаления строки из файла, если в файле есть обратная строка

NAME    ln -- make a link
SYNOPSIS    ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1. 
            If name2 is given, the link has that name; 

Из 1971 г. Первое издание руководств Unix .

Существует вторая , простая, синтаксическая форма.


Я поставил FILE или FILENAME вместо TARGET ---см. комментарии и т. д. См. также очень длинное добавление внизу, касающееся айсберга, твердого и мягкого из ln, а не только его верхушки.


Итак, GNU lnимеет это:

ln [opt] FILENAME

In the 2nd form, create a link to FILENAME in the current directory.

где вам не нужно имя ссылки. После ln -s /usr/lib/modulesвы получите

modules -> /usr/lib/modules

с тем же именем, что и FILENAME («цель» или «источник» ), прямо там, где вы находитесь. Нет выбора, нет путаницы.

Теперь, если вы более требовательны и хотите, чтобы ссылка была создана под другим именем и/или где-то еще , вы добавляете желаемое имя или путь. Настоящая цель идет первой, а новое необычное название ссылки — второй.


Или вы говорите :«Я знаю эту нотацию стрелки в ls -lдля ссылок. У меня нет стрелки в оболочке, чтобы показать направление моей ссылки. Так что я должен перевернуть ее».

Вы создаете его в одном направлении, поэтому вы можете использовать его в другом.

(КОНЕЦ ОТВЕТА --ЧАСТЬ ВОПРОСА)


На другом уровне само слово «связь» несет в себе глубокий скрытый двойной смысл. Символические ссылки появились позже, поэтому в первые дни ссылка была просто ссылкой. Не было ни мягкого, ни жесткого, ни варианта -s. А теперь я даже использую исходную -целевую символику:

mv    A B   --- move the whole file to B (dir or new name)
cp    A B   --- copy whole file (mv and cp are "the same" here)    
ln    A B   --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping

На данном этапе ссылки есть, но нет жестких и мягких, и ls -lне показывает стрелок, потому что в (жесткой )ссылке нет направления.«Ссылка» на этом этапе эволюции Unix означала, что имя файла «B» (запись каталога «B» )в файловой системе указывает на тот же индексный дескриптор, на который указывает имя файла «A».

Файлы A и B "связаны" друг с другом, потому что они используют одни и те же блоки. Итак, теперь с каждым rmядро ​​должно проверять :, удаляю ли я/освобождаю блоки этого файла на диске, или есть другой файл, связанный с теми же блоками? Для этого используется счетчик ссылок.

Допустим, вы хотите предотвратить удаление большого файла в /tmp, и выполните ln /tmp/bigfile. Теперь у вас есть большой большой файл в вашем рабочем каталоге. После очистки /tmp и удаления «оригинала» вы с радостью продолжаете использовать те же блоки данных. Вы не получаете мертвую или оборванную ссылку, у вас есть нормальный файл. Указание не на файл, а только на блоки файловой системы, как это делает любая запись в каталоге. Только теперь "очистка" /tmp не так эффективна, как раньше. Он выглядит пустым, и это так, но блоки в разделе не освобождаются.

Несмотря на то, что жесткая ссылка сама по себе не занимает места, как cp, она может косвенно.

Добавление ln -sк приведенной выше последовательности:

ln -s A B   --- copy only the file's name to "B"   

Теперь "B", программная ссылка, содержит только строку с путем. Это "мягкая" информация. Технически «А» и «Б» не связаны. Но все же B является «ссылкой» в новом смысле, что вы можете использовать это сохраненное имя пути как ярлык для «A». Теперь это "ссылка на A"(точка ), а не "связанная с inode файла A"

Оба вида ссылок могут сбить с толку не только людей, но и ядро/фс. На справочной странице 1971 года отмечается :«ОШИБКИ :ссылки записываются дважды и восстанавливаются как отдельные файлы с отдельными индексными дескрипторами».

Жесткие ссылки на каталоги (редко/не разрешены )могут легко привести к засорению.

Мягкие ссылки на каталоги (очень распространены )могут привести к вечным петлям -они должны распознаваться утилитами/ядром.

Практический пример в bash

Начиная с обычного файла "F"...

ln F Fhard

...делает Fhard того же размера, что и F, но они ОБА отображаются теперь темно-красным БЕЗ стрелок в ls -l --color. Из-за того, что statпоказывает «Ссылки :2» в связи с «Inode :xyz». Жесткая ссылка F превращает F в жесткую ссылку. Оба являются/остаются типом файла «обычный файл». Но у обоих есть inode со счетчиком ссылок выше 1.

   ln -s F Fsoft

...делает крошечный "необычный" файл "Fsoft" с типом файла "символическая ссылка" ---еще более экономящим место, чем пустой каталог. A ls -lне показывает ничего особенного для "F". Для Fsoft отображаемый размер составляет 1 байт, поскольку строка имеет значение «F», а Fsoft -> Fотображается как имя. Не нужно раскрашивать мягкую ссылку, чтобы распознать ее, потому что в краткой форме ls -Fвы получаете спиральную цепочку @, добавленную :Fsoft@

.

С ls -lэто выглядит так:

-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root       1 Sep 16 16:31 Fsoft -> F

У Фарда размер и тип Фхарда.

Fsoft использует имя F и длину имени F в качестве размера и другой тип файла.

Короткийls -sF:

5932 F    5932 Fhard     0 Fsoft@

добавление --block-size=1также не дает одинаковых размеров. Fsoft имеет размер "один байт, ноль блоков". F и Fhard отклоняются параллельно:

6074368 F  6074368 Fhard    0 Fsoft@

Чтобы увидеть, зависает Fsoft или нет, lsпозволяет использовать цвета.

ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
2
03.12.2021, 21:28
2 ответа

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

$ awk -F',' '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
1,20
1,13
1
04.12.2021, 00:04
$ cat file
4,bumblebee
1,20
1,13
20,1
20,1
20,13
bumblebee,3
13,1
bumblebee,4
$ awk -F, '!seen[$1,$2]++ && !seen[$2,$1]' file
4,bumblebee
1,20
1,13
20,13
bumblebee,3

Здесь используется ассоциативный массив seen, в котором мы подсчитываем, сколько раз мы видели пару полей во входных данных.

Если мы ранее не видели ни пару, ни перевернутую пару, печатается строка.

Это не предполагает, что поля являются числовыми.

2
04.12.2021, 06:26

Теги

Похожие вопросы