< Return to Video

Lecture 1: Course Overview + The Shell (2020)

  • 0:02 - 0:05
    Спасибо всем кто пришёл.
  • 0:05 - 0:09
    Это "пропущенный семестр" по информатике
  • 0:09 - 0:09
    по крайней мере,
  • 0:09 - 0:11
    так мы назвали этот курс.
  • 0:11 - 0:12
    Если вы здесь не для этого -
  • 0:12 - 0:13
    вы ошиблись аудиторией.
  • 0:13 - 0:15
    Мы будем здесь примерно час -
  • 0:15 - 0:18
    просто чтобы вы ориентировались.
  • 0:18 - 0:21
    Сперва я хочу рассказать немного о том,
  • 0:21 - 0:23
    почему мы проводим этот курс.
  • 0:23 - 0:26
    Этот курс вытекает из наблюдений Аниша,
  • 0:26 - 0:27
    Хосе и меня, сделанных
  • 0:27 - 0:29
    во время ассистирования
  • 0:29 - 0:31
    курсов в MIT, которые
  • 0:31 - 0:32
    заключаются в следующем:
  • 0:32 - 0:33
    в основном все мы, специалисты
  • 0:33 - 0:35
    по информатике, знаем, что
  • 0:35 - 0:36
    компьютеры прекрасно справляются
  • 0:36 - 0:38
    с повторяющимися задачами
  • 0:38 - 0:39
    и автоматизацией,
  • 0:39 - 0:41
    но мы часто не осознаём
  • 0:41 - 0:43
    как много инструментов могут улучшить
  • 0:43 - 0:45
    наши процессы разработки.
  • 0:45 - 0:47
    Мы можем гораздо эффективнее
  • 0:47 - 0:48
    использовать наши компьютеры,
  • 0:48 - 0:50
    потому что мы можем использовать компьютер
  • 0:50 - 0:52
    как инструмент для нас самих,
  • 0:52 - 0:54
    а не только для создания веб сайтов
  • 0:54 - 0:56
    или программного обеспечения.
  • 0:56 - 0:59
    И этот курс - это попытка это исправить,
  • 0:59 - 1:01
    это попытка показать вам
  • 1:01 - 1:03
    некоторые из этих инструментов,
  • 1:03 - 1:05
    которые вы можете эффективно использовать
  • 1:05 - 1:08
    в повседневности, исследованиях и учёбе.
  • 1:08 - 1:12
    И это будет курс где мы хотим научить вас,
  • 1:12 - 1:15
    как лучше использовать инструменты,
  • 1:15 - 1:17
    которые вы уже знаете, а также
  • 1:17 - 1:20
    надеемся показать вам инструменты,
  • 1:20 - 1:22
    о которых вы раньше не знали,
  • 1:22 - 1:24
    и как комбинировать эти инструменты
  • 1:24 - 1:26
    для создания более мощных вещей,
  • 1:26 - 1:30
    чем вы можете сделать сегодня.
  • 1:30 - 1:34
    Курс будет состоять из 11 часовых лекций
  • 1:34 - 1:38
    каждая из которых охватывает одну тему.
  • 1:38 - 1:40
    Вы можете посмотреть на веб сайте,
  • 1:40 - 1:41
    который также написан вон там,
  • 1:41 - 1:45
    темы лекций и даты каждой из них.
  • 1:45 - 1:47
    Они будут в основном независимыми,
  • 1:47 - 1:49
    и вы можете появляться только на тех,
  • 1:49 - 1:50
    которые вам интересны.
  • 1:50 - 1:52
    Но мы будем считать что вы в курсе всего,
  • 1:52 - 1:55
    и когда мы дойдём до более поздних лекций,
  • 1:55 - 1:59
    я не буду например объяснять bash заново.
  • 1:59 - 2:07
    Мы выложим конспекты и записи лекций.
  • 2:07 - 2:10
    Когда точно - мы ещё не установили,
  • 2:10 - 2:12
    но это будет после лекций. Очевидно,
  • 2:12 - 2:14
    что видео должно быть выложено после.
  • 2:14 - 2:17
    Курс буду вести я - Джон,
  • 2:17 - 2:19
    и Аниш - сидящий вон там, и Хосе,
  • 2:19 - 2:21
    которого сейчас здесь нет,
  • 2:21 - 2:23
    но он будет читать завтрашнюю лекцию.
  • 2:23 - 2:25
    И имейте ввиду, что мы пытаемся покрыть
  • 2:25 - 2:28
    много основ в течении курса из всего лишь
  • 2:28 - 2:29
    11 часовых лекций.
  • 2:29 - 2:33
    Поэтому мы будем идти относительно быстро,
  • 2:33 - 2:35
    но, пожалуйста, останавливайте нас
  • 2:35 - 2:37
    если чувствуете что не успеваете,
  • 2:37 - 2:40
    или надо уделить больше времени,
  • 2:40 - 2:41
    просто скажите нам об этом.
  • 2:41 - 2:43
    Пожалуйста, прерывайте нас вопросами,
  • 2:43 - 2:45
    также после каждой лекции нас можно найти
  • 2:45 - 2:49
    на 9 этаже в 32 корпусе в Stata Center,
  • 2:49 - 2:50
    корпус информатики.
  • 2:50 - 2:54
    Если будете на девятом этаже
  • 2:54 - 2:57
    в gates tower, можете прийти попробовать
  • 2:57 - 2:58
    некоторые упражнения,
  • 2:58 - 3:00
    которые мы даём на каждой лекции
  • 3:00 - 3:02
    или просто задать нам другие вопросы
  • 3:02 - 3:04
    о вещах которые мы обсуждали на лекции
  • 3:04 - 3:05
    или о других вещах касательно
  • 3:05 - 3:07
    использования вашего компьютера
  • 3:07 - 3:08
    более эффективно.
  • 3:08 - 3:12
    Из-за ограниченного времени
  • 3:12 - 3:15
    мы не сможем покрыть все инструменты
  • 3:15 - 3:16
    во всех деталях,
  • 3:16 - 3:18
    и поэтому мы попробуем осветить
  • 3:18 - 3:20
    интересные инструменты
  • 3:20 - 3:22
    и интересные способы их использования.
  • 3:22 - 3:24
    Мы не обязательно будем углубляться
  • 3:24 - 3:25
    в детали о том как всё работает,
  • 3:25 - 3:27
    или более сложные случаи.
  • 3:27 - 3:28
    Но если у вас есть вопросы об этом,
  • 3:28 - 3:30
    пожалуйста задавайте их нам.
  • 3:30 - 3:32
    Многие из этих инструментов
  • 3:32 - 3:33
    мы использовали годами,
  • 3:33 - 3:35
    и мы, может быть, можем указать
  • 3:35 - 3:36
    на дополнительные интересные вещи,
  • 3:36 - 3:38
    которые вы можете с ними делать.
  • 3:38 - 3:41
    Так что пользуйтесь тем, что мы здесь.
  • 3:41 - 3:43
    Этот курс будет...
  • 3:43 - 3:44
    Я не хочу сказать, что он будет
  • 3:44 - 3:46
    слишком быстрым,
  • 3:46 - 3:48
    но в течении этой лекции
  • 3:48 - 3:50
    мы покроем много основ,
  • 3:50 - 3:52
    которые мы будем считать, что вы знаете
  • 3:52 - 3:53
    в течение всего семестра.
  • 3:53 - 3:55
    Такие вещи как использовать shell
  • 3:55 - 3:56
    и терминал, я объясню что это
  • 3:56 - 3:58
    тем кто не знаком с этим.
  • 3:58 - 4:00
    И затем мы довольно быстро перейдём
  • 4:00 - 4:02
    к более продвинутым инструментам
  • 4:02 - 4:03
    и их использованию.
  • 4:03 - 4:05
    Вы уже можете видеть из конспектов
  • 4:05 - 4:08
    как выглядят темы которые мы покроем.
  • 4:08 - 4:11
    Итак, мы переходим к сегодняшней лекции,
  • 4:11 - 4:13
    в которой мы рассмотрим shell,
  • 4:13 - 4:15
    и shell будет одним из основных способов
  • 4:15 - 4:18
    взаимодействия с вашим компьютером,
  • 4:18 - 4:19
    как только вы захотите
  • 4:19 - 4:20
    делать что-то больше,
  • 4:20 - 4:22
    чем привычные визуальные интерфейсы
  • 4:22 - 4:24
    позволяют вам делать.
  • 4:24 - 4:26
    Визуальные интерфейсы в некотором роде
  • 4:26 - 4:27
    ограничены в том,
  • 4:27 - 4:28
    что они позволяют вам делать,
  • 4:28 - 4:30
    потому что вы можете делать
  • 4:30 - 4:31
    только то для чего есть кнопки,
  • 4:31 - 4:33
    слайдеры и поля ввода.
  • 4:33 - 4:34
    Часто все текстовые инструменты
  • 4:34 - 4:36
    сделаны так, чтобы быть одновременно
  • 4:36 - 4:37
    совместимыми друг с другом,
  • 4:37 - 4:39
    и чтобы в то же время иметь
  • 4:39 - 4:40
    кучу способов комбинировать их
  • 4:40 - 4:42
    или программировать и автоматизировать их.
  • 4:42 - 4:44
    И поэтому в этом курсе
  • 4:44 - 4:45
    мы будем фокусироваться
  • 4:45 - 4:47
    на этих инструментах командной строки
  • 4:47 - 4:48
    или на текстовых инструментах.
  • 4:48 - 4:50
    И shell - это место где вы будете
  • 4:50 - 4:51
    делать большую часть этой работы.
  • 4:51 - 4:52
    Поэтому для тех из вас,
  • 4:52 - 4:54
    кто не знаком с shell -
  • 4:54 - 4:55
    большинство платформ предоставляют
  • 4:55 - 4:56
    какой-нибудь shell.
  • 4:56 - 4:59
    На Windows это часто PowerShell,
  • 4:59 - 5:01
    но также другие shell доступны на Windows.
  • 5:01 - 5:05
    На Linux вы найдёте тонны терминалов -
  • 5:05 - 5:06
    это такие окна,
  • 5:06 - 5:08
    которые позволяют вам отображать shell,
  • 5:08 - 5:10
    вы также найдёте много других типов shell.
  • 5:10 - 5:12
    Наиболее рапространённый -
  • 5:12 - 5:15
    это bash - или "Born Again SHell".
  • 5:15 - 5:17
    из-за того что это настольно часто используемый shell -
  • 5:17 - 5:20
    его мы будем рассматривать в этих лекциях в первую очередь
  • 5:20 - 5:23
    если вы на Mac OS - у вас тоже есть bash возможно более старой версии
  • 5:23 - 5:25
    если вы откроете terminal app
  • 5:25 - 5:31
    вы можете следовать на любой из этих платформ, но учитывайте что в большинстве своём это будет
  • 5:31 - 5:33
    Linux centric, с точки зрения как мы это преподаём
  • 5:33 - 5:37
    даже если большинство их этих инструментов работают на всех платформах
  • 5:37 - 5:42
    если вы хотите установить терминал или shell и вы не знаете как это сделать -
  • 5:42 - 5:44
    мы будем счастливы вам это показать на кафедре,
  • 5:44 - 5:52
    или это обычно очень легко нагуглить - ваша платформа плюс как бы терминал и вы найдёте
  • 5:54 - 6:00
    теперь, когда вы открыли терминал вы увидите что-то что выглядит немного вот так
  • 6:00 - 6:04
    обычно одна только линия сверху
  • 6:04 - 6:06
    это как известно "командная строка" ("shell prompt")
  • 6:06 - 6:10
    вы можете видеть как выглядит моя командная строка - у неё есть моё имя пользователя,
  • 6:10 - 6:13
    имя моего компьютера, текущий путь в котором я нахожусь
  • 6:13 - 6:16
    и мы поговорим о путях немного позже
  • 6:16 - 6:20
    и тогда это реально просто мигает - они приглашают меня что-нибудь ввести
  • 6:20 - 6:24
    и это и есть командная строка - где вы говорите shell что вы хотите делать
  • 6:24 - 6:28
    вы можете настроить её как угодно, и когда вы откроете на своём компьютере,
  • 6:28 - 6:30
    она может выглядеть немного по другому
  • 6:30 - 6:33
    может выглядеть как-то так если вы настроили её немного
  • 6:33 - 6:36
    или может выглядеть как угодно
  • 6:37 - 6:42
    му не будем углубляться в настройки shell на этой лекции, мы сделаем это потом
  • 6:42 - 6:47
    мы поговорим о том как вы будете использовать shell с пользой
  • 6:47 - 6:52
    и это ваш основной текстовый интерфейс к вашему компьютеру - через этот shell
  • 6:52 - 6:58
    в командной строке вы вводите команды и команды могут быть относительно простыми
  • 6:58 - 7:01
    обычно что-нибудь как запускать программы с аргументами
  • 7:01 - 7:05
    как это выглядит? Хорошо, мы можем запустить одну программу "дата" - date
  • 7:05 - 7:07
    мы просто набираем date и жмём enter
  • 7:07 - 7:10
    и тогда увидите, что неудивительно, дату и время
  • 7:10 - 7:12
    вы можете также запустить программу с аргументами
  • 7:12 - 7:16
    это один путь изменить исполнение программы
  • 7:16 - 7:19
    Так, к примеру, есть программа "эхо" - echo
  • 7:19 - 7:22
    и она просто выводит заданные вами аргументы
  • 7:22 - 7:27
    и аргументы это просто разделены пробелами вещи, следующие после имени программы
  • 7:27 - 7:31
    так, мы можем сказать "привет", и она выведет "привет"
  • 7:31 - 7:35
    возможно, не так ужасно удивительно, но это самые основы аргументов
  • 7:35 - 7:39
    одну вещь вы заметили - аргументы разделены пробелами
  • 7:39 - 7:43
    и вы можете подумать, что если я хочу один аргумент из нескольких слов
  • 7:43 - 7:44
    вы можете взять их в кавычки
  • 7:44 - 7:49
    вы можете сделать так echo Hello пробел World
  • 7:49 - 7:55
    и теперь программа echo получает один аргумент, который содержит строку "Hello World" с пробелом
  • 7:55 - 7:57
    вы можете использовать одинарные кавычки
  • 7:57 - 8:02
    и к разнице между одинарными и двойными кавычками мы вернёмся и будем говорить о bash скриптах
  • 8:02 - 8:06
    вы можете избежать одиночный символ (избежать разбиения строки одиночным символом)
  • 8:06 - 8:11
    например Hello\ Word - это тоже будет работать
  • 8:11 - 8:18
    Все эти правила как вам избежать, и как разбирать, и брать в кавычки различные аргументы и переменные
  • 8:18 - 8:19
    - мы рассмотрим немного позже.
  • 8:19 - 8:22
    Надеюсь вы не столкнётесь со слишком многими странностями в этой связи,
  • 8:22 - 8:26
    просто имейте ввиду, хотя бы, что пробелы разделяют строку
  • 8:26 - 8:29
    так если вы делаете что либо, как - создать директорию "Мои фотографии"
  • 8:29 - 8:33
    вы не можете просто ввести: сделать директорию Мои фотографии
  • 8:33 - 8:36
    вы получите две директории - одну с названием "Мои" и другую с названием "фотографии"
  • 8:36 - 8:39
    и это возможно не то что вы хотите
  • 8:39 - 8:45
    Теперь, одно вы можете спросить - как shell знает что есть эти программы
  • 8:45 - 8:51
    когда я ввожу date, или когда я ввожу echo - как оно знает что эти программы должны делать
  • 8:51 - 8:57
    и ответ на это - то что в вашем компьютере встроены программы, которые идут с компьютером
  • 8:57 - 9:05
    также как ваш компьютер может идти с приложением терминал, или с Windows Explorer,
  • 9:05 - 9:11
    или с каким-то браузером, он так же идёт с группой приложений ориентированных на терминал
  • 9:11 - 9:14
    и они находятся в вашей файловой системе
  • 9:14 - 9:18
    и ваш shell знает как определить где программа находится
  • 9:18 - 9:21
    B принципе знает как искать программы
  • 9:21 - 9:27
    Делается это через так называемую неизменную системную переменную (invariant environment variable)
  • 9:27 - 9:31
    Системная переменная - это такая же переменная, которую вы возможно использовали в языках программирования
  • 9:31 - 9:37
    Выходит что shell и "заново рождённый" shell в особенности, есть в действительности язык программирования
  • 9:37 - 9:42
    Эта командная строка приведённая здесь - может не только запускать программы с аргументами,
  • 9:42 - 9:46
    вы можете так же делать такие вещи как while циклы, for циклы, условные выражения,
  • 9:46 - 9:51
    всё это. Вы можете определять функции, вы можете декларировать переменные, и всё это вы можете делать в shell
  • 9:51 - 9:56
    Мы рассмотрим многое из этого на следующие лекции о shell скриптах
  • 9:56 - 10:00
    Сейчас же, давайте просто рассмотрим эту конкретную системную переменную
  • 10:00 - 10:03
    Системные переменные определяются каждый раз вы запускаете свою shell
  • 10:03 - 10:06
    Вам не нужно определять их каждый раз вы запускаете свою shell
  • 10:06 - 10:11
    Это такая группа как где ваша домашняя директория, какое ваше имя пользователя,
  • 10:11 - 10:16
    и так же есть та критичная для этой конкретной цели, которая есть PATH variable
  • 10:16 - 10:25
    Так, если я эхо $PATH это покажет мне все пути ("paths") на моей машине где shell будет искать программы.
  • 10:25 - 10:30
    Вы заметите что это список, разделённый двоеточиями,
  • 10:30 - 10:32
    это может быть долго и тяжело читать,
  • 10:32 - 10:37
    но суть в том что - когда вы введёте имя программы,
  • 10:37 - 10:41
    поиск будет идти через список путей на вашем компьютере
  • 10:41 - 10:44
    и будет искать в каждой директории
  • 10:44 - 10:48
    программу или файл чьё имя совпадает с командой которую вы пытаетесь исполнить.
  • 10:48 - 10:51
    Так, в моём случае, когда я пытаюсь запустить data или echo,
  • 10:51 - 10:53
    оно пройдёт через них один за одним,
  • 10:53 - 10:56
    до тех пор пока найдёт тот который содержит программу называемую call или echo
  • 10:56 - 10:58
    и запустит её.
  • 10:58 - 11:01
    Если вы хотите знать какую оно собственно запускает - существует команда which ("который")
  • 11:01 - 11:02
    которая позволит нам сделать это
  • 11:02 - 11:06
    Так я могу ввести which echo и оно мне скажет
  • 11:06 - 11:10
    "если я хочу запустить программу с именем echo, я буду запускать вот эту вот"
  • 11:10 - 11:14
    Стоит остановиться здесь чтобы поговорить о том, что есть пути ("paths")
  • 11:14 - 11:18
    Так пути ("paths") есть способ именовать местонахождение файла на вашем компьютере
  • 11:18 - 11:24
    В Linux и в Mac OS эти пути ("paths") разделены косой чертой ("forward slashes")
  • 11:24 - 11:29
    Так здесь вы увидите что это в корневой директории
  • 11:29 - 11:36
    Так косая черта в самом начале указывает на то что начинается с самого верха файловой системы,
  • 11:36 - 11:42
    потом смотри в директории под названием usr, потом смотри в директории bin,
  • 11:42 - 11:44
    и потом ищи файл под названием echo
  • 11:44 - 11:49
    В Windows такие пути ("paths") обычно разделены обратными косыми чертами ("back slashes").
  • 11:49 - 11:53
    И где в Linux и в Mac OS все пути ("paths") живут в корневом именном пространстве
  • 11:53 - 11:57
    так все пути ("paths") начинаются с косой черты (или все абсолютные пути ("absolute paths")),
  • 11:57 - 12:01
    в Windows есть свой корень для каждого раздела.
  • 12:01 - 12:06
    Так вы могли видеть такие вещи как С:\ или D:\
  • 12:06 - 12:13
    Таким образом Windows имеет как бы раздельные иерархии путей файловой системы для каждого имеющегося у вас диска.
  • 12:13 - 12:18
    Тогда когда Linux и Mac OS все они смонтированы под одним пространством имён.
  • 12:18 - 12:22
    Вы возможно заметили что я сказал слово абсолютный путь ("absolute path") и вы возможно не знаете что это значит.
  • 12:22 - 12:30
    Так абсолютные пути - это пути полностью определяющие местонахождение файла
  • 12:30 - 12:34
    Так в этом случае это говорит... это говорит о специфическом echo файле
  • 12:34 - 12:38
    и это даёт вам полный путь ("full path") к этому файлу,
  • 12:38 - 12:41
    но там так же есть вещи известные как относительные пути ("relative paths")
  • 12:41 - 12:47
    Так относительный путь ("relative path") относителен к тому где вы сейчас находитесь
  • 12:47 - 12:50
    и так, способ как мы находим где мы находимся -
  • 12:50 - 12:55
    вы можете ввести pwd текущая рабочая директория ("present working directory")
  • 12:55 - 12:57
    настоящая?.. "PRINT working directory"
  • 12:57 - 13:03
    Так если я введу pwd это выведет текущий путь ("path") в котором я нахожусь
  • 13:03 - 13:12
    Правильно? Так теперь я нахожусь в домашней директории, под root, потом John, под ним и тогда dev, под ним и т.д.
  • 13:12 - 13:16
    Отсюда я тогда могу изменить мою текущею рабочею директорию
  • 13:16 - 13:20
    и все относительные пути ("relative paths") относительны текущей рабочей директории
  • 13:20 - 13:23
    которая в общем-то где вы сейчас находитесь
  • 13:23 - 13:27
    В этом случае для примера я могу cd /home
  • 13:27 - 13:28
    cd - означает изменить директорию ("change directory")
  • 13:28 - 13:32
    это способ которым я меняю то что моя текущая директория есть
  • 13:32 - 13:34
    в это случае я изменяю на домашнею директорию /home
  • 13:34 - 13:38
    и теперь я - вы увидите моя командная строка изменится чтобы указать
  • 13:38 - 13:39
    что я сейчас в домашней директории /home
  • 13:39 - 13:42
    Это даёт мне только имя последнего сегмента пути ("path"),
  • 13:42 - 13:45
    но вы можете настроить ваш терминал показывать вам полный путь
  • 13:45 - 13:47
    где бы вы не были
  • 13:47 - 13:52
    И теперь, если я введу pwd снова - это покажет мне что я в /home
  • 13:52 - 13:59
    Существует также пара особенных директорий . и ..
  • 13:59 - 14:02
    . - означает "текущая директория"
  • 14:02 - 14:05
    .. - означает "родительская директория"
  • 14:05 - 14:08
    Это способ позволят вам легко перемещаться по файловой системе
  • 14:08 - 14:11
    Например здесь, если я ввиду cd ..
  • 14:11 - 14:14
    это покажет мне что я теперь в /
  • 14:14 - 14:16
    то есть я в корневой директории файловой системы
  • 14:16 - 14:20
    я был в /home, а теперь я в /
  • 14:20 - 14:24
    И действительно, если я введу pwd это подтвердится
  • 14:24 - 14:28
    И я также могу использовать относительные пути ("relative paths")
    чтобы перейти вниз по файловой системе
  • 14:28 - 14:35
    я могу ввести cd ./home и это изменит директорию на home директорию под текущей директорией
  • 14:35 - 14:38
    Правильно? Это приведёт меня обратно в /home
  • 14:38 - 14:43
    Если я попробую ввести ./home снова - ответ будет: "такой директории не существует"
  • 14:43 - 14:46
    Потому что нету home директории в текущей директории где я теперь
  • 14:46 - 14:48
    куда я попал выполнив cd
  • 14:48 - 14:51
    Правильно?
  • 14:51 - 14:57
    И я могу как бы cd всю дорогу назад, в то место где я был
  • 14:57 - 15:00
    используя относительные пути ("relative paths")
  • 15:00 - 15:09
    И я также могу делать вещи как .. .. .. чтобы вернутся куда-нибудь глубоко назад в мою файловую систему
  • 15:09 - 15:13
    это, по случаю, весь путь назад в корневую директорию, так здесь есть директория bin
  • 15:13 - 15:17
    и под bin есть файл echo, итак я могу сделать world
  • 15:17 - 15:20
    и это запускает программу echo из директории bin
  • 15:20 - 15:22
    Хорошо, это способ как вы можете конструировать пути,
  • 15:22 - 15:24
    чтобы произвольно пересекать вашу файловую систему
  • 15:24 - 15:28
    Иногда вам нужены абсолютные пути иногда относительные
  • 15:28 - 15:30
    Обычно вы ипользуете кротчайший
  • 15:30 - 15:34
    Но, если вы хотите, к примеру, запустить программу,
  • 15:34 - 15:37
    или написать программу которая запускает программу,
  • 15:37 - 15:38
    такую как echo или date
  • 15:38 - 15:41
    и вы хотите запускать откуда угодно
  • 15:41 - 15:45
    вам или нужно ввести имя программы, как data или echo
  • 15:45 - 15:48
    и позволить shell использовать этот путь чтобы найти где она находится,
  • 15:48 - 15:50
    или нужно ввести абсолютный путь ("absolute path")
  • 15:50 - 15:52
    Потому что если вы дадите относительный путь ("relative path"),
  • 15:52 - 15:54
    тогда если я запущу её в моей домашней директории,
  • 15:54 - 15:56
    и вы запустите её в какой-то другой директории,
  • 15:56 - 16:01
    это может работать у меня, но не у вас
  • 16:01 - 16:04
    В общем-то, когда мы запускаем программу,
  • 16:04 - 16:07
    она будет оперировать в текущей директории
  • 16:07 - 16:08
    по крайней мере по умолчанию
  • 16:08 - 16:11
    если мы не зададим какие либо аргументы
  • 16:11 - 16:15
    И это очень удобно - это значит что часто нам не нужно давать полные пути,
  • 16:15 - 16:19
    мы можем просто использовать имена файлов в директории где мы находимся
  • 16:19 - 16:23
    Одно что действительно удобно - это найти что находится в текущей директории
  • 16:23 - 16:27
    Так мы уже видели pwd - который выводит наше текущее местонахождение
  • 16:27 - 16:33
    Существует команда ls - которая покажет вам список ("list") файлов в текущей директории
  • 16:33 - 16:37
    Так, если я введу ls здесь - это список всех файлов в текущей директории
  • 16:37 - 16:42
    Правильно? И удобный способ просто и быстро перемещаться в файловой системе
  • 16:42 - 16:46
    Вы увидите что если я, как бы, cd .. и потом ls
  • 16:46 - 16:50
    это покажем мне файлы из той директории
  • 16:50 - 16:56
    но я так же могу ввести ls .. я как бы могу задать путь
  • 16:56 - 17:03
    и ls ту директорию заместо этой
  • 17:03 - 17:06
    Вы можете видеть это если я пойду в саму корневую директорию
  • 17:06 - 17:08
    Правильно? И корневая директория содержит другие файлы
  • 17:08 - 17:12
    Есть один удобный трюк, о котором вы возможно не знаете,
  • 17:12 - 17:14
    две другие особые вещи вы можете сделать
  • 17:14 - 17:19
    одна это тильда символ ~ этот символ приведёт вас в вашу домашнею директорию
  • 17:19 - 17:22
    Таким образом, ~ всегда представляет домашнею директорию
  • 17:22 - 17:24
    И вы можете делать относительные пути ("relative paths") туда
  • 17:24 - 17:35
    я могу ввести ~/ и я тут - потому что тильда выразилась в /home/jon
  • 17:35 - 17:41
    Так же, в особенности для cd, очень удобный аргумент вы можете задать - тире
  • 17:41 - 17:46
    если вы введёте cd - вы перейдёте в директорию где вы были до этого
  • 17:46 - 17:48
    Так если я введу cd - я попаду назад в корневую директорию
  • 17:48 - 17:53
    Если я введу cd - снова, я попаду назад в missing-semester
  • 17:53 - 17:59
    То есть, это удобный способ если вы хотите переключатся между двумя разными директориями
  • 17:59 - 18:05
    В случае ls, или в случае cd - могут существовать аргументы о которых вы не знаете
  • 18:05 - 18:09
    Правильно? Пока ещё мы не делали ничего, кроме, задания пути,
  • 18:09 - 18:13
    но откуда бы вы узнали что можете задавать путь в ls?
  • 18:13 - 18:18
    Ну, большинство программ принимают то что известно как аргументы, вроде флагов и опций
  • 18:18 - 18:20
    они обычно начинаются с тире -
  • 18:20 - 18:24
    Одна из наиболее удобных из них - это --help
  • 18:24 - 18:26
    Большинство программ это поддерживают,
  • 18:26 - 18:35
    и если вы введёте к примеру ls --help это надеюсь выведет кучу информации об этой команде
  • 18:35 - 18:39
    И вы увидите тут как использовать ls, различные опции
  • 18:39 - 18:41
    и вы можете задать количество файлов
  • 18:41 - 18:48
    Как читать эти описания? - троеточие означает один, ноль или больше
  • 18:48 - 18:53
    Квадратные скобки означают - необязательно - то есть в этом случае опции не обязательны
  • 18:53 - 18:55
    и количество файлов необязательно (опционно)
  • 18:55 - 18:58
    И вы увидите что это говорит о том что программа делает
  • 18:58 - 19:01
    и также определяет разные типы флагов и опций, которые вы можете задавать
  • 19:01 - 19:06
    Обычно мы называем одиночное тире с одиночной буквой флагом,
  • 19:06 - 19:09
    или что-то что не принимает значения - флагом.
  • 19:09 - 19:11
    И все что принимает значение - опцией
  • 19:11 - 19:16
    Так, к примеру, -a и --all оба флаги,
  • 19:16 - 19:22
    а -с и --color - опции
  • 19:22 - 19:27
    Одну вещь вы увидите здесь, если покрутите достаточно долго вниз,
  • 19:27 - 19:30
    -l флаг
  • 19:30 - 19:32
    и упс, это не помогает
  • 19:32 - 19:39
    -l флаг использует длинный формат вывода
  • 19:39 - 19:43
    это уже само по себе достаточно полезно, но давайте посмотрим что это на самом деле делает
  • 19:43 - 19:48
    если я введу ls -l это всё так же выводит файлы из текущей директории,
  • 19:48 - 19:51
    но и даст мне гораздо больше информации об этих файлах
  • 19:51 - 19:54
    и это то, что вы будете использовать довольно часто,
  • 19:54 - 20:00
    потому что, эта дополнительная информация, часто, довольно удобна
  • 20:00 - 20:05
    давайте посмотрим что представляет некоторая из этой дополнительной информации
  • 20:05 - 20:10
    ага, начнём с того, что d в начале некоторых из этих строк,
  • 20:10 - 20:12
    означает что это что-то является директорией
  • 20:12 - 20:16
    так _data здесь, к примеру, является директорией
  • 20:16 - 20:20
    а 404.html не является директорией, это файл
  • 20:20 - 20:27
    следующие буквы после этого показывают права доступа к тому файлу
  • 20:27 - 20:31
    Так, как вы уже видели раньше я могу не иметь доступа открыть данный файл,
  • 20:31 - 20:34
    или я могу не иметь доступа перейти в данную директорию
  • 20:34 - 20:37
    и это всё продиктовано правами доступа к данному файлу или директории
  • 20:37 - 20:45
    Способ прочтения этого - первая группа из трёх прав доступа установленна для владельца ("owner") файла
  • 20:45 - 20:49
    Все эти файлы которые вы здесь видите принадлежат мне
  • 20:49 - 20:54
    Вторая группа их трёх символов - права доступа для группы владеющей этими файлами
  • 20:54 - 20:58
    В этом случае все эти файлы также принадлежать группе Джона
  • 20:58 - 21:03
    И последняя группа их трёх - права доступа для всех остальных
  • 21:03 - 21:07
    то-есть всех кроме пользователя или группы владеющей этим файлом
  • 21:07 - 21:09
    Эта директория возможно немного скучная,
  • 21:09 - 21:12
    потому что всё принадлежит мне
  • 21:12 - 21:17
    Но если мы сделаем что-нибудь вроде cd / и ls -l
  • 21:17 - 21:20
    вы увидите что всё принадлежит root ("суперпользователь")
  • 21:20 - 21:23
    мы вернёмся кто му что такое root пользователь
  • 21:23 - 21:25
    Но здесь вы видите некоторые права доступа к файла немного более интересные
  • 21:25 - 21:32
    Группы из трёх представляют из себя права считывает, изменять и запускать
  • 21:32 - 21:35
    Что это означает отличается для файлов и директорий
  • 21:35 - 21:37
    Для файлов это довольно просто
  • 21:37 - 21:41
    если у вас есть право считывать файл - вы можете считать содержимое файла
  • 21:41 - 21:46
    если у вас есть право изменять файл - вы можете добавить к этому файлу
  • 21:46 - 21:48
    или полностью заменить его
  • 21:48 - 21:50
    И если у вас установлен запустить, X бит, у файла,
  • 21:50 - 21:53
    тогда вы можете запустить этот файл на выполнение
  • 21:53 - 21:57
    Так, если мы введём ls -l /bin,
  • 21:57 - 21:58
    это ужасно,
  • 21:58 - 22:00
    и /usr/bin - вы увидите
  • 22:00 - 22:02
    что у них у всех бит "запустить" выставлен
  • 22:02 - 22:05
    даже для людей которые не владеют этим файлом
  • 22:05 - 22:07
    И это потому что программа echo, на пример,
  • 22:07 - 22:10
    мы хотим что бы все на этом компьютере могли её запустить
  • 22:10 - 22:13
    Нет причин чтобы сказать "только некоторые пользователи могут запускать echo"
  • 22:13 - 22:16
    Это не имеет никакого смысла
  • 22:16 - 22:20
    Для директорий, однако, эти права доступа немного отличаются
  • 22:20 - 22:24
    Так, "считывать" означает - имеете ли вы право видеть
  • 22:24 - 22:26
    какие файлы находятся внутри этой директории
  • 22:26 - 22:29
    то есть, думайте о считывании списка, для директории
  • 22:29 - 22:31
    имеете ли вы право листать её содержимое
  • 22:31 - 22:35
    изменять - для директории, это имеете ли вы право переименовывать,
  • 22:35 - 22:38
    создавать или удалять файлы в этой директории
  • 22:38 - 22:43
    то есть, это всё ещё как бы "изменять", но заметьте что это означает что
  • 22:43 - 22:49
    если вы имеете право "изменять" файл, но не имеете права "изменять" директорию,
  • 22:49 - 22:50
    вы не можете удалить этот файл.
  • 22:50 - 22:52
    Вы можете сделать его пустым, но вы не можете удалить его
  • 22:52 - 22:56
    потому что, это бы потребовало "изменить" саму директорию
  • 22:56 - 23:01
    и в заключении, "запустить" на директориях, часто сбивает людей с толку
  • 23:01 - 23:04
    "запустить" на директориях - это то, что известно как "поиск"
  • 23:04 - 23:09
    и это не особо полезно как имя, но что это значит, имеете ли вы право
  • 23:09 - 23:12
    войти в эту директорию
  • 23:12 - 23:15
    Если вы хотите получить доступ к файлу, если вы хотите открыть его, или считать его,
  • 23:15 - 23:20
    изменить его, всё что вы хотите сделать, в общем, cd - перейти в это директорию
  • 23:20 - 23:25
    вы должны иметь права "запустить" и на всех родительских директориях этой директории,
  • 23:25 - 23:27
    и на самой этой директории
  • 23:27 - 23:32
    Так, например, для меня, получить доступ к файлу внутри /user/bin
  • 23:32 - 23:35
    как /user/bin/echo - я должен иметь право "запустить" на корневой директории root,
  • 23:35 - 23:37
    я должен иметь право "запустить" на user,
  • 23:37 - 23:39
    и я должен иметь право "запустить" на bin
  • 23:39 - 23:44
    если я не имею всех тех "запустить" битов - я не буду иметь права доступа к тому файлу,
  • 23:44 - 23:49
    поскольку у меня не будет права войти в директории по пути
  • 23:49 - 23:57
    есть несколько битов, которые вы можете встретить эссы или тии, вы можете видеть эллы
  • 23:57 - 23:59
    их мы можем обсудить на кафедре если вам интересно
  • 23:59 - 24:03
    они в основном, не будут относится к тому что вы делаете в этом классе,
  • 24:03 - 24:09
    но о них хорошо бы знать, так, если вам интересно, поищите об них сами
  • 24:09 - 24:11
    или спросите у нас на кафедре
  • 24:11 - 24:14
    Существуют некоторые другие программы о которых хорошо бы знать
  • 24:14 - 24:18
    о, простите, ещё одну вещь я должен упомянуть: если у вас просто тире - у вас нет этого права доступа
  • 24:18 - 24:23
    так, если это, к примеру: r-x - это означает у вас есть права "считывать" и "запускать",
  • 24:23 - 24:26
    но у вас нет права "изменять"
  • 24:26 - 24:29
    Существуют некоторые полезные программы, чтобы познакомится с ними сейчас,
  • 24:29 - 24:32
    одна из них команда move, или mv
  • 24:32 - 24:38
    Так если я cd назад, в мой missing-semester, тут mv позволяет мне переименовать файл
  • 24:38 - 24:44
    и переименовать здесь берёт два пути - берёт старый путь и новый путь
  • 24:44 - 24:47
    Это означает, что move, позволяет вам как переименовывать файлы,
  • 24:47 - 24:51
    если вы измените имя файла, но не директорию,
  • 24:51 - 24:53
    или позволяет вам переместить файл в совершенно другую директорию
  • 24:53 - 24:58
    это просто, вы задаёте путь к текущему файлу, и путь куда вы хотите тот файл поместить
  • 24:58 - 25:02
    И это может поменять его местоположение и его имя
  • 25:02 - 25:06
    Так, например, я могу mv файл dotfiles.md стать foo.mv
  • 25:06 - 25:08
    Бесполезно. Правильно?
  • 25:08 - 25:12
    И также, я могу mv его обратно
  • 25:14 - 25:20
    Так же существует команда cp или copy, очень похоже - вы копируете файл
  • 25:20 - 25:22
    cp также принимает два аргумента.
  • 25:22 - 25:25
    Оно берёт путь откуда вы хотите копировать,
  • 25:25 - 25:26
    и путь куда вы хотите копировать
  • 25:26 - 25:28
    И это полные пути ("full paths")
  • 25:28 - 25:30
    Так я могу использовать это, например,
  • 25:30 - 25:37
    чтобы сказать: "я хочу скопировать файл dotfiles.md в, конечно, ../food.md"
  • 25:37 - 25:41
    и теперь, если я сделаю ls .. , то я увижу там есть файл food.md
  • 25:41 - 25:42
    в той директории
  • 25:42 - 25:47
    Так, cp тоже принимает два пути, не обязательно находится в той же директории
  • 25:47 - 25:51
    и также, там есть команда rm, которая позволяет удалить файл
  • 25:51 - 25:55
    и там также вы можете задать путь, в этом случае я удаляю ../food.md
  • 25:55 - 26:01
    вы должны быть в курсе что для удаления, особенно в Lunix, удаление по умолчанию не рекурсивно
  • 26:01 - 26:05
    Там, вы не можете удалить директорию используя rm
  • 26:05 - 26:08
    Вы можете послать флаг -r , который позволит вам произвести рекурсивное удаление,
  • 26:08 - 26:12
    и задать путь который вы хотите удалить, и это удалит всё под ним
  • 26:12 - 26:17
    Существует, также, команда rmdir , которая позволяет вам удалять директорию,
  • 26:17 - 26:21
    но она только позволяет вам удалить эту директорию, если она пустая
  • 26:21 - 26:23
    Таким образом, идея здесь как бы безопасного механизма для вас,
  • 26:23 - 26:28
    так что вы случайно не выбросите кучу своих файлов
  • 26:28 - 26:29
    И последняя маленькая команда, которую удобно использовать,
  • 26:29 - 26:32
    это mkdir - которая создаёт новую директорию
  • 26:32 - 26:35
    И как мы говорили до этого, вы не хотите сделать что-то вроде этого,
  • 26:35 - 26:38
    потому что, это создаст две директории для вас,
  • 26:38 - 26:40
    одна будет называться "my" а другая "photos"
  • 26:40 - 26:42
    Если вы действительно хотите создать такую директорию,
  • 26:42 - 26:48
    вы либо избежите пробел, или возьмёте строку в кавычки
  • 26:50 - 26:52
    Если вы когда либо захотите больше информации о том,
  • 26:52 - 26:56
    как любая команда, в принципе, работает на этих платформах
  • 26:56 - 26:59
    существует действительно удобная команда для этого тоже
  • 26:59 - 27:02
    Существует команда называемая man (manual pages - руководство, мануал)
  • 27:02 - 27:06
    Эта программа берёт как аргумент название другой программы,
  • 27:06 - 27:08
    и выдаёт её "руководство к эксплуатации"
  • 27:08 - 27:11
    Так, на пример, мы можем ввести man ls
  • 27:11 - 27:14
    и это показывает нам мануал к ls
  • 27:14 - 27:19
    Вы заметите что в случае ls - это довольно похоже на то что мы получили с ls --help
  • 27:19 - 27:23
    но здесь немного удобнее ориентироваться, немного удобнее читать
  • 27:23 - 27:28
    Обычно ближе к концу вы найдёте примеры, информацию о том кто это написал,
  • 27:28 - 27:31
    и где вы можете найти больше информации, и типа такого
  • 27:31 - 27:35
    Одна вещь может запутать, иногда, по крайней мере до последней версии,
  • 27:35 - 27:38
    где они добавили это дерево внизу, которое говорит "нажми q чтобы выйти"
  • 27:38 - 27:42
    Раньше они не упоминали этого: вы нажимаете на q чтобы выйти из этой программы
  • 27:42 - 27:46
    Может быть очень сложно выйти, если вы не знаете этого
  • 27:47 - 27:51
    Удобный шорткат здесь - ctrl l
  • 27:51 - 27:55
    который позволяет вам очистить терминал и перейти на верх
  • 27:55 - 27:59
    Так мы только говорили о программах изолированно,
  • 27:59 - 28:02
    но основная мощность shell проявляется
  • 28:02 - 28:05
    когда вы начинаете комбинировать различные программы
  • 28:05 - 28:06
    Правильно?
  • 28:06 - 28:10
    Так вместо выполнения cd , выполнения ls , и т.д. ,
  • 28:10 - 28:12
    вы возможно хотите объединить несколько программ вместе,
  • 28:12 - 28:14
    вы возможно хотите взаимодействовать с файлами,
  • 28:14 - 28:16
    и оперировать файлами между программами
  • 28:16 - 28:19
    И способ как мы можем это сделать:
  • 28:19 - 28:22
    использовать нотацию потока, которую даёт нам shell
  • 28:22 - 28:24
    Каждая программа, по умолчанию, имеет,
  • 28:24 - 28:27
    я немного упрощу, и скажу: два первичных потока
  • 28:27 - 28:31
    Она имеет поток ввода, и поток вывода
  • 28:31 - 28:33
    По умолчанию, поток ввода - это ваша клавиатура
  • 28:33 - 28:35
    В общем-то поток ввода это ваш терминал,
  • 28:35 - 28:37
    и то что вы печатаете на терминале,
  • 28:37 - 28:39
    окажется к конце концов в программе
  • 28:39 - 28:42
    И она так же имеет поток вывода по умолчанию, который, что либо программа выводит,
  • 28:42 - 28:44
    будет выведено в этот поток
  • 28:44 - 28:46
    И по умолчанию, это тоже ваш терминал
  • 28:46 - 28:50
    Поэтому, когда я ввожу echo hello, это выводится назад на мой терминал
  • 28:50 - 28:55
    Но shell даёт вам способ переназначить эти потоки
  • 28:55 - 28:58
    Поменять, куда ввод и вывод программы указывают
  • 28:58 - 29:06
    Этот способ, наиболее простой способ: использование знаков угловых скобок
  • 29:06 - 29:08
    так что вы можете ввести что-нибудь как это,
  • 29:08 - 29:11
    или вы можете ввести что-нибудь как это
  • 29:11 - 29:18
    Левая угловая скобка указывает переназначить ввод этой программы на содержимое этого файла
  • 29:18 - 29:26
    И закрывающая угловая скобка означает переназначить вывод предыдущей программы в этот файл
  • 29:26 - 29:29
    Так, давайте посмотрим на пример того, как это будет выглядеть
  • 29:29 - 29:34
    если я введу echo hallo , я могу сказать, я хочу сохранить тот контент
  • 29:34 - 29:36
    в файле с именем hello.txt
  • 29:36 - 29:39
    И потому что я задал, это относительный путь ("relative path"), правильно?,
  • 29:39 - 29:42
    это создаст файл в текущей директории, с названием hello.txt
  • 29:42 - 29:46
    и по крайней мере в теории, его содержимое должно быть словом "hello"
  • 29:46 - 29:50
    Так, если я запущу это, заметьте что ничего не выведено на мой экран
  • 29:50 - 29:53
    В предыдущий раз когда я выполнял echo hello это вывело hello
  • 29:53 - 29:57
    Теперь это hello ушло в файл под названием hello.txt
  • 29:57 - 30:00
    и я могу проверит это используя программу называемую cat
  • 30:00 - 30:03
    Так, cat выводит содержимое файла
  • 30:03 - 30:08
    Так, я могу ввести cat hello.txt, и вот он показывает мне hello
  • 30:08 - 30:13
    Но cat также поддерживает этот тип переназначений
  • 30:13 - 30:17
    Так я могу сказать cat, который по умолчанию только выводит свой ввод,
  • 30:17 - 30:19
    просто дублирует что введено на выводе,
  • 30:19 - 30:23
    я могу сказать: я хочу что бы ты взял свой ввод, из hello.txt
  • 30:23 - 30:28
    Что случится в этом случае, это shell откроет hello.txt
  • 30:28 - 30:31
    возьмёт его содержимое и сделает его вводом cat,
  • 30:31 - 30:34
    и тогда cat просто выведет это в свой вывод,
  • 30:34 - 30:37
    который, поскольку я его не переназначил, будет просто моим терминалом
  • 30:37 - 30:41
    То есть это просто выведет hello на экран
  • 30:41 - 30:43
    И я могу использовать их обоих одновременно
  • 30:43 - 30:45
    Так, например, если я хочу скопировать какой-нибудь файл,
  • 30:45 - 30:48
    и я не хочу использовать cp команду по какой-то причине,
  • 30:48 - 30:51
    я могу сделать это:
  • 30:51 - 30:57
    и в этом случае, я ничего не говорю программе cat, я просто говорю "далай свою нормальное дело"
  • 30:57 - 31:00
    правильно, программа cat ничего не знает об этом переназначении
  • 31:00 - 31:03
    Но я говорю shell использовать hello.txt как ввод для cat,
  • 31:03 - 31:08
    и записывать всё что cat выводит в hello.txt
  • 31:08 - 31:10
    Опять это ничего не выводит на экран
  • 31:10 - 31:14
    Но если я cat hello.txt - я получу вывод, как и следовало ожидать,
  • 31:14 - 31:19
    что есть копия оригинального файла
  • 31:19 - 31:25
    Существуют так же двойные закрывающие скобки, что добавляет, вместо просто перезаписывания
  • 31:25 - 31:30
    Так, вы заметите, если я сделаю cat hello.txt в hello2.txt опять
  • 31:30 - 31:34
    и тогда я cat hello2.txt - он всё ещё содержит hello,
  • 31:34 - 31:35
    несмотря на то что это уже содержало hello
  • 31:35 - 31:39
    Если я переключу это, взамен, на двойные закрывающие скобки,
  • 31:39 - 31:40
    что означает добавить
  • 31:40 - 31:44
    И если я теперь cat этот файл - в нём hello повторяется дважды
  • 31:45 - 31:47
    Это довольно простые,
  • 31:47 - 31:49
    они просто способы взаимодействия с файлами,
  • 31:49 - 31:52
    но когда это становится действительно интересно - это дополнительный оператор
  • 31:52 - 31:54
    который вам даёт shell, называется pipe ("труба") символ
  • 31:54 - 31:59
    Так | - вертикальная черта, и pipe значит: -
  • 31:59 - 32:07
    "возьми вывод программы с лева и сделай это вводом программы справа"
  • 32:07 - 32:09
    Правильно?
  • 32:09 - 32:14
    Так, как это выглядит, хорошо, давайте возьмём примет ls /
  • 32:14 - 32:16
    или ls -l /
  • 32:16 - 32:21
    это выводит кучу вещей. Давайте скажем я хочу только последнюю линию этого вывода
  • 32:21 - 32:24
    Хорошо, существует команда под названием tail ("хвост")
  • 32:24 - 32:28
    И tail выводит строки с конца своего ввода
  • 32:28 - 32:32
    И я могу ввести -n1 - так это флаг n
  • 32:32 - 32:37
    вы так же можете использовать --lines, если хотите использовать её как более длинную опцию
  • 32:37 - 32:40
    но в этом случае, это тоже самое как вывод последней линии
  • 32:40 - 32:49
    и я могу связать это вместе - так я могу сказать ls -l / | tail -n1
  • 32:49 - 32:54
    и заметьте что здесь ls не знает об tail, и tail не знает об ls
  • 32:54 - 32:58
    это разные программы и никогда не были запрограммированы быть совместимыми друг с другом
  • 32:58 - 33:01
    всё что они умеют делать - это читать из ввода и выводить в вывод
  • 33:01 - 33:04
    а pipe, как раз, связывает их вместе
  • 33:04 - 33:09
    И в этом конкретном случае, я говорю: "я хочу вывод из ls быть вводом в tail,
  • 33:09 - 33:12
    и я хочу вывод от tail просто на мой терминал" потому что я не перенаправил его
  • 33:12 - 33:16
    Я мог бы так же перенаправить это, ну скажем, я хочу этот вывод в ls.txt
  • 33:16 - 33:20
    и в этом случае если я cat ls.txt, я получу соответствующий вывод
  • 33:20 - 33:23
    И оказывается, вы можете делать реально чёткие вещи с этим
  • 33:23 - 33:27
    мы покроем это гораздо больше на лекции по обработке данных ("data wrangling")
  • 33:27 - 33:29
    это будет через 4 дня, или около того
  • 33:29 - 33:33
    о разных интересных вещах которые вы можете делать, кода начнёте
  • 33:33 - 33:35
    строить более продвинутые конвейеры ("pipelies")
  • 33:35 - 33:43
    один, дать вам один пример, мы можем сделать что-то вроде curl --head silent google com
  • 33:45 - 33:47
    так, чтобы просто показать вам как это выглядит
  • 33:47 - 33:51
    это даёт мне все HTTP заголовки для доступа к google.com
  • 33:51 - 34:03
    и я могу послать это в grep --ignore case, или просто -i, если хочу, content-length
  • 34:03 - 34:05
    так это выведет мне заголовок content-length ("длинна содержимого")
  • 34:05 - 34:07
    grep это программа о которой мы поговорим позже
  • 34:07 - 34:11
    она позволит вам искать во вводе по заданному ключевому слову
  • 34:11 - 34:14
    мы можем пропустить это через, скажем, команду cut
  • 34:14 - 34:20
    которая принимает дилимитер - выставленный как пробел,
  • 34:20 - 34:22
    и я хочу второе поле
  • 34:22 - 34:24
    и это выводит только content-length ("длинна содержимого")
  • 34:24 - 34:28
    это, как бы глупый пример, правда, он просто позволяет вам вытащить длину содержимого
  • 34:28 - 34:31
    в байтах, с google.com, из командной строки
  • 34:31 - 34:36
    это не очень полезная вещь, но вы можете видеть как сцепляя это, вы можете
  • 34:36 - 34:40
    достигнуть кучу действительно интересных эффектов от манипуляций с текстом
  • 34:40 - 34:43
    И оказывается, что pipes не только для текстовых данных,
  • 34:43 - 34:45
    вы можете делать это так же с изображениями,
  • 34:45 - 34:46
    у вас может быть программа,
  • 34:46 - 34:51
    которая манипулирует с бинарным изображением на входе и выводит бинарное изображение
  • 34:51 - 34:53
    и вы можете сцепить их вместе таким образом
  • 34:53 - 34:55
    И позже мы поговорим о некоторых такого рода примерах тоже
  • 34:55 - 34:58
    вы можете это делать даже для видео - если хотите.
  • 34:58 - 35:00
    Вы можете транслировать, это, например, прекрасный способ
  • 35:00 - 35:05
    если у вас дома есть Chromecast, вы так можете транслировать видео файл,
  • 35:05 - 35:10
    если поставить последней программой в ваш pipe программу отправки Chromecast
  • 35:10 - 35:12
    Так, вы транслируете в неё видео файл и она транслирует,
  • 35:12 - 35:14
    или HTTP на ваш Chromecast
  • 35:18 - 35:21
    Мы будем много говорить об этом на лекции по обработке данных ("data wrangling"), но
  • 35:21 - 35:25
    есть ещё одна вещь, о которой я хочу рассказать вам как бы:
  • 35:25 - 35:30
    как использовать терминал более интересным и более мощным способом,
  • 35:30 - 35:32
    чем тот к которому вы могли привыкнуть.
  • 35:32 - 35:38
    Возможно даже будет интересным для тех из вас, кто уже чувствует себя с терминалом комфортно.
  • 35:38 - 35:43
    Но, сперва нам нужно покрыть важную тему относящеюся к Linux системам, и Mac OS
  • 35:43 - 35:47
    системам в особенности, это понятие root пользователя
  • 35:47 - 35:50
    root пользователь это что то вроде администратора в Windows
  • 35:50 - 35:53
    и имеет нулевой идентификационный номер
  • 35:53 - 35:58
    root пользователь особенный, потому что ему позволено делать на вашей систему всё что он захочет
  • 35:58 - 36:01
    даже если файл закрытые для всех для считывания,
  • 36:01 - 36:03
    или если закрыт для всех для изменений,
  • 36:03 - 36:05
    root всё равно имеет доступ к этому файлу
  • 36:05 - 36:09
    root это как бы супер юзер - они могут делать всё что захотят
  • 36:09 - 36:13
    и чаще всего вы на будете оперировать как супер юзер
  • 36:13 - 36:17
    вы не будете root, вы будете пользователем как Джон, или какое угодно ваше имя
  • 36:17 - 36:19
    и это будет пользователь которым вы действуете
  • 36:19 - 36:23
    Потому что, если бы оперировали своим компьютером как пользователь root всё время -
  • 36:23 - 36:26
    если вы запустите не ту программу, она может разрушить ващ компьютер
  • 36:26 - 36:29
    И вы не хотите этого! Правильно?
  • 36:29 - 36:33
    Но время от времени вы хотите сделать что либо, что требует, что бы вы были root
  • 36:33 - 36:34
    Обычно, в таки случаях,
  • 36:34 - 36:38
    вы будете пользоваться программой под названием sudo,
  • 36:38 - 36:43
    или делать как su - и su в этом случае "супер юзер"
  • 36:43 - 36:47
    Так, это способ выполнить следующее как супер юзер
  • 36:47 - 36:53
    Обычно, как sudo работает: вы вводите sudo и затем команду как обычно на вашем терминале,
  • 36:53 - 36:59
    и он выполнит вашу команду так, как если бы вы были root, а не ваш пользователь
  • 36:59 - 37:01
    Где вам может это понадобится?
  • 37:01 - 37:06
    Хорошо, на вашем компьютере существует много файловых систем,
  • 37:06 - 37:09
    но в особенности есть одна под названием sys fs
  • 37:09 - 37:14
    Если вы cd в /sys - это целый новый мир:
  • 37:14 - 37:18
    эта файловая система не файлы на вашем компьютере,
  • 37:18 - 37:21
    а различные параметры ядра ("kernel")
  • 37:21 - 37:25
    Так, ядро ("kernel") - это в общем-то, ядро вашего компьютера
  • 37:25 - 37:29
    Это ваш способ получить доступ к различным параметрам ядра,
  • 37:29 - 37:32
    через что-то, что выглядит как файловая система
  • 37:32 - 37:36
    Вы здесь увидите, что если я cd в class, на пример,
  • 37:36 - 37:39
    это имеет директории для различных типов устройств
  • 37:39 - 37:40
    с которыми я могу взаимодействовать,
  • 37:40 - 37:43
    или различные ключи к которым я могу получить доступ
  • 37:43 - 37:48
    или всякого рода странные рычажки, внутри
  • 37:48 - 37:51
    И поскольку они представлены как файлы - это означает что мы можем использовать
  • 37:51 - 37:55
    все те инструменты, которые мы пока использовали, чтобы манипулировать ими
  • 37:55 - 37:59
    Один такой пример, если вы пойдёте в /sys/class/backlight
  • 37:59 - 38:03
    так, это backlight директория позволяет вам конфигурировать подсветку на вашем лаптопе,
  • 38:03 - 38:05
    если она у вас есть
  • 38:05 - 38:08
    Так, я могу cd в intel_baklight, это intel лаптоп,
  • 38:08 - 38:11
    здесь внутри вы увидите файл под названием brightness ("яркость")
  • 38:11 - 38:15
    Я могу cat brightness - это текущая яркость моего экрана
  • 38:15 - 38:18
    Но не только это, я могу это также изменить,
  • 38:18 - 38:21
    чтобы изменить яркость моего экрана
  • 38:21 - 38:23
    Так, вы можете подумать что я могу,
  • 38:23 - 38:25
    давайте посмотрим какая здесь максимальная яркость
  • 38:25 - 38:29
    ОК, так это сейчас выставлено на максимум
  • 38:29 - 38:31
    Вы можете представить, что я могу сделать что-то вроде
  • 38:31 - 38:37
    Если я введу echo, сделаем половину или около того, echo 500 > brightness
  • 38:37 - 38:40
    Если я введу - это говорит - "в доступе отказано"
  • 38:40 - 38:44
    Я не имею права менять яркость, потому что, для того, чтобы,
  • 38:44 - 38:46
    в общем для того чтобы поменять что-то в ядре,
  • 38:46 - 38:47
    вам нужно быть администратором
  • 38:47 - 38:52
    И вы можете представить, что способ это разрешить, это ввести sudo echo 500
  • 38:52 - 38:54
    Но я опять получил ошибку - "в доступе отказано"
  • 38:54 - 38:56
    Но почему?
  • 38:56 - 39:00
    Это потому что, как я уже упоминал ранее, эти перенаправления ввода и вывода -
  • 39:00 - 39:02
    не есть что то - о чём знают программы
  • 39:02 - 39:08
    когда мы перенаправили ls в tail, tail не знала о ls, и ls не знал о tail
  • 39:08 - 39:11
    pipe и перенаправление было задано shell
  • 39:11 - 39:13
    Так, в этом случае, что происходит,
  • 39:13 - 39:17
    я говорю моей shell выполнить программу sudo
  • 39:17 - 39:23
    с аргументами echo и 500, и пошли вывод в файл под названием brightness
  • 39:23 - 39:29
    Но shell открывает файл brightness, а не sudo
  • 39:29 - 39:32
    Так, в этом случае, shell, которая запущена как я,
  • 39:32 - 39:34
    пытается открыть файл brightness на запись,
  • 39:34 - 39:36
    и она не имеет права этого делать
  • 39:36 - 39:38
    И поэтому я получил ошибку "в доступе отказано"
  • 39:38 - 39:42
    Вы могли видеть это, если вы, как бы, ищите что либо,
  • 39:42 - 39:43
    вышли на Stack Overflow
  • 39:43 - 39:44
    и там сказано: просто запусти эту команду
  • 39:44 - 39:47
    и вы увидите что это далаем что-то вроде:
  • 39:47 - 39:48
    они дали вам инструкции вроде:
  • 39:48 - 39:58
    1 > /sys/net/ipv4_forward - например
  • 39:58 - 40:02
    это что то вы могли видеть, если вы устанавливаете firewall
  • 40:02 - 40:04
    И эта команда должна работать,
  • 40:04 - 40:06
    потому что этот маленький символ фунта ("phond symbol"),
  • 40:06 - 40:08
    указывает - запускать это как root
  • 40:08 - 40:10
    Это что-то, что очень редко разъяснено,
  • 40:10 - 40:12
    но это то, что # означает
  • 40:12 - 40:14
    Вы увидите на моей командной строке знак доллара,
  • 40:14 - 40:17
    и доллар указывает: вы сейчас не root
  • 40:17 - 40:19
    Так, вопрос - как мне обойти это?
  • 40:19 - 40:22
    Я могу переключиться в терминал root.
  • 40:22 - 40:25
    Так один способ сделает это: запустить sudo su.
  • 40:25 - 40:29
    sudo su - говорит: "запусти следующею команду как root"
  • 40:29 - 40:33
    и su - это сложная команда,
  • 40:33 - 40:36
    которая фактически даёт вам shell как супер юзер
  • 40:36 - 40:41
    Так, если я введу это, введу пароль, тогда вы сразу увидите
  • 40:41 - 40:44
    что имя пользователя в начале изменился с jon на root
  • 40:44 - 40:46
    И командная строка изменилась с $ на #
  • 40:46 - 40:51
    Если я теперь войду в этот файл, если я введу echo 500 > brightness
  • 40:51 - 40:54
    мой экран стал немного темнее, но вы не можете это видеть
  • 40:54 - 40:55
    просто поверье мне
  • 40:55 - 40:57
    И теперь, я не получил ошибки -
  • 40:57 - 41:01
    это потому что shell теперь запущена как root
  • 41:01 - 41:02
    а не как Jon
  • 41:02 - 41:05
    И пользователь root имеет право открыть этот файл
  • 41:05 - 41:09
    Но, учитывая наши знания которые мы теперь имеем о терминале
  • 41:09 - 41:13
    для нас существует способ делать это не прибегая к root shell
  • 41:13 - 41:17
    И это выглядит следующим образом:
  • 41:18 - 41:22
    это, я думаю, восстановит 1060
  • 41:22 - 41:24
    Так, вы видите отличия?
  • 41:24 - 41:29
    Здесь я говорю моей shell запустить команду echo 1060
  • 41:29 - 41:30
    которая выполнит echo 1060
  • 41:30 - 41:33
    И я говорю ей запустить команду sudo tee brightness
  • 41:33 - 41:38
    И я говору "послать вывод от echo в sudo tee"
  • 41:38 - 41:41
    Чтобы это понять, вам нужно знать что делает команда tee
  • 41:41 - 41:44
    Команда tee принимает ввод и пишет его в файл,
  • 41:44 - 41:47
    но также в стандартный вывод
  • 41:47 - 41:49
    Так tee это удобный способ если у вас есть,
  • 41:49 - 41:54
    скажем, журнал, в который вы хотите сохранить,
  • 41:54 - 41:56
    но вы так же хотите видеть это
  • 41:56 - 41:59
    Тогда вы можете pipe это через tee, дать ему имя файла,
  • 41:59 - 42:02
    и это запишет ввод в файл и на ваш экран
  • 42:02 - 42:05
    И здесь я пользуюсь этой программой:
  • 42:05 - 42:11
    я говорю: "запусти tee как root и пусть tee пишет в файл brightness"
  • 42:11 - 42:13
    И так в этом случае программа tee,
  • 42:13 - 42:15
    которая открывает файл brightness,
  • 42:15 - 42:18
    запущена как root и имеет право это делать
  • 42:18 - 42:21
    Если я запущу это сейчас, вы снова не можете видеть,
  • 42:21 - 42:23
    но яркость включилась на лаптопе
  • 42:23 - 42:25
    И я не получил никаких ошибок,
  • 42:25 - 42:27
    и мне не понадобилось переходить в root shell
  • 42:27 - 42:28
    и запускать команды оттуда
  • 42:28 - 42:31
    Что часто может быть в некотором роде опасным
  • 42:31 - 42:33
    Если вы хотите исследовать эту файловую систему немного больше
  • 42:33 - 42:36
    здесь есть много чего интересного
  • 42:36 - 42:39
    Если вы просто начнёте осматриваться вокруг,
  • 42:39 - 42:41
    вы можете найти забавные вещи всех сортов
  • 42:41 - 42:44
    Так, к примеру, мы заметили что есть забавная команда brightness
  • 42:44 - 42:48
    Мне интересно, какие ещё яркости я могу задать
  • 42:48 - 42:50
    Так я могу использовать команду find,
  • 42:50 - 42:52
    которую мы также обсудим на следующей лекции,
  • 42:52 - 42:59
    Я буду искать каждый файл, чьё имя немного похоже на brightness
  • 42:59 - 43:00
    в текущей директории
  • 43:00 - 43:02
    Это бесполезно
  • 43:02 - 43:08
    Может быть они не файлы. Я ошибся в слове brightness?
  • 43:08 - 43:10
    Да, почему это так себя ведёт?
  • 43:15 - 43:20
    О, по-видимому не хочет найти мне brightness. Как хорошо.
  • 43:20 - 43:24
    К счастью для вас - я уже знаю одну, кстати.
  • 43:24 - 43:30
    Существует субдиректория под названием leds, и leds тоже имеет brightness
  • 43:30 - 43:32
    Какого рода leds здесь есть? У-уу - много всего!
  • 43:32 - 43:35
    Например яркость scroll lock индикатора
  • 43:35 - 43:39
    В наше время большинство из вас наверное уже не знает что такое светодиодный индикатор scroll lock,
  • 43:39 - 43:41
    и ещё менее вероятно что такое сам scroll lock
  • 43:41 - 43:46
    Вы могли видеть кнопку на своей клавиатуре с надписью "Scroll Lock"
  • 43:46 - 43:48
    На самом деле никто больше не знает что это значит,
  • 43:48 - 43:50
    никто в действительности ни для чего её не использует,
  • 43:50 - 43:55
    это в основном "мёртвая" кнопка, и "мёртвый" индикатор
  • 43:55 - 43:56
    Что если бы вы захотели настроить его
  • 43:56 - 43:58
    так, что каждый раз когда вы получаете е-мейл
  • 43:58 - 44:00
    ваш scroll lock загорается?
  • 44:00 - 44:02
    Потому что нет другой причины чтобы он загорался
  • 44:02 - 44:06
    Хорошо, если мы посадим вас в эту конкретную директорию,
  • 44:06 - 44:07
    в которой есть место для яркости
  • 44:07 - 44:08
    и оно выставлено в ноль,
  • 44:08 - 44:12
    что будет если я впишу сюда единицу
  • 44:13 - 44:17
    Возможно вам не нужно писать случайные числа в случайные файлы
  • 44:17 - 44:20
    в этой директории, потому что вы влияете на директорию ядра,
  • 44:20 - 44:21
    как бы, поищите что эти файлы делают.
  • 44:21 - 44:26
    В этом конкретном случае, я ношу защитные очки - я поискал сам перед этим
  • 44:26 - 44:31
    Так вы не можете сейчас сказать, но на моей клавиатуре индикатор scroll lock теперь светится
  • 44:31 - 44:35
    Так, если сейчас я напишу программу которая как бы проверяла е-мейл и всё такое,
  • 44:35 - 44:37
    я бы мог в конце концов выполнять программу
  • 44:37 - 44:39
    которая бы эхо в этот файл
  • 44:39 - 44:44
    и теперь у меня есть способ для моего светодиодного индикатора на моей клавиатуре
  • 44:44 - 44:46
    показывать когда я получил новый е-мейл
  • 44:47 - 44:54
    На этом месте вы должны знать примерно как обращаться с терминалом и shell,
  • 44:54 - 44:57
    и знать достаточно, чтобы выполнять эти простые задания
  • 44:57 - 44:59
    По крайней мере, теоретически,
  • 44:59 - 45:02
    вам не обязательно больше использовать указать-и-щёлкать интерфейс
  • 45:02 - 45:04
    чтобы искать файлы
  • 45:04 - 45:06
    Ещё один оставшийся трюк, который вам может понадобится -
  • 45:06 - 45:08
    это возможность открыть файл
  • 45:08 - 45:13
    до сих пор я только давал вам способы найти файл,
  • 45:13 - 45:20
    но одна вещь о которой вы должны знать: xdg-open
  • 45:20 - 45:22
    это возможно работает только на Linux,
  • 45:22 - 45:24
    на Mac OS я думаю это называется просто open
  • 45:24 - 45:26
    на Windows - кто его знает?
  • 45:26 - 45:32
    xdg-open вы даёте имя файла - и он открывается в соответствующей программе
  • 45:32 - 45:36
    так если вы откроете, если вы введёте xdg-open и HTML файл
  • 45:36 - 45:38
    который откроет ваш браузер и откроет этот файл
  • 45:38 - 45:40
    И когда у вас будет эта программа,
  • 45:40 - 45:44
    в теории - вам не никогда не нужно больше открывать какое-то поисковое окно
  • 45:44 - 45:46
    вы можете по другим причинам,
  • 45:46 - 45:47
    но в теории вы можете со всем справиться
  • 45:47 - 45:50
    используя инструменты с которыми мы сегодня познакомились
  • 45:50 - 45:54
    Это всё может выглядеть относительно просто для некоторых из вас,
  • 45:54 - 45:56
    но как я уже упомянул это как бы ознакомительный период
  • 45:56 - 45:58
    Теперь мы все знаем как работает shell
  • 45:58 - 46:01
    и многое из того что мы будем делать на будущих лекциях -
  • 46:01 - 46:05
    это использовать эти знания для действительно интересных вещей
  • 46:05 - 46:06
    используя shell
  • 46:06 - 46:10
    вроде изучения интерфейса - интерфейса который мы будем использовать,
  • 46:10 - 46:13
    поэтому важно чтобы мы все это знали
  • 46:13 - 46:16
    Мы будем много говорить на следующей лекции
  • 46:16 - 46:18
    о том как автоматизировать такие задачи
  • 46:18 - 46:21
    Как писать скрипты которые выполняют для вас несколько программ
  • 46:21 - 46:25
    И как делать вещи как условные выражения и циклы и прочее, в вашем терминале
  • 46:25 - 46:28
    И делать такие вещи как выполнять программу пока не вывалится
  • 46:28 - 46:31
    Что может пригодится в классах где вы хотите выполнять что-либо пока
  • 46:31 - 46:33
    ваш набор тестов не запорится, к примеру
  • 46:33 - 46:37
    Так это тема лекции следующей недели, у вас есть вопрос?
  • 46:37 - 46:41
    (aудитория) Да, просто в связи с тем что вы демонстрировали - это вспомогательная директория
  • 46:41 - 46:49
    которая предположительно будет работать только если вы выполняете это в Linux, а не в субсистеме Linux ?
  • 46:49 - 46:54
    Это хороший вопрос! Я не знаю если субсистема Windows для Linix
  • 46:54 - 46:57
    предоставит файловую систему sis.
  • 46:57 - 47:01
    Если да - то возможно только в очень малом количестве.
  • 47:02 - 47:08
    Оно может. Потому что... Я не знаю, проверьте
  • 47:08 - 47:13
    Одно вы увидите - конспекты этой лекции уже онлайн,
  • 47:13 - 47:16
    и в самом низу файла - куча упражнений.
  • 47:16 - 47:18
    Некоторые из них относительно просты,
  • 47:18 - 47:19
    некоторые из них немного сложнее
  • 47:19 - 47:23
    И что мы рекомендуем вам сделать, это выполнить их,
  • 47:23 - 47:26
    если вы уже это знаете, это пойдёт довольно быстро,
  • 47:26 - 47:28
    если нет - это может научить вам много чему
  • 47:28 - 47:31
    что вы не знали что не знали
  • 47:31 - 47:34
    И на кафедре, сразу после этой лекции,
  • 47:34 - 47:36
    мы будем счастливы
  • 47:36 - 47:37
    провести вас через всех них,
  • 47:37 - 47:39
    или другие команды о которых вы узнаете в процессе
  • 47:39 - 47:41
    и захотите узнать как использовать их более эффективно
  • 47:41 - 47:43
    И тогда на следующей лекции,
  • 47:43 - 47:44
    которая будет завтра,
  • 47:44 - 47:46
    мы просто будем считать что
  • 47:46 - 47:48
    вы знаете вещи вроде тех которым вас научат упражнения
  • 47:48 - 47:52
    На сайте есть так же е-мейл адрес,
  • 47:52 - 47:54
    куда вы можете послать нам вопросы
  • 47:54 - 47:58
    Если вы подумаете об чём-то поздно ночью
  • 47:58 - 48:04
    Есть ли вопросы перед там как мы закончим сегодня? Нет? Нет?
  • 48:04 - 48:10
    Отлично, мы будем на кафедре на девятом этаже здания "ворота" ("gates") здания 32
  • 48:10 - 48:12
    примерно через 5 минут
  • 48:13 - 48:16
    Увижу вас там
Title:
Lecture 1: Course Overview + The Shell (2020)
Description:

more » « less
Video Language:
English
Duration:
48:17

Russian subtitles

Revisions