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

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ą poleceniu 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ć ls -a -l /etc, aby wyświetlić wszystkie pliki i katalogi w katalogu /etc systemu Linux w formacie pełnym, możesz wprowadzić to zamiast tego:

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; te, 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, a 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 nazwie 0001.jpg, 0002.jpgi tak dalej za pośrednictwem 0009.jpg, następujące polecenie wyświetla listę 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. Poniższe polecenie wyświetla listę wszystkich plików w bieżącym katalogu, których nazwy zawierają kropkę, po której natychmiast znajduje się mała litera J lub P. Wyświetla listę wszystkich plików typu .jpg, .jpeg i .png, ale nie plików .gif:

ls *.[jp]*

W systemie Linux w nazwach plików i poleceniach, które działają na nich, rozróżniana jest wielkość liter. Aby wyświetlić listę wszystkich plików w bieżącym katalogu, których nazwy zawierają kropki, po których następuje wielkie lub małe litery J lub P, możesz wprowadzić 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]*

Ta lista zawiera listę wszystkich plików w bieżącym katalogu, których nazwy zaczynają się od małych lub wielkich liter :

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