Распечатайте больше чем одну строку от текстового файла

Linux запрещает переименование любого пути, заканчивающегося в компоненте . или ... , возвращая ошибку EBUSY; также произойдет сбой:

$ mkdir a a/aa
$ mv a/aa/.. b
mv: cannot move ‘a/aa/..’ to ‘b/..’: Device or resource busy

Код для этого находится в namei.c::renameat. Последний компонент пути при передаче в различные функции должен иметь тип LAST_NORM, а не LAST_DOT или LAST_DOTDOT.

FreeBSD возвращает ошибку EINVAL в каждом из этих случаев.


Мы можем только догадываться, почему существует это ограничение.

Функция переименования() не будет работать, если:
. ...
[EBUSY] Каталог, названный старым или новым, в настоящее время используется системой или другим процессом, и реализация считает это ошибкой. Можно считать

. , который в настоящее время используется процессом. Но обратите внимание, что Linux позволяет следующее, поэтому каталога, просто используемого каким-либо процессом, недостаточно для того, чтобы переименование не прошло:

$ mkdir /tmp/t
$ cd /tmp/t
$ mv /tmp/t /tmp/t1
$ /bin/pwd
/tmp/t1

Причина, по которой запрещается переименование . и . , вероятно, "приводит к меньшей путанице пользователей".

  • . , как правило, является жесткой связью с записью каталога в его родителе, и является несколько особенным в том, что процесс всегда может открыть . для доступа к текущей рабочей директории. Возможность переименования было бы контрпродуктивным.
  • .. обычно является жесткой ссылкой на родителя директории, и несколько особенным в том, что процесс открывает ... получит родительский каталог (или сам каталог, если это точка монтирования). Возможность переименования будет контрпродуктивной.

Linux также запрещает rmdir путь, последним компонентом которого является ... (ENOTEMPTY) или . (EINVAL). FreeBSD возвращает ошибку EINVAL для каждого из них. Стандарт POSIX для rmdir имеет следующее:

Функция rmdir() не будет работать, если:
. ...
[EINVAL] Аргумент пути содержит последний компонент, который является точкой.

1
16.02.2015, 23:43
3 ответа

Если Вы имеете в виду, что хотите распечатать ряд строк, то Вы можете использовать этот sed -n 2,4p somefile.txt. При этом будут выведены строки со 2 по 4 из somefile.txt.

0
28.01.2020, 01:46

Печать строк от 2 до 4:

sed '2,4!d' file

Печать строки 2, и дополнительно 2 строки за ней:

sed '2,+2!d' file
0
28.01.2020, 01:46

с GNU SED , вы можете печатать строки 2, 3, 10 и т. Д., Использование:

sed -n '2p;10p;3p;...'
0
28.01.2020, 01:46

Теги

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