Unix может перечислить команду 'ls', производит числовые chmod полномочия?

Ну, как со всеми, "Что могло бы быть быстрее в реальных" вопросах, Вы не можете победить реальный тест.

function timeFunc($function, $runs)
{
  $times = array();

  for ($i = 0; $i < $runs; $i++)
  {
    $time = microtime();
    call_user_func($function);
    $times[$i] = microtime() - $time;
  }

  return array_sum($times) / $runs;
}

function Method1()
{ 
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = "these are $foo";
}

function Method2()
{
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = "these are {$foo}";
}

function Method3()
 {
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = "these are " . $foo;
}

print timeFunc('Method1', 10) . "\n";
print timeFunc('Method2', 10) . "\n";
print timeFunc('Method3', 10) . "\n";

Дают ему несколько выполнений для подкачки страниц всего в, тогда...

0.0035568

0.0035388

0.0025394

Так, как ожидалось, интерполяция фактически идентична (различия в уровне шума, вероятно, из-за дополнительных символов, которые механизм интерполяции должен обработать). Прямо конкатенация составляет приблизительно 66% скорости, которая не является никаким большим шоком. Синтаксический анализатор интерполяции посмотрит, найти, что ничто не делает, затем заканчивается с простой внутренней строкой concat. Даже если concat были дорогими, интерполятор должен будет все еще сделать это, после вся работа, чтобы проанализировать переменную и обрезать/копировать исходную строку.

Обновления Somnath:

я добавил Method4 () к вышеупомянутой оперативной логике.

function Method4()
 {
  $foo = 'some words';
  for ($i = 0; $i < 10000; $i++)
    $t = 'these are ' . $foo;
}

print timeFunc('Method4', 10) . "\n";

Results were:

0.0014739
0.0015574
0.0011955
0.001169

, Когда Вы просто объявляете строку только и никакую потребность проанализировать ту строку также, тогда почему перепутать отладчик PHP для парсинга. Я надеюсь, что Вы поняли мою мысль.

170
задан Jon Winstanley 25 November 2009 в 10:21
поделиться

5 ответов

Используйте это для отображения восьмеричных значений (числовые разрешения chmod) и имени файла:

stat -c '%a %n' *

enter image description here

Дополнительные параметры см. В stat .

Для более эффективного способ сделать это с помощью псевдонима, см. мой комментарий ниже.

327
ответ дан 23 November 2019 в 20:45
поделиться

Closest I can think of (keeping it simple enough) is stat, assuming you know which files you're looking for. If you don't, * can find most of them:

/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...

It handles sticky, suid and company out of the box:

$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
139
ответ дан 23 November 2019 в 20:45
поделиться

нет, он может печатать только цифровые идентификаторы / идентификаторы.

2
ответ дан 23 November 2019 в 20:45
поделиться

вы можете просто использовать GNU find.

find . -printf "%m:%f\n"
55
ответ дан 23 November 2019 в 20:45
поделиться

@The MYYN

вау, классная awk! А как насчет suid, sgid и липкого бит?

Вы должны расширить свой фильтр с помощью s и t, иначе они не будут учитываться, и вы получите неправильный результат. Чтобы вычислить восьмеричное число для этих специальных флагов, процедура та же, но с индексами 4, 7 и 10. Возможные флаги для файлов с установленным битом выполнения: --- s - s - t amd для файлов без установленного бита выполнения: --- S - S - T

ls -l | awk '{
    k = 0
    s = 0
    for( i = 0; i <= 8; i++ )
    {
        k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
    }
    j = 4 
    for( i = 4; i <= 10; i += 3 )
    {
        s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
        j/=2
    }
    if ( k )
    {
        printf( "%0o%0o ", s, k )
    }
    print
}'  

Для теста:

touch blah
chmod 7444 blah

приведет к:

7444 -r-Sr-Sr-T 1 cheko cheko   0 2009-12-05 01:03 blah

, а

touch blah
chmod 7555 blah

даст:

7555 -r-sr-sr-t 1 cheko cheko   0 2009-12-05 01:03 blah
16
ответ дан 23 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

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