Hirdetés

2024. április 26., péntek

Gyorskeresés

Hozzászólások

(#1601) persnongrat válasza PistiSan (#1600) üzenetére


persnongrat
tag

Az nálam nem számít "éles"-nek. :)
(az a munkahelyi, tényleges szolgáltatást nyújtó gépek jelzője)

(#1602) #68216320


#68216320
törölt tag

Urak, miért lehet, hogy nem fut az alábbi szkript?

#!/bin/bash
while [ 1 ]
do
curl google.com
sleep 20
done

chmod-al futásjog beállítva. Ha terminálba bemásolom, ott fut. sh-ként viszont nem. Mintha bele sem kezdene a ciklusba.

(#1603) persnongrat válasza #68216320 (#1602) üzenetére


persnongrat
tag

Hová tetted? Nem lehet, hogy esetleg a /tmp-be (ahogy egy időben nekem is szokásom volt az egyébként szemétnek szánt, scriptekkel) ?
A script nem fut vagy a curl nem ad vissza semmit és végtelen ciklusban áll az egész?

Ha ugyanitt leteszel egy végrehajtható x.sh-t, amiben ennyi van:
#!/bin/bash
echo hello

Ez lefut?
Valami hibaüzenet?

(#1604) #68216320 válasza persnongrat (#1603) üzenetére


#68216320
törölt tag

A user home-ban van. Simán az echo működik. Nem lép be a ciklusba, mert, ha a while do-ba írom bele az echo-t akkor nem ír ki semmit.

[ Szerkesztve ]

(#1605) buherton válasza #68216320 (#1602) üzenetére


buherton
őstag

(#1603) persnongrat: Minden programnak kötelező valamilyen értékkel visszatérni. Ha mással nem, akkor 0-val. A fordítók is szólnak ezért, igaz csak warning formában.

(#1607) persnongrat: Jaja, mert más volt a gond, mint amire gondoltam :D , és te indultál el jó felé.

[ Szerkesztve ]

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#1606) persnongrat válasza #68216320 (#1604) üzenetére


persnongrat
tag

Egy .tar-ba összecsomagolva fel tudnád tenni valahova?
Csak arra tudok tippelni, hogy valami nem odavaló karakter kerülhetett a sorok közé.
Én kimásoltam innen, nekem működik.

(#1607) persnongrat válasza buherton (#1605) üzenetére


persnongrat
tag

Na tessék... mire válaszoltam, törölte azt, amire válaszoltam. :)

[ Szerkesztve ]

(#1608) #68216320 válasza persnongrat (#1606) üzenetére


#68216320
törölt tag

Igazad volt. Másoltam és belekerülhetett valami karakter. Beírtam kézzel és működik :) Köszönöm a tippet.

(#1609) persnongrat válasza #68216320 (#1608) üzenetére


persnongrat
tag

Egyébként a korábbi, /tmp-s megjegyzésemre visszatérve: oda akartam kilyukadni, hogy normálisan beállított gépeken pl. a /tmp önálló fájlrendszer és "noexec" opcióval van mountolva, nehogy véletlenül onnan futtasson valaki valami illetlen dolgot. :)
Egyszer szívtam meg, elég mély nyomot hagyott. :DD

(#1610) Pxs


Pxs
aktív tag

Sziasztok !
Linux/BASH script írásban jártasak számára egy kérdés:
Paraméterezhető scriptet kellene írnom, ilyesmi formában:
<scriptnév> -a -b -c -d -e ....
Hogyan tudnám megoldani, hogy pl. a "-a" utáni paramétert (pl. számot) ne 2. számúnak vegye, hanem elsőnek ? (Mert ilyenkor az "-a"-t veszi elsőnek alapból).
Illetve, hogyan passzolok át egy ilyen paramétert a scriptnek értelmezésre ?: pl. -c 2500 (tehát értelmezze azt, hogy a "-c" benne van a param listában és az utána lévő értéket is)
A paraméterek sorrendje mindig fix ? (Ez azért is fontos, mert ki kell íratnom hiányos/nem megfelelő paraméter megadás esetén a usage-et)
Valaki itt említette a getopts-ot...az nem szúrja el a sorrendet ?
Régebben foglalkoztam már ezzel, de évek teltek el azóta...nem ugrik be és amit eddig neten találtam, azon se leltem meg a pontos választ. Ez egy határidős dolog, 2 napom maradt rá és ez csak a jéghegy csúcsa belőle.
Remélem, érthetően fogalmaztam Előre is köszi mindenkinek !

'The key to success is just that - standing up one time more than falling.' Regisztrált: 2005-09-29 21:12 - fanatikus tag

(#1611) buherton válasza Pxs (#1610) üzenetére


buherton
őstag

Íme:

$ ./pelda.sh -a10

TEMP=$(getopt -o a:: -- "$@")
eval set -- "$TEMP"
while true ; do
case "$1" in
-a)
case "$2" in
"") echo "Option a, no argument"; shift 2 ;;
*) echo "Option a, argument $2"; shift 2;;
esac ;;
--) shift; break ;;
*) echo "Internal error!"; exit 1 ;;
esac
done

Forrás: [link]

További jó példák és leírások: [link], [link]

[ Szerkesztve ]

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#1612) Pxs válasza buherton (#1611) üzenetére


Pxs
aktív tag

Köszönöm, közben sikerült valamit alkotnom getopts-szal, legalábbis a paramétereket átveszi.
Switch-et nem használtam, azt muszáj ?
Az alábbi script jött össze (a lényege, hogy adott paraméterekkel dumpokat készítsen TCP dumppal).
Nagyon sürgős lenne vele elkészülnöm és két pontban totál elakadtam.

Az egyik: a $WORKDIR változó mindig üresen marad, hiába adom meg az indításnál a paraméterét (ahová mentse a dump file-okat)

A másik: a tcpdump parancs (a script forráskód vége felé) folyton beleköt valamibe, próbáltam betartani a gyári paraméter sorrendjét (lényeges-e ez egyáltalán ?), de rendszerint ilyesmit kapok:

-G: invalid packet count (ezt a -c opció után, azaz legjobb meglátásom szerint a -c után kapott számot és az azt követő -G kapcsolót egy paraméternek akarja venni és mivel a "-G" nem szám, hibát dob...)

Valaki le tudná nekem ellenőrízni és segíteni/kijavítani ?
Ezer hála előre is ! :)

A script:

#!/bin/bash

while getopts i:r:w:m: option

do

case "${option} "
in

i) INTERFACE=${OPTARG};; #halozati interface valasztas
r) REPEAT_TIME=${OPTARG};; #milyen gyakran kezdjen uj file-t
w) WORKDIR=${OPTARG};; #hova mentse a dumpfile-okat
m) MAXFILES=${OPTARG};; #maximum hany dump file-t tartson meg

esac

echo "Aktualis param: $option "--" $OPTARG" #debughoz

done

echo "Working directory: $WORKDIR" #ez valamiert mindig ures marad ! :(

sudo tcpdump -i $INTERFACE -G $REPEAT_TIME -c $MAXFILES -w "/trace_%Y-%m-%d_%H:%M:%S.pcap"

exit 0

'The key to success is just that - standing up one time more than falling.' Regisztrált: 2005-09-29 21:12 - fanatikus tag

(#1613) Pxs válasza Pxs (#1612) üzenetére


Pxs
aktív tag

Közben felfedeztem, hogy egyetlen változóban sem tárolja el az értéket...azaz mégsem veszi át a paramétereket értékeit :Y

i) INTERFACE=${OPTARG};; #halozati interface valasztas
r) REPEAT_TIME=${OPTARG};; #milyen gyakran kezdjen uj file-t
w) WORKDIR=${OPTARG};; #hova mentse a dumpfile-okat
m) MAXFILES=${OPTARG};; #maximum hany dump file-t tartson meg

Ezek mind tök üresek, csak a while loop-ban tudom kiíratni az értékeiket. Mi lenne a megoldás ? :S

'The key to success is just that - standing up one time more than falling.' Regisztrált: 2005-09-29 21:12 - fanatikus tag

(#1614) Pxs válasza Pxs (#1613) üzenetére


Pxs
aktív tag

Eszembe jutott, hogy a while loop gyakorlatilag egy subshell, azért nem látja a változókat.
Áthidaltam a dolgot azzal, hogy a while loop-ban minden egyes iterációnál egy temp file-ba íratom sorrendben a script paramétereinek értékeit, aztán sed-del beolvastatom a loop-on kívül, így működik a dolog. :)

Nem csoda, hogy a tcpdump behülyült..nem is kapott semmilyen értékeket paramétereknek.

Tanulság: éjjel 2-kor már ne írjunk scriptet, ha nem munkahelyen vagyunk. :D

Ugyanakkor, ha valaki megírná, hogyan érhetném el a változókat a while loop-on kívül is, azt megköszönném. Export/declare nem oldja meg a dolgot..

[ Szerkesztve ]

'The key to success is just that - standing up one time more than falling.' Regisztrált: 2005-09-29 21:12 - fanatikus tag

(#1615) Jester01 válasza Pxs (#1614) üzenetére


Jester01
veterán

Nem, a while nem subshell.
A probléma ott van, hogy a case "${option} " sorban valamiért direkt teszel egy szóközt amit nem veszel aztán figyelembe a mintákban. Vagy töröld innen, vagy add hozzá a mintákhoz is, úgy szépen működik.

Jester

(#1616) Pxs válasza Jester01 (#1615) üzenetére


Pxs
aktív tag

Basszus, akkor hiába küzdöttem én itt exporttal :)

Az a szóköz nekem is gyanús volt 1 kis időre..kitörlöm és kipróbálom úgy, köszi.
Egyelőre a temp file-os megoldás szépen megy, de az mégsem az igazi.

Üdv

'The key to success is just that - standing up one time more than falling.' Regisztrált: 2005-09-29 21:12 - fanatikus tag

(#1617) Pxs


Pxs
aktív tag

Sikerült megoldani minden akadályt és ez lett a vége...
Egy tcpdump-ot használó script, amelyik egy rakás paramétert kezel (beállítható pl. hogy meddig fusson, mekkora helyet harapjon ki max. a diskből és egyebek). Ez nekem házi feladat volt és kb. 5 év szünet után fogtam hozzá újra a shell programozáshoz, úgyhogy örülök, hogy végre elkészült. :D
Hanem szerintem elég bő lére lett eresztve, valaki adna esetleg tippeket, melyik részein/hogyan lenne érdemes tömöríteni rajta ?

Példa parancssor kitöltött paraméterekkel, ha valaki kipróbálná:

./gkdump -i eth0 -r 1 -M 10 -w $HOME -T 30 -U 40 -C 1 -P 80 -b 100 -X -D 10 -m 600

És a script (sorry, nem túl rövid, a tördelés meg várhatóan viccesen jön ki majd):

Üdv

#################################################################

#!/bin/bash
#GKDumpV1 by Gabor Kiss, 2013

echo

if [[ $# -eq 0 ]]; then

#kapott-e parametereket a script
echo "TCP packet dump script by Gabor Kiss, 2013"
echo "Requires root or superuser privileges to work !"
echo
echo "Required parameters: "
echo
echo '-i [interface] -r [rotate time] -M [maximum number of files] -w [work directory]'
echo '-T [running time] -U [maximum allowed disk usage] -C [1 or any]: compress mode on/off '
echo
echo 'Optional/special parameters: '
echo
echo '-P [port number] -X: delete logfile -S: silent mode'
echo '-D [how many old dumpfiles to delete if disk space insufficient]'
echo '-m [packet count to capture] -b [if this disk size is exceeded, stop at start] '
echo '-I: list available network interfaces and exit -H: help'
echo
echo 'No parameters given ! Exiting...'
echo 'Use -H option for help.'
echo
exit 1
fi

if [[ $# -lt 12 && $# -gt 1 ]]; then

#minden kotelezo parameter megvan ?
echo "Wrong number of parameters, exiting !"
echo '7 mandatory parameters are required or use -H for list.'
echo
exit 1
fi

while getopts i:r:M:w:T:U:C:SP:XD:m:b:HI option #parameterek atadasa
do

case "${option}"
in

i) INTERFACE=${OPTARG};; #halozati interface valasztas
r) REPEAT_TIME=${OPTARG};; #milyen gyakran rotalja a file-okat
M) MAXFILES=${OPTARG};; #maximum hany file-t mentsen le/tartson
w) WORKDIR=${OPTARG};; #hova mentse a dumpfile-okat
T) RUNTIME=${OPTARG};; #meddig fusson a script
U) MAX_USED=${OPTARG};; #mennyi szabad hely szazaleknal alljon le
C) COMPRESS=${OPTARG};; #BZIP2 compress mode, kulon kezelje !

S) SILENT_MODE=1;; #silent mode, csak logfile-ba iras
P) PORTNUM=${OPTARG};; #port number a dump-hoz,

kulon kezelje
X) PURGE_LOG=1;; #logfile torlese
D) GETSPACE=${OPTARG};; #ennyi dumpfile-t toroljon, ha nincs eleg hely
m) MAXPACKETS=${OPTARG};; #maximum hany packetet mentsen le
b) DISK_EXCEED=${OPTARG};; #ha ekkora vagy nagyobb a disk usage,

alljon le a startnal
I) AVAILABLE_IFACES=1;; #elerheto halozati interface-ek

H) HELP=1;; #csak

hasznalati info kiiratasa

####

esac
done

if [[ -z $MAXPACKETS ]]; then #default 100.000 packet capture maximum, ha nincs

megadva a -m paraméter
MAXPACKETS=100000
fi

if [[ -z $HELP ]]; then #ellenorizni, a help funkcio lett-e csak meghivva

DISK_USAGE=$(df $WORKDIR|tail -1|awk {'print $5'}|awk -F"%" {'print $1'} )
if [[ $DISK_USAGE -ge $DISK_EXCEED ]]; then
echo "Current disk usage is $DISK_USAGE %, more than allowed $DISK_EXCEED %. Exiting.."
echo
exit 1
fi

fi

if [[ $AVAILABLE_IFACES -gt 0 ]] ; then #elerheto halozati

interface-ek kiiratasa es kilepes
echo
echo "Available network interfaces for listening: "
echo
ifconfig -s|grep -vi "iface"|awk {'print $1'}
echo
exit 0
fi

if [[ PURGE_LOG -gt 0 ]]; then #logfile torlese
rm -f dumped.log
echo
echo 'Logfile dumped.log deleted.'
echo
fi

if [[ -z $SILENT_MODE && $HELP -eq 1 ]]; then #HELP mode
echo
echo "TCP packet dump script by Gabor Kiss, 2013"
echo "Requires root or superuser privileges to work !"
echo
echo 'Required parameters & functions: '
echo
echo '-i: which network interface to use'
echo '-r: how often to rotate the dump files (in seconds, greater than zero)'
echo '-M: maximum number of PCAP dump files to keep (greater than zero)'
echo '-w: working directory to save dump files into'
echo '-T: maximum allowed runtime in seconds (greater than zero)'
echo '-U: do not start operation/stop when directory FS usage hits this value (greater than zero)'
echo '-C: use BZIP2 compression (1=enabled, any other value=disabled)'
echo
echo "Optional parameters & functions: "
echo
echo '-S: silent mode, do not write anything on screen, write results only to logfile: dumped.log'
echo '-P: listen on this port number (greater than zero)'
echo '-X: delete existing logfile'
echo '-D: delete this many old dump files, if there is insufficient space on startup (greater than zero)'
echo '-m: maximum number of packets to capture'
echo '-b: if current disk usage is equal or greater than this, stop the script after starting'
echo '-H: display this help message'
echo
exit 0
fi

if [[ $SILENT_MODE -eq 1 ]] ; then #silent

mode bekapcsolasa es logolas (hozzafuzes a loghoz)
logfile=dumped.log
exec >> $logfile 2>&1
fi

if [[ SILENT_MODE -eq 1 ]]; then

#logfile fejlec datumozasa silent mode eseten
echo
echo '#############################'
date
echo '#############################'
echo
fi

if [[ $REPEAT_TIME -eq 0 || $MAXFILES -eq 0 || $RUNTIME -eq 0 || $MAX_USED -eq 0 ]]; then #kotelezo numerikus

parameter ne legyen 0

echo
echo "One or more numeric parameters with zero value ! Exiting..."
echo
exit 1
fi

echo "TCP packet dump script by Gabor Kiss, 2013"
echo "Requires root or superuser privileges to work."

DISK_USAGE=$(df $WORKDIR|tail -1|awk {'print $5'}|awk -F"%" {'print $1'} ) #mentes helyen mennyi hely

van az FS-ben

if [[ $DISK_USAGE -gt $MAX_USED ]] ; then #ne

induljon el, ha x% felett van a filesystem kihasznaltsaga
echo
echo "Disk usage in working directory is $DISK_USAGE %. Maximum allowed is $MAX_USED %."

if [[ $GETSPACE -gt 0 ]]; then

ITERATION=0
echo "Trying to get enough disk space. Deleting $GETSPACE old dumpfiles..."

while [[ $ITERATION -le $GETSPACE ]]; do

let ITERATION++
sudo rm -f $(ls -tc $WORKDIR/*pcap* 2>/dev/null|awk {'print $1'}|tail -1)
done

DISK_USAGE=$(df $WORKDIR|tail -1|awk {'print $5'}|awk -F"%" {'print $1'} )

echo "Completed. New disk usage is $DISK_USAGE%."

if [[ $DISK_USAGE -gt $MAX_USED ]]; then

echo "Could not free enough disk space. Exiting..."
echo
exit 1

fi

fi

if [[ -z $GETSPACE ]]; then

#ha nincs megadva, hany file-t toroljon hely felszabaditasra, kilepes
echo 'No -D value was given. Exiting...'
echo
exit 1
fi

else

echo
echo "Disk usage in working directory is $DISK_USAGE %. Maximum allowed is $MAX_USED %. Proceeding.." #eleg

hely eseten tovabb
fi

echo
echo "Running tcpdump on network interface: $INTERFACE. Rotating dumpfiles every: $REPEAT_TIME second." #

parameterek osszegzese
echo "Maximum dump files to keep: $MAXFILES. Allowed runtime: $RUNTIME seconds."

if [[ $MAXPACKETS -gt 0 ]]; then
echo "Maximum number of packets to capture: $MAXPACKETS"

fi

if [[ $PORTNUM -gt 0 ]]; then
echo "Listening on port $PORTNUM."
fi
if [[ $COMPRESS -eq 1 ]]; then
echo "Using BZIP2 compression on dump files."
else
echo "Not using compression on dump files."
fi
echo "Saving files in directory $WORKDIR."
echo "PLEASE WAIT..."

if [[ ! -d "$WORKDIR" ]]; then #ha nem letezik a mentesekhez konyvtar, hozza letre
sudo mkdir $WORKDIR
fi

echo

if [[ $COMPRESS -gt 0 ]]; then #BZIP2 tomorites hasznalata

if [[ -z $PORTNUM ]]; then

sudo tcpdump -i $INTERFACE -G $REPEAT_TIME -W $MAXFILES -c $MAXPACKETS -z bzip2 -w

"$WORKDIR/tcpdump_%Y-%m-%d_%H:%M:%S.pcap" &

else

sudo tcpdump port $PORTNUM -i $INTERFACE -G $REPEAT_TIME -W $MAXFILES -c $MAXPACKETS -z bzip2 -w

"$WORKDIR/tcpdump_%Y-%m-%d_%H:%M:%S.pcap" &

fi

else

if [[ $PORTNUM -gt 0 ]]; then

sudo tcpdump port $PORTNUM -i $INTERFACE -G $REPEAT_TIME -W $MAXFILES -c $MAXPACKETS -w

"$WORKDIR/tcpdump_%Y-%m-%d_%H:%M:%S.pcap" 1>/dev/null &
fi

if [[ -z $PORTNUM ]]; then
sudo tcpdump -i $INTERFACE -G $REPEAT_TIME -W $MAXFILES -c $MAXPACKETS -w "$WORKDIR/tcpdump_%Y-

%m-%d_%H:%M:%S.pcap" 1>/dev/null &
fi

fi

TCPD_BACKGROUND=$!

#hatterben futo tcpdump PID megjegyzese

COUNTER=0

#ellenorzo rutin az aktualis disk space-hez es "visszaszamlalo"
KILLED=0
until [[ $COUNTER -eq $RUNTIME ]]; do

DISK_USAGE=$(df $WORKDIR|tail -1|awk {'print $5'}|awk -F"%" {'print $1'})
if [[ $DISK_USAGE -ge $MAX_USED ]]; then
RED_FLAG=1
else
RED_FLAG=0
fi

if [[ RED_FLAG -gt 0 ]] ; then
sudo kill $TCPD_BACKGROUND
echo
echo '*** Disk space exceeded ! Killed tcpdump process !***'
echo "Runtime was: $COUNTER seconds."
echo
KILLED=1
break
fi

sleep 1
let COUNTER++

if [[ KILLED -gt 0 ]]; then
break
fi

done

if [[ RED_FLAG -eq 0 ]]; then
sudo kill $TCPD_BACKGROUND
echo
echo '*** Tcpdump background process was killed. Disk space OK. ***'
echo "Runtime was: $RUNTIME seconds."
echo
fi

###

CURRENT_FILES=$(sudo ls -l $WORKDIR/*pcap* 2>/dev/null|wc -l) #file

darabszamot ellenorzo es takarito rutin
TOTAL=0

if [[ $CURRENT_FILES -gt $MAXFILES ]]; then

echo
echo "There are $CURRENT_FILES dumpfiles in the working directory of maximum $MAXFILES, cleaning old files.."
DIFFERENCE=$CURRENT_FILES-$MAXFILES

while [ $CURRENT_FILES -gt $MAXFILES ]; do
CURRENT_FILES=$(sudo ls -l $WORKDIR/*pcap*|wc -l) 2>/dev/null
sudo rm -f $(ls -tc $WORKDIR/*pcap*|awk {'print $1'}|tail -1) 2>/dev/null #legregebbi file-ok torlese
let TOTAL++

if [[ $DIFFERENCE -eq $TOTAL ]]; then
break
fi

done

else

echo
echo "There are $CURRENT_FILES dumpfiles in the working directory, cleaning is NOT necessary."
echo "Operation summary: "

fi

echo

#muveletek osszegzese
TOTAL_DUMP=$(ls -l $WORKDIR/*pcap*|wc -l)
echo "$TOTAL old files were deleted."
echo "There are a total of $TOTAL_DUMP dumpfiles available."
NEWEST=$(ls -tc $WORKDIR/*pcap*|awk {'print $1'}|head -1)
echo "Newest file is: $NEWEST"
OLDEST=$(ls -tc $WORKDIR/*pcap*|awk {'print $1'}|tail -1)
echo "Oldest file is: $OLDEST"

echo
echo "Operation complete. Bye. "
echo

if [[ $SILENT_MODE -eq 1 ]]; then

#silent mode veget jelzo uzenet es stdout visszairanyitasa a terminalra
exec >/dev/tty
echo "Completed without severe errors. See logfile $HOME/dumped.log for results."
echo
fi

exit 0

'The key to success is just that - standing up one time more than falling.' Regisztrált: 2005-09-29 21:12 - fanatikus tag

(#1618) sto1911 válasza Pxs (#1617) üzenetére


sto1911
veterán

A smileyk se rosszak :D Egyebkent itt van programkod tag, ill. [link]

(#1619) McSzaby


McSzaby
őstag

Sziasztok,

Most ismerkedem igazából csak a scripteléssel, de egy kérdésre nem találok sehol sem választ.

Szóval, egy if függvényben hogy tudom ellenőrizni egy processz futását? Én így oldottam meg, de szerintem ennél van szebb megoldás is.

if echo `ps -ef |grep $PROCESS | grep -v grep`
then .....

gondoltam rá, hogy ezt elintézem így,

$PROCESS2= echo `ps -ef |grep $PROCESS | grep -v grep`
if [ $PROCESS2 -gt 0] ...

de gyanítom ez így ebben a formában elég nagy bullshit, ugye?!..

#ThankYouSirAlex #ThankYouLouis

(#1620) persnongrat válasza McSzaby (#1619) üzenetére


persnongrat
tag

Az echo eleve nem kell bele, de...
Ilyesmit valahogy úgy csinálnék, hogy

ps -ef | grep -q 'keresett minta' && ( parancs1 ; parancs2 )

Van még pár variáció, ez csak egy, ami hirtelen eszembe jutott.

[ Szerkesztve ]

(#1621) Jester01


Jester01
veterán

Mellesleg van rá céleszköz, úgy hívják, pidof (vagy pgrep)

Jester

(#1622) rt06


rt06
veterán

hi

ennek kapcsan kerdeznem, hogy:
- miert?
- hol van meg felesleges idezojel, s miert?
- hova kellene meg esetleg idezojel, s miert?

[ Szerkesztve ]

Politikailag korrekt, valamint munkahely- és gyermekbarát aláírás, amiben egyáltalán nincsen p*na.

(#1623) Jester01 válasza rt06 (#1622) üzenetére


Jester01
veterán

Ha a ${GS_OPTS} idézőjelben van, akkor az egyetlen argumentumként lesz átadva ami valószínűleg felkészületlenül éri szegény programot.

Jester

(#1624) rt06 válasza Jester01 (#1623) üzenetére


rt06
veterán

koszonom, igy mar tiszta(bb)

Politikailag korrekt, valamint munkahely- és gyermekbarát aláírás, amiben egyáltalán nincsen p*na.

(#1625) cappa72


cappa72
nagyúr

Sziasztok!

Látszólag egyszerűnek tűnő problémába ütköztem.
Életem első sed -i parancsával gyűlt meg a bajom.
Szeretnék verziókövetést végrehajtani egy fájlon belül.
Eddig nem lenne gond, mert
sed -i "s/doksi-v-00/doksi-v-01/" version.txt
még ok.
Viszont nem biztos, hogy a -00 verziószámot a 01 követi, hanem - kihagyva néhány verziót - a -04.
Na és itt akadtam el... Tehát akárhányadik verziót -04-re varázsolni.
Gondolkodtam azon, hogy hogyan lehetne a v- után ??-t használni, hátha a két "akátmilyen" karakter cserélhető lesz, de ez így saját kútfőből nem megy.
Próbáltam sed -i "s/v-\?/v-04/" version.txt írni, de akkor beszúrja a 04-et a 00 elé.

Köszönöm.

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#1626) doc válasza cappa72 (#1625) üzenetére


doc
nagyúr

tobb variacio is van
hasznalhatod pl. a "szamjegy" jelolest: \d, vagyis ket szamjegynel: \d\d
vagy mondhatod azt is hogy "barmilyen karakter" ami a pont, vagyis ket akarmi: ..
de vannak meg variaciok :)

mod: ugy tunik a \d nem megy sed-ben, akkor marad a "bobeszedubb" megoldas ha szamjegyre akarsz keresni: [0-9]

[ Szerkesztve ]

(#1627) cappa72 válasza doc (#1626) üzenetére


cappa72
nagyúr

Köszönöm!
A két pöttyös verzió beváltotta a hozzá fűzött reményeket.
Van egyébként olyan karakter, mint a * ? Tehát pl. a v-.. helyett v-* így bármi áll a v- mögött, azt a 04-re cseréli le?

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#1628) persnongrat válasza cappa72 (#1627) üzenetére


persnongrat
tag

A v-* a v mögött álló 0 vagy több - karaktert cseréli le. :)
Keress rá a regular expression kifejezésre a gúglin!

(#1629) cappa72 válasza persnongrat (#1628) üzenetére


cappa72
nagyúr

Erre akadtam rá. Remélem jó.

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#1630) prucam


prucam
tag

Sziasztok,

van egy fájlom aminek a sorai elé szeretnénk beilleszteni egy üres oszlopot (pl. 1-33-ig) v. 4 tabulátor szélesség.

Hogyan lehet megcsinálni? Légyszí segítsetek. Köszi

[ Szerkesztve ]

(#1631) Siriusb válasza prucam (#1630) üzenetére


Siriusb
veterán

Szia.
Pl. sed

(#1632) prucam válasza Siriusb (#1631) üzenetére


prucam
tag

köszi a tippet. Nekem így sikerült:

sed -e 's/^ */\t\t\t\t/' abc > abc_2

(#1633) bobsys


bobsys
addikt

VBS-ben ez a sor csinal valamit?

'shell.run "\\servername\NETLOGON\application.exe"

A ' a sor legelejen nem azt jelenti, hogy komment igy nem fog futni az application.exe?

Enterprise Admin? Kirk kapitany leszel? - Ne törődjél semmivel, egyél zsömlét kiflivel

(#1634) szlovibuki


szlovibuki
tag

Sziasztok! Van egy shell hozzáférésem, amin irssit futtatok. Az irrsihez van egy scriptem, amit szeretnék automatizálni, hogy előre beállított időben (pl. délelőtt 11 órakor, minden nap) induljon el és ne nekem kelljen paranccsal elindítani. Ebben tud valaki segíteni?

(#1635) Jester01 válasza szlovibuki (#1634) üzenetére


Jester01
veterán

Ha van jogod cron-t használni akkor azzal meg tudod csinálni.

Jester

(#1636) McSzaby


McSzaby
őstag

Sziasztok,

Ismerkedőben vagyok a scripteléssel és az lenne a kérdésem, hogy van-e valamilyen módszer/megoldás arra, hogy mondjuk egy tar parancsot egy amolyan szokványos 0-100% követő "folyamatábrába" szúrjak bele? whiptail-lel próbálkoztam, de valahogy nem akart összejönne...

#ThankYouSirAlex #ThankYouLouis

(#1637) MacCaine válasza McSzaby (#1636) üzenetére


MacCaine
őstag

(#1638) prucam


prucam
tag

Sziasztok,

egy fájlban szeretném megtudni az üres soroknak a sorszámát. Ezt hogyan lehet?

üdv

(#1639) Jester01 válasza prucam (#1638) üzenetére


Jester01
veterán

Például grep -vn . file (a pont is bele tartozik)

[ Szerkesztve ]

Jester

(#1640) LógaGéza


LógaGéza
addikt

Üdv!
Lenne két gyors kérdésem.
1.: A napokban teljesen automatizálásra állítottam be egy gépet. Lényeg, hogy fut rajta egy Impress vetítés, egy osd_clock óra, és egy netrádió mplayerrel.
Ez futtatja:

/opt/libreoffice4.1/program/soffice.bin --impress --nologo --norestore -show /home/user/vetites/vetites.odp | osd_clock -c white -s 0 -F '%Y %h %e %T' -f -xos4-terminus-bold-r-normal--40-400-72-72-c-180-iso8859-15 | mplayer http://x.hu/y.mp3 < /dev/null &

Van egy másik szkript, ami cron-ba beállított időközönként lefut, megszakítja ezeknek a futtatását, elindít egy videót, majd ha vége a videónak, akkor újra elindítja a fenti szkriptet. Az ilyen:

killall mplayer | killall osd_clock | killall soffice.bin && mplayer /home/user/adas.avi -fs && sh /home/user/vetites/run.sh

Annyi a problémám ezzel, hogy ha bejön a cron művelet, akkor a leállítás megtörténik, viszont a videó nem indul el, csak ha kézzel kiadom az && utáni parancsot. Mit rontok el?

2.: Ugyanez a gép, ugyanez a rendszer. Rosszalkodik manapság az internet, elmegy - visszajön. Ezt nem szereti az mplayer, ha nincs egy ideig elérés, akkor leáll, és nincs hang. Szeretnék egy olyan szkriptet, ami ellenőrzi, hogy fut-e az mplayer, és ha nem fut, akkor elindítja, ezt is beraknám cron-ba.

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#1641) FishAir


FishAir
senior tag

Sziasztok!

Egy olyan scriptre lenne szükségem, ami egy adott könyvtárból egy másik helyen készít egy átnevezett másolatot úgy, hogy a pontokat lecseréli space-re és az első olyan szó (space-el elválasztott szöveg) utáni részt levágja, amiben szám is van. Példa:
ebből:
jo.reggelt.kivanok.2013.sallang.hablaty.rizsa
ezt:
jo reggelt kivanok 2013

vagy
ebből:
jo.reggelt.kivanok.s20e13.sallang.hablaty.rizsa
ezt:
jo reggelt kivanok s20e13

Köszi előre is.

iDontcare

(#1642) Claude Leon válasza FishAir (#1641) üzenetére


Claude Leon
senior tag

#!/bin/bash
if test -z $2
then
echo "Használata: $0 [honna] [hova]"
exit
fi
if ! test -d $2 && test -a $2
then
echo '"'$2'" nem directory!'
else
if ! test -a $2
then
mkdir $2
fi
ls -a |awk -v sourcedir=$1 -v targetdir=$2 '// { fln=""; n=split($0,array,".");
for (i=1;i<=n;i++) {if (i==n||array[i] ~ /[[:digit:]]/||array[i]=="")
{fln=(fln array[i])} else fln=(fln array[i] " ");
if (array[i] ~ /[[:digit:]]/) break;}
{print "test ! -d " sourcedir "/" $0 " && cp -f " sourcedir "/" $0 " \"" targetdir "/" fln "\"" ;} }'|sh -
fi
exit

De hogy te is dolgozz vele, ha valami szerepel már u.a. néven, gondolkodás nélkül felülírja.

[ Szerkesztve ]

(#1643) pepe006


pepe006
csendes tag

Sziasztok!
Kaptam egy feladatot órán és nem sok ötletem van arra merre is induljak el.
Még csak kezdő vagyok ebben.
Tudnátok nekem segíteni?
Köszi Üdv

Bash script írása, mely tetszőleges paraméterként megadott könyvtár esetében kilistázza azon könyvtárakat, melyekben valahol szerepel olyan .php kiterjesztésű fájl, melyben megtalálható az ’eval’ string (aposztrofok nélkül)!

(#1644) FishAir válasza Claude Leon (#1642) üzenetére


FishAir
senior tag

Tyíha. Nagyon szépen köszönöm. Küzdeni fogok vele még így is szerintem. Úgyhogy lehet, hogy majd keresni foglak, ha nem baj. :)

iDontcare

(#1645) Jester01 válasza FishAir (#1641) üzenetére


Jester01
veterán

$ cat >test.sh
#!/bin/bash
f=${1//./ }
tmp=${f#*[0-9]* }
echo "${f:0:${#f}-${#tmp}}"
$ bash test.sh jo.reggelt.kivanok.2013.sallang.hablaty.rizsa
jo reggelt kivanok 2013
$ bash test.sh jo.reggelt.kivanok.s20e13.sallang.hablaty.rizsa
jo reggelt kivanok s20e13

Mint látható, ez bash specifikus. A másolás része gondolom menni fog.

Jester

(#1646) pepe006 válasza Jester01 (#1645) üzenetére


pepe006
csendes tag

?

[ Szerkesztve ]

(#1647) Claude Leon válasza Jester01 (#1645) üzenetére


Claude Leon
senior tag

Látom, lehet egyszerűbben is :)

(#1648) Jester01 válasza pepe006 (#1643) üzenetére


Jester01
veterán

Nem teljesen tiszta, de valami ilyesmi jó lehet:
for i in $1/*/
do
find "$i" -name '*eval*.php' -type f -printf '%H\n' -quit
done

[ Szerkesztve ]

Jester

(#1649) FishAir válasza Jester01 (#1645) üzenetére


FishAir
senior tag

Köszi. Akkor ezek szerint már csak egy bash kell, mert most ash van és ezt írja ki:
line 4: Illegal number: 45-21

iDontcare

(#1650) Jester01 válasza FishAir (#1649) üzenetére


Jester01
veterán

Esetleg próbáld így: echo "${f:0:$((${#f}-${#tmp}))}"

Jester

Copyright © 2000-2024 PROHARDVER Informatikai Kft.