Полномочия изменения для символьной ссылки

Один способ использовать 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
38
18.08.2013, 15:06
4 ответа

Можно сделать новую символьную ссылку и переместить ее в местоположение старой ссылки.

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
61
27.01.2020, 19:35
  • 1
    я просто столкнулся с проблемой разрешения с символьными ссылками на сервере CentOS 6.8. Символьные ссылки имели owner:group root:root. Когда владелец и группа были изменены на пользователя, который владел каталогом, они были в, как показано в этом ответе, проблема разрешения ушла. –  Night Owl 04.12.2016, 08:12

Когда вы пытаетесь использовать chmod для установки разрешений для ссылки, на самом деле вы устанавливаете разрешения для целевой ссылки. Разрешения по ссылке бессмысленны.

12
27.01.2020, 19:35

Если у вас есть ссылка типа:

link -> foo/bar

и вы хотите изменить ее на:

link -> new/target

Есть два случая, которые следует учитывать:

  1. foo / bar не является каталогом или не существует, или вы нет доступа для поиска по foo . Тогда

     ln -s новая / целевая ссылка 
     

    завершится ошибкой, потому что ссылка уже существует, но вы можете преодолеть это, используя стандарт:

     ln -fs new / целевая ссылка 
     
  2. 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
5
27.01.2020, 19:35

Если вам действительно нужно изменить разрешение символических ссылок (обычно бессмысленно, как написано в других ответах), мне удалось с использованием параметра -R в chown :

chown -R myuser:mygroup link

Если -R не использовался, разрешения не были изменены.

0
27.01.2020, 19:35

Теги

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