LINUX.ORG.RU

Скрипты, которые мы пишем...


0

0

Уважаемый All, все мы по долгу службы или просто для своего удобства вынуждены писать различные скрипты для различных целей, будь то автоматическая инсталяция продуктов на несколько машин или вещи попроще. Вот я и подумал, что зачем сто раз писать то, что уже давно написано и во что вложено достаточно труда и времени. Давайте устроим здесь своеобразный ⌠пункт обмена■, неопытные пользователи скажут Вам спасибо и смогут сразу использовать скрипты, а опытные смогут сэкономить себе немного времени, головной боли, а также поучится новым программистским приемам. Для затравки выложу здесь (На форуме development - линк - внизу ) небольшой скрипт, который упорядывачивает вывод от стандартной команды df (для Линукса это, может не так актуально, а мне на Солярисе 2.6 очень даже помогает.) внутри ещё чего покидаю... Так что, продолжение следует?..

>>> Ссылка на форум

Лажа... новенькие ИМХО должны сами скрипты писать...

anonymous
()

>> Лажа... новенькие ИМХО должны сами скрипты писать...
Правильшно!!!

anonymous
()

Предложение хорошее, тем более, что аудитория подходящая -
много опытных админов и новичков в Linux/Unix, то есть
тех, кто может научить, и тех, кто хочет научиться.
Желательно бы организовать это культурно: к каждому скрипту -
документацию (скрипт, запощенный в форум не имеет ни одного
комментария, а надо бы написать хотя бы для чего он вообще
людям будет нужен ) рейтинг (голосуют только зарегистрированные
посетители, хотя сломать можно все ...), тред с обсуждением
(желательно модерируемый, чтобы всякие уроды не портили жизнь). Рейтинги по разным категориям - самые свежие, наиболее загружаемые,
лучшие по оценкам. IMHO польза будет, а с ней и посетителей поболе
появится.

anonymous
()

To: anonymous (*) (2002-07-11 16:13:34.885) Ну так напиши! Тебе сказано русским языком: для обучения и чтобы велосипед десять раз не изобретать. Лучше написать в сэкономленное время чего нибудь полезное - то что ещё не написано! И нечего строить из себя крутого (слова - слова)

CrownRU
() автор топика

Очень даже хорошо и полезно- кому надо, на хороших скриптах посмотрит как чего делать надо

anonymous
()

Первые два онанимуса - онанируйте, но не мешайте людям осваивать
систему.

anonymous
()

Абсолютно согласен с CrownRU. Идея действительно заслуживает внимания.

andrey-x
()

Извините, что без комментариев - мне их писать ещё труднее,
чем сам скрипт;) Насчёт первого: у меня он зовется: ndf (nice df :))
выводит все красиво - ровненько по колоночкам.
И не жмитесь там...;)

CrownRU
() автор топика

Вот ещё (не пугайтесь;))

А этот скрипт - помесь ls -la & du -k очень пользительная штука
при поиске источников мусора, например какой user, сорит больше всех
в своем HOME, а внизу пишет сумму, сколько места занято в данной
директории.

# dull -s /DIR

492 drwxr-xr-x 3 a101i08 oe352 512 Dez 11 2001 .ssh2/
2234 drwxrwxr-x 3 a101i08 oe352 5120 Mai 29 15:01 SA-245/
8635 drwxr-xr-x 3 a101i08 oe352 512 Apr 10 16:18 vim61/
12484 drwxr-xr-x 5 a101i08 oe352 512 Mai 13 14:55 pkg/
24003 drwxr-xr-x 2 a101i08 oe352 12288 Jun 7 08:51 sshlogs/
35335 drwxr-xr-x 4 a101i08 oe352 512 Mai 22 16:57 ASperl/
52446 drwxr-xr-x 12 a101i08 oe352 512 Mai 27 15:41 tmp/
------
137077



#!/bin/sh
#
# IDENTIFICATION
# $RCSfile$ $Revision$ $Date$
#
# NAME
# dull - Eine Mischung aus ls -la + du -k
#
# SYNOPSIS
# dull [ -a | -s | -t | -- ]
#
# DESCRIPTION
# combination of 'du' and 'ls -l', lists directory entries preceded by
# recursive disk usage; this is especially useful in directories where
# there are items owned my various accounts, and you want to see sizes
# and owner in one listing; also gives total blocks;
#
# erstellt eine Ausgabe in der Form:
# 229 drwxr-xr-x 3 a101xxx oe352 512 Jan 22 16:58 bin/
# .
# .
#
# EXPIRATION DATE
# -keines-
#
# OPTIONS
# -a abbreviated listing (fewer columns);
# -s sort output by size;
# -t do not print the total;
# -- stop processing options;
# item what to analyze;
# default is everything in the current directory;
#
# OPERANDS
# -keine-
#
# GLOBALE VARIABLES
# -keine-
#
# FILES
# -keine-
#
# EXIT STATUS
# -keiner-
#
# USAGE
# -keine-
#
#
# CREATION DATE
# 2002-01-22
#
#
# ==============================================================================


PROG=`basename "$0"`
USAGE="
Usage: $PROG [-ast] [--] [item...]

Output is a mix from the 'du' and 'ls -l' commands.

-a abbreviated listing (fewer columns);
-s sort output by size;
-t do not print the total;
-- stop processing options;
item what to analyze; default is everything in the
current directory;
"

#
# Note: in several instances below, some effort is made to determine
# proper forms of commands; this is usually to distinguish between
# BSD and ATT styles, such as differences between SunOS and Solaris;
#

ABBREV=0 # don't abbreviate output
SORT=0 # don't sort by size
TOTAL=1 # print the TOTAL

#
# platform specific settings
#
SYS="`uname -sr`" # OS type
AWK='awk'
case "$SYS" in
'SunOS '*)
AWK="nawk"
esac

SYNTAX="
$PROG: option syntax error."

syntax_error() {
echo "$SYNTAX" >&2
echo "$USAGE" >&2
exit 1
}

arg_syntax_check() {
[ "$1" -lt 2 ] && syntax_error
}

while [ $# != 0 ]; do
OPT="$1"
case "$OPT" in
# option without argument
-a)
# print out a more abbreviated listing, ie, fewer columns
ABBREV=1
;;
-s)
# sort output by size
SORT=1
;;
-t)
# do not print the total
TOTAL=0
;;
# option with argument
# -c)
# CFLAG=1
# arg_syntax_check "$#"
# CARG="$2"
# shift
# ;;
# ...
--)
shift
break
;;

# unknown option
-?)
syntax_error
;;
# compound option
-??*)
# break up a compound option
NEW_OPTS=`$AWK 'BEGIN {
OPT_STR = "'"$OPT"'";
LEN = length(OPT_STR);
NEW_OPTS = "";
STATUS = 0;
for (POS=2; POS+0 <= LEN; ++POS) {
OPT = substr(OPT_STR,POS,1);
if (OPT !~ /[a-zA-Z0-9_]/)
STATUS = 1;
NEW_OPTS = NEW_OPTS " -" OPT;
}
print NEW_OPTS;
exit STATUS;
}' <&-` || {
syntax_error
}
shift
if [ "$#" -gt 0 ]; then
set -- $NEW_OPTS "$@"
else
set -- $NEW_OPTS
fi
continue
;;
# end of options, just command arguments left
*)
break
esac
shift
done

#
# if no arguments, just use the current directory;
# these become the positional parameters;
# if only one argument and it is a directory, then
# cd to it and do the same;
#
if [ $# = 0 -o \( $# = 1 -a -d "$1" \) ]; then
[ $# = 1 ] &&
cd "$1"

# restrict field separator to newline only
_IFS="$IFS"
IFS='
'
set -- X `ls -A`
shift
if [ $# = 0 ]; then
exit 0
fi
IFS="$_IFS"
fi

#
# figure out which form of 'du' to use
#
get_pathname() {
set -- `type $1`
[ $? != 0 ] && return 1
shift 2
echo "$*"
return 0
}
DU=`get_pathname du`
if [ $? != 0 ]; then
echo NO
echo "
$PROG: cannot find \"du\" command." >&2
exit 1
fi
if $DU -sk $DU >&- 2>&-; then
DU="du -sk"
else
DU="du -s"
fi

#
# figure out which form of 'ls' to use,
# longer one wins
#
LEN1=`expr "\`ls -ld /\`" : '.*'`
LEN2=`expr "\`ls -ldg /\`" : '.*'`
if [ "$LEN1" -gt "$LEN2" ]; then
LS="ls -ldF"
SLEN="$LEN1"
else
LS="ls -lgdF"
SLEN="$LEN2"
fi

#
# now operate on each selected item
#

for ITEM do
# don't get hosed by arguments that start with '-'
case "$ITEM" in
-*)
ITEM="./$ITEM"
esac
# make sure it exists
ls -d "$ITEM" >/dev/null ||
continue
$DU "$ITEM" 2>&-
$LS "$ITEM" 2>&-
done |

$AWK 'BEGIN {
# grab some values from the shell
ABBREV = '"$ABBREV"';
SLEN = '"$SLEN"';
SORT = '"$SORT"';
TOTAL = '"$TOTAL"';

SORT_CMD = "sort +0n"
}
{
#
# odd lines are du output
# even lines are ls output
#
if ((NR % 2) == 1) {
BLOCKS = $1;
TBLOCKS += $1;
}
else {
if (ABBREV) {
if (length($1)+0 > 10)
USER = $2;
else
USER = $3;
# blocks, user, itemname
LINE = sprintf("%8s %-8s %s",BLOCKS,USER,substr($0,SLEN));
}
else
# blocks, the whole line from ls
LINE = sprintf("%8s %s",BLOCKS,$0);
++CNT;
if (SORT)
LINES[CNT] = LINE;
else
print LINE;
}
}
END {
if (SORT) {
for (I=1; I+0 <= CNT; ++I)
print LINES[I] | SORT_CMD;
close(SORT_CMD);
}
if (TOTAL && CNT) {
printf("%8s\n",substr("--------",1,length(TBLOCKS)));
printf("%8s\n",TBLOCKS);
}
}'

exit

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

>Извините, что без комментариев - мне их писать ещё труднее,

Это понятно, но если выкладываешь людям с целью использования или
(что тоже ценно) обучения, хорошо бы напрячься на 10 минут и добавить
комментарии в местах важных по смыслу или зависящих от конкретной системы/конфигурации/библиотек/...
В эти скрипты еще надо добавить свои координаты дату и лицензию.
(ee отсутствие подразумевает GPL? :))

anonymous
()

>>В эти скрипты еще надо добавить свои координаты дату и лицензию.
>>(ee отсутствие подразумевает GPL? :))

Пользуйтесь на здоровье - мне не жалко.
А координаты... Вот здеся и есть мои координаты.:)

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

>>В эти скрипты еще надо добавить свои координаты дату и лицензию.
>>(ee отсутствие подразумевает GPL? :))
>Пользуйтесь на здоровье - мне не жалко.
>А координаты... Вот здеся и есть мои координаты.:)

Дата, версия и координаты нужны, чтобы связываться насчет багов/новых_версий а ты не помнишь или не знаешь, где взял
скрипт. Вот для чего! Так что добаляй в будущих скриптах.

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

А если вам скажут что вы тогда себе сами ядро пишите или кде состряпайте? Глупости. Вся наука держится на обмене опытом. И предложение хорошее. Только вот скрипт это ведь программа, и без документации его проще самому написать чем готовый разобрать. А вот документацию у нас писать не любят.

maxik73
()

Ну извините, не думал, в следующих скриптах буду писать. Не предполагал, что вам будет интересно знать кто их написал. Ну а о впечатлениях написать не слабо? или выложить что-то своё...?

CrownRU
() автор топика

To: maxik73 (*) (2002-07-11 17:04:38.084)
Главное работает;)

CrownRU
() автор топика

CrownRU - ламер

а затея не плохая, только это хорошо бы делать не в форуме а разделом отдельным

ну или отдельным форумом а так очень не структурировано получается

anonymous
()

anonymous (*) (2002-07-11 17:44:14.807)
Обоснуй, паучёк онанси.

CrownRU
() автор топика

> ... или выложить что-то своё...?

Есть наработки, которые и выложить можно, но чтобы это все не пропало
без следа, надо бы завести отдельный раздел на сайте. Может у
maxcom-а спросим, что он думает по поводу отдельного раздела на LOR
для скриптов ...
=====================================================================
Maxcom, что ты думаешь насчет отдельного раздела на LOR для скриптов?
=====================================================================

anonymous
()

Hey, guys !

We simply could move on a site which is given below?

http://www.shelldorado.com

Regarding comments, I think it will be hard only for a persons without language. But anyway, it seems will be very good idea like an additional mirror of existing site.

Regards

anonymous
()

Podderzhivaju. Ideja ochen' del'naja. Odnako nado nayti v pervuju ochered' mesto, dalee ljudej, kotorye soglasny za etim prigljadyvat', reshit' po kakim kategorijam oni otsortirovany i t.d. S udovol'stviem pouchastvuju v obsuzhdenii.

russman ★★
()

Обоснуй, паучёк онанси.

CrownRU (*) (2002-07-11 17:52:59.957)

1. Коментарии ламеры не пишут

2. Исключений не бывает, даже в страшно простых случаях

рекомендую почитать что-нибудь в стиле Кернигана и Пайка "Практика программирования" прежде чем выкладывать что-либо (даже скрипты) на всеобщее обозрение.

anonymous
()

не пройдет это на ЛОРе :-(
тут много пальцатых cOOl аDмиNов.

Nickolay

anonymous
()

2anonymous (*) (2002-07-11 19:04:00.401)

что не пройдет ?

раздел со скриптами? почему ?

anonymous
()

Нахрена мне нужны корявые, неработающие и абсолютно неграмотные скрипты от третьей стороны? Вместе с каждым из open source программных продуктов идут, как правило, грамотные read.me , или существуют man или другие мануалы,how-to , существуют списки рассылки, включены примеры работы и настройки и т.п. Если речь идет о модулях , библиотеках или пакетах, для работы языков программирования с определеннцми программными продуктами, то - опять же ничего нового вы не сказали : go to cpan.org, например.

А "вот, кульно-рульный скрипт который выдает красиво подкрашенный hello world, так что я от него тащщусь, да и к нему даже gui прилагается" - нет, боюсь что не подойдет, особенно для квалифицированных пользователей и администраторов.

anonymous
()

а в остальном : man, man bash, perldoc и т.п. вам помогут

anonymous
()

man, man bash, perldoc может и помогут но не сразу, а скрипт взял и пользуйся, а когда работу сделал можно уже и man bash.

мое редложение сделать коментарии к скриптам на русском. для начинающих, включая меня, это будет гораздо полезней чем man bash наночь, хотя бы потому что когда читаешь тот же man bash, то не понимаешь нафига там столько всяких функций, когда же сталкиваешься с реальной задачей и ее решением (скриптом) все становиться гораздо понятней, по крайней мере становится понятным что тебе из всего man bash'a на данный момень важней всего.

ЗЫ: все эт имхо.

anonymous
()

Идея-то хорошая, но зачем вываливать код скриптов прямо в форуме - что тут, что на forum.ixbt.com?

Или это - проявление графомании, "смотрите все, что я написал"?

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

du --max-depth=1 /home

Вот это действительно круто !!! Кратко и красиво !!! Как всегда - RTFM, RTFM и еще раз RTFM. А для совсем эстетов еще ключик -h, в kb/mb/gb показывает.

anonymous
()

>Вот едрен батон! Чему молодежь учишь???? Размеры каталогов в /home:

А то, что кроме линукса на свете еще есть юниксы вы знаете?

bash-2.05$ du --max-depth=1 /home
du: illegal option -- -
usage: du [-a][-d][-k][-r][-o|-s][-L] [file ...]
bash-2.05$ uname -sr
SunOS 5.7

anonymous
()

>Вот едрен батон! Чему молодежь учишь???? Размеры каталогов в /home:

М-да.
А то, что кроме линукса, на свете еще есть юниксы вы знаете?

bash-2.05$ du --max-depth=1 /home
du: illegal option -- -
usage: du [-a][-d][-k][-r][-o|-s][-L] [file ...]
bash-2.05$ uname -sr
SunOS 5.7

poison_reverse
()

Перемешать курсор

#!/bin/sh
tput cup $1 $2

Меню:
#!/bin/bash
#=================================================================
# Script name: createacc v0.1
# By: Iouri Goussev
# E-Mail: elendal@polygonized.com
# Date: June 2002

looptest=y
while [ "$looptest" = "y" ]
do
   clear
   cursor 1 4 ; echo "New domain creation Interface"
   cursor 2 4 ; echo "============================="
   cursor 4 4 ; echo "Login         : "
   cursor 5 4 ; echo "Password      : "
   cursor 6 4 ; echo "E-Mail        : "
   cursor 7 4 ; echo "Domain Prefix : "
   cursor 8 4 ; echo "Domain Suffix : "
   cursor 12 4 ; echo "Add another? (y)es or (q)uit"

   cursor 4 22; read username
   if [ "$username" = "q" ]
   then 
      clear ; exit
   fi
# Read input
# If it is equeal to "-" go one line up
   cursor 5 22 ; read password
   if [ "$password" = "q" ]
   then 
      clear ; exit
   fi
   while [ "$password" = "-" ]
   do
     cursor 4 22 ; echo "                     "
     cursor 4 22 ; read username
     if [ "$username" = "q" ]
     then
        clear ; exit
     fi
     cursor 5 22 ; read password
   done

   
# Read input
# If it is equeal to "-" go one line up
   cursor 6 22 ; read email
   if [ "$email" = "q" ]
   then 
      clear ; exit
   fi
   while [ "$email" = "-" ]
   do
     cursor 5 22 ; echo "                     "
     cursor 5 22 ; read password
     if [ "$password" = "q" ]
     then
        clear ; exit
     fi
     cursor 6 22 ; read email

...........................
   done   #check if username is black before we create account
   if [ "$username" != "" ]
   then
...........................
   fi

   cursor 12 33 ; read looptest
   if [ "$looptest" = "q" ]
   then
       exit
   fi
done

anonymous
()

А ты заметил как этот сайт называется....

Ruwa
()

хм, а у меня этот ключик и в линухе не работает :-((( за то можно так :-)) [root@gate]# for i in `ls /home` > do > du -sk /home/$i > done 307 /home/alex ...

:-))

anonymous
()

упс... после `ls /home`, do, /$i, done давить ентер

anonymous
()

Дело то хорошее, только не в форуме. Надо что-то другое. А вот мой скрипт, точнее просто идея. Когда приходиться лазить по куче машин, то не всегда удобно использовать голые telnet или ssh команды. Обычно удобнее открыть новое окно и на всякий случай подписать его. Тупо ? Конечно ! Но удобно. Для telnet я назвал командочку xtel, для ssh - xss.

konsole --icon /usr/share/icons/mini/terminals_section.png -T $1 -e telnet $1 &

Набираем xtel TO.HOST и все...

Как видно, я использую KDE-шный терминал. Для других терминалов все то же, только ключик -T может на --title измениться. К сожалению я не написал коментарии к скрипту, если у кого возникнут трудности замены telnet на ssh, пишите в форум, попробую помочь .;-)

eda
()

Блин, ну где же maxcom! Или эта идея сейчас загнется, или надо раздел делать.

tyro ★★
()

to tyro: maxcom треды не читает :)

Dimagog
()

Извините, plz. Но похоже больше спросить не у кого.
Slackware 8.1.
Сделал скрипт запуска postgresql:
/etc/rc.d/rc.pgsql запускаю его из rc.local.

- Если войти в систему, как root или postgres
и запустить rc.local postgres запускается, server.log создает.
- Если запускать при запуске системы, то пишет запустился на экран,
но в процессах его нет и server.log нет
- Если запускать при запуске системы и не ставить на конце &, то вижу запустился postgresql, но до login не добраться - он дальше не дает грузиться системе.

#!/bin/sh
#
# Start the Postgresql server
#

export LD_LIBRARY_PATH=/opt/pgsql/lib ;
export PGDATA=/opt/pgsql/data ;
export PGDATASTYLE=German ;

PATH=/opt/pgsql/bin:$PATH ;
MANPATH=/opt/pgsql/man:$MANPATH ;

su postgres -c '/opt/pgsql/bin/postmaster > /opt/pgsql/server.log 2>&1 &'

tromb

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

А слабО в исходниках постгреса найти init- скрипт и его использовать?

глянь: <PG_SOURCES_DIR>/contrib/start-scripts/linux, может он спасет отца русской демократии?

Правда этот скрипт SysV-style, мож для шлака (там bsd-style кажется?) не подойдет но даст пищу для размышлений.

Удачи

NewComer
()

для запуска всяких серверов БД делай свой командный файл в него пихай все переменные окружения и всё что нужно для данной БД

и вызывай этот файлик на исполнение с помощью su под нужным пользователем

я так и с постгресом с ораклём так поступаю вернее у меня их как правило два один dbstart другой dbshut

в них я ещё пишу вызов всяких plsql для запуска скриптов на запуск и шутдаун сервера

в документации по постгресу есть описание как запущать сервер вот это и помести в этот файлик

anonymous
()

Dimagog, я запостил обращение к maxcom'у в раздел форума по улучшениям/предложениям на ЛОР'е. Это он должен читать! (наверное)

tyro ★★
()

tyro заглохнет твоя идея. чтобы грамотно скрипты класть надо второй freshmeat поднимать, а это нафик не надо никому, а особенно maxcom :) а постить скрипты в поделки типа форума совсем не функционально... ни классификации, ни поиска. короче, тут консерватизм правит, добавить мелкую фичку к форуму и то по полгода уходит, а ты целый engine к сайту прикрутить требуешь :)) нафик-нафик :)

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

>чтобы грамотно скрипты класть надо второй freshmeat поднимать

не надо гнать пурги - если без фанатизма, то на пару дней работы,
особенно учитывая что хорошая база есть и работает.


anonymous
()

Для tromb'a:

У тебя юзер в су не передается нормально, см. ниже (hint:
все дело в минусе после su).

#!/bin/sh
#
# /etc/rc.d/postgresql: start/stop postgresql daemon
#
LOGFILE=/var/pgsql/pgsql.log

if [ "$1" = "start" ]; then
su - postgres -c "/usr/bin/postmaster -D /var/pgsql/data >$LOGFILE 2>&1 &"

elif [ "$1" = "stop" ]; then
killall -q postmaster
else
echo "usage: $0 start|stop"
fi

# End of file

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

Ибо тут на форуме большинство поливает де$#%мом других и кричит "консоль и vi форева", а не предлагают помощь.

я правда думаю, что админы из них никакие или они откровенные моральные уроды. кроме тупых возгласов никаких больше аргументов

Nickolay

anonymous
()

Идея то не моя, но похоже заглохнет, это верно :(

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

То, что еще системы есть - знаю! Но скрипты должны быть разными. И не виноват я, что под другими Юниксами такая функциональность слабая. И во Фряхе это работать не будет. Но это - самый простой путь для новичка узнать размер каталога в Linux

Skull ★★★★★
()

2CrownRU : твой первый скрипт (df) - к сожадению нифига не работает (RH 7.2) - правда пришлось его малость подправить - что-бы ерроров не было

2anonymous (*) (2002-07-11 22:22:15.118): удобно и лаконично!

2eda : попробовал , запускает консоль с названием .... И ТУТ-ЖЕ ее тушит - а так идея хорошая :)

По-поводу второго фрешмита или SF.net - у меня была такая идея и даже появилось что-то вроде болванки под сайтик - но к сожалению из-за падения винта умерла база, а времени на восстановление нету :(((

Если у кого-нть есть идей(кроме флейма и 3.14здежа) то неплохо-бы пообщаться на эту тему - delta9@capslock.ru

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