хостинг linux
Выполнение произвольных команд
Это часто бывает полезно выполнить определенную команду (или команд) на соответствие
Файлы открытые найти. Вы можете использовать опцию "-Exec" действия для этого. Вот пара
простой (но полезное) Примеры:
Найти / TMP-MTIME 7-Exec RM-RF () \;
Найти / VAR / Log-MTIME 7-Exec GZIP () \;
Синтаксис-Exec немного странно. После-Exec, вы указываете в командной строке вы
хотите запустить, но вы использовать фигурные скобки ("{}") чтобы указать, где в командной строке, вы хотите
Найти, чтобы заменить соответствующие имена файлов. Команда после Exec должно быть
прекращается с "\;" (это возможно, что вы, возможно, другие действия или выражения, после --
Exec, хотя обычно "\;" это последнее, что на линии).
Например, на слайде полезно немного выражения для отображения названий файлов,
содержать конкретную строку, я часто использую эту возможность для поиска каталогов с исходным кодом
конкретному объекту. Обычно, конечно, Grep проявить совпадающие строки, но "Grep
-L "означает команду" отображать только имена файлов ".
16 linux хостинг 17
Повышение эффективности
Выясняется, что сначала найти пример на слайде довольно неэффективно, потому что найти
в конечном итоге работает Grep на каждом отдельном файле, который кучу отдельно
казней Grep. Вместо этого, вы можете подумать трубопроводов выходе "найти ... --
Печать "в xargs программы. xargs поглощает имена файлов из своего стандартного
ввода и использует их, чтобы построить и выполнить команду строк при условии, встроенных в
список аргументов длина ограничений в оболочке. Результатом является то, что Grep команда будет конца
до выполняется много раз меньше, xargs, чем он будет с командой найти.
Вы можете увидеть увеличение производительности с использованием встроенных в "Time" функции в оболочке,
это полезно для быстрого критериев делать так:
# Время найти / USR / включить типа F \
Grep-Exec-L PATH_MAX () \;> / Dev / NULL
реальный
0m11.488s
Пользователь
0m1.570s
SYS
0m10.732s
# Время найти / USR / включить типа F-печать | \
xargs Grep-L PATH_MAX> / Dev / NULL
реальный
0m0.300s
Пользователь
0m0.076s
SYS
0m0.270s
Что интересно, для меня является то, что "найти ... | xargs ..." Пример действительно представляется
быть немного быстрее, чем "Grep-RL ...":
# Время Grep-RL PATH_MAX / USR / включать> / Dev / NULL
реальный
0m0.437s
Пользователь
0m0.074s
SYS
0m0.345s
Конечно, не все версии Unix судно с Grep команда, которая поддерживает "-R"
опции все равно ...
17 linux хостинг 18
я в `след-З 1 12`; делать
MKDIR-P / Архив / Журналы / $ I
готово
Loops
для файла в формате *. GZ; делать
Эхо ===== $ файла
ZCAT $ файл | Grep Foo
готово
а:; делать
Netstat в систему | Grep eth0
сон 5
готово
Loop конструктов
Найти программу существенно interator над каталогами файлов, но иногда вы
нуждаются в более общем построить цикл. Баш на самом деле имеет несколько различных типов петель
доступны, но мы будем просто обсуждать пару из них.
Наиболее распространенный тип цикла я нахожусь делать в командной строке это "FOREACH"
Тип цикле, который обрабатывает список имен файлов и других ценностей. Как вы можете видеть на первом
Например, вы можете использовать оболочку шариков Wildcard для создания списков имен файлов для обработки. Этот первый
Пример идиома я часто используемых для поиска конкретной строки в коллекциях
сжатый / сжатыми файлами. Эхо заявлением выходов легко узнаваем заголовке
до соответствия выходе из каждого файла, так что легко увидеть, какой файл (ы) матчи
возникать дюйма
Во втором примере мы используем след команду, чтобы создать список числовых значений
от 01 до 12 ( "-W" опция заставляет далее производить соответствуют ширине ценностей, нулевой заполнения
в случае необходимости). Затем мы используем, чтобы заменить обратные кавычки выходе далее как список значений
в нашем цикле
18 linux хостинг 19
Фактически, Bash имеет С-стиля для петлю, чтобы мы могли делать это без следа:
для ((i = 0; $ i <= 12; я ++)); делать
MKDIR-P / Архив / Журналы / `Е% 02d $ I`
готово
Честно говоря, я думаю, что вариант с последующими в обратные кавычки много яснее, но Ваша оценка может
варьироваться.
Просто завязать бантом на этой дискуссии, я хотел бы отметить, что это действительно довольно бедные
Пример поскольку вы можете сделать это без цикла на всех:
MKDIR-P / Архив / журналы
CD / Архив / журналы
MKDIR `след-W 1` 12
Иногда бесконечные циклы, являются полезными. Последний пример показывает, идиома, что я часто используемых
Когда я хочу, чтобы следить за вывод команды на регулярной основе в течение длительного периода
время. Например, предположим, что вы хотели посмотреть, сколько трафика идет из ваших
Ethernet-интерфейс. Вы можете использовать последнюю петлю на слайде, чтобы посмотреть Netstat выходной
для этого интерфейса на пять секунд.
19 linux хостинг 20
Развлечения с головой и хвостом
Смотрите первые / последние несколько строк файла:
голова -50 / ETC / Passwd
Хвост -50 / VAR / вход / Secure
Хвост 30 / ETC / Passwd
Новые файлы в директории:
LS-T | голову -1
Новейшие файле, долгое листинг (2
й
строки):
LS-LT | голову -2 | хвоста 1
И, конечно же, "хвост-Р" является полезной для лог-файлов ...
голову и хвост
Иногда бывает полезно взглянуть на только первые несколько (голова) или последние несколько (хвост) линий
файл. Или вы можете перенаправить вывод команды в голову или хвост по мере необходимости. Это
Часто значительное улучшение производительности, поскольку строки, которые вы не смотрите на может быть
отбрасываются, вместо того, которое будет отображаться в окне терминала.
По умолчанию, голова и хвост вернется 10 видов продукции, но как вы можете видеть из первых
несколько примеров можно указать более или менее линия продукции, чем по умолчанию. Вообще-то,
Хвост позволяет указать, либо - получить последние строк файла или + пропустить
первой линии и отображения остальных.
"LS-T | голову -1" является полезным языком для получения последних измененных файлов в
каталоге ( "LS-T" сортирует Ls продукции на MTIME). Следующий пример показывает, как можно
Труба "голова - " в "хвосте -1", чтобы извлечь й линии выхода в данном случае
Вторая линия выхода из "LS-LT", которая является подробным перечнем за последний
измененных файлов в каталоге (первая строка вывода заголовков). Собственно, это плохо
Например, поскольку проще получить ту же информацию будут использовать "-R"
возможность Ls и вывода списка файлов в обратном порядке, а затем просто использовать "LS-LRT |
Хвост -1 ".
20 linux хостинг 21
"хвост-Р" является полезной для просмотра файлов журнала растущие как он будет постоянно следить за конец
файла и отображения новых линий по мере их добавления в файл (остановить программу
попадания -C в любое время). Версия GNU хвоста действительно достаточно умны, чтобы
определить, когда файл журнала была повернута и перехода к новому файлу журнала, но
Версия хвост на взрослых, проприетарных систем Unix могут не иметь этой возможности.
21 linux хостинг 22
Cut против AWK
Cut хорошо работает для сильно разделителями данных:
Cut-f1, 5-D: / и т.д. / Passwd
AWK лучше работает для произвольного разделенных пробелами данные:
PS-EF | AWK '(PRINT $ 2)'
Cut против AWK
Это часто полезно вывести частности поля из строк ввода, и наиболее распространенных
инструменты командной строки для этого в Unix вырезаны и AWK. разрезе наиболее полезна, когда
Данные, которые вы имеете дело с сильно разделителями, как и в / ETC / Passwd файла, в котором каждый
Поля разделяются двоеточиями. В первом примере на слайде, мы потянув за первый (User
название) и пятой (полное имя пользователя, или GECOS) поле с / ETC / Passwd. Поля будут
двоеточиями в выходной:
# Cut-f1, 5-D: / и т.д. / Passwd
Root: корневую
ОГРН: бен
Демон: Демон
...
Обратите внимание, что Cut также позволяет выбрать набор символов ( "-C3-7"), но я не нахожу
себя, воспользовавшись этой функцией, которая часто.
22 linux хостинг 23
С другой стороны, есть очень много файлов и выхода команды в Unix, которые являются
разделяются любым количеством пробелов. Вырезать не занимается такого рода входной очень
хорошо, но этот вид разбора является именно то, что AWK была разработана делать. AWK, очевидно,
полномасштабный язык сценариев в своем собственном праве, но мы просто ограничиться простым AWK
идиомы, которые полезны в командной строке.
В самом простом, Awk просто распадается каждая строка ввода на пробелы и делает
различных областях доступны в пронумерованных переменных $ 1, $ 2, и так далее. Так что если вы хотите всех
идентификаторы процессов (вторая колонка) от некоторых PS выходной, просто направить вывод PS в "AWK
'(PRINT $ 2)' ". Обычно необходимым процитировать AWK кода для защиты от
интерполяция оболочкой.
23 linux хостинг 24
Подробнее AWK весело
Ищите дополнительные UID 0 счетов:
AWK-F: '($ 3 = = 0) (PRINT $ 1)' / ETC / Passwd
Счета Если пароль не установлен:
входов-P
# Доступны не на всех системах Unix
AWK-F: '($ 2 = = "") (PRINT $ 1)' / ETC / тень
"... | Grep ... | AWK ..." считаются глупыми:
убить `PS-EF | Grep SSHd | AWK '(PRINT $ 2)'`
убить `PS-EF | AWK '/ SSHd / (PRINT $ 2)'`
Однако, вы также можете использовать условные операторы с AWK, чтобы выбрать определенные строки из
производство и принимать меры только по этим направлениям. В первом примере мы печатью пользователь
Имена (поле 1) из всех строк в файле паролей, где UID (поле 3) равна нулю. Это может
поможет вам обнаружить, если нападавшие добавлены дополнительные счета суперпользователя в середине больших
Passwd файла. Обратите внимание, что AWK вполне способна решать с разделителями, чем другие
пробелы просто указать символ-разделитель, после-F (по аналогии с опцией-D с
Cut).
Обнаружение счета с нулевым записей паролем является еще одним хорошим процедуру аудита, а также на
Некоторые операционных системах Unix входа программа может помочь с этим. Однако, логины
недоступна на широкий спектр операционных систем Unix (Linux, как и BSDs), но может быть AWK
использоваться для выполнения той же вещи. Просто излучать имена пользователей по всем счетам, которые
NULL второе поле в / ETC / тень.
Отметим, что "PS-EF | Grep | AWK '(PRINT $ 2)'" представляет собой
очень часто идиома. Обычно увидеть использовать внутри обратные кавычки с убить команду
прекратить или иной процесс по имени. Тем не менее, Grep в это выражение на самом деле
тратой времени, поскольку AWK имеет встроенный шаблон. Поэтому, пожалуйста, не включайте Grep -
это больное место моей ...
24 linux хостинг 25
Сортировка
Вы можете отсортировать по алфавиту или численно, и по областям:
Сортировка / ETC / Passwd
Сортировать-Н-K3-T: / ETC / Passwd
А как насчет убыванию (обратно) числовой сортировки:
WC-L * | Сортировать-Nr
Sorting by inode is a useful forensic technique:
ls -li /usr/bin | sort -n
Сортировка
Earlier we saw that the ls command has options for sorting its output in various ways, but
Unix also provides a sort command for sorting arbitrary inputs. By default sort will do
an alphabetic sort, but "sort -n" provides numeric sorting instead. sort is actually a
very powerful program with a wide array of different options. For example, the second
example shows how you can specify a delimiter character (similar to cut again) and sort
on a particular field (in fact, sort actually lets you sort on multiple different fields at the
same time if you want to). The "-r" option allows you to "reverse" the default sort order
to do descending sorts.
The last example on the slide is an extremely useful forensic technique. "ls -li"
produces the typical "ls -l" output, but puts the inode number of each file in the first
column of output. Every time a file is replaced it gets a new inode, and since inodes are
generally assigned in numerical order, sorting the directory by inode will allow you to see
the order in which files in that directory have been installed.
The reason this is useful is that if an attacker installs a rootkit, the files installed by that
rootkit will all be sorted together in the command output and all have inodes in the same
small range of values. So even if the attacker has reset the timestamps on the files, you'll
still be able to quickly see the files that got replaced by the attacker.
25 linux хостинг 26
uniq
uniq eliminates duplicate lines from sorted data:
cut -f3 -d: /etc/passwd | sort | uniq
cut -f3 -d: /etc/passwd | sort –u
Use " uniq -c " to get a count of repetitions:
ps -ef | awk '{ print $1 }' | \
sort | uniq -c | sort -nr
cut -f3 -d: /etc/passwd | \
sort | uniq -c | grep -v ' 1 '
uniq
The uniq utility removes duplicate lines from its input. The trick is that the input needs to
be sorted first, since uniq will only remove duplicate lines that are right next to one
another in the input. So "… | sort | uniq" is a very common idiom– so common in
fact that most versions of sort have a -u option that does the same thing as "… |
sort | uniq". So do we really need a separate uniq program?
It turns out that uniq has a number of useful options. Perhaps the most useful is the '-c'
flag that displays a count of the duplicate lines from its input. In the middle example on
the slide we're using awk to pull all of the user names from the output of ps and piping
this to "sort | uniq -c" to get a count of the number of processes for each user.
"sort -nr" gives us a nice descending sort:
26 linux хостинг 27
$ ps -ef | awk '{ print $1 }' | sort | uniq -c | sort -nr
34 root
8 apache
7 hal
1 UID
1 rpc
1 ntp
1 mysql
1 dbus
The "1 UID" line is a result of the initial header line from ps. If we wanted to get rid of
that we could do something like "ps -ef | tail +2 | awk …", but the above is
good enough for most purposes.
In the last example on the slide, we're pulling the UID values out of the /etc/passwd
file and sending them to "sort | uniq –c". The last grep command discards any
UIDs where the count from "uniq –c" is 1. The resulting output, therefore, is any
duplicate UIDs (UIDs that appear more than once) in the passwd file (similar to "logins
-d" on Unix operating systems that support the logins command). Since you shouldn't
ever have duplicate UIDs in your password file, the output of this shell pipeline should
normally be null. But obviously it's very interesting to you if the output isn't null.
27 linux хостинг 28
Use " .[^.]* " to match dot files (not " .* ")
" less +G " lets you view files starting from the end
Focus in quickly on missing lines:
diff log1 log2 | grep '^>'
# xtra in log2
diff log1 log2 | grep '^<'
# xtra in log1
Quick substitutions with sed :
sed s/ksh/bash/ /etc/passwd >/etc/passwd.new
Job control (eg, su and ssh )…
" user@host " syntax useful for ssh / scp / rsync …
Other Random Tricks
.* Considered Harmful
Often you'll want to execute a command over all of the "dot files" in a directory (like a
user's home directory, for example). The problem is that you might be tempted to do
something like "chown -R hal .*". Unfortunately the ".*" ends up matching the
special ".." link in the directory and your command ends up getting applied to the parent
каталоге. And since we were using the recursive option ("-R") to the chown command in
this case, then not only that parent directory but also all sub-directories of that directory
end up getting owned by user hal. Usually this means that the home directories of all
users on the system are now owned by hal. Cleaning up from this kind of mistake can be
extremely painful because you can't simply assume that all files under a particular user's
home directory are owned by that user (although this is the first approximation that most
sites end up trying).
You really should train yourself to always use ".[^.]*" instead of ".*". "[^.]" is Unix
speak meaning "match any single character except dot".
[Actually, I had always used .[A-Za-z0-9]* for matching "dot files", but Jordan Wiens
suggested the shorter, more correct expression that appears here. Thanks for the tip,
Jordan!
--Hal]
28 linux хостинг 29
Don't Start at the Top
Very often I want to view the contents of a file, but start from the end of the file rather
than the beginning (log files are a good example of this). One of the advantages to less
over other similar programs like more and pg is that less allows you start viewing the
file from the end.
What's going on here is that less allows you to specify commands that you would
normally use inside of the less program on the command line after "+". Since "G" is the
command to jump to the end of the file, all you have to do is run "less +G
". This is so useful that I've actually turned it into an alias in my regular
окружающая среда.
What's the diff?
The normal output of diff shows you the differing lines with a "<" or ">" at the beginning
of each line to indicate which of the two files on the command-line the displayed line has
been taken from:
$ diff /etc/passwd /etc/passwd.OLD
39c39
< hal:x:500:500:Hal Pomeranz:/home/hal:/bin/bash
---
> hal:x:500:500::/home/hal:/bin/bash
Sometimes, however, it's useful to focus in on just the lines in one particular file. Использование
grep to filter on the greater-than/less-than symbols is a nice quick hack for doing this. Я
find this idiom particularly useful when comparing log file versions– like when an attacker
compromises your local log files but you have a secure, off-line copy to compare them
against.
[I should point out another Jordan Wiens suggestion here. My standard idiom was to
simply "diff … | grep '>'", but Jordan correctly points out that this will end up
matching lines where the greater-than/less-than symbol appears within a line of output.
Adding the carets ("^") to match "beginning of line" is more correct.
--Hal]
29 linux хостинг 30
Substitutions with sed
Like awk, sed is a powerful scripting language in its own right, but it's incredibly useful for
performing quick text substitutions in the middle of a shell pipeline. In the example on the
slide we're converting all ksh users in the passwd file to bash users.
Note that by default sed will only replace the first occurrence of the given string on each
line of input (similar to the caret operation on your command history). However, you can
use "s/…/…/g" to replace all instances of the string on each line.
Управление заданиями
You may be aware that you can use -Z to suspend a program running in a
particular terminal window. The bg command will force that process to then run in the
background, while fg will resume the process as normal.
What's interesting is that you can do something similar with the root shell you get from
running the su program. However, instead of using -Z you use the suspend
command:
$ /bin/su
Пароль:
# suspend
[1]+ Stopped
/bin/su
$ fg
/bin/su
#
This is extremely useful when you're having to switch back and forth between unprivileged
and superuser access all the time because it means you don't have to constantly be
entering the superuser password.
30 linux хостинг 31
You can even do something similar with remote SSH sessions. In the case of SSH, the
magic key sequence is "-Z" ("tilde -Z"):
[hal@bambi]$ ssh deer
hal@deer's password:
Last login: Wed …
[hal@deer]$ ^Z [suspend ssh]
[1]+ Stopped
ssh deer
[hal@bambi]$ fg
ssh deer
[hal@deer]$
Obviously, these techniques are somewhat less useful if you have multiple windows at
your disposal, but I find myself using them quite frequently when operating on remote
systems or on the text console of a machine.
Another SSH Hack
As long as we're on the subject of SSH, there's one more useful bit of command-line syntax
I wanted to point out. You're probably aware that you can do "ssh -l
" to log into a remote machine with a different user identity. But there's no
equivalent to the "-l" option if you're using scp or rsync to copy files to another
системы. So how would you copy files to a remote machine as another user?
It turns out that SSH very closely implements the command-line syntax of the old BSD
rlogin/rsh/rcp commands. This means that you can actually use the old-school
" @ " syntax in your ssh/scp/rsync command-lines:
[pomeranz@bobo]$ scp hal.key hal@deer:keyfile
hal@deer's password:
hal.key
100% 3221
3.2KB/s
00:00
31 linux хостинг 32
Can You Stump the Master?
Have you got a command-line conundrum that you've been unable to solve? Now's the
time to get some free consulting advice from your humble presenter.
Think you've got the command-line chops to beat the master? OK, hit me with your most
confounding command-line puzzle. It's on right here and now, grasshopper
хостинг linux