Опрос кого-либо на общие навыки Unix [закрыто]

20

Как бы вы протестировали разработчика, который утверждает, что имеет опыт работы с * nix shell (просто для ясности, мы не хотим проверять, может ли кто-то разрабатывать на * nix, только чтобы он знал свой путь в командной строке).

Я думал о том, чтобы заставить их решить проблему извлечения информации из файлов журналов, которая включала бы некоторые основы, такие как cat, grep, cut, ... в сочетании с трубопроводом.

Какие еще базовые знания вы бы попросили? Еще раз, это не для собеседования с кем-то, кто будет разрабатывать для систем * nix, а также не для системных администраторов * nix, а только для обычных разработчиков, которым иногда требуется некоторая работа в системе * nix.

Кристоф Ванфлетерен
источник
Такая тренировка оболочки - торт для любого человека, который уже знает язык программирования. С каких это пор люди заботятся о том, чтобы собеседники делали правду более приятной в своих резюме? Так происходит все время. Звучит мелко для меня.
Ям Маркович
@YamMarcovic - Когда вы говорите, что «правда кажется немного более приятной», вы говорите «заявляете, что обладаете уровнем мастерства, которого у них нет»? Если да, я бы сказал, что это очень важно выяснить во время интервью. Если они лгут, чтобы пройти через дверь, как можно доверять им, оказавшись внутри?
Ватин
@Vatine Потому что, по крайней мере, из моего опыта, все преувеличивают свои навыки в резюме. Если вы дисквалифицировали этих людей, вы будете вынуждены нанимать догматически честных или наивных людей. Это намного меньше вариантов.
Ям Маркович

Ответы:

13

Из моего личного опыта разработчик, работающий над системой * nix, должен знать:

  • переменные оболочки (как установить / получить + знание о специальных, таких как PATH)
  • перенаправление оболочки (захват результатов программы)
  • каналы (извлечение некоторой информации из файла журнала - отличный пример)
  • управление процессом (ps, nice / renice, kill)
  • права доступа к файлу (ls / chmod / chown / chattr)
  • пользователи (но в основном в контексте файлов / процессов, то есть: может ли этот процесс получить доступ к этому файлу? почему он может / не может?)

... и в качестве бонуса:

  • запуск / остановка системных служб

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

Яцек Прусия
источник
Хороший ответ. Какие команды используются для запуска / остановки системных служб?
Тим
11

Из моего опыта работы с многочисленными коллегами с тех пор, как я начал работать, никто не хочет подделывать знания Unix: либо они « разбираются в командной строке », либо просто говорят «ни за что!».

Просто спросите, готов ли кандидат работать на рабочей станции Unix, и пусть он скажет вам, как далеко он может пройти bash. Он в конце концов назовет некоторые команды; наиболее очевидные из них cd, cat, moreили less, viили emacs, grep, awk, sed. Слушайте внимательно, упоминает ли он man.

Если для развития, он должен быть знаком с makeи Makefiles, а некоторые из командной строки управления версиями интерфейса ( svn, git, cleartool, hg, cvs...)

mouviciel
источник
4
Я знаю об этом manи использую его всякий раз, когда Google не помогает, но я бы никогда не включил его в свой список команд ...
Mehrdad
3
manсамый эффективный способ узнать о командной строке Unix и библиотеках C, когда вы не в сети. Кстати, я узнал Unix, когда самый продвинутый инструмент для поиска в Интернете былtelnet archie.cs.mcgill.ca
mouviciel
1
Обязательный xkcd.com/293 xkcd.com/456 xkcd.com/434
Мехрдад
@mouviciel: Это также наиболее эффективный способ изучения командной строки unix, когда вы находитесь в сети , так как большинство форумов «услужливо» сообщат вам rtfm, если вы спросите их подробности о командах. Это должно быть в порядке, если справочные страницы не были невероятно запутаны и трудно ориентироваться в документации. К счастью, есть переполнение стека!
Джорен
Я не знаю об этом. Я использую man-страницы чрезмерно, и у меня никогда не было проблем с этим, когда я привык к этому. Это кусок пирога, чтобы найти то, что вы ищете. У вас есть разделы, у вас есть «См. Также», и вы можете искать все это одним нажатием кнопки. Вы получаете справочную страницу для каждой команды и каждого системного вызова, и довольно много библиотечных вызовов. Я бы сказал, что man-страницы - это то, что заставляет меня так сильно любить UNIX.
Ям Маркович
10

Зачем это делать?

Оболочки * nix (и другие оболочки ОС, fwiw) представляют собой очень глубокую и широкую рабочую среду. Кто-то может потратить годы, работая там и используя только очень маленький процент от вместимости снарядов.

Если вы не ожидаете, что человек а) будет работать с программой оболочки или б) будет администрировать систему из оболочки, то почему это имеет значение? Все, что будет сделано, будет на таком базовом уровне, что удобная шпаргалка * nix более чем компенсирует «недостаток навыков».

Джо Интернет
источник
Это проверка честности. Если кто-то добавит опыт работы с Unix в свое резюме (которое нам на самом деле не нужно), я хочу иметь возможность проверить, каковы эти заявленные навыки. Если вы просто можете использовать cd и ls, вы не должны претендовать на опыт Unix imo.
Кристоф Ванфлетерен
Что ж, я тогда спросил бы их, какие Unix-системы они использовали, и попросил бы их перечислить различия между Unix-системами и, вероятно, Linux / Mac
johannes
1
@ Кристоф - Ну, вот сделка ... это не имеет значения, потому что они, вероятно, не будут работать для вас. Это серьезный красный флаг для собеседника, когда потенциальный работодатель начинает тянуть глупые трюки, как это, потому что они не доверяют тому, что на резюме. Ваш «тест» и ваше оправдание для него в основном говорят о том, что вы пытаетесь нанять кого-то, чтобы он работал на дерьмовую компанию. Я могу ошибаться, но я предполагаю, что нет. Однако, если я ошибаюсь, предлагаю переоценить свои «ожидания».
Джо Интернет
1
@Yam - Там так сказано ... если ты нанимаешь, а кто-то посылает тебе резюме, которое, как ты считаешь, надумано, ты просто не интервьюируешь этого человека. То, что вы не делаете, это создаете какой-то глупый тест, который: а) вы признаете, что не имеет отношения к требованиям должности, и б) признаете, что он предназначен только для проверки "честности" чьего-либо заявленного опыта. Если кто-то даже не может пройти собеседование в компании OP, не ставя под сомнение свою «честность», потому что он сказал, что использовал оболочку * nix, что это говорит о компании? Для меня это говорит работа дерьма в компании дерьма. YMMV.
Джо Интернет
1
@Christophe - Если вы нанимаете способных * nix программистов, IMO будет справедливо предположить, что они «знают свой путь в командной строке». Если вы нанимаете способных разработчиков других ОС, IMO было бы справедливо предположить, что их навыки командной строки * nix минимальны. Группу A не нужно тестировать, группа B получает автоматический сбой, поэтому зачем их тестировать? Если ваши критерии найма разработчиков программного обеспечения основаны на том, насколько хорошо они используют командную строку, я думаю, что ваш процесс найма несовершенен. Было бы по-другому, если бы сценарий был основной ответственностью этой должности.
Джо Интернет
3

Вдобавок ко всему, я бы спросил их о двух вещах:

  1. Когда вы ранее использовали командную строку * nix, сталкивались ли вы со случаем, когда хорошо продуманная команда сэкономила вам много времени? Если так, уточните.

  2. Пожалуйста, объясните основные различия между командной строкой * nix и стандартным рабочим столом Windows. Каковы преимущества и недостатки каждого?

Понятно, что первое даст вам представление о том, насколько глубоки знания кандидата о командной строке. Если он годами работал над * nix, он не просто скажет вам, что гордится тем, что запустил grep. Не ожидайте, что они будут помнить точные команды конечно (для этого всегда есть man-страницы), но общее представление о том, что они сделали.

Вместо этого второй вопрос проверяет, понимают ли они, в чем действительно хороша командная строка, и для чего она не подходит. Легко научиться пользоваться молотком, но гораздо труднее переключиться на другой инструмент, если молот не подходит. Таким образом, этот вопрос дает вам хорошее представление о точке зрения заявителя за пределами поля * nix, плюс он достаточно открыт, чтобы он мог (и должен) оценивать его знаниями. (Нет ничего хуже, чем ответить на что-то вроде "э-э ... у окон есть эти окна")

Фрэнк
источник
2

Зависит от того, что вы хотите, чтобы они сделали.

Для получения информации из лог-файлов, ваше предложение для cat + grep имеет смысл. Я бы добавил к этому ls, cd и less / more.

Если вы ожидаете, что они также сделают некоторые незначительные правки (скажем, в конфигурационных файлах), то имеет смысл добавить тестирование для vi и / или emacs и для таких вещей, как cp / mv / rm / mkdir.

комар
источник
1
тестирование команд vi, блин, я бы больше волновался, если бы они знали их все
NimChimpsky
1
хорошо, если парень тянется к Google и начинает вводить в поле поиска такие вещи, как " команды vi Editor ", я бы посчитал, что тестирование прошло на 90% :)
gnat
1

Я бы порекомендовал им знать emacs или vi / m, tar, sed, e / f / grep, различные компиляторы, некоторые сценарии оболочки. Возможно, запустите тест, в котором они должны использовать эти инструменты, чтобы извлечь некоторый код из одного файла, не открывая его, вставить его в другую программу; затем скомпилируйте программу, которая остановится на какой-то тривиальной ошибке. Затем они должны использовать текстовый редактор, чтобы войти и найти ошибку, заставить работать код и заархивировать двоичный файл. Затем отправьте его по почте куда-нибудь, предоставив получателю разрешения на его запуск.

Мировой инженер
источник
1

Я не знаю о вас, но я бы немного расстроился, если бы мой интервьюер спросил меня, а я не знал, как работать в Linux.

Вы не должны заботиться о том, что они знают прямо сейчас , а о том, что они могут узнать, если им предоставится такая возможность. Изучить * nix инструменты не так уж сложно, но это требует немного решимости - вы должны действительно проверить способность, а не знания.

Mehrdad
источник
2
но вы проводите собеседование с кандидатами, чтобы делать работу, а не учиться.
NoChance
1
-1 @ Эммад. Таким образом, вы никогда не учились чему-либо на вашей работе ...?
3
-1 @EmmadKareem вся работа учится в некотором роде.
Николас Смит
Да, обучение ожидается в определенной степени, однако, если роль не будет тривиальной, я ожидаю, что кандидат будет продуктивным примерно через 2 недели приема на работу, в среднем в Канаде это обойдется мне в 3000 долларов! Если навык не редок, это то, что я ожидаю.
NoChance
Похоже, Эммад - это человек, на которого я не хотел бы работать вместе с ОП.
kirk.burleson
1

Это зависит от того, какой уровень опыта вы хотите, чтобы они имели. Если это не для кого-то, кто будет разрабатывать для систем * nix, а также не для системных администраторов * nix, а только для обычных разработчиков, которым иногда требуется некоторая работа в системе * nix, какой опыт им действительно нужен?

Все, что может понадобиться такому разработчику в * nix оболочках (ls, chmod, cat и т. Д.), Может быть написано на одной странице шпаргалки. Если это так, то, требуя знания оболочки * nix там, где это не требуется, можно исключить некоторых хороших кандидатов.


источник
0

Я обычно выбираю простое задание и прошу человека написать скрипт на доске.

«У вас есть каталог« foo »и резервный каталог« foo_backup ». Напишите сценарий оболочки, чтобы увидеть, что изменилось в« foo »после изменения« foo_backup ».

Скотт К Уилсон
источник
0

«Объясните процесс входа в Linux так подробно, как вам удобно» - хороший вопрос. Процесс входа в систему включает переключение пользователей, прав доступа и владельцев, а также множество общих принципов Unix. Если они могут четко объяснить, как и почему есть /etc/passwdи /etc/shadow, и как непривилегированный пользователь может изменить свой собственный пароль, но не другие, это означает, что они «получают» Unix.

Еще один хороший пример - анализ паролей или быстрые проверки безопасности. Если они могут добавить общую пропускную способность, выделенную для конкретного виртуального хоста, из журнала Apache или выяснить, есть ли в системе другие пользователи с uid 0, они пригодятся в командной строке.

И одна вещь, которую НЕ надо делать с ними: не заставляйте их делать это на бумаге / доске. Дайте им живую систему (но не интернет, потому что это почти обманывает), и смотрите, как они идут. Если они разбираются в man-страницах и могут создавать многотрубные выражения на лету, это хороший знак. Если им нужен гугл для всего, то их навыки сомнительны.

Marcin
источник
0

зачем заставлять их писать функциональную программу? что плохого в том, чтобы сказать «скажи мне разницу между grep и sed, или что делает команда X?» и т. д. таким образом, вы можете немного их привести.

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

Timmah
источник
-1

У гуру Unix есть основные команды командной строки, такие как sed, grep и т. Д., И они могут легко использовать их для достижения того, чего они хотят, используя всевозможные кавычки, сложные регулярные выражения и т. Д., Поэтому иногда вы видите сценарий и думаете, что это будет легче понять, написано на китайском;)

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

Они будут знать внутреннюю конфигурацию системы Unix, поэтому, если вы попросите их изменить раскладку клавиатуры (fg добавьте некоторую привязку к правому alt +), они не будут смущены.

Управление установленными пакетами также не будет проблемой. Установка Oracle, запуск 4 серверов приложений, каждый с другой JVM - тоже не проблема. Конфигурация виртуальной сети, расширенная маршрутизация и фильтрация портов, виртуальные машины и т. Д., Управление безопасностью - также идет туда.

Дунайский моряк
источник
2
Вопрос в том, чтобы проверить, обладает ли разработчик общими навыками Unix, а не определять системных администраторов-гуру, которые уделяют особое внимание Oracle и Java.
Питер Тейлор
JVN? Какое отношение еврейская сеть добровольцев имеет к этому?
ocodo