Каков на сегодняшний день самый высокий уровень отступов, который когда-либо применялся в ядре Linux?

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.

-1
02.12.2018, 20:49
1 ответ

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
1
28.01.2020, 05:09

Теги

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