Подтвердить что ты не робот

Самые мощные примеры команд или скриптов 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
4b9b3361

Ответ 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

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

НКУ