Podstawy powłoki Bash
Zrozumienie powłoki Bash zaczyna się od zrozumienia składni języka powłoki Bash. Po zapoznaniu się ze składnią można zastosować ją do każdego uruchomionego polecenia powłoki Bash.
Pełna składnia polecenia powłoki Bash jest następująca:
command [options] [arguments]
Powłoka Bash traktuje pierwszy napotkany ciąg jako polecenie. Następujące polecenie używa polecenia ls
(od „list” — „lista”) powłoki Bash, aby wyświetlić zawartość bieżącego katalogu roboczego:
ls
Argumenty często towarzyszą poleceniami powłoki Bash. Na przykład możesz uwzględnić nazwę ścieżki w poleceniu ls
, aby wyświetlić zawartość innego katalogu:
ls /etc
Większość poleceń powłoki Bash ma opcje umożliwiające modyfikowanie sposobu ich działania. Opcje, nazywane również flagami, dają poleceniom bardziej szczegółowe instrukcje. Na przykład pliki i katalogi, których nazwy zaczynają się od kropki, są ukryte przed użytkownikiem i nie są wyświetlane przez ls
. Możesz jednak dołączyć flagę -a
(od „all”— „ wszystko”) w poleceniu ls
i zobaczyć wszystkie elementy w katalogu docelowym:
ls -a /etc
Możesz nawet łączyć flagi na potrzeby zwięzłości. Na przykład zamiast wprowadzać polecenie ls -a -l /etc
, aby wyświetlić wszystkie pliki i katalogi w katalogu /etc w systemie Linux w postaci długiej, możesz wprowadzić następujące polecenie:
ls -al /etc
Język powłoki Bash jest zwięzły. Czasami niezwykłe jest (i stanowi powód do dumy dla miłośników programu Bash), jak wiele można osiągnąć za pomocą jednego polecenia.
Uzyskaj pomoc
To, które opcje i argumenty mogą być używane lub muszą być używane, zależy od polecenia. Na szczęście dokumentacja powłoki Bash jest wbudowana w system operacyjny. Pomoc zawsze jest w zasięgu polecenia. Aby dowiedzieć się więcej na temat opcji polecenia, użyj polecenia man
(od „manual” — „podręcznik”). Aby na przykład wyświetlić wszystkie opcje dla polecenia mkdir
(od „make directory” — „utwórz katalog”), wykonaj następujące czynności:
man mkdir
man
jest twoim najlepszym przyjacielem, gdy uczysz się powłoki Bash. man
to sposób znajdowania informacji potrzebnych do zrozumienia sposobu działania dowolnego polecenia.
Większość poleceń powłoki Bash i systemu Linux obsługuje opcję --help
. Wyświetla ona opis składni i opcji polecenia. Aby to zademonstrować, wprowadź polecenie mkdir --help
. Dane wyjściowe wyglądają mniej więcej tak:
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'
Pomoc uzyskana w ten sposób jest zwykle bardziej zwięzła niż pomoc uzyskana przy użyciu polecenia man
.
Korzystanie z symboli wieloznacznych
Symbole wieloznaczne to symbole, które reprezentują jeden lub więcej znaków w poleceniach powłoki Bash. Najczęściej używanym symbolem wieloznacznym jest gwiazdka. Reprezentuje ona zero znaków lub sekwencję znaków. Załóżmy, że bieżący katalog zawiera setki plików obrazów, ale chcesz zobaczyć tylko pliki PNG; tych, których nazwy plików kończą się .png. Oto polecenie umożliwiające wyświetlenie listy tylko tych plików:
ls *.png
Uwaga
W systemie Linux nie ma formalnej koncepcji rozszerzenia nazwy pliku, która istnieje w innych systemach operacyjnych. Nie oznacza to, że pliki PNG nie będą miały rozszerzenia .png. Oznacza to po prostu, że system Linux nie dołącza specjalnego znaczenia do faktu, że nazwy plików kończą się .png.
Teraz załóżmy, że bieżący katalog zawiera również pliki JPEG. Niektóre kończą się .jpg, podczas gdy inne kończą się .jpeg. Oto jeden ze sposobów wyświetlania listy wszystkich plików JPEG:
ls *.jpg *.jpeg
A oto kolejny:
ls *.jp*g
Symbol wieloznaczny *
dopasowuje zero lub więcej znaków, ale symbol wieloznaczny ?
reprezentuje pojedynczy znak. Jeśli bieżący katalog zawiera pliki o nazwach 0001.jpg, 0002.jpg itd. aż do 0009.jpg, następujące polecenie wyświetli listę ich wszystkich:
ls 000?.jpg
Jeszcze innym sposobem używania symboli wieloznacznych do filtrowania danych wyjściowych jest użycie nawiasów kwadratowych, które oznaczają grupy znaków. Następujące polecenie wyświetla listę wszystkich plików w bieżącym katalogu, których nazwy zawierają kropkę bezpośrednio przed mała literą J lub P. Wyświetli ono wszystkie pliki .jpg, .jpegi .png, ale nie pliki .gif:
ls *.[jp]*
W systemie Linux w nazwach plików i poleceniach, które działają na nich, rozróżniana jest wielkość liter. Aby więc wyświetlić listę wszystkich plików w bieżącym katalogu, których nazwy zawierają kropkę, a po niej wielką lub małą literę lub, możesz wpisać następujące polecenie:
ls *.[jpJP]*
Wyrażenia w nawiasach kwadratowych mogą reprezentować zakresy znaków. Na przykład następujące polecenie wyświetla wszystkie pliki w bieżącym katalogu, których nazwy rozpoczynają się od małej litery:
ls [a-z]*
Natomiast to polecenie wyświetla wszystkie pliki w bieżącym katalogu, których nazwy rozpoczynają się od wielkiej litery:
ls [A-Z]*
A to polecenie wyświetla listę wszystkich plików w bieżącym katalogu, których nazwy rozpoczynają się od małej litery lub wielkiej litery:
ls [a-zA-Z]*
Na podstawie tego wszystkiego można odgadnąć, jakie są następujące polecenia?
ls [0-9]*
ls *[0-9]*
ls *[0-9]
Jeśli musisz użyć jednego ze znaków wieloznacznych jako zwykłego znaku, uczyń go literałem lub zmień jego znaczenie, poprzedzając go odwrotnym ukośnikiem. Zatem jeśli z jakiegoś powodu gwiazdka jest częścią nazwy pliku — coś, czego nigdy nie powinno się robić celowo — możesz wyszukać tę nazwę za pomocą polecenia takiego jak:
$ ls *\**