Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
56/146
Název školy: | Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3 |
Autor: | Ing. Marek Nožka |
Anotace: | Počáteční nastavení příkazového interpretu |
Vzdělávací oblast: | Informační a komunikační technologie |
Předmět: | Počítačové sítě a komunikační technika (PSK) |
Tematická oblast: | Operační systém Linux/Unix |
Výsledky vzdělávání: | Žák umístí do spouštěcích skriptů sadu vlastní aliasů. |
Klíčová slova: | Linux, Unix, shell, bash, bashrc, PATH |
Druh učebního materiálu: | Online vzdělávací materiál |
Typ vzdělávání: | Střední vzdělávání, 4. ročník, technické lyceum |
Ověřeno: | VOŠ a SPŠE Olomouc; Třída: 4L |
Zdroj: | Vlastní poznámky, Vilém Vychodil: Linux Příručka českého uživatele |
Obsah:
Shell, který se spustí při přihlášení se nazývá login shell. Je to například shell, který získá uživatel po přihlášení na textovou konzolu nebo po přihlášení na vzdálený systém pomocí služby SSH.
Každý jiný shell, který nebyl spuštěn systémem automaticky po přihlášení
(například jednotlivá okna grafického terminálu) není login shell.
Vynutit spuštění login shell-u lze pomocí parametru -l
.
$ bash -l
Shell může být spuštěn buď interaktivně -- uživatel s ním komunikuje, nebo jako interpret skriptu. Při interaktivní práci většinou požadujeme jiné chování příkazového interpretu než při spuštění skriptu.
Uživatel může například při interaktivní práci používat sadu "vychytávek", aliasů a funkcí, které by při spuštění ve skriptu způsobily nepředvídané chování.
Příkazový interpret Bash se chová následovně:
Pokud je bash spuštěn jako login shell načte se nejprve systémová
konfigurace ze souboru /etc/profile
a poté uživatelská konfigurace ze
souboru ~/.bash_profile
a ~/.profile
.
Pokud je bash spuštěn jako interaktivní a není to login shell načte
systémový souboru /etc/bash.bashrc
a poté uživatelské definice ze souboru
~/.bashrc
Soubor ~/.profile
může typicky vypadat například takto:
1 # ~/.profile: executed by the command interpreter for login shells.
2 # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
3 # exists.
4 # see /usr/share/doc/bash/examples/startup-files for examples.
5 # the files are located in the bash-doc package.
6
7 # the default umask is set in /etc/profile; for setting the umask
8 # for ssh logins, install and configure the libpam-umask package.
9 #umask 022
10
11 # if running bash
12 if [ -n "$BASH_VERSION" ]; then
13 # include .bashrc if it exists
14 if [ -f "$HOME/.bashrc" ]; then
15 . "$HOME/.bashrc"
16 fi
17 fi
18
19 # set PATH so it includes user's private bin if it exists
20 if [ -d "$HOME/bin" ] ; then
21 PATH="$HOME/bin:$PATH"
22 fi
`--> stáhnout
první if
zabezpečuje aby se i v login shell-u načetl soubor ~/.bashrc
.
druhý if
říká, že pokud v domovském adresáři uživatele existuje adresář
bin
přidá se ~/bin
do proměnné PATH
.
$ echo $PATH
/home/marek/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Proměnná PATH
1 obsahuje dvojtečkami oddělený seznam adresářů, kde jsou
hledány spustitelné soubory a skripty.
Jestli-že uživatel zadá příkaz například ls
jsou tyto adresáře prohledávány
dokud se nenarazí na shodně se jmenující spustitelný soubor.
Pokud spustitelný soubor daného jména v žádném tomto adresáři není, Bash nám vrátí chybové hlášení.
$ nejakablbost
bash: nejakablbost: příkaz nenalezen
Adresář ~/bin/
je typické místo pro uložení uživatelských skriptů.
Znak #
na začátku řádku označuje komentář.
Soubor ~/.bashrc
slouží pro počáteční nastavení interaktivního shellu.
Jako příklad uvedeme výchozí ~/.bashrc
z Linuxové distribuce
Debian Jessie.
1 # ~/.bashrc: executed by bash(1) for non-login shells.
2 # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
3 # for examples
4
5 # If not running interactively, don't do anything
6 case $- in
7 *i*) ;;
8 *) return;;
9 esac
10
11 # don't put duplicate lines or lines starting with space in the history.
12 # See bash(1) for more options
13 HISTCONTROL=ignoreboth
14
15 # append to the history file, don't overwrite it
16 shopt -s histappend
17
18 # for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
19 HISTSIZE=1000
20 HISTFILESIZE=2000
21
22 # check the window size after each command and, if necessary,
23 # update the values of LINES and COLUMNS.
24 shopt -s checkwinsize
25
26 # If set, the pattern "**" used in a pathname expansion context will
27 # match all files and zero or more directories and subdirectories.
28 #shopt -s globstar
29
30 # make less more friendly for non-text input files, see lesspipe(1)
31 #[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
32
33 # set variable identifying the chroot you work in (used in the prompt below)
34 if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
35 debian_chroot=$(cat /etc/debian_chroot)
36 fi
37
38 # set a fancy prompt (non-color, unless we know we "want" color)
39 case "$TERM" in
40 xterm-color) color_prompt=yes;;
41 esac
42
43 # uncomment for a colored prompt, if the terminal has the capability; turned
44 # off by default to not distract the user: the focus in a terminal window
45 # should be on the output of commands, not on the prompt
46 #force_color_prompt=yes
47
48 if [ -n "$force_color_prompt" ]; then
49 if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
50 # We have color support; assume it's compliant with Ecma-48
51 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
52 # a case would tend to support setf rather than setaf.)
53 color_prompt=yes
54 else
55 color_prompt=
56 fi
57 fi
58
59 if [ "$color_prompt" = yes ]; then
60 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
61 else
62 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
63 fi
64 unset color_prompt force_color_prompt
65
66 # If this is an xterm set the title to user@host:dir
67 case "$TERM" in
68 xterm*|rxvt*)
69 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
70 ;;
71 *)
72 ;;
73 esac
74
75 # enable color support of ls and also add handy aliases
76 if [ -x /usr/bin/dircolors ]; then
77 test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
78 alias ls='ls --color=auto'
79 #alias dir='dir --color=auto'
80 #alias vdir='vdir --color=auto'
81
82 #alias grep='grep --color=auto'
83 #alias fgrep='fgrep --color=auto'
84 #alias egrep='egrep --color=auto'
85 fi
86
87 # some more ls aliases
88 #alias ll='ls -l'
89 #alias la='ls -A'
90 #alias l='ls -CF'
91
92 # Alias definitions.
93 # You may want to put all your additions into a separate file like
94 # ~/.bash_aliases, instead of adding them here directly.
95 # See /usr/share/doc/bash-doc/examples in the bash-doc package.
96
97 if [ -f ~/.bash_aliases ]; then
98 . ~/.bash_aliases
99 fi
100
101 # enable programmable completion features (you don't need to enable
102 # this, if it's already enabled in /etc/bash.bashrc and /etc/profile
103 # sources /etc/bash.bashrc).
104 if ! shopt -oq posix; then
105 if [ -f /usr/share/bash-completion/bash_completion ]; then
106 . /usr/share/bash-completion/bash_completion
107 elif [ -f /etc/bash_completion ]; then
108 . /etc/bash_completion
109 fi
110 fi
`--> stáhnout
Soubor už je o něco delší. Nastavují se v něm například:
alias
. Takto lze jednoduše vytvářet
uživatelské zkratky pro dlouhé příkazy.
alias zkratka=prikaz
Například:
alias ll='ls -lhF'
alias lsmac="ip addr show | grep link.ether | awk '{print \$2}'"
alias du.='du -sh'
alias nazeleno='chmod +x'
alias cdrom='mount /media/cdrom'
alias ucdrom='umount /media/cdrom'
alias ecdrom='eject /media/cdrom'
alias zcdrom='eject -t /media/cdrom'
alias ps.='ps fux'
alias netstat.='netstat -nap --inet --inet6'
`--> stáhnout