Один способ использовать perl
. Это произведет только что диапазон байтов между ff 8d
и ff 9d
, без номеров строки:
Принятие следующих данных как содержание infile
:
0010400 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
0010410 00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a
0030f50 3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32
0030f60 e8 26 8f ff d9 00 00 00 00 00 00 00 00 00 00 00
Выполненный затем perl
острота:
perl -ne '
if ( (my $start = m/ff\sd8/) .. (my $end = m/ff\sd9/) ) {
s/\S*\s//;
s/\A.*(?=ff\sd8)// if $start;
s/(?<=ff\sd9).*\Z// if $end;
print
}
' infile
Это даст следующий вывод:
ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01
00 01 00 00 ff fe 00 3c 43 52 45 41 54 4f 52 3a
3e e9 fb a4 54 37 70 7f cb 55 03 fd af f1 a2 32
e8 26 8f ff d9
Можно сделать новую символьную ссылку и переместить ее в местоположение старой ссылки.
ln -s <new_location> npm2
mv -f npm2 npm
Это сохранит владение ссылки. С другой стороны, можно использовать chown
установить владение ссылки вручную.
chown -h myuser:myuser npm
В большинстве систем не имеют значения полномочия символьной ссылки. При использовании символьной ссылки будут проверены полномочия компонентов цели символьной ссылки. Однако в некоторых системах они действительно имеют значение. MacOS требует разрешения чтения на ссылке для readlink
, и NetBSD symperm
смонтируйте, что полномочия ссылки сил опции проверяют чтение и обход. В тех системах (и их родственники, включая FreeBSD и OpenBSD) существует эквивалент -h
опция к chmod
.
chmod -h 777 npm
Когда вы пытаетесь использовать chmod
для установки разрешений для ссылки, на самом деле вы устанавливаете разрешения для целевой ссылки. Разрешения по ссылке бессмысленны.
Если у вас есть ссылка типа:
link -> foo/bar
и вы хотите изменить ее на:
link -> new/target
Есть два случая, которые следует учитывать:
foo / bar
не является каталогом или не существует, или вы нет доступа для поиска по foo
. Тогда
ln -s новая / целевая ссылка
завершится ошибкой, потому что ссылка
уже существует, но вы можете преодолеть это, используя стандарт:
ln -fs new / целевая ссылка
foo / bar
- это каталог (и у вас есть разрешение на поиск в foo
, чтобы определить, что foo / bar
является каталог). В этом случае, когда вы выполните:
ln -s new / target link
или
ln -fs new / target link
Это понимается как создание новая target
символическая ссылка внутри каталога link
( link
- это каталог, потому что это символическая ссылка на каталог foo / bar
). Итак, вы фактически создадите:
foo / bar / target -> new / target
Чтобы преодолеть это, GNU ln
имеет -T
], чтобы имя ссылки всегда рассматривалось как имя ссылки, а не как каталог для создания ссылки (-ов). Итак, с GNU ln
:
ln -fsT new / target link
будет работать. Как и раньше, он удалит исходную символическую ссылку link
и создаст ее заново с new / target
в качестве цели (и процессом euid и egid в качестве владельца).
GNU ln
также имеет параметр -n
. Он работает как -T
, за исключением случаев, когда ссылка
на самом деле является реальным каталогом, и в этом случае он все равно будет создавать символическую ссылку внутри этого каталога (вместо сбоя с ошибкой).
Наилучший вариант - сначала удалить ссылку, а затем воссоздать ее:
rm -f link && ln -s new / target link
В большинстве систем разрешения на символические ссылки игнорируется и обычно устанавливается на rwxrwxrwx
.
В системах, где важны разрешения символьной ссылки (например, OS / X, где вам нужно разрешение на чтение символьной ссылки, чтобы иметь возможность разрешить ее цель), обычно есть способ изменить их ( chmod -h
в ОС /ИКС).
Право собственности, хотя, как и выше, не имеет отношения к доступу к файлу, на который указывает символическая ссылка в большинстве систем, может иметь другое значение относительно бита t
родительского каталога или квот. . ) и есть стандартная команда для его изменения:
chown -h user[:group] the-link
chgrp -h group the-link
Если вам действительно нужно изменить разрешение символических ссылок (обычно бессмысленно, как написано в других ответах), мне удалось с использованием параметра -R
в chown
:
chown -R myuser:mygroup link
Если -R
не использовался, разрешения не были изменены.