Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Blog Coldflake - Unix komandne uslužne linije

Top 10 Unix komandnih


uslužnih linija 2012

Ova godina je bila prilično zauzeta, sa puno velikih ali i stresnih promena u mom profesionalnom i privatnom životu. Zato nisam pronalazio dovoljno vremena za pisanje novih blog postova. Sada kada se godina bliži kraju, želim barem da sumiram neke od Unix komandi, za koje sam, tokom godine, pronašao da su korisne.
Kao prošle godine sastaviću listu 10 Unix komandi iz mnogo veće kolekcije sitnih primera koje sam zabeležio. Lista nema određeni red, samo onako kako su mi bile pri ruci.

1> tr

Kad god je potrebno da napravite neku malu izmenu teksta tr je veoma spretna komanda (tr za (translate, transliterate) prevod ili prevoditi). Potreban je neki ulaz, unesite transformaciju i izbacite rezultat.
tr obuhvata dva parametra, prvi je skup karaktera koji treba prevesti, drugi je skup karaktera koji će biti zamena. Dakle, argument “abc” “123” bi značilo da a biva zamenjen sa 1, b sa 2 i tako dalje.

Kao jednostavan primer, ova linija menja slučajeve karaktera od a do z.

tmp > echo "Hello" | tr "A-Za-z" "a-zA-Z"
hELLO

Realniji primer: razdvojite $PATH u svoje elemente.

tmp > echo $PATH | tr ":" "\n" | sort

    /Users/oliver/.cabal/bin
    /Users/oliver/.rvm/bin
    /Users/oliver/.rvm/gems/ruby-1.9.3-p0/bin
    /Users/oliver/.rvm/gems/ruby-1.9.3-p0@global/bin
    /Users/oliver/.rvm/rubies/ruby-1.9.3-p0/bin
    /Users/oliver/local/node/bin
    /Volumes/macbox_cs/dev/android-sdk-macosx/platform-tools/
    ...

2> sort

Jednostavna komanda za sortiranje ulaza na različite načine. Po default-u je po alfabetu, ali koristeći -n opciju sortiranje se vrši po numeričkom redu.
tmp > du /bin/* | sort -n -r | head -4
1320	/bin/ksh
1264	/bin/sh
1264	/bin/bash
592	/bin/zsh

sort će uzeti više ulaznih datoteka i za Vas će spojiti i sortirati sve datoteke. Neke od najčešće korišćenih opcija uključuju -r za razvrstavanje obrnutim redosledom i -f za sortiranje neosetljivih slučajeva.

3> uniq

Želite da se oslobodite dvostrukih linija? uniq efikasno rešava ovaj problem. Imajte na umu da ćemo samo uporediti susedne linije zbog ravnopravnosti, pa možda ih želite sortirati pre korišćenja uniq.
Fine opcije: -c će upotrebiti računanje jednakih elemenata pre linije, -u će emitovati samo linije koje se not ponavljaju i -i dalje radi celu stvar neosetljivog-slučaja.

Ovde je primer koji kombinuje tr, sort i uniq tako da možete dobiti frekvenciju svih reči u Wikipedia članku:

tmp > curl http://en.wikipedia.org/wiki/Minimum_spanning_tree \
      | tr -cs "A-Za-z" "\n" | tr "A-Z" "a-z" \
      | sort | uniq -c | sort -n -r

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 93342  100 93342    0     0   279k      0 --:--:-- --:--:-- --:--:--  323k
1031 a
 568 span
 442 href
 435 class
 308 li
 300 b
 284 title
 229 wiki
 211 the
 209 cite
 206 id
 192 spanning
 184 i
 169 tree
 166 minimum
 ...

Obuhvata html-stranicu na Wikipediji i pre same odredbe dešavaju se određeni procesi koji koriste tr:
tr -cs "A-Za-z" "\n" — podela svih ne-alfabetnih karaktera
tr "A-Z" "a-z" — učiniti sve malim slovima
sort | uniq -c — sortiranje, uklanjanje dup-ova ali pamćenje računa
sort -n -r — numeričko sortiranje obrnutim redosledom

4> split and cat

Opet, vrlo jednostavna naredba, ali iznenađujuće od pomoći. Ovo je primer koji deli veliku datoteku na komade od 75 MB:

split -b 75m input.zip

Rezultat je gomila datoteka koje su imenovane sa 3 slova počevši od xaa,xab,…
Za ponovno sastavljanje, sve te datoteke moraju biti spojene po alfabetu.

cat `ls x*` > reassembled.zip

Zatim sledi brza provera, kako bismo bili sigurni da smo završili sa istim sadržajem.

tmp > ls *.zip | xargs md5
MD5 (input.zip) = d760b448595f844b1162eaa3c04f83d8
MD5 (reassembled.zip) = d760b448595f844b1162eaa3c04f83d8

5> substitution operations

Operacije sa više datoteka su vrlo česte. Nekoliko puta sam se našao u situacijama kada mi je bilo potrebno da izdvojim audio iz gomile mp4 datoteka.
Pronašao sam dva dobra načina kako ovo rešiti: onaj koji preferiram podrazumeva korišćenje zamenskih operacija:

for i in *.mp4; do ffmpeg -i "$i" "${i%.mp4}.mp3"; done

Substitucioni operator ovde ${i%.mp4} briše najkraći mogući par sa desne strane.
Lepo i sažeto... ali postoji druga varijanta koja je čak malo preciznija i eksplicitnija: pomoću basename

for i in *.mp4; do ffmpeg -i "$i" "`basename $i .mp4`.mp3"; done

6> izračunavanje veličine svih datoteka koje se pronađu pomoću ‘find’

Zasigurno postoji stotine načina da se ovo učini... Meni se dopada kombinacija jednostavnog find sa kratkom i slatkom awk funkcijom:
tmp > find . -iname "*.png" -ls | awk '{s += $7} END {print s}'
2076723
Kao što su neki ljudi na hn istakli awk verovatno nije najjednostavnije rešenje za sumiranje korišćenog prostora. Tako da sam uključio primer nadahnut ovim blogom.
tmp > find . -iname "*.png" -print0 | xargs -0 du -ch | tail -1
2.2M	total

7> df

Klasika. Prikuplja informacije o korišćenju prostora na disku, u Vašem sistemu.

tmp > df -h
Filesystem     Size   Used  Avail Capacity  iused   ifree %iused  Mounted on
/dev/disk0s2  156Gi  138Gi   17Gi    89% 36247400 4528347   89%   /
...

8> dd

U suštini dd je samo oblik kopiranja iz nekog ulaza (input) na neki izlaz (output), (po default-u sa stdin na stdout) koji Vam dozvoljava da konfigurišete veličinu bloka koji se koristi za kopiranje. Udvostručiće bitstream sa svog ulaza. Takođe, čuo sam da ga ljudi zovu data destroyer ’zato što jednostavno možete sami sebi pucati u stopalo, nehotice zamenjujući ulaz i izlaz...
Ispostavilo se da postoji dosta zanimljivih slučajeva korišćenja.

Jedan dobar koji sam pronašao ovde jeste da sigurno obriše Vaš drive: prebrisati celokupan drive sa 0s:

dd if=/dev/zero of=/dev/hda

Sigurniji (znači i teži oporavak) je korišćenje nasumičnih podataka za brisanje drive-a.

dd if=/dev/urandom of=/dev/hda

A za paranoične i Vladu SAD-a, možemo u više navrata isključiti zabavu.

for n in `seq 7`; do dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc; done

Bezbedan MBR

Manje destruktivan primer pokazuje kako kreirati sliku celokupnog master boot record (uključujući tabelu podele).

tmp > dd if=/dev/sda of=MBR.img bs=512 count=1

Ovde count=1 znači kopirati samo jedan ulazni blok, bs=512 postavlja komplet ulaznih i izlaznih veličina u blok od 512 bita.

Generisanje slučajnosti (nasumičnosti)

Ponekad je vrlo zgodno korišćenje dd za generisanje nekih slučajnih podataka za datoteku.

dd if=/dev/random of=random.bin bs=100 count=1

Praćenje napretka

U nekim slučajevima proces koji je počeo s dd će uzeti znatnu količinu vremena. Budući da ne postoje bilo kakve fancy trake praćenja napretka, postoji trik kako biste saznali tok progresa.
Najpre trebate poznavati id procesa u dd procesu.

tmp > pgrep -l '^dd$'
4523 dd

Zatim poslati USR1 signal do dd procesa.

tmp > kill -USR1 4523

Kad dd detektuje USR1 signal, odštampaće trenutne statistike na svom stderr.

tmp > 123122312 bytes (xxx GB) copied, 3965.94 s, 13.9 MB/s

Nakon izveštaja statusa, dd će nastaviti kopiranje. Da bi se proces nastavio koristite watch:

tmp > watch -n 10 kill -USR1 4523

9> zip

Iako preferiram ‘katran’ sa gzip ili bzip2, zip format je široko korišćen, posebno među korisnicima Windows sistema. Zato često koristim zip i unzip takođe. Budući da se radi sasvim drugačije u odnosu na ‘katran’, sastavio sam spisak glavnih slučajeva korišćenja koji su mi potrebni.

Najjednostavniji slučaj: dodati neke datoteke u zip-datoteku (nazvan abc.zip).

zip abc file1 file2 file3

Naravno, takođe možete kopirati celokupan katalog tmp u abc.zip.

zip -r abc tmp

Takođe vrlo zgodno: kreiranje arhiva zaštićenih lozinkom.

zip -e important.zip file1 file2

I na kraju, popis datoteka unutar arhive.

unzip -l a.zip

10> hexdump

Kod rukovanja binarnim datotekama, često je potrebno brzo i letimično pogledati stvarne podatke. Otkrio sam da postojanje malog broja uslužnih komandnih linija može biti vrlo praktično za takve slučajeve. hexdump ima upravo ono što mi je potrebno.

tmp > hexdump  new.zip | head -5
0000000 70 a9 20 8d b1 a3 5c 1c 16 e3 17 b2 ef 94 16 ac
0000010 85 40 59 f9 89 40 45 ed 61 e8 10 f5 6f f5 99 a2
0000020 3a d6 69 62 e0 ab ee 0a 67 b8 c5 21 58 42 4d 52
0000030 2d 78 ae 2a 31 f2 78 c7 1f 22 99 07 e1 6a 55 bb
0000040 68 9a fe 8f c3 e0 e5 a3 4c 7d b3 6b f9 ae de 92

Možete mu se takođe naložiti da prikazuje i odgovarajuću ASCII zastupljenost.

tmp > hexdump -C new.zip | head -5
00000000  70 a9 20 8d b1 a3 5c 1c  16 e3 17 b2 ef 94 16 ac  |p. ...\.........|
00000010  85 40 59 f9 89 40 45 ed  61 e8 10 f5 6f f5 99 a2  |.@Y..@E.a...o...|
00000020  3a d6 69 62 e0 ab ee 0a  67 b8 c5 21 58 42 4d 52  |:.ib....g..!XBMR|
00000030  2d 78 ae 2a 31 f2 78 c7  1f 22 99 07 e1 6a 55 bb  |-x.*1.x.."...jU.|
00000040  68 9a fe 8f c3 e0 e5 a3  4c 7d b3 6b f9 ae de 92  |h.......L}.k....|

Kombinovanje hex i octal izlaza, omogućava brzo povezivanje hex vrednosti u odnosu na njihove octal kolege (parove).

tmp > hexdump -xb new.zip | head -5
0000000    a970    8d20    a3b1    1c5c    e316    b217    94ef    ac16
0000000 160 251 040 215 261 243 134 034 026 343 027 262 357 224 026 254
0000010    4085    f959    4089    ed45    e861    f510    f56f    a299
0000010 205 100 131 371 211 100 105 355 141 350 020 365 157 365 231 242
0000020    d63a    6269    abe0    0aee    b867    21c5    4258    524d

Photo: David Mark/Pixbay (creativecommons)

Možete me kontaktirati putem via e-mail ili poslati tweet na @marcontwit

Published (Last edited): 05-06-2013 , source: http://blog.coldflake.com/posts/2012-12-30-Top-10-Unix-Command-Line-Utilities-2012.html