Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Chytrému napověz i potřetí...

Již potřetí se setkáváme u nepravidelného seriálu plného různých (doufám) užitečností, které by měly alespoň trochu ulehčit každodenní otročinu v Linuxu.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious
Oboustranný tisk

První vychytávkou, kterou si dnes ukážeme, je jednoduchý skript na oboustranný tisk:

Soubor print2p:

#!/bin/bash
FILE=${1?"První argument musí být název PostScriptového souboru!"}
MAGN=${2:-1}

echo "Tisknu liché stránky..."
mpage -$MAGN -o -bA4 -r -j 1%2 "$FILE" | lpr
echo -n "Vložte vytištěné stránky zpět do "
echo "tiskového zásobníku a stiskněte ENTER."
read
echo "Tisknu sudé stránky..."
mpage -2 -o -bA4 -j 2%2 "$FILE" | lpr

Skript je určen hlavně pro uživatele, kteří tiskárnu používají sami. Pokud tisknete na nějaké vzdálené mašince, musíte nějak zajistit, aby se mezitím nepokusil tisknout ještě někdo jiný…

Uvedený prográmek očekává dva argumenty: název tištěného souboru a nepovinně také poměr zmenšení. Tak například volání:

print2p soubor.ps

vytiskne soubor soubor.ps tak, že nejprve pošle na tiskárnu jenom liché stránky (odzadu), vyzve uživatele, aby vytištěnou část vložil zpět do tiskového zásobníku, a po stisku Enteru dotiskne odpovídající sudé stránky (od začátku). Takto nakonec dostaneme celý dokument soubor.ps vytištěný pěkně oboustranně.

Zadáme-li

print2p soubor.ps 4

vytisknou se čtyři stránky dokumentu na jednu fyzickou stranu papíru – ovšem rovněž oboustranně. Další možné volby pro druhý argument jsou 1, 2 nebo 8.

Jak jste si jistě všimli, jádrem skriptu je program mpage, který se vlastně stará o všechno. Jeho parametry –1, –2, –4 nebo –8 určují, kolik stran dokumentu se má vytisknout na jednu fyzickou stranu papíru. Pomocí -b se volí výstupní formát papíru (v našem případě A4), -o říká, že nechceme kolem stránek žádné orámování, a -j definuje výběr stran, které se budou tisknout (sudé, nebo liché). Zapomněl jsem ještě na parametr -r, jenž programu mpage přikazuje, aby stránky tisknul v opačném pořadí (od poslední k první).

mpage akceptuje i další volby. Doporučuji vám prostudovat si příslušné manuálové stránky (man mpage).

Konverze manuálových stránek

Možná jste někdy potřebovali zkonvertovat rozličné manuálové stránky do PostScriptu či HTML. Umí to utilitka groff:

groff -mandoc -Tps bash.1 > bash.ps
groff -mandoc -Thtml bash.1 > bash.html

První příkaz zkonvertuje manuálovou stránku bashe do PostScriptu a druhý na HTML stránku…

which & file

Sám na sobě jsem vypozoroval, že když pomocí which zjišťuji, kde se nachází nějaký spustitelný soubor, obvykle potom následuje příkaz file zkoumající, co že je ten soubor zač (jestli kompilovaný program nebo nějaký čitelný skriptík). Mnoho zbytečných úhozů na klávesnici mi pak ušetří následující banalita, kterou jsem si nazval whfile:

#!/bin/bash
C=${1?"První argument musí být název programu!"}
X=`which "$C"` && file -b "$X" && ls -la "$X"

Tak například volání:

whfile bash

dá na výstup podrobné informace o interpretu bashe:

/bin/bash
ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked (uses shared libs), stripped
-rwxr-xr-x    1 root     root       512540 srp 22  2000 /bin/bash

Rozdělování souboru na menší kousky

Ti z vás, kteří jste občas nuceni přenášet kvanta dat mezi počítači na disketách, jste jistě narazili na problém, jak na tato archaická média dostat soubor, který má třeba 10 mega bajtů. Pokud vím, ani gzip ani tar rozkládat archiv na více menších částí neumí. K tomuto účelu byl pány Granlundem a Stallmanem vytvořen příkaz split:

split <VOLBA> [<VSTUP> [<PREFIX>]]

Například příkaz, který následuje, rozdělí soubor archiv.tgz na několik částí o velikosti 100 KB:

split -b 100k "archiv.tgz" "archiv.tgz."

Výsledné souborky se budou jmenovat podle zadaného prefixu archiv.tgz.aa, archiv.tgz.ab, archiv.tgz.ac a tak dále.

Možná se vám bude hodit tento malý skriptík, který z adresáře zadaného jako jediný parametr vytvoří zagzipovaný tarovský archiv stejného jména, a ten podle potřeby rozdělí na menší části tak, aby se vešly na diskety:

Soubor pak:

#!/bin/bash

NAME=${1?"První argument musí být jméno pakovaného adresáře!"}
SIZE="1400k"  # DOS-formátované (-23 kB na vadné sektory)

if [ -d "$NAME" ]; then
  ARCHIVE=`basename "$NAME"`
  tar -cvz "$NAME" | split -b "$SIZE" - "${ARCHIVE}.tgz."
fi

Spojení souborů do původního archivu by měl zajistit příkaz:

cat archiv.tgz.* > archiv.tgz

Další věcí, která mě asi nejvíce irituje, je kopírování těchto souborů na diskety. Při ručním přesouvání to je samé mount a umount, však to znáte. Kdysi v minulých dílech jsme řešili kopírování z disket a dnes vám ukážu jeden ze způsobů, jak jít opačnou cestou – tedy automatizovaně dostat soubory na diskety:

#!/bin/bash

FLOPPY=/mnt/floppy

while [ "$1" != "" ]; do
  echo "Vložte prosím disketu a stiskněte ENTER (CTRL+C=přerušit)"
  read
  mount "$FLOPPY"
  mv -iv "$1" "$FLOPPY"
  umount "$FLOPPY"
  shift
done

Uvedený skript je velice jednoduchý. Hodí se takřka jen na výstupy nějakého splitu. Každý soubor, který zadáte jako parametr, přesune na novou disketu. Bylo by hezké jej udělat tak, aby si kontroloval velikosti kopírovaných souborů a ukládal na diskety trochu inteligentněji. Já jsem ale příliš sexy, abych se tím zabýval. :-)

Tímto prográmkem se také pro dnešek rozloučíme. Doufám, že jste v mých prostinkých výtvorech nalezli něco zajímavého, nebo že vás alespoň trochu inspirovaly.

Michal Burda

Michal Burda

Michal Burda vystudoval informatiku a aplikovanou matematiku a nyní pracuje na Ostravské univerzitě jako odborný asistent. Zajímá se o data mining, Javu a Linux.

Školení: Linux – Zálohování, Vysoká dostupnost, SNMP dohled

Na třídenním školení se naučíte nainstalovat a spravovat systém zálohování, replikace dat a vysoké dostupnosti dat. Dále také pracovat s RAID a LVM poli a nainstalovat a spravovat si vlastní dohledový systém.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 3,08

Přehled názorů

bugreport
DeepBlue 2. 11. 2001 02:17
Nový
└ 
Re: bugreport
Michal Burda 5. 11. 2001 08:29
Nový
super clanek
zacatecnik 2. 11. 2001 07:54
Nový
tar
Beda Kosata 2. 11. 2001 08:46
Nový
├ 
Re: tar
Eso Rimmer 2. 11. 2001 10:13
Nový
└ 
tar - pomoci prepinace "M" a pomoci "L" lze
anonymní uživatel 3. 11. 2001 23:11
Nový
man a mtools
martin 2. 11. 2001 12:22
Nový
disketa? /dev/fd0!
Tomas Zellerin 2. 11. 2001 13:45
Nový
└ 
Re: /dev/fd0? /dev/fd0u1760!
Michal Bozon 2. 11. 2001 13:58
Nový
 
└ 
Re: /dev/fd0? /dev/fd0u1760!
Pavel Palat 3. 11. 2001 14:36
Nový
multiarchiv
Pavel Riha 7. 11. 2001 10:33
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem