Hirdetés

2024. április 28., vasárnap

Gyorskeresés

Hozzászólások

(#2701) vargalex válasza tjsz (#2698) üzenetére


vargalex
félisten

Ahogy a kolléga írja. Az első oszlop a DHCP lease lejárta. Elég erőforrás pazarló lenne ezt a file-t minden másodpercben újraírni...
Esetleg saját scriptet használsz (dhcp-script, vagy dhcp-luascript paraméter) és az írja a lease file-t, a dnsmasq-nál pedig a -9, vagy --leasefile-ro kapcsolóval kikapcsolod a lease file írását. Ez utóbbi magyarázná azt is, hogy miért csak egy új IP kéréskor íródik a file...

#2700 tjsz: Milyen paraméterekkel fut a dnsmasq?

[ Szerkesztve ]

Alex

(#2702) tjsz válasza vargalex (#2701) üzenetére


tjsz
senior tag

root@Router:/tmp/home/root# ps|grep dnsmasq
12589 nobody    1172 S    dnsmasq -c 4096 --log-async
31169 root      1380 S    grep dnsmasq

(#2703) tjsz válasza tjsz (#2702) üzenetére


tjsz
senior tag

Ahogy írtam, ez egy FreshTomato firmware

dnsmasq.conf:

pid-file=/var/run/dnsmasq.pid
domain=********
resolv-file=/etc/resolv.dnsmasq
addn-hosts=/etc/dnsmasq
dhcp-hostsfile=/etc/dnsmasq
expand-hosts
min-port=4096
stop-dns-rebind
rebind-localhost-ok
interface=br0
dhcp-range=tag:br0,192.168.1.51,192.168.1.200,255.255.255.0,10080m
dhcp-option=tag:br0,3,192.168.1.254
dhcp-option=tag:br0,44,192.168.1.254
interface=br1
dhcp-range=tag:br1,192.168.2.51,192.168.2.200,255.255.255.0,10080m
dhcp-option=tag:br1,3,192.168.2.254
dhcp-option=tag:br1,44,192.168.2.254
interface=br2
dhcp-range=tag:br2,192.168.3.51,192.168.3.200,255.255.255.0,10080m
dhcp-option=tag:br2,3,192.168.3.254
dhcp-option=tag:br2,44,192.168.3.254
dhcp-lease-max=255
dhcp-option=lan,252,"\n"
dhcp-authoritative
log-facility=/tmp/mnt/Kingston/Log/syslog_dnsmasq
dhcp-ignore=tag:br0,tag:!known
dhcp-ignore=tag:br2,tag:!known
cache-size=0

(#2704) vargalex válasza tjsz (#2703) üzenetére


vargalex
félisten

Ha ilyen a megvalósítás, akkor viszont annyit kell tenned, hogy nem a systime-hoz, hanem a file módosításának időpontjához adod hozzá az első oszlopot.

Alex

(#2705) tjsz válasza vargalex (#2704) üzenetére


tjsz
senior tag

Köszönöm! :R

(#2706) tjsz válasza vargalex (#2704) üzenetére


tjsz
senior tag

+1 kérdés, ha lehet: te hogyan oldanád meg, hogy 1 script egyidejűleg csak 1 példányban induljon el? Ugyanaz a script többféle esemény miatt is elindításra kerülhet pl. WAN oldal up vagy éppen down, napi riport készítés, stb. Valami ideiglenes file létrehozás-törléssel? (és annak ellenőrzésével)

(#2707) vargalex válasza tjsz (#2706) üzenetére


vargalex
félisten

Tipikusan egy PID file létrehozásával szokták ezt megoldani (ami úgy szép, ha valóban a PID-et tartalmazza), amit a script végén törölsz. Induláskor pedig ellenőrzöd, hogy létezik-e és az a PID fut-e valóban (esetleg még azt, hogy valóban a saját scripted-e). Ha létezik a file és a PID is, akkor a scriptnek vége. Ha nem, akkor létrehozod a file-t, beleírva a PID-et és mehet a tényleges feladat végrehajtása. A file-t router esetén vagy külső tárolóra, vagy még inkább ramdrive-ra (tipikusan a /tmp, illetve a /var is ilyen pl. OpenWrt alatt) célszerű létrehozni, nem a véges írást biztosító flash-ra.

[ Szerkesztve ]

Alex

(#2708) tjsz válasza vargalex (#2707) üzenetére


tjsz
senior tag

:R

(#2709) Fecogame


Fecogame
veterán

Szeretném kiíratni az alábbi szöveget (nagyon leegyszerűsített példa), hogy éppen hol tart a folyamat, de nem mindig új sorban, hanem mindig ugyanabba. Hasonlóan, mint egy process bar.

A kódom valahogy így néz ki

for i in {1..10}; do
  sleep 1 && echo -e "Épp itt tartok: $i\nMinden oké."
done

Na most ha így csinálom, 20 sor lesz az output. Azt szeretném, hogy több sort írjon ki, de éppen csak azt, ahol tart (vagyis jelen példában mindig 2 sort jelenít csak meg). Nem tudom hogy keressek rá :F

Valami ilyesmit szeretnék, csak nem egy karaktert kiírni, hanem akár több sort egyszerre.

i=1
sp="/-\|"
echo -n ' '
while true
do
        sleep 0.1
        printf "\b${sp:i++%${#sp}:1}"
done

[ Szerkesztve ]

Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak

(#2710) dabadab válasza Fecogame (#2709) üzenetére


dabadab
titán

Nem véletlen, hogy a nem guis programok progress barja tipikusan egysoros, mivel azt lehet különösebb varázslások nélkül megcsinálni.
Ami kell hozzá, az igazából a \r, ami a sor elejére ugrik, illetve az echohoz egy -n, hogy ne rakjon ki a kiírás végére egy \n-t, szóval ez így működik:

for i in {1..10}; do
sleep 1 && echo -en "\rÉpp itt tartok: $i - minden oké."
done

Ha ennél több kell, akkor igazán jó, kész megoldásról nem tudok shellhez. Van a dialog, ami igazából dialogokat tud kirakni és elég kötött, hogy hogyan néznek ki, annak van egy progressbox típusa.
Vagy nekiállhatsz te saját magad kurzorvezérléssel szenvedni, ami nem lehetetlen, de lehet, hogy annyit nem ér meg az egész.

DRM is theft

(#2711) Fecogame válasza dabadab (#2710) üzenetére


Fecogame
veterán

Köszi szépen, ez így jó megoldásnak tűnik :R

Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak

(#2712) Sonja


Sonja
veterán

Milyen egysoros paranccsal lehetne megoldani egy mappában található fileok átnevezését úgy, hogy minden file bizonyos karakterig változó, de az utolsó 22 karakter ugyan az, és ezt az utolsó 22 karakter "levágva" szeretném átnevezni?!

01 - Valami ez az utolsó rész nem kell.txt
02 - Ez megint más ez az utolsó rész nem kell.txt
03 - Ez pedig hosszabb szöveg ez az utolsó rész nem kell.txt
stb.

Remélem érthető mit szeretnék?! :F :B

[ Szerkesztve ]

Ha csalódni akarsz, bízz az emberekben!

(#2713) BoB válasza Sonja (#2712) üzenetére


BoB
veterán

Ez elég egyszerű. Ha a nemkívánatos string csak egyszer szerepel:

rename 's/eznemkell//' ./*

-n kapcsolóval futtatva nem csinál semmit, csak megmutatja mit csinálna.

[ Szerkesztve ]

You may corrupt the souls of men, but I am steel. I am doom.

(#2714) Sonja válasza BoB (#2713) üzenetére


Sonja
veterán

Hmm... Akár hogy próbálom, szó szerint nem csinál ez a parancs nálam semmit! :(

Ha csalódni akarsz, bízz az emberekben!

(#2715) dabadab válasza Sonja (#2714) üzenetére


dabadab
titán

Az lesz a gond, hogy nem akarod igazán, spirituálisan blokkolod a működését :DDD

Nulladik lépésként nézd meg, hogy egyáltalán tényleg van-e installálva a "rename" és tényleg az-e, amire BoB gondolt.

$ rename -V
/usr/bin/rename using File::Rename version 1.10

Ha ez stimmel, akkor lehet, hogy a filenevekre nem illik valamiért a pattern (mert pl. olyan karakter van benne, amit különleges karakterként kezel, nem literalként).

DRM is theft

(#2716) BoB válasza Sonja (#2714) üzenetére


BoB
veterán

Ne az util-linux-ban lévő rename-et használd, hanem a perl rename-et.

Disztrónként más a csomag és parancs neve. (ezt elfelejtettem, bocsi)
Ubuntu: [link]

[ Szerkesztve ]

You may corrupt the souls of men, but I am steel. I am doom.

(#2717) Sonja


Sonja
veterán

Igen, ez volt a baj. Feltéve Arch-ra a perl-rename csomagot, ezzel már tökéletes! :C Köszönöm! :R

#2715 dabadab: Nem küldtétek az energiát, ez lehetett a gond. :D

[ Szerkesztve ]

Ha csalódni akarsz, bízz az emberekben!

(#2718) Archttila


Archttila
veterán
LOGOUT blog (1)

Sziasztok!
Ezt az egyszeru currency convertert szeretnem hasznalni, de valami oknal fogva nem jelenik meg semmi a kimeneten:

#!/bin/sh

value=$1
from=$2
to=$3

[ $# -lt 3 ] && {    echo "Usage: $0 value source_currency target_currency";    exit 1;}

curl -s "https://www.xe.com/currencyconverter/convert/?Amount=$value&From=$from&To=$to" | sed -n -n "s/.*<span class='uccResultAmount'>\([^<]*\)<\/span>.*/\1/p"

Passionate about minimalistic software, the Linux philosophy, and having fun. SFF enthusiast.

(#2719) dabadab válasza Archttila (#2718) üzenetére


dabadab
titán

Mert megváltozott a html oldal felépítése.

Ezzel működik:

#!/bin/sh
value=$1
from=$2
to=$3
[ $# -lt 3 ] && {    echo "Usage: $0 value source_currency target_currency";    exit 1;}
curl -s "https://www.xe.com/currencyconverter/convert/?Amount=$value&From=$from&To=$to" | sed -n 's/.*<p class="result__BigRate[^>]*">\([^<]*\).*/\1\n/p'

$ ./x.sh 10 EUR HUF
3,842.97

DRM is theft

(#2720) Archttila válasza dabadab (#2719) üzenetére


Archttila
veterán
LOGOUT blog (1)

Működik!
:R :R

Passionate about minimalistic software, the Linux philosophy, and having fun. SFF enthusiast.

(#2721) prucam


prucam
tag

sziasztok!
A változó megadásánál elakadtam. A file.txt első sorából az utolsó két oszlopot kellene másik file2.txt-ben keresni.

változó:
u2=`awk 'NR==1 {print $(NF - 1),$NF}' file.txt`
(két szó lesz az eredmény)

1, az echo-ra kiírja:
echo $u2
a motelben

2, grep "$u2" file2.txt
hogyan kellene helyesen a grep-pel, az $u2-t megváltoztatni hogy jó legyen?

3, próbáltam a $(u2)-es módszert ( `...` helyet ), de rossz találatokat ír.

(#2722) Jester01 válasza prucam (#2721) üzenetére


Jester01
veterán

Szerintem az a baj, hogy az awk print automatikusan rátesz egy sorvéget. Vagy állítsd be az ORS-t vagy használd a printf-et.

Jester

(#2723) prucam válasza Jester01 (#2722) üzenetére


prucam
tag

"Szerintem az a baj, hogy az awk print automatikusan rátesz egy sorvéget."
- igen ott lehet valami. Ld. később.

Vagy állítsd be az ORS-t vagy használd a printf-et.
- ezeket még nem ismerem... ???

Egy kicsit próbálgattam másképp. Eredmények:
itt beírtam a scriptbe a változót
1, egy szó keres
u2=Tom
grep $u2 $i
grep "$u2" $i
-mindkét grep keresés jó

2, két szó keres
u2=Tom Sawyer

grep $u2 $i
line 17: Sawyer: command not found
grep "$u2" $i
-olyan találatok amiben egyik megadott szó sem szerepel (szavak: Tom Sawyer)

3, idézőjelek közé a változó
u2="Tom Sawyer"

grep $u2 $i
(program exited with code: 2)
grep "$u2" $i
csak a megadott két szót keresi. Tökéletes!

4,
u2="és a ha"
ez is szuper !!!

Vissza az awk-hoz, egy szót keres:
1, utolsó oszlop
u1=`awk 'NR==1 {print $NF}' file`

grep $u1 $i
(program exited with code: 1)
grep "$u1" $i
(program exited with code: 1)
A "print $NF" az utolsó oszlopnál, tényleg gond van.

2, 3. oszlop
u1=`awk 'NR==1 {print $3}' file`
grep $u1 $i
ez jó eredményt ad
grep "$u1" $i
ez is

3, két oszlop a 3. és a 4. (két szó: légy a)
u1=`awk 'NR==1 {print $3, $4}'

grep $u1 $i
grep: a: No such file or directory
...
(program exited with code: 2)
grep "$u1" $i
(program exited with code: 1)
Egyik sem jó.

megpróbáltam "cut" parancsot is:
u1=`head -1 file | cut -c9-21`
echo $u1
légy a szü
grep "$u1" $i
a grep-nél már hibát ír.

Összegzés:
Ha két v. több szót keresnék az nem jó. (kivéve így: u2="Tom Sawyer")
Szerintem a váltózónál a ``-el lesz a gond.
Lehet ott is kellene a "" ? De hogyan ???

[ Szerkesztve ]

(#2724) bambano válasza prucam (#2723) üzenetére


bambano
titán
LOGOUT blog

a parancs behelyettesítés, a fordított aposztróf az már idejét múlt forma. erősen javasolt kerülni.
helyette a $( ) forma szabályos.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#2725) Jester01 válasza prucam (#2723) üzenetére


Jester01
veterán

u2=`awk 'NR==1 { printf "%s %s", $(NF - 1),$NF}' file.txt`
vagy
u2=`awk 'NR==1 {ORS=""; print $(NF - 1),$NF}' file.txt`

[ Szerkesztve ]

Jester

(#2726) Fecogame válasza bambano (#2724) üzenetére


Fecogame
veterán

+1, ráadásul hibát is okozhat

Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak

(#2727) prucam


prucam
tag

bambano : "helyette a $( ) forma szabályos."
- oké, ezentúl ez lesz.

Jester01:
"
u2=`awk 'NR==1 { printf "%s %s", $(NF - 1),$NF}' file.txt`
vagy
u2=`awk 'NR==1 {ORS=""; print $(NF - 1),$NF}' file.txt`
"
- köszönöm mindkettő SZUPER!

(#2728) prucam


prucam
tag

#! /bin/sh
for i in {1..50}
do
cat file | cut -c $i >> file_2
done
exit

Van a fenti scriptem. Minden karaktert egy másik file, új sorába ír.
Ha angol a szöveg, akkor jó. De a magyarnál valami kódolási hiba van.

pl. ez a sor:
(1999) X-kölykök

ez lesz az eredmény:
(
1
9
9
9
)

X
-
k
Ã

l
y
k
Ã

k

(#2729) vargalex válasza prucam (#2728) üzenetére


vargalex
félisten

Szia!

A cut 1 byte-os karaktereket kezel, ez okozza nálad a problémát. De pl. sed-el egyszerűen meg lehet azt csinálni, hogy minden karaktert lecserélünk önmagára+új sorra:

sed 's/./\0\n/g' file > file2

Alex

(#2730) dabadab válasza prucam (#2728) üzenetére


dabadab
titán

Ez a GNU cut bugja: a -c-t pont úgy kezeli, mint a -b-t, vagyis annak ellenére, hogy elvileg kellene neki, valójában egyáltalán nem támogatja a multibyte karaktereket.
Szerencsére a bash maga is tud vagdosni stringeket és az rendesen csinálja:

#! /bin/bash
for i in {0..49}
do
        cat file | while read ; do
                echo ${REPLY:$i:1}
        done
done
exit

DRM is theft

(#2731) prucam válasza vargalex (#2729) üzenetére


prucam
tag

Próbáltam amit írtál sed-el. Az ékezet nélküli szavakat megcsinálja.
Amiben viszont ékezetes betűk vannak nem jó.

pl.:
Áuu, hosszú: ú

Á
u
u
,

h
o
s
s
z
ú
:

ú

(#2732) dabadab válasza prucam (#2731) üzenetére


dabadab
titán

A locale mit mond?

DRM is theft

(#2733) prucam válasza dabadab (#2730) üzenetére


prucam
tag

cat file | while read ; do

cat file-t átírom a rendes útvonalára, de nekem nem ír ki semmit.

[ Szerkesztve ]

(#2734) prucam válasza dabadab (#2732) üzenetére


prucam
tag

# locale
LANG=hu_HU.UTF-8
LANGUAGE=
LC_CTYPE="hu_HU.UTF-8"
LC_NUMERIC="hu_HU.UTF-8"
LC_TIME="hu_HU.UTF-8"
LC_COLLATE="hu_HU.UTF-8"
LC_MONETARY="hu_HU.UTF-8"
LC_MESSAGES="hu_HU.UTF-8"
LC_PAPER="hu_HU.UTF-8"
LC_NAME="hu_HU.UTF-8"
LC_ADDRESS="hu_HU.UTF-8"
LC_TELEPHONE="hu_HU.UTF-8"
LC_MEASUREMENT="hu_HU.UTF-8"
LC_IDENTIFICATION="hu_HU.UTF-8"
LC_ALL=

(#2735) dabadab válasza prucam (#2733) üzenetére


dabadab
titán

Azt akkor tudja produkálni a read, ha csak egyetlen sor van a file-ban és nincs a végén enter

#2734: Ez furcsa, nálam hasonló beállításokkal simán megy sed-es móka

[ Szerkesztve ]

DRM is theft

(#2736) prucam válasza dabadab (#2735) üzenetére


prucam
tag

Igen, csak egy sor volt benne, de többel már jó. Hogyan lehetne külön file-be íratni?

(#2737) dabadab válasza prucam (#2736) üzenetére


dabadab
titán

Nem értem a kérdést, mit szeretnél külön file-ba írni?

DRM is theft

(#2738) prucam válasza dabadab (#2737) üzenetére


prucam
tag

Az egészt, ne a parancssorba írja, hanem egy másik file-be

(#2739) dabadab válasza prucam (#2738) üzenetére


dabadab
titán

#! /bin/bash
for i in {0..49}
do
        cat file | while read ; do
                echo ${REPLY:$i:1}
        done
done > file_2
exit

A > file_2 rész az új

[ Szerkesztve ]

DRM is theft

(#2740) prucam válasza dabadab (#2739) üzenetére


prucam
tag

azért majdnem rájöttem...

"echo ${REPLY:$i:1} > file_2" -t próbáltam

Köszönöm !!!
:R

(#2741) vargalex válasza prucam (#2731) üzenetére


vargalex
félisten

Érdekes, mert mennie kell a sed-es megoldásnak:

[gavarga@gavarga-5500 test]$ echo "Áuu, hosszú: ú" > forras.txt
[gavarga@gavarga-5500 test]$ sed 's/./\0\n/g' forras.txt 
Á
u
u
,
 
h
o
s
s
z
ú
:
 
ú

A file is biztosan UTF-8-as? Mit mond nálad a

file forras.txt

(vagy esetedben, ha file a forrás állomány neve a file file) parancs?

Ezt kellene, hogy visszaadja:

[gavarga@gavarga-5500 test]$ file forras.txt 
forras.txt: Unicode text, UTF-8 text

Szerk: egyáltalán GNU sed-et használsz? Nem valami embedded rendszeren lévő busybox-os sed-et?

[ Szerkesztve ]

Alex

(#2742) prucam válasza vargalex (#2741) üzenetére


prucam
tag

CSODA TÖRTÉNT !!!

# echo "Áuu, hosszú: ú" > forras.txt
# sed 's/./\0\n/g' forras.txt
Á
u
u
,

h
o
s
s
z
ú
:

ú
# file forras.txt
forras.txt: UTF-8 Unicode text

Megnéztem másik linuxon is. Ott is jó.
Köszönöm!

:C

(#2744) Fecogame


Fecogame
veterán

Munkahelyen találtam egy scriptet, ami tartalmaz egy ilyen részt:

if [ "$VALAMI" -gt "1" ]; then
echo akarmi
fi

exec 2>&1

if [ "$VALAMI2" -gt "1" ]; then
echo akarmi2
fi

Középen annak az exec-nek van bármi értelme? :F

Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak

(#2745) dabadab válasza Fecogame (#2744) üzenetére


dabadab
titán

Igen. Az azt csinálja, hogy a script további részében az stderrt átirányítja az stdoutra.

DRM is theft

(#2746) Fecogame válasza dabadab (#2745) üzenetére


Fecogame
veterán

:R

Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak

(#2747) Blasius


Blasius
tag

Sziasztok,

Egy linux bash scriptet akarok írni, ami egy porton beérkező UDP csomagokat elmenti, a csomag beérkezési idejével együtt. Pythonban ezt meg lehetne biztos csinálni, de én azért akarok bash scriptet mert egy routeren (openwrt) akarnám futtatni, aminek az erőforrásai azért szerényebbek :U . Néhány (kb 10) bájtot kellene elmenteni másodpercenként plussz time epochot.

Ncattal a csomag elmentése már végülis megy:
ncat -4 -l -u -p6786 --recv-only --append-output > 11.txt
Furcsaság hogyha screennel futtatom akkor nem akar menteni fájlba.

A time epoch pedig:
date +%s

Persze az is lehet hogy az ncat ezt a feladatod már magától meg tudja csinálni. De vajon hogyan démonizálom? (Mert ugye screenben nem akart írni fájlba)

Üdv

Ha ''a'' ram megy dualban ''b'' rammal, és ''c'' ram megy dualban ''b'' rammal, akkor ''a'' ram megy dualban ''c'' rammal?

(#2748) dabadab válasza Blasius (#2747) üzenetére


dabadab
titán

Én inkább azt járnám körbe, hogy screenben miért nem ír file-ba, mert annak azért működnie kellene.

Egy sima
echo hello > hello.txt
sem megy?

(Illetve nem lehet, hogy screenben máshol vagy (más könyvtárban), ahova nincs írásjogod?)

[ Szerkesztve ]

DRM is theft

(#2749) bambano válasza Blasius (#2747) üzenetére


bambano
titán
LOGOUT blog

emlékeim szerint az openwrt-ben gyárilag nem bash van, és ha fel is rakod rá, akkor is olyan verzió, ami nem kezeli a tcp és az udp csomagokat.
a screen pedig lehet, hogy nem állít be minden környezeti változót.

én azon agyalnék, hogy nincs-e jobb megoldás, mint az udp-t menteni.
esetleg nem udp-n hanem rsyslog protokollal logolni...

hozzátenném még, hogyha folyamatosan írod a fájlrendszert, az lehet, hogy gyorsan kikészíti a routerben a flash-t. szóval csak olyan helyre írj, ami ramban van.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#2750) fatpingvin válasza bambano (#2749) üzenetére


fatpingvin
őstag

jól emlékszel, OpenWRT-n Almquist shell van (ash) a busyboxból.

A tipikus munkafolyamat legjobb tesztszimulációja a tipikus munkafolyamat. A "napi anti-corporate hsz"-ok felelőse :)

Copyright © 2000-2024 PROHARDVER Informatikai Kft.