Почему '-человекочитаем' необходимый и не значение по умолчанию?

Хорошее место для чтения источника ядра Linux является перекрестной ссылкой Linux (LXR) ¹. Возврат поисков ввел соответствия (прототипы функций, объявления переменной, и т.д.) в дополнение к свободным текстовым результатам поиска, таким образом, это более удобно, чем простой grep (и быстрее также).

LXR не разворачивает определения препроцессора. Системным вызовам исказил их имя препроцессор повсеместно. Однако большинство (все?) системные вызовы определяются с одним из SYSCALL_DEFINEx семейства макросов. С тех пор mkdir берет два аргумента, поиск SYSCALL_DEFINE2(mkdir приводит к объявлению mkdir syscall:

SYSCALL_DEFINE2(mkdir, const char __user *, pathname, int, mode)
{
    return sys_mkdirat(AT_FDCWD, pathname, mode);
}

хорошо, sys_mkdirat средства это mkdirat syscall, таким образом нажимая на него только приводит Вас к объявлению в include/linux/syscalls.h, но определение чуть выше.

Основное задание mkdirat должен звонить vfs_mkdir (VFS является универсальным слоем файловой системы). Cliking на этом показывает два результата поиска: объявление в include/linux/fs.h, и определение несколько строк выше. Основное задание vfs_mkdir должен назвать определенную для файловой системы реализацию: dir->i_op->mkdir. Чтобы найти, как это реализовано, необходимо обратиться к реализации отдельной файловой системы, и нет никакого твердого правила — это мог даже быть модуль вне дерева ядра.

¹ LXR является программой индексации. Существует несколько веб-сайтов, которые предоставляют интерфейс LXR с немного отличающимися наборами известных версий и немного отличающимися веб-интерфейсами. Они склонны приходить и уходить, поэтому если тот, к которому Вы привыкли, не доступен, сделайте веб-поиск “перекрестной ссылки Linux” для нахождения другого.

57
14.11.2011, 03:27
3 ответа
  1. Поскольку они не существовали первоначально, и поведение по умолчанию назад совместимо. Кроме того, потому что они не существуют на всех вариантах Unix, и поведение по умолчанию совместимо с другими вариантами Unix.
  2. Для многих инструментов, потому что они предназначаются, чтобы быть parseable другими инструментами. Это редко имеет место для ls, но анализируя вывод du или df относительно распространено. (Следите, для df, необходимо использовать df -P при парсинге.)
  3. Поскольку некоторые люди предпочитают 37 550 836 форматов, потому что, когда Вы видите набор таких чисел, их относительный размер визуально ясен (количество цифр).
76
27.01.2020, 19:33
  • 1
    Особенно 3), когда я передаю вывод по каналу прямо через в sort -n потому что я меньше интересуюсь быстрым наблюдением грубого размера каждого каталога и больше в котором подкаталог поднимает непропорционально слишком много пространства... –  Shadur 14.11.2011, 10:41
  • 2
    @Shadur, но вид берет a -h также! –  quodlibetor 14.11.2011, 21:52
  • 3
    я думаю 2 (например, для сценариев) является основной причиной. –  sml 16.11.2011, 03:27
  • 4
    @quodlibetor, Что ОС/дистрибутив? kubuntu ясный вид не принимает-h и я не вижу эквивалента. –  Joe 19.11.2011, 01:03
  • 5
    @user23861 sort -h был представлен в GNU coreutils 7.5. Ясный имеет 7.4, таким образом, на Ubuntu Вам нужно, по крайней мере, независимый. –  Gilles 'SO- stop being evil' 19.11.2011, 04:30

Обратите внимание, что, если Вы устанавливаете BLOCKSIZE=human-readable в Вашей среде, это будет значением по умолчанию, по крайней мере, для команд от GNU coreutils, т.е. если Вы используете помещенный удар:

export BLOCKSIZE=human-readable

в Вашем файле $HOME/.bashrc.

13
27.01.2020, 19:33
  • 1
    Похож BLOCKSIZE=h могло бы быть достаточным. Но большая подсказка! совет –  Mikel 13.04.2012, 04:38
  • 2
    Документы предлагают BLOCK_SIZE=human-readable. Также не знал о поддержке тысяч разделителей, пока я не считал это. –  Mikel 13.04.2012, 08:38

Около того, что сказал Gilles:

Когда эти инструменты, где изобретенный HDD был очень маленьким, по сравнению с сегодня. Вы не нуждались в помощи для чтения числа как 400 000.

И если Вам не нравится он, используйте систему псевдонима. В Вашем корневом каталоге,

edit ~/.bashrc 

и вставьте, например:

alias df='df -h'
alias du='du -h'

Обратите внимание, что в отличие от многих других языков, Нельзя иметь пробел прежде или позади оператора присваивания (знак "равно").

6
27.01.2020, 19:33

Теги

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