Под slackware, gentoo и подобное добавить бы...
GNU/Linux, UNIX, Open Source → Программное обеспечение
Genie
написал 17 июня 2004 года в 19:05 (1216 просмотров)
Ведет себя
как мужчина; открыл 40 тем в форуме, оставил 4758 комментариев на сайте.
Собственно вот… Родилось оно как-то, а чую, что не полное оно.
А нет у меня ни slackware, ги gentoo…
#!/bin/sh # VERSION='getcfg 0.0.20040530-2' # # Назначение этого скрипта простое - собрать о системе как можно больше # информации и сложить её в один файл. Это может быть полезным, когда # возникает проблема с Вашим linux, а справиться своими силами не удаётся. # PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin # # Для начала найдём все необходимые обязательные программы, которые # используются явно. Тем самым избежим ошибок, связанных с использованием # команды alias. # [ -x /bin/which ] && WHICH=/bin/which || \ [ -x /usr/bin/which ] && WHICH=/usr/bin/which || exit -1 # ECHO=`$WHICH echo` && PRINTF=`$WHICH printf` || exit -1 CAT=`$WHICH cat` && DATE=`$WHICH date` && LS=`$WHICH ls` && SORT=`$WHICH sort` \ || ($ECHO "*** Fatal: missing 'coreutils'. Aborting. ***"; exit -2) # AWK=`$WHICH awk` && GREP=`$WHICH grep` && HOSTNAME=`$WHICH hostname` && \ IFCONFIG=`$WHICH ifconfig` \ || ($ECHO "*** Fatal: install also '[gm]awk', 'grep', 'hostname' and 'net-tools'."; exit -2) # # Куда сохранять отчёт - в текущую папку, по умолчанию. # DESTDIR=${DESTDIR:-.} # # Первый попавшийся eth интерфейс и будет главным. Определим его mac-адрес. # MAINIF=`$IFCONFIG -a|$AWK '/^eth/{print $1;end}'` MACADDR=`$IFCONFIG $MAINIF|$AWK '/^eth/{gsub(":","");print $5}'` LOGFILE=$DESTDIR/$MACADDR # DEFIFS=$IFS $ECHO -n > $LOGFILE ( # # Собираем общую информацию о системе: ядро, имя компьютера и пользователя, # текущую дату, mac-адрес первого сетевого интерфейса # $PRINTF "[Info]\n\ System=`$CAT /proc/version`\n\ Current_User_Name=$USER\n\ Computer_Name=`$HOSTNAME`\n\ Record_Date=`$DATE +%d.%m.%Y`\n\ MAC_Addr=$MACADDR\n\ Param_0=$VERSION\n" $IFCONFIG $MAINIF|$AWK '/inet addr:/{gsub(":"," ");printf "IP_Addr=%s\n",$3}' # # Получаем информацию о компьютере: процессор(ы), объём ОЗУ, жёсткие диски # и приводы cd/dvd. Вот тут есть баг: если включена эмуляция scsi, то # считаться будет дважды. Ну и не определяется объём scsi дисков. # $PRINTF "\n[Computer]\n" $CAT /proc/cpuinfo*|$AWK 'BEGIN {FS=" *:+ *";CONVFMT="%.0f"} /model name/ {models=models sep1 $2;sep1=", "} /cpu MHz/ {freqs=freqs sep2 0+$2;sep2=", "} END {printf "CPU=%s\nCPU_Freq_in_MHz=%s\n",models,freqs}' $LS -aFl /proc/kcore|$AWK '{printf "Memory_in_Mb=%.0f\n",$5/(1024*1024)}' # # устройства ide # DriveNo=3 HDDSize=0 for HD in a b c d e f g h; do if [ -x /proc/ide/hd$HD ]; then hdX=/proc/ide/hd$HD case `$CAT $hdX/media` in disk) $ECHO Drive_$DriveNo=Hard Disk cache=`$CAT $hdX/cache` if [ $cache -eq 0 ]; then cache=128; fi HDD="${HDD}IDE `$CAT $hdX/model`/${cache}kb cache:" let HDDSize=HDDSize+`$CAT $hdX/capacity` ;; cdrom) $ECHO Drive_$DriveNo=CD-ROM CDROM="${CDROM}ATAPI `$CAT $hdX/model`:" ;; esac let DriveNo++ fi done # # устройства scsi # eval $($AWK 'BEGIN{drvno='$DriveNo'} /^Host:/ {v="";m="";r="";t="";a=""} /^ Vendor:/ {split($0,ar,/ +[^ \:]+\: +/);v=ar[2];m=ar[3];r=ar[4]} /^ Type:/ {split($0,ar,/ +[^\:]+\: +/);t=ar[2];a=ar[3]; if(t == "Direct-Access"){ hd=hd "SCSI " v " " m ":"; e=sprintf("%sDrive_%d=Hard Disk\\n",e,drvno++) }else if(t == "CD-ROM"){ cd=cd "SCSI " v " " m ", rev. " r ":"; e=sprintf("%sDrive_%d=CD-ROM\\n",e,drvno++) }} END{printf "HDD=\"${HDD}%s\"; CDROM=\"${CDROM}%s\"; printf \"%s\"",hd,cd,e; exit drvno}'</proc/scsi/scsi; let DriveNo=0+$?) let HDDSize=HDDSize/1000*512/1000 $PRINTF "Total_HDD_in_Mb=$HDDSize\n" # # Текущая конфигурация устройств в компьютере: видео, аудио и сетевые # адаптеры, модели дисков и приводов. # $PRINTF "\n[Current_Config]\n" $AWK 'BEGIN {FS=": "} /VGA/ {printf "Device_%d=Display %s\n",devno++,$2} /Ethernet/ {printf "Device_%d=Net %s\n",devno++,$2} /Multimedia/ {printf "Device_%d=MMedia %s\n",devno++,$2} END {exit devno}'</proc/pci let DevNo=0+$? IFS=':' for HDisk in $HDD; do if [ $HDisk ]; then $ECHO Device_$DevNo=HDD $HDisk let DevNo++ fi done for CDrive in $CDROM; do if [ $CDrive ]; then $ECHO Device_$DevNo=CdRom $CDrive let DevNo++ fi done # # Список служб при загрузке. # IFS=$DEFIFS printf "\n[Linux_StartUp]\n" SoftNo=0 [ -d /etc/rc.d ] && SoftRC="/etc/rc.d/" [ -d /etc/rcS.d ] && SoftRC="$SoftRC /etc/rcS.d/S[0-9][0-9]*" SoftAll=`($LS $SoftRC;$LS /etc/rc$($AWK 'BEGIN{FS=":"}\ /^[^#]*initdefault/{print $2}'</etc/inittab).d/S[0-9][0-9]*)|$GREP -v ":$"` for Soft in $SoftAll; do $ECHO "Lin_Start_${SoftNo}=${Soft#*S[0-9][0-9]}" let SoftNo++ done # # Список установленного программного обеспечения в пакетах и в паре # "умолчальных" для Slackware мест: /opt и /var/adm/packages. # Для пакетов debian добавляем к названию номер версии установленного # пакета, чтобы можно было идентифицировать программные ошибки. # RedHat .rpm пакеты содержат в себе номера версии сразу в названии # пакета, так что тут никаких дополнительных движений не производится. # (хотя, наверное, надо бы вместо знаков "-" поставить "_" между # именем и номером версии, как это сделано в пакетах debian.) # Для пакетов Slackware что и как о версии известно - мне не известно. # printf "\n[Linux_Soft]\n" SoftNo=0 SoftAll=`(DPKG=$($WHICH dpkg) && $DPKG -s $($DPKG --get-selections|\ $AWK '/[\t ]+install/{print $1}')|\ $AWK '/^Package:/{p=$2 "_"}/^Version:/{print p $2}';\ RPM=$($WHICH rpm) && $RPM -qa;\ [ -d /var/adm/packages ] && $LS /var/adm/packages;\ [ -d /opt ] && $LS /opt)|$SORT` for Soft in $SoftAll; do $ECHO "Lin_Soft_$SoftNo=$Soft" let SoftNo++ done ) >> $LOGFILE && $ECHO Report $LOGFILE has been successfully generated. # # by Serge Zenkov, a.k.a. Genie # mailto:genie@nsk.ru #
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Щас покушаю и пойду тестить :)
Угу :)
Вот только: у кого нет сетевой карточки, не пускайте скрипт.. оно ругаться будет. (потому как имя файла создаётся по MAC-адресу сетевой карты первого из eth, и никакой проверки на этот случай не делается… хотя оно и понятно: не бывает линуха без сети. не бывает…)
В общем, список поправок принимается тоже ;))
Ну, смотри какая бяка на Слаке current (ядро 2.6.7 — это, конечно неважно, но почему бы не похвастаться…)
~$ ./scr.sh
eth1: Unknown host
ifconfig: `--help' gives usage information.
./scr.sh: line 37: ./: Is a directory
./scr.sh: line 164: ./: Is a directory
# ./scr.sh
eth1: Unknown host
ifconfig: `--help' gives usage information.
./scr.sh: line 37: ./: Is a directory
./scr.sh: line 164: ./: Is a directory
Здесь вот какая фигня. В ядрах 2.6 есть такая фишка как IP1394, то бишь IP over FireWire. Я ее в конфиге ядра указал, но сам интерфейс не сконфигурил. То есть, eth1 есть, а MAC на ем странный, и адреса нетути… А ifconfig -a его цепляет. Похоже, он у тебя берет не первый интерфейс, а последний…
Ладно, выгружаем eth1394
$ ./scr.sh
./scr.sh: line 14: /proc/scsi/scsi: No such file or directory
/bin/ls: /etc/rc3.d/S[0-9][0-9]*: No such file or directory
/usr/bin/which: no dpkg in (/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin)
Report ./0A0BFF93016C has been successfully generated.
Да, репорт нормальный. :-) Название файла я слегка в этом посте скорректировал, не удивляйтесь… :-)
Good Luck,
UT
вывод этих вот командмне на почту, пожалста (адрес в конце скрипта):
ifconfig -a
ls -AFoR /proc/[A-z]* /sys
which — странная с ним ситуация — на debian оно молчит, если не находит, на rh-based — ругается. и на slackware ругается.. буду думать..
Система Gentoo Linux ядро 2.6.4.
Ох, сдаётся мне, что у тебя не \n на конце строчек, а \r\n получилось…. :))
Другого объяснения такому поведению я себе представить не могу…
Для .rpm пакетов можно использовать rpm -qa --queryformat «\n»%{name}» v."%{version}
Вместо » v.» можно вставить что угодно, но, имхо, » v.» будет лучше.
угумс.
ну, в обратном порядке :))
dbgrid:
-- большое спасибо. подумаю, может использую. главное — знать как ;)
LONGOBARD:
если поглядеть внимательнее на строчки, на которые ругается — то видно, что они оканчиваются на \\ , тем самым, подразумевается, что сразу за этим знаком будет \n и ничего другого.
Uncle Theodore:
-- ууууу. значит, inittab указывает 3ий дефолтный уровень, а стартовых скриптов там нет ни одного.
вод веть.
-- там вообще страх и ужас чего — теперь, думаю, будет поприятнее :)
-- вот именно про это я и говорил.. но даже мысли не было, что это-может-быть-настолько-так своим постингом
-- о существовании eth1394 я ни сном, ни духом, аднака :)))))
fixed
Тег code корёжит написанное :(
к сожалению.
зачем-то при выводе в тексте html тег
обрамляется пробелами.
Отсюда и проблема у LONGOBARD.
Во всех строчках нужно убрать в конце пробелы!
Дело не в уровне, а в том что rc3.d находиться в /etc/init.d/ а не в /etc/
Была такая же ошибка.
Пришлось исправить на
SoftAll=`($LS $SoftRC;$LS /etc/init.d/rc$($AWK 'BEGIN{FS=«:»}\
После этого всё ОК
Гы. Тогда вышлете на мыло longobard на_сервере user.mns.ru нормальную версию скрипта ок? Заранее спасип
А это смотря где. В Слаке BSD-init по дефолту, соответственно, никаких rcN.d нету, если их специально не делать. В /etc есть rc.d а в нем — все стартовые скрипты…
Good Luck,
UT
Это в слаке, а во многих дистрибутивах есть символьная ссылка в /etc/
на /etc/init.d/ и скрипты, проверяя, есть ли такая директория, начинают с ней работать напрямую. Каждый инит имеет свою директорию… Да кому я объясняю… Надо делать универсальный скрипт, если уж такая задача поставлена.
хорошо.
отчасти я понимаю, что именно надо сделать.
осталось малое — у мея нет полной инфы. и ящик пуст.. (это типа намёк)
ls -AFR /etc/{init,rc}*d
мне на почту у кого проблемы
Видишь ли, я человек скрытный от природы… Но последний вариант команды прогнать могу. Стало быть, Слака current (самая что ни на есть current) ядро 2.6.7
~$ ls -AFR /etc/{init,rc}*d
ls: /etc/init*d: No such file or directory
/etc/rc.d:
devmap_mknod.sh~* rc.acpid* rc.inet1.conf.new rc.pcmcia*
rc.0@ rc.alsa* rc.inet1.new* rc.portmap
rc.0.bkup* rc.alsa~* rc.inet2* rc.samba
rc.4* rc.atalk rc.inet2.new* rc.sendmail
rc.6* rc.bind rc.inetd* rc.serial*
rc.6.bkup* rc.cups rc.ip_forward rc.sshd*
rc.6.new* rc.devmap_mknod.sh* rc.local* rc.syslog*
rc.K* rc.font.new* rc.local.new* rc.syslog.new*
rc.M* rc.gpm* rc.local~* rc.sysvinit*
rc.M.bkup* rc.hotplug* rc.lprng rc.wireless*
rc.M.new* rc.httpd rc.modules* rc.wireless.conf
rc.S* rc.inet.uni* rc.modules~* rc.yp*
rc.S.new* rc.inet1* rc.mysqld
rc.S~* rc.inet1.conf rc.nfsd*
Good Luck,
UT
Дык.. Оно и понятно — история с легализацией ещё не забылась ;))))
итак, вроде поправил.
Лично проверено, работает на: Debian Woody, RedHat 9.0 (в общем-то и другие версии и клоны работать должны), Blin-1.3-gnome2 (собственно slackware и есть. вот только почему там нет printf? пришлось брать с debian).
Осталось решить, куда это дело выкладывать — на форум неудобно. хотя и возможно.
LONGOBARD: Кинул, лови :)
Только оно не долетело — говорит, что не знает такого почтового домена user.nms.ru
Временно выложен тут под именем getcfg. Пока не определился куда лучше.
На Слаке 9.1 работает отлично.
Вот только не понял, зачем это надо пока :) Разве что для быстрого получения инфы на «чужой» системе
http://www.nixp.ru/pub/sh/getcfg
http://www.nixp.ru/pub/sh/getcfg.bz2
P.S. Глюк с пробелами в конце строк устранен.
P.P.S. Под Debian скрипт работает нормально.
млин, перепутал адрес :) сервер почтовый users.mns.ru , юзерь на нем longobard. Я же мыло свое в профие вроде не скрывал :)
Выхлоп скрипта:
1) root@livecd непонятно откуда взялось.
2) шо за список Linux_Soft?
>> 1) root@livecd непонятно откуда взялось.
На самом деле, вполне понятно, откуда это взялось ;))
Стоит только начать разбираться.
Компилировалось ядро на системе, которая загружалась с cd. И, вероятно, что hostname в то время был именно livecd.
А при компиляции в ядро вставляется имя компа, на котором оно компилялось.
Ну и пользователь — root, как это ни странно ;)
>> 2) шо за список Linux_Soft?
Это софт, установленный на компе. Его оказалось найти сложно, только то, что есть в /opt и нашлось. Мдааа…
И стартовых скриптов как ни бывало..
1) Ядро я собирал НЕ ИЗ LiveCD! Я точно помню, шо на Лайве я собирал 2.6.0, 2.6.4 — уже на генту с харда.
2) Лучше этот список вапще убрать, раз он такой ущербный.
3) Стартовые скрипты у меня в /etc/init.d (сами скрипты), /etc/conf.d (конфиги для них). В генту скрипты устроены так:
4) Все остальное — верно!
http://www.gentoo.org/doc/ru/rc-scripts.xml
Вот и все вопщем то. Удачи!
>> 1) Ядро я собирал НЕ ИЗ LiveCD! Я точно помню, шо на Лайве я собирал 2.6.0, 2.6.4 — уже на генту с харда.
Я не настолько хорошо знаю технологию сборки ядер на gentoo ;) чтобы вот так вот с ходу ответить на этот вопрос.
По аналогии с процессом сборки ядра в Debian могу предположить, что значит есть некоторый файл, в котором прописывается данная инфа
>> 2) Лучше этот список вапще убрать, раз он такой ущербный.
Не стОит быть настолько категоричным в этом плане — на моём компе список доволно внушительный — порядка 500 пакетов, а на хорошо нагруженной системе с RH — за 700. Так что тут надо просто разобраться, чем смотреть список установленного софта на gentoo. Если бы я это знал сразу, это было бы сделано и этой темы не было бы.
>> 3) Стартовые скрипты у меня в /etc/init.d (сами скрипты), /etc/conf.d (конфиги для них). В генту скрипты устроены так:
ls -AFoR /etc/init.d мне на почту.
>> 4) Все остальное — верно!
ну, может и так… для пущего разбирательства `cat /proc/pci; ls -AFoR /proc/[A-z]* /sys` на почту
1) возможно, т.к. ядро с лайвцд ставилось ебилдом, оно отмечено в базе портов. А остальные ядра я ставил руками.
2) cat /var/cache/edb/world
Вот тебе и список.
3)ls -AFoR /etc/init.d
4) cat /proc/pci
ls -AFoR /proc/[A-z]* /sys
Хорошо. Буду немного переписывать (ну, как обычно, с нуля) :)))
Только вот
тут написано 2 разных аргумента «/proc/[A-z]*» и «/sys» :)
ls -AFoR /proc/[A-z]* /sys (просто сначала не заметил пробела) у тебя на мыле. Удачи!
Спасиба, буду отдельно разбираться с gentoo… Так что считай, что ты особенный ;))
по большей части переписанная на пёрле версия (всё ещё часть на шелле) лежит тут
восстановлена не вся фукциональность (пока что), но, к тому же, задатки к расширению есть.
Кто хочет/может протестировать — тестируйте и вывод на почту мне.
Пожелания — также принимаются. К уже намеченному — конфигурация X-сервера.
У меня ламерский вопрос по перлу .
Вот я поставил линукс . как мне теперь узнать , стоит ли на нем перл ?
Если нет , то что нужно поставить ?
А вопрос-то и не про перл вовсе…
Точно как и в винде: попробовать запустить. Например так:
$ perl -h
perl
Понятно .
Перл , похоже , в линуксе играет примерно ту же роль , что и шелл ?
Пишут ли на перле системные скрипты ?
Может ли перл заменить шелл ?
Perl — это Perl, а shell — это shell. Не надо путать божий дар с яичницей.
Что значит системные? То что они используют системные вызовы вроде fork(2)?
Нет, не может.
Мдяя. Хотелось сделать определение привязки сетевого интерфейса к карточке.
Всё вроде в теории замечательно, `cat /proc/pci` и `lspci -vv` показывают irq и ports для карточки, правильно…
`ifconfig -a` тоже показывает для физических интерфейсов irq и базовый port ввода/вывода.
Должны бы совпадать для отдельно взятого интерфейса.
И совпадают.
Но не у меня самого! :((
Какого Х оно показывает по-разному и где это поправлять???
PS: у кого есть scsi hdd: как объём-то таких дисков узнать? :)
/proc/partitions бы поглядеть — там вроде может быть. email me, кто в курсе.
В асп 9.2 есть системный скрипт , который называется sysreport ,
он позволяет получить подробную информацию о редхат-подобной системе .
Весит 10 килобайт , вот маленький кусок с него :