Дальнейшее знакомство

Изучение базовых инструментов

После установки инструментов для PA пора снова исследовать GNU/Linux! Здесь небольшое руководство по GNU/Linux, написанное jyy. Если вы новичок в GNU/Linux, внимательно прочитайте руководство и, самое важное, попробуйте каждую команду, упомянутую в руководстве. Помните: вы ничему не научитесь, только читая руководство. Кроме того, 鸟哥的Linux私房菜открыть в новом окне — книга, подходящая для новичка в GNU/Linux. Ещё одна книга, которую мы рекомендуем, — Harley Hahn's Guide to Unix and Linuxоткрыть в новом окне.

RTFM

Самая важная команда в GNU/Linux — man — постраничник онлайн-руководства. Потому что man может сказать вам, как пользоваться другими командами. Здесь небольшое руководство по man. Помните: научитесь пользоваться man — научитесь пользоваться всем. Поэтому, если вы хотите узнать что-то о GNU/Linux (например, команды оболочки, системные вызовы, библиотечные функции, файлы устройств, конфигурационные файлы...), RTFMоткрыть в новом окне.

Зачем RTFM?

RTFM — старший родственник STFW и был эффективным способом решать проблемы в дни, когда интернет ещё не был очень популярен. Потому что руководство содержит всю информацию об искомом объекте. Ответы на всё об объектах можно найти в руководстве.

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

  • Блог, который вы нашли, может быть перепечаткой чужого и может быть полон изъянов.
  • Блогер просто делится своим опытом, и некоторые утверждения могут быть неточными.
  • Если вы нашли что-то релевантное, это может быть неполное описание.

Самое важное: когда вы пробуете вышеперечисленное и это не решает проблему, вам нужно ясно сказать себе: «Я просто пытался срезать путь, похоже, нужно попробовать RTFM».

Напишите программу "Hello World" в GNU/Linux

Напишите программу "Hello World", скомпилируйте её, затем запустите в GNU/Linux. Если не знаете, что делать, обратитесь к руководству по GNU/Linux выше.

Напишите Makefile для компиляции программы "Hello World"

Напишите Makefile для компиляции программы "Hello World" выше. Если не знаете, что делать, обратитесь к руководству по GNU/Linux выше.

Теперь остановитесь здесь. Здесьоткрыть в новом окне небольшое руководство по GDB. GDB — самый распространённый отладчик в GNU/Linux. Если вы ещё не пользовались отладчиком (даже в Visual Studio), сначала вините курс «Основы программирования», потом вините себя и наконец прочитайте руководство, чтобы научиться пользоваться GDB.

Научитесь пользоваться GDB

Прочитайте руководство по GDB выше и пользуйтесь GDB по этому руководству. В PA1 от вас потребуют реализовать упрощённую версию GDB. Если вы не пользовались GDB, у вас может не быть идей, как закончить PA1.

Эй! Не ленитесь!

Выше мы говорим вам написать программу "Hello World", затем написать Makefile, чтобы её скомпилировать И посмотреть руководство, чтобы выучить основы GDB!

Установка tmux

tmux — мультиплексор терминалов. С ним вы можете создать несколько терминалов на одном экране. Это очень удобно, когда вы работаете с монитором высокого разрешения. Чтобы установить tmux, просто выполните следующую команду:

apt-get install tmux

Теперь вы можете запустить tmux, но сначала давайте немного настроим. Вернитесь в домашний каталог:

cd ~

Создайте файл с именем .tmux.conf:

vim .tmux.conf

Допишите в файл следующее содержимое:

bind-key c new-window -c "#{pane_current_path}"
bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"

Эти три строки настроек заставляют tmux «запоминать» текущий рабочий каталог текущей панели при создании нового окна/панели.

Разверните окно терминала на весь экран, затем используйте tmux, чтобы создать несколько терминалов обычного размера на одном экране. Например, вы можете одновременно редактировать разные файлы в разных каталогах. Можете редактировать их в разных терминалах, компилировать их или выполнять другие команды в другом терминале, не открывая и не закрывая исходные файлы туда-сюда. Вы можете прокручивать содержимое терминала tmux вверх и вниз. Как пользоваться tmux — пожалуйста, STFW.

Опять STFW?

Да.

Помимо закрепления знаний с теоретических занятий ICS, у PA есть важная миссия: воспитать из вас квалифицированного CS-ера. На самом деле квалифицированному CS-ера нужно уметь самостоятельно искать решения. Это одно из базовых требований к программистам в IT-компаниях и научных организациях. Ваш будущий начальник, вероятно, просто даст вам задачу Если вы будете просить помощи всякий раз, когда возникнет проблема, начальник решит, что вы не можете создавать ценность.

PA пытается заставить вас сосредоточиться на этих базовых требованиях, которые ценят и индустрия, и академия, чтобы вы развили эти навыки и установки. Когда вы сталкиваетесь с проблемой, первая мысль — не найти мастера, который поможет решить, а «Дай-ка я попробую STFW и RTFM, посмотрю, смогу ли решить сам». Так что PA — не пошаговая школьная лабораторная, и не жалуйтесь, что хендаут был неясным и из-за этого вы свернули не туда, мы сделали это нарочно. Мы постараемся, чтобы дорога не была слишком извилистой, и если у вас правильный настрой, вы способны решать эти проблемы самостоятельно. Важно принять тот факт, что крюки, которые вы наделали, указывают на то, что вам есть куда расти. Единственный способ меньше ошибаться в будущем — если вы сейчас серьёзно пройдёте этот путь.

Мудрость задавания вопросов / Не задавайте вопросы как идиот

Ещё один критерий квалифицированного CS-ера — уметь задавать вопросы.

Как CS-ер, вы наверняка уже сталкивались с просьбами починить компьютер. Например, если у вас есть знакомый-гуманитарий, который пишет вам в QQ «у меня проблемы с компьютером» и просит починить Тогда вам приходится задавать вопросы, чтобы понять, в чём проблема, потом просить его пробовать разные варианты, потом просить обратную связь по тому, что он пробовал. Если бы у вас было 10 таких ребят, вам бы это надоело. Теперь вы знаете, каково быть ассистентом (TA).

На самом деле, если хочется повысить вероятность получить ответ, спрашивающий должен научиться лучше задавать вопросы. Другими словами, спрашивающий должен серьёзно подумать о том, что он спросил. «Что я могу сделать заранее, чтобы другому человеку было проще помочь мне диагностировать проблему». Да, ваш знакомый-гуманитарий не учится на информатике, и вы можете его простить Но вы CS-ер, так что как минимум опишите симптомы и что вы уже пробовали А не просто бросайте «моя программа упала» и ждите, пока кто-то спасёт ситуацию. В будущей карьере вам, вероятно, тоже придётся просить помощи: например, открывать issue на github, писать на форуме вроде stackoverflow или писать инженеру и т.д. Если вы задаёте вопрос очень непрофессионально, скорее всего никто не захочет обращать на него внимание. Потому что это не только создаёт впечатление, что ваши случайные вопросы не так уж важны. И люди не хотят тратить много времени на переписку с вами туда-сюда..

Рекомендуемый способ задать вопрос таков.

Я столкнулся с ошибкой xxx в xxx. Эту ошибку можно воспроизвести следующими шагами: (опишите конкретную ситуацию)
1. Версия моей системы — xxx, версия соответствующего инструмента — xxx.
2. Я сделал xxx (при необходимости приложите картинку)
3. затем xxx (при необходимости приложите картинку)
...
Чтобы разобраться с этой ошибкой, я предпринял следующие попытки: (чтобы показать, что я действительно хочу решить проблему и спрашиваю только потому, что другого выхода нет)
1. Я сделал xxx и получил результат xxx (при необходимости приложите картинку)
2. Я также сделал xxx и получил результат xxx (при необходимости приложите картинку)
...
Если в итоге проблема не решена, что ещё мне нужно сделать?

Также обязательно прочитайте how to askоткрыть в новом окне и stop askоткрыть в новом окне Там есть ряд примеров, на которые можно посмотреть.

Следующая картинка показывает сцену работы с несколькими терминалами на одном экране. Круто?

tmux

Зачем пользоваться tmux?

Это на самом деле пример «использовать правильный инструмент для работы».

Компьютеры созданы для пользователей, и когда у вас есть потребность, вы можете подумать: «Есть ли инструмент, который поможет мне это сделать?» Мы хотим, чтобы каждый терминал делал разное, чтобы всё было видно на экране и чтобы можно было быстро переключаться между терминалами. На самом деле с STFW и RTFM вы можете научиться пользоваться правильным инструментом. Нужно просто поискать его в поисковике. Вы можете найти tmux в результате, поискав "Linux terminal split screen" Затем поищите "tmux tutorials", чтобы выучить основы использования tmux. Введите man tmux в терминале, чтобы разобрать любые вопросы о tmux.

Конечно, обучение не даётся бесплатно. Бывший студент предложил способ разделить экран без затрат на обучение. Откройте четыре терминала и перетащите их в четыре угла экрана, поскольку сочетание Alt+Tab не позволяет легко выбрать окно (потому что все четыре окна выглядят одинаково), он переключался между ними кликом мыши. Затем он описал установку и изучение tmux как лишнее.

Весь смысл tmux — сэкономить пользователю стоимость таких действий. Если вы не готовы платить никакую цену обучения, вы не сможете насладиться инструментом.

Что стоит за прокруткой

Вы наверняка пользовались полосами прокрутки в GUI. Вы можете принимать это как само собой разумеющееся. Поэтому исходный непрокручиваемый терминал (тот, которым вы пользуетесь сразу после входа) можете считать адом. Но подумайте вот о чём: почему исходный терминал нельзя прокручивать? Как tmux делает терминалы прокручиваемыми? И наконец, знаете ли вы, как реализовать полосу прокрутки?

GUI — не что-то таинственное. Помните: за каждым элементом GUI стоит своя история. Изучите историю — и узнаете многое. Вы можете сказать: «Я просто пользуюсь GUI, учить историю незачем». Да, вы правы. Появление GUI как раз для того, чтобы спрятать историю от пользователей. Но GUI пользуется почти весь мир, и поэтому вы не можете отличить себя от них.

Почему GNU/Linux и как им пользоваться

Зачем пользоваться Linux?

Начнём с двух примеров.

Как сравнить, идентичны ли два файла? Этот пример выглядит очень простым и в Linux реализуется командой diff. Если файлы большие, полезно использовать md5sum, чтобы вычислить и сравнить их MD5. Пользователю Linux нужно около 3 секунд, чтобы набрать эти команды. Но в Windows это сделать не так легко. Может, вы скачали калькулятор MD5, но сколько кликов мыши нужно, чтобы выполнить сравнение? Может, вы думаете, что это не сильно сэкономит время. Однако правда в том, что именно так снижается ваша эффективность разработки.

Как перечислить все подключённые заголовочные файлы в проекте на C? Этот пример чуть сложнее предыдущего, но в Windows вы почти не сможете сделать это эффективно. В Linux мы можем сделать это одной строкой команды:

find . -name "*.[ch]" | xargs grep "#include" | sort | uniq

Заглянув в man, вы без труда поймёте, как приведённая команда выполняет нужную функцию. Этот пример — ещё один пример философии Unix.

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

Последний пункт философии Unix лучше всего описывает разницу между Linux и Windows: Programability. Если сравнить инструменты с функциями в коде, комбинирование инструментов — это форма программирования. Но инструменты Windows почти невозможно комбинировать, потому что Windows для обычного пользователя должен подчёркивать простоту использования.

Так что причина, по которой вам стоит пользоваться Linux, очень проста. Как кодеру. Windows всегда был препятствием для вашей способности думать, действовать и быть продуктивным.

Как эффективно пользоваться Linux?

  1. Удалите Windows, освободите разум, избавьтесь от препятствий Windows. Вместо того чтобы по умолчанию говорить «Никак, так и должно быть», вы должны пробовать «Посмотрим, получится ли сделать это хорошо».
    • В Linux тоже есть соответствующее обычное ПО, например Chrome, WPS, китайский метод ввода, mplayer...
    • Вы можете жить без Windows.
    • Если никак, можете поставить Windows VM про запас.
  2. Освойте некоторые обычные инструменты командной строки и заставьте себя пользоваться ими в повседневных операциях.
    • Управление документами - cd, pwd, mkdir, rmdir, ls, cp, rm, mv, tar
    • Поиск документов - cat, more, less, head, tail, file, find
    • Управление вводом/выводом - перенаправление, конвейеры, tee, xargs
    • обработка текста - vim, grep, awk, sed, sort, wc, uniq, cut, tr
    • регулярные выражения
    • Мониторинг системы - jobs, ps, top, kill, free, dmesg, lsof
    • Перечисленные инструменты покрывают подавляющее большинство потребностей программиста
    • Можно начать с простых, и запоминать их, если пользуетесь чаще, а если не помните — man
  3. RTFM + STFW
  4. настойчивость.
  • Установка: вера, что всегда есть правильный инструмент, который поможет сделать лучше.
  • Действия: готовность потратить время, чтобы найти его, выучить, использовать.

The Missing Semester of Your CS Education

The Missing Semester of Your CS Educationоткрыть в новом окне — серия руководств по инструментам Linux, рекомендованная jyy.

Это руководство доступно на китайском, посмотрите.

Преодоление страха, набор первоначальной уверенности

Факт в том, что учиться пользоваться Linux — упражнение с низкой ценой и высоким успехом. Если вы готовы STFW и RTFM, вы можете решить большинство проблем. В отличие от этого, проблемы, с которыми вы столкнётесь позже (в последующих PA / в последующих курсах / на работе), будут сложнее. Так что, самостоятельно решая эти маленькие простые проблемы, вы начнёте набирать первоначальную уверенность в своей способности решать более трудные проблемы.