Как ограничить доступ к хранилищу пакетов Arch?

Я сделал хорошее наблюдение из этого:

mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*

Вот интересная часть, файл "abcd" перемещен в каталог t3 наряду с каталогами t1 и t2, который является:

ls test
-> t3
cd t3
ls 
t1 t2 abcd

то, что я понял, - когда мы пишем *, команда на самом деле расширяется и затем выполняется так, команда mv расширена как

mv abcd ~/test/t1 ~/test/t2 ~/test/t3

Таким образом это взяло t3 в качестве места назначения и переместило abcd, t1, t2 к t3

Таким образом для ответа на вопрос это будет в последнем каталоге в /

Из страницы справочника mv если у Вас есть символьная ссылка

Avoid specifying a source name with a trailing slash,
when it might be a symlink to a directory.  Otherwise, `mv' may do
something very surprising, since its behavior depends on the underlying
rename system call.  On a system with a modern Linux-based kernel, it
fails with `errno=ENOTDIR'.  However, on other systems (at least
FreeBSD 6.1 and Solaris 10) it silently renames not the symlink but
rather the directory referenced by the symlink.  *Note Trailing
slashes::.

Можно искать использование файла find / -type f -name <filename>

3
14.10.2014, 16:39
1 ответ

В то время как канонический способ решения этой проблемы включает пасту , Здесь я предлагаю awk альтернативу, где выходной разделитель записей устанавливается в пробел на нечетной и новой строках на четных строках

awk '{ORS=NR%2?" ":"\n";print}' file
-121--119412-

Ищите справочные страницы

При поиске команд, вместо сопоставления имен двоичных файлов команд в качестве альтернативы можно сопоставить имена человеко-страниц; Это может иметь смысл, поскольку man уже предоставляет эту функцию по умолчанию:

$ man --sections=1,8 --where --all --regex '^mkdi' 
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man1/mkdirhier.1.gz
/usr/share/man/man1/mkdiskimage.1.gz

Использование sed для извлечения только имен команд:

$ man --sections=1,8 --where --all --regex '^mkdi' | \
    sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/'
mkdir
mkdirhier
mkdiskimage

И выполнение , которые для имен команд тоже:

$ man --sections=1,8 --where --all --regex '^mkdi' | \
    sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/' | xargs which 
/bin/mkdir
/usr/bin/mkdirhier
/usr/bin/mkdiskimage

узоры являются регулярными выражениями, поэтому ^ добавляется для соответствия только в начале имени.
В синтаксисе образца, подобном оболочке glob, замените -regex на --wildcard ,
как человек... --wildcard 'mkdi *' |... .

В качестве функции оболочки:

whichmatch() {       
    man --sections=1,8 --where --all --regex "$@" |
        sed -r 's/.*\/([^/]+)\.[^.]+\.[^.]+$/\1/' |
        xargs which
}

используется как

whichmatch '^mkdi'

Для приблизительного совпадения имен команд , который может использоваться вместо man .

-121--77994-

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

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

0
27.01.2020, 21:42

Теги

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