Faq — различия между версиями

Материал из VAAL-WIKI
Перейти к: навигация, поиск
м
 
(не показано 8 промежуточных версии этого же участника)
Строка 1: Строка 1:
 
Отличие обычного пользователя Linux от профессионала заключается во времени, проведённом за изучением хитростей и приёмов, которые позволяют решать не быстрые задачи в одно мгновение. Если вы хотите увеличить скорость работы без долгого набивания шишек в консоли, здесь приводится список лёгких для изучения приёмов. Они помогут сделать вашу работу эффективной и менее трудозатратной.
 
Отличие обычного пользователя Linux от профессионала заключается во времени, проведённом за изучением хитростей и приёмов, которые позволяют решать не быстрые задачи в одно мгновение. Если вы хотите увеличить скорость работы без долгого набивания шишек в консоли, здесь приводится список лёгких для изучения приёмов. Они помогут сделать вашу работу эффективной и менее трудозатратной.
<p style="text-align:center"><span style="color:red"> '''1) Список не ваших процессов'''</span></p>
+
=== <p style="text-align:center"><span style="color:red">'''Список не ваших процессов'''</span></p> ===
 
<p style="text-align:left">Для получения списка всех процессов, запущенных <span style="color:red">''не текущим пользователем''</span>, выполните команду:
 
<p style="text-align:left">Для получения списка всех процессов, запущенных <span style="color:red">''не текущим пользователем''</span>, выполните команду:
 
</p>
 
</p>
<p style="text-align:left"><span style="color:green">'''$ps aux | grep -v `whoami`'''</span></p>
+
<source lang="bash">
 +
$ps aux | grep -v `whoami`
 +
</source>
 
<p style="text-align:left">Для получения списка из 10 процессов, которые сильнее всего загружают систему, выполните команду:</p>
 
<p style="text-align:left">Для получения списка из 10 процессов, которые сильнее всего загружают систему, выполните команду:</p>
<p style="text-align:left"><span style="color:green">'''$ps aux --sort=-%cpu | grep -m 11 -v `whoami`'''</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''2) Замена текста в файлах'''</span></p>
+
$ps aux --sort=-%cpu | grep -m 11 -v `whoami`
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Замена текста в файлах'''</span></p> ===
 
<p style="text-align:left">Если надо заменить текст не в одном файле, то имеется несколько способов. Для того, чтобы заменить текст '''''«Windows»''''' на '''''«Linux»''''' во всех файлах в текущей директории, название которой начинается с «test», введите в консоли('''''необходим интерпретатор perl'''''):</p>
 
<p style="text-align:left">Если надо заменить текст не в одном файле, то имеется несколько способов. Для того, чтобы заменить текст '''''«Windows»''''' на '''''«Linux»''''' во всех файлах в текущей директории, название которой начинается с «test», введите в консоли('''''необходим интерпретатор perl'''''):</p>
<p style="text-align:left"><span style="color:green">'''$perl -i -pe 's/Windows/Linux/;' test*'''</span></p>
+
<source lang="bash">
 +
$perl -i -pe 's/Windows/Linux/;' test*
 +
</source>
 
<p style="text-align:left">Чтобы провести ту же операцию во всех поддиректориях:</p>
 
<p style="text-align:left">Чтобы провести ту же операцию во всех поддиректориях:</p>
<p style="text-align:left"><span style="color:green">'''$find. -name '*.txt' -print | xargs perl -pi -e's/Windows/Linux/ig' *.txt'''</span></p>
+
<source lang="bash">
<p style="text-align:left">Есливы хотите сделать то же самое для на обычных файлов со множеством переносов строк и странных символов (файл — в другой кодировке):</p>
+
$find. -name '*.txt' -print | xargs perl -pi -e's/Windows/Linux/ig' *.txt
<p style="text-align:left"><span style="color:green">'''$find -type f -name '*.txt' -print0 | xargs --null perl -pi -e 's/Windows/Linux/'''</span></p>
+
</source>
<p style="text-align:center"><span style="color:red"> '''3) Исправить консоль'''</span></p>
+
<p style="text-align:left">Если Вы хотите сделать то же самое для на обычных файлов со множеством переносов строк и странных символов (файл — в другой кодировке):</p>
 +
<source lang="bash">
 +
$find -type f -name '*.txt' -print0 | xargs --null perl -pi -e 's/Windows/Linux/
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Исправить консоль'''</span></p> ===
 
<p style="text-align:left">Если использовать команду [[less]] или [[cat]] для просмотра файла, в конце которого — бинарные данные, то можно легко испортить консоль. Потому что в бинарных данных могут попасться любые сочетания управляющих кодов: компьютер будет издавать звуки «бип-бип», появятся прикольные символы, странные цветовые сочетания. В конце концов, шрифт изменится на какие-то иероглифы. Bash, очевидно, продолжает работать, но вы ничего не можете прочитать и сделать. Просто наберите в консоли команду инициализации:</p>
 
<p style="text-align:left">Если использовать команду [[less]] или [[cat]] для просмотра файла, в конце которого — бинарные данные, то можно легко испортить консоль. Потому что в бинарных данных могут попасться любые сочетания управляющих кодов: компьютер будет издавать звуки «бип-бип», появятся прикольные символы, странные цветовые сочетания. В конце концов, шрифт изменится на какие-то иероглифы. Bash, очевидно, продолжает работать, но вы ничего не можете прочитать и сделать. Просто наберите в консоли команду инициализации:</p>
<p style="text-align:left"><span style="color:green">'''$reset'''</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''4) Запуск множественных X-сессий'''</span></p>
+
$reset
<p style="text-align:left">Если надо дать кому-нибудь доступ к Вашему компьютеру, то вы откроете для себя, что это не всегда необходимо. Если предположить, что компьютер стартует в графическом режиме (runlevel 5), то, одновременно нажав Ctrl+Alt+<F7>, вы попадете в консоль. Введите логин и пароль, потом исполните следующий код:</p>
+
</source>
<p style="text-align:left"><span style="color:green">'''$startx -- :1'''</span></p>
+
 
<p style="text-align:left">чтобы воити в графическое окружение. Чтобы вернуться в предыдущую сессию, нажмите Ctrl+Alt+<F7>, для еще одного возврата — Ctrl+Alt+<F8>. Вы можете этот трюк: клавиши с F1 по F6 отвечают за 6 сессий консоли, а клавиши с F7 по F12 — за 6 Х-сессий. Подводный камень: в разных дистрибутивах могут использоваться разные сочетания клавиш.</p>
+
=== <p style="text-align:center"><span style="color:red">'''Запуск множественных X-сессий'''</span></p> ===
<p style="text-align:center"><span style="color:red"> '''5) Лёгкое резервное копирование'''</span></p>
+
<p style="text-align:left">Если надо дать кому-нибудь доступ к Вашему компьютеру, то вы откроете для себя, что это не всегда необходимо. Если предположить, что компьютер стартует в графическом режиме (''runlevel 5''), то, одновременно нажав '''Ctrl+Alt+<F7>''', вы попадете в консоль. Введите логин и пароль, потом исполните следующий код:</p>
 +
<source lang="bash">
 +
$startx -- :1
 +
</source>
 +
<p style="text-align:left">чтобы войти в графическое окружение. Чтобы вернуться в предыдущую сессию, нажмите '''Ctrl+Alt+<F7>''', для ещё одного возврата — '''Ctrl+Alt+<F8>'''. Вы можете этот трюк: клавиши с '''F1''' по '''F6''' отвечают за <u>6 сессий консоли</u>, а клавиши с '''F7''' по '''F12''' — за <u>6 Х-сессий</u>. Подводный камень: в разных дистрибутивах могут использоваться разные сочетания клавиш.</p>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Лёгкое резервное копирование'''</span></p> ===
 
<p style="text-align:left">Если надо сделать резервную копию папки и скопировать только изменившиеся файлы, то можно использовать для этого rsync (вам нужен аккаунт на удалённом компьютере):</p>
 
<p style="text-align:left">Если надо сделать резервную копию папки и скопировать только изменившиеся файлы, то можно использовать для этого rsync (вам нужен аккаунт на удалённом компьютере):</p>
<p style="text-align:left"><span style="color:green">'''$rsync -vare ssh jono@192.168.0.2:/home/jono/importantfiles/* /home/jono/backup/'''</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''6) Поиск самых больших файлов в текущей директории'''</span></p>
+
$rsync -vare ssh jono@192.168.0.2:/home/jono/importantfiles/* /home/jono/backup/
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Поиск самых больших файлов в текущей директории'''</span></p> ===
 
<p style="text-align:left">Можно столкнуться с проблемой, когда надо удалить несколько больших файлов. Их можно найти в текущей директории с помощью команды:</p>
 
<p style="text-align:left">Можно столкнуться с проблемой, когда надо удалить несколько больших файлов. Их можно найти в текущей директории с помощью команды:</p>
<p style="text-align:left"><span style="color:green">'''$ls -lSrh'''</span></p>
+
<source lang="bash">
 +
$ls -lSrh
 +
</source>
 
<p style="text-align:left">Ключ “r” означает, что большие файлы должны выводиться в конце. Следующей командой можно найти самые большие файлы MP3/MPEG:</p>
 
<p style="text-align:left">Ключ “r” означает, что большие файлы должны выводиться в конце. Следующей командой можно найти самые большие файлы MP3/MPEG:</p>
<p style="text-align:left"><span style="color:green">'''$ls -lSrh *.mp*'''</span></p>
+
<source lang="bash">
 +
$ls -lSrh *.mp*
 +
</source>
 
<p style="text-align:left">Также можно найти самые большие директории:</p>
 
<p style="text-align:left">Также можно найти самые большие директории:</p>
<p style="text-align:left"><span style="color:green">'''$du -kx | egrep -v "\./.+/" | sort -n'''</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''7) Оптимизация баз данных MySQL'''</span></p>
+
$du -kx | egrep -v "\./.+/" | sort -n
<p style="text-align:left">При любом изменении структуры базы данных или удалении больших объёмов данных, файлы могут стать фрагментированными, что приводит к потере производительности. Просто запомните простое правило: запускать оптимизатор базы при любом изменении базы:</p>
+
</source>
<p style="text-align:left"><span style="color:green">'''#mysqloptimize -A -u''<username>'' -p''<password>'' '''</span></p>
+
 
<p style="text-align:left"><span style="color:green">'''#mysqlcheck --optimize -A -u''<username>'' -p''<password>'' '''</span></p>
+
=== <p style="text-align:center"><span style="color:red">'''Оптимизация баз данных MySQL'''</span></p> ===
<p style="text-align:center"><span style="color:red"> '''8) Список откртых портов'''</span></p>
+
<p style="text-align:left">При любом изменении структуры базы данных или удалении больших объёмов данных, файлы могут стать фрагментированными, что приводит к потере производительности. Просто запомните простое правило запускать оптимизатор базы при любом изменении базы:</p>
 +
<source lang="bash">
 +
#mysqloptimize -A -u<username> -p<password>
 +
 
 +
#mysqlcheck --optimize -A -u<username> -p<password>
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Список открытых портов'''</span></p> ===
 
<p style="text-align:left">Получить список открытых портов в состоянии ''Listen'' в Linux очень просто, для этого достаточно выполнить:</p>
 
<p style="text-align:left">Получить список открытых портов в состоянии ''Listen'' в Linux очень просто, для этого достаточно выполнить:</p>
<p style="text-align:left"><span style="color:green">'''#netstat -lnp'''</span></p>
+
<source lang="bash">
 +
#netstat -lnp
 
  Active Internet connections (only servers)
 
  Active Internet connections (only servers)
 
  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name  
 
  Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name  
Строка 51: Строка 84:
 
  0 0 0.0.0.0:67 0.0.0.0:* 222/dhcpd raw  
 
  0 0 0.0.0.0:67 0.0.0.0:* 222/dhcpd raw  
 
  0 0 0.0.0.0:1 0.0.0.0:* 7 222/dhcpd
 
  0 0 0.0.0.0:1 0.0.0.0:* 7 222/dhcpd
 +
</source>
 
<p style="text-align:left">В этом примере видно, что процесс с PID'ом 698 — процесс интерпретатора Perl, который слушает порт 5280. Если вы не root в системе, то система не покажет пути к программам.</p>
 
<p style="text-align:left">В этом примере видно, что процесс с PID'ом 698 — процесс интерпретатора Perl, который слушает порт 5280. Если вы не root в системе, то система не покажет пути к программам.</p>
<p style="text-align:center"><span style="color:red"> '''9) Поиск занятых устройств'''</span></p>
+
 
 +
=== <p style="text-align:center"><span style="color:red">'''Поиск занятых устройств'''</span></p> ===
 
<p style="text-align:left">Вы наверняка сталкивались с ситуацией, когда надо отмаунтить диск, но система при попытке отключения сообщает о том, что он занят. Одной командой можно узнать, какое приложение использует его:</p>
 
<p style="text-align:left">Вы наверняка сталкивались с ситуацией, когда надо отмаунтить диск, но система при попытке отключения сообщает о том, что он занят. Одной командой можно узнать, какое приложение использует его:</p>
<p style="text-align:left"><span style="color:green">'''#lsof +D /mnt/windows'''</span></p>
+
<source lang="bash">
 +
#lsof +D /mnt/windows
 +
</source>
 
<p style="text-align:left">Она показывает PID и команду запуска любого процесса, использующего /mnt/windows.</p>
 
<p style="text-align:left">Она показывает PID и команду запуска любого процесса, использующего /mnt/windows.</p>
<p style="text-align:center"><span style="color:red"> '''10) Поиск изменённых сегодня файлов'''</span></p>
+
 
 +
=== <p style="text-align:center"><span style="color:red"> '''Поиск изменённых сегодня файлов'''</span></p> ===
 
<p style="text-align:left">Например, утром вы создали файл, который именно сейчас очень нужен. Однако, вы не можете вспомнить его название. Вручную перебирать домашнюю директорию бессмысленно, где скопилась не одна тысяча файлов. Но есть небольшой приём, показывающий эффективность пайпов и объединения нескольких команд консоли:</p>
 
<p style="text-align:left">Например, утром вы создали файл, который именно сейчас очень нужен. Однако, вы не можете вспомнить его название. Вручную перебирать домашнюю директорию бессмысленно, где скопилась не одна тысяча файлов. Но есть небольшой приём, показывающий эффективность пайпов и объединения нескольких команд консоли:</p>
<p style="text-align:left"><span style="color:green">'''#ls -al --time-style=+%D | grep `date +%D`'''</span></p>
+
<source lang="bash">
 +
#ls -al --time-style=+%D | grep `date +%D`
 +
</source>
 
<p style="text-align:left">Параметры команды [[Ls_—_Команда_печати_содержимого_каталога|ls]] требуют вывода даты в определенном формате. Хитрость в том: то, что выдаст [[Ls_—_Команда_печати_содержимого_каталога|ls]], идет на вход [[grep]]. Параметр grep сами по себе команда (заключена в обратные апострофы), которая подставляет текущую дату в шаблон для отсева. Её легко модифицировать для поиска по другим датам, размеру файла и т.д.</p>
 
<p style="text-align:left">Параметры команды [[Ls_—_Команда_печати_содержимого_каталога|ls]] требуют вывода даты в определенном формате. Хитрость в том: то, что выдаст [[Ls_—_Команда_печати_содержимого_каталога|ls]], идет на вход [[grep]]. Параметр grep сами по себе команда (заключена в обратные апострофы), которая подставляет текущую дату в шаблон для отсева. Её легко модифицировать для поиска по другим датам, размеру файла и т.д.</p>
<p style="text-align:center"><span style="color:red"> '''11) Поиск больших файлов в Linux'''</span></p>
+
 
 +
=== <p style="text-align:center"><span style="color:red">'''Поиск больших файлов в Linux'''</span></p> ===
 
<p style="text-align:left">Поиск больших файлов особенно актуален когда на диске заканчивается место и приходится искать кандидатов на удаление. Самый лучший способ чтобы найти все самые большие файлы на хосте с Linux - воспользоваться командной строкой. В принципе не существует простой команды для поиска самых больших файлов в Linux. Однако, можно с лёгкостью получить список самых больших файлов, используя комбинацию нескольких простых команд.Выполните следующую комбинацию команд для поиска десяти самых больших файлов в Linux, начиная с директории <DIR> (измените <DIR> на директорию в которой Вы хотите запустить поиск):</p>
 
<p style="text-align:left">Поиск больших файлов особенно актуален когда на диске заканчивается место и приходится искать кандидатов на удаление. Самый лучший способ чтобы найти все самые большие файлы на хосте с Linux - воспользоваться командной строкой. В принципе не существует простой команды для поиска самых больших файлов в Linux. Однако, можно с лёгкостью получить список самых больших файлов, используя комбинацию нескольких простых команд.Выполните следующую комбинацию команд для поиска десяти самых больших файлов в Linux, начиная с директории <DIR> (измените <DIR> на директорию в которой Вы хотите запустить поиск):</p>
<p style="text-align:left"><span style="color:green">'''#find <DIR> -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}' '''</span></p>
+
<source lang="bash">
 +
#find <DIR> -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'
 +
</source>
 +
<source lang="bash">
 
  106 MB /var/lib/mysql/ibdata1  
 
  106 MB /var/lib/mysql/ibdata1  
 
  94 MB /usr/lib/locale/locale-archive  
 
  94 MB /usr/lib/locale/locale-archive  
Строка 73: Строка 117:
 
  33 MB /var/log/messages-20130303  
 
  33 MB /var/log/messages-20130303  
 
  32 MB /var/lib/rpm/Packages
 
  32 MB /var/lib/rpm/Packages
 +
</source>
 
<p style="text-align:left">Найти 10 самых больших фалов, начиная с '/home'</p>
 
<p style="text-align:left">Найти 10 самых больших фалов, начиная с '/home'</p>
<p style="text-align:left"><span style="color:green">'''#find /home -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}' '''</span></p>
+
<source lang="bash">
 +
#find /home -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'
 +
</source>
 +
<source lang="bash">
 
  3007 MB /home/user/Desktop/share/linux-65835.iso  
 
  3007 MB /home/user/Desktop/share/linux-65835.iso  
 
  448 MB /home/user/Pictures/Turkey/SAM_4590.AVI  
 
  448 MB /home/user/Pictures/Turkey/SAM_4590.AVI  
Строка 85: Строка 133:
 
  129 MB /home/user/Pictures/Turkey/SAM_4641.AVI
 
  129 MB /home/user/Pictures/Turkey/SAM_4641.AVI
 
  127 MB /home/user/Desktop/tmp/Camera/VID_20130911_164440.mp4
 
  127 MB /home/user/Desktop/tmp/Camera/VID_20130911_164440.mp4
 +
</source>
 
<p style="text-align:left">Сортировка вывода по размеру файлов командой <code>du</code>:</p>
 
<p style="text-align:left">Сортировка вывода по размеру файлов командой <code>du</code>:</p>
<p style="text-align:left"><span style="color:green">'''#du -k /opt/ruby_projects/* | sort -nr | cut -f2 | xargs -d '\n' du -sh'''</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''12) Узнать дату установки Linux'''</span></p>
+
#du -k /opt/ruby_projects/* | sort -nr | cut -f2 | xargs -d '\n' du -sh
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Определить дату установки Linux'''</span></p> ===
 
<p style="text-align:left">Есть несколько вариантов узнать дату и время установки:</p>
 
<p style="text-align:left">Есть несколько вариантов узнать дату и время установки:</p>
<p style="text-align:left"><span style="color:green">'''#ls -clt / | tail -n 1 | awk '{ print $7, $6, $8 }' '''</span></p>
+
<source lang="bash">
<p style="text-align:left"><span style="color:green">'''#tune2fs -l /dev/sda1 | grep create'''</span></p>
+
#ls -clt / | tail -n 1 | awk '{ print $7, $6, $8 }'
<p style="text-align:left"><span style="color:green">'''#LC_TIME="en_DK" rpm -qia |grep "Install Date"|awk '{print $3}'|uniq |sort -r|tail -n 1'''</span></p>
+
</source>
<p style="text-align:center"><span style="color:red"> '''13) Очистка КЭШа оперативной памяти в Linux'''</span></p>
+
<source lang="bash">
 +
#tune2fs -l /dev/sda1 | grep create
 +
</source>
 +
<source lang="bash">
 +
#LC_TIME="en_DK" rpm -qia |grep "Install Date"|awk '{print $3}'|uniq |sort -r|tail -n 1
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Очистка КЭШа оперативной памяти в Linux'''</span></p> ===
 
<p style="text-align:left">Для того, чтобы посмотреть сколько оперативной памяти занято и сколько закешировано в данный момент, можно воспользоваться командой <code>free</code>. С параметром -g она выведет информацию об использовании памяти в гигабайтах, с параметром -m в мегабайтах:</p>
 
<p style="text-align:left">Для того, чтобы посмотреть сколько оперативной памяти занято и сколько закешировано в данный момент, можно воспользоваться командой <code>free</code>. С параметром -g она выведет информацию об использовании памяти в гигабайтах, с параметром -m в мегабайтах:</p>
<p style="text-align:left"><span style="color:green">'''#free -g'''</span></p>
+
<source lang="bash">
 +
#free -g
 +
</source>
 
<p style="text-align:left">Для очистки кеша страниц('''pagecache''') использовать команду:</p>
 
<p style="text-align:left">Для очистки кеша страниц('''pagecache''') использовать команду:</p>
<p style="text-align:left"><span style="color:green">'''#echo 1 > /proc/sys/vm/drop_caches'''</span></p>
+
<source lang="bash">
 +
#echo 1 > /proc/sys/vm/drop_caches
 +
</source>
 
<p style="text-align:left">Для очистки directory entry('''dentries''') и index node('''inode''') использовать команду:</p>
 
<p style="text-align:left">Для очистки directory entry('''dentries''') и index node('''inode''') использовать команду:</p>
<p style="text-align:left"><span style="color:green">'''#echo 2 > /proc/sys/vm/drop_caches'''</span></p>
+
<source lang="bash">
 +
#echo 2 > /proc/sys/vm/drop_caches
 +
</source>
 
<p style="text-align:left">Для очистки кеша страниц('''pagecache'''), directory entry('''dentries''') и index node('''inode''') использовать команду:</p>
 
<p style="text-align:left">Для очистки кеша страниц('''pagecache'''), directory entry('''dentries''') и index node('''inode''') использовать команду:</p>
<p style="text-align:left"><span style="color:green">'''#echo 3 > /proc/sys/vm/drop_caches'''</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''14) Проверка количества открытых файлов для процесса'''</span></p>
+
#echo 3 > /proc/sys/vm/drop_caches
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Проверка количества открытых файлов для процесса'''</span></p> ===
 
<p style="text-align:left">В примере ниже описана команда получения количества открытых процессом файлов, для процесса ''line4'':</p>
 
<p style="text-align:left">В примере ниже описана команда получения количества открытых процессом файлов, для процесса ''line4'':</p>
<p style="text-align:left"><span style="color:green">'''#for pid in `/sbin/pidof line4`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done'''</span></p>
+
<source lang="bash">
 +
#for pid in `pidof line4`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; \
 +
echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done
 +
</source>
 
<p style="text-align:left">Вывод представлен на скриншоте ниже:</p>
 
<p style="text-align:left">Вывод представлен на скриншоте ниже:</p>
 
[[File:Open files.PNG|1200px|center]]
 
[[File:Open files.PNG|1200px|center]]
<p style="text-align:center"><span style="color:red"> '''15) Просмотреть краткую информацию по сетевому интерфейсу'''</span></p>
+
 
 +
=== <p style="text-align:center"><span style="color:red">'''Просмотреть краткую информацию по сетевому интерфейсу'''</span></p> ===
 
<p style="text-align:left">Для просмотра выполнить команду:</p>
 
<p style="text-align:left">Для просмотра выполнить команду:</p>
<p style="text-align:left"><span style="color:green">'''#ip addr show </span><span style="color:blue">''<NIC>''</span><span style="color:green"> | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'</span></p>
+
<source lang="bash">
<p style="text-align:center"><span style="color:red"> '''16) Подсчитать Количество Файлов(Директорий) в Папке'''</span></p>
+
#ip addr show <NIC> | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Подсчитать Количество Файлов(Директорий) в Папке'''</span></p>===
 
<p style="text-align:left">Ниже приведены лучшие способы поиска и подсчета количества файлов и папок в конкретной директории.</p>
 
<p style="text-align:left">Ниже приведены лучшие способы поиска и подсчета количества файлов и папок в конкретной директории.</p>
 
<p style="text-align:left">Подсчитать количество файлов в текущей папке:</p>
 
<p style="text-align:left">Подсчитать количество файлов в текущей папке:</p>
<p style="text-align:left"><span style="color:green">'''#ls -f . | wc -l'''</span> — Если Вам необходимо подсчитать довольно большое количество файлов, данный метод является самым быстрым.</p>
+
* Если Вам необходимо подсчитать довольно большое количество файлов, данный метод является самым быстрым:
<p style="text-align:left"><span style="color:green">'''#find . -type f -maxdepth 1 | wc -l'''</span></p>
+
<source lang="bash">
<p style="text-align:left"><span style="color:green">'''#find . -type f | wc -l'''</span> Команда рекурсивно считает количество файлов в текущей директории и всех её поддиректориях</p>
+
#ls -f . | wc -l
<p style="text-align:left"><span style="color:green">'''#find . -type d | wc -l'''</span> Команда рекурсивно считает количество папок в текущей директории и всех её поддиректориях</p>
+
#find . -type f -maxdepth 1 | wc -l
<p style="text-align:left"><span style="color:green">'''#find . -type f -name "*.txt" | wc -l'''</span> — команда рекурсивно считает количество файлов с расширением ".txt" в текущей директории и всех её поддиректориях.</p>
+
</source>
<p style="text-align:center"><span style="color:red"> '''17) Настройка ssh на авторизацию по ключам'''</span></p>
+
* Команда рекурсивно считает количество файлов в текущей директории и всех её поддиректориях:
 +
<source lang="bash">
 +
#find . -type f | wc -l
 +
</source>
 +
* Команда рекурсивно считает количество папок в текущей директории и всех её поддиректориях:
 +
<source lang="bash">
 +
#find . -type d | wc -l
 +
</source>
 +
* Команда рекурсивно считает количество файлов с расширением ".txt" в текущей директории и всех её поддиректориях:
 +
<source lang="bash">
 +
#find . -type f -name "*.txt" | wc -l
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Настройка ssh на авторизацию по ключам'''</span></p>===
 
<p style="text-align:left">Бывают случаи, когда необходимо настроить ssh c доступом к серверам с использованием авторизации по ключам. Для этого необходимо выполнить следующие команды(на сервере с которого планируются подключения к серверам, используя ключи):</p>
 
<p style="text-align:left">Бывают случаи, когда необходимо настроить ssh c доступом к серверам с использованием авторизации по ключам. Для этого необходимо выполнить следующие команды(на сервере с которого планируются подключения к серверам, используя ключи):</p>
<p style="text-align:left"><span style="color:green">'''#cd ~/.ssh/'''</span> — Переходим в директорию .ssh, расположенную в домашней директории пользователя</p>
+
Переходим в директорию .ssh, расположенную в домашней директории пользователя:
<p style="text-align:left"><span style="color:green">'''#ssh-keygen'''</span> Генерируем ключи, которые будем передавать. На все вопросы нажимаем клавишу ''Enter'' </p>
+
<source lang="bash">
<p style="text-align:left"><span style="color:green">'''#cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.21 'cat >> .ssh/authorized_keys' '''</span> Отправляем на сервер 192.168.1.21 содержимое ~/.ssh/id_rsa.pub в файл /home/user/.ssh/authorized_keys</p>
+
#cd ~/.ssh/
<p style="text-align:left"><span style="color:green">'''#ssh user@192.168.1.21 'chmod 600 ~/.ssh/authorized_keys' '''</span> Отправляем на сервер 192.168.1.21 команду, которая выставит права записи и чтения на файл authorized_keys только для владельца</p>
+
</source>
<p style="text-align:left"><span style="color:green">'''#ssh user@192.168.1.21 'chmod 700 ~/.ssh' '''</span> Отправляем на сервер 192.168.1.21 команду, которая выставит права записи и чтения и исполнения на директорию .ssh только для владельца</p>
+
Генерируем ключи, которые будем передавать. На все вопросы нажимаем клавишу ''Enter'':
<p style="text-align:left"><span style="color:green">'''#ssh user@192.168.1.21'''</span> Вводим данную команду, для проверки, что авторизации по ключам работает.</p>
+
<source lang="bash">
 +
#ssh-keygen
 +
</source>
 +
Отправляем на сервер 192.168.1.21 содержимое ~/.ssh/id_rsa.pub в файл /home/user/.ssh/authorized_keys:
 +
<source lang="bash">
 +
#cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.21 'cat >> .ssh/authorized_keys'
 +
</source>
 +
Отправляем на сервер 192.168.1.21 команду, которая выставит права записи и чтения на файл authorized_keys только для владельца:
 +
<source lang="bash">
 +
#ssh user@192.168.1.21 'chmod 600 ~/.ssh/authorized_keys'
 +
</source>
 +
Отправляем на сервер 192.168.1.21 команду, которая выставит права записи и чтения и исполнения на директорию .ssh только для владельца:
 +
<source lang="bash">
 +
#ssh user@192.168.1.21 'chmod 700 ~/.ssh'
 +
</source>
 +
Вводим данную команду, для проверки, что авторизации по ключам работает:
 +
<source lang="bash">
 +
#ssh user@192.168.1.21
 +
</source>
 
<p style="text-align:left">Следует учитывать, что на домашнюю директорию пользователя и директорию .ssh(/home/<span style="color:blue"><''username''></span>/.ssh) на удалённом сервере должны быть выставлены права '''''drwx------'''''('''700'''), а на файл /home/<span style="color:blue"><''username''></span>/.ssh/authorized_keys '''''-rw-------'''''('''600''').</p>
 
<p style="text-align:left">Следует учитывать, что на домашнюю директорию пользователя и директорию .ssh(/home/<span style="color:blue"><''username''></span>/.ssh) на удалённом сервере должны быть выставлены права '''''drwx------'''''('''700'''), а на файл /home/<span style="color:blue"><''username''></span>/.ssh/authorized_keys '''''-rw-------'''''('''600''').</p>
<p style="text-align:center"><span style="color:red"> ''' 18) Ошибка "Broken pipe" при авторизации пользователя по ssh '''</span></p>
+
 
 +
=== <p style="text-align:center"><span style="color:red">'''Ошибка "Broken pipe" при авторизации пользователя по ssh'''</span></p> ===
 
<p style="text-align:left">Бывают случаи, когда при авторизации обычным пользователем по ssh появляется ошибка "<span style="color:red">'''Broken pipe'''</span>". При этом авторизация под root может проходить успешно. Если из-под '''root''' выполнить команду <span style="color:green">'''''su - <username>'''''</span> и получить результат "<span style="color:red">'''su: cannot set user id: Resource temporarily unavailable'''</span>" или "<span style="color:red">'''su:невозможно установить пользовательский id: Ресурс временно недоступен'''</span>", то надо посмотреть в сторону того, какое кол-во процессов разрешено запускать пользователю и какое кол-во процессов из-под этого пользователя запущенно на данный момент. Для этого необходимо выполнить следующие команды:</p>
 
<p style="text-align:left">Бывают случаи, когда при авторизации обычным пользователем по ssh появляется ошибка "<span style="color:red">'''Broken pipe'''</span>". При этом авторизация под root может проходить успешно. Если из-под '''root''' выполнить команду <span style="color:green">'''''su - <username>'''''</span> и получить результат "<span style="color:red">'''su: cannot set user id: Resource temporarily unavailable'''</span>" или "<span style="color:red">'''su:невозможно установить пользовательский id: Ресурс временно недоступен'''</span>", то надо посмотреть в сторону того, какое кол-во процессов разрешено запускать пользователю и какое кол-во процессов из-под этого пользователя запущенно на данный момент. Для этого необходимо выполнить следующие команды:</p>
<p style="text-align:left"><span style="color:green">'''#ps -eLF|grep '<username>'|wc -l '''</span> Команда покажет сколько процессов запущено от пользователя <span style="color:red">'''username'''</span> на данный момент</p>
+
Команда покажет сколько процессов запущено от пользователя <span style="color:red">'''<username>'''</span> на данный момент:
<p style="text-align:left"><span style="color:green">'''#cat /etc/security/limits.d/90-nproc.conf'''</span> Команда покажет сколько процессов разрешено запускать пользователям(<span style="color:red">'''*'''</span> - любой пользователь) в RHEL 6.x/CentOS 6.x</p>
+
<source lang="bash">
<p style="text-align:left"><span style="color:green">'''#cat /etc/security/limits.d/20-nproc.conf'''</span> Команда покажет сколько процессов разрешено запускать пользователям(<span style="color:red">'''*'''</span> - любой пользователь) в RHEL 7.x/CentOS 7.x</p>
+
#ps -eLF|grep '<username>'|wc -l
В случае, если вывод команды <span style="color:green">'''ps -eLF|grep '<username>'|wc -l'''</span> превышает указанное в 90-nproc.conf/20-nproc.conf значение, тогда необходимо это значение увеличить или закомментировать с последующей перезагрузкой параметров командой <span style="color:green">'''sysctl -p'''</span>(правка параметров и перезагрузка выполняется из-под root).
+
</source>
<p style="text-align:center"><span style="color:red"> ''' 19) Копирование директорий на удалённый сервер используя tar, ssh, cat или dd '''</span></p>
+
Команда покажет сколько файлов открыто от пользователя <span style="color:red">'''<username>'''</span> на данный момент:
 +
<source lang="bash">
 +
#lsof -u '<username>'|wc -l
 +
</source>
 +
Команда покажет сколько процессов разрешено запускать пользователям(<span style="color:red">'''*'''</span> - любой пользователь) в RHEL 6.x/CentOS 6.x:
 +
<source lang="bash">
 +
#cat /etc/security/limits.d/90-nproc.conf
 +
</source>
 +
Команда покажет сколько процессов разрешено запускать пользователям(<span style="color:red">'''*'''</span> - любой пользователь) в RHEL 7.x/CentOS 7.x:
 +
<source lang="bash">
 +
#cat /etc/security/limits.d/20-nproc.conf
 +
</source>
 +
В случае, если вывод команды <source lang="bash">#ps -eLF|grep '<username>'|wc -l</source> превышает указанное в 90-nproc.conf/20-nproc.conf значение, тогда необходимо это значение увеличить или закомментировать с последующей перезагрузкой параметров командой <source lang="bash">#sysctl -p</source>('''''правка параметров и перезагрузка выполняется из-под root''''').
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Копирование директорий на удалённый сервер используя tar, ssh, cat или dd'''</span></p> ===
 
<p style="text-align:left">Архивирование директории на удалённый сервер с использованием [[cat]]:</p>
 
<p style="text-align:left">Архивирование директории на удалённый сервер с использованием [[cat]]:</p>
<p style="text-align:left"><span style="color:green">'''# tar zcvfp - /home/user/sourcedir | ssh user@remote_host "cat > ~/from_somehost.tar.gz"'''</span></p>
+
<source lang="bash">
 +
# tar zcvfp - /home/user/sourcedir | ssh user@remote_host "cat > ~/from_somehost.tar.gz"
 +
</source>
 
То, что [[tar]] выведет на стандартный вывод, перенаправляется на удалённый сервер ('''''user@remote_host'''''), где и запускается команда "'''''cat > ~/from_somehost.tar.gz'''''". [[cat]] принимает на вход то, что выдал [[tar]], а затем всё это складывает в файл '''''~/from_somehost.tar.gz'''''.
 
То, что [[tar]] выведет на стандартный вывод, перенаправляется на удалённый сервер ('''''user@remote_host'''''), где и запускается команда "'''''cat > ~/from_somehost.tar.gz'''''". [[cat]] принимает на вход то, что выдал [[tar]], а затем всё это складывает в файл '''''~/from_somehost.tar.gz'''''.
 
<p style="text-align:left">Архивирование директории на удалённый сервер с [[dd]]:</p>
 
<p style="text-align:left">Архивирование директории на удалённый сервер с [[dd]]:</p>
<p style="text-align:left"><span style="color:green">'''# tar zcvfp - /home/user/sourcedir | ssh user@remote_host "dd of=~/from_somehost.tar.gz"'''</span></p>
+
<source lang="bash">
 +
#tar zcvfp - /home/user/sourcedir | ssh user@remote_host "dd of=~/from_somehost.tar.gz"
 +
</source>
 
В этом примере вместо [[cat]] используется [[dd]] (disk destroy ;), у которой есть параметр '''of''' (output file), то есть тот, куда нужно складывать то, что пришло от [[tar]]. Остальное по аналогии должно быть понятно.
 
В этом примере вместо [[cat]] используется [[dd]] (disk destroy ;), у которой есть параметр '''of''' (output file), то есть тот, куда нужно складывать то, что пришло от [[tar]]. Остальное по аналогии должно быть понятно.
 
<p style="text-align:left">Архивирование  с удалённой машины на локальную с использованием [[cat]]:</p>
 
<p style="text-align:left">Архивирование  с удалённой машины на локальную с использованием [[cat]]:</p>
<p style="text-align:left"><span style="color:green">'''#ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | cat > ~/from_somehost.tar.gz'''</span></p>
+
<source lang="bash">
 +
#ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | cat > ~/from_somehost.tar.gz
 +
</source>
 
<p style="text-align:left">Архивирование  с удалённой машины на локальную с использованием [[dd]]:</p>
 
<p style="text-align:left">Архивирование  с удалённой машины на локальную с использованием [[dd]]:</p>
<p style="text-align:left"><span style="color:green">'''#ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | dd of=~/from_somehost.tar.gz'''</span></p>
+
<source lang="bash">
 +
#ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | dd of=~/from_somehost.tar.gz
 +
</source>
 
<p style="text-align:left">Распаковка удалённого архива на локальную машину:</p>
 
<p style="text-align:left">Распаковка удалённого архива на локальную машину:</p>
<p style="text-align:left"><span style="color:green">'''#ssh user@remote_host "cat /home/user/from_somehost.tar.gz" |tar xvfp -'''</span></p>
+
<source lang="bash">
 +
#ssh user@remote_host "cat /home/user/from_somehost.tar.gz" |tar xvfp -
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Работа с процессами'''</span></p> ===
 +
Часто бывает полезным узнать разного рода параметры уже запущенных процессов, а так же манипулировать ими. Рассмотрим несколько разных примеров по работе с процессами.
 +
Много информации нам предоставляет файловая система '''procfs'''.<br />
 +
'''procfs''' — виртуальная файловая система, используемая в ''UNIX-like'' ОС. '''procfs''' позволяет получить доступ к информации о системных процессах из ядра, она необходима для выполнения таких команд как [[ps]], [[w]], [[top]]. Обычно её монтируют на ''/proc''. '''procfs''' создаёт двухуровневое представление пространств процессов. На верхнем уровне процессы представляют собой директории, именованные в соответствии с их ''pid''.<br />
 +
Некоторые файлы и директории из '''ProcFS''', где '''PID''' – идентификатор процесса или ''self'':
 +
* /proc/'''PID'''/cmdline – <span style="color:green">аргументы командной строки</span>;
 +
* /proc/'''PID'''/environ – <span style="color:green">переменные окружения для данного процесса</span>;
 +
* /proc/'''PID'''/status – <span style="color:green">статус процесса</span>;
 +
* /proc/'''PID'''/fd – <span style="color:green">директория, содержащая символьные ссылки на каждый открытый файловый дескриптор</span>;
 +
* /proc/cpuinfo – <span style="color:green">информация о процессоре (производитель, модель, поколение и т.п.)</span>;
 +
* /proc/cmdline – <span style="color:green">параметры, передаваемые ядру при загрузке</span>;
 +
* /proc/uptime – <span style="color:green">количество секунд, прошедших с момента загрузки ядра и проведенных в режиме бездействия</span>;
 +
* /proc/version – <span style="color:green">содержит информацию о версии ядра, компилятора и другую информацию, связанную с загруженным ядром</span>.
 +
Посмотрев на размер файлов в каталоге ''/proc'', можно увидеть, что они все нулевого размера. Дело в том, что в действительности все эти файлы не существуют.
 +
Примеры использования '''procfs''':
 +
<p style="text-align:left"><span style="color:red">1) Текущий рабочий каталог процесса</span>:</p>
 +
<source lang="bash">
 +
# ls -la /proc/3165/cwd
 +
lrwxrwxrwx 1 clamav clamav 0 Авг 18 16:07 /proc/3165/cwd -> /var/lib/clamav
 +
</source>
 +
где 3165 — номер pid’a процесса.
 +
<p style="text-align:left"><span style="color:red">2) Вывести все переменные процесса</span>:</p>
 +
<source lang="bash">
 +
# cat /proc/2361/environ | strings
 +
XDG_SESSION_ID=1
 +
TERM=xterm
 +
SHELL=/bin/bash
 +
SSH_CLIENT=10.0.2.2 1383 22
 +
SSH_TTY=/dev/pts/0
 +
USER=vaal
 +
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
 +
*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:
 +
*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:
 +
*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:
 +
*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:
 +
*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:
 +
*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:
 +
*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:
 +
*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:
 +
*.spx=00;36:*.xspf=00;36:
 +
DOCKER_TLS_VERIFY=0
 +
MAIL=/var/mail/vaal
 +
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
 +
PWD=/home/vaal
 +
LANG=ru_RU.UTF-8
 +
SHLVL=1
 +
HOME=/home/vaal
 +
LOGNAME=vaal
 +
SSH_CONNECTION=10.0.2.2 1383 10.0.2.15 22
 +
LESSOPEN=| /usr/bin/lesspipe %s
 +
XDG_RUNTIME_DIR=/run/user/1000
 +
LESSCLOSE=/usr/bin/lesspipe %s %s
 +
_=/usr/bin/mc
 +
</source>
 +
<p style="text-align:left"><span style="color:red">3) Удалили файл, используемый процессом. Как восстановить файл?</span>:</p>
 +
Попробовать поискать файл в каталоге /proc/'''PID'''/fd
 +
Почему так можно делать? Всё дело в том, что при удалении файла, который всё-таки открыт процессом, файл перестал быть виден в файловой системе, но не исчез, и окончательно удалён он будет только когда закроется последний ссылающийся на него дескриптор. Каталог /proc/'''PID'''/fd содержит символьные ссылки на все открытые процессом '''PID''' дескрипторы.
 +
<p style="text-align:left"><span style="color:red">4) Связь между /proc и sysctl(взято с [http://linuxcenter.ru Linux-center])</span>:</p>
 +
'''Sysctl''' использует файлы в ''/proc/sys'' как индивидуальные переменные, которые могут быть изменены. К примеру, файл в ''/proc/sys'', который представляет максимальное количество заголовков файлов в системе, ''/proc/sys/fs/file-max'', представлен как '''fs.file-max'''. Этот пример требует некоторых дополнительных пояснений в записи '''sysctl'''. Так как '''sysctl''' может только изменять переменные в директории '''/proc/sys''', то часть имени переменной обозначающая директорию отбрасывается. Другое изменение касается слэшей, которые заменяются на точки. Вот два простых правила для преобразования файлов в ''/proc/sys'' и переменных в '''sysctl''':<br />
 +
* Отбросьте ''/proc/sys'' от начала.
 +
* Замените слэши на точки в имени файла.
 +
Эти два правила позволят вам преобразовать любой файл в ''/proc/sys'' в любое имя переменной в '''sysctl'''. Обычное преобразование имени файла в переменную:
 +
<source lang="bash">
 +
/proc/sys/dir/file --> dir.file
 +
dir1.dir2.file --> /proc/sys/dir1/dir2/file
 +
</source>
 +
Можно отобразить все переменные, доступные для изменения, используя команду '''sysctl -a'''. Переменные могут также быть изменены с помощью '''sysctl''', которая выполняет ту же работу что и '''echo'''. Эта запись объясняет это:
 +
<source lang="bash">
 +
sysctl -w dir.file="value"
 +
</source>
 +
Используя пример с ''file-max'', мы можем изменить это значение на 16384, используя один из двух методов:
 +
<source lang="bash">
 +
sysctl -w fs.file-max="16384"
 +
</source>
 +
или<br />
 +
<source lang="bash">
 +
echo "16384" > /proc/sys/fs/file-max
 +
</source>
 +
<p style="text-align:left"><span style="color:red">5) Максимальное количество процессов</span>:</p>
 +
По умолчанию процессов 32768. Узнать текущее значение можно так:
 +
<source lang="bash">
 +
#sysctl kernel.pid_max
 +
kernel.pid_max = 32768
 +
</source>
 +
Изменить это число можно так:
 +
<source lang="bash">
 +
#sysctl kernel.pid_max=256000
 +
kernel.pid_max = 256000
 +
</source>
 +
Это возможно только на '''64'''-битных системах. Такое ограничение связано с разрядностью '''32'''-битного числа, которое не может превышать ''32768''. А поскольку эти лимиты определены как тип '''int''', то соответственно действует такое ограничение. Если же вы попробуете изменить, то получите такое сообщение:
 +
<source lang="bash">
 +
# sysctl kernel.pid_max=327600
 +
error: "Invalid argument" setting key "kernel.pid_max"
 +
</source>
 +
<p style="text-align:left"><span style="color:red">6) Утилита lsof</span>:</p>
 +
Утилита, служит для вывода информации о том, какие файлы используются теми или иными процессами.Ниже будет продемонстрировано несколько полезных примеров работы этой утилиты.
 +
* Список всех открытых файлов
 +
<source lang="bash">
 +
$lsof
 +
</source>
 +
Показывает все открытые файлы текущего пользователя (если '''root''' — тогда все файлы) всеми процессами.
 +
* Какие процессы используют файл file
 +
<source lang="bash">
 +
#lsof /path/to/file
 +
</source>
 +
Можно указать несколько файлов через пробел, тогда получите суммарный список процессов.
 +
 
 +
* Какие процессы/файлы использует пользователь ''user''
 +
<source lang="bash">
 +
#lsof -u user
 +
</source>
 +
Если хотите узнать информацию по нескольким пользователям, разделите их имена запятой. Для групп используйте конструкцию ‘-g groupname’
 +
 
 +
* Какие процессы открыты программой prog_name
 +
<source lang="bash">
 +
#lsof -c prog_name
 +
</source>
 +
Можно указывать неполное имя. [lsof] будет искать по указанному буквосочетанию. Если нужно узнать информацию для нескольких приложений, разделяйте их имена пробелом и перед каждым именем должно идти ‘-c’
 +
 
 +
* Какие файлы открыты pid’ом NNN
 +
<source lang="bash">
 +
#lsof -p NNN
 +
</source>
 +
 
 +
* Список всех открытых интернет сокетов
 +
<source lang="bash">
 +
#lsof -i
 +
</source>
 +
Если нужно посмотреть только tcp сокеты, то после ‘i’ через пробел добавляем ''tcp''. Аналогично и для ''udp''.<br />
 +
Так же можно посмотреть и список всех unix сокетов:
 +
<source lang="bash">
 +
#lsof -U
 +
</source>
 +
 
 +
* Просмотр ресурсов в realtime
 +
Можно задать период обновления информации, например, 1 секунда:
 +
<source lang="bash">
 +
#lsof -r 1 -u username
 +
</source>
 +
будет обновлять информацию об использованных пользователем ''username'' процессах, каждую секунду.
 +
 
 +
* Вывод только pid’ов
 +
По умолчанию, выводится таблица с колонками. Но если требуется вывести только сами pid’ы, можно воспользоваться такой командой:
 +
<source lang="bash">
 +
#lsof -t -u username
 +
</source>
 +
<p style="text-align:left"><span style="color:red">7) Поиск всех pid’ов процесса</span>:</p>
 +
Есть одна замечательная утилита [[pidof]], которая позволяет найти все pid’ы связанные с определённым процессом. К примеру, найдём все pid’ы apache2:
 +
<source lang="bash">
 +
# pidof apache2
 +
9370 9369 9368 9367 9364 9362 9314 9280 9277 9268 4940
 +
</source>
 +
В большинстве дистрибутивов это обычный симлинк на ''/sbin/killall5'':
 +
<source lang="bash">
 +
#file /bin/pidof
 +
/bin/pidof: symbolic link to `../sbin/killall5'
 +
</source>
 +
 
 +
=== <p style="text-align:center"><span style="color:red">'''Быстрое копирование данных при помощи Python'''</span></p> ===
 +
<p style="text-align:left">Иногда необходимо быстро предоставить доступ к файлам на машине Linux. В случае, если на такой машине имеется установленный python, то можно запустить простой HTTP-сервер, который предоставит такой доступ. Для этого перейдём в директорию содержащую целевые файлы и выполним команду интерпретатора python, который откроет HTTP-сервер на порту 8080:
 +
</p>
 +
<source lang="python">
 +
$ cd <source_dir>
 +
$ python -m SimpleHTTPServer 8080
 +
</source>
 +
<p style="text-align:left">
 +
или таким образом:
 +
</p>
 +
<source lang="python">
 +
$ cd <source_dir>
 +
$ python3 -m http.server 8080
 +
</source>
 +
 
 +
=== Ссылки ===
 
[https://nixadmin.ru/copy_on_the_fly nixadmin.ru — копирование "на лету"]
 
[https://nixadmin.ru/copy_on_the_fly nixadmin.ru — копирование "на лету"]
 +
<br />
 +
[http://eax.me/ssh-backup/ Резервное копирование базы данных и файлов по SSH]
 +
<br />
 +
[https://skeletor.org.ua/?p=1506 Работаем с процессами]

Текущая версия на 17:14, 31 октября 2023

Отличие обычного пользователя Linux от профессионала заключается во времени, проведённом за изучением хитростей и приёмов, которые позволяют решать не быстрые задачи в одно мгновение. Если вы хотите увеличить скорость работы без долгого набивания шишек в консоли, здесь приводится список лёгких для изучения приёмов. Они помогут сделать вашу работу эффективной и менее трудозатратной.

Список не ваших процессов

Для получения списка всех процессов, запущенных не текущим пользователем, выполните команду:

$ps aux | grep -v `whoami`

Для получения списка из 10 процессов, которые сильнее всего загружают систему, выполните команду:

$ps aux --sort=-%cpu | grep -m 11 -v `whoami`

Замена текста в файлах

Если надо заменить текст не в одном файле, то имеется несколько способов. Для того, чтобы заменить текст «Windows» на «Linux» во всех файлах в текущей директории, название которой начинается с «test», введите в консоли(необходим интерпретатор perl):

$perl -i -pe 's/Windows/Linux/;' test*

Чтобы провести ту же операцию во всех поддиректориях:

$find. -name '*.txt' -print | xargs perl -pi -e's/Windows/Linux/ig' *.txt

Если Вы хотите сделать то же самое для на обычных файлов со множеством переносов строк и странных символов (файл — в другой кодировке):

$find -type f -name '*.txt' -print0 | xargs --null perl -pi -e 's/Windows/Linux/

Исправить консоль

Если использовать команду less или cat для просмотра файла, в конце которого — бинарные данные, то можно легко испортить консоль. Потому что в бинарных данных могут попасться любые сочетания управляющих кодов: компьютер будет издавать звуки «бип-бип», появятся прикольные символы, странные цветовые сочетания. В конце концов, шрифт изменится на какие-то иероглифы. Bash, очевидно, продолжает работать, но вы ничего не можете прочитать и сделать. Просто наберите в консоли команду инициализации:

$reset

Запуск множественных X-сессий

Если надо дать кому-нибудь доступ к Вашему компьютеру, то вы откроете для себя, что это не всегда необходимо. Если предположить, что компьютер стартует в графическом режиме (runlevel 5), то, одновременно нажав Ctrl+Alt+<F7>, вы попадете в консоль. Введите логин и пароль, потом исполните следующий код:

$startx -- :1

чтобы войти в графическое окружение. Чтобы вернуться в предыдущую сессию, нажмите Ctrl+Alt+<F7>, для ещё одного возврата — Ctrl+Alt+<F8>. Вы можете этот трюк: клавиши с F1 по F6 отвечают за 6 сессий консоли, а клавиши с F7 по F12 — за 6 Х-сессий. Подводный камень: в разных дистрибутивах могут использоваться разные сочетания клавиш.

Лёгкое резервное копирование

Если надо сделать резервную копию папки и скопировать только изменившиеся файлы, то можно использовать для этого rsync (вам нужен аккаунт на удалённом компьютере):

$rsync -vare ssh jono@192.168.0.2:/home/jono/importantfiles/* /home/jono/backup/

Поиск самых больших файлов в текущей директории

Можно столкнуться с проблемой, когда надо удалить несколько больших файлов. Их можно найти в текущей директории с помощью команды:

$ls -lSrh

Ключ “r” означает, что большие файлы должны выводиться в конце. Следующей командой можно найти самые большие файлы MP3/MPEG:

$ls -lSrh *.mp*

Также можно найти самые большие директории:

$du -kx | egrep -v "\./.+/" | sort -n

Оптимизация баз данных MySQL

При любом изменении структуры базы данных или удалении больших объёмов данных, файлы могут стать фрагментированными, что приводит к потере производительности. Просто запомните простое правило — запускать оптимизатор базы при любом изменении базы:

#mysqloptimize -A -u<username> -p<password>
 
#mysqlcheck --optimize -A -u<username> -p<password>

Список открытых портов

Получить список открытых портов в состоянии Listen в Linux очень просто, для этого достаточно выполнить:

#netstat -lnp
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
 tcp 0 0 0.0.0.0:5280 0.0.0.0:* LISTEN 698/perl 
 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 217/httpd tcp
 0 0 10.42.3.2:53 0.0.0.0:* LISTEN 220/named tcp
 0 0 10.42.4.6:53 0.0.0.0:* LISTEN 220/named tcp
 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 220/named tcp 
 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 200/sshd udp 
 0 0 0.0.0.0:32768 0.0.0.0:* 220/named udp 
 0 0 10.42.3.2:53 0.0.0.0:* 220/named udp 
 0 0 10.42.4.6:53 0.0.0.0:* 220/named udp 
 0 0 127.0.0.1:53 0.0.0.0:* 220/named udp 
 0 0 0.0.0.0:67 0.0.0.0:* 222/dhcpd raw 
 0 0 0.0.0.0:1 0.0.0.0:* 7 222/dhcpd

В этом примере видно, что процесс с PID'ом 698 — процесс интерпретатора Perl, который слушает порт 5280. Если вы не root в системе, то система не покажет пути к программам.

Поиск занятых устройств

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

#lsof +D /mnt/windows

Она показывает PID и команду запуска любого процесса, использующего /mnt/windows.

Поиск изменённых сегодня файлов

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

#ls -al --time-style=+%D | grep `date +%D`

Параметры команды ls требуют вывода даты в определенном формате. Хитрость в том: то, что выдаст ls, идет на вход grep. Параметр grep сами по себе команда (заключена в обратные апострофы), которая подставляет текущую дату в шаблон для отсева. Её легко модифицировать для поиска по другим датам, размеру файла и т.д.

Поиск больших файлов в Linux

Поиск больших файлов особенно актуален когда на диске заканчивается место и приходится искать кандидатов на удаление. Самый лучший способ чтобы найти все самые большие файлы на хосте с Linux - воспользоваться командной строкой. В принципе не существует простой команды для поиска самых больших файлов в Linux. Однако, можно с лёгкостью получить список самых больших файлов, используя комбинацию нескольких простых команд.Выполните следующую комбинацию команд для поиска десяти самых больших файлов в Linux, начиная с директории <DIR> (измените <DIR> на директорию в которой Вы хотите запустить поиск):

#find <DIR> -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'
 106 MB /var/lib/mysql/ibdata1 
 94 MB /usr/lib/locale/locale-archive 
 41 MB /scripts/20130206-015833.tar.gz 
 41 MB /scripts/20130206-004839.tar.gz 
 41 MB /scripts/20130206-130400.tar.gz 
 41 MB /scripts/20130206-000442.tar.gz 
 41 MB /scripts/20130206-132019.tar.gz 
 41 MB /root/20130208-133954.tar.gz 
 33 MB /var/log/messages-20130303 
 32 MB /var/lib/rpm/Packages

Найти 10 самых больших фалов, начиная с '/home'

#find /home -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'
 3007 MB /home/user/Desktop/share/linux-65835.iso 
 448 MB /home/user/Pictures/Turkey/SAM_4590.AVI 
 266 MB /home/user/Pictures/Turkey/SAM_4588.AVI 
 173 MB /home/user/Camera/VID_20130909_120713.mp4 
 152 MB /home/user/Camera/VID_20130909_115427.mp4 
 133 MB /home/user/Camera/VID_20130909_210904.mp4 
 133 MB /home/user/Pictures/Paris/VID_20130928_182431.mp4 
 131 MB /home/user/Pictures/Turkey/SAM_4597.AVI 
 129 MB /home/user/Pictures/Turkey/SAM_4641.AVI
 127 MB /home/user/Desktop/tmp/Camera/VID_20130911_164440.mp4

Сортировка вывода по размеру файлов командой du:

#du -k /opt/ruby_projects/* | sort -nr | cut -f2 | xargs -d '\n' du -sh

Определить дату установки Linux

Есть несколько вариантов узнать дату и время установки:

#ls -clt / | tail -n 1 | awk '{ print $7, $6, $8 }'
#tune2fs -l /dev/sda1 | grep create
#LC_TIME="en_DK" rpm -qia |grep "Install Date"|awk '{print $3}'|uniq |sort -r|tail -n 1

Очистка КЭШа оперативной памяти в Linux

Для того, чтобы посмотреть сколько оперативной памяти занято и сколько закешировано в данный момент, можно воспользоваться командой free. С параметром -g она выведет информацию об использовании памяти в гигабайтах, с параметром -m в мегабайтах:

#free -g

Для очистки кеша страниц(pagecache) использовать команду:

#echo 1 > /proc/sys/vm/drop_caches

Для очистки directory entry(dentries) и index node(inode) использовать команду:

#echo 2 > /proc/sys/vm/drop_caches

Для очистки кеша страниц(pagecache), directory entry(dentries) и index node(inode) использовать команду:

#echo 3 > /proc/sys/vm/drop_caches

Проверка количества открытых файлов для процесса

В примере ниже описана команда получения количества открытых процессом файлов, для процесса line4:

#for pid in `pidof line4`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; \
echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

Вывод представлен на скриншоте ниже:

Open files.PNG

Просмотреть краткую информацию по сетевому интерфейсу

Для просмотра выполнить команду:

#ip addr show <NIC> | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Подсчитать Количество Файлов(Директорий) в Папке

Ниже приведены лучшие способы поиска и подсчета количества файлов и папок в конкретной директории.

Подсчитать количество файлов в текущей папке:

  • Если Вам необходимо подсчитать довольно большое количество файлов, данный метод является самым быстрым:
#ls -f . | wc -l
#find . -type f -maxdepth 1 | wc -l
  • Команда рекурсивно считает количество файлов в текущей директории и всех её поддиректориях:
#find . -type f | wc -l
  • Команда рекурсивно считает количество папок в текущей директории и всех её поддиректориях:
#find . -type d | wc -l
  • Команда рекурсивно считает количество файлов с расширением ".txt" в текущей директории и всех её поддиректориях:
#find . -type f -name "*.txt" | wc -l

Настройка ssh на авторизацию по ключам

Бывают случаи, когда необходимо настроить ssh c доступом к серверам с использованием авторизации по ключам. Для этого необходимо выполнить следующие команды(на сервере с которого планируются подключения к серверам, используя ключи):

Переходим в директорию .ssh, расположенную в домашней директории пользователя:

#cd ~/.ssh/

Генерируем ключи, которые будем передавать. На все вопросы нажимаем клавишу Enter:

#ssh-keygen

Отправляем на сервер 192.168.1.21 содержимое ~/.ssh/id_rsa.pub в файл /home/user/.ssh/authorized_keys:

#cat ~/.ssh/id_rsa.pub | ssh user@192.168.1.21 'cat >> .ssh/authorized_keys'

Отправляем на сервер 192.168.1.21 команду, которая выставит права записи и чтения на файл authorized_keys только для владельца:

#ssh user@192.168.1.21 'chmod 600 ~/.ssh/authorized_keys'

Отправляем на сервер 192.168.1.21 команду, которая выставит права записи и чтения и исполнения на директорию .ssh только для владельца:

#ssh user@192.168.1.21 'chmod 700 ~/.ssh'

Вводим данную команду, для проверки, что авторизации по ключам работает:

#ssh user@192.168.1.21

Следует учитывать, что на домашнюю директорию пользователя и директорию .ssh(/home/<username>/.ssh) на удалённом сервере должны быть выставлены права drwx------(700), а на файл /home/<username>/.ssh/authorized_keys -rw-------(600).

Ошибка "Broken pipe" при авторизации пользователя по ssh

Бывают случаи, когда при авторизации обычным пользователем по ssh появляется ошибка "Broken pipe". При этом авторизация под root может проходить успешно. Если из-под root выполнить команду su - <username> и получить результат "su: cannot set user id: Resource temporarily unavailable" или "su:невозможно установить пользовательский id: Ресурс временно недоступен", то надо посмотреть в сторону того, какое кол-во процессов разрешено запускать пользователю и какое кол-во процессов из-под этого пользователя запущенно на данный момент. Для этого необходимо выполнить следующие команды:

Команда покажет сколько процессов запущено от пользователя <username> на данный момент:

#ps -eLF|grep '<username>'|wc -l

Команда покажет сколько файлов открыто от пользователя <username> на данный момент:

#lsof -u '<username>'|wc -l

Команда покажет сколько процессов разрешено запускать пользователям(* - любой пользователь) в RHEL 6.x/CentOS 6.x:

#cat /etc/security/limits.d/90-nproc.conf

Команда покажет сколько процессов разрешено запускать пользователям(* - любой пользователь) в RHEL 7.x/CentOS 7.x:

#cat /etc/security/limits.d/20-nproc.conf
В случае, если вывод команды
#ps -eLF|grep '<username>'|wc -l
превышает указанное в 90-nproc.conf/20-nproc.conf значение, тогда необходимо это значение увеличить или закомментировать с последующей перезагрузкой параметров командой
#sysctl -p
(правка параметров и перезагрузка выполняется из-под root).

Копирование директорий на удалённый сервер используя tar, ssh, cat или dd

Архивирование директории на удалённый сервер с использованием cat:

# tar zcvfp - /home/user/sourcedir | ssh user@remote_host "cat > ~/from_somehost.tar.gz"

То, что tar выведет на стандартный вывод, перенаправляется на удалённый сервер (user@remote_host), где и запускается команда "cat > ~/from_somehost.tar.gz". cat принимает на вход то, что выдал tar, а затем всё это складывает в файл ~/from_somehost.tar.gz.

Архивирование директории на удалённый сервер с dd:

#tar zcvfp - /home/user/sourcedir | ssh user@remote_host "dd of=~/from_somehost.tar.gz"

В этом примере вместо cat используется dd (disk destroy ;), у которой есть параметр of (output file), то есть тот, куда нужно складывать то, что пришло от tar. Остальное по аналогии должно быть понятно.

Архивирование с удалённой машины на локальную с использованием cat:

#ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | cat > ~/from_somehost.tar.gz

Архивирование с удалённой машины на локальную с использованием dd:

#ssh user@remote_host "tar zcvfp - /home/user/sourcedir" | dd of=~/from_somehost.tar.gz

Распаковка удалённого архива на локальную машину:

#ssh user@remote_host "cat /home/user/from_somehost.tar.gz" |tar xvfp -

Работа с процессами

Часто бывает полезным узнать разного рода параметры уже запущенных процессов, а так же манипулировать ими. Рассмотрим несколько разных примеров по работе с процессами. Много информации нам предоставляет файловая система procfs.
procfs — виртуальная файловая система, используемая в UNIX-like ОС. procfs позволяет получить доступ к информации о системных процессах из ядра, она необходима для выполнения таких команд как ps, w, top. Обычно её монтируют на /proc. procfs создаёт двухуровневое представление пространств процессов. На верхнем уровне процессы представляют собой директории, именованные в соответствии с их pid.
Некоторые файлы и директории из ProcFS, где PID – идентификатор процесса или self:

  • /proc/PID/cmdline – аргументы командной строки;
  • /proc/PID/environ – переменные окружения для данного процесса;
  • /proc/PID/status – статус процесса;
  • /proc/PID/fd – директория, содержащая символьные ссылки на каждый открытый файловый дескриптор;
  • /proc/cpuinfo – информация о процессоре (производитель, модель, поколение и т.п.);
  • /proc/cmdline – параметры, передаваемые ядру при загрузке;
  • /proc/uptime – количество секунд, прошедших с момента загрузки ядра и проведенных в режиме бездействия;
  • /proc/version – содержит информацию о версии ядра, компилятора и другую информацию, связанную с загруженным ядром.

Посмотрев на размер файлов в каталоге /proc, можно увидеть, что они все нулевого размера. Дело в том, что в действительности все эти файлы не существуют. Примеры использования procfs:

1) Текущий рабочий каталог процесса:

# ls -la /proc/3165/cwd
lrwxrwxrwx 1 clamav clamav 0 Авг 18 16:07 /proc/3165/cwd -> /var/lib/clamav

где 3165 — номер pid’a процесса.

2) Вывести все переменные процесса:

# cat /proc/2361/environ | strings
XDG_SESSION_ID=1
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=10.0.2.2 1383 22
SSH_TTY=/dev/pts/0
USER=vaal
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:
*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:
*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:
*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:
*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:
*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:
*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:
*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:
*.spx=00;36:*.xspf=00;36:
DOCKER_TLS_VERIFY=0
MAIL=/var/mail/vaal
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/vaal
LANG=ru_RU.UTF-8
SHLVL=1
HOME=/home/vaal
LOGNAME=vaal
SSH_CONNECTION=10.0.2.2 1383 10.0.2.15 22
LESSOPEN=| /usr/bin/lesspipe %s
XDG_RUNTIME_DIR=/run/user/1000
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/mc

3) Удалили файл, используемый процессом. Как восстановить файл?:

Попробовать поискать файл в каталоге /proc/PID/fd Почему так можно делать? Всё дело в том, что при удалении файла, который всё-таки открыт процессом, файл перестал быть виден в файловой системе, но не исчез, и окончательно удалён он будет только когда закроется последний ссылающийся на него дескриптор. Каталог /proc/PID/fd содержит символьные ссылки на все открытые процессом PID дескрипторы.

4) Связь между /proc и sysctl(взято с Linux-center):

Sysctl использует файлы в /proc/sys как индивидуальные переменные, которые могут быть изменены. К примеру, файл в /proc/sys, который представляет максимальное количество заголовков файлов в системе, /proc/sys/fs/file-max, представлен как fs.file-max. Этот пример требует некоторых дополнительных пояснений в записи sysctl. Так как sysctl может только изменять переменные в директории /proc/sys, то часть имени переменной обозначающая директорию отбрасывается. Другое изменение касается слэшей, которые заменяются на точки. Вот два простых правила для преобразования файлов в /proc/sys и переменных в sysctl:

  • Отбросьте /proc/sys от начала.
  • Замените слэши на точки в имени файла.

Эти два правила позволят вам преобразовать любой файл в /proc/sys в любое имя переменной в sysctl. Обычное преобразование имени файла в переменную:

/proc/sys/dir/file --> dir.file
dir1.dir2.file --> /proc/sys/dir1/dir2/file

Можно отобразить все переменные, доступные для изменения, используя команду sysctl -a. Переменные могут также быть изменены с помощью sysctl, которая выполняет ту же работу что и echo. Эта запись объясняет это:

sysctl -w dir.file="value"

Используя пример с file-max, мы можем изменить это значение на 16384, используя один из двух методов:

sysctl -w fs.file-max="16384"

или

echo "16384" > /proc/sys/fs/file-max

5) Максимальное количество процессов:

По умолчанию процессов 32768. Узнать текущее значение можно так:

#sysctl kernel.pid_max
kernel.pid_max = 32768

Изменить это число можно так:

#sysctl kernel.pid_max=256000
kernel.pid_max = 256000

Это возможно только на 64-битных системах. Такое ограничение связано с разрядностью 32-битного числа, которое не может превышать 32768. А поскольку эти лимиты определены как тип int, то соответственно действует такое ограничение. Если же вы попробуете изменить, то получите такое сообщение:

# sysctl kernel.pid_max=327600
error: "Invalid argument" setting key "kernel.pid_max"

6) Утилита lsof:

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

  • Список всех открытых файлов
$lsof

Показывает все открытые файлы текущего пользователя (если root — тогда все файлы) всеми процессами.

  • Какие процессы используют файл file
#lsof /path/to/file

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

  • Какие процессы/файлы использует пользователь user
#lsof -u user

Если хотите узнать информацию по нескольким пользователям, разделите их имена запятой. Для групп используйте конструкцию ‘-g groupname’

  • Какие процессы открыты программой prog_name
#lsof -c prog_name

Можно указывать неполное имя. [lsof] будет искать по указанному буквосочетанию. Если нужно узнать информацию для нескольких приложений, разделяйте их имена пробелом и перед каждым именем должно идти ‘-c’

  • Какие файлы открыты pid’ом NNN
#lsof -p NNN
  • Список всех открытых интернет сокетов
#lsof -i

Если нужно посмотреть только tcp сокеты, то после ‘i’ через пробел добавляем tcp. Аналогично и для udp.
Так же можно посмотреть и список всех unix сокетов:

#lsof -U
  • Просмотр ресурсов в realtime

Можно задать период обновления информации, например, 1 секунда:

#lsof -r 1 -u username

будет обновлять информацию об использованных пользователем username процессах, каждую секунду.

  • Вывод только pid’ов

По умолчанию, выводится таблица с колонками. Но если требуется вывести только сами pid’ы, можно воспользоваться такой командой:

#lsof -t -u username

7) Поиск всех pid’ов процесса:

Есть одна замечательная утилита pidof, которая позволяет найти все pid’ы связанные с определённым процессом. К примеру, найдём все pid’ы apache2:

# pidof apache2
9370 9369 9368 9367 9364 9362 9314 9280 9277 9268 4940

В большинстве дистрибутивов это обычный симлинк на /sbin/killall5:

#file /bin/pidof
/bin/pidof: symbolic link to `../sbin/killall5'

Быстрое копирование данных при помощи Python

Иногда необходимо быстро предоставить доступ к файлам на машине Linux. В случае, если на такой машине имеется установленный python, то можно запустить простой HTTP-сервер, который предоставит такой доступ. Для этого перейдём в директорию содержащую целевые файлы и выполним команду интерпретатора python, который откроет HTTP-сервер на порту 8080:

$ cd <source_dir>
$ python -m SimpleHTTPServer 8080

или таким образом:

$ cd <source_dir>
$ python3 -m http.server 8080

Ссылки

nixadmin.ru — копирование "на лету"
Резервное копирование базы данных и файлов по SSH
Работаем с процессами