1 00:00:02,330 --> 00:00:04,518 Спасибо всем кто пришёл. 2 00:00:04,518 --> 00:00:08,569 Это "пропущенный семестр" по информатике 3 00:00:08,569 --> 00:00:09,390 по крайней мере, 4 00:00:09,390 --> 00:00:10,720 так мы назвали этот курс. 5 00:00:10,720 --> 00:00:12,079 Если вы здесь не для этого - 6 00:00:12,079 --> 00:00:13,188 вы ошиблись аудиторией. 7 00:00:13,188 --> 00:00:14,819 Мы будем здесь примерно час - 8 00:00:14,819 --> 00:00:17,646 просто чтобы вы ориентировались. 9 00:00:17,646 --> 00:00:21,110 Сперва я хочу рассказать немного о том, 10 00:00:21,110 --> 00:00:23,359 почему мы проводим этот курс. 11 00:00:23,359 --> 00:00:25,980 Этот курс вытекает из наблюдений Аниша, 12 00:00:25,980 --> 00:00:27,060 Хосе и меня, сделанных 13 00:00:27,060 --> 00:00:29,410 во время ассистирования 14 00:00:29,410 --> 00:00:30,545 курсов в MIT, которые 15 00:00:30,545 --> 00:00:31,760 заключаются в следующем: 16 00:00:31,760 --> 00:00:33,206 в основном все мы, специалисты 17 00:00:33,206 --> 00:00:34,526 по информатике, знаем, что 18 00:00:34,526 --> 00:00:36,110 компьютеры прекрасно справляются 19 00:00:36,110 --> 00:00:37,880 с повторяющимися задачами 20 00:00:37,880 --> 00:00:39,240 и автоматизацией, 21 00:00:39,240 --> 00:00:40,890 но мы часто не осознаём 22 00:00:40,890 --> 00:00:43,400 как много инструментов могут улучшить 23 00:00:43,400 --> 00:00:45,040 наши процессы разработки. 24 00:00:45,040 --> 00:00:46,850 Мы можем гораздо эффективнее 25 00:00:46,850 --> 00:00:48,380 использовать наши компьютеры, 26 00:00:48,380 --> 00:00:50,450 потому что мы можем использовать компьютер 27 00:00:50,450 --> 00:00:52,030 как инструмент для нас самих, 28 00:00:52,030 --> 00:00:54,146 а не только для создания веб сайтов 29 00:00:54,146 --> 00:00:55,826 или программного обеспечения. 30 00:00:55,826 --> 00:00:58,863 И этот курс - это попытка это исправить, 31 00:00:58,863 --> 00:01:01,090 это попытка показать вам 32 00:01:01,090 --> 00:01:02,606 некоторые из этих инструментов, 33 00:01:02,606 --> 00:01:04,852 которые вы можете эффективно использовать 34 00:01:04,852 --> 00:01:08,032 в повседневности, исследованиях и учёбе. 35 00:01:08,032 --> 00:01:12,410 И это будет курс где мы хотим научить вас, 36 00:01:12,410 --> 00:01:15,420 как лучше использовать инструменты, 37 00:01:15,420 --> 00:01:17,490 которые вы уже знаете, а также 38 00:01:17,490 --> 00:01:19,980 надеемся показать вам инструменты, 39 00:01:19,980 --> 00:01:21,820 о которых вы раньше не знали, 40 00:01:21,820 --> 00:01:23,840 и как комбинировать эти инструменты 41 00:01:23,840 --> 00:01:25,900 для создания более мощных вещей, 42 00:01:25,900 --> 00:01:29,654 чем вы можете сделать сегодня. 43 00:01:29,654 --> 00:01:34,340 Курс будет состоять из 11 часовых лекций 44 00:01:34,340 --> 00:01:37,980 каждая из которых охватывает одну тему. 45 00:01:37,980 --> 00:01:39,796 Вы можете посмотреть на веб сайте, 46 00:01:39,796 --> 00:01:41,490 который также написан вон там, 47 00:01:41,490 --> 00:01:44,739 темы лекций и даты каждой из них. 48 00:01:44,739 --> 00:01:46,985 Они будут в основном независимыми, 49 00:01:46,985 --> 00:01:48,780 и вы можете появляться только на тех, 50 00:01:48,780 --> 00:01:49,910 которые вам интересны. 51 00:01:49,910 --> 00:01:52,470 Но мы будем считать что вы в курсе всего, 52 00:01:52,470 --> 00:01:54,900 и когда мы дойдём до более поздних лекций, 53 00:01:54,900 --> 00:01:58,980 я не буду например объяснять bash заново. 54 00:01:58,980 --> 00:02:06,800 Мы выложим конспекты и записи лекций. 55 00:02:06,800 --> 00:02:10,146 Когда точно - мы ещё не установили, 56 00:02:10,146 --> 00:02:11,970 но это будет после лекций. Очевидно, 57 00:02:11,970 --> 00:02:14,240 что видео должно быть выложено после. 58 00:02:14,240 --> 00:02:16,875 Курс буду вести я - Джон, 59 00:02:16,875 --> 00:02:19,080 и Аниш - сидящий вон там, и Хосе, 60 00:02:19,080 --> 00:02:20,710 которого сейчас здесь нет, 61 00:02:20,710 --> 00:02:23,150 но он будет читать завтрашнюю лекцию. 62 00:02:23,150 --> 00:02:25,330 И имейте ввиду, что мы пытаемся покрыть 63 00:02:25,330 --> 00:02:27,880 много основ в течении курса из всего лишь 64 00:02:27,880 --> 00:02:29,290 11 часовых лекций. 65 00:02:29,290 --> 00:02:32,550 Поэтому мы будем идти относительно быстро, 66 00:02:32,550 --> 00:02:34,610 но, пожалуйста, останавливайте нас 67 00:02:34,610 --> 00:02:37,080 если чувствуете что не успеваете, 68 00:02:37,100 --> 00:02:39,570 или надо уделить больше времени, 69 00:02:39,570 --> 00:02:41,004 просто скажите нам об этом. 70 00:02:41,004 --> 00:02:42,955 Пожалуйста, прерывайте нас вопросами, 71 00:02:42,955 --> 00:02:45,340 также после каждой лекции нас можно найти 72 00:02:45,340 --> 00:02:49,440 на 9 этаже в 32 корпусе в Stata Center, 73 00:02:49,440 --> 00:02:50,440 корпус информатики. 74 00:02:50,440 --> 00:02:53,931 Если будете на девятом этаже 75 00:02:53,931 --> 00:02:56,890 в gates tower, можете прийти попробовать 76 00:02:56,890 --> 00:02:57,990 некоторые упражнения, 77 00:02:57,990 --> 00:02:59,740 которые мы даём на каждой лекции 78 00:02:59,740 --> 00:03:01,940 или просто задать нам другие вопросы 79 00:03:01,940 --> 00:03:04,040 о вещах которые мы обсуждали на лекции 80 00:03:04,040 --> 00:03:05,440 или о других вещах касательно 81 00:03:05,440 --> 00:03:06,993 использования вашего компьютера 82 00:03:06,993 --> 00:03:08,430 более эффективно. 83 00:03:08,430 --> 00:03:12,290 Из-за ограниченного времени 84 00:03:12,290 --> 00:03:15,040 мы не сможем покрыть все инструменты 85 00:03:15,040 --> 00:03:16,040 во всех деталях, 86 00:03:16,040 --> 00:03:18,230 и поэтому мы попробуем осветить 87 00:03:18,230 --> 00:03:19,890 интересные инструменты 88 00:03:19,890 --> 00:03:21,910 и интересные способы их использования. 89 00:03:21,910 --> 00:03:23,590 Мы не обязательно будем углубляться 90 00:03:23,590 --> 00:03:25,200 в детали о том как всё работает, 91 00:03:25,200 --> 00:03:26,653 или более сложные случаи. 92 00:03:26,653 --> 00:03:28,363 Но если у вас есть вопросы об этом, 93 00:03:28,363 --> 00:03:30,010 пожалуйста задавайте их нам. 94 00:03:30,010 --> 00:03:31,852 Многие из этих инструментов 95 00:03:31,852 --> 00:03:33,072 мы использовали годами, 96 00:03:33,072 --> 00:03:34,810 и мы, может быть, можем указать 97 00:03:34,810 --> 00:03:36,440 на дополнительные интересные вещи, 98 00:03:36,440 --> 00:03:38,080 которые вы можете с ними делать. 99 00:03:38,080 --> 00:03:40,939 Так что пользуйтесь тем, что мы здесь. 100 00:03:40,939 --> 00:03:42,680 Этот курс будет... 101 00:03:42,680 --> 00:03:44,370 Я не хочу сказать, что он будет 102 00:03:44,370 --> 00:03:45,540 слишком быстрым, 103 00:03:45,540 --> 00:03:47,974 но в течении этой лекции 104 00:03:47,974 --> 00:03:49,716 мы покроем много основ, 105 00:03:49,716 --> 00:03:51,650 которые мы будем считать, что вы знаете 106 00:03:51,650 --> 00:03:53,160 в течение всего семестра. 107 00:03:53,160 --> 00:03:54,770 Такие вещи как использовать shell 108 00:03:54,770 --> 00:03:56,280 и терминал, я объясню что это 109 00:03:56,280 --> 00:03:58,480 тем кто не знаком с этим. 110 00:03:58,480 --> 00:04:00,190 И затем мы довольно быстро перейдём 111 00:04:00,190 --> 00:04:01,890 к более продвинутым инструментам 112 00:04:01,890 --> 00:04:03,100 и их использованию. 113 00:04:03,100 --> 00:04:04,740 Вы уже можете видеть из конспектов 114 00:04:04,740 --> 00:04:08,140 как выглядят темы которые мы покроем. 115 00:04:08,140 --> 00:04:10,715 Итак, мы переходим к сегодняшней лекции, 116 00:04:10,715 --> 00:04:12,676 в которой мы рассмотрим shell, 117 00:04:12,676 --> 00:04:15,460 и shell будет одним из основных способов 118 00:04:15,460 --> 00:04:17,520 взаимодействия с вашим компьютером, 119 00:04:17,520 --> 00:04:18,630 как только вы захотите 120 00:04:18,630 --> 00:04:20,212 делать что-то больше, 121 00:04:20,212 --> 00:04:22,155 чем привычные визуальные интерфейсы 122 00:04:22,155 --> 00:04:23,748 позволяют вам делать. 123 00:04:23,748 --> 00:04:25,760 Визуальные интерфейсы в некотором роде 124 00:04:25,760 --> 00:04:26,800 ограничены в том, 125 00:04:26,800 --> 00:04:28,230 что они позволяют вам делать, 126 00:04:28,230 --> 00:04:29,620 потому что вы можете делать 127 00:04:29,620 --> 00:04:31,189 только то для чего есть кнопки, 128 00:04:31,189 --> 00:04:32,659 слайдеры и поля ввода. 129 00:04:32,659 --> 00:04:34,271 Часто все текстовые инструменты 130 00:04:34,271 --> 00:04:36,031 сделаны так, чтобы быть одновременно 131 00:04:36,031 --> 00:04:37,340 совместимыми друг с другом, 132 00:04:37,340 --> 00:04:38,650 и чтобы в то же время иметь 133 00:04:38,650 --> 00:04:40,380 кучу способов комбинировать их 134 00:04:40,380 --> 00:04:42,450 или программировать и автоматизировать их. 135 00:04:42,450 --> 00:04:43,572 И поэтому в этом курсе 136 00:04:43,572 --> 00:04:44,735 мы будем фокусироваться 137 00:04:44,735 --> 00:04:46,567 на этих инструментах командной строки 138 00:04:46,567 --> 00:04:48,020 или на текстовых инструментах. 139 00:04:48,020 --> 00:04:49,640 И shell - это место где вы будете 140 00:04:49,640 --> 00:04:51,310 делать большую часть этой работы. 141 00:04:51,310 --> 00:04:52,434 Поэтому для тех из вас, 142 00:04:52,434 --> 00:04:53,739 кто не знаком с shell - 143 00:04:53,739 --> 00:04:55,404 большинство платформ предоставляют 144 00:04:55,404 --> 00:04:56,359 какой-нибудь shell. 145 00:04:56,359 --> 00:04:58,724 На Windows это часто PowerShell, 146 00:04:58,724 --> 00:05:01,309 но также другие shell доступны на Windows. 147 00:05:01,309 --> 00:05:04,599 На Linux вы найдёте тонны терминалов - 148 00:05:04,599 --> 00:05:06,244 это такие окна, 149 00:05:06,244 --> 00:05:08,169 которые позволяют вам отображать shell, 150 00:05:08,169 --> 00:05:10,500 вы также найдёте много других типов shell. 151 00:05:10,500 --> 00:05:11,979 Наиболее рапространённый - 152 00:05:11,979 --> 00:05:14,639 это bash - или "Born Again SHell". 153 00:05:14,639 --> 00:05:16,810 из-за того что это настольно часто используемый shell - 154 00:05:16,810 --> 00:05:19,640 его мы будем рассматривать в этих лекциях в первую очередь 155 00:05:19,640 --> 00:05:23,380 если вы на Mac OS - у вас тоже есть bash возможно более старой версии 156 00:05:23,380 --> 00:05:25,450 если вы откроете terminal app 157 00:05:25,450 --> 00:05:31,062 вы можете следовать на любой из этих платформ, но учитывайте что в большинстве своём это будет 158 00:05:31,071 --> 00:05:33,171 Linux centric, с точки зрения как мы это преподаём 159 00:05:33,171 --> 00:05:37,310 даже если большинство их этих инструментов работают на всех платформах 160 00:05:37,310 --> 00:05:42,050 если вы хотите установить терминал или shell и вы не знаете как это сделать - 161 00:05:42,050 --> 00:05:44,479 мы будем счастливы вам это показать на кафедре, 162 00:05:44,479 --> 00:05:52,040 или это обычно очень легко нагуглить - ваша платформа плюс как бы терминал и вы найдёте 163 00:05:53,980 --> 00:06:00,360 теперь, когда вы открыли терминал вы увидите что-то что выглядит немного вот так 164 00:06:00,360 --> 00:06:03,854 обычно одна только линия сверху 165 00:06:03,854 --> 00:06:06,000 это как известно "командная строка" ("shell prompt") 166 00:06:06,000 --> 00:06:09,624 вы можете видеть как выглядит моя командная строка - у неё есть моё имя пользователя, 167 00:06:09,624 --> 00:06:13,160 имя моего компьютера, текущий путь в котором я нахожусь 168 00:06:13,160 --> 00:06:15,529 и мы поговорим о путях немного позже 169 00:06:15,529 --> 00:06:19,630 и тогда это реально просто мигает - они приглашают меня что-нибудь ввести 170 00:06:19,630 --> 00:06:23,510 и это и есть командная строка - где вы говорите shell что вы хотите делать 171 00:06:23,510 --> 00:06:27,760 вы можете настроить её как угодно, и когда вы откроете на своём компьютере, 172 00:06:27,760 --> 00:06:30,249 она может выглядеть немного по другому 173 00:06:30,249 --> 00:06:33,199 может выглядеть как-то так если вы настроили её немного 174 00:06:33,199 --> 00:06:36,069 или может выглядеть как угодно 175 00:06:37,270 --> 00:06:41,600 му не будем углубляться в настройки shell на этой лекции, мы сделаем это потом 176 00:06:41,600 --> 00:06:47,060 мы поговорим о том как вы будете использовать shell с пользой 177 00:06:47,060 --> 00:06:51,730 и это ваш основной текстовый интерфейс к вашему компьютеру - через этот shell 178 00:06:51,730 --> 00:06:57,550 в командной строке вы вводите команды и команды могут быть относительно простыми 179 00:06:57,550 --> 00:07:01,357 обычно что-нибудь как запускать программы с аргументами 180 00:07:01,357 --> 00:07:04,920 как это выглядит? Хорошо, мы можем запустить одну программу "дата" - date 181 00:07:04,920 --> 00:07:06,680 мы просто набираем date и жмём enter 182 00:07:06,680 --> 00:07:09,960 и тогда увидите, что неудивительно, дату и время 183 00:07:09,960 --> 00:07:12,190 вы можете также запустить программу с аргументами 184 00:07:12,190 --> 00:07:16,300 это один путь изменить исполнение программы 185 00:07:16,300 --> 00:07:19,060 Так, к примеру, есть программа "эхо" - echo 186 00:07:19,060 --> 00:07:22,410 и она просто выводит заданные вами аргументы 187 00:07:22,410 --> 00:07:27,090 и аргументы это просто разделены пробелами вещи, следующие после имени программы 188 00:07:27,090 --> 00:07:30,980 так, мы можем сказать "привет", и она выведет "привет" 189 00:07:30,980 --> 00:07:35,380 возможно, не так ужасно удивительно, но это самые основы аргументов 190 00:07:35,380 --> 00:07:39,060 одну вещь вы заметили - аргументы разделены пробелами 191 00:07:39,060 --> 00:07:42,510 и вы можете подумать, что если я хочу один аргумент из нескольких слов 192 00:07:42,510 --> 00:07:44,228 вы можете взять их в кавычки 193 00:07:44,228 --> 00:07:48,634 вы можете сделать так echo Hello пробел World 194 00:07:48,634 --> 00:07:55,040 и теперь программа echo получает один аргумент, который содержит строку "Hello World" с пробелом 195 00:07:55,040 --> 00:07:57,270 вы можете использовать одинарные кавычки 196 00:07:57,270 --> 00:08:02,430 и к разнице между одинарными и двойными кавычками мы вернёмся и будем говорить о bash скриптах 197 00:08:02,430 --> 00:08:06,120 вы можете избежать одиночный символ (избежать разбиения строки одиночным символом) 198 00:08:06,120 --> 00:08:10,740 например Hello\ Word - это тоже будет работать 199 00:08:10,740 --> 00:08:17,610 Все эти правила как вам избежать, и как разбирать, и брать в кавычки различные аргументы и переменные 200 00:08:17,610 --> 00:08:19,220 - мы рассмотрим немного позже. 201 00:08:19,220 --> 00:08:22,370 Надеюсь вы не столкнётесь со слишком многими странностями в этой связи, 202 00:08:22,370 --> 00:08:25,940 просто имейте ввиду, хотя бы, что пробелы разделяют строку 203 00:08:25,940 --> 00:08:29,470 так если вы делаете что либо, как - создать директорию "Мои фотографии" 204 00:08:29,470 --> 00:08:32,570 вы не можете просто ввести: сделать директорию Мои фотографии 205 00:08:32,570 --> 00:08:35,740 вы получите две директории - одну с названием "Мои" и другую с названием "фотографии" 206 00:08:35,740 --> 00:08:38,860 и это возможно не то что вы хотите 207 00:08:38,860 --> 00:08:45,359 Теперь, одно вы можете спросить - как shell знает что есть эти программы 208 00:08:45,359 --> 00:08:51,250 когда я ввожу date, или когда я ввожу echo - как оно знает что эти программы должны делать 209 00:08:51,250 --> 00:08:57,417 и ответ на это - то что в вашем компьютере встроены программы, которые идут с компьютером 210 00:08:57,417 --> 00:09:04,599 также как ваш компьютер может идти с приложением терминал, или с Windows Explorer, 211 00:09:04,599 --> 00:09:10,789 или с каким-то браузером, он так же идёт с группой приложений ориентированных на терминал 212 00:09:10,789 --> 00:09:13,669 и они находятся в вашей файловой системе 213 00:09:13,669 --> 00:09:18,319 и ваш shell знает как определить где программа находится 214 00:09:18,319 --> 00:09:21,289 B принципе знает как искать программы 215 00:09:21,289 --> 00:09:26,799 Делается это через так называемую неизменную системную переменную (invariant environment variable) 216 00:09:26,799 --> 00:09:31,352 Системная переменная - это такая же переменная, которую вы возможно использовали в языках программирования 217 00:09:31,352 --> 00:09:37,119 Выходит что shell и "заново рождённый" shell в особенности, есть в действительности язык программирования 218 00:09:37,119 --> 00:09:42,110 Эта командная строка приведённая здесь - может не только запускать программы с аргументами, 219 00:09:42,110 --> 00:09:46,480 вы можете так же делать такие вещи как while циклы, for циклы, условные выражения, 220 00:09:46,480 --> 00:09:51,080 всё это. Вы можете определять функции, вы можете декларировать переменные, и всё это вы можете делать в shell 221 00:09:51,080 --> 00:09:55,931 Мы рассмотрим многое из этого на следующие лекции о shell скриптах 222 00:09:55,931 --> 00:09:59,870 Сейчас же, давайте просто рассмотрим эту конкретную системную переменную 223 00:09:59,870 --> 00:10:02,849 Системные переменные определяются каждый раз вы запускаете свою shell 224 00:10:02,849 --> 00:10:06,179 Вам не нужно определять их каждый раз вы запускаете свою shell 225 00:10:06,179 --> 00:10:10,940 Это такая группа как где ваша домашняя директория, какое ваше имя пользователя, 226 00:10:10,940 --> 00:10:15,779 и так же есть та критичная для этой конкретной цели, которая есть PATH variable 227 00:10:15,779 --> 00:10:25,449 Так, если я эхо $PATH это покажет мне все пути ("paths") на моей машине где shell будет искать программы. 228 00:10:25,449 --> 00:10:29,910 Вы заметите что это список, разделённый двоеточиями, 229 00:10:29,910 --> 00:10:32,220 это может быть долго и тяжело читать, 230 00:10:32,220 --> 00:10:36,750 но суть в том что - когда вы введёте имя программы, 231 00:10:36,750 --> 00:10:40,909 поиск будет идти через список путей на вашем компьютере 232 00:10:40,909 --> 00:10:43,530 и будет искать в каждой директории 233 00:10:43,530 --> 00:10:48,420 программу или файл чьё имя совпадает с командой которую вы пытаетесь исполнить. 234 00:10:48,420 --> 00:10:50,719 Так, в моём случае, когда я пытаюсь запустить data или echo, 235 00:10:50,719 --> 00:10:52,809 оно пройдёт через них один за одним, 236 00:10:52,809 --> 00:10:56,239 до тех пор пока найдёт тот который содержит программу называемую call или echo 237 00:10:56,239 --> 00:10:57,667 и запустит её. 238 00:10:57,667 --> 00:11:00,956 Если вы хотите знать какую оно собственно запускает - существует команда which ("который") 239 00:11:00,956 --> 00:11:02,140 которая позволит нам сделать это 240 00:11:02,140 --> 00:11:05,560 Так я могу ввести which echo и оно мне скажет 241 00:11:05,560 --> 00:11:10,400 "если я хочу запустить программу с именем echo, я буду запускать вот эту вот" 242 00:11:10,400 --> 00:11:13,980 Стоит остановиться здесь чтобы поговорить о том, что есть пути ("paths") 243 00:11:13,980 --> 00:11:18,460 Так пути ("paths") есть способ именовать местонахождение файла на вашем компьютере 244 00:11:18,460 --> 00:11:24,105 В Linux и в Mac OS эти пути ("paths") разделены косой чертой ("forward slashes") 245 00:11:24,105 --> 00:11:29,480 Так здесь вы увидите что это в корневой директории 246 00:11:29,480 --> 00:11:35,590 Так косая черта в самом начале указывает на то что начинается с самого верха файловой системы, 247 00:11:35,590 --> 00:11:41,652 потом смотри в директории под названием usr, потом смотри в директории bin, 248 00:11:41,652 --> 00:11:44,420 и потом ищи файл под названием echo 249 00:11:44,420 --> 00:11:48,990 В Windows такие пути ("paths") обычно разделены обратными косыми чертами ("back slashes"). 250 00:11:48,990 --> 00:11:53,290 И где в Linux и в Mac OS все пути ("paths") живут в корневом именном пространстве 251 00:11:53,290 --> 00:11:57,350 так все пути ("paths") начинаются с косой черты (или все абсолютные пути ("absolute paths")), 252 00:11:57,350 --> 00:12:01,100 в Windows есть свой корень для каждого раздела. 253 00:12:01,100 --> 00:12:05,980 Так вы могли видеть такие вещи как С:\ или D:\ 254 00:12:05,980 --> 00:12:13,237 Таким образом Windows имеет как бы раздельные иерархии путей файловой системы для каждого имеющегося у вас диска. 255 00:12:13,237 --> 00:12:18,228 Тогда когда Linux и Mac OS все они смонтированы под одним пространством имён. 256 00:12:18,228 --> 00:12:22,380 Вы возможно заметили что я сказал слово абсолютный путь ("absolute path") и вы возможно не знаете что это значит. 257 00:12:22,380 --> 00:12:29,772 Так абсолютные пути - это пути полностью определяющие местонахождение файла 258 00:12:29,772 --> 00:12:33,930 Так в этом случае это говорит... это говорит о специфическом echo файле 259 00:12:33,930 --> 00:12:37,870 и это даёт вам полный путь ("full path") к этому файлу, 260 00:12:37,870 --> 00:12:41,490 но там так же есть вещи известные как относительные пути ("relative paths") 261 00:12:41,490 --> 00:12:47,079 Так относительный путь ("relative path") относителен к тому где вы сейчас находитесь 262 00:12:47,079 --> 00:12:49,950 и так, способ как мы находим где мы находимся - 263 00:12:49,950 --> 00:12:54,646 вы можете ввести pwd текущая рабочая директория ("present working directory") 264 00:12:54,646 --> 00:12:57,310 настоящая?.. "PRINT working directory" 265 00:12:57,310 --> 00:13:03,030 Так если я введу pwd это выведет текущий путь ("path") в котором я нахожусь 266 00:13:03,030 --> 00:13:11,720 Правильно? Так теперь я нахожусь в домашней директории, под root, потом John, под ним и тогда dev, под ним и т.д. 267 00:13:11,720 --> 00:13:16,120 Отсюда я тогда могу изменить мою текущею рабочею директорию 268 00:13:16,120 --> 00:13:19,760 и все относительные пути ("relative paths") относительны текущей рабочей директории 269 00:13:19,760 --> 00:13:22,640 которая в общем-то где вы сейчас находитесь 270 00:13:22,640 --> 00:13:26,599 В этом случае для примера я могу cd /home 271 00:13:26,599 --> 00:13:28,459 cd - означает изменить директорию ("change directory") 272 00:13:28,459 --> 00:13:31,659 это способ которым я меняю то что моя текущая директория есть 273 00:13:31,659 --> 00:13:34,039 в это случае я изменяю на домашнею директорию /home 274 00:13:34,039 --> 00:13:37,779 и теперь я - вы увидите моя командная строка изменится чтобы указать 275 00:13:37,779 --> 00:13:39,339 что я сейчас в домашней директории /home 276 00:13:39,339 --> 00:13:42,428 Это даёт мне только имя последнего сегмента пути ("path"), 277 00:13:42,428 --> 00:13:44,913 но вы можете настроить ваш терминал показывать вам полный путь 278 00:13:44,913 --> 00:13:47,170 где бы вы не были 279 00:13:47,170 --> 00:13:52,320 И теперь, если я введу pwd снова - это покажет мне что я в /home 280 00:13:52,320 --> 00:13:58,819 Существует также пара особенных директорий . и .. 281 00:13:58,819 --> 00:14:02,419 . - означает "текущая директория" 282 00:14:02,419 --> 00:14:04,689 .. - означает "родительская директория" 283 00:14:04,689 --> 00:14:07,659 Это способ позволят вам легко перемещаться по файловой системе 284 00:14:07,659 --> 00:14:11,421 Например здесь, если я ввиду cd .. 285 00:14:11,421 --> 00:14:13,690 это покажет мне что я теперь в / 286 00:14:13,690 --> 00:14:15,919 то есть я в корневой директории файловой системы 287 00:14:15,919 --> 00:14:19,799 я был в /home, а теперь я в / 288 00:14:19,799 --> 00:14:23,594 И действительно, если я введу pwd это подтвердится 289 00:14:23,594 --> 00:14:27,529 И я также могу использовать относительные пути ("relative paths") чтобы перейти вниз по файловой системе 290 00:14:27,529 --> 00:14:35,229 я могу ввести cd ./home и это изменит директорию на home директорию под текущей директорией 291 00:14:35,229 --> 00:14:38,055 Правильно? Это приведёт меня обратно в /home 292 00:14:38,055 --> 00:14:42,949 Если я попробую ввести ./home снова - ответ будет: "такой директории не существует" 293 00:14:42,949 --> 00:14:46,229 Потому что нету home директории в текущей директории где я теперь 294 00:14:46,229 --> 00:14:48,390 куда я попал выполнив cd 295 00:14:48,390 --> 00:14:50,599 Правильно? 296 00:14:50,599 --> 00:14:57,114 И я могу как бы cd всю дорогу назад, в то место где я был 297 00:14:57,114 --> 00:14:59,889 используя относительные пути ("relative paths") 298 00:14:59,889 --> 00:15:08,700 И я также могу делать вещи как .. .. .. чтобы вернутся куда-нибудь глубоко назад в мою файловую систему 299 00:15:08,700 --> 00:15:12,925 это, по случаю, весь путь назад в корневую директорию, так здесь есть директория bin 300 00:15:12,925 --> 00:15:16,991 и под bin есть файл echo, итак я могу сделать world 301 00:15:16,991 --> 00:15:19,940 и это запускает программу echo из директории bin 302 00:15:19,940 --> 00:15:22,079 Хорошо, это способ как вы можете конструировать пути, 303 00:15:22,079 --> 00:15:24,439 чтобы произвольно пересекать вашу файловую систему 304 00:15:24,439 --> 00:15:27,749 Иногда вам нужены абсолютные пути иногда относительные 305 00:15:27,749 --> 00:15:30,269 Обычно вы ипользуете кротчайший 306 00:15:30,269 --> 00:15:33,859 Но, если вы хотите, к примеру, запустить программу, 307 00:15:33,859 --> 00:15:36,579 или написать программу которая запускает программу, 308 00:15:36,579 --> 00:15:38,100 такую как echo или date 309 00:15:38,100 --> 00:15:40,940 и вы хотите запускать откуда угодно 310 00:15:40,940 --> 00:15:44,860 вам или нужно ввести имя программы, как data или echo 311 00:15:44,860 --> 00:15:48,300 и позволить shell использовать этот путь чтобы найти где она находится, 312 00:15:48,300 --> 00:15:50,290 или нужно ввести абсолютный путь ("absolute path") 313 00:15:50,290 --> 00:15:51,820 Потому что если вы дадите относительный путь ("relative path"), 314 00:15:51,820 --> 00:15:53,900 тогда если я запущу её в моей домашней директории, 315 00:15:53,900 --> 00:15:56,190 и вы запустите её в какой-то другой директории, 316 00:15:56,190 --> 00:16:01,420 это может работать у меня, но не у вас 317 00:16:01,420 --> 00:16:04,011 В общем-то, когда мы запускаем программу, 318 00:16:04,011 --> 00:16:07,271 она будет оперировать в текущей директории 319 00:16:07,271 --> 00:16:08,432 по крайней мере по умолчанию 320 00:16:08,432 --> 00:16:10,600 если мы не зададим какие либо аргументы 321 00:16:10,610 --> 00:16:15,065 И это очень удобно - это значит что часто нам не нужно давать полные пути, 322 00:16:15,065 --> 00:16:19,090 мы можем просто использовать имена файлов в директории где мы находимся 323 00:16:19,090 --> 00:16:22,570 Одно что действительно удобно - это найти что находится в текущей директории 324 00:16:22,570 --> 00:16:27,281 Так мы уже видели pwd - который выводит наше текущее местонахождение 325 00:16:27,281 --> 00:16:33,050 Существует команда ls - которая покажет вам список ("list") файлов в текущей директории 326 00:16:33,050 --> 00:16:37,230 Так, если я введу ls здесь - это список всех файлов в текущей директории 327 00:16:37,230 --> 00:16:42,331 Правильно? И удобный способ просто и быстро перемещаться в файловой системе 328 00:16:42,331 --> 00:16:46,300 Вы увидите что если я, как бы, cd .. и потом ls 329 00:16:46,300 --> 00:16:49,770 это покажем мне файлы из той директории 330 00:16:49,770 --> 00:16:56,270 но я так же могу ввести ls .. я как бы могу задать путь 331 00:16:56,270 --> 00:17:03,316 и ls ту директорию заместо этой 332 00:17:03,316 --> 00:17:05,579 Вы можете видеть это если я пойду в саму корневую директорию 333 00:17:05,579 --> 00:17:08,240 Правильно? И корневая директория содержит другие файлы 334 00:17:08,240 --> 00:17:11,654 Есть один удобный трюк, о котором вы возможно не знаете, 335 00:17:11,654 --> 00:17:14,140 две другие особые вещи вы можете сделать 336 00:17:14,140 --> 00:17:19,110 одна это тильда символ ~ этот символ приведёт вас в вашу домашнею директорию 337 00:17:19,110 --> 00:17:22,110 Таким образом, ~ всегда представляет домашнею директорию 338 00:17:22,110 --> 00:17:24,030 И вы можете делать относительные пути ("relative paths") туда 339 00:17:24,030 --> 00:17:34,990 я могу ввести ~/ и я тут - потому что тильда выразилась в /home/jon 340 00:17:34,990 --> 00:17:40,679 Так же, в особенности для cd, очень удобный аргумент вы можете задать - тире 341 00:17:40,679 --> 00:17:45,777 если вы введёте cd - вы перейдёте в директорию где вы были до этого 342 00:17:45,777 --> 00:17:48,177 Так если я введу cd - я попаду назад в корневую директорию 343 00:17:48,177 --> 00:17:52,849 Если я введу cd - снова, я попаду назад в missing-semester 344 00:17:52,849 --> 00:17:59,202 То есть, это удобный способ если вы хотите переключатся между двумя разными директориями 345 00:17:59,202 --> 00:18:04,552 В случае ls, или в случае cd - могут существовать аргументы о которых вы не знаете 346 00:18:04,552 --> 00:18:08,812 Правильно? Пока ещё мы не делали ничего, кроме, задания пути, 347 00:18:08,812 --> 00:18:12,870 но откуда бы вы узнали что можете задавать путь в ls? 348 00:18:12,870 --> 00:18:18,070 Ну, большинство программ принимают то что известно как аргументы, вроде флагов и опций 349 00:18:18,070 --> 00:18:20,293 они обычно начинаются с тире - 350 00:18:20,293 --> 00:18:23,900 Одна из наиболее удобных из них - это --help 351 00:18:23,900 --> 00:18:26,250 Большинство программ это поддерживают, 352 00:18:26,250 --> 00:18:34,630 и если вы введёте к примеру ls --help это надеюсь выведет кучу информации об этой команде 353 00:18:34,630 --> 00:18:39,370 И вы увидите тут как использовать ls, различные опции 354 00:18:39,370 --> 00:18:41,310 и вы можете задать количество файлов 355 00:18:41,310 --> 00:18:47,760 Как читать эти описания? - троеточие означает один, ноль или больше 356 00:18:47,760 --> 00:18:52,860 Квадратные скобки означают - необязательно - то есть в этом случае опции не обязательны 357 00:18:52,860 --> 00:18:55,100 и количество файлов необязательно (опционно) 358 00:18:55,100 --> 00:18:57,666 И вы увидите что это говорит о том что программа делает 359 00:18:57,666 --> 00:19:01,480 и также определяет разные типы флагов и опций, которые вы можете задавать 360 00:19:01,480 --> 00:19:05,830 Обычно мы называем одиночное тире с одиночной буквой флагом, 361 00:19:05,830 --> 00:19:09,347 или что-то что не принимает значения - флагом. 362 00:19:09,347 --> 00:19:11,450 И все что принимает значение - опцией 363 00:19:11,450 --> 00:19:16,430 Так, к примеру, -a и --all оба флаги, 364 00:19:16,430 --> 00:19:21,883 а -с и --color - опции 365 00:19:21,883 --> 00:19:26,520 Одну вещь вы увидите здесь, если покрутите достаточно долго вниз, 366 00:19:26,520 --> 00:19:29,550 -l флаг 367 00:19:29,550 --> 00:19:31,700 и упс, это не помогает 368 00:19:32,470 --> 00:19:38,640 -l флаг использует длинный формат вывода 369 00:19:38,640 --> 00:19:42,772 это уже само по себе достаточно полезно, но давайте посмотрим что это на самом деле делает 370 00:19:42,772 --> 00:19:48,070 если я введу ls -l это всё так же выводит файлы из текущей директории, 371 00:19:48,070 --> 00:19:50,847 но и даст мне гораздо больше информации об этих файлах 372 00:19:50,847 --> 00:19:54,119 и это то, что вы будете использовать довольно часто, 373 00:19:54,119 --> 00:19:59,980 потому что, эта дополнительная информация, часто, довольно удобна 374 00:19:59,980 --> 00:20:04,798 давайте посмотрим что представляет некоторая из этой дополнительной информации 375 00:20:04,798 --> 00:20:10,280 ага, начнём с того, что d в начале некоторых из этих строк, 376 00:20:10,280 --> 00:20:12,120 означает что это что-то является директорией 377 00:20:12,120 --> 00:20:15,850 так _data здесь, к примеру, является директорией 378 00:20:15,850 --> 00:20:19,685 а 404.html не является директорией, это файл 379 00:20:19,685 --> 00:20:27,000 следующие буквы после этого показывают права доступа к тому файлу 380 00:20:27,000 --> 00:20:31,440 Так, как вы уже видели раньше я могу не иметь доступа открыть данный файл, 381 00:20:31,440 --> 00:20:33,584 или я могу не иметь доступа перейти в данную директорию 382 00:20:33,584 --> 00:20:37,320 и это всё продиктовано правами доступа к данному файлу или директории 383 00:20:37,320 --> 00:20:44,725 Способ прочтения этого - первая группа из трёх прав доступа установленна для владельца ("owner") файла 384 00:20:44,725 --> 00:20:49,120 Все эти файлы которые вы здесь видите принадлежат мне 385 00:20:49,120 --> 00:20:54,145 Вторая группа их трёх символов - права доступа для группы владеющей этими файлами 386 00:20:54,145 --> 00:20:57,602 В этом случае все эти файлы также принадлежать группе Джона 387 00:20:57,602 --> 00:21:03,205 И последняя группа их трёх - права доступа для всех остальных 388 00:21:03,205 --> 00:21:06,910 то-есть всех кроме пользователя или группы владеющей этим файлом 389 00:21:06,910 --> 00:21:08,650 Эта директория возможно немного скучная, 390 00:21:08,650 --> 00:21:11,840 потому что всё принадлежит мне 391 00:21:11,840 --> 00:21:16,648 Но если мы сделаем что-нибудь вроде cd / и ls -l 392 00:21:16,648 --> 00:21:19,946 вы увидите что всё принадлежит root ("суперпользователь") 393 00:21:19,946 --> 00:21:22,800 мы вернёмся кто му что такое root пользователь 394 00:21:22,800 --> 00:21:25,287 Но здесь вы видите некоторые права доступа к файла немного более интересные 395 00:21:25,287 --> 00:21:31,760 Группы из трёх представляют из себя права считывает, изменять и запускать 396 00:21:31,760 --> 00:21:34,871 Что это означает отличается для файлов и директорий 397 00:21:34,871 --> 00:21:37,180 Для файлов это довольно просто 398 00:21:37,180 --> 00:21:40,900 если у вас есть право считывать файл - вы можете считать содержимое файла 399 00:21:40,900 --> 00:21:45,870 если у вас есть право изменять файл - вы можете добавить к этому файлу 400 00:21:45,870 --> 00:21:47,650 или полностью заменить его 401 00:21:47,650 --> 00:21:50,370 И если у вас установлен запустить, X бит, у файла, 402 00:21:50,370 --> 00:21:52,540 тогда вы можете запустить этот файл на выполнение 403 00:21:52,540 --> 00:21:57,130 Так, если мы введём ls -l /bin, 404 00:21:57,130 --> 00:21:57,840 это ужасно, 405 00:21:57,840 --> 00:21:59,730 и /usr/bin - вы увидите 406 00:21:59,730 --> 00:22:02,210 что у них у всех бит "запустить" выставлен 407 00:22:02,210 --> 00:22:05,190 даже для людей которые не владеют этим файлом 408 00:22:05,190 --> 00:22:07,320 И это потому что программа echo, на пример, 409 00:22:07,320 --> 00:22:09,830 мы хотим что бы все на этом компьютере могли её запустить 410 00:22:09,830 --> 00:22:13,200 Нет причин чтобы сказать "только некоторые пользователи могут запускать echo" 411 00:22:13,200 --> 00:22:16,214 Это не имеет никакого смысла 412 00:22:16,214 --> 00:22:19,955 Для директорий, однако, эти права доступа немного отличаются 413 00:22:19,955 --> 00:22:23,790 Так, "считывать" означает - имеете ли вы право видеть 414 00:22:23,790 --> 00:22:26,320 какие файлы находятся внутри этой директории 415 00:22:26,320 --> 00:22:28,770 то есть, думайте о считывании списка, для директории 416 00:22:28,770 --> 00:22:30,680 имеете ли вы право листать её содержимое 417 00:22:30,680 --> 00:22:34,700 изменять - для директории, это имеете ли вы право переименовывать, 418 00:22:34,700 --> 00:22:38,347 создавать или удалять файлы в этой директории 419 00:22:38,347 --> 00:22:42,850 то есть, это всё ещё как бы "изменять", но заметьте что это означает что 420 00:22:42,850 --> 00:22:48,557 если вы имеете право "изменять" файл, но не имеете права "изменять" директорию, 421 00:22:48,557 --> 00:22:50,300 вы не можете удалить этот файл. 422 00:22:50,300 --> 00:22:52,495 Вы можете сделать его пустым, но вы не можете удалить его 423 00:22:52,495 --> 00:22:56,260 потому что, это бы потребовало "изменить" саму директорию 424 00:22:56,260 --> 00:23:00,580 и в заключении, "запустить" на директориях, часто сбивает людей с толку 425 00:23:00,580 --> 00:23:03,866 "запустить" на директориях - это то, что известно как "поиск" 426 00:23:03,866 --> 00:23:09,464 и это не особо полезно как имя, но что это значит, имеете ли вы право 427 00:23:09,464 --> 00:23:11,608 войти в эту директорию 428 00:23:11,608 --> 00:23:15,320 Если вы хотите получить доступ к файлу, если вы хотите открыть его, или считать его, 429 00:23:15,320 --> 00:23:20,070 изменить его, всё что вы хотите сделать, в общем, cd - перейти в это директорию 430 00:23:20,070 --> 00:23:25,150 вы должны иметь права "запустить" и на всех родительских директориях этой директории, 431 00:23:25,150 --> 00:23:27,150 и на самой этой директории 432 00:23:27,150 --> 00:23:31,677 Так, например, для меня, получить доступ к файлу внутри /user/bin 433 00:23:31,677 --> 00:23:35,110 как /user/bin/echo - я должен иметь право "запустить" на корневой директории root, 434 00:23:35,110 --> 00:23:36,972 я должен иметь право "запустить" на user, 435 00:23:36,972 --> 00:23:39,306 и я должен иметь право "запустить" на bin 436 00:23:39,306 --> 00:23:43,615 если я не имею всех тех "запустить" битов - я не буду иметь права доступа к тому файлу, 437 00:23:43,615 --> 00:23:48,820 поскольку у меня не будет права войти в директории по пути 438 00:23:48,820 --> 00:23:56,810 есть несколько битов, которые вы можете встретить эссы или тии, вы можете видеть эллы 439 00:23:56,810 --> 00:23:58,922 их мы можем обсудить на кафедре если вам интересно 440 00:23:58,922 --> 00:24:03,404 они в основном, не будут относится к тому что вы делаете в этом классе, 441 00:24:03,404 --> 00:24:08,910 но о них хорошо бы знать, так, если вам интересно, поищите об них сами 442 00:24:08,910 --> 00:24:11,040 или спросите у нас на кафедре 443 00:24:11,040 --> 00:24:13,730 Существуют некоторые другие программы о которых хорошо бы знать 444 00:24:13,730 --> 00:24:18,090 о, простите, ещё одну вещь я должен упомянуть: если у вас просто тире - у вас нет этого права доступа 445 00:24:18,090 --> 00:24:22,560 так, если это, к примеру: r-x - это означает у вас есть права "считывать" и "запускать", 446 00:24:22,560 --> 00:24:25,610 но у вас нет права "изменять" 447 00:24:25,610 --> 00:24:29,236 Существуют некоторые полезные программы, чтобы познакомится с ними сейчас, 448 00:24:29,236 --> 00:24:32,150 одна из них команда move, или mv 449 00:24:32,150 --> 00:24:37,939 Так если я cd назад, в мой missing-semester, тут mv позволяет мне переименовать файл 450 00:24:37,939 --> 00:24:43,530 и переименовать здесь берёт два пути - берёт старый путь и новый путь 451 00:24:43,530 --> 00:24:47,271 Это означает, что move, позволяет вам как переименовывать файлы, 452 00:24:47,271 --> 00:24:50,503 если вы измените имя файла, но не директорию, 453 00:24:50,503 --> 00:24:53,292 или позволяет вам переместить файл в совершенно другую директорию 454 00:24:53,292 --> 00:24:58,363 это просто, вы задаёте путь к текущему файлу, и путь куда вы хотите тот файл поместить 455 00:24:58,363 --> 00:25:01,820 И это может поменять его местоположение и его имя 456 00:25:01,820 --> 00:25:05,747 Так, например, я могу mv файл dotfiles.md стать foo.mv 457 00:25:05,747 --> 00:25:07,630 Бесполезно. Правильно? 458 00:25:07,630 --> 00:25:11,554 И также, я могу mv его обратно 459 00:25:14,494 --> 00:25:20,244 Так же существует команда cp или copy, очень похоже - вы копируете файл 460 00:25:20,244 --> 00:25:22,434 cp также принимает два аргумента. 461 00:25:22,434 --> 00:25:24,690 Оно берёт путь откуда вы хотите копировать, 462 00:25:24,690 --> 00:25:26,180 и путь куда вы хотите копировать 463 00:25:26,180 --> 00:25:27,850 И это полные пути ("full paths") 464 00:25:27,850 --> 00:25:29,810 Так я могу использовать это, например, 465 00:25:29,810 --> 00:25:36,574 чтобы сказать: "я хочу скопировать файл dotfiles.md в, конечно, ../food.md" 466 00:25:36,574 --> 00:25:40,520 и теперь, если я сделаю ls .. , то я увижу там есть файл food.md 467 00:25:40,520 --> 00:25:41,700 в той директории 468 00:25:41,700 --> 00:25:46,660 Так, cp тоже принимает два пути, не обязательно находится в той же директории 469 00:25:46,660 --> 00:25:50,660 и также, там есть команда rm, которая позволяет удалить файл 470 00:25:50,660 --> 00:25:55,220 и там также вы можете задать путь, в этом случае я удаляю ../food.md 471 00:25:55,220 --> 00:26:00,879 вы должны быть в курсе что для удаления, особенно в Lunix, удаление по умолчанию не рекурсивно 472 00:26:00,879 --> 00:26:04,540 Там, вы не можете удалить директорию используя rm 473 00:26:04,540 --> 00:26:08,417 Вы можете послать флаг -r , который позволит вам произвести рекурсивное удаление, 474 00:26:08,417 --> 00:26:12,193 и задать путь который вы хотите удалить, и это удалит всё под ним 475 00:26:12,193 --> 00:26:17,288 Существует, также, команда rmdir , которая позволяет вам удалять директорию, 476 00:26:17,288 --> 00:26:20,755 но она только позволяет вам удалить эту директорию, если она пустая 477 00:26:20,755 --> 00:26:23,400 Таким образом, идея здесь как бы безопасного механизма для вас, 478 00:26:23,400 --> 00:26:27,500 так что вы случайно не выбросите кучу своих файлов 479 00:26:27,500 --> 00:26:29,379 И последняя маленькая команда, которую удобно использовать, 480 00:26:29,379 --> 00:26:32,210 это mkdir - которая создаёт новую директорию 481 00:26:32,210 --> 00:26:35,373 И как мы говорили до этого, вы не хотите сделать что-то вроде этого, 482 00:26:35,373 --> 00:26:37,600 потому что, это создаст две директории для вас, 483 00:26:37,600 --> 00:26:39,957 одна будет называться "my" а другая "photos" 484 00:26:39,957 --> 00:26:42,447 Если вы действительно хотите создать такую директорию, 485 00:26:42,447 --> 00:26:48,213 вы либо избежите пробел, или возьмёте строку в кавычки 486 00:26:49,653 --> 00:26:52,260 Если вы когда либо захотите больше информации о том, 487 00:26:52,260 --> 00:26:55,916 как любая команда, в принципе, работает на этих платформах 488 00:26:55,916 --> 00:26:58,526 существует действительно удобная команда для этого тоже 489 00:26:58,526 --> 00:27:02,469 Существует команда называемая man (manual pages - руководство, мануал) 490 00:27:02,469 --> 00:27:06,386 Эта программа берёт как аргумент название другой программы, 491 00:27:06,386 --> 00:27:08,360 и выдаёт её "руководство к эксплуатации" 492 00:27:08,360 --> 00:27:10,939 Так, на пример, мы можем ввести man ls 493 00:27:10,939 --> 00:27:14,230 и это показывает нам мануал к ls 494 00:27:14,230 --> 00:27:18,681 Вы заметите что в случае ls - это довольно похоже на то что мы получили с ls --help 495 00:27:18,681 --> 00:27:22,580 но здесь немного удобнее ориентироваться, немного удобнее читать 496 00:27:22,580 --> 00:27:28,288 Обычно ближе к концу вы найдёте примеры, информацию о том кто это написал, 497 00:27:28,288 --> 00:27:31,439 и где вы можете найти больше информации, и типа такого 498 00:27:31,439 --> 00:27:35,151 Одна вещь может запутать, иногда, по крайней мере до последней версии, 499 00:27:35,151 --> 00:27:37,815 где они добавили это дерево внизу, которое говорит "нажми q чтобы выйти" 500 00:27:37,815 --> 00:27:42,223 Раньше они не упоминали этого: вы нажимаете на q чтобы выйти из этой программы 501 00:27:42,223 --> 00:27:46,140 Может быть очень сложно выйти, если вы не знаете этого 502 00:27:46,934 --> 00:27:50,655 Удобный шорткат здесь - ctrl l 503 00:27:50,655 --> 00:27:55,441 который позволяет вам очистить терминал и перейти на верх 504 00:27:55,441 --> 00:27:58,510 Так мы только говорили о программах изолированно, 505 00:27:58,510 --> 00:28:02,362 но основная мощность shell проявляется 506 00:28:02,362 --> 00:28:05,490 когда вы начинаете комбинировать различные программы 507 00:28:05,490 --> 00:28:06,380 Правильно? 508 00:28:06,380 --> 00:28:10,239 Так вместо выполнения cd , выполнения ls , и т.д. , 509 00:28:10,239 --> 00:28:12,339 вы возможно хотите объединить несколько программ вместе, 510 00:28:12,339 --> 00:28:14,060 вы возможно хотите взаимодействовать с файлами, 511 00:28:14,060 --> 00:28:16,280 и оперировать файлами между программами 512 00:28:16,280 --> 00:28:18,699 И способ как мы можем это сделать: 513 00:28:18,699 --> 00:28:22,169 использовать нотацию потока, которую даёт нам shell 514 00:28:22,169 --> 00:28:24,380 Каждая программа, по умолчанию, имеет, 515 00:28:24,380 --> 00:28:27,490 я немного упрощу, и скажу: два первичных потока 516 00:28:27,490 --> 00:28:31,130 Она имеет поток ввода, и поток вывода 517 00:28:31,130 --> 00:28:33,380 По умолчанию, поток ввода - это ваша клавиатура 518 00:28:33,380 --> 00:28:35,323 В общем-то поток ввода это ваш терминал, 519 00:28:35,323 --> 00:28:36,610 и то что вы печатаете на терминале, 520 00:28:36,610 --> 00:28:38,679 окажется к конце концов в программе 521 00:28:38,679 --> 00:28:42,460 И она так же имеет поток вывода по умолчанию, который, что либо программа выводит, 522 00:28:42,460 --> 00:28:44,120 будет выведено в этот поток 523 00:28:44,120 --> 00:28:46,104 И по умолчанию, это тоже ваш терминал 524 00:28:46,104 --> 00:28:49,608 Поэтому, когда я ввожу echo hello, это выводится назад на мой терминал 525 00:28:49,608 --> 00:28:54,570 Но shell даёт вам способ переназначить эти потоки 526 00:28:54,570 --> 00:28:58,370 Поменять, куда ввод и вывод программы указывают 527 00:28:58,370 --> 00:29:05,752 Этот способ, наиболее простой способ: использование знаков угловых скобок 528 00:29:05,752 --> 00:29:07,720 так что вы можете ввести что-нибудь как это, 529 00:29:07,720 --> 00:29:10,650 или вы можете ввести что-нибудь как это 530 00:29:10,650 --> 00:29:17,717 Левая угловая скобка указывает переназначить ввод этой программы на содержимое этого файла 531 00:29:17,717 --> 00:29:26,477 И закрывающая угловая скобка означает переназначить вывод предыдущей программы в этот файл 532 00:29:26,477 --> 00:29:29,339 Так, давайте посмотрим на пример того, как это будет выглядеть 533 00:29:29,339 --> 00:29:34,100 если я введу echo hallo , я могу сказать, я хочу сохранить тот контент 534 00:29:34,100 --> 00:29:36,210 в файле с именем hello.txt 535 00:29:36,210 --> 00:29:38,764 И потому что я задал, это относительный путь ("relative path"), правильно?, 536 00:29:38,764 --> 00:29:42,473 это создаст файл в текущей директории, с названием hello.txt 537 00:29:42,473 --> 00:29:46,401 и по крайней мере в теории, его содержимое должно быть словом "hello" 538 00:29:46,401 --> 00:29:50,279 Так, если я запущу это, заметьте что ничего не выведено на мой экран 539 00:29:50,279 --> 00:29:53,380 В предыдущий раз когда я выполнял echo hello это вывело hello 540 00:29:53,380 --> 00:29:56,894 Теперь это hello ушло в файл под названием hello.txt 541 00:29:56,894 --> 00:29:59,681 и я могу проверит это используя программу называемую cat 542 00:29:59,681 --> 00:30:03,158 Так, cat выводит содержимое файла 543 00:30:03,158 --> 00:30:07,899 Так, я могу ввести cat hello.txt, и вот он показывает мне hello 544 00:30:07,899 --> 00:30:12,614 Но cat также поддерживает этот тип переназначений 545 00:30:12,614 --> 00:30:16,790 Так я могу сказать cat, который по умолчанию только выводит свой ввод, 546 00:30:16,790 --> 00:30:18,906 просто дублирует что введено на выводе, 547 00:30:18,906 --> 00:30:23,231 я могу сказать: я хочу что бы ты взял свой ввод, из hello.txt 548 00:30:23,231 --> 00:30:27,551 Что случится в этом случае, это shell откроет hello.txt 549 00:30:27,551 --> 00:30:31,312 возьмёт его содержимое и сделает его вводом cat, 550 00:30:31,312 --> 00:30:34,110 и тогда cat просто выведет это в свой вывод, 551 00:30:34,110 --> 00:30:37,190 который, поскольку я его не переназначил, будет просто моим терминалом 552 00:30:37,190 --> 00:30:40,655 То есть это просто выведет hello на экран 553 00:30:40,655 --> 00:30:43,029 И я могу использовать их обоих одновременно 554 00:30:43,029 --> 00:30:45,140 Так, например, если я хочу скопировать какой-нибудь файл, 555 00:30:45,140 --> 00:30:47,560 и я не хочу использовать cp команду по какой-то причине, 556 00:30:47,560 --> 00:30:50,830 я могу сделать это: 557 00:30:50,830 --> 00:30:56,589 и в этом случае, я ничего не говорю программе cat, я просто говорю "далай свою нормальное дело" 558 00:30:56,589 --> 00:30:59,567 правильно, программа cat ничего не знает об этом переназначении 559 00:30:59,567 --> 00:31:03,171 Но я говорю shell использовать hello.txt как ввод для cat, 560 00:31:03,171 --> 00:31:07,719 и записывать всё что cat выводит в hello.txt 561 00:31:07,719 --> 00:31:09,640 Опять это ничего не выводит на экран 562 00:31:09,640 --> 00:31:14,435 Но если я cat hello.txt - я получу вывод, как и следовало ожидать, 563 00:31:14,435 --> 00:31:18,710 что есть копия оригинального файла 564 00:31:18,710 --> 00:31:25,398 Существуют так же двойные закрывающие скобки, что добавляет, вместо просто перезаписывания 565 00:31:25,398 --> 00:31:30,299 Так, вы заметите, если я сделаю cat hello.txt в hello2.txt опять 566 00:31:30,299 --> 00:31:33,740 и тогда я cat hello2.txt - он всё ещё содержит hello, 567 00:31:33,740 --> 00:31:35,455 несмотря на то что это уже содержало hello 568 00:31:35,455 --> 00:31:38,630 Если я переключу это, взамен, на двойные закрывающие скобки, 569 00:31:38,630 --> 00:31:39,754 что означает добавить 570 00:31:39,754 --> 00:31:43,985 И если я теперь cat этот файл - в нём hello повторяется дважды 571 00:31:44,785 --> 00:31:46,550 Это довольно простые, 572 00:31:46,550 --> 00:31:49,376 они просто способы взаимодействия с файлами, 573 00:31:49,376 --> 00:31:51,970 но когда это становится действительно интересно - это дополнительный оператор 574 00:31:51,970 --> 00:31:54,256 который вам даёт shell, называется pipe ("труба") символ 575 00:31:54,256 --> 00:31:59,305 Так | - вертикальная черта, и pipe значит: - 576 00:31:59,305 --> 00:32:07,440 "возьми вывод программы с лева и сделай это вводом программы справа" 577 00:32:07,440 --> 00:32:09,010 Правильно? 578 00:32:09,010 --> 00:32:14,398 Так, как это выглядит, хорошо, давайте возьмём примет ls / 579 00:32:14,398 --> 00:32:16,480 или ls -l / 580 00:32:16,480 --> 00:32:21,288 это выводит кучу вещей. Давайте скажем я хочу только последнюю линию этого вывода 581 00:32:21,288 --> 00:32:23,860 Хорошо, существует команда под названием tail ("хвост") 582 00:32:23,860 --> 00:32:27,960 И tail выводит строки с конца своего ввода 583 00:32:27,960 --> 00:32:32,400 И я могу ввести -n1 - так это флаг n 584 00:32:32,400 --> 00:32:36,640 вы так же можете использовать --lines, если хотите использовать её как более длинную опцию 585 00:32:36,640 --> 00:32:39,691 но в этом случае, это тоже самое как вывод последней линии 586 00:32:39,691 --> 00:32:48,830 и я могу связать это вместе - так я могу сказать ls -l / | tail -n1 587 00:32:48,830 --> 00:32:53,682 и заметьте что здесь ls не знает об tail, и tail не знает об ls 588 00:32:53,682 --> 00:32:57,849 это разные программы и никогда не были запрограммированы быть совместимыми друг с другом 589 00:32:57,849 --> 00:33:01,106 всё что они умеют делать - это читать из ввода и выводить в вывод 590 00:33:01,106 --> 00:33:04,030 а pipe, как раз, связывает их вместе 591 00:33:04,030 --> 00:33:08,527 И в этом конкретном случае, я говорю: "я хочу вывод из ls быть вводом в tail, 592 00:33:08,527 --> 00:33:12,222 и я хочу вывод от tail просто на мой терминал" потому что я не перенаправил его 593 00:33:12,222 --> 00:33:15,889 Я мог бы так же перенаправить это, ну скажем, я хочу этот вывод в ls.txt 594 00:33:15,889 --> 00:33:20,396 и в этом случае если я cat ls.txt, я получу соответствующий вывод 595 00:33:20,396 --> 00:33:23,115 И оказывается, вы можете делать реально чёткие вещи с этим 596 00:33:23,115 --> 00:33:26,555 мы покроем это гораздо больше на лекции по обработке данных ("data wrangling") 597 00:33:26,555 --> 00:33:29,190 это будет через 4 дня, или около того 598 00:33:29,190 --> 00:33:32,580 о разных интересных вещах которые вы можете делать, кода начнёте 599 00:33:32,580 --> 00:33:35,470 строить более продвинутые конвейеры ("pipelies") 600 00:33:35,470 --> 00:33:42,822 один, дать вам один пример, мы можем сделать что-то вроде curl --head silent google com 601 00:33:44,972 --> 00:33:47,170 так, чтобы просто показать вам как это выглядит 602 00:33:47,170 --> 00:33:51,417 это даёт мне все HTTP заголовки для доступа к google.com 603 00:33:51,417 --> 00:34:02,738 и я могу послать это в grep --ignore case, или просто -i, если хочу, content-length 604 00:34:02,738 --> 00:34:05,250 так это выведет мне заголовок content-length ("длинна содержимого") 605 00:34:05,250 --> 00:34:07,140 grep это программа о которой мы поговорим позже 606 00:34:07,140 --> 00:34:11,382 она позволит вам искать во вводе по заданному ключевому слову 607 00:34:11,382 --> 00:34:14,490 мы можем пропустить это через, скажем, команду cut 608 00:34:14,490 --> 00:34:19,850 которая принимает дилимитер - выставленный как пробел, 609 00:34:19,850 --> 00:34:21,540 и я хочу второе поле 610 00:34:21,540 --> 00:34:23,770 и это выводит только content-length ("длинна содержимого") 611 00:34:23,770 --> 00:34:28,300 это, как бы глупый пример, правда, он просто позволяет вам вытащить длину содержимого 612 00:34:28,300 --> 00:34:30,640 в байтах, с google.com, из командной строки 613 00:34:30,640 --> 00:34:35,570 это не очень полезная вещь, но вы можете видеть как сцепляя это, вы можете 614 00:34:35,570 --> 00:34:39,790 достигнуть кучу действительно интересных эффектов от манипуляций с текстом 615 00:34:39,790 --> 00:34:42,770 И оказывается, что pipes не только для текстовых данных, 616 00:34:42,770 --> 00:34:44,906 вы можете делать это так же с изображениями, 617 00:34:44,906 --> 00:34:45,650 у вас может быть программа, 618 00:34:45,650 --> 00:34:50,643 которая манипулирует с бинарным изображением на входе и выводит бинарное изображение 619 00:34:50,643 --> 00:34:52,647 и вы можете сцепить их вместе таким образом 620 00:34:52,647 --> 00:34:55,464 И позже мы поговорим о некоторых такого рода примерах тоже 621 00:34:55,464 --> 00:34:57,996 вы можете это делать даже для видео - если хотите. 622 00:34:57,996 --> 00:35:00,460 Вы можете транслировать, это, например, прекрасный способ 623 00:35:00,460 --> 00:35:04,820 если у вас дома есть Chromecast, вы так можете транслировать видео файл, 624 00:35:04,820 --> 00:35:09,628 если поставить последней программой в ваш pipe программу отправки Chromecast 625 00:35:09,628 --> 00:35:12,400 Так, вы транслируете в неё видео файл и она транслирует, 626 00:35:12,400 --> 00:35:14,459 или HTTP на ваш Chromecast 627 00:35:17,900 --> 00:35:21,480 Мы будем много говорить об этом на лекции по обработке данных ("data wrangling"), но 628 00:35:21,480 --> 00:35:25,380 есть ещё одна вещь, о которой я хочу рассказать вам как бы: 629 00:35:25,380 --> 00:35:30,310 как использовать терминал более интересным и более мощным способом, 630 00:35:30,310 --> 00:35:31,780 чем тот к которому вы могли привыкнуть. 631 00:35:31,780 --> 00:35:38,446 Возможно даже будет интересным для тех из вас, кто уже чувствует себя с терминалом комфортно. 632 00:35:38,446 --> 00:35:43,440 Но, сперва нам нужно покрыть важную тему относящеюся к Linux системам, и Mac OS 633 00:35:43,440 --> 00:35:47,238 системам в особенности, это понятие root пользователя 634 00:35:47,238 --> 00:35:50,340 root пользователь это что то вроде администратора в Windows 635 00:35:50,340 --> 00:35:52,821 и имеет нулевой идентификационный номер 636 00:35:52,821 --> 00:35:58,223 root пользователь особенный, потому что ему позволено делать на вашей систему всё что он захочет 637 00:35:58,223 --> 00:36:01,136 даже если файл закрытые для всех для считывания, 638 00:36:01,136 --> 00:36:02,796 или если закрыт для всех для изменений, 639 00:36:02,796 --> 00:36:04,626 root всё равно имеет доступ к этому файлу 640 00:36:04,626 --> 00:36:08,699 root это как бы супер юзер - они могут делать всё что захотят 641 00:36:08,699 --> 00:36:12,907 и чаще всего вы на будете оперировать как супер юзер 642 00:36:12,907 --> 00:36:16,755 вы не будете root, вы будете пользователем как Джон, или какое угодно ваше имя 643 00:36:16,755 --> 00:36:18,993 и это будет пользователь которым вы действуете 644 00:36:18,993 --> 00:36:22,765 Потому что, если бы оперировали своим компьютером как пользователь root всё время - 645 00:36:22,765 --> 00:36:25,970 если вы запустите не ту программу, она может разрушить ващ компьютер 646 00:36:25,970 --> 00:36:28,580 И вы не хотите этого! Правильно? 647 00:36:28,580 --> 00:36:32,632 Но время от времени вы хотите сделать что либо, что требует, что бы вы были root 648 00:36:32,632 --> 00:36:34,271 Обычно, в таки случаях, 649 00:36:34,271 --> 00:36:38,221 вы будете пользоваться программой под названием sudo, 650 00:36:38,221 --> 00:36:43,125 или делать как su - и su в этом случае "супер юзер" 651 00:36:43,125 --> 00:36:47,450 Так, это способ выполнить следующее как супер юзер 652 00:36:47,450 --> 00:36:52,532 Обычно, как sudo работает: вы вводите sudo и затем команду как обычно на вашем терминале, 653 00:36:52,532 --> 00:36:59,330 и он выполнит вашу команду так, как если бы вы были root, а не ваш пользователь 654 00:36:59,330 --> 00:37:01,460 Где вам может это понадобится? 655 00:37:01,460 --> 00:37:06,280 Хорошо, на вашем компьютере существует много файловых систем, 656 00:37:06,280 --> 00:37:09,310 но в особенности есть одна под названием sys fs 657 00:37:09,310 --> 00:37:13,905 Если вы cd в /sys - это целый новый мир: 658 00:37:13,905 --> 00:37:17,973 эта файловая система не файлы на вашем компьютере, 659 00:37:17,973 --> 00:37:20,775 а различные параметры ядра ("kernel") 660 00:37:20,775 --> 00:37:24,736 Так, ядро ("kernel") - это в общем-то, ядро вашего компьютера 661 00:37:24,736 --> 00:37:28,830 Это ваш способ получить доступ к различным параметрам ядра, 662 00:37:28,830 --> 00:37:31,870 через что-то, что выглядит как файловая система 663 00:37:31,870 --> 00:37:35,570 Вы здесь увидите, что если я cd в class, на пример, 664 00:37:35,570 --> 00:37:38,910 это имеет директории для различных типов устройств 665 00:37:38,910 --> 00:37:40,416 с которыми я могу взаимодействовать, 666 00:37:40,416 --> 00:37:43,490 или различные ключи к которым я могу получить доступ 667 00:37:43,490 --> 00:37:47,680 или всякого рода странные рычажки, внутри 668 00:37:47,680 --> 00:37:51,160 И поскольку они представлены как файлы - это означает что мы можем использовать 669 00:37:51,160 --> 00:37:54,575 все те инструменты, которые мы пока использовали, чтобы манипулировать ими 670 00:37:54,575 --> 00:37:59,241 Один такой пример, если вы пойдёте в /sys/class/backlight 671 00:37:59,241 --> 00:38:03,430 так, это backlight директория позволяет вам конфигурировать подсветку на вашем лаптопе, 672 00:38:03,430 --> 00:38:04,943 если она у вас есть 673 00:38:04,943 --> 00:38:07,855 Так, я могу cd в intel_baklight, это intel лаптоп, 674 00:38:07,855 --> 00:38:10,990 здесь внутри вы увидите файл под названием brightness ("яркость") 675 00:38:10,990 --> 00:38:15,385 Я могу cat brightness - это текущая яркость моего экрана 676 00:38:15,385 --> 00:38:18,369 Но не только это, я могу это также изменить, 677 00:38:18,369 --> 00:38:21,115 чтобы изменить яркость моего экрана 678 00:38:21,115 --> 00:38:23,477 Так, вы можете подумать что я могу, 679 00:38:23,477 --> 00:38:25,317 давайте посмотрим какая здесь максимальная яркость 680 00:38:25,317 --> 00:38:28,598 ОК, так это сейчас выставлено на максимум 681 00:38:28,598 --> 00:38:31,359 Вы можете представить, что я могу сделать что-то вроде 682 00:38:31,359 --> 00:38:37,431 Если я введу echo, сделаем половину или около того, echo 500 > brightness 683 00:38:37,431 --> 00:38:39,840 Если я введу - это говорит - "в доступе отказано" 684 00:38:39,840 --> 00:38:43,550 Я не имею права менять яркость, потому что, для того, чтобы, 685 00:38:43,550 --> 00:38:45,850 в общем для того чтобы поменять что-то в ядре, 686 00:38:45,850 --> 00:38:47,187 вам нужно быть администратором 687 00:38:47,187 --> 00:38:51,930 И вы можете представить, что способ это разрешить, это ввести sudo echo 500 688 00:38:51,930 --> 00:38:54,040 Но я опять получил ошибку - "в доступе отказано" 689 00:38:54,040 --> 00:38:55,779 Но почему? 690 00:38:55,779 --> 00:38:59,770 Это потому что, как я уже упоминал ранее, эти перенаправления ввода и вывода - 691 00:38:59,770 --> 00:39:02,490 не есть что то - о чём знают программы 692 00:39:02,490 --> 00:39:07,983 когда мы перенаправили ls в tail, tail не знала о ls, и ls не знал о tail 693 00:39:07,983 --> 00:39:10,744 pipe и перенаправление было задано shell 694 00:39:10,744 --> 00:39:13,059 Так, в этом случае, что происходит, 695 00:39:13,059 --> 00:39:17,151 я говорю моей shell выполнить программу sudo 696 00:39:17,151 --> 00:39:22,723 с аргументами echo и 500, и пошли вывод в файл под названием brightness 697 00:39:22,723 --> 00:39:28,570 Но shell открывает файл brightness, а не sudo 698 00:39:28,570 --> 00:39:32,070 Так, в этом случае, shell, которая запущена как я, 699 00:39:32,070 --> 00:39:33,983 пытается открыть файл brightness на запись, 700 00:39:33,983 --> 00:39:35,599 и она не имеет права этого делать 701 00:39:35,599 --> 00:39:37,976 И поэтому я получил ошибку "в доступе отказано" 702 00:39:37,976 --> 00:39:41,689 Вы могли видеть это, если вы, как бы, ищите что либо, 703 00:39:41,689 --> 00:39:42,799 вышли на Stack Overflow 704 00:39:42,799 --> 00:39:44,409 и там сказано: просто запусти эту команду 705 00:39:44,409 --> 00:39:46,830 и вы увидите что это далаем что-то вроде: 706 00:39:46,830 --> 00:39:48,340 они дали вам инструкции вроде: 707 00:39:48,340 --> 00:39:58,267 1 > /sys/net/ipv4_forward - например 708 00:39:58,267 --> 00:40:01,520 это что то вы могли видеть, если вы устанавливаете firewall 709 00:40:01,520 --> 00:40:04,240 И эта команда должна работать, 710 00:40:04,240 --> 00:40:05,930 потому что этот маленький символ фунта ("phond symbol"), 711 00:40:05,930 --> 00:40:07,830 указывает - запускать это как root 712 00:40:07,830 --> 00:40:09,640 Это что-то, что очень редко разъяснено, 713 00:40:09,640 --> 00:40:11,760 но это то, что # означает 714 00:40:11,760 --> 00:40:14,110 Вы увидите на моей командной строке знак доллара, 715 00:40:14,110 --> 00:40:16,943 и доллар указывает: вы сейчас не root 716 00:40:16,943 --> 00:40:19,190 Так, вопрос - как мне обойти это? 717 00:40:19,190 --> 00:40:22,270 Я могу переключиться в терминал root. 718 00:40:22,270 --> 00:40:25,220 Так один способ сделает это: запустить sudo su. 719 00:40:25,220 --> 00:40:28,837 sudo su - говорит: "запусти следующею команду как root" 720 00:40:28,837 --> 00:40:32,507 и su - это сложная команда, 721 00:40:32,507 --> 00:40:36,131 которая фактически даёт вам shell как супер юзер 722 00:40:36,131 --> 00:40:40,610 Так, если я введу это, введу пароль, тогда вы сразу увидите 723 00:40:40,610 --> 00:40:43,509 что имя пользователя в начале изменился с jon на root 724 00:40:43,509 --> 00:40:46,241 И командная строка изменилась с $ на # 725 00:40:46,241 --> 00:40:51,193 Если я теперь войду в этот файл, если я введу echo 500 > brightness 726 00:40:51,193 --> 00:40:53,528 мой экран стал немного темнее, но вы не можете это видеть 727 00:40:53,528 --> 00:40:55,380 просто поверье мне 728 00:40:55,380 --> 00:40:57,483 И теперь, я не получил ошибки - 729 00:40:57,483 --> 00:41:00,610 это потому что shell теперь запущена как root 730 00:41:00,610 --> 00:41:02,239 а не как Jon 731 00:41:02,239 --> 00:41:05,104 И пользователь root имеет право открыть этот файл 732 00:41:05,104 --> 00:41:09,480 Но, учитывая наши знания которые мы теперь имеем о терминале 733 00:41:09,480 --> 00:41:12,929 для нас существует способ делать это не прибегая к root shell 734 00:41:12,929 --> 00:41:17,240 И это выглядит следующим образом: 735 00:41:17,900 --> 00:41:21,929 это, я думаю, восстановит 1060 736 00:41:21,929 --> 00:41:24,500 Так, вы видите отличия? 737 00:41:24,500 --> 00:41:28,680 Здесь я говорю моей shell запустить команду echo 1060 738 00:41:28,680 --> 00:41:30,150 которая выполнит echo 1060 739 00:41:30,150 --> 00:41:32,849 И я говорю ей запустить команду sudo tee brightness 740 00:41:32,849 --> 00:41:37,596 И я говору "послать вывод от echo в sudo tee" 741 00:41:37,596 --> 00:41:40,755 Чтобы это понять, вам нужно знать что делает команда tee 742 00:41:40,755 --> 00:41:44,189 Команда tee принимает ввод и пишет его в файл, 743 00:41:44,189 --> 00:41:46,657 но также в стандартный вывод 744 00:41:46,657 --> 00:41:48,870 Так tee это удобный способ если у вас есть, 745 00:41:48,870 --> 00:41:53,650 скажем, журнал, в который вы хотите сохранить, 746 00:41:53,650 --> 00:41:55,779 но вы так же хотите видеть это 747 00:41:55,779 --> 00:41:58,600 Тогда вы можете pipe это через tee, дать ему имя файла, 748 00:41:58,600 --> 00:42:02,325 и это запишет ввод в файл и на ваш экран 749 00:42:02,325 --> 00:42:05,312 И здесь я пользуюсь этой программой: 750 00:42:05,312 --> 00:42:11,015 я говорю: "запусти tee как root и пусть tee пишет в файл brightness" 751 00:42:11,015 --> 00:42:12,970 И так в этом случае программа tee, 752 00:42:12,970 --> 00:42:14,767 которая открывает файл brightness, 753 00:42:14,767 --> 00:42:17,577 запущена как root и имеет право это делать 754 00:42:17,577 --> 00:42:20,700 Если я запущу это сейчас, вы снова не можете видеть, 755 00:42:20,700 --> 00:42:23,420 но яркость включилась на лаптопе 756 00:42:23,420 --> 00:42:24,510 И я не получил никаких ошибок, 757 00:42:24,510 --> 00:42:26,674 и мне не понадобилось переходить в root shell 758 00:42:26,674 --> 00:42:27,930 и запускать команды оттуда 759 00:42:27,930 --> 00:42:30,720 Что часто может быть в некотором роде опасным 760 00:42:30,720 --> 00:42:32,786 Если вы хотите исследовать эту файловую систему немного больше 761 00:42:32,786 --> 00:42:35,761 здесь есть много чего интересного 762 00:42:35,761 --> 00:42:38,990 Если вы просто начнёте осматриваться вокруг, 763 00:42:38,990 --> 00:42:41,151 вы можете найти забавные вещи всех сортов 764 00:42:41,151 --> 00:42:44,478 Так, к примеру, мы заметили что есть забавная команда brightness 765 00:42:44,478 --> 00:42:47,786 Мне интересно, какие ещё яркости я могу задать 766 00:42:47,786 --> 00:42:49,510 Так я могу использовать команду find, 767 00:42:49,510 --> 00:42:52,241 которую мы также обсудим на следующей лекции, 768 00:42:52,241 --> 00:42:58,546 Я буду искать каждый файл, чьё имя немного похоже на brightness 769 00:42:58,546 --> 00:43:00,460 в текущей директории 770 00:43:00,460 --> 00:43:01,700 Это бесполезно 771 00:43:01,700 --> 00:43:07,650 Может быть они не файлы. Я ошибся в слове brightness? 772 00:43:07,650 --> 00:43:09,500 Да, почему это так себя ведёт? 773 00:43:14,960 --> 00:43:20,190 О, по-видимому не хочет найти мне brightness. Как хорошо. 774 00:43:20,190 --> 00:43:24,277 К счастью для вас - я уже знаю одну, кстати. 775 00:43:24,277 --> 00:43:29,787 Существует субдиректория под названием leds, и leds тоже имеет brightness 776 00:43:29,787 --> 00:43:31,959 Какого рода leds здесь есть? У-уу - много всего! 777 00:43:31,959 --> 00:43:35,430 Например яркость scroll lock индикатора 778 00:43:35,430 --> 00:43:39,230 В наше время большинство из вас наверное уже не знает что такое светодиодный индикатор scroll lock, 779 00:43:39,230 --> 00:43:41,300 и ещё менее вероятно что такое сам scroll lock 780 00:43:41,300 --> 00:43:45,733 Вы могли видеть кнопку на своей клавиатуре с надписью "Scroll Lock" 781 00:43:45,733 --> 00:43:48,412 На самом деле никто больше не знает что это значит, 782 00:43:48,412 --> 00:43:50,261 никто в действительности ни для чего её не использует, 783 00:43:50,261 --> 00:43:54,672 это в основном "мёртвая" кнопка, и "мёртвый" индикатор 784 00:43:54,672 --> 00:43:56,230 Что если бы вы захотели настроить его 785 00:43:56,230 --> 00:43:57,880 так, что каждый раз когда вы получаете е-мейл 786 00:43:57,880 --> 00:43:59,531 ваш scroll lock загорается? 787 00:43:59,531 --> 00:44:01,712 Потому что нет другой причины чтобы он загорался 788 00:44:01,712 --> 00:44:05,792 Хорошо, если мы посадим вас в эту конкретную директорию, 789 00:44:05,792 --> 00:44:07,310 в которой есть место для яркости 790 00:44:07,310 --> 00:44:08,310 и оно выставлено в ноль, 791 00:44:08,310 --> 00:44:11,720 что будет если я впишу сюда единицу 792 00:44:13,210 --> 00:44:16,879 Возможно вам не нужно писать случайные числа в случайные файлы 793 00:44:16,879 --> 00:44:19,500 в этой директории, потому что вы влияете на директорию ядра, 794 00:44:19,500 --> 00:44:21,050 как бы, поищите что эти файлы делают. 795 00:44:21,050 --> 00:44:26,326 В этом конкретном случае, я ношу защитные очки - я поискал сам перед этим 796 00:44:26,326 --> 00:44:31,497 Так вы не можете сейчас сказать, но на моей клавиатуре индикатор scroll lock теперь светится 797 00:44:31,497 --> 00:44:35,492 Так, если сейчас я напишу программу которая как бы проверяла е-мейл и всё такое, 798 00:44:35,492 --> 00:44:37,487 я бы мог в конце концов выполнять программу 799 00:44:37,487 --> 00:44:39,388 которая бы эхо в этот файл 800 00:44:39,388 --> 00:44:43,694 и теперь у меня есть способ для моего светодиодного индикатора на моей клавиатуре 801 00:44:43,694 --> 00:44:45,810 показывать когда я получил новый е-мейл 802 00:44:46,796 --> 00:44:53,616 На этом месте вы должны знать примерно как обращаться с терминалом и shell, 803 00:44:53,616 --> 00:44:56,825 и знать достаточно, чтобы выполнять эти простые задания 804 00:44:56,825 --> 00:44:58,860 По крайней мере, теоретически, 805 00:44:58,860 --> 00:45:02,370 вам не обязательно больше использовать указать-и-щёлкать интерфейс 806 00:45:02,370 --> 00:45:03,699 чтобы искать файлы 807 00:45:03,699 --> 00:45:05,859 Ещё один оставшийся трюк, который вам может понадобится - 808 00:45:05,859 --> 00:45:08,049 это возможность открыть файл 809 00:45:08,049 --> 00:45:13,100 до сих пор я только давал вам способы найти файл, 810 00:45:13,100 --> 00:45:19,748 но одна вещь о которой вы должны знать: xdg-open 811 00:45:19,748 --> 00:45:22,372 это возможно работает только на Linux, 812 00:45:22,372 --> 00:45:24,314 на Mac OS я думаю это называется просто open 813 00:45:24,314 --> 00:45:26,379 на Windows - кто его знает? 814 00:45:26,379 --> 00:45:31,657 xdg-open вы даёте имя файла - и он открывается в соответствующей программе 815 00:45:31,657 --> 00:45:35,579 так если вы откроете, если вы введёте xdg-open и HTML файл 816 00:45:35,579 --> 00:45:38,500 который откроет ваш браузер и откроет этот файл 817 00:45:38,500 --> 00:45:40,049 И когда у вас будет эта программа, 818 00:45:40,049 --> 00:45:43,769 в теории - вам не никогда не нужно больше открывать какое-то поисковое окно 819 00:45:43,769 --> 00:45:45,739 вы можете по другим причинам, 820 00:45:45,739 --> 00:45:47,333 но в теории вы можете со всем справиться 821 00:45:47,333 --> 00:45:49,949 используя инструменты с которыми мы сегодня познакомились 822 00:45:49,949 --> 00:45:53,522 Это всё может выглядеть относительно просто для некоторых из вас, 823 00:45:53,522 --> 00:45:56,139 но как я уже упомянул это как бы ознакомительный период 824 00:45:56,139 --> 00:45:57,969 Теперь мы все знаем как работает shell 825 00:45:57,969 --> 00:46:00,524 и многое из того что мы будем делать на будущих лекциях - 826 00:46:00,524 --> 00:46:04,647 это использовать эти знания для действительно интересных вещей 827 00:46:04,647 --> 00:46:06,039 используя shell 828 00:46:06,039 --> 00:46:10,193 вроде изучения интерфейса - интерфейса который мы будем использовать, 829 00:46:10,193 --> 00:46:12,640 поэтому важно чтобы мы все это знали 830 00:46:13,430 --> 00:46:16,259 Мы будем много говорить на следующей лекции 831 00:46:16,259 --> 00:46:17,849 о том как автоматизировать такие задачи 832 00:46:17,849 --> 00:46:20,719 Как писать скрипты которые выполняют для вас несколько программ 833 00:46:20,719 --> 00:46:25,150 И как делать вещи как условные выражения и циклы и прочее, в вашем терминале 834 00:46:25,150 --> 00:46:28,227 И делать такие вещи как выполнять программу пока не вывалится 835 00:46:28,227 --> 00:46:30,699 Что может пригодится в классах где вы хотите выполнять что-либо пока 836 00:46:30,699 --> 00:46:33,390 ваш набор тестов не запорится, к примеру 837 00:46:33,390 --> 00:46:37,335 Так это тема лекции следующей недели, у вас есть вопрос? 838 00:46:37,335 --> 00:46:41,397 (aудитория) Да, просто в связи с тем что вы демонстрировали - это вспомогательная директория 839 00:46:41,397 --> 00:46:48,830 которая предположительно будет работать только если вы выполняете это в Linux, а не в субсистеме Linux ? 840 00:46:48,830 --> 00:46:54,285 Это хороший вопрос! Я не знаю если субсистема Windows для Linix 841 00:46:54,285 --> 00:46:56,676 предоставит файловую систему sis. 842 00:46:56,676 --> 00:47:01,148 Если да - то возможно только в очень малом количестве. 843 00:47:01,748 --> 00:47:08,479 Оно может. Потому что... Я не знаю, проверьте 844 00:47:08,479 --> 00:47:12,710 Одно вы увидите - конспекты этой лекции уже онлайн, 845 00:47:12,710 --> 00:47:16,224 и в самом низу файла - куча упражнений. 846 00:47:16,224 --> 00:47:18,018 Некоторые из них относительно просты, 847 00:47:18,018 --> 00:47:19,390 некоторые из них немного сложнее 848 00:47:19,390 --> 00:47:23,307 И что мы рекомендуем вам сделать, это выполнить их, 849 00:47:23,307 --> 00:47:25,921 если вы уже это знаете, это пойдёт довольно быстро, 850 00:47:25,921 --> 00:47:28,471 если нет - это может научить вам много чему 851 00:47:28,471 --> 00:47:30,888 что вы не знали что не знали 852 00:47:30,888 --> 00:47:34,204 И на кафедре, сразу после этой лекции, 853 00:47:34,204 --> 00:47:35,694 мы будем счастливы 854 00:47:35,694 --> 00:47:36,840 провести вас через всех них, 855 00:47:36,840 --> 00:47:38,558 или другие команды о которых вы узнаете в процессе 856 00:47:38,558 --> 00:47:40,530 и захотите узнать как использовать их более эффективно 857 00:47:40,530 --> 00:47:42,506 И тогда на следующей лекции, 858 00:47:42,506 --> 00:47:44,260 которая будет завтра, 859 00:47:44,260 --> 00:47:45,630 мы просто будем считать что 860 00:47:45,630 --> 00:47:48,357 вы знаете вещи вроде тех которым вас научат упражнения 861 00:47:48,357 --> 00:47:52,111 На сайте есть так же е-мейл адрес, 862 00:47:52,111 --> 00:47:53,540 куда вы можете послать нам вопросы 863 00:47:53,540 --> 00:47:58,050 Если вы подумаете об чём-то поздно ночью 864 00:47:58,050 --> 00:48:04,480 Есть ли вопросы перед там как мы закончим сегодня? Нет? Нет? 865 00:48:04,480 --> 00:48:10,370 Отлично, мы будем на кафедре на девятом этаже здания "ворота" ("gates") здания 32 866 00:48:10,370 --> 00:48:12,150 примерно через 5 минут 867 00:48:13,340 --> 00:48:15,830 Увижу вас там