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 (2) AES (1) afzcamCreator (1) agrep (1) ajánló (1) alias (2) alkönyvtár (4) android (1) animgif (1) apropos (1) audio (2) avi (6) awk (1) backup (4) badblocks (1) basename (3) bash (18) bash completion (1) battery (1) bc (1) blkid (1) boot (3) brute force (1) bug (1) bzip2 (2) cab (1) cal (1) calibre (4) calibredb (1) camera (1) capability (1) cat (2) cd (4) cdialog (2) checkinstall (2) cikkajánló (1) ciklus (1) címke (2) cksum (1) clipboard (1) cmdtools (1) colordiff (1) column (1) commandlinefu (1) convert (8) corel aftershot pro (1) cp (1) 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) defrag (1) df (1) dia (1) dialog (2) diff (6) digitális fénykép (14) dircolors (1) dirty cow (1) dlna (1) dmidecode (1) dng (2) dos (2) dos2unix (1) dropbear (1) dropbox (1) dt3 (1) du (3) 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 (2) energiagazdálkodás (1) enfuse (2) Enigma (1) epub (2) ESC (1) espeak (1) exe (1) exif (6) exiftool (12) 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 (11) filefrag (1) find (6) for (3) format (1) fortune (1) fred weinhaus (1) fuse (4) fuse-lgefs (1) fzf (1) gdatafs (1) genisoimage (3) getcap (1) getfacl (1) getmail (1) ghostscript (1) gif (1) glances (1) gnumeric (1) gnuplot (1) gömb (1) google (1) google drive (1) GPAC (1) gparted (2) gpg (3) gpg-zip (1) gplaycli (1) gps (3) 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) hangosítás (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) if (1) ifconfig (2) ifs (1) igo (1) imagemagick (12) imap (1) index (1) install (1) iotop (1) iperf (1) iso (3) java (2) jelszó (5) jhead (1) 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) kernel (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 (2) linuxvilág (1) lm sensors (1) log (1) losetup (1) ls (3) lsof (1) LS COLORS (1) lzw (1) mac address (2) mad (1) mail (1) mailbox (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 (6) 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) pass (1) patch (2) pbzip2 (3) pdf (8) pdfcrack (1) pdfjam (1) pdfnup (1) pdftk (2) pendrive (1) pentax (6) perl (1) 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) port (1) process (4) pushd (2) pv (3) pwgen (1) python (1) qimport (1) qpd (1) qr (2) qrencode (2) quotedprintable (1) random (1) randr (1) recode (2) 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 (2) sane (1) scanimage (1) screenshot (1) script (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 (3) tömörítés (4) top (2) töredezettségmentesítés (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) upower (1) 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) vid.stab (1) 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 (2) 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ő

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

mad

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

A szövegfájl egyszerűségével nehéz vetélkedni, de ha egy kicsit is összetettebb dokumentációt írunk, akkor azért hiányzik az, hogy kiemeljünk részeket, felsorolásokat szúrjunk be...

Rengeteg bonyolultabb formátum van ahol szabadon formázhatjuk a szöveget (pl. HTML), de ezek többnyire túl összetettek ahhoz, hogy nyersen editáljuk őket. Pláne nem várhatjuk el ezt egy egyszerű felhasználótól.

A markdown formátumról én a Stackoverflownál hallottam először, nagyon sokan a GitHub README.md fájloknál csodálkoznak erre rá.

Bár a markdown formátum lényege pont az, hogy nyersen is igen jól olvasható, azért hasznos egy parancsoros markdown viewer, a sok közül én a mad-et próbáltam ki:

$ mad README.md

Címkék: text mad markdown

checkinstall nagyon egyszerű projecteknél

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

Írtam már a checkinstallról, amivel rpm (deb, ...) csomagot készíthetünk egy olyan projectből ami make install segítségével települne fel, kikerülve a csomagkezelőt.

Vannak olyan egyszerű projectek, ahol még make install sincsen, jellemzően egyetlen futtatható fájl keletkezik, és azt kézzel kell átmásolni a /usr/local/bin (vagy ~/bin) alkönyvtárba.

Ezeknél a projecteknél is használható checkinstall. Példaként installáljuk a qimport fájlt a /usr/local/bin alkönyvtárba:

checkinstall install -m 0755 qimport /usr/local/bin

A parancs legyártja a /home/user/rpmbuild/RPMS/x86_64/qimport-20151128-1.x86_64.rpm csomagot, amit utána már könnyen installálhatunk.

Többnyire -s (strip) kapcsolót is szoktam használni install parancsnál, de valamiért checkinstall ezt nem szereti.

Címkék: checkinstall install rpm

DNG tömörítés

2015.11.29. 10:00 | sala | 1 komment

A Pentax elég régóta támogatja a DNG fájlformátumot, Többek között nyilván azért, mert a saját PEF formátumukat nem tudták eléggé elterjeszteni. Nagyon sok fényképezőgépük képest DNG-be menteni. Eleinte tömörítetlen DNG-t gyártottak, később már veszteségmentesen tömörítettet. Számomra kissé furcsa módon a Q sorozat gépei újra tömörítetlen DNG-be mentenek.

Ha helyet szeretnénk spórolni, akkor a qimport segítségével konvertálhatjuk a tömörítetlen DNG fájlokat tömörített DNG fájlokká. Ha szükséges, akkor a visszafelé konverziót is elvégezhetjük:

$ qimport imgp2584.dng imgp2584_compressed.dng
$ qimport --reverse imgp2584_compressed.dng imgp2584_uncompressed.dng

A program JPEG tömörítést használ, de nem kell kétségbeesni, veszteségmentes jpegről van itt szó, Huffman-kódolást használ a program.

Bár a program neve arra utal, hogy a Pentax Q sorozat DNG fájljait tudja kezelni, a kódot megnézve nekem úgy tűnik más (12 bites) DNG fájlokkal is boldogul.

Címkék: pentax dng qimport

pdf jelszó feltörése

2015.11.23. 10:00 | sala | 2 komment

Nemrég írtam arról, hogyan adhatunk jelszóvédelmet egy pdf fájlhoz, adódik a kérdés, hogyan törhetjük ezt fel. Az előző példában használt 1234 jelszót elég gyorsan (laptopomon 5 perc) feltörhetjuk pdfcrack segítségével:

$ pdfcrack titok_jelszo.pdf

PDF version 1.5
Security Handler: Standard
V: 2
R: 3
P: -3904
Length: 128
Encrypted Metadata: True
FileID: c2188884ae81630733b6fa0ad14ef5f2
U: d512a0db3b14300dcf3a97c585ca164e00000000000000000000000000000000
O: c48f001fdd79a030d718df6dbbdaad81d1f6fedec4a7b5cd980d64139edfcb7e
Average Speed: 47776.9 w/s. Current Word: '3I9c'
Average Speed: 47711.2 w/s. Current Word: 'LX9g'
Average Speed: 47709.5 w/s. Current Word: 'Vbal'
Average Speed: 47700.9 w/s. Current Word: 'knap'
Average Speed: 47222.0 w/s. Current Word: 'e47s'
Average Speed: 46564.5 w/s. Current Word: '2k2w'
Average Speed: 46664.3 w/s. Current Word: '27WA'
Average Speed: 47224.7 w/s. Current Word: 'OPUE'
Average Speed: 47014.5 w/s. Current Word: 'MrRI'
Average Speed: 47014.7 w/s. Current Word: 'N3NM'
Average Speed: 46364.2 w/s. Current Word: '0hHQ'
Average Speed: 46843.7 w/s. Current Word: 'S0CU'
Average Speed: 46919.4 w/s. Current Word: 'b8yY'
Average Speed: 46733.1 w/s. Current Word: 'mhu2'
found user-password: '1234'

5 perc nem hosszú idő, de azért a kb. 50000 jelszó/másodperc azt is mutatja, hogy egy kicsit hosszabb jelszót már nehezen törne fel a program. Kivéve, ha van valami plusz információnk. Igen gyakran védenek jelszóval pdf fájlt úgy, hogy csak számjegyeket használnak a jelszóban. Megadva ezt az információt pdfcracknek már gyorsabb a törés:

$ pdfcrack titok_jelszo_6.pdf -c 0123456789

PDF version 1.5
Security Handler: Standard
V: 2
R: 3
P: -3904
Length: 128
Encrypted Metadata: True
FileID: b36c321f38d07288f29b3a893a8133db
U: 90844e112863b7c974f5afaaf857107b00000000000000000000000000000000
O: c431fab9dc5ef7b59c244b61b745f71ac5bb427b1b9102da468e77127f1e69d6
found user-password: '123456'

16 másodperc elég az 123456 jelszó megtalálásához.

Megadhatjuk a programnak ezen kívül a jelszó minimális illetve maximális hosszát, képest szólista alapján (password, passw0rd, qwertz, abc123,...) dolgozni. Ha nagyon lassú a törés, akkor a részeredményeket elmenthetjük és később folytathatjuk a munkát. A program egyetlen hiányossága talán az, hogy nem támogatja a többmagos processzorokat.

Ha valaki látja a jelszavát ebben a bejegyzésben, sűrgősen változtassa meg!

Címkék: jelszó pdf pdfcrack