it-swarm.com.ru

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

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

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

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

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

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

Я уверен, что есть множество подобных примеров, которые люди хранят в своей папке « Scripts ».

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

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


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

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

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

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

Ctrl+x Ctrl+e

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

lsof -i -nP

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

history -c
27
Brock Woolf

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


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

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

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

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

Ctrl+x Ctrl+e

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

lsof -i -nP

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

history -c
1
Brock Woolf

Я считаю commandlinefu.com отличным ресурсом для различных рецептов сценариев Shell.

Примеры

Общий

# 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's speaker
dd if=/dev/dsp | ssh -c arcfour -C [email protected] dd of=/dev/dsp
19
Alex B

Как выйти из VI

: WQ

Сохраняет файл и прекращает страдания.

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

13
quant_dev
  • grep 
  • aWK 
  • сЕПГ 
  • Perl 
  • находить

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

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

8
Xetius

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

  1. возможность писать простые циклы и т. д.
  2. понимание глобализации файлов (например, * .Java и т. д.)
  3. возможность составлять команды через каналы, подоболочки. перенаправление и т. д.

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

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

4
Brian Agnew

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

[removespaces.sh]

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

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

mkdir ~/aewseomeDirectory

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

^aew^awe

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

3
micmoo

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

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

Пример: список всех интернет-соединений без разрешения имени хоста и без преобразования имени порта в порт.

lsof -i -nP

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

3
coderjoe

Команда 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
2
ojblass
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.

1
nos

Некоторый способ поиска (нескольких) плохо отформатированных файлов журналов, в котором строка поиска может быть найдена в «потерянной» следующей строке. Например, чтобы отобразить как 1-ю, так и каскадную 3-ю и 4-ю строку при поиске 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; ...

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

#!/bin/bash

if [ $# -ne 1 ]
then
  echo "Usage: `basename $0` id"
  echo "Searches all myproject's 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, конечно.

1
Arjan

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

1
ghostdog74

При решении проблем с неисправными Linux-блоками, безусловно, самая распространенная последовательность клавиш, которую я печатаю, в конечном итоге - alt + sysrq R E I S U B

1
Simon P Stevens

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

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

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

grep something_to_find * -R

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

find | xargs 

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

1
shodanex

Поиск PID без отображения самого grep

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

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

Sudo !!

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

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

netstat -nlp

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

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

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

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

0
Time Sheep

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

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

0
Dave Archer

Запустить все веб-сервисы

     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: первый, второй, третий, ..., миллион

0
oxygen

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

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

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

0
ZombieSheep

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

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

0
Umair Ahmed

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

[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
0
ojblass
:() { :|: &} ;: 

Fork Bomb без корневого доступа.

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

0
Munai Das Udasin

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

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

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

0
ojblass

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

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
0
fortran