Základní příkazy Unixu: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
m (Filtry: p59klad)
(Ostatní: příloha v mail)
 
(Není zobrazeno 7 mezilehlých verzí od stejného uživatele.)
Řádka 252: Řádka 252:
 
Příklady použití:
 
Příklady použití:
  
  grep 'sd[a-z]$' /proc/partitions    # vypíše seznam pevných disků a jejich velikostí (v KiB)
+
  grep '[hs]d[a-z]$' /proc/partitions    # vypíše seznam pevných disků a jejich velikostí (v KiB)
 +
 
 +
;iconv:
 +
* filtr - konverze kódování
 +
* přepínače:
 +
** <TT>-l </TT> vypíše seznam kódování (cp1250, utf8, iso8859-2, …)
 +
** <TT>-f xx</TT> kódování znaků na vstupu (zadejte místo „xx“)
 +
** <TT>-t </TT> kódování znaků na výstupu
 +
 
 +
Příklady použití:
 +
 
 +
iconv -f cp1250 -t utf8 < vstup.txt > vystup.txt
  
 
== Porovnávání souborů ==
 
== Porovnávání souborů ==
Řádka 263: Řádka 274:
 
;diff soubor1 soubor2:
 
;diff soubor1 soubor2:
 
* porovnává dva soubory po jednotlivých řádcích a hledá rozdíly mezi nimi
 
* porovnává dva soubory po jednotlivých řádcích a hledá rozdíly mezi nimi
* vypisuje změněné řádky, výstup se používá jako vstup pro program patch
+
* vypisuje změněné řádky, výstup se používá jako vstup pro program <code>patch</code>
 
* přepínače:
 
* přepínače:
** <TT>-u </TT> unifikovaný výstup (používá se nejčastěji, modifikované řádky jsou odlišeny znaky plus a mínus, které vyjadřují, zda byl řádek smazán nebo přidán; změněné řádky jsou obklopeny původními,aby se při použití programu patch poznalo, je-li zpracovávaný soubor ve stavu, který byl zachycen programem diff)  
+
** <TT>-u </TT> unifikovaný výstup (používá se nejčastěji, modifikované řádky jsou odlišeny znaky plus a mínus, které vyjadřují, zda byl řádek smazán nebo přidán; změněné řádky jsou obklopeny původními,aby se při použití programu <code>patch</code> poznalo, je-li zpracovávaný soubor ve stavu, který byl zachycen programem diff)  
 
** <TT>-r </TT> rekurzivní běh  
 
** <TT>-r </TT> rekurzivní běh  
 
** <TT>-N </TT> zahrnuty i nové soubory  
 
** <TT>-N </TT> zahrnuty i nové soubory  
Řádka 289: Řádka 300:
 
* přepínače:
 
* přepínače:
 
** <TT>-123 </TT> potlačí výstup příslušného sloupce (např. -13 propustí na standardní výstup pouze druhý sloupec)
 
** <TT>-123 </TT> potlačí výstup příslušného sloupce (např. -13 propustí na standardní výstup pouze druhý sloupec)
 +
 +
;patch:
 +
* nástroj na zahrnutí změn podle výstupu nástroje <code>diff</code> do zvoleného souboru
 +
** <TT>-b přípona</TT> uložit zálohu souboru s udanou příponou
 +
** <TT>-R </TT> reverzní změna (též pokud někdo porovnal příkazem <code>diff</code> soubory obráceně)
  
 
== Ostatní ==
 
== Ostatní ==
 +
 +
;clear:
 +
* smazání obrazovky (lze použít i kombinaci kláves CTRL+l)
  
 
;mail příjemce:
 
;mail příjemce:
 
* odeslání e-mailu, parametrem je e-mailová adresa příjemce
 
* odeslání e-mailu, parametrem je e-mailová adresa příjemce
* interaktivním režimu se zeptá na příjemce, subjekt a tělo e-mailu
+
* nejsou-li poskytnuty potřebné údaje, přepne se do interaktivního režimu, a v něm se zeptá na příjemce, subjekt a tělo e-mailu
* přepínač:
+
** subjekt a příjemce je možné specifikovat na příkazovém řádku
 +
** tělo e-mailu lze předat na standardní vstup
 +
* přepínače:
 +
** <code>-s </code> určení subjektu (víceslovný do uvozovek)
 +
** <code>-a </code> určení souboru s přílohou, lze opakovat pro zadání více příloh (podpora jen v novějších verzích příkazu <code>mail</code>)
 +
 
 +
mail -s "Test 1" rene.huzva@pslib.cz < /etc/motd            # tělo je soubor /etc/motd
 +
echo Tělo e-mailu | mail -s "Test 2" rene.huzva@pslib.cz    # tělo je standardní vstup skrze rouru od příkazu echo
 +
 
 +
;mutt:
 +
* klient pro čtení/posílání elektronické pošty
 +
* příjemce je zadán jako parametr
 
** <code>-s </code> určení subjektu (víceslovný do uvozovek)
 
** <code>-s </code> určení subjektu (víceslovný do uvozovek)
 +
** <code>-a </code> určení souboru s přílohou, lze opakovat pro zadání více příloh
 +
* pokud je <code>mutt</code> spuštěn v interaktivním režimu, spouští se pro vytvoření zprávy standardně editor VI, a proto je vhodné před spuštěním nastavit proměnnou prostředí <code>EDITOR</code> (nebo <code>VISUAL</code>)
  
Např.: <code>echo kuk | mail -s "Test 1" rene.huzva@pslib.cz
+
mutt -s "Test 2" -a /etc/passwd rene.huzva@pslib.cz < telo-emailu.txt
 +
export EDITOR=mcedit
 +
mutt -s "Test 2" -a /etc/passwd rene.huzva@pslib.cz  
  
 
[[Kategorie:Práce s Linuxem]]
 
[[Kategorie:Práce s Linuxem]]

Aktuální verze z 27. 2. 2015, 08:43

Základní příkazy Unixu obsahují příkazy, které umožňují efektivně pracovat v příkazovém řádku, zejména při zpracování textových dat. V seznamu jsou postupně představeny různé kategorie příkazů. Text je součástí série článků Práce s Linuxem. Čtenář zde navazuje na předchozí články (zejména Příkazový řádek v Unixu a Základní informace o systému). Základní zde uvedené příkazy jsou využity v dalších článcích (BASH: Přesměrování, BASH: Kolony).

Příkazy pro práci s adresáři

ls [cesta]
  • výpis obsahu adresáře
  • přepínače:
    • -a vypíše všechny soubory v adresáři včetně souborů, které začínají tečkou (tzv. skryté soubory)
    • -l dlouhý výpis (včetně práv, počet hardlinek, vlastníka, skupiny, délky, času poslední modifikace)
    • -t setřídí výpis podle data poslední modifikace, od nejnovějších ke starším
    • -u setřídí výpis podle času posledního přístupu k souboru, od nejnovějších ke starším
    • -r opačný způsob třídění
    • -F přidat znak k souborům určující jejich typ, normálním nic (spustitelný*, adresář/, symbolická linky@, FIFO|, socket=)
    • -R rekurzivní výpis podadresářů
    • -L vypsat soubor, na který ukazuje linka místo linky samotné (kombinace -RL jde i za linky)
    • -d vypíše adresáře jako ostaní soubory místo jejich obsahu
    • -f netřídit obsah adresáře
    • -i vypíše číslo i-nodu každého souboru
mkdir [adresář]
  • vytvoření adresáře
  • přepínače:
    • -p rekurzivní vytváření (více adresářů najednou)
rmdir [adresář]
  • smazání adresáře
  • adresář musí být prázdný (mazání neprázdných adresářů - viz: rm -r)
cd [adresář]
  • změna aktuálního adresáře
  • bez parametru přepne do domácího adresáře
cd dir     přepne do adresáře se jménem dir (absolutní nebo relativní cesta)
cd ..      přepne do nadřízeného adresáře
cd -       přepne do adresáře, ve kterém jsme byli naposledy (krok zpět)
cd ~/dir   označuje adresář dir ve vlastním domácím adresáři
cd ~huzva  označuje domácí adresář uživatele s přihlašovacím jménem huzva
pwd
  • výpis aktuálního adresáře
du
  • vypíše obsazený prostor (výsledek v kB)
  • přepínače
    • -s spočítat jen výsledek za celý podstrom adresářů
    • -h výstup v jednotkách (kB, MB, GB apod.)

Příkazy pro práci se soubory

cp [soubor1] [cílové_jméno]
cp [soubor1] [soubor2] [soubor3] ... [cílový adresář]
  • kopírování souboru(ů), cíl musí být vždy uveden (tečka označuje aktuální adresář)
  • přepínače:
    • -r rekurzivní kopírování podadresářů
    • -i interaktivní (při přepisu souboru se ptá)
    • -a zachovává čas, vlastníka, skupinu, přístupová práva (používá se k archivaci)
mv [původní_jméno] [nové_jméno]
  • přejmenování souboru a jeho případný přesun
  • přesouvat adresáře lze jen v rámci jednoho filesystému (jednoho oddílu, resp. partition - jinak je nutné soubory kopírovat)
rm [soubor]
  • smazání souboru
  • přepínače:
    • -i interaktivní (každé mazání bude vyžadovat souhlas uživatele)
    • -f na nic se neptej a mazej
    • -r rekurzivní mazání včetně podadresářů
SMRTELNÉ: rm -rf .* (vyhoví i dvě tečky - příkaz maže i v nadřízených adresářích)
 SPRÁVNĚ: rm -rf .[^.]*
hexdump [soubor]
  • hexadecimální výpis bajtů v souboru
  • přepínače:
    • -C kromě hexadecimálního výstupu vypíše i ASCII reprezentaci znaků (kromě řídících znaků)
find [adresář] [podmínka] [operace]
  • rekurzivní prohledávání stromu adresářů a souborů
  • podmínka:
    • -name soubor nalezení souboru dle jména. Lze použít metaznaky *,?,[], musí však být uzavřeny do apostrofů nebo uvozovek nebo uvozeny zpětným lomítkem, aby byly interpretovány příkazem find a ne expandovány shellem. Varianta -iname soubor ignoruje velká/malá písmena
    • -user jméno hledá se soubor, jehož vlastníkem je uživatel jméno
    • -type typ hledá soubory daného typu, kde typ nabývá hodnoty:
      • f obyčejný soubor
      • d adresář
      • l linka
    • -atime n hledají se soubory, ke kterým bylo před n dny naposledy přistupováno
    • -mtime n hledají se soubory, do kterých byl před n dny proveden poslední zápis
    • -links n hledá se soubor se specifikovaným počtem odkazů (linků)
    • -size n hledají se soubory o velikosti n jednotek, kde jednotka je standardně 512 bajtů nebo se dá určit písmenem, které následuje těsně za číslem:
      • c v bajtech
      • k v kilobajtech
    • -a operátor logického součinu ("a")
    • -o operátor logického součtu ("nebo")
    • ! negace
  • pokud je před číselným výrazem (výše označeno jako n) uveden znak + (plus), znamená to že se budou hledat soubory, u nichž kritérium přesahuje danou hodnotu. Pokud je před číselným výrazem znak - (mínus), budou se hledat soubory s kritériem nedosahujícím danou hodnotu.
  • operace:
    • -print zobrazení jmen souborů, které byly vybrány (GNU find nalezené soubory zobrazuje i bez tohoto parametru)
    • -exec příkaz se soubory vybranými podle kritéria bude proveden uvedený příkaz, ve kterém znaky {} reprezentují jméno vybraného souboru, text příkazu musí být ukončen mezerou, zpětným lomítkem a středníkem \;
# nalezení souborů, které mají v názvu obsažen řetězec „conn“
find /proc -name \*conn\*
# nalezení souborů, které byly čteny nejdéle před 60 minutami
find /etc -type f -amin -60
# vypsání adresářů, které nepatří skupině „root“
find /etc -type d -not -group root -exec ls -ld {} \;

Textové utility

cat [soubor]
  • vypsání obsahu souboru
  • přepínače:
    • -n očíslovat na výstupu řádky (viz též příkaz nl)
tac [soubor]
  • vypsání obsahu souboru s obráceným pořadím řádků
head [soubor]
  • výpis začátku souboru (stadardně 10 řádků)
  • přepínače:
    • -číslo počet vypsaných řádků od začátku souboru
    • -c číslo počet vypsaných bajtů od začátku souboru
tail [soubor]
  • výpis konce souboru (stadardně 10 řádků)
  • přepínače:
    • -číslo počet vypsaných řádků od konce souboru
    • -cčíslo počet vypsaných bajtů od konce souboru
    • -f na konci souboru čekej a zobrazuj přírustky
file [soubor]
  • určí typ souboru podle jeho obsahu (spustitelný, GIF, ZIP, text, prázdný, linka, ...)
  • definice typů je v souboru /etc/magic (resp. /usr/share/magic)
stat [soubor]
  • vypíše obsah inodu (vlastník, poslední změna souboru a inodu, velikost, přístupová práva, atd.)
strings [soubor]
  • vypíše řetězce z binárního souboru
wc [soubor]
  • vypíše počet řádků, slov a písmen v souboru
  • přepínače:
    • -l počet řádků
    • -w počet slov
    • -c počet znaků
touch [soubor]
  • mění datum poslední modifikace souboru
  • když soubor neexistuje, je vytvořen nový s nulovou délkou
  • přepínače:
    • -t MMDDhhmm[[SS]RR][.ss] použít tento čas
cut [soubor]
  • vertikální řez souborem
  • přepínače:
    • -bpozice pozice vyříznutí podle sloupců počítáno od 1
    • -fpoložky položky (implicitní oddělovač je tabelátor)
    • -dznak definuje znak jako oddělovač položek (tj. jiný, než tabelátor)
  • tvar seznamu položek (pozic):
    • 2-5 druhá až pátá položka (pozice)
    • -5 první až pátá položka (pozice)
    • 1,7 první a sedmá položka
nl [soubor]
  • očíslovat řádky souboru (výstupu)
join [soubor1] [soubor2]
  • tiskne na výstup odpovídající řádky obou souborů podle společné identifikace
  • přepínače:
    • -1 sloupec z prvního souboru slučovat podle identifikace ze zadaného sloupce
    • -2 sloupec z druhého souboru slučovat podle identifikace ze zadaného sloupce
    • -t oddělovač použít jiný oddělovač v vstupních a výstupních souborech

Filtry

less [soubor] ...
  • vstup opisuje na výstup po stránkách, lepší a novější varianta příkazu more
  • název je slovní hříčka: program méně umí více, než program více, který toho umí méně, než program méně (more znamená anglicky více a less znamená méně)
  • ovládací klávesy:
    • mezera posun o stránku vpřed
    • b posun o stránku zpět
    • q konec programu
    • :n skočí na následující soubor uvedený na příkazové řádce
    • /řetězec hledat řetězec směrem dopředu
    • ?řetězec hledat řetězec směrem dozadu
    • n hledat další výskyt řetězce (v původním směru hledání)
    • N hledat další výskyt řetězce v opačném směru, než bylo zadáno původní hledání
    • F čeká a zobrazuje přírustky v souboru - obdoba příkazu tail -f soubor
dos2unix
  • provádí konverzi DOSového formátu konce řádku - znaky CR (Carriage Return - návrat vozíku tiskárny, kód 0x0D hexadecimálně, resp. 13 decimálně) a LF (Line Feed - posun papíru v tiskárně o jeden řádek, tj. 0x0A hexadecimálně, resp. 10 decimálně) do formátu konce řádků v Unixu (jen znak CR)
dos2unix soubor.txt
dos2unix < soubor.dos > soubor.unx 
unix2dos
  • provádí konverzi z Unixového formátu konce řádku (znak LF) na formát DOSu (znaky CR a LF)
tee [soubor]
  • filtr - opisuje vstup do souboru a zároveň na obrazovku
  • přepínače:
    • -a nový text se připojí na konec souboru
sort [+číslo] [přepínače] [soubor]
  • filtr - třídění vstupu
  • přepínače:
    • -n setřídění numerické (pokud jsou číselné hodnoty)
    • -r setřídění sestupné
    • -b ignorovat počáteční mezery
    • -f nebudou se rozlišovat malá a velká písmena (velká písmena jsou převáděna na malá)
    • -k číslo určuje sloupec, od kterého se posuzuje pořadí při třídění (číslovány od 1)
    • -k číslo1,číslo2 určuje rozsah sloupců pro třídění
    • -tznak určení znaku, který odděluje jednotlivé sloupce
    • -u z výstupního souboru budou vyloučeny duplicitní řádky (pro posouzení duplicit se porovnávají pouze klíče)
uniq [paramery] [soubor]
  • filtr - odstraňuje duplicitní řádky ze setříděného vstupu
  • přepínače:
    • -číslo přeskočí se zadaný počet řádků od začátku
    • -u budou se vypisovat pouze řádky, které nejsou duplicitní
    • -d budou se vypisovat pouze řádky, které jsou duplicitní
    • -c na začátku každého řádku se vypíše počet výskytů
grep [výraz] [soubor]
  • hledá výraz v souboru a vypisuje řádky, které ho obsahují
  • přepínače:
    • -c vypíše počet řádků, ve kterých byl nalezen vzor
    • -i ignoruje rozdíly mezi malými a velkými písmeny
    • -l zobrazuje pouze jména souborů, ve kterých byl nalezen vzor
    • -n zobrazí čísla řádků obsahujících vzor
    • -s potlačen chybový výstup
    • -v vypíše řádky neobsahující vzor
    • -r rekurzivní hledání v podadresářích
    • -q nalezený řádek se nevypisuje - používá se např. v testech ve skriptech, kde jen testujeme návratový kód, tj. nalezeno - pravda (0), nenalezeno - nepravda (1)
  • při specifikaci hledaného řetězce lze použít regulární výraz, ve kterém lze použít následující speciální znaky (doporučuji zapisovat regulární výraz do uvozovek či apostrofů):
^  začátek řádku 
$  konec řádku 
.  libovolný znak 
*  libovolný počet opakování předchozího znaku 
[] právě jeden znak z množiny znaků uvedených v těchto závorkách, při specifikaci lze použít následující dva speciální znaky:
-  používá se pro označení intervalu znaků z množiny ASCII (např. a-z, 0-9) 
^  negace výčtu znaků 
\  potlačení speciálního významu následujícího znaku 

Příklady regulárních výrazů:

^#         řádky začínající znakem křížek (hash)
^$         prázdné řádky
^.$        řádky obsahující právě jeden znak
^[a-z]*$   řádky obsahující pouze malá písmena
\.[0-9]    výraz označuje tečku následovanou číslicí

Příklady použití:

grep '[hs]d[a-z]$' /proc/partitions    # vypíše seznam pevných disků a jejich velikostí (v KiB)
iconv
  • filtr - konverze kódování
  • přepínače:
    • -l vypíše seznam kódování (cp1250, utf8, iso8859-2, …)
    • -f xx kódování znaků na vstupu (zadejte místo „xx“)
    • -t kódování znaků na výstupu

Příklady použití:

iconv -f cp1250 -t utf8 < vstup.txt > vystup.txt

Porovnávání souborů

cmp
  • porovnává dva soubory po jednotlivých bajtech, ohlásí první rozdílný bajt
  • přepínače:
    • -s potlačení výstupu o nalezených odchylkách
diff soubor1 soubor2
  • porovnává dva soubory po jednotlivých řádcích a hledá rozdíly mezi nimi
  • vypisuje změněné řádky, výstup se používá jako vstup pro program patch
  • přepínače:
    • -u unifikovaný výstup (používá se nejčastěji, modifikované řádky jsou odlišeny znaky plus a mínus, které vyjadřují, zda byl řádek smazán nebo přidán; změněné řádky jsou obklopeny původními,aby se při použití programu patch poznalo, je-li zpracovávaný soubor ve stavu, který byl zachycen programem diff)
    • -r rekurzivní běh
    • -N zahrnuty i nové soubory
  • popis standardního výstupu programu (unifikovaný formát viz výše):

Ve výpisu je nejdříve údaj o typu a rozsahu nalezených změn, poté následuje výpis řádek z obou souborů: znak < označuje řádky prvého souboru, znak > označuje řádky druhého souboru. Údaj o typu a rozsahu změn má tuto strukturu m x n, kde:

m  označuje čísla řádek prvního souboru 
n  označuje čísla řádek druhého souboru 
x  může nabývat hodnot:
a  přidání řádků k prvnímu souboru 
d  zrušení řádků z druhého souboru 
c  změna znaků na řádcích 

Např. zápis 8,20 c 8,22 označuje že na řádcích 8 až 20 z prvního souboru byly provedeny změny, které jsou zapsány na řádcích 8 až 22 druhého souboru (současně byly dva řádky vloženy).

comm [-123] soubor1 soubor2
  • zjišťuje, které řádky ve dvou setříděných souborech jsou stejné
  • výstup obsahuje tři vzájemně se prolínající sloupce s následujícím významem:
    • 1. sloupec - řádek je v prvním souboru, není ve druhém
    • 2. sloupec - řádek je ve druhém souboru, není v prvním
    • 3. sloupce - řádek je v obou souborech
  • přepínače:
    • -123 potlačí výstup příslušného sloupce (např. -13 propustí na standardní výstup pouze druhý sloupec)
patch
  • nástroj na zahrnutí změn podle výstupu nástroje diff do zvoleného souboru
    • -b přípona uložit zálohu souboru s udanou příponou
    • -R reverzní změna (též pokud někdo porovnal příkazem diff soubory obráceně)

Ostatní

clear
  • smazání obrazovky (lze použít i kombinaci kláves CTRL+l)
mail příjemce
  • odeslání e-mailu, parametrem je e-mailová adresa příjemce
  • nejsou-li poskytnuty potřebné údaje, přepne se do interaktivního režimu, a v něm se zeptá na příjemce, subjekt a tělo e-mailu
    • subjekt a příjemce je možné specifikovat na příkazovém řádku
    • tělo e-mailu lze předat na standardní vstup
  • přepínače:
    • -s určení subjektu (víceslovný do uvozovek)
    • -a určení souboru s přílohou, lze opakovat pro zadání více příloh (podpora jen v novějších verzích příkazu mail)
mail -s "Test 1" rene.huzva@pslib.cz < /etc/motd             # tělo je soubor /etc/motd
echo Tělo e-mailu | mail -s "Test 2" rene.huzva@pslib.cz     # tělo je standardní vstup skrze rouru od příkazu echo
mutt
  • klient pro čtení/posílání elektronické pošty
  • příjemce je zadán jako parametr
    • -s určení subjektu (víceslovný do uvozovek)
    • -a určení souboru s přílohou, lze opakovat pro zadání více příloh
  • pokud je mutt spuštěn v interaktivním režimu, spouští se pro vytvoření zprávy standardně editor VI, a proto je vhodné před spuštěním nastavit proměnnou prostředí EDITOR (nebo VISUAL)
mutt -s "Test 2" -a /etc/passwd rene.huzva@pslib.cz < telo-emailu.txt
export EDITOR=mcedit
mutt -s "Test 2" -a /etc/passwd rene.huzva@pslib.cz