Shelle w FreeBSD - przegląd
FreeBSD wyraźnie oddziela system bazowy od oprogramowania instalowanego z pakietów, dlatego ścieżka do powłoki ma tu większe znaczenie niż w wielu dystrybucjach Linuksa. Ten artykuł porządkuje powłoki dostępne w systemie bazowym i te instalowane przez pkg.
Praktyczną administrację opisuje FreeBSD - shell, a automatyzację Programowanie w shellu.
1. Czym jest shell?
Shell, czyli powłoka, to program pośredniczący między użytkownikiem a systemem operacyjnym.
Schemat:
Ty
↓
terminal
↓
shell
↓
program
↓
kernel FreeBSD
Terminal i shell to różne rzeczy.
Przykładowe shelle:
sh,csh,tcsh,bash,zsh,fish,ksh.
2. System bazowy a dodatkowe oprogramowanie
To bardzo ważne we FreeBSD.
System bazowy zawiera między innymi:
/bin/sh
/bin/csh
/bin/tcsh
Programy instalowane dodatkowo przez pkg trafiają zwykle do:
/usr/local/bin
Dlatego:
/usr/local/bin/bash
/usr/local/bin/zsh
/usr/local/bin/fish
To jedna z podstawowych różnic względem typowego Linuksa.
3. Domyślny shell FreeBSD
We współczesnym FreeBSD podstawowym shellem systemowym jest:
/bin/sh
Typowy układ:
user → /bin/sh
root → /bin/sh
Tcsh nadal pozostaje częścią systemu bazowego.
4. Najważniejsze shelle
| Shell | Status | Typowe zastosowanie |
|---|---|---|
sh |
system bazowy | administracja, skrypty, root |
csh |
system bazowy | historyczny shell BSD |
tcsh |
system bazowy | rozwinięty C shell |
bash |
pakiet | wygodna codzienna praca |
zsh |
pakiet | rozbudowany shell interaktywny |
fish |
pakiet | wygodna interaktywna konsola |
ksh |
pakiet | klasyczny Unix |
mksh |
pakiet | lekki Korn shell |
5. sh we FreeBSD
FreeBSD ma własny sh jako część systemu bazowego.
Uruchomienie:
sh
Przykład:
#!/bin/sh
NAME="user"
if [ -f /etc/passwd ]; then
echo "$NAME"
fi
Najważniejsze konstrukcje:
VAR=value
export VAR
if [ -f file ]; then
echo "jest"
fi
for file in *.txt; do
echo "$file"
done
6. Konfiguracja sh
Login shell korzysta typowo z:
/etc/profile
~/.profile
Interaktywną konfigurację można powiązać ze zmienną ENV:
ENV="$HOME/.shrc"
export ENV
Dzięki temu możesz trzymać aliasy i ustawienia interaktywne w:
~/.shrc
7. Bash we FreeBSD
Bash nie należy do systemu bazowego.
Instalacja:
sudo pkg install bash
Typowa lokalizacja:
/usr/local/bin/bash
Uruchomienie:
bash
Bash oferuje:
- historię,
- aliasy,
- funkcje,
- completion,
- tablice,
- job control,
- rozbudowane warunki.
Przykład:
servers=(web db cache)
echo "${servers[0]}"
8. Konfiguracja Basha
Najważniejszy plik:
~/.bashrc
Przykład:
alias ll='ls -lah'
export EDITOR=vim
PS1='\u@\h:\w\$ '
Przeładowanie:
source ~/.bashrc
lub:
. ~/.bashrc
9. Zsh
Instalacja:
sudo pkg install zsh
Uruchomienie:
zsh
Konfiguracja:
~/.zshrc
Przykład:
alias ll='ls -lah'
export EDITOR=vim
autoload -Uz compinit
compinit
Zsh jest bardzo dobrym shellem użytkownika, ale nie należy do systemu bazowego FreeBSD.
10. Fish
Instalacja:
sudo pkg install fish
Uruchomienie:
fish
Konfiguracja:
~/.config/fish/config.fish
Fish nie jest zgodny składniowo z POSIX.
Bash/sh:
export EDITOR=vim
Fish:
set -gx EDITOR vim
11. csh
C shell należy do tradycji BSD.
Przykład:
set name = "user"
Zmienne środowiskowe:
setenv EDITOR vim
Składnia mocno różni się od sh.
12. tcsh
Tcsh jest rozwinięciem C shell i nadal znajduje się w FreeBSD base system.
Uruchomienie:
tcsh
Konfiguracja:
~/.tcshrc
lub:
~/.cshrc
Przykład:
setenv EDITOR vim
alias ll 'ls -lah'
set prompt = "%n@%m:%~%# "
Starsze poradniki FreeBSD często pokazują tcsh jako shell roota. W nowszych wersjach domyślnie używany jest sh.
13. KornShell i mksh
Instalacja:
sudo pkg install ksh
lub:
sudo pkg install mksh
Do administracji FreeBSD ważniejsze jest opanowanie sh, a do wygodnej pracy interaktywnej Basha lub Zsh.
14. Lista dostępnych login shelli
cat /etc/shells
Przykładowo:
/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/bash
/usr/local/bin/zsh
/usr/local/bin/fish
15. Sprawdzanie shella
Login shell:
echo "$SHELL"
Aktualny shell:
ps -p $$ -o comm=
Dodatkowo:
echo "$0"
16. Uruchamianie innego shella
Na przykład:
bash
Powstaje:
sh
└── bash
Powrót:
exit
17. exec
exec bash
zastępuje aktualny shell Bashem.
18. Zmiana login shella
Najpierw:
cat /etc/shells
Bash:
chsh -s /usr/local/bin/bash
Zsh:
chsh -s /usr/local/bin/zsh
Fish:
chsh -s /usr/local/bin/fish
19. Root - ważna praktyka
Root powinien korzystać z shella należącego do systemu bazowego.
Najbezpieczniej:
root → /bin/sh
Nie warto ustawiać rootowi:
/usr/local/bin/bash
jako jedynego login shella.
Powód: /usr/local zawiera oprogramowanie dodatkowe. W sytuacji awaryjnej root nadal powinien mieć dostęp do shella z systemu bazowego.
Dobry układ:
root → /bin/sh
user → /usr/local/bin/bash
20. sudo -i
sudo -i
uruchamia środowisko loginowe roota.
Jeżeli root ma:
/bin/sh
dostaniesz sh.
Natomiast:
sudo bash
jawnie uruchamia Bash jako root.
21. Shebang
Dla przenośnego skryptu:
#!/bin/sh
Jeżeli potrzebujesz Basha:
#!/usr/bin/env bash
To wygodne, ponieważ Bash znajduje się zwykle tutaj:
/usr/local/bin/bash
22. Dlaczego env bash jest użyteczne
Na różnych systemach Bash może znajdować się w różnych miejscach.
FreeBSD:
/usr/local/bin/bash
Linux:
/usr/bin/bash
Dlatego:
#!/usr/bin/env bash
wyszukuje Basha przez $PATH.
23. Nie zastępuj systemowego sh
FreeBSD sh jest częścią systemu bazowego.
Możesz ustawić inny shell użytkownikowi, ale nie podmieniaj systemowego /bin/sh.
24. Przekierowania
command > file
command >> file
command 2> errors.log
command > output.log 2>&1
25. Potoki
ps aux | grep nginx
Shell tworzy potok między procesami.
26. Zmienne
NAME="user"
echo "$NAME"
export EDITOR=vim
DATE=$(date)
27. Cytowanie
echo "Hello $NAME"
echo 'Hello $NAME'
echo "\$HOME"
28. Globbing
Shell rozwija:
*
?
[abc]
Przykład:
ls *.conf
29. Builtiny
type cd
type ls
command -v pkg
cd jest builtin-em.
30. Aliasy
alias ll='ls -lah'
alias
unalias ll
31. Funkcje
mkcd() {
mkdir -p "$1" && cd "$1"
}
32. Historia
W Bash:
history
Wyszukiwanie:
Ctrl-R
33. Job control
Uruchomienie:
sleep 1000
Ctrl-Z, a następnie:
jobs
fg
bg
Uruchomienie od razu w tle:
sleep 1000 &
34. $PATH
echo "$PATH"
We FreeBSD szczególnie ważne jest:
/usr/local/bin
bo tam znajdują się programy instalowane przez pkg.
35. Instalowanie shelli przez pkg
sudo pkg install bash
sudo pkg install zsh
sudo pkg install fish
sudo pkg install mksh
Po instalacji:
cat /etc/shells
command -v bash
36. Dobry układ we FreeBSD
Dla roota:
/bin/sh
Dla zwykłego użytkownika:
/bin/sh
jeśli chcesz pracować blisko filozofii FreeBSD,
albo:
/usr/local/bin/bash
jeśli chcesz środowisko podobne do Debiana.
37. Co warto nauczyć się najlepiej
Najważniejsze:
1. FreeBSD sh
2. Bash
sh daje rozumienie systemu i przenośność.
Bash daje wygodę i podobne środowisko jak na Linuksie.
38. Szybka ściąga
echo "$SHELL"
ps -p $$ -o comm=
cat /etc/shells
command -v bash
echo "$PATH"
Instalacja Basha:
sudo pkg install bash
Zmiana shella:
chsh -s /usr/local/bin/bash
39. Najważniejsza zasada
FreeBSD
shjest częścią systemu bazowego, a Bash, Zsh i Fish są dodatkami.
Dlatego:
root → /bin/sh
jest rozsądnym wyborem, a zwykły użytkownik może korzystać z:
/usr/local/bin/bash
lub:
/usr/local/bin/zsh
Oficjalne źródła
- FreeBSD Handbook - Shells: https://docs.freebsd.org/en/books/handbook/basics/#shells
- FreeBSD manual pages: https://man.freebsd.org/
- FreeBSD Ports and Packages: https://docs.freebsd.org/en/books/handbook/ports/