Что командная строка альтернативна к вершине для нахождения текущей загрузки ЦП, которая не зависит от экрана width?

“Без рекурсии”, сделайте Вы имеете в виду это если directoryName1 имеют подкаталоги, затем Вы не хотите считать файлы в подкаталогах? Если так, вот способ считать все регулярные файлы в обозначенных каталогах:

count=0
for d in directoryName1 directoryName2; do
  for f in "$d"/* "$d"/.[!.]* "$d"/..?*; do
    if [ -f "$f" ]; then count=$((count+1)); fi
  done
done

Обратите внимание что -f тест выполняет две функции: это тестирует, является ли запись, подобранная одним из шариков выше, регулярным файлом, и это тестирует, была ли запись соответствием (если один из шариков ничему не соответствует, шаблон остается, как ¹). Если Вы хотите считать все записи в данных каталогах независимо от их типа, замены -f с -e.

Ksh имеет способ сделать файлы точки соответствия шаблонов и произвести пустой список в случае, если никакой файл не соответствует шаблону. Таким образом в ksh можно считать регулярные файлы как это:

FIGNORE='.?(.)'
count=0
for x in ~(N)directoryName1/* ~(N)directoryName2/*; do
  if [ -f "$x" ]; then ((++count)); fi
done

или все файлы просто как это:

FIGNORE='.?(.)'
files=(~(N)directoryName1/* ~(N)directoryName2/*)
count=${#files}

Bash имеет различные способы сделать это более простым. Считать регулярные файлы:

shopt -s dotglob nullglob
count=0
for x in directoryName1/* directoryName2/*; do
  if [ -f "$x" ]; then ((++count)); fi
done

Считать все файлы:

shopt -s dotglob nullglob
files=(directoryName1/* directoryName2/*)
count=${#files}

Как обычно, это еще более просто в zsh. Считать регулярные файлы:

files=({directoryName1,directoryName2}/*(DN.))
count=$#files

Изменение (DN.) кому: (DN) считать все файлы.

¹ Примечание, которому каждый шаблон соответствует сам, иначе результаты могли бы быть выключены (например, если Вы считаете файлы, которые запускаются с цифры, Вы не можете просто сделать for x in [0-9]*; do if [ -f "$x" ]; then … потому что мог бы быть названный файл [0-9]foo).

6
11.06.2011, 02:03
4 ответа

sysstat пакет включает mpstat. Выполнение

mpstat 2 | awk '{print $11}'

Дал мне процент времени простоя, который походит на инверсию того, что Вы хотите, таким образом, Вы, возможно, должны были бы сделать немного работы над выводом mpstat:

8 % mpstat 2 | awk '{print $11}'

%idle
100.00
99.50
100.00
100.00
100.00
100.00

У меня был mpstat в моей системе Slackware 11, но это не появилось в моей системе Arch, пока я не сделал pacman -S sysstat

5
27.01.2020, 20:25

В Вашем сценарии, устанавливает переменная среды СТОЛБЦОВ для верхнего уровня для получения вывода, в котором Вы нуждаетесь.

export COLUMNS=100
top -p ... 

Вы могли также изменить var СТОЛБЦОВ только для top вызов таким образом:

COLUMNS=100 top -p ...
2
27.01.2020, 20:25

Вы могли просто использовать f ключ для корректировки отображенных столбцов. Удалите некоторые столбцы и добавьте % ЦП. Необходимо смочь видеть его затем.

1
27.01.2020, 20:25
  • 1
    Он пытается сделать это из сценария. Насколько я могу сказать, top не имеет параметра командной строки для определения столбцов. –  cjm 11.06.2011, 06:58
  • 2
    Хорошо как насчет сценария Python? Используйте объект CPUMeasurer от procfs модуля. –  Keith 11.06.2011, 08:54
  • 3
    Да, Вы не можете использовать интерактивные функции top из сценария, таким образом, это не будет работать. –  Cory Klein 13.06.2011, 18:11
  • 4
    Мой сценарий не использует вершину, он вычисляет загрузку ЦП непосредственно тот же способ, которым делает вершина. –  Keith 13.06.2011, 23:16
ps u -p <PID>

Хорошо работает. Вы также могли бы попытаться использовать awk с ним:

 pid=16707; ps u -p $pid --no-heading | awk -v pid=${pid} -F" " '{print "CPU usage for "$11": "$3}'
1
27.01.2020, 20:25
  • 1
    Это не работает также. Мне нужна текущая загрузка ЦП. ps просто дает общее среднее историческое использование. –  Cory Klein 13.06.2011, 18:12
  • 2
    ls-l/var/lib/db2/db2inst1/sqllib/adm/db2syscr дает мне -r-sr-s--- 1 root db2iadm1 147K Feb 1 23:32 /var/lib/db2/db2inst1/sqllib/adm/db2syscr* ---------121 большое спасибо--------44882----за Ваш ответ. Я уже установил его через виртуальную машину, как объяснено в вышеупомянутом ответе. BTW поле семени mandriva, кажется, более легкая опция. Конечно, попробует его в следующий раз Попытка этот: top -n 1 -p 13145 | grep PID --after 1 | grep -v PID | awk -F" " '{print $1}' –  laebshade 06.07.2011, 02:36
  • 3
    я не могу использовать вершину, потому что, если окно, выполняющее оболочку, является слишком узким, вершина не отобразит информацию –  Cory Klein 07.07.2011, 01:11

Теги

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