Практика языка C (МФТИ, 2023-2024). Допсеминар: unix shell

preview_player
Показать описание
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.

Этот допсеминар был прочитан факультативно. Он посвящён тому, чтобы познакомить студентов первого курса с работой в консоли.

Семинарист: Константин Владимиров.
Дата: 16 сентября 2023 года.
Съёмка: Владислав Белов.
Звук: Юлий Тарасов.

Timeline
00:00 Начало работы и пакетный менеджер
09:06 Фокус с исчезновением
14:30 Всё есть файл
19:05 Аргументы
23:30 Перенаправления
39:34 Автоматизация тестирования и циклы
49:35 Стандартные переменные: HOME, RANDOM, PATH
56:15 Однострочники
01:05:05 Скрипты, их окружение и шебанг
01:19:30 Тонкости написания скриптов
01:31:20 Супероружие: grep
01:37:50 Супероружие: sed
01:43:12 Супероружие: awk
01:48:09 Комбинация команд
01:52:30 Shell script это плохой скриптовый язык и завершение

Errata:
* пока нет
Рекомендации по теме
Комментарии
Автор

вы очень интересный и увлекательный преподаватель, 1.5ч прошли не заметно, большое спасибо, что выкладываете такой интересный материал бесплатно.

bryakha
Автор

Про make очень было бы интересно доп семинар посмотреть❤

evgeniykochetkov
Автор

изначально я думал что лекция будет как везде в ютубе. одлнако ваши лекции всегда содержат много полезного, я такого нигде не слышал. пожалуйста записывайте лекции у вас очень хорошо получается. Много кто снимал видео на данную тему и попадался мне в сети обезьяны цирковые которые ничего не понимают. У вас лучше всех получается

MikhailGoncharov-tlcr
Автор

ВСЁ КРУТО!!! (извиняюсь, полное коллапсирование словарного запаса).. ))) Смотрю весь курс, всё шикарно!

EvgenijFedotov
Автор

Очень полезный семинар, спасибо. Узнал много нового о баше

kudikokudiko
Автор

Замечательный допсеминар!
Константин, спасибо!

furjis-dev
Автор

Очень понятные уроки, круто что Си одновременно с Linux. Пожелание увидеть в курсе пример работы с какой-ниб. GUI библиотекой, не сложный, чтобы понять принципы.

СекретныйКот-ии
Автор

Спасибо. Отличный цикл. Освежаю свой С, вгрызаюсь в Linux. С++ тоже обязательно прослушаю, если раньше YouTube у нас не прибьют. bash и прочие юзабельные команды очень кстати.
Если я правильно понял, можно добавить ещё каплю феншуя в скрипт second, если использовать в теле цикла переменную folder вместо прямо прописанного названия папки myfolder.

magicmetal
Автор

Я опять хочу прикопаться к историческим фактам и персонам :)
1:43:18 Сказано, "Си это то что сделали Керниган и Ритчи вместе ..."
Но, сам Керниган неоднократно говорил (ссылку на интервью можно найти в англ. вики), что он не принимал участия в создании языка. Он сделал мануал по Си сначала для белл лабс, потом вместе с Ритчи сделали с него книгу К&R.

popcorni
Автор

26:23 технически на винде тоже достаточно права на исполнение, расширение не важно. при этом cmd.exe требует, чтоб расширение было (любое). условное clang++ test.cpp -o test.txt && .\test.txt сработает.
при этом из других шеллов (тот же zsh) или прямым CreateProcess можно запустить и файл без расширения, насколько помню.

Stedmiel
Автор

Константин, спасибо за лекцию.
Эх, надо было эффектно завершить стрим, случайно запустив rm -rf / И экран гаснет :D

alex_s_ciframi
Автор

По идее концептуально в линукс не папки, а каталоги поэтому возможны hard links. С папками не понятно как один и тот же файл может лежать в разных папках одновременно, а с каталогом в котором записана лишь информация о файле всё нормально - информацию можно в любое количество каталогов записать.
Понятие папки скорее всего из графического интерфейса пришло которого в самом линукс нет.

Konstantin_Evdokimov
Автор

28:38 на слайде ошибка.
Во втором примере стоит "2>1", должно быть "2>&1".
На 39:43 таже ошибка.
Смотрю с удовольствием, спасибо за лекцию.

comradov
Автор

Иногда хочется чтобы папка являлась именно тегом к файлу) По моему опыту расположение файлов по папкам чисто субъективная вещь и разные люди это делают по разному, где-то структура папок делается по типу файлов, где-то по фичам, а чаще в перемешку, и в таких ситуациях хочется чтобы файл именно что лежал в нескольких папках одновременно, чтобы когда я захочу поработать со всеми файлами типа .png я зашел в каталог images, а когда захотел поработать над определенной фичей, я зашел в каталог some-feature и увидел там как картинки, так и файлы с кодом, относящиеся к этой фиче. В unix, кстати, есть теги для файлов? В винде что-то такое вроде есть, но не видел что бы кто-то это юзал.

hatiko
Автор

16:55 Насколько все же я знаю, основатель Unix, это не Денис Ритчи, а Кен Томпсон. Ритчи бесспорно очень повлиял на Unix как минимум тем, что она была переписана с ассемблера на язык который придумал Ритчи, язык С. Или не с ассемблера, а с языка В, котрый придумал (сократив BCPL) Томпсон. Тут точно не помню. Ну, тоесть они вместе работали над Unix, но оригинальный автор и идея пренадлежит Томпсону.

popcorni
Автор

Спасибо, у меня вопрос, есть ли где-то видео по кросс компиляции на C/C++ (желательно с clang)? Уже очень долго мучаюсь, но толковых инструкций не нашел.

Yuriy
Автор

Благодарю. Очень полезный и интересный семинар.

jesse_roamsas
Автор

Вы упоминали Пайтон и Руби в качестве хороших скриптовых языков.
А как вы относитесь к node.js в качестве скриптового языка?

lisenkoevg
Автор

Здравствуйте, Константин Игоревич, подскажите пожалуйста, почему при редиректе стандартного вывода программы в файл с последующим открытием файла stdout и выводом в него, вывод всё равно осуществляется в файл, указанный для редиректа, а не в консоль?
запуск: ./a.out > f_output
программа:
int fd = open("/dev/stdout", O_WRONLY);
char msg[] = "Hello world!\n";
write(STDOUT_FILENO, msg, sizeof msg - 1);
write(fd, msg, sizeof msg - 1);
Т.е. по логике оболочка должна просто сделать дубликат дескриптора файла на 1 дескриптор через dup2, но почему это оказывает влияние на файл stdout, а не только на запись в таблице дескрипторов? Или я чего-то не понимаю?

ДенисСомин
Автор

Очень полезная лекция, Константин, благодарю!
Только слово окружение вы произнесли неправильно, там не произносится буква r, как и в слове iron =)

ИванРазинкин-дв