Podstawy powłoki Bash

Ukończone

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

Poleceniom powłoki Bash często towarzyszą argumenty. 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 polecenie 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

Polecenie man będzie Twoim najlepszym przyjacielem podczas nauki korzystania z 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 będą przypominać następujące:

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ę plikiem .png.

Teraz załóżmy, że bieżący katalog zawiera również pliki JPEG. Niektóre kończą się na .jpg, podczas gdy inne kończą się na .jpeg. Oto jeden ze sposobów wyświetlania listy wszystkich plików JPEG:

ls *.jpg *.jpeg

A to inny:

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]*

Czy na tej podstawie możesz zgadnąć, co robią poniższe 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. Dlatego, jeśli z jakiegoś powodu gwiazdka jest częścią nazwy pliku — coś, czego nigdy nie należy robić celowo — możesz go wyszukać za pomocą polecenia takiego jak:

$ ls *\**