HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Разные операционные системы длительное время обслуживают различные аудитории: Windows - бизнес-профессионалов, Mac - творческих, а Linux - разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.</strong></p>
1 <p><strong>Разные операционные системы длительное время обслуживают различные аудитории: Windows - бизнес-профессионалов, Mac - творческих, а Linux - разработчиков. Разработчикам ОС такой тип рыночного спектра сильно упростил концепцию продукта, технические требования, пользовательский опыт и направление рынка. Однако, он также ужесточил нормы рабочего пространства, что деформировало отдельных пользователей под узкие, непересекающиеся области: у бизнесменов нет возможности заглянуть в творческий процесс, а у разработчиков нет представления о проблемах бизнеса.</strong></p>
2 <p>В реальности знания и опыт - динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что "можно иметь способности только к чему-то одному" - это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас<a>есть способности ко многим видам деятельности</a>.</p>
2 <p>В реальности знания и опыт - динамичны, они охватывают несколько дисциплин и сфер деятельности. Представление о том, что "можно иметь способности только к чему-то одному" - это не руководство к овладению мастерством, а попытка справиться с преждевременной оптимизацией. Узнать о том, в чём вы хорошо разбираетесь можно только когда вы попробовали себя в нескольких разных вопросах. И может оказаться, что у вас<a>есть способности ко многим видам деятельности</a>.</p>
3 <p>Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.</p>
3 <p>Для современных бизнес-аналитиков особенно актуален вопрос ликвидации пробела между бизнесом и разработкой. Бизнес-аналитики должны быть двухплатформенными, способными использовать командную строку, доступную только на Linux (или в macOS), но при этом уметь извлекать широкие возможности из Microsoft Office в Windows. Очевидно, что мир Linux пугает тех, у кого образование в сфере бизнеса. К счастью, как и в большем количестве вопросов, вам необходимо изучить 20% информации, чтобы выполнить 80% работы. Вот мои 20%.</p>
4 <h3>Почему современные бизнес-аналитики должны знать Linux</h3>
4 <h3>Почему современные бизнес-аналитики должны знать Linux</h3>
5 <p>Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.</p>
5 <p>Благодаря своим open source корням, Linux выиграл от вкладов тысяч разработчиков за всё время его существования. Они построили программы и утилиты, чтобы упростить работу не только себе, но и тем программистам, которые последовали за ними. В результате open source разработка создала эффект сетевой выгоды: чем больше разработчики строили утилиты на оригинальной платформе, тем больше других разработчиков могло влиять на эти утилиты, чтобы писать собственные программы.</p>
6 <p>В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров - популярная система контроля версий (VCS), которая называется<em>git</em>. Разработчики<em>могли</em>написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux - экосистема, в которой уже были все необходимые инструменты.</p>
6 <p>В результате получился огромный пакет программ и утилит (то есть софт), который был написан на Linux и под Linux. Большая часть его никогда не портировалась в Windows. Один из примеров - популярная система контроля версий (VCS), которая называется<em>git</em>. Разработчики<em>могли</em>написать софт под Windows, но они этого не сделали. Они написали его для работы в командной строке, для Linux, потому что Linux - экосистема, в которой уже были все необходимые инструменты.</p>
7 <p>Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:</p>
7 <p>Если вдаваться в подробности, разработка на Windows ведёт к двум основным проблемам:</p>
8 <ol><li>Базовые задачи, вроде парсинга файлов, рабочего планирования и поиска текста используются чаще, чем запуск утилиты командной строки.</li>
8 <ol><li>Базовые задачи, вроде парсинга файлов, рабочего планирования и поиска текста используются чаще, чем запуск утилиты командной строки.</li>
9 <li>Языки программирования (Python, C++) и связанные с ними библиотеки выкидывают ошибки, потому что они ожидают конкретных параметров Linux или специфических локаций файловой системы.</li>
9 <li>Языки программирования (Python, C++) и связанные с ними библиотеки выкидывают ошибки, потому что они ожидают конкретных параметров Linux или специфических локаций файловой системы.</li>
10 </ol><p>Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов - экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.</p>
10 </ol><p>Если собрать всё вместе, это выльется в трату времени на переписывание базовых инструментов, которые уже доступны в Linux, они позволят избежать ошибок совместимости с ОС. Тут нет никаких сюрпризов - экосистема Windows просто не была задумана и спроектирована под нужды разработки софта.</p>
11 <p>Теперь давайте рассмотрим базовые идеи Linux.</p>
11 <p>Теперь давайте рассмотрим базовые идеи Linux.</p>
12 <h3>Фундаментальная единица Linux: "оболочка"</h3>
12 <h3>Фундаментальная единица Linux: "оболочка"</h3>
13 <p><strong>Shell</strong>(оболочка, также известная как терминал, консоль или командная строка) - это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется<strong>bash</strong>. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию "навести-кликнуть" по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.</p>
13 <p><strong>Shell</strong>(оболочка, также известная как терминал, консоль или командная строка) - это текстовый интерфейс пользователя, через который команды отправляются машине. На Linux, по-умолчанию, язык оболочки называется<strong>bash</strong>. В отличие от Windows-пользователей, которые в своём большинстве используют навигацию "навести-кликнуть" по окну, Linux-разработчики привязаны к клавиатуре и пишут команды в оболочке. Хоть этот переход далёк от естественного для тех, у кого нет бэкграунда в программировании, плюсы разработки в Linux сильно перевешивают изначальное вложение в обучение.</p>
14 <h3>Изучаем несколько важных концептов</h3>
14 <h3>Изучаем несколько важных концептов</h3>
15 <p>В сравнении с достаточно зрелым языком программирования, bash имеет всего несколько основных концептов, которые необходимо выучить. Как только вы охватите это, остаток bash - простое запоминание. Я переформулирую понятней:<strong>хорошо разбираться в bash значит запомнить 20-30 команд и их часто используемые аргументы.</strong></p>
15 <p>В сравнении с достаточно зрелым языком программирования, bash имеет всего несколько основных концептов, которые необходимо выучить. Как только вы охватите это, остаток bash - простое запоминание. Я переформулирую понятней:<strong>хорошо разбираться в bash значит запомнить 20-30 команд и их часто используемые аргументы.</strong></p>
16 <p>Linux кажется непроницаемым для тех, кто не касается разработки, из-за способа, которым разработчики (не напрягаясь) извергают эзотерические команды терминала, когда им захочется. Правда в том, что они хорошо знают только несколько десятков команд - за всем более сложным они так же (как и все смертные) обращаются в Google.</p>
16 <p>Linux кажется непроницаемым для тех, кто не касается разработки, из-за способа, которым разработчики (не напрягаясь) извергают эзотерические команды терминала, когда им захочется. Правда в том, что они хорошо знают только несколько десятков команд - за всем более сложным они так же (как и все смертные) обращаются в Google.</p>
17 <p>Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.</p>
17 <p>Опуская мелкие загвоздки, стоящие на пути, вот главные концепты в bash.</p>
18 <h4>Командный синтаксис</h4>
18 <h4>Командный синтаксис</h4>
19 <p>Команды соответствуют синтаксису: {command} {arguments..}</p>
19 <p>Команды соответствуют синтаксису: {command} {arguments..}</p>
20 <p>Например, в 'grep -inr',<em>grep</em>- это команда (для поиска текстовой строки) и -inr это флаги/аргументы, которые меняют то, что grep выполняет по умолчанию. Единственный способ понять, что это значит, поискать что-то о них через Google или просто ввести 'man grep'. Я рекомендую выучить команды и их самые используемые аргументы: слишком обременительно помнить, что делает каждый флаг.</p>
20 <p>Например, в 'grep -inr',<em>grep</em>- это команда (для поиска текстовой строки) и -inr это флаги/аргументы, которые меняют то, что grep выполняет по умолчанию. Единственный способ понять, что это значит, поискать что-то о них через Google или просто ввести 'man grep'. Я рекомендую выучить команды и их самые используемые аргументы: слишком обременительно помнить, что делает каждый флаг.</p>
21 <h4>Псевдонимы директорий</h4>
21 <h4>Псевдонимы директорий</h4>
22 <ul><li>Текущая директория (где я?): .</li>
22 <ul><li>Текущая директория (где я?): .</li>
23 <li>Родительская директория текущей директории: ..</li>
23 <li>Родительская директория текущей директории: ..</li>
24 <li>Домашняя директория пользователя: ~</li>
24 <li>Домашняя директория пользователя: ~</li>
25 <li>Корень файловой системы (или родитель всех родителей): /</li>
25 <li>Корень файловой системы (или родитель всех родителей): /</li>
26 </ul><p>Например, чтобы поменять текущую директорию на родительскую директорию нужно ввести: cd ..</p>
26 </ul><p>Например, чтобы поменять текущую директорию на родительскую директорию нужно ввести: cd ..</p>
27 <p>Таким же способом, чтобы скопировать файл, расположенный в "/path/to/file.txt" в текущую директорию, нужно ввести cp /path/to/file.txt . (заметьте, что в конце команды точка). Поскольку это всего лишь псевдонимы, вместо них может использоваться реальное имя пути.</p>
27 <p>Таким же способом, чтобы скопировать файл, расположенный в "/path/to/file.txt" в текущую директорию, нужно ввести cp /path/to/file.txt . (заметьте, что в конце команды точка). Поскольку это всего лишь псевдонимы, вместо них может использоваться реальное имя пути.</p>
28 <blockquote><h4>Полезная информация</h4>
28 <blockquote><h4>Полезная информация</h4>
29 <p>У нас есть<a>курс по операционным системам</a>. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти<a>по ссылке</a>.</p>
29 <p>У нас есть<a>курс по операционным системам</a>. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти<a>по ссылке</a>.</p>
30 </blockquote><h4>STDIN / STDOUT</h4>
30 </blockquote><h4>STDIN / STDOUT</h4>
31 <p>Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется<strong>стандартным вводом</strong>(STDIN).</p>
31 <p>Всё, что вы пишите в окне и подтверждаете (с помощью ENTER), называется<strong>стандартным вводом</strong>(STDIN).</p>
32 <p>Всё, что программа выводит в ответе в терминал (например текст из файла), называется<strong>стандартным выводом</strong>(STDOUT)</p>
32 <p>Всё, что программа выводит в ответе в терминал (например текст из файла), называется<strong>стандартным выводом</strong>(STDOUT)</p>
33 <h4>Конвейер (piping)</h4>
33 <h4>Конвейер (piping)</h4>
34 <ol><li><p>| </p>
34 <ol><li><p>| </p>
35 <p>Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.</p>
35 <p>Pipe принимает STDOUT от команды слева от pipe и превращает его в STDIN для команды справа от pipe.</p>
36 <p><strong>пример</strong>: echo 'test text' | wc -l</p>
36 <p><strong>пример</strong>: echo 'test text' | wc -l</p>
37 </li>
37 </li>
38 <li><p>&gt;</p>
38 <li><p>&gt;</p>
39 <p>Символ "больше" принимает STDOUT от команды слева и<strong>записывает/перезаписывает</strong>в новый<strong>файл</strong>справа</p>
39 <p>Символ "больше" принимает STDOUT от команды слева и<strong>записывает/перезаписывает</strong>в новый<strong>файл</strong>справа</p>
40 <p><strong>пример</strong>: ls &gt; tmp.txt</p>
40 <p><strong>пример</strong>: ls &gt; tmp.txt</p>
41 </li>
41 </li>
42 <li><p>&gt;&gt;</p>
42 <li><p>&gt;&gt;</p>
43 <p>Два символа "больше" принимают STDOUT от команды слева и<strong>добавляют</strong>к новому или существующему<strong>файлу</strong>справа.</p>
43 <p>Два символа "больше" принимают STDOUT от команды слева и<strong>добавляют</strong>к новому или существующему<strong>файлу</strong>справа.</p>
44 <p><strong>пример</strong>: date &gt;&gt; tmp.txt</p>
44 <p><strong>пример</strong>: date &gt;&gt; tmp.txt</p>
45 </li>
45 </li>
46 </ol><h4>Шаблоны поиска (wildcards)</h4>
46 </ol><h4>Шаблоны поиска (wildcards)</h4>
47 <p>Можете представить это как символ % в SQL. Например, можно написать WHERE first_name LIKE 'John%', чтобы найти любые позиции, где данные начинаются с имени John.</p>
47 <p>Можете представить это как символ % в SQL. Например, можно написать WHERE first_name LIKE 'John%', чтобы найти любые позиции, где данные начинаются с имени John.</p>
48 <p>В bash можно написать John*. Если вы хотите вывести список всех файлов в какой-то папке, заканчивающихся на ".json", пишете : ls *.json</p>
48 <p>В bash можно написать John*. Если вы хотите вывести список всех файлов в какой-то папке, заканчивающихся на ".json", пишете : ls *.json</p>
49 <h4>Завершение с помощью tab</h4>
49 <h4>Завершение с помощью tab</h4>
50 <p>Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.</p>
50 <p>Bash часто завершает команды сам, по определённой логике, если вы начинаете вводить команду и нажимаете TAB.</p>
51 <p>Однако, стоит попробовать что-то вроде<strong>zsh</strong> или <strong>fish</strong>для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.</p>
51 <p>Однако, стоит попробовать что-то вроде<strong>zsh</strong> или <strong>fish</strong>для автозаполнения, потому что запоминать команды и все их параметры очень сложно. Более того, эти инструменты применят автозаполнение, основываясь на вашей истории используемых команд.</p>
52 <blockquote><h3>Также полезно:</h3>
52 <blockquote><h3>Также полезно:</h3>
53 <p>Зачем нужна<a>команда pwd</a>и что такое текущая рабочая директория</p>
53 <p>Зачем нужна<a>команда pwd</a>и что такое текущая рабочая директория</p>
54 </blockquote><h4>Выход</h4>
54 </blockquote><h4>Выход</h4>
55 <p>Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень<em>часто</em>повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего<strong>q</strong>. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.</p>
55 <p>Иногда вы застреваете в какой-нибудь программе и не можете оттуда выйти. Это очень<em>часто</em>повторяющееся событие для новичков в Linux, которое невероятно демотивирует. Часто выход происходит с помощью чего-то, содержащего<strong>q</strong>. Хорошо бы запомнить то, что будет написано ниже и использовать, когда вы в ловушке.</p>
56 <ul><li>Bash<ul><li>CTRL+c</li>
56 <ul><li>Bash<ul><li>CTRL+c</li>
57 <li>q</li>
57 <li>q</li>
58 <li>exit</li>
58 <li>exit</li>
59 </ul></li>
59 </ul></li>
60 <li>Python: quit()</li>
60 <li>Python: quit()</li>
61 <li>Nano: CTRL+x</li>
61 <li>Nano: CTRL+x</li>
62 <li>Vim: Esc !</li>
62 <li>Vim: Esc !</li>
63 </ul><h4>Что я помню из команд bash</h4>
63 </ul><h4>Что я помню из команд bash</h4>
64 <p>Это те команды, которые я использую чаще всего в Linux (начиная от самых часто используемых к самым редко используемым). Как я уже писал раньше, знание всего горстки команд поможет выполнять большой набор необходимых программируемых задач.</p>
64 <p>Это те команды, которые я использую чаще всего в Linux (начиная от самых часто используемых к самым редко используемым). Как я уже писал раньше, знание всего горстки команд поможет выполнять большой набор необходимых программируемых задач.</p>
65 <ul><li><p>cd {directory} изменить директорию</p>
65 <ul><li><p>cd {directory} изменить директорию</p>
66 </li>
66 </li>
67 <li><p>ls -lha вывести директорию в виде списка (подробного)</p>
67 <li><p>ls -lha вывести директорию в виде списка (подробного)</p>
68 </li>
68 </li>
69 <li><p>vim или nano редактор командной строки</p>
69 <li><p>vim или nano редактор командной строки</p>
70 </li>
70 </li>
71 <li><p>touch {file} создать новый пустой файл</p>
71 <li><p>touch {file} создать новый пустой файл</p>
72 </li>
72 </li>
73 <li><p>cp -R {original_name} {new_name} скопировать файл или директорию (и всё их содержимое)</p>
73 <li><p>cp -R {original_name} {new_name} скопировать файл или директорию (и всё их содержимое)</p>
74 </li>
74 </li>
75 <li><p>mv {original_name} {new_name} переместить или переименовать файл</p>
75 <li><p>mv {original_name} {new_name} переместить или переименовать файл</p>
76 </li>
76 </li>
77 <li><p>rm {file} удалить файл</p>
77 <li><p>rm {file} удалить файл</p>
78 </li>
78 </li>
79 <li><p>rm -rf {file/folder} удалить файл или папку без возможности восстановления [использовать аккуратно!]</p>
79 <li><p>rm -rf {file/folder} удалить файл или папку без возможности восстановления [использовать аккуратно!]</p>
80 </li>
80 </li>
81 <li><p>pwd вывести текущую рабочую директорию</p>
81 <li><p>pwd вывести текущую рабочую директорию</p>
82 </li>
82 </li>
83 <li><p>cat <em>или</em> less <em>или</em> tail <em>или</em> head -n10 {file} вывести в STDOUT содержимое файла</p>
83 <li><p>cat <em>или</em> less <em>или</em> tail <em>или</em> head -n10 {file} вывести в STDOUT содержимое файла</p>
84 </li>
84 </li>
85 <li><p>mkdir {directory} создать пустую директорию</p>
85 <li><p>mkdir {directory} создать пустую директорию</p>
86 </li>
86 </li>
87 <li><p>grep -inr {string} найти строку в любом файле этой директории или дочерних директориях</p>
87 <li><p>grep -inr {string} найти строку в любом файле этой директории или дочерних директориях</p>
88 </li>
88 </li>
89 <li><p>column -s, -t &lt;delimited_file&gt; отобразить разделенный запятыми файл в виде столбцов</p>
89 <li><p>column -s, -t &lt;delimited_file&gt; отобразить разделенный запятыми файл в виде столбцов</p>
90 </li>
90 </li>
91 <li><p>ssh {username}@{hostname} соединиться с удалённой машиной</p>
91 <li><p>ssh {username}@{hostname} соединиться с удалённой машиной</p>
92 </li>
92 </li>
93 <li><p>tree -LhaC 3 показать структуру директории на 3 уровнями вглубь (с размерами файлов и включая скрытые директории)</p>
93 <li><p>tree -LhaC 3 показать структуру директории на 3 уровнями вглубь (с размерами файлов и включая скрытые директории)</p>
94 </li>
94 </li>
95 <li><p>htop (или top) диспетчер задач</p>
95 <li><p>htop (или top) диспетчер задач</p>
96 </li>
96 </li>
97 <li><p>pip install --user {pip_package} пакетный менеджер Python для установки пакетов в ~/.local/bin</p>
97 <li><p>pip install --user {pip_package} пакетный менеджер Python для установки пакетов в ~/.local/bin</p>
98 </li>
98 </li>
99 <li><p>pushd . ; popd ; dirs; cd - push/pop/view директорию в стек + изменить обратно на последнюю директорию</p>
99 <li><p>pushd . ; popd ; dirs; cd - push/pop/view директорию в стек + изменить обратно на последнюю директорию</p>
100 </li>
100 </li>
101 <li><p>sed -i "s/{find}/{replace}/g" {file} заменить строку в файле</p>
101 <li><p>sed -i "s/{find}/{replace}/g" {file} заменить строку в файле</p>
102 </li>
102 </li>
103 <li><p>find . -type f -name '*.txt' -exec sed -i "s/{find}/{replace}/g" {} \; заменить строку для каждого файла в этой и дочерней папках с именем типа *.txt</p>
103 <li><p>find . -type f -name '*.txt' -exec sed -i "s/{find}/{replace}/g" {} \; заменить строку для каждого файла в этой и дочерней папках с именем типа *.txt</p>
104 </li>
104 </li>
105 <li><p>tmux new -s session, tmux attach -t session создать новую сессию терминала без создания нового окна [продвинутый уровень]</p>
105 <li><p>tmux new -s session, tmux attach -t session создать новую сессию терминала без создания нового окна [продвинутый уровень]</p>
106 </li>
106 </li>
107 <li><p>wget {link} загрузить веб-страницу или веб-ресурс</p>
107 <li><p>wget {link} загрузить веб-страницу или веб-ресурс</p>
108 </li>
108 </li>
109 <li><p>curl -X POST -d "{key: value}" http://www.google.com отправить HTTP-запрос на веб-сервер</p>
109 <li><p>curl -X POST -d "{key: value}" http://www.google.com отправить HTTP-запрос на веб-сервер</p>
110 </li>
110 </li>
111 <li><p>find &lt;directory&gt; вывести список всего содержимого директории и её дочерних директорий рекурсивно</p>
111 <li><p>find &lt;directory&gt; вывести список всего содержимого директории и её дочерних директорий рекурсивно</p>
112 </li>
112 </li>
113 </ul><blockquote><h4>Читайте также</h4>
113 </ul><blockquote><h4>Читайте также</h4>
114 <p><a>Как упростить разработку с помощью виртуализации</a>.</p>
114 <p><a>Как упростить разработку с помощью виртуализации</a>.</p>
115 </blockquote><h3>Продвинутые и не часто используемые команды</h3>
115 </blockquote><h3>Продвинутые и не часто используемые команды</h3>
116 <p>Я считаю хорошей практикой хранить список команд, которые полезны в определённых ситуациях, даже если подобные ситуации случаются редко (например, какой процесс блокирует конкретный сетевой порт). Вот несколько нестандартных команд, которые у меня всегда под рукой:</p>
116 <p>Я считаю хорошей практикой хранить список команд, которые полезны в определённых ситуациях, даже если подобные ситуации случаются редко (например, какой процесс блокирует конкретный сетевой порт). Вот несколько нестандартных команд, которые у меня всегда под рукой:</p>
117 <ul><li>lsof -i :8080 вывести список дескрипторов открытых файлов (-i - флаг для сетевых интерфейсов)</li>
117 <ul><li>lsof -i :8080 вывести список дескрипторов открытых файлов (-i - флаг для сетевых интерфейсов)</li>
118 <li>netstat | head -n20 вывести список открытых интернет/UNIX сокетов и связанной с ними информации</li>
118 <li>netstat | head -n20 вывести список открытых интернет/UNIX сокетов и связанной с ними информации</li>
119 <li>dstat -a транслировать текущий диск, сеть, активность CPU и другое</li>
119 <li>dstat -a транслировать текущий диск, сеть, активность CPU и другое</li>
120 <li>nslookup &lt;IP address&gt; найти hostname для удалённого IP-адреса</li>
120 <li>nslookup &lt;IP address&gt; найти hostname для удалённого IP-адреса</li>
121 <li>strace -f -e &lt;syscall&gt; &lt;cmd&gt; отследить системные вызовы программы (-e - флаг для фильтрования конкретных системных вызовов)</li>
121 <li>strace -f -e &lt;syscall&gt; &lt;cmd&gt; отследить системные вызовы программы (-e - флаг для фильтрования конкретных системных вызовов)</li>
122 <li>ps aux | head -n20 вывести текущие активные процессы</li>
122 <li>ps aux | head -n20 вывести текущие активные процессы</li>
123 <li>file &lt;file&gt; проверить тип файла (например исполняемый, бинарный, текстовый файл с кодировкой ASCII)</li>
123 <li>file &lt;file&gt; проверить тип файла (например исполняемый, бинарный, текстовый файл с кодировкой ASCII)</li>
124 <li>uname -a информация о ядре ОС</li>
124 <li>uname -a информация о ядре ОС</li>
125 <li>lsb_release -a информация об ОС</li>
125 <li>lsb_release -a информация об ОС</li>
126 <li>hostname проверить hostname текущего компьютера (например, название, чтобы другие компьютеры могли иметь доступ к вашему)</li>
126 <li>hostname проверить hostname текущего компьютера (например, название, чтобы другие компьютеры могли иметь доступ к вашему)</li>
127 <li>pstree визуализировать форки процессов</li>
127 <li>pstree визуализировать форки процессов</li>
128 <li>time &lt;cmd&gt; исполнить команду и составить статистику о том, сколько времени потребовалось на исполнение</li>
128 <li>time &lt;cmd&gt; исполнить команду и составить статистику о том, сколько времени потребовалось на исполнение</li>
129 <li>CTRL + z ; bg; jobs; fg отправить процесс в текущий tty в background и обратно на передний план</li>
129 <li>CTRL + z ; bg; jobs; fg отправить процесс в текущий tty в background и обратно на передний план</li>
130 <li>cat file.txt | xargs -n1 | sort | uniq -c посчитать количество уникальных слов в файле</li>
130 <li>cat file.txt | xargs -n1 | sort | uniq -c посчитать количество уникальных слов в файле</li>
131 <li>wc -l &lt;file&gt; количество строк в файле</li>
131 <li>wc -l &lt;file&gt; количество строк в файле</li>
132 <li>du -ha показать размер на диске для директорий и их содержимого</li>
132 <li>du -ha показать размер на диске для директорий и их содержимого</li>
133 <li>zcat &lt;file.gz&gt; вывести содержимое заархивированного текстового файла</li>
133 <li>zcat &lt;file.gz&gt; вывести содержимое заархивированного текстового файла</li>
134 <li>scp &lt;user@remote_host&gt; &lt;local_path&gt; скопировать файл с удалённого на локальный сервер или наоборот</li>
134 <li>scp &lt;user@remote_host&gt; &lt;local_path&gt; скопировать файл с удалённого на локальный сервер или наоборот</li>
135 <li>man {command} показать инструкцию, (т.е. документацию) для команды (но скорее всего легче использовать Google)</li>
135 <li>man {command} показать инструкцию, (т.е. документацию) для команды (но скорее всего легче использовать Google)</li>
136 </ul><p><em>Это перевод статьи Алекса Петралиа<a>Learn just enough Linux to get things done</a>.</em> </p>
136 </ul><p><em>Это перевод статьи Алекса Петралиа<a>Learn just enough Linux to get things done</a>.</em> </p>