Command Line

Linux parancssor. Ismert és kevésbé ismert parancsok. Bash tippek, trükkök. Rövid scriptek.

Címkék

&& (1) A4 (1) ac3 (1) acpi (1) AES (1) agrep (1) ajánló (1) alias (2) alkönyvtár (4) android (1) animgif (1) apropos (1) audio (1) avi (6) awk (1) backup (3) badblocks (1) basename (3) bash (17) bash completion (1) bc (1) blkid (1) boot (3) brute force (1) bug (1) bzip2 (2) cab (1) cal (1) calibre (4) calibredb (1) capability (1) cat (2) cd (4) cdialog (2) checkinstall (2) ciklus (1) címke (2) cksum (1) clipboard (1) cmdtools (1) colordiff (1) column (1) commandlinefu (1) convert (8) cr (1) crop (1) csplit (1) curl (1) date (1) dátum (1) dd (8) ddrescue (1) deb (1) decimális (1) default value (1) df (1) dia (1) dialog (2) diff (6) digitális fénykép (13) dircolors (1) dlna (1) dmidecode (1) dng (2) dos (2) dos2unix (1) dropbear (1) dropbox (1) dt3 (1) du (2) dump (2) dv (1) dvd (10) dvdauthor (2) dvd rw tools (1) e2freefrag (1) e2fsprogs (4) ebook (2) editor (2) eh (1) eject (1) emacs (4) encfs (1) energiagazdálkodás (1) enfuse (2) Enigma (1) epub (2) ESC (1) espeak (1) exe (1) exif (6) exiftool (10) exit (1) ext2 (1) ext3 (1) ext4 (1) f3 (1) fájl (1) fallocate (1) fdisk (3) fdupes (1) feh (2) felhő (1) felirat (1) ffmpeg (7) filefrag (1) find (6) for (3) format (1) fortune (1) fred weinhaus (1) fuse (4) fuse-lgefs (1) gdatafs (1) genisoimage (3) getcap (1) getfacl (1) getmail (1) ghostscript (1) gif (1) gnumeric (1) gnuplot (1) gömb (1) google (1) google drive (1) GPAC (1) gparted (2) gpg (2) gpg-zip (1) gplaycli (1) gps (2) gpsbabel (1) graphviz (1) grep (2) grive (1) grive2 (1) groff (1) growisofs (1) gs (1) gtk (1) gunzip (1) gzip (2) h264 (2) hálózat (1) handbrake (1) hardver (1) hash (1) haszontalan (1) hdd (5) head (1) helyettesítés (1) hexadecimális (2) hp (1) hp-levels (1) http (1) hugin (1) icewm (1) icewm-light (1) identify (1) ifconfig (2) ifs (1) igo (1) imagemagick (12) imap (1) index (1) install (1) iotop (1) iperf (1) iso (3) java (2) jelszó (4) jnettop (2) jogosultság (1) jpeg (4) jpg (2) jre (1) kapcsos zárójel (1) karakterkódolás (1) kdenlive (1) képméretezés (1) képnézegető (1) kétmenetes (1) keystore (1) keytool (1) kiegészítés (1) kindle (1) kódolás (1) könyv (1) kriptográfia (1) k x (2) lbzip2 (1) less (5) Levenshtein (1) lf (1) lg (1) linux (1) linuxvilág (1) lm sensors (1) log (1) losetup (1) ls (3) LS COLORS (1) lzw (1) mac address (2) mad (1) mail (1) man (2) markdown (1) matroska (4) md5sum (1) mediainfo (1) melt (1) mencoder (5) merevlemez (5) meta (1) mikmod (1) minidlna (1) mjpegtools (1) mkv (5) mkvmerge (3) mkvtoolnix (4) mlt (1) mms (1) mogrify (1) monitor (1) montage (1) mount (3) mp3 (2) mp4 (1) MP4Box (1) mpg123 (1) mpg321 (1) mplayer (6) mplex (1) named (1) naptár (1) ncurses (2) nethogs (1) ng (1) nice (1) niceload (1) nl (1) nosztalgia (1) ntfsresize (1) nyomtató (1) od (2) ogg (1) oktális (1) openssh (1) openwrt (1) óra (1) panoráma (1) parallel (3) parancsbehelyettesítés (1) parted (1) patch (2) pbzip2 (3) pdf (8) pdfcrack (1) pdfjam (1) pdfnup (1) pdftk (2) pendrive (1) pentax (6) pgp (1) pgrep (1) PhotoRec (1) pi (1) picasa (1) picasaweb (1) pid (1) pigz (1) pipe (6) pktriggercord (1) play store (1) pop3 (1) popd (2) process (4) pushd (2) pv (3) pwgen (1) python (1) qimport (1) qr (2) qrencode (2) random (1) randr (1) recode (1) regiókód (1) reguláris kifejezés (2) rejtjelezés (2) renice (1) rfkill (1) rip (1) rm (1) rpm (5) rsa (1) rsync (1) sane (1) scanimage (1) screenshot (1) sebesség (1) sed (2) seq (4) setcap (1) setfacl (1) sha256sum (1) sha512sum (1) shellshock (1) shred (2) SIGINT (1) smp (3) sorszámozás (1) sort (2) sourse-highlight (1) space (1) sparse (1) split (2) ssconvert (2) ssd (1) ssh (2) sshfs (1) startx (1) stat (1) stopper (1) sync (1) sysrq (1) systemd-analyze (1) systems (1) számológép (1) szenzor (1) szerver (1) szimbolikus link (1) szimbolikus lunk (1) szkennelés (1) tail (2) tar (3) tee (3) text (2) tiff (1) time (1) timeout (1) tinta (1) titkosítás (2) tömörítés (4) top (1) touch (2) tput (1) tr (1) transcode (5) trap (1) TRE (1) tree (2) tutorial (1) ufraw (2) ufraw batch (1) újság (1) uniq (1) unix (2) urandom (1) user (1) utf 8 (1) változó (1) VBoxManage (1) véletlenszám (2) verem (1) vertical video syndrome (1) VHS (1) vi (4) video (2) vim (1) virtualbox (1) vob (1) vobcopy (1) wake on lan (1) watch (1) webkamera (1) webszerver (1) wget (1) which (2) whitespace (2) who (1) wifi (1) windows (1) wol (1) X (1) x264 (1) xargs (4) xbacklight (1) xclip (1) Xdialog (1) xml (1) xmllint (1) xrandr (2) xxd (3) yes (1) youtube (1) youtube-dl (1) zárójeles (1) zbar (1) zene (1) zenity (2) zip (1) Címkefelhő

java keystore jelszó

2016.09.08. 11:00 | sala | Szólj hozzá!

Generáltam egy java keystore-t, benne egy kulcspárral:

keytool -genkey -noprompt -alias mydomain -keyalg RSA -keystore test_keystore.jks -keysize 2048 -dname "CN=commandline.blog.hu, C=HU" -storepass 123456  -keypass jelszo

A keystore jelszava 123456 a kulcspáré jelszo.

Brute force

Elég sok eszköz van, amivel brute force támadással megpróbálhatjuk feltörni a keystore jelszavát, én a keystorebreakert próbáltam ki, itt megadhatjuk milyen karakterek fordulhatnak elő a jelszóban. A legfeljebb 6 karakter hosszú csak számokat tartalmazó jelszavakat pillanatok alatt végigpróbálja:

java -jar KeystoreBreaker.jar test_keystore.jks 0123456789 000000 999999 4

Ehhez a feltöréséhez pár másodperc elég volt. Nyilván több idő kell ha nemcsak számok lehetnek a jelszóban, a legfeljebb 6 hosszú szám+kisbetű összes lehetőségének végigpróbálásához a program szerint 1.5 óra kellene, szám+kisbetű+nagybetűnél kb. 2 nap.

Itt tartottam a bejegyzéssel, ide jönne a rész ami leírja, hogy milyen jelszót (ne) válasszunk, amikor találtam még valamit.

Changepassword

 A changepassword nevű programmal egy keystore jelszavát változtathatjuk meg. Megkérdi a régi jelszót, az újat és létrehoz egy új keystore-t az új jelszóval ami a régi kulcsait tartalmazza:

$ java ChangePassword test_keystore.jks test_keystore2.jks
Enter keystore password: fogalmamsincs
Changing password on 'test_keystore.jks', writing to 'test_keystore2.jks'...
Enter new keystore password: ujjelszo

Egy igen furcsa van a programban, nagyszerűen működik akkor is, ha rossz jelszót adunk meg. A programot innen töltöttem le, élesben nem próbáltam ki, de a fenti egyszerű teszt alapján működik. A szerző alapján a kulcspár jelszavát nem lehet így lecserélni, az valóban biztonságos.

Titkon azért abban bízom én értettem valamit félre valamit és nem ennyire rossz a java keystore jelszókezelése.

Címkék: java jelszó brute force keystore keytool

grive2

2016.07.17. 10:00 | sala | Szólj hozzá!

Régóta próbáltam már keresni valamit amivel szinkronizálni lehet Linux alatt a Google Drive tartalmát. Az egyetlen eszköz ami nekem valamennyire működött a grive2.

Először a következő paranccsal kell indítani:

grive2 -a

Ez megnyit egy weboldalt ahol engedélyezhetünk hozzáférést google drive-unhoz, az ott kapott tokent bemásolva a parancssorba.

Ezután már elég a következő is:

grive2

Igazából ez a program sem működik túlzottan jól, egy igen friss javítás kellett ahhoz, hogy a feltöltés is működjön.

 

Címkék: google drive grive2 grive

rm helyett shred

2016.07.14. 10:00 | sala | Szólj hozzá!

Korábban már használtam shredet a merevlemez teljes tartalmának törléséhez, de ezt használhatjuk fájltörléshez is.

/dev/sdb6 partíción teszteltem:

$ echo 'EZNINCSAPARTICION' > test1.txt
$ strings /dev/sdb6 | grep -i EZNINCS
EZNINCSAPARTICION
$ rm -f test1.txt
$ strings /dev/sdb6 | grep -i EZNINCS
EZNINCSAPARTICION

Látszik, hogy a fájl törlése után is megmarad a partíción a fájl tartalma.

$ echo 'EZTENYLEGNINCSAPARTICION' > test2.txt
$ strings /dev/sdb6 | grep -i EZTENYLEG
EZTENYLEGNINCSAPARTICION
$ shred --remove test2.txt
$ sudo strings /dev/sdb6 | grep -i EZTENYLEG
$

Ha rm helyett shred-et használunk, akkor törlés után nincs nyoma a fájl eredeti tartalmának.

Címkék: rm shred

pwgen

2016.07.11. 10:00 | sala | Szólj hozzá!

Jelszót nem túl egyszerű generálni, szerencsésebb ezt is programra bízni. A pwgen elvileg olyan jelszavakat generál (a hosszt mi adhatjuk meg) amiket meg is lehet jegyezni.

A program érdekessége, hogy figyeli miként indítjuk a programot, és másként működik ha a program kimenetét átirányítjuk.

Alapesetben jó sok jelszót generál, hogy a mögöttünk leskelődő kolléga nem tudja a jelszót:

$ pwgen 10
Ath0iiph4u Aigh8aeh0o kia2ohd9Ei oe6iiRoo4N oxeizeiPh1 AeHuu7Zohp eiZ6eigahM
uf4aiph5Oi Epuxee6ieh aD7ieghei7 phogi2eiG2 oa6maeDai2 oop2ieh0Ua Aimeid3ewu
eicoo5Wieb yuT7siecho tuupo5uu0F thi1Oj3gie Xooyeux3oo aapozu6Cho Ohha3coodu
yaGhue7Zah uFooji4oox quuteec7Es ao8cuPh3ru AhGh4ohGa7 iHeivae6fi Que3oosaus
Ve9maek5wa ieG4autoob ahPith1aex eewaom3uF8 se1ahGhios Ba2chiez6A Oquoof9zo7
thiPhai2ph ha9Fe2joi0 seeWung4Na mahth9Noh8 Ahy4uth8Yi Phout3ahj3 coeThiwe0l
ze8lei4Yux julee6Asoo iubeeph1Oo foo9Iez9on jiTee1aeYi LohVaeng8s ieV8ui5ahf
Vie7eijein Eingoo4ahw Fai2zuuqu8 UTh8yiPier Ooyu4dohS1 KoocahNae5 oTha3mie3s
Gae2apie9i Quoh1Foh9a kai7Va4Iec soonioHei3 Ahque3engu ieY2Tai5bi quieje6Mia
aiwoob3Pim eeNu6Tei5v kool1dohLe ohies1Eich goht1Shoqu ieH3ahghoh tho2Sathai
eiK4uNgeen ahjook6eoG eiX5ieWeed aigaeFi6xu ulie0Oowah wohh9giMai ohHe8ieGie
bu9giebieX aeK7ohpoki ego2Thiepa eaPhaeMai1 ohBu6zieng koh5Aith4e Xo8veiquak
on4AhZei6g eish4Theih Batah5Opie lia4ohJ3oP aeN1piu8Fe Ievishah0i Oofagh1tah
Aix4Bich1g Eijeej6iej eeYah8aeSh ohdahh8Eec vea7Otohnu aiCh4Bi2ho rei3Riexiw
LeiMadei6E ohsei3Iequ oux7ohNgoh ooZ5aephah aKi0Loo9ku Si1bu6eela roo4Ab2oph
iYee7eeCho Hei8Cae3Oh tha4uShaeb eshosie1Oh kaih2Wae2l je3Ieceeye eeboo2Noh0
xuaNil9pi5 Che2chi7So lixeeMie5M ieFeik3thu phaiz3Phoo uWo8obah4y ahv8Taevah
ha5foo0Iph dougauPae4 eighuY1ael Gouthoh5yo aa4Eikai0j ii4ShixaeT eim2Wa8Xu5
ooC6ieQu7g Aerahr3ood AiBo5quuov SeL4Nuutha Uki9caewij wa2gaiNga0 teiPaef0Pu
ahGhao5eeH ahveiN1ahx shaekeQu1d bopheing9R Eephiet8ao toh8fiba2U gar7La8she

Ha átirányítjuk az outputot (az első példában fájlba, második példában clipboardra), akkor viszont csak 1 jelszót generál:

$ pwgen 10 > /tmp/a.txt
$ cat /tmp/a.txt
ohz7RaiGho
$ pwgen 10 | xclip

Ha ezek a jelszavak túl egyszerűnek tűnnek, akkor generáltathatunk bonyolultabbakat is (még a program sem igazából ajánlja ezt, hiszen ezeket szokta szinte mindenki leírni egy papírra és a monitorra ragasztani):

$ pwgen -sy 10 | cat
&f+=[7~D:x

A példákban szereplő egyik jelszót sem használom sehol.

Címkék: jelszó pwgen

gpg-zip

2016.07.08. 10:00 | sala | Szólj hozzá!

Írtam már korábban arról, hogyan lehet egy fájlt gpg-vel titkosítani. Ha egy teljes alkönyvtárat szeretnénk titkosítani, akkor gpg-zip-et használhatjuk:

$ gpg-zip -c -o titok.gpg dir
$ gpg-zip --list-archive titok.gpg
$ gpg-zip -d titok.gpg

Az első utasítás a dir alkönyvtárat titkosítja és létrehozza a titok.gpg fájlt. A második annak tartalmát listázza ki, a harmadik újra kicsomagolja a titkosított fájlt. Nyilván mindegyik kérdez jelszót.

Ha a korábbi példához hasonlóan inkább AES256-ot szeretnénk használni, akkor megtehetjük, de elég csúnya a szintaktika:

gpg-zip -c --gpg-args "--cipher-algo AES256" -o titok2.gpg dir

Azt igazából persze nem tudom, hogy miért jobb a gpg-zip mintha simán gyártanék egy tar-t és azt titkosítanám. Mivel gpg-zip egy shell script, belenéztem és azt látom hogy ez valóban csak a tart és a gpg-t kapcsolja össze.

Címkék: tar zip gpg gpg-zip

fallocate

2016.07.05. 10:00 | sala | Szólj hozzá!

Az előző bejegyzésben mutattam egy példát arra, hogyan lehet dd-vel lassan "rendes" és gyorsan sparse fájlt gyártani. Nyilván felmerül a kérdés, van-e mód arra, hogy gyorsan gyártsunk rendes fájlt. Számomra kissé meglepő módon van:

$ time fallocate -l 1G fallocateg.txt

real    0m0.003s
user    0m0.000s
sys     0m0.000s

$ ls -lsk fallocateg.txt
1048580 -rw-r--r-- 1 user live 1073741824 Jun 29 20:40 fallocateg.txt

A fallocate villámgyorsan működik és nem sparse fájlt hoz létre. Ha jól értem, akkor a trükkje az, valóban lefoglalja a helyet, de nem írja ki a drive-ra a rengeteg 00-t. Nem minden fájlrendszernél működik, pl. ext3 nem elég, ext4 kell neki.

Címkék: dd ext4 fallocate

sparse fájlok

2016.07.02. 10:00 | sala | 2 komment

Ha szükségem volt egy nagy tesztfájlra, többnyire a következő módszerrel készítettem a fájlt:

$ time dd if=/dev/zero bs=$((1024*1024)) count=1024 of=large.dat
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 12.3933 s, 86.6 MB/s

real    0m12.394s
user    0m0.005s
sys     0m0.480s

Az 1GB-os fájl elkészítése kb. 12 másodperc volt.

Listázzuk ki a fájlt, az egyszerűség kedvéért 1024 bájtos blokkméretben megnézve az elfoglalt blokkok számát:

$ ls -lsk large.dat
1048580 -rw-r--r-- 1 user live 1073741824 Jun 11 17:18 large.dat

Az 1048580 db. blokk reálisnak tűnik, 1024-gyel szorozva kb. 1GB-ot kapunk, a különbség (4096 byte) elhanyagolható.

Mivel a fájlt csupa 0-ból áll, elvileg van egy másik mód is az 1GB-os fájl létrehozására:

$ time dd if=/dev/zero bs=1 count=1 of=large2.dat seek=$((1024*1024*1024-1))
1+0 records in
1+0 records out
1 byte (1 B) copied, 6.7613e-05 s, 14.8 kB/s

real    0m0.001s
user    0m0.000s
sys     0m0.000s

Ebben a példában dd-vel egyetlen bájtot iratok csak a fájlba, azt viszont seek segítségével pont ugyanoda írom ahol az előző példában a fájl vége volt. A parancs döbbenetesen gyorsan lefut, elég nyilvánvaló, hogy ennyi idő nem elég 1GB-nyi 0 lemezre írására.

Listázzuk ki a két fájlt:

$ ls -lsk large*
      4 -rw-r--r-- 1 user live 1073741824 Jun 11 17:19 large2.dat
1048580 -rw-r--r-- 1 user live 1073741824 Jun 11 17:18 large.dat

A fájlméret bájtra megegyezik, viszont az új fájl összesen csak 4 blokkot foglal az 1 GB helyett mivel sparse (ritka?) fájl jön létre, a rendszer nem tárolja feleslegesen a sok-sok 0 bájtot.

Nem minden fájlrendszer támogatja ezt, én ext3-mal teszteltem.

Az előnyei mellett nyilvánvaló veszélyei is vannak az ilyen fájloknak, például az ilyen fájlokat módosítva könnyen elfogyhat a lemezen a szabad hely akkor is, ha a látszólagos fájlméret nem nő.

 

Címkék: dd sparse

Fájl néhány bájtjának módosítása

2016.06.29. 10:00 | sala | Szólj hozzá!

Korábban már módosítottam egy partíciós tábla fejlécében néhány bájtot xxd és dd használatával, amikor egy fájllal akartam ugyanezt megtenni, akkor viszont nem teljesen működött a módszer:

dd if=/dev/zero of=test.dat bs=1 count=100
echo 00: FF | xxd -r > ff.dat
dd if=ff.dat of=test.dat bs=1 count=1 seek=50

Egy 100 bájtos tesztfájlban akartam az 51. byte-ot FF-re cserélni. Az eredmény kissé meglepő módon egy 51 bájt hosszú fájl lett, dd automatikusan levágta a fájl végét.

Ha azt szeretnénk, hogy dd ne vágja le a fájl végét és tényleg csak az 51. bájtot módosítsa, akkor a következő parancs kell (a lényeg a conv=notrunc):

dd conv=notrunc if=ff.dat of=test.dat bs=1 count=1 seek=50

Címkék: dd xxd

Videó elforgatása 180 fokkal

2016.06.11. 10:00 | sala | Szólj hozzá!

Kiderült, hogy az emberi kreativitás határtalan, nemcsak vertikálisan lehet rosszul tartani egy telefont, ha videózik az ember.

Ha fejjel lefelé sikerül felvenni, akkor így lehet visszaforgatni:

ffmpeg -i input.mp4 -vf "vflip,hflip" -vcodec libx264 -b:v 10000k output.mp4

Címkék: video ffmpeg

PhotoRec

2016.05.19. 10:00 | sala | Szólj hozzá!

Több mint 10 évvel ezelőtt egy Linux install során véletlenül leformáztam a /home (ext2) partíciómat. Mivel a formázás nem írja felül teljesen a merevlemezt ezért gyorsan elmentettem a partíciót egy image fájlba (particio.dat), hátha még vissza tudom később nyerni az adatokat.

Felmountolva az image fájlt üresnek látszott, de belenézve a fájlba láttam a korábbi tartalom nyomát.

Nemrég találtam rá a félrevezető nevű PhotoRec programra, amivel pont ilyen adatokat lehet visszanyerni:

PhotoRec /log /d /tmp/visszanyertfajlok /cmd particio.dat search

A program meglepően sok adatot vissza tudott állítani:

Pass 1 +6909 files
txt: 4020/4412 recovered
tx?: 1168/1168 recovered
gif: 604/660 recovered
class: 336/336 recovered
gz: 254/254 recovered
ps: 197/197 recovered
elf: 93/94 recovered
jpg: 79/245 recovered
tar: 72/72 recovered
mp3: 31/31 recovered
rpm: 31/31 recovered
au: 11/11 recovered
tif: 4/4 recovered
bmp: 3/3 recovered
exe: 3/3 recovered
zip: 2/6 recovered
doc: 1/3 recovered
cab: 0/3 recovered
iso: 0/2 recovered
riff: 0/1 recovered
Total: 6909 files found

350516 sectors contains unknown data, 627 invalid files found and rejected.
PhotoRec exited normally.

A fájlnevek persze elvesztek (a szektorszám alapján f0620616.txt-hez hasonlóan nevezi el a program a visszaállított fájlokat ), és nyilván nem minden lehet visszaállítani.

A visszaállított fájlokból látszik, hogy nemcsak képfájlokat állít vissza a program. Valószínűleg eredetileg véletlenül letörölt SD-kártyák kezelése volt a cél, és később fejlesztették tovább a programot.

Címkék: ext2 PhotoRec

zbar

2016.05.08. 10:00 | sala | Szólj hozzá!

Írtam már arról, miként lehet qrencode-dal QR-kódot gyártani:

qrencode -o cli.png "http://commandline.blog.hu"

Dekódolni zbar segítségével lehet a QR kódot:

$ zbarimg cli.png
QR-Code:http://commandline.blog.hu
scanned 1 barcode symbols from 1 images in 0 seconds

Ha egy scriptben szeretnénk használni, akkor persze nincs szükségünk a felesleges magyarázó mondatokra:

$ zbarimg --raw -q cli.png
http://commandline.blog.hu

Elvileg a zbar csomag része a zbarcam program is, ami rögtön a webkameráról olvassa be a QR-kódot, de nálam ez nem ismeri fel (az egyébként jól működő) webkamerát.

 

 

Címkék: webkamera qr qrencode zbar

ddrescue

2016.04.24. 10:00 | sala | Szólj hozzá!

Egy rokonom hibás SD-kártyájáról kellett adatot visszanyernem. A kártyát már nem mountolta fel a gép, első ötletem az volt, hogy dd-vel lementem róla az adatokat és majd elemzem, de a dd összesen 16KB-ot tudott kiolvasni, majd input/output errorral meghalt.

A dd-nek van egy pont ilyen esetekre készített változata, a GNU ddrescue:

ddrescue /dev/mmcblk0p1 ddrescue.img

A fenti parancs az SD kártya első partícióját ( a partíciós tábla még olvasható volt ) menti le a ddrescue.img fájlba. A teljesen olvashatlan részeket persze ez a parancs sem tudja lementeni, de szépen elmenti az olvasható részeket, az olvashatatlanokat pedig többször többféle módszerrel próbálja kiolvasni.

A mentés kegyetlenül lassú. Egy 4GB-os SD kártyát akartam elmenteni, és 2.5 nap után állítottam le a mentést, mert úgy éreztem ennél többet nem érnek az adatok.

Bár nem sikerült minden adatot kiolvasni az SD-kártyáról, az image fájlt már fel tudtam mountolni és a kártyán lévő fényképek nagy részét le tudtam menteni.

Nem modorosságból neveztem a parancsot a bejegyzésben GNU ddrescue-nak. A programnak több változata is van, erről itt lehet bővebben olvasni.

Címkék: dd ddrescue

virtualbox hdd méretnövelés

2016.04.15. 10:00 | sala | Szólj hozzá!

A szokásokkal ellentétben most nem egy parancsot mutatok be, hanem egy valódi probléma megoldását. Hasonlóan a korábbi HDD - SSD cseréhez.

Linux alatt virtualboxban (5.0.14) fut egy windowsos gépem, ahol 10GB-os mérete van a C: drive-nek. Nem tudom miért csak ekkora méretet választottam, valószínűleg azt gondoltam elég lesz. De nyilván nem lett elég. Később egy új HDD-t is adtam a virtuális gépnek és átpakoltam pár dolgot, de újabban megint kicsinek tűnik a C: drive, windows egyfolytában panaszkodik, takarítás sem segített. Vagyis a feladat a virtuális gépen a C: drive méretének megnövelése, nyilván újrainstall nélkül. Leginkább ezt a leírást próbáltam követni, de sokmindent másként kellett csinálnom.

Az egyszerűség kedvéért az összes alkönyvtár helyett minden példában /path-ot írok.

Virtualboxnak van parancssoros eszköze szerencsére.

Először is kilistázom a virtuális gépeket, csak hogy biztos legyek benne, hogy parancssorból is látom a gépem, majd információt kérek a gépről.

VBoxManage list vms
VBoxManage showvminfo nyul_xp

A parancs nagyon sok adatot megad, számomra csak ennyi fontos most:

...
IDE Controller (0, 0): /path/nyul_xp.vdi (UUID: 57657647-a880-4e0b-9fc3-4651dc7cffa8)
IDE Controller (0, 1): /path/nyul_xp_second.vdi (UUID: 2b916d2f-4730-4ad3-b4c8-29bfb27d49e8)
IDE Controller (1, 0): /path/VBoxGuestAdditions_4.1.18.iso (UUID:45308f05-f80e-4bc4-8b39-ec3e700ac5b1)
...

Vagyis 3 meghajtó van a gépen. nyul_xp.vdi (C:) és nyul_xp_second.vdi (E:) merevlemezek és VBoxGuestAdditions_4.1.18.iso (D:) optikai meghajtó. Hogy miért van 4.1.18-as VBoxGuestAdditions az 5-ös virtualboxomban azt nem tudom, de most nem is fontos.

Letöltöttem gparted live-ot, és ezt teszem a virtuális gép virtuális DVD-meghajtójába:

VBoxManage storageattach "nyul_xp" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /path/gparted-live-0.25.0-3-i686.iso

Ezután ellenőriztem, tényleg gparted live bootol-e be (igen).

VBoxManage startvm "nyul_xp"

Visszatérve linux parancssorba (az eredeti Linux gép parancssorába, nem a virtuális gép gparted parancssorába) kilistáztam a virtuális gépek HDD-jeit:

VBoxManage list hdds

A listában ott volt a fent is látott nyul_xp.vdi, így megnöveltem ennek a méretét:

VBoxManage modifyhd 57657647-a880-4e0b-9fc3-4651dc7cffa8 --resize 20000
VBoxManage clonehd 57657647-a880-4e0b-9fc3-4651dc7cffa8 nyul_xp_20.vdi

Valamiért feltétlenül UUID-vel kellett hivatkoznom a merevlemezre. A fenti két parancs eredménye egy új nyul_xp_20.vdi, a clonehd parancs kiírta az új UUID-t is, de arra végül nem volt szükség.

Ezután az új megnövelt méretű merevlemezre cseréltem a régit a virtuális gépben:

VBoxManage storageattach "nyul_xp" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium /path/nyul_xp_20.vdi

Ezután a virtuális gépet be lehet bootolni, gparted live indult el. A grafikus felület nem működött, de amúgy is parancssorban akartam dolgozni.

Először is parted segítségével megnöveltem a partíció méretét (resizepart alparancs). Ezt nyilván nem így kellett volna, fdisk-et is használhattam volna, de balga módon azt hittem, hogy parted automatikusan átméretezi a fájlrendszert is. Nem tette, vagyis nem kerülhettem el ntfsresize használatát:

ntfsresize --info /dev/sda1
ntfsresize -n -s 20971M /dev/sda1
ntfsresize -s 20971M /dev/sda1

A --info kapcsolóval tudtam meg, mekkora méretre kell növelnem a fájlrendszert. Először -n kapcsolóval futtattam, ami csak szimulálja a módosításokat, majd utána élesben.

Itt újraindítottam a virtuális gépből, és azt választottam induláskor, hogy ne gparted hanem a windows induljon el. Windows persze először panaszkodott és ellenőrizte az új meghajtót, de második bootra már rendben elindult. De azért javasolt még egy bootot is.

Mivel gparted live-ra nincsen szükség, utolsó lépésként a virtuális gépben visszacseréltem a DVD-t:

VBoxManage storageattach "nyul_xp" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /path/VBoxGuestAdditions_4.1.18.iso

 

Címkék: hdd gparted virtualbox ntfsresize VBoxManage

Kiterjesztés levágása

2016.04.11. 10:00 | sala | Szólj hozzá!

Valójában csak azért írtam pár napja a basename-ról, hogy egy hiányosságára felhívjam a figyelmet. Ha egy scriptünk jpg fájlokkal dolgozik, akkor könnyen levághatjuk a kiterjesztést:

$ basename alma.jpg .jpg
alma

Ha viszont egy olyan scriptet írunk ami többféle formátummal is dolgozhat, akkor a basename-et nem tudjuk használni, mert nincs olyan paraméterezése (legalábbis nem tudok róla) ami az összes kiterjesztést levágja.

Ha csak kétféle kiterjesztést kell kezelni, akkor néha 2 basename-mel oldom ezt meg, de erre nem vagyok büszke. A következő módon a jpg és png kiterjesztést is le lehet vágni:

$ basename $(basename alma.jpg .jpg) .png
alma
$ basename $(basename alma.png .jpg) .png
alma

Ha univerzálisan akarjuk a kiterjesztést levágni, akkor a bash beépített lehetőségeit használhatjuk:

$ s=input.jpg
$ echo ${s%.*}
input

Ha nemcsak a kiterjesztést, hanem az alkönyvtárat is le akarjuk vágni (hasonlóan basename-hez) akkor kicsit még bonyolultabb a használat:

$ s=/tmp/input.jpg
$ echo ${s%.*}
/tmp/input
$ s2=${s##*/}
$ echo ${s2%.*}
input

 

Címkék: bash basename

basename

2016.04.08. 10:00 | sala | Szólj hozzá!

Bár már többször használtam, még nem írtam külön a basename-ről.

Alapesetben egy teljes útvonallal megadott fájlnévből kivágja a fájl nevét:

$ basename /eleg/hosszu/path/alma.txt
alma.txt

Leggyakrabban viszont a kiterjesztés levágására használják:

$ basename alma.txt .txt
alma
$ basename /eleg/hosszu/path/alma.txt .txt
alma

Címkék: basename

bash script módosítása futtatás közben

2016.04.05. 10:00 | sala | Szólj hozzá!

Manapság elég lassú bash scripteket futtatok és többször előfordult, hogy már a futás közben láttam, hogy mit kell majd a scriptben módosítani. Jó ötletnek tűnt a futás közben módosítani a scriptet, hogy a script befejezésekor rögtön el tudjam indítani az új változatot. Teljesen furcsa és érthetetlen hibajelzéseket kaptam ezért utánanéztem, és sajnos úgy tűnik, hogy bash nem olvassa be az egész scriptet a végrehajtás elején, hanem mindig csak az a kis részét amivel foglalkozik. Itt most ne óriási scriptekre gondoljunk, néhány kilobájtos scripteknél is tapasztaltam ezt, amelyek kényelmesen elférnének a memóriában.

Úgy tűnik nemcsak én gondoltam azt, hogy bátran módosíthatjuk a scripteket, ennél a stackoverflows kérdésnél is látszik, hogy a logikusnak tűnő elfogadott válasz -12 ( már -13 ) szavazatnál jár.

Címkék: bash

calibredb

2016.04.02. 10:00 | sala | Szólj hozzá!

A calibre néhány parancssoros eszközéről már írtam korábban, de ha a könyvadatbázisom kellett karbantartani, akkor eddig mindig elindítottam a GUI-t. Ez elég kényelmetlen, ha egyetlen könyvet akartam csak az adatbázisba tenni.

Szerencsére ez parancssorból sokkal egyszerűbben megy calibredb használatával:

calibredb add konyv.epub

Sajnos a send to device parancsot nem lehet parancssorból elérni, legalábbis én nem találtam meg.

 

 

Címkék: calibre calibredb

imagemagick lánc

2016.03.24. 10:00 | sala | Szólj hozzá!

Elég sokszor írtam már az imagemagickről, ami az egyik legjobb parancssoros képszerkesztő eszköz.

Ha egy bonyolult imagemagick scriptet írok, akkor gyakran valami ilyen lesz a végeredmény:

#!/bin/bash
WIDTH=$(identify -ping -format "%w" $1)
HEIGHT=$(identify -ping -format "%h" $1)
convert -size ${WIDTH}x${HEIGHT} radial-gradient:black-white temp1.png
convert $1 -colorspace gray temp2.png
convert $1 temp1.png -compose Multiply -composite -normalize temp3.png
convert $1 temp2.png -compose Minus -composite temp4.png
convert temp4.png -auto-level -modulate 200 +dither -colors 2 -colorspace gray -contrast-stretch 0 temp5.png
convert temp5.png -blur 20x20 temp6.png
convert temp5.png -negate temp7.png
convert temp7.png -blur 20x20 temp8.png
convert temp8.png temp3.png -compose Multiply -composite temp9.png
convert temp6.png $1 -compose Multiply -composite temp10.png
convert temp9.png temp10.png -compose Plus -composite output.png

Az nem túl fontos, hogy mit csinál a script, de látszik, hogy 11 lépésből áll, közben rengeteg ideiglenes fájlt gyárt ( amit trap-pel illik a végét letakarítani ).

A fenti scriptet átírthatjuk úgy, hogy egyetlen egy parancs legyen:

#!/bin/bash
WIDTH=$(identify -ping -format "%w" $1)
HEIGHT=$(identify -ping -format "%h" $1)
convert $1 \
    \( -size ${WIDTH}x${HEIGHT} radial-gradient:black-white \) \
    \( -clone 0 -colorspace gray \) \
    \( -clone 0 -clone 1 -compose Multiply -composite -normalize \) \
    \( -clone 0 -clone 2 -compose Minus -composite \) \
    \( -clone 4 -auto-level -modulate 200 +dither -colors 2 -colorspace gray -contrast-stretch 0 \) \
    \( -clone 5 -blur 20x20 \) \
    \( -clone 5 -negate \) \
    \( -clone 7 -blur 20x20 \) \
    \( -clone 8 -clone 3 -compose Multiply -composite \) \
    \( -clone 6 -clone 0 -compose Multiply -composite \) \
    \( -clone 9 -clone 10 -compose Plus -composite \) \
    -delete 0-10 \
output.png

A következő módon működik a script:

  • convert: Egyetlen egyszer kell convert-et hívni.
  • $1: Először is felsorolom az input képeket, ezeket convert megszámozza 0-tól kezdve. Fenti példában egyetlen input kép ($1) van, ez lesz a 0. kép.
  • \( ... \): Ez egyes alparancsok \( és \) között szerepelnek. Illik új sorba törni őket, hogy legyen egy kis esélyünk megérteni a scriptet.
  • Látszik, hogy nem határozunk meg output fájlt az alparancsoknál. Imagemagick szépen tovább számozza az elkészült fájlokat. A radial-gradient lesz az 1. a gray a 2. ...
  • Ha hivatkoznunk kell a korábbi fájlokra, akkor -clone index segítségével tehetjük ezt meg.
  • -delete 0-10: A legvégén eldobhatjuk az ideiglenes fájlokat. A fenti script 12 fájlt ( 0. 1. .... 11. ) gyárt, ebből csak az utolsó kell nekünk, égy a 0. indextől a 10. indexig törölhetjük a felesleges fájlokat.
  • output.png: A végső eredményt ide írjuk ki.
  • Ha töröljük a -delete részt, akkor output-0.png, output-1.png ... néven elmenti a script a részeredményeket is, ez elég hasznos, ha debuggolunk.

A script gyorsabb mint az eredeti verzió, mert nem kell png-re konvertálással, fájlba mentéssel, fájlból olvasással, png dekódolással tölteni az időt.

Látszik, hogy az indexekre eléggé oda kell figyelni, ha a script elejét módosítjuk, akkor a későbbi indexeket módosítani kell. Ezen lehet kicsit segíteni, ha kicsit átírjuk a scriptet:

convert $1 \
    \( -size ${WIDTH}x${HEIGHT} radial-gradient:black-white \) \
    \( -clone 0 -colorspace gray \) \
    \( -clone 0 -clone 1 -compose Multiply -composite -normalize \) \
    \( -clone 0 -clone 2 -compose Minus -composite \) \
    \( +clone -auto-level -modulate 200 +dither -colors 2 -colorspace gray -contrast-stretch 0 \) \
    \( +clone -blur 20x20 \) \
    \( -clone 5 -negate \) \
    \( +clone -blur 20x20 \) \
    \( +clone -clone 3 -compose Multiply -composite \) \
    \( -clone 6 -clone 0 -compose Multiply -composite \) \
    \( -clone 9 +clone -compose Plus -composite \) \
    -delete 0--2 \
output.png

  • Az előző lépésben létrejött képre hivatkozhatunk +clone paranccsal.
  • Használhatnám +clone helyett az azzal ekvivalens -clone -1-et is.
  • Ha a kettővel korábbi képre akarunk hivatkozni, akkor -clone -2 kellene.
  • delete 0--2: A -2. index az utolsó előtti képet jelenti.0--2 valójában a 0. indextől a -2. indexig tartó intervallumot jelenti, vagyis ezzel lehet az utolsó kép kivételével az összeset törölni.

 

Címkék: imagemagick

trap

2016.03.17. 10:00 | sala | Szólj hozzá!

Ha egy olyan scriptet írunk ami sok-sok ideiglenes fájlt hoz létre, akkor illik ezeket eltakarítani a script futása után. Többnyire a script legvégén szoktam a takaritást elvégezni, de ez nyilván nem nagyon segít amikor a script időközben meghal, vagy leállítom CTRL-C-vel.

Sokkal szebben lehet a takarítást trap segítéségével végezni. A következő egyszerű script 2 fájlt is létrehoz, és a kettő között 5 másodpercet pihen:

#!/bin/bash

cleanup() {
  echo "Cleaning up..."
  rv=$?
  rm -f aaa.txt bbb.txt
  echo "Cleaning finished"
  exit $rv
}

trap cleanup EXIT

touch aaa.txt
sleep 5
touch bbb.txt

A takaritást végző kódrészletet a cleanup függvénybe tettem. Nem feltétenül kell külön eljárást létrehoznunk erre, de így azért szebb.

Ha lefuttatjuk a scriptet, akkor szépen eltakarít maga után:

$ ./trap_test.sh
Cleaning up...
Cleaning finished

Ha elindítjuk a scriptet, de CTRL-C-vel megállítjuk a sleep közben, akkor is rendesen elvégzi a takarítást:

$ ./trap_test.sh
^CCleaning up...
Cleaning finished

Az EXIT helyett részletesebben is szabályozhatjuk, hogy milyen signalra milyen parancs fusson le. Ha pl. a fenti példában EXIT-et SIGINT-re cserélem, akkor rendes futásnál nem nem fut le cleanup, csak CTRL-C-nél.

Címkék: exit trap SIGINT

nethogs

2016.02.19. 10:00 | sala | Szólj hozzá!

Korábban már írtam a jnettop-ról amivel a hálózatot lehet figyelni. Mivel kapcsolatonként írja ki a statisztikát, elég kényelmetlen, ha egy programunk több különböző szerverrel is kommunikál egyszerre.

Ha programonként szeretnénk inkább áttekinteni a hálózati forgalmat, akkor sokkal kényelmesebb a nethogs.

Címkék: jnettop nethogs

dos2unix

2016.01.08. 10:00 | sala | Szólj hozzá!

Az egyik igen bosszantó dolog abban ha az ember párhuzamosan használ UNIX és Windows rendszereket az, hogy már egy egyszerű szövegfájlnál is problémába ütközhetünk az első sortörésnél, mert a két rendszer eltérően kezeli a sortöréseket. Ha valakit jobban érdekel a dolog történelmi háttere, akkor Jeff Atwood cikkét érdemes elolvasni.

Ha konvertálni szeretnénk a 2 formátum között, akkor dos2unix használata a legegyszerűbb:

dos2unix a.txt

Visszafelé is működik:

unix2dos a.txt

Címkék: unix dos cr lf dos2unix

bash ESC dot

2016.01.04. 10:00 | sala | Szólj hozzá!

Könnyen felhasználhatjuk az előző parancs paramétereit bash-ban az ESC dot segítségével:

$ echo aaaa bbbb cccc dddd
aaaa bbbb cccc dddd

Ha egymás után lenyomjuk az ESC és a pont billentyűket, akkor bash automatikusan a parancssorra másolja az előző parancs utolsó paraméterét (dddd).

A korábbi paramétereket is elérhetjük. <ESC> 1 <ESC> . az első paramétert (aaaa), <ESC> 2 <ESC> . a második paramétert (bbbb) másolja...

Ha a billentyűkombinációt többször egymás után használjuk, akkor a korábbi parancsok paramétereit érjük el. Vagyis pl. <ESC> . <ESC> . az utolsó előtti parancs utolsó paraméterét adja vissza.

Több helyen ESC dot helyett META dot-ként hivatkoznak erre. Nekem Meta (vagyis Alt) billentyűvel ez nem igazán működik. Van olyan terminál ahol egyáltalán nem megy, van olyan ahol csak az Alt-. megy.

Címkék: meta bash ESC

startx

2016.01.01. 10:00 | sala | Szólj hozzá!

Szerencsére egyre ritkábban kell manuálisan indítanom az X-et, de néha azért szükség van erre:

startx

Egy igen hasznos funkciója startx-nek (mint azt nemrég sajnálatos módon pár óra bugkeresés után megtanultam) az, hogy megadhatjuk, hogy melyik ablakozót indítsa el. Ha valamiért nem indul el rendesen a bonyolultabb ablakozónk (Gnome, KDE, ...) akkor érdemesebb egy egyszerűbbel próbálkozni. Nálam ez (történelmi okokból) az icewm-light:

startx /usr/bin/icewm-light

Fontos, hogy a teljes elérési utat meg kell adni.

Címkék: icewm X startx icewm-light

systemd-analyze

2015.12.29. 10:00 | sala | Szólj hozzá!

Ha lassan bootol a számítógépünk, akkor systemd-analyze segítségével kaphatunk részletes információt. Lekérdezhetjük a bootolás hosszát:

$ systemd-analyze
Startup finished in 6.697s (kernel) + 20.050s (userspace) = 26.748s

Részletesen kilistázhatjuk, pontosan mi is indul lassan:

$ systemd-analyze blame
         12.849s network-up.service
          6.058s systemd-suspend.service
          2.023s mandriva-everytime.service
          1.909s shorewall6.service
          1.436s fedora-storage-init.service
          1.036s shorewall.service
          ...

Valójában persze a folyamatok részben párhuzamosan indulnak, így igazából akkor van csak gond, amikor egymásra épülő szolgáltatások tartják fel egymást:

$ systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @20.049s
└─multi-user.target @20.048s
  └─shorewall6.service @18.139s +1.909s
    └─network.target @18.137s
      └─network-up.service @5.286s +12.849s
        └─basic.target @5.285s
          └─mandriva-everytime.service @3.262s +2.023s
            └─local-fs.target @3.261s
              └─run-user-500-gvfs.mount @19.243s
                └─local-fs-pre.target @555ms
                  └─systemd-remount-fs.service @291ms +263ms
                    └─systemd-readahead-replay.service @216ms +67ms

Ha grafikusan szeretnénk áttekinteni a bootolás folyamatát:

systemd-analyze plot > plot.svg

Címkék: boot systems systemd-analyze

pdf készítése képekből - A4

2015.12.14. 10:00 | sala | Szólj hozzá!

Jópár évvel ezelőtt írtam, hogy képekből így lehet pdf-et készíteni:

convert *.jpg kepek.pdf

A módszer egyik hátránya, hogy nem mondjuk meg, mekkora oldalak vannak a pdf-ben, ami néhány pdf megjelenítő vagy nyomtató programban gondot okozhat.

Ha egyértelművé akarjuk tenni, hogy A4-es oldalat szeretnék 150dpi-vel akkor kicsit bővebb parancsra van szükségünk:

 convert *.jpg -resize 1241x1756 -units PixelsPerInch -density 150x150 -repage 1241x1756 kepek.pdf

A webes példákban többnyire 1240x1754-es, 1240x1753-as felbontás szerepel, de amikor utánaszámoltam, nekem 1241x1756 jött ki.

 

Címkék: pdf jpeg imagemagick A4