Инструменты пользователя

Инструменты сайта


cookbookshell2

Have a Good Command

Знакомимся с cat

Читаем файл

cat file1 file2 file3 ...

Удаляем 2 и более пустые строки, оставляя одну.

cat -s file1

Записываем и воспроизводим терминальную сессию

script Записываем сессию и завершаем запись

script -t 2> timing.log -a output.session
type commands;
…
..
exit

-t 2> записывает тайминг
-a команды выполненные в сессии

scriptreplay воспроизводим запись сессии

scriptreplay -t timing.log -s output.session

-t файл тайминга
-s файл сессии

script -a -t 2> timing.log output.session
scriptreplay -s output.session -t timing.log

Поиск файлов и список файлов

Поиск всех файлов в директории

find base_path

Поиск файлов по регулярным выражениям

find /var/log/ -name "*.log"

Игнорируем регистр -iname

find . -iname "example*" -print

Или в условии поиска -o

find . \( -name "*.txt" -o -name "*.pdf" \) -print

Поиск в пути к файлу -path

find /home/users -path "*/slynux/*" -print
find /var/ -path "*/apache2/*"

Поиск с использованием регулярных выражений -regex

find . -regex ".*\(\.py\|\.sh\)$"

Обратить условие поиска !

 find /var/log/ ! -name *.log

Поиск основанный на глубине директории -maxdepth -mindepth

find /var/ -mindepth 2 -maxdepth 3 -name *.log

Поиск на основе типа файла -type

File typeType argument
Regular filef
Symbolic linkl
Directoryd
Character special devicec
Block deviceb
Sockets
FIFOp
find /root/script/ -type f

Поиск основанный на времени

Access time (-atime): It is the last timestamp of when the file was accessed by a user
Modification time (-mtime): It is the last timestamp of when the file content was modified
Change time (-ctime): It is the last timestamp of when the metadata for a file (such as permissions or ownership) was modified

Файлы модифицированные 2 дня назад.

find / -type f -mtime 2 | less

Файлы модифицированные за последние 2 дня.

find / -type f -mtime -2 | less

Файлы модифицированные более чем 2 дня назад.

find / -type f -mtime +2 | less

Все тоже касается времени в минутах -amin (access time) -mmin (modification time) -cmin (change time)

Время изменения больше, чем время изменения файла. -newer

find . -type f -newer file.txt -print
touch -t 05040000 /tmp/timestamp
find ~ -newer /tmp/timestamp

Поиск по владельцу, группе и доступу -user -group -perm

find / -user mysql
find / -group root
find ./ -type f -perm 744

Поиск по размеру файлов -size

find ~ -size 2k # поиск файлов =2 килобайт
find ~ -size +2k # поиск файлов >2 килобайт  
find ~ -size -2k # поиск файлов <2 килобайт
b512 byte blocks
cBytes
wTwo-byte words
kKilobyte (1024 bytes)
MMegabyte (1024 kilobytes)
GGigabyte (1024 megabytes)

Удаляем найденные файлы -delete

find /root -name *.tmp -delete

Передаем найденные файлы в другую команду -exec [comand] \;

find ./ -type f -perm 744 -exec cat {} \;

Исключаем из поиска -prune

find /var/log/ \( -name "apache2" -prune \) -o \( -type f \)

Вопросы по find

1.Найти все в директории root
2.Найти все файлы в директории /var/log с именем *.log
3.Найти все файлы в директории /var/log с именем *.log независимо от регистра
4.Найти все файлы в директории /var/log с именем *.log и *.gz
5.Найти все файлы в директории /var/log в пути к которым есть директория apache2
6.Найти все файлы в директории /var/log любым именем за исключением *.log
7.Найти все файлы в директории /var/log с глубиной директории 2
8.Найти все символические ссылки в /bin/
8.Найти все директории в /root/
9.Найти все файлы в директории /root/
10.Найти все файлы модифицированые 2 дня назад (3 часа назад)
11.Найти все файлы измененные мение 2 днй назад (10 часов назад)
12.Найти все файлы которые открывали мение 1 дня назад (мение 2 часов)
13.Найти все файлы владельца mysql
14.Найти все файлы с парвами доступа 755
15.Найти все файлы в директории /var/log больше 10 Мб
16.Найти в /etc/ файлы *.conf и скопировать их в /root/back

Xargs

Построчная передача вывода из команды

command | xargs

Разбиваем строку

$ cat example.txt # Example file
1 2 3 4 5 6
7 8 9 10
11 12

$ cat example.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12

$ cat example.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12

Пингуем адреса из файла

titov@uba:~$ cat example.txt
127.0.0.1 127.0.0.2 127.12.12.1
127.34.34.1
titov@uba:~$ cat example.txt | xargs -n1 ping -c1

Выбираем разделитель полей -d

$ echo "splitXsplitXsplitXsplit" | xargs -d X
split split split split
titov@uba:~$ echo "lololLlololLlololLlololLlololLlolol" | xargs -d L -n1
lolol
lolol
lolol
lolol
lolol
lolol

Передается вся строка -l

cat args.txt | xargs -l ./chcho

Позиционирование -I {}

root@uba:~# cat args.txt | xargs -I {} ./chcho -p {} -l
-p arg1 -l #
-p arg2 -l #
-p arg3 -l #

tr транслит

tr [options] set1 set2
echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'

Удаляем символы -d

echo "Hello 123 world 456" | tr -d '0-9'
Hello world

Все символы за исключением

root@uba:~# echo "asf5ag6gasga323asdf2" | tr -d -c '0-9 \n'
563232

Классы символов

alnumAlphanumeric characters
alphaAlphabetic characters
cntrlControl (nonprinting) characters
digitNumeric characters
graphGraphic characters
lowerLowercase alphabetic characters
printPrintable characters
punctPunctuation characters
spaceWhitespace characters
upperUppercase characters
xdigitHexadecimal characters
tr [:class:] [:class:]
tr '[:lower:]' '[:upper:]'

Верефикация и чексуммы

Получение чек суммы по алгоритму md5

root@uba:~# md5sum cr
d8de3ec44a4375cf6a49e835acdbb416  cr

Проверка check суммы

root@uba:~# md5sum cr > file_sum.md5
root@uba:~# md5sum -c file_sum.md5
cr: ЦЕЛ
md5sum -c file_sum.md5
cr: ПОВРЕЖДЁН
md5sum: ПРЕДУПРЕЖДЕНИЕ: НЕ совпала 1 вычисленная контрольная сумма

Чек сумма всех файлов в директории

find /root/ -type f | xargs -l md5sum >> check_sum_root.md5

Криптография и хэши

Кодирование и декодирование файлов

mcrypt cr #кодируем файл
mdecrypt cr.nc # декодируем файл
mcrypt -d cr.nc # декодируем файл

Кодирование и декодирование файла с помощью base64.
base64 служит для представления бинарных данных в виде последовательности ASCII символов

root@uba:~/script# cat base
Hello!!!
root@uba:~/script# base64 base > base_64
root@uba:~/script# cat base_64
SGVsbG8hISEK
root@uba:~/script# base64 -d base_64
Hello!!!

Получаем рандомную последовательность из 9 символов

base64 /dev/urandom | head -n1 | cut -c1-9

SHA Secure Hash Algorithm — алгоритм криптографического хеширования.

root@uba:~/script# echo "hello" | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f  -
root@uba:~/script# echo "hello" | sha256sum
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03  -
root@uba:~/script# echo "hello" | sha512sum
e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629  -

Сортировка, уникальные строки и дубликаты

Сортируем данные

sort 

Только уникальные записи

uniq

Имена временных файлов и рандомные числа

Создаем временный файл

$ filename=`mktemp`
$ echo $filename
/tmp/tmp.8xvhkjF5fH

Создаем временную папку

dirname=`mktemp -d`
root@uba:~/script# echo $dirname
/tmp/tmp.gy9OPX9axk

Генерируем имя файла без его создания

$ tmpfile=`mktemp -u`
$ echo $tmpfile
/tmp/tmp.RsGmilRpcT

Делаем временный файл по шаблону

root@uba:~/script# mktemp test.XXXX
test.6qgX

Подставка параметров в интерактивный ввод

root@uba:~/script# cat readname
#!/bin/bash

read -p "Enter a number:" num
read -p "Enter name:" name

echo "You have entered" $num","$name
echo -e "1\nhello\n" | ./readname

Либо

root@uba:~/script# echo -e "1\nhello\n" > input.data
root@uba:~/script# ./readname < input.data
You have entered 1,hello

Параллельные вычисления

#/bin/bash
#filename: generate_checksums.sh
PIDARRAY=()
for file in File1.iso File2.iso
do
md5sum $file &
PIDARRAY+=("$!")
done
wait ${PIDARRAY[@]}

Знак & позволяет убрать процесс в фон и запустить следующий, тем самым процессы выполняются параллельно.

cookbookshell2.txt · Последние изменения: 2015/10/06 09:53 — sander