Samba склонна навязывать собственное представление о правах доступа и владельцах файлов, чтобы более точно имитировать (иерархический )стиль разрешений NTFS.
Если вы расширите определение Samba, включив в него директивы force user
и force group
, вы можете гарантировать, что все файлы, созданные в общем ресурсе (через Samba ), будут иметь указанного владельца и группу.
[MEDIA]
read only = no
locking = yes
path = /mnt/local/int001/MEDIA
guest ok = yes
create mask = 0664
directory mask = 0775
force user = Bob
force group = SharedFiles
Однако вы не можете реализовать то же самое напрямую с локальными пользователями, потому что пользователь не может создать файл, принадлежащий кому-то другому. Вот где inotifywait
может помочь. Настройте его при загрузке, чтобы отслеживать иерархию каталогов и изменять владельца любого вновь созданного файла :
cd /mnt/local/int001/MEDIA || exit
inotifywait --monitor --recursive --event create --format '%w%f'. |
while IFS= read -r file
do
if [[ -f "$file" || -d "$file" ]] && [[ ! -h "$file" ]]
then
chown Bob:SharedFiles "$file"
chmod u+rw,go=u,o-w "$file"
fi
done
С этим inotifywait
решением вам не нужны ACL файловой системы.
Лично я не уверен, что вам действительно нужно менять владельца файла. Указанные вами ACL (и соответствующий force group
в Samba )гарантируют, что все пользователи дерева каталогов могут получить доступ к файлам и каталогам в нем. Есть веская причина для отказа обычным пользователям chown
.
What is the highest level of indentation today [in] the Linux Kernel?
53 в драйверах/pcmcia/vrc4173 _cardu.c и звук/pci/cs46xx/dsp _spos _scb _lib.c в Linux -4.14.y ветвь, но, как вы можете видеть, это выравнивание комментариев и параметры функции переноса, а не отступ блока, для которого используются вкладки. Это, так сказать, верхушка айсберга форматирования кода. Внимательно посмотрите на средство форматирования eclipse, и вы найдете сотни вариантов.
#!/bin/bash
IFS=''
MAX=0
while read -r F ; do
FMAX=0
FC=0
FOC=0
while read -r L ; do
FC=$(echo -n "$L" | perl -pe 's/^([\t ]*)[^\t ].+$/$1/g' | wc -c)
if [ "$FOC" -gt 0 ] ; then
FOC="$FC"
continue
fi
if [ "$FC" -gt "$FOC" ] && [ "$FC" -gt "$FMAX" ] ; then
FMAX="$FC"
fi
FOC="$FC"
if [ "$FMAX" -gt "$MAX" ] ; then
MAX="$FMAX"
echo "new max is $MAX in $F"
fi
done < "$F"
done < <(find. -iname '*.c' | xargs -I {} grep -lPm 1 "^[\t ]{50,}" "{}")
Глядя на абсолютные вкладки, победителем стал drivers/scsi/BusLogic.c с 20 .
> find. -iname '*.c' | xargs -I {} grep -HPm 1 "^\t{20,}" "{}"
Или, глядя на абсолютный интервал, 238 в drivers/pcmcia/i82092.c
> find. -iname '*.c' | xargs -I {} grep -HPm 1 "^ {238,}" "{}"
What is the highest level of indentation... ever merged into the Linux Kernel?
Трудно ответить, потому что не вся история сохраняется. Было бы легко (, но медленно )ответить "когда-либо сливались с текущим деревом". Но если вы все еще хотите получить ответ на этот вопрос, задайте второй вопрос, чтобы не делать этот вопрос слишком широким.
Why exactly they were not more strict?
Linux — это решение типа «заставь его работать, а идеология разберись позже», (оно монолитно, с постоянно меняющимся API, закрытыми блобами и т. д. ). Также исторически у них просто не было инструментов для -тривиальных отступов, git был собран для ядра только тогда, когда они в нем нуждались. Были дела поважнее, но, похоже, была/есть неполная -проверка формата кода под названием checkpatch.pl "в качестве руководства "... но есть еще жемчужины в коде вроде комментария в dsp _spos _scb _lib.c, который читается;
THIS IS A PIECE OF SHIT MADE BY ME
... так что да, многое можно было бы почистить, но люди предпочли бы не ломать то, что работает, и если где-то есть плохое форматирование, вероятно, код также нуждается в исправлении в этом месте.
Has [Linus] ever explained why he did this?
Похоже, он предпочитает табуляцию пробелам (изменение длины отступа с помощью табуляции — это одна из настроек,по сравнению с рефакторингом всей базы кода, если используются пробелы )но пробелы используются для выравнивания обернутых функций, а не для вставки табуляции в первую строку, так что это делает важным соотношение пробела к табуляции (8 :1 ).
Does he now just program in 4 spaced indentation?
Нет; Табуляции используются во всех файлах c в ядре (5 файлов не имеют отступов );
> find. -iname '*.c' | wc -l
25575
> find. -iname '*.c' | xargs -I {} grep -m 1 "\t" "{}" | wc -l
25570
> find. -iname *.c | while read F ; do C=$(grep -c "\t" "$F"); if [ $C == 0 ] ; then echo $F ; fi done
./sound/pci/ens1371.c
./sound/isa/sb/sbawe.c
./drivers/scsi/pcmcia/aha152x_core.c
./drivers/scsi/pcmcia/fdomain_core.c
./drivers/scsi/sun3_scsi_vme.c
Обратите внимание, что большая часть ядра состоит из c-файлов;
> find. -type f | perl -pe 's/.*\.//g' | sort | uniq -c | sort -nr | head
25574 c
20046 h
3990 txt
1443 S
1391 dts
1075 dtsi
810 rst
204 gitignore
191 sh
189 json