как отсортировать файлы по их полномочиям с помощью ls?

Автономный printf

Часть "расхода" в вызове процесса - то, что несколько вещей должны произойти, которые являются интенсивно использующими ресурсы.

  1. Исполняемый файл должен быть загружен из диска, это подвергается замедлению, так как жесткий диск имеет быть быть полученным доступ для загрузки двоичного блоба из диска, который исполняемый файл хранится как.
  2. Исполняемый файл обычно создается, пользуясь динамическими библиотеками, таким образом, некоторые вторичные файлы к исполняемому файлу должны будут также быть загружены, (т.е. больше двоичных данных блоба, считанных из жесткого диска).
  3. Операционная система наверху. Каждый процесс, который Вы вызываете, подвергается наверху в форме идентификатора процесса, имеющего необходимость быть созданным для него. Пространство в памяти будет также иметь быть вырезанным к оба, содержат двоичные данные, загружаемые из жесткого диска на шагах 1 и 2, а также нескольких структур, имеющих необходимость быть заполненными для хранения вещей, таких как среда процессов (переменные среды и т.д.)

выборка strace /usr/bin/printf

    $ strace /usr/bin/printf "%s\n" "hello world"
    *execve("/usr/bin/printf", ["/usr/bin/printf", "%s\\n", "hello world"], [/* 91 vars */]) = 0
    brk(0)                                  = 0xe91000
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd155a6b000
    access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
    open("/etc/ld.so.cache", O_RDONLY)      = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=242452, ...}) = 0
    mmap(NULL, 242452, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd155a2f000
    close(3)                                = 0
    open("/lib64/libc.so.6", O_RDONLY)      = 3
    read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\357!\3474\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0755, st_size=1956608, ...}) = 0
    mmap(0x34e7200000, 3781816, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x34e7200000
    mprotect(0x34e7391000, 2097152, PROT_NONE) = 0
    mmap(0x34e7591000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x191000) = 0x34e7591000
    mmap(0x34e7596000, 21688, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x34e7596000
    close(3)                                = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd155a2e000
    mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd155a2c000
    arch_prctl(ARCH_SET_FS, 0x7fd155a2c720) = 0
    mprotect(0x34e7591000, 16384, PROT_READ) = 0
    mprotect(0x34e701e000, 4096, PROT_READ) = 0
    munmap(0x7fd155a2f000, 242452)          = 0
    brk(0)                                  = 0xe91000
    brk(0xeb2000)                           = 0xeb2000
    brk(0)                                  = 0xeb2000
    open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=99158752, ...}) = 0
    mmap(NULL, 99158752, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fd14fb9b000
    close(3)                                = 0
    fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd155a6a000
    write(1, "hello world\n", 12hello world
    )           = 12
    close(1)                                = 0
    munmap(0x7fd155a6a000, 4096)            = 0
    close(2)                                = 0
    exit_group(0)                           = ?*

При просмотре вышеупомянутого можно получить смысл дополнительных ресурсов это /usr/bin/printf должен подвергнуться из-за него являющийся автономным исполняемым файлом.

Встроенный printf

С созданной версией printf все библиотеки, что это зависит от, а также его двоичный блоб, были уже загружены в память, когда Bash был вызван. Таким образом, ничего подобного не должен быть понесен снова.

Эффективно при вызове встроенных "команд" к Bash Вы действительно делаете, какие суммы к вызову функции, так как все было уже загружено.

Аналогия

Если Вы когда-либо работали с языком программирования, таким как Perl, это эквивалентно совершению звонков к функции (system("mycmd")) или использование обратных галочек (`mycmd`). Когда Вы делаете любую из тех вещей, Вы разветвляете отдельный процесс со своими собственными издержками, по сравнению с использованием функций, которые предлагаются Вам через базовые функции Perl.

Анатомия управления процессами Linux

Существует довольно хорошая статья о IBM Developerworks, которая ломает различные аспекты того, как процессы Linux создаются и уничтожаются наряду с различными библиотеками C, вовлеченными в процесс. Статья является titled:Anatomy управления процессами Linux - Создание, управление, планирование и разрушение. Это также доступно как PDF.

3
01.11.2014, 01:16
2 ответа

Ls не поддерживает сортировку с разрешениями, но вы можете объединить его с помощью команды сортировки:

ls -l | sort

Вы можете использовать опцию -K для сортировки Чтобы начать совпадение с конкретного характера, формат -K Field.Char , разрешения представляют собой первое поле в LS . Итак, например -K 1,2 начнутся со второго символа строки разрешений, которая будет игнорировать любой каталог / устройство / ссылку и т. Д. Флаг или -K 1,5 для сортировки по групповым разрешениям.

Если вы не хотите дополнительный вывод LS -L , вы можете удалить его с awk:

 ls -l | sort | awk '{ print $1, $NF}'

Это будет печатать только первое поле (разрешения) и последний ( имя файла).

8
27.01.2020, 21:10

Вы также можете сортировать по восьмеричному значению.

for i in *; do stat --format="%a %n" "$i"; done | sort -n
2
27.01.2020, 21:10

Теги

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