Programování v shellu
GNU vs UNIX

Lukáš Bařinka

Náplň cvičení

Cílem cvičení je pochopení rozdílností ve světě UNIXu a
nastavení pracovního prostředí.

  • Historie UNIXu
  • Rozdílné standardy a verze
  • Spouštění konkrétní implementace příkazu
  • Trvalé nastavení

Historie

  • UNIX (Solaris, AIX, HP-UX)
  • BSD (FreeBSD, NetBSD, OpenBSD, macOS)
  • Linux (GNU/Linux)
Schéma historie UNIXu

Standardy a verze

  • System V R4 universe
    System 5, Release 4
    /usr/bin
  • BSD universe
    Berkeley Software Distribution (University of California, Berkeley)
    /usr/ucb
  • GNU universe
    GNU Not Unix
    /usr/gnu/bin
  • POSIX (Portable Operating System Interface)
    POSIXLY_CORRECT
  • XPG (X/Open Portability Guide, Issue 4)
    /usr/xpg4/bin
    /usr/xpg6/bin

Spouštění konkrétní verze

  • Spouštění jménem příkazu podle $PATH
  • Spouštění příkazu s cestou
  • Spouštění pomocí aliasu
  • Spouštění pomocí proměnné/funkce
  • Spouštění jménem příkazu (podle $PATH)
    
    									fray1:~type head
    									head is /usr/bin/head
    
    									fray1:~head -n -1 /etc/passwd
    									head: option requires an argument -- n
    									usage: head [-n #] [-#] [filename...]
    								
  • Spouštění s cestou
    
    									fray1:~/usr/gnu/bin/head -n -1 /etc/passwd
    								
  • Přenastavení proměnné PATH
    
    									fray1:~hash
    									hits    command
    								    2    /usr/bin/head
    									fray1:~declare -p PATH
    									fray1:~PATH=/usr/gnu/bin:$PATH
    									fray1:~hash
    									hash: hash table empty
    
    									fray1:~head -n -1 /etc/passwd
    
    									fray1:~hash -p /usr/bin/head head
    									fray1:~head -n -1 /etc/passwd
    									head: option requires an argument -- n
    									usage: head [-n #] [-#] [filename...]
    								
  • Spouštění pomocí aliasu
    
    									fray1:~ps
    									   PID TTY         TIME CMD
    									 10010 pts/44      0:00 bash
    									   248 pts/44      0:00 ps
    
    									fray1:~/usr/ucb/ps
    									   PID TT       S  TIME COMMAND
    									  8643 pts/34   S  0:00 -bash
    									   899 pts/44   O  0:00 /usr/ucb/ps
    									 10010 pts/44   S  0:00 -bash
    
    									fray1:~alias ps=/usr/ucb/ps
    									fray1:~ps
    								

Trvalé nastavení

  • Nastavení proměnných (PATH) jednorázově po přihlášení
    ~/.bash_profile (pokud existuje)
    ~/.profile (pokud ~/.bash_profile neexistuje)
  • Nastavení aliasů v každém spuštění shellu
    ~/.bashrc
  • Nejdříve načíst původní ~/.profile soubor
    
    									fray1:~# pokud ještě neexistuje
    									fray1:~echo '. ~/.profile' > ~/.bash_profile
    
    									fray1:~# pokud již existuje
    									fray1:~/usr/gnu/bin/sed -i '1i. ~/.profile' ~/.bash_profile
    								
  • Přidat na konec úpravu proměnné PATH
    
    									fray1:~echo 'PATH=/usr/gnu/bin' >> ~/.bash_profile
    								
  • Vytvoření aliasu
    
    									fray1:~echo 'alias ps=/usr/ucb/ps' >> ~/.bashrc
    								
  • Okamžité načtení souborů do aktuálního shellu
    
                               fray1:~. ~/.bash_profile
                               fray1:~. ~/.bashrc