LINUX.ORG.RU

Системный скрипт


0

1

Уважаемые гуру linux прошу у вас помощи в следующем вопросе. Требуется скрипт (на shell) который будет выводить имя компьютера, версию OS, ip компьютера, количество ядер, размер CPU и список запущенных процессов !!!

Получилось реализовать часть этих данных в Pythone, если кому интересно могу скинуть наработки, но требуется скрипт именно в shell. Так что если не сложно ребят подскажите как это всё реализовать, или скиньте пример, думаю я не первый кто столкнулся с данной проблемой !!!


Имя компьютера - hostname Версия OS - /etc/<имя дистра>-release IP - парсить ifconfig или ip addr show Количество ядер - lscpu, cat /proc/cpuinfo, dmidecode Размер CPU - в сантиметрах? Список процессов - ps

dzeban
()
Ответ на: комментарий от dzeban

Переводы строк съелись, но, думаю, разберешься.

dzeban
()

Что, зимние каникулы уже кончились?

#!/bin/sh
echo -n 'Имя капутера: '
hostname -f

echo -n 'Версия: '
uname -a

echo -n 'Кол-во ядер-изумрудов: '
grep -c processor /proc/cpuinfo

echo -n 'Модель: '
awk -F: '/model name/ { print $2; exit }' /proc/cpuinfo

echo -n 'ИП: '
/sbin/ifconfig | sed -n 's/^.*inet addr:\([^ ]*\).*Bcast.*$/\1/p'

echo 'А шо у нас щась бежить?'
ps ax

Стыдно, товарищ ТС, стыдно.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Т.е. у нас принято сразу клянчить готовые решения, не почитав ни ABS, ни даже простейшей "линукс для чайников"?

Eddy_Em ☆☆☆☆☆
()

`snmpwalk -v 2c -c <community> <hostname>` выдаст всё, если хост настроен как надо (в общем чуть сложнее, авторизация, то да сё, см man). под linux, solaris, bsd, windows.

А вот всякие 'Pythone', 'cat /proc/sys/<entry>' это частные решения, для конкретного хоста и его конкретного владельца :)

MKuznetsov ★★★★★
()
Ответ на: комментарий от Eddy_Em

Лабу завтра сдавать, а препод злой, какие ABS и «линукс для чайников», ты что.

strangeman ★★★★
()
Ответ на: комментарий от beastie

ip компьютера и список процессов - тоже тот ещё вопрос для лабы.

У меня вот конкретно сейчас железяка воткнута двумя портами в internet и плюс две гостевые системы на virtualbox; какие, сколько и для кого ip-шников (выглядят как)мои, сколько процессов я насчитаю по `ps ax` и в чём я ошибусь?

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Был бы это OpenBSD — не было бы проблем, а Линухах всё как-то не по-человечески.

Например есть группы интерфейсов: egress — то что смотрит наружу, wifi, lo и т.п. Т.е. например IP внешнего:

ifconfig egress inet | awk '/inet/ { print $2 }'
В линухах же приходится танцевать с хитрыми sed, grep и awk.

По поводу ps:

-a      Display information about other users' processes as well as your own.
-k      Also display information about kernel threads.
-H      Also display information about kernel visible threads.
-x      Display information about processes without controlling terminals
Это, чтобы увидеть вообще всё.

disclaimer: смотрел в родных манах, в линухах можеть не быть или быть с точностю до наоборот.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

не, я не проверял ваши познания в *nix :) просто imho для TC, формулировки «ip для хоста» и «список процессов», некорректны вообще.

адреса назначаются интерфейсам; процессы известны лишь владельцу и системе. Не во всякой системе бывает лицо-суперюзер :)

MKuznetsov ★★★★★
()
Ответ на: Что, зимние каникулы уже кончились? от beastie

Спасибо за помощь, это дало толчок к разработке скрипта. Вот ещё один вопрос, можно ли как то связать скрипт BASH и БД(например SQL). То есть скрипт который будет выполнятся в определённое время, результаты его работы будут считываться в БД и хранится там, такое возможно осуществить ?

las90
() автор топика
Ответ на: комментарий от las90

Абзац. Приехали...

... «В определенное время» — man cron.

«Считываться в БД»? Это как? Возможно, результаты работы будут записываться в БД? Тогда man CLI БД. Для PostgreSQL например, как-то вот так — http://www.manniwood.com/postgresql_and_bash_stuff/index.html Для мускуля — сходным образом.

И да, ТС, Вам абсолютно правильно заметили что Вам должн быть стыдно. Сложно представить себе что Вы сможете потом «нагородить», называясь линуксоидом. Либо да, читайте буквари, либо вон из профессии. Так будет честнее.

anonymous
()
Ответ на: комментарий от las90

Вот ещё один вопрос

такое возможно осуществить ?

las90, а ты вообще, человек? Русский язык понимаешь? Что-то у тебя и вопрос задать не получается.

Но вот тебе спойлер — Ответ, «ДА».

Думаю что всё что задаёт тебе твой препод — решаемо. Если, конечно, ты его не «цитируешь» (а то я всяких преподов видал).

anonymous
()
Ответ на: комментарий от las90

Вот тебе рабочий скрипт, где используется БД. Радуйся.

#!/bin/sh
#	2 минуты 12.38 секунд  на 12'989 файлов общим размером 10'026'786'125 байт
#		(стало: 9'919'093'813 байт)
#	1 минута 13.00 секунд на 10'399 файлов общим размером 27'171'656'169 байт
#		(стало: 26'401'660'287 байт)
#	1 минута 17.82 секунд на 8'686 файлов общим размером 11'474'216'791 байт
#		(стало: 11'131'537'062 байт)
#	3 минуты 19.77 секунд на 16'257 файлов общим размером 70'697'892'519 байт
#		(стало: 69'132'667'051 байт)
#
FILELIST="/tmp/filelist_4_mysql"
SQLFILE="/tmp/tmp_4_mysql"
OUTP="/tmp/double_files"
DB="/tmp/filelistdb"

STEP_CNTR=0
#DUP_CNTR=0

function SQL(){
	echo -e $* | sqlite3 $DB
}

function SQLF(){
	sqlite3 $DB < $SQLFILE
}


function Step(){
	STEP_CNTR=$[$STEP_CNTR + 1 ]
	echo -e "\n\e[1;32m$STEP_CNTR\t\t$*...\e[0m"
}

rm -f $FILELIST $SQLFILE $OUTP $DB

Step "Init database"
SQL "create table files(filename string, filesize integer); create table dups(filename string, filemd5 long);"

Step "Making list of files"
find  -type f -printf "%p\t%s\n" > $FILELIST

Step "Finding files with same size"
cat > $SQLFILE << EOF
delete from files;
.mode tabs
.import /tmp/filelist_4_mysql files
delete from files where filesize in (select filesize from (select filesize,count(*) c from files group by filesize having c = 1) T);
delete from files where filesize = 0;
select filesize from files group by filesize;
EOF

SQLF > $OUTP

cat > $SQLFILE << EOF
delete from dups;
.mode tabs
.import /tmp/filelist_4_mysql dups
delete from dups where filemd5 in (select filemd5 from (select filemd5,count(*) c from dups group by filemd5 having c = 1) T);
select filename from dups group by filemd5;
EOF

Step "Finding duplicates"
while read SIZE
do
	rm -f $FILELIST
	SQL "select filename from files where filesize = $SIZE ;" | while read FILE
	do
		MD=$(sha1sum -b "$FILE" | awk '{print $1}' 2>/dev/null);
		if [ "$MD" != "" ]; then
			echo -e "$FILE\t$MD" >> $FILELIST
		else
			echo -e "\e[1;31;40mCant read MD5 of $FILE\e[0m\nTrace:"
			SQL "select filename from files where filesize = $SIZE;" 
		fi
	done
	SQLF | while read FILE
	do
		echo -e "\n\e[1;41;33m$FILE\e[36m has dublicates:\e[0m"
		SQL "select filename from dups where filemd5 = (select filemd5 from dups where filename = \"$FILE\") AND filename != \"$FILE\";"  | while read D_FILE
		do
			echo -e "\e[1;32;40m$D_FILE\e[0m"
			[ "$1" = "-d" ] && rm -f "$D_FILE" && echo "deleted"
			[ "$1" = "-l" ] && ln -f "$FILE" "$D_FILE" && echo "linked"   #|| ln -fs "$FILE" "$D_FILE" || echo -e "\e[1;31;40merror linking $FILE to $D_FILE!!!\e[0m"
		done
	done
done < $OUTP

Step "Deleting trash"
#echo "delete from files; delete from dups;" 
rm -f $FILELIST $SQLFILE $OUTP $DB

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от post-factum

это же просто кошмар!

Как говорится, правильно заданный вопрос — половина ответа! А если не умеешь вопросы задавать, либо учись, либо обращайся в job.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Я, конечно, понимаю, что человек может не уметь гуглить (хотя почему — не понимаю), но не надо тут причмокивать языком и сокрушённо качать головой. Сюда ходят за помощью, а не за издевками.

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

Да я причмокиваю языком отчасти из-за того, что он не может внятно объяснить, что именно от него хотят!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Да я причмокиваю языком отчасти из-за того, что он не может внятно объяснить, что именно от него хотят!

от него? Хех, от него уже всё получено.

anonymous
()
	function info {
		cpufreq-info | grep 'current C'
		echo 'HDD:'
		sudo hddtemp /dev/sda 2> /dev/null
		nvidia-smi -a | grep Gpu | grep C
		nvidia-smi -a | grep Used 
		echo 'CPU:'
		sensors | grep Core
	}

Частота ядра, температура проца, видео, сколько видео занято. вывод:

$ l cpu
see help ( l cpu ? or l cpu help)
  current CPU frequency is 2.13 GHz.
  current CPU frequency is 2.27 GHz.
  current CPU frequency is 2.27 GHz.
  current CPU frequency is 2.27 GHz.
HDD:
/dev/sda: WDC WD5000BEVT-22ZAT0:  35°C или °F
        Gpu                     : 43 C
        Used                    : 104 MB
CPU:
Core 0:       +46.0°C  (high = +95.0°C, crit = +105.0°C)
Core 2:       +37.0°C  (high = +95.0°C, crit = +105.0°C

ymuv ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.