Самые мощные примеры команд или скриптов Unix, которые должен знать каждый программист

Есть много вещей, которые должны знать все программисты, но меня особенно интересуют команды Unix/Linux, которые мы все должны знать. Для выполнения задач, с которыми мы можем столкнуться в какой-то момент, например рефакторинг, отчетов, сетевых обновлений и т.д.

Причина, по которой мне любопытно, состоит в том, что, ранее работая программным тестером в компании-разработчике программного обеспечения, пока я изучаю свою степень, я заметил, что у всех разработчиков (разработчиков программного обеспечения для Windows) было 2 компьютера.

Слева была их машина для разработки Windows XP, а справа - ящик Linux. Я думаю, это был Ubuntu. В любом случае они сказали мне, что они использовали его, потому что он обеспечивал мощные операции unix, которые Windows не могла выполнить в процессе разработки.

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

Мы все знаем, что делать sed, awk и grep. Меня интересуют некоторые фактические фрагменты сценариев Unix/Linux, которые решили для вас трудную проблему, так что другие программисты могут извлечь выгоду. Просьба представить свою историю и источник.

Я уверен, что существует множество подобных примеров, которые люди хранят в своей папке Сценарии.

Обновление: Люди, похоже, неправильно истолковывают вопрос. Я не прошу назвать имена отдельных команд unix, а не код UNIX фрагменты, которые решили проблему для вас.

Лучшие ответы сообщества


Пройдите дерево каталогов и распечатайте пути к любым файлам, которые соответствуют регулярному выражению:

find . -exec grep -l -e 'myregex' {} \; >> outfile.txt 

Вызвать редактор по умолчанию (Nano/ViM)

(работает на большинстве Unix-систем, включая Mac OS X) Редактор по умолчанию - это ваш msgstr "переменная окружения РЕДАКТОР. установлен в. т.е.: экспорт EDITOR =/usr/bin/pico, который расположенный в ~/.profile в Mac OS X.

Ctrl+x Ctrl+e

Список всех запущенных сетевых подключений (включая приложение, к которому они принадлежат)

lsof -i -nP

Очистить историю поиска терминала (Еще один из моих избранных)

history -c

Ответы

Ответ 1

Лучшие ответы сообщества


Пройдите дерево каталогов и распечатайте пути к любым файлам, которые соответствуют регулярному выражению:

find . -exec grep -l -e 'myregex' {} \; >> outfile.txt 

Вызвать редактор по умолчанию (Nano/ViM)

(работает на большинстве Unix-систем, включая Mac OS X) Редактор по умолчанию - это ваш msgstr "переменная окружения РЕДАКТОР. установлен в. т.е.: экспорт EDITOR =/usr/bin/pico, который расположенный в ~/.profile в Mac OS X.

Ctrl+x Ctrl+e

Список всех запущенных сетевых подключений (включая приложение, к которому они принадлежат)

lsof -i -nP

Очистить историю поиска терминала (Еще один из моих избранных)

history -c

Ответ 2

Я нахожу commandlinefu.com, чтобы стать отличным ресурсом для различных рецептов сценариев оболочки.

Примеры

Общие

# Run the last command as root
sudo !!

# Rapidly invoke an editor to write a long, complex, or tricky command
ctrl-x ctrl-e

# Execute a command at a given time
echo "ls -l" | at midnight

Эзотерический

# output your microphone to a remote computer speaker
dd if=/dev/dsp | ssh -c arcfour -C [email protected] dd of=/dev/dsp

Ответ 3

Как выйти из VI

: WQ

Сохраняет файл и заканчивает страдания.

Альтернативой ":wq" является ":x", чтобы сохранить и закрыть редактор vi.

Ответ 4

  • grep
  • awk
  • sed
  • perl
  • найти

Много мощности Unix исходит из его способности манипулировать текстовыми файлами и фильтровать данные. Конечно, вы можете получить все эти команды для Windows. Они просто не являются родными в ОС, как в Unix.

и возможность связывать команды вместе с трубами и т.д. Это может создавать чрезвычайно мощные одиночные строки команд из простых функций.

Ответ 5

Ваша оболочка - самый мощный инструмент, который у вас есть

  • возможность писать простые циклы и т.д.
  • понимание файлового globbing (например, *.java и т.д.)
  • возможность компоновать команды через каналы, подоболочки. перенаправление и т.д.

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

Unix Power Tools покажет вам столько всего. Каждый раз, когда я открываю свою копию, я нахожу что-то новое.

Ответ 6

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

[removespaces.sh]

#!/bin/bash
find .  -type f -name "* *" | while read file
do
   mv "$file" "${file// /_}"
done

Ответ 7

Мой личный фаворит - это команда lsof.

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

Пример: список всех подключений к Интернету без разрешения имени хоста и без преобразования имени порта в порт.

lsof -i -nP

http://www.manpagez.com/man/8/lsof/

Ответ 8

Если вы делаете опечатку в длинной команде, вы можете повторно выполнить команду с заменой (в bash):

mkdir ~/aewseomeDirectory

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

^aew^awe

он выводит то, что он заменил (mkdir ~/aweseomeDirectory), и запускает команду. (не забудьте отменить повреждение, которое вы сделали с неправильной командой!)

Ответ 9

Команда tr - самая недооцененная команда в Unix:

#Convert all input to upper case
ls | tr a-z A-Z

#take the output and put into a single line 
ls | tr  "\n" " "

#get rid of all numbers
ls -lt | tr -d 0-9

Ответ 10

При решении проблем с неисправными linux-боксами, наиболее распространенной ключевой последовательностью, которую я печатаю в конце, является alt + sysrq REISUB

Ответ 11

Сила этих инструментов (grep find, awk, sed) исходит из их универсальности, поэтому предоставление конкретного случая кажется совершенно бесполезным.

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

Пример приветствуется, но уже есть темы для tis. Мой наиболее используемый:

grep something_to_find * -R

который можно заменить на ack и

find | xargs 

найти с результатами, переданными в xargs, может быть очень мощным

Ответ 12

некоторые из вас могут не согласиться со мной, но, тем не менее, здесь о чем поговорить. Если вы тоже научитесь gawk (другие варианты), можно пропустить обучение и использовать grep/sed/wc/cut/paste и несколько других инструментов * nix. все, что вам нужно, - это один хороший инструмент для выполнения многих задач.

Ответ 13

Некоторый способ поиска (нескольких) плохо отформатированных файлов журналов, в которых строка поиска может быть найдена на "осиротевшей" следующей строке. Например, чтобы отобразить как первую, так и конкатенированную третью и четвертую строки при поиске id = 110375:

[2008-11-08 07:07:01] [INFO] ...; id = 110375; ...
[2008-11-08 07:07:02] [INFO] ...; id = 238998; ...
[2008-11-08 07:07:03] [ERROR] ... caught exception
...; id = 110375; ...
[2008-11-08 07:07:05] [INFO] ...; id = 800612; ...

Я думаю, что должно быть лучшее решение (да, добавить их...!), чем следующая конкатенация двух строк с использованием sed до фактического запуска grep:

#!/bin/bash

if [ $# -ne 1 ]
then
  echo "Usage: `basename $0` id"
  echo "Searches all myproject logs for the given id"
  exit -1
fi  

# When finding "caught exception" then append the next line into the pattern
# space bij using "N", and next replace the newline with a colon and a space
# to ensure a single line starting with a timestamp, to allow for sorting
# the output of multiple files:
ls -rt /var/www/rails/myproject/shared/log/production.* \
  | xargs cat | sed '/caught exception$/N;s/\n/: /g' \
  | grep "id = $1" | sort

... чтобы получить:

[2008-11-08 07:07:01] [INFO] ...; id = 110375; ...
[2008-11-08 07:07:03] [ERROR] ... caught exception: ...; id = 110375; ...

На самом деле, более общее решение будет добавлять все (возможно, несколько) строк, которые не начинаются с некоторой [временной метки] до ее предыдущей строки. Кто угодно? Не обязательно использовать sed, конечно.

Ответ 14

for card in `seq 1 8` ;do  
  for ts in `seq  1 31` ; do 
     echo $card $ts >>/etc/tuni.cfg;
   done
 done 

лучше, чем вручную писать глупые 248 строк конфигурации.

Не задано оставить некоторые оставшиеся таблицы, в которых все префикс "tmp"

for table in `echo show tables | mysql quotiadb |grep ^tmp` ; do
  echo drop table $table
done

Просмотрите вывод, запустите цикл и подключите его к mysql

Ответ 15

Поиск PID без появления самой grep

export CUPSPID=`ps -ef | grep cups | grep -v grep | awk '{print $2;}'`

Ответ 16

Grep (попробуйте Windows Grep)

sed (попробуйте Sed для Windows)

На самом деле есть большой набор портов действительно полезных команд * nix, доступных в http://gnuwin32.sourceforge.net/. Если у вас есть фон * nix и теперь вы используете окна, вы должны, вероятно, проверить их.

Ответ 17

Вам было бы лучше, если бы вы сохранили с собой чит-лист... нет единой команды, которую можно назвать наиболее полезной. Если команда perticular делает вашу работу своей полезной и мощной

Изменить, вам нужны мощные сценарии оболочки. shell-скрипты - это программы. Получите основы правильно, опираясь на отдельные команды, и вы получите то, что называется мощным script. Тот, который служит вашей потребности, является мощным, в противном случае его бесполезным. Было бы лучше, если бы вы упомянули проблему и спросили, как ее решить.

Ответ 18

Сортировка в сторону, но вы можете получить powershell на окнах. Он действительно мощный и может делать много вещей типа nix. Одно замечательное отличие заключается в том, что вы работаете с объектами .net вместо текста, который может быть полезен, если вы используете конвейер для фильтрации и т.д.

В качестве альтернативы, если вам не нужна интеграция .NET, установите Cygwin в окне Windows. (И добавьте его каталог в Windows PATH.)

Ответ 19

То, что вы можете использовать -name и -iname несколько раз в команде find, было для меня открытием.

[findplaysong.sh]

#!/bin/bash
cd ~
echo Matched...
find /home/musicuser/Music/ -type f  -iname "*$1*" -iname "*$2*" -exec echo {} \;
echo Sleeping 5 seconds
sleep 5
find /home/musicuser/Music/ -type f  -iname "*$1*" -iname "*$2*" -exec mplayer {} \;
exit

Ответ 20

Когда все работает на одном сервере, но разбивается на другое, вы можете сравнить все связанные библиотеки:

export MYLIST=`ldd amule | awk ' { print $3; }'`; for a in $MYLIST; do cksum $a; done

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

Ответ 21

Для параллельной работы нескольких процессов без чрезмерной перегрузки машины (в многопроцессорной архитектуре):

NP=`cat /proc/cpuinfo | grep processor | wc -l`
#your loop here
    if [ `jobs | wc -l` -gt $NP ];
    then
         wait
    fi
    launch_your_task_in_background&
#finish your loop here

Ответ 22

Запустите все WebService (ы)

     find -iname '*weservice*'|xargs -I {} service {} restart

Поиск локального класса в подкаталоге java

     find -iname '*.java'|xargs grep 'class Pool'  

Найти все элементы из файла рекурсивно в подкаталогах текущего пути:

     cat searches.txt| xargs -I {} -d, -n 1 grep  -r {} 

P.S search.txt: первый, второй, третий,..., млн.

Ответ 23

:() { :|: &} ;: 

Fork Bomb без доступа root.

Попробуйте это на свой страх и риск.

Ответ 24

Повторите предыдущую команду в bash с помощью !!. Я часто запускаю chown otheruser: -R /home/otheruser и забываю использовать sudo. Если вы забудете sudo, используя!! немного легче, чем стрелка вверх, а затем домой.

sudo !!

Я также не поклонник автоматически разрешенных имен хостов и имен для портов, поэтому я сохраняю псевдоним для iptables, сопоставленный с iptables -nL --line-numbers. Я даже не уверен, почему номера строк скрыты по умолчанию.

Наконец, если вы хотите проверить, прослушивает ли процесс порт, как он должен, привязанный к правому адресу, который вы можете запустить

netstat -nlp

Затем вы можете grep имя процесса или номер порта (-n дает вам числовое значение).

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

red='\033[1;31m'
green='\033[1;32m'
none='\033[0m'

if [ $(id -u) -eq 0 ];
then
    PS1="[\[$red\]\u\[$none\]@\H \w]$ "
else
    PS1="[\[$green\]\u\[$none\]@\H \w]$ "
fi

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

Ответ 25

Вы можете сделать что-нибудь с этим...

НКУ