Упражнение. Знакомство с Bash

Завершено

На своем компьютере Linux можно выполнять команды Bash локально. Если у вас есть доступ к серверам Linux, вы можете удаленно подключаться к ним и выполнять команды Bash там. Но никто не захочет экспериментировать с работающей производственной системой, особенно в первый день работы в Northwind.

В этом уроке вы будете использовать Azure Cloud Shell справа в качестве терминала Linux. Azure Cloud Shell — это оболочка, к которой можно получить доступ на портале Azure или по адресу https://shell.azure.com. Чтобы ее использовать, не нужно ничего устанавливать на ваш ПК или ноутбук.

Знакомство с Cloud Shell

Для начала давайте попробуем исследовать Cloud Shell с помощью уже изученных нами команд Bash.

  1. Получите список всех файлов и подкаталогов в текущем каталоге с помощью команды ls:

    ls
    
  2. Результат должен выглядеть примерно так:

    yourname@Azure:~$ ls
    clouddrive
    

    clouddrive — это подкаталог в текущем каталоге. Это подключенная общая папка, которая присутствует, если вы используете Cloud Shell в собственной учетной записи. Прямо сейчас вы используете эту оболочку в песочнице Microsoft Learn.

  3. Но что же является текущим каталогом? Давайте найдем его с помощью команды pwd. pwd расшифровывается как print working directory (вывести рабочий каталог). Она выводит полный путь к тому каталогу, в котором вы находитесь.

    pwd
    
  4. Вы должны увидеть такие выходные данные:

    yourname@Azure:~$ pwd
    /home/yourname
    

    Эти выходные данные означают, что вы находитесь в каталоге с именем ваше_имя, который находится в каталоге home в корне файловой системы Linux.

  5. Наш текущий каталог выглядит пустым. Давайте воспользуемся флагом Bash, чтобы отобразить все скрытые файлы и каталоги и убедиться, что все правильно.

    ls -a
    
  6. Ого! Эти выходные данные показали нам, что содержимое данного каталога гораздо больше, чем мы думали.

    yourname@Azure:~$ ls -a
    .  ..  .azure  .bash_history  .bash_logout  .bashrc  clouddrive  .profile  .tmux.conf  .viminfo
    
  7. Что из себя представляют все эти файлы и подкаталоги? Часть из них — фоновые файлы, позволяющие Cloud Shell работать. Давайте рассмотрим некоторые другие.

    • . ссылается на текущий каталог, а .. — на родительский каталог. Где бы вы ни находились, распечатав все скрытые файлы и каталоги, вы увидите выведенные . и ...
    • .bash_history — это специальный файл Bash, в котором хранятся все команды, введенные вами в оболочку. Bash запоминает журнал команд, что, как мы увидим позже, очень удобно.
    • .bash_logout — еще один специальный файл Bash, который считывается и запускается каждый раз, когда существует оболочка входа. Суперпользователи Linux могут изменять его для настройки среды.
    • .bashrc — важный файл конфигурации Bash, который запускается при каждом запуске новой оболочки. Если вы собираетесь открыть этот файл, чтобы просмотреть его, будьте внимательны при внесении изменений, так как они могут иметь непредвиденные последствия.

Вызов журнала и автозавершение команд

При вводе сложных команд, подобных приведенной ниже, можно легко сделать ошибку.

ls -a .azure/commands/202?*.log

Но в Bash предусмотрено несколько функций, которые помогут в таких случаях.

Повторный вызов предыдущих команд

  1. Попробуйте ввести следующую команду с опечаткой (203? вместо 202?):

    ls -a .azure/commands/203?*.log
    
  2. Должен появиться следующий результат, показывающий, что файлов, соответствующих этому шаблону, нет:

    ls: cannot access '.azure/commands/203?*.log': No such file or directory
    
  3. Чтобы не вводить всю команду заново для исправления ошибки, можно повторно вызывать введенные ранее команды, используя клавиши со стрелкой вверх и стрелкой вниз. Попробуйте с помощью клавиши со стрелкой вверх вернуть неправильную команду. Затем с помощью клавиши со стрелкой влево исправьте команду, заменив последнюю цифру 3 на 2. Снова нажмите ВВОД, чтобы выполнить исправленную команду.

    Нажимая клавишу со стрелкой вверх несколько раз, можно вернуться на несколько команд назад. Чтобы перейти к более поздним командам, используйте клавишу со стрелкой вниз.

  4. Теперь вы должны увидеть примерно следующий результат. Он позволяет убедиться, что команда сработала правильно и вы получили список файлов, соответствующих указанному шаблону.

    .azure/commands/2020-01-29.21-56-35.login.103.log
    .azure/commands/2020-01-29.21-56-38.account_set.112.log
    

Автозавершение

Предположим, вам нужно прочитать содержимое одного из только что найденных файлов. Для вывода содержимого файла на экран можно использовать команду cat (сокращение от "catenate").

  1. С этой командой следует использовать полное имя файла, например:

    cat .azure/commands/2020-01-29.21-56-35.login.103.log
    
  2. В этом случае приходится вводить много символов, и вероятность ошибки очень велика. Но вы можете воспользоваться функцией элементарного автозавершения Bash, и за вас будет выполнена большая часть работы. Попробуйте ввести:

    cat .a
    

    Затем нажмите клавишу Tab. Что происходит?

  3. В команде должна появиться остальная часть слова "azure/":

    cat .azure/
    

    Продолжайте вводить начала слов и используйте клавишу Tab для автозавершения. Помните, что в случае неоднозначности Bash ничего не заполнит. Чтобы вывести все файлы и каталоги по указанному пути, которые соответствуют уже введенным буквам, можно дважды нажать клавишу Tab.

  4. Продолжайте, пока не появится реальный файл .log в каталоге команд. Затем нажмите ВВОД, чтобы с помощью команды cat вывести его содержимое на экран. Оно должно выглядеть примерно следующим образом:

    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:35,426 | INFO | az_command_data_logger | command args: login --identity
    CMD-LOG-LINE-BEGIN 103 | 2020-01-29 21:56:37,604 | INFO | az_command_data_logger | exit code: 0
    

    Учтите, что если вы уже ввели неверную букву, Bash не сможет правильно угадать, какую букву вы хотели ввести.

Использование man

Мы только что использовали команду cat, но вы еще мало о ней знаете. С помощью команды man можно получить больше информации о команде cat.

  1. Чтобы узнать больше о команде cat и ее использовании, введите следующую команду:

    man cat
    

    Да, вы ввели в оболочку "man cat". Команды Bash могут быть и понятными, и забавными!

  2. Вы должны увидеть такие выходные данные:

    CAT(1)                                       User Commands                                       CAT(1)
    
    NAME
           cat - concatenate files and print on the standard output
    
    SYNOPSIS
           cat [OPTION]... [FILE]...
    
    DESCRIPTION
           Concatenate FILE(s) to standard output.
    
           With no FILE, or when FILE is -, read standard input.
    
           -A, --show-all
                  equivalent to -vET
    
           -b, --number-nonblank
                  number nonempty output lines, overrides -n
    
           -e     equivalent to -vE
    
    ...
    
  3. Для прокрутки страницы руководства используйте стрелки вверх и вниз, а для выхода введите q.

Изменение каталогов

Давайте попробуем еще одну базовую команду Bash: cd.

При использовании оболочки вы всегда находитесь в каталоге — так же, как в папке на ПК или Mac. Чтобы изменить папку, используйте команду cd (change directory — изменить каталог).

Это просто, но давайте немного поупражняемся.

  1. Сначала введите следующую команду, чтобы убедиться, что вы находитесь в правильном месте:

    cd ~
    

    Эта команда переместит вас обратно в специальный домашний каталог в оболочке, если вы находились в другом месте.

  2. Повторите проверку, выполнив команду pwd еще раз:

    pwd
    
  3. Вы должны увидеть такие выходные данные:

    /home/yourname
    

    ~ — еще один специальный символ в Bash, который ссылается на этот домашний каталог. Вы можете использовать ~ для ссылки на расположение /home/ваше_имя, в каком бы каталоге в оболочке вы ни находились.

  4. Давайте перейдем в каталог, где хранятся файлы журнала (где мы были раньше):

    cd .azure/commands/
    

    Введите полную команду самостоятельно или используйте клавишу Tab для автозавершения.

    Теперь строка, в которой вводятся команды, должна выглядеть иначе и показывать, где в оболочке вы находитесь:

    yourname@Azure:~/.azure/commands$
    
  5. Попробуйте использовать специальный синтаксис .., чтобы переместиться на один каталог выше:

    cd ..
    

    Теперь вы должны находиться на один уровень выше в структуре каталогов, и командная строка должна выглядеть следующим образом:

    yourname@Azure:~/.azure$
    

Отлично! Вы сделали первые шаги на пути к званию эксперта Bash. Продолжайте обучение.

Проверьте свои знания

1.

Какой каталог вы переключитесь, если вы ввели cd . команду Bash?