Linux Основные инструменты Unix
Вступление
В этом сеансе мы представили команды для поиска, поиска файлов и сжатия файлов вместе с другими распространенными инструментами, которые ранее не обсуждались. Хотя обсуждаемые здесь инструменты технически не считаются фильтрами, их можно использовать в трубах.
находить
Команда find может быть очень полезна при запуске канала для поиска файлов. Возможно, вы захотите добавить 2> / dev / null в командные строки, чтобы избежать загромождения экрана сообщениями об ошибках. Вот несколько примеров.
Найдите все файлы в / etc и поместите список в etcfiles.txt
find /etc > etcfiles.txt
Результат показан ниже.
datasoft @ datasoft-linux ~ $ cat etcfiles.txt | Больше /так далее / И т.д. / ч /etc/pm/sleep.d /etc/pm/sleep.d/10_grub-common /etc/pm/sleep.d/10_unattended-upgrades-hibernate /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/power.d /etc/pm/config.d /etc/mtab.fuselock / И т.д. / л.с. /etc/hp/hplip.conf / И т.д. / ядро /etc/kernel/postrm.d /etc/kernel/postrm.d/initramfs-tools /etc/kernel/postrm.d/zz-update-grub /etc/kernel/postinst.d /etc/kernel/postinst.d/initramfs-tools /etc/kernel/postinst.d/update-notifier /etc/kernel/postinst.d/apt-auto-removal /etc/kernel/postinst.d/zz-update-grub /etc/kernel/postinst.d/pm-utils / И т.д. / insserv / и т.д. / insserv / переопределяет --Больше--
Найдите все файлы всей системы и поместите список в allfiles.txt.
find / > allfiles.txt
Найдите файлы, которые заканчиваются на .conf в текущем каталоге (и всех его подкаталогах).
find . -name "*.conf"
Результат показан ниже
datasoft @ datasoft-linux / $ find. имя "* .conf" | Больше найти: `./proc/37/map_files ': в доступе отказано найти: `./proc/37/fdinfo ': в доступе отказано найти: `./proc/37/ns ': в доступе отказано найти: `./proc/49/task/49/fd ': в доступе отказано найти: `./proc/49/task/49/fdinfo ': в доступе отказано найти: `./proc/49/task/49/ns ': в доступе отказано найти: `./proc/49/fd ': в доступе отказано найти: `./proc/49/map_files ': в доступе отказано найти: `./proc/49/fdinfo ': в доступе отказано найти: `./proc/49/ns ': в доступе отказано найти: `./proc/52/task/52/fd ': в доступе отказано найти: `./proc/52/task/52/fdinfo ': в доступе отказано найти: `./proc/52/task/52/ns ': в доступе отказано найти: `./proc/52/fd ': в доступе отказано найти: `./proc/52/map_files ': в доступе отказано найти: `./proc/52/fdinfo ': в доступе отказано найти: `./proc/52/ns ': в доступе отказано найти: `./proc/53/task/53/fd ': в доступе отказано найти: `./proc/53/task/53/fdinfo ': в доступе отказано найти: `./proc/53/task/53/ns ': в доступе отказано найти: `./proc/53/fd ': в доступе отказано найти: `./proc/53/map_files ': в доступе отказано найти: `./proc/53/fdinfo ': в доступе отказано найти: `./proc/53/ns ': в доступе отказано ...
Найдите файлы типа file (не каталог, труба и т. Д.), Заканчивающиеся на .conf.
find . -type f -name "*.conf"
Результат показан ниже
datasoft @ datasoft-linux / $ find. имя "* .conf" | Больше найти: `./proc/37/map_files ': в доступе отказано найти: `./proc/37/fdinfo ': в доступе отказано найти: `./proc/37/ns ': в доступе отказано найти: `./proc/49/task/49/fd ': в доступе отказано найти: `./proc/49/task/49/fdinfo ': в доступе отказано найти: `./proc/49/task/49/ns ': в доступе отказано найти: `./proc/49/fd ': в доступе отказано найти: `./proc/49/map_files ': в доступе отказано найти: `./proc/49/fdinfo ': в доступе отказано найти: `./proc/49/ns ': в доступе отказано ...
Найдите файлы каталога типа, которые заканчиваются на .bak.
find /data -type d -name "*.bak"
Результат показан ниже
datasoft @ datasoft-linux / $ find / data -type d -name "* .bak" | Больше find: `/ data ': нет такого файла или каталога
Найти файлы, которые новее, чем file42.txt
find . -newer file42.txt
Результат показан ниже
datasoft @ datasoft-linux / $ find. -новый файл42.txt | Больше найти: `file42.txt ': нет такого файла или каталога
Find также может выполнить другую команду для каждого найденного файла. Этот пример ищет файлы * .odf и копирует их в / backup /.
Find также может выполнить после вашего подтверждения еще одну команду для каждого найденного файла. В этом примере будут удалены файлы * .odf, если вы подтвердите его для каждого найденного файла.
find /data -name "*.odf" -exec cp {} /backup/ \;
datasoft @ datasoft-linux / $ find / data -name "* .odf" -exec cp {} / backup /; | найти: `/ data ': нет такого файла или каталога
разместить
Инструмент locate сильно отличается от find тем, что для поиска файлов используется индекс. Это намного быстрее, чем обход всех каталогов, но это также означает, что он всегда устарел. Если индекс еще не существует, его необходимо создать (как root в Red Hat Enterprise Linux) с помощью команды updatedb.
datasoft @ datasoft-linux /$ locate samba | more
/etc/samba
/etc/apparmor.d/abstractions/samba
/etc/dhcp/dhclient-enter-hooks.d/samba
/etc/pam.d/samba
/etc/samba/gdbcommands
/etc/samba/smb.conf
/etc/samba/tls
/usr/bin/samba-regedit
/usr/bin/samba-tool
/usr/lib/samba
/usr/lib/2013.com.canonical.certification:checkbox/bin/samba_test
/usr/lib/i386-linux-gnu/libsamba-credentials.so.0
/usr/lib/i386-linux-gnu/libsamba-credentials.so.0.0.1
/usr/lib/i386-linux-gnu/libsamba-hostconfig.so.0
/usr/lib/i386-linux-gnu/libsamba-hostconfig.so.0.0.1
/usr/lib/i386-linux-gnu/libsamba-policy.so.0
/usr/lib/i386-linux-gnu/libsamba-policy.so.0.0.1
/usr/lib/i386-linux-gnu/libsamba-util.so.0
/usr/lib/i386-linux-gnu/libsamba-util.so.0.0.1
/usr/lib/i386-linux-gnu/samba
/usr/lib/i386-linux-gnu/samba/auth
/usr/lib/i386-linux-gnu/samba/bind9
/usr/lib/i386-linux-gnu/samba/gensec
--More--
Большинство дистрибутивов Linux будут запускать updatedb один раз в день.
спать
Команда sleep используется для приостановки выполнения по меньшей мере на целое число секунд, указанное операндом времени. Следующий пример показывает шесть секунд сна.
datasoft @ datasoft-linux /$ sleep 6
datasoft @ datasoft-linux /$
время
Команда time может отображать, сколько времени требуется для выполнения команды. В следующем примере выполнение команды date занимает совсем немного времени.
datasoft @ datasoft-linux / $ time date Вт 5 авг 17:22:56 IST 2014 реальный 0m0.001s пользователь 0m0.000s sys 0m0.000s
В следующем примере команда sleep 5 выполняется пять реальных секунд, но потребляет немного времени процессора.
datasoft @ datasoft-linux /$ time sleep 5
real 0m5.001s
user 0m0.000s
sys 0m0.000s
Эта команда bzip2 сжимает файл и использует много процессорного времени.
datasoft @ datasoft-linux /$ time bzip2 text.txt
real 0m0.021s
user 0m0.000s
sys 0m0.000s
GZIP
Команда gzip используется для уменьшения размера именованных файлов с использованием кодировки Lempel-Ziv (LZ77).
datasoft @ datasoft-linux ~$ ls -lh temp.txt
-rw-rw-r-- 1 datasoft datasoft 22 Aug 2 14:36 temp.txt
datasoft @ datasoft-linux ~$ gzip temp.txt
datasoft @ datasoft-linux ~$ ls -lh temp.txt.gz
-rw-rw-r-- 1 datasoft datasoft 49 Aug 2 14:36 temp.txt.gz
Gunzip
Команда gunzip используется для возврата оригинального файла, который был сжат командой gzip
datasoft @ datasoft-linux ~$ gunzip temp.txt.gz
datasoft @ datasoft-linux ~$ ls -lh temp.txt
-rw-rw-r-- 1 datasoft datasoft 22 Aug 2 14:36 temp.txt
zcat - zmore
Текстовые файлы, сжатые с помощью gzip, можно просматривать с помощью zcat и zmore.
datasoft @ datasoft-linux ~$ head -4 temp.txt
four
three
two
datasoft @ datasoft-linux ~$ gzip temp.txt
datasoft @ datasoft-linux ~$ zcat temp.txt.gz | head -4
four
three
two
bzip2
Команда bzip2 используется для уменьшения размера именованных файлов с использованием алгоритма сжатия текста с сортировкой блоков Burrows-Wheeler и кодированием Хаффмана.
datasoft @ datasoft-linux ~$ bzip2 temp.txt
datasoft @ datasoft-linux ~$ ls -lh temp.txt.bz2
-rw-rw-r-- 1 datasoft datasoft 59 Aug 2 14:36 temp.txt.bz2
bunzip2
Файлы могут быть снова распакованы с помощью bunzip2.
datasoft @ datasoft-linux ~$ bunzip2 temp.txt.bz2
datasoft @ datasoft-linux ~$ ls -lh temp.txt
-rw-rw-r-- 1 datasoft datasoft 22 Aug 2 14:36 temp.txt
bzcat - bzmore
Аналогичным образом, bzcat и bzmore могут отображать файлы, сжатые с помощью bzip2.
datasoft @ datasoft-linux ~$ bzip2 temp.txt
datasoft @ datasoft-linux ~$ bzcat temp.txt.bz2 | head -4
four
three
two
Упражнение, практика и решение:
1. Объясните разницу между этими двумя командами. Этот вопрос очень важен. Если вы не знаете ответ, оглянитесь на главу по оболочке.
find /data -name "*.txt"
find /data -name *.txt
Когда * .txt заключен в кавычки, оболочка не будет его трогать. Инструмент поиска будет искать в / data все файлы, оканчивающиеся на .txt. Когда * .txt не указан в кавычках, оболочка может расширить его (когда в текущем каталоге существует один или несколько файлов, оканчивающихся на .txt). Поиск может показать другой результат или может привести к синтаксической ошибке .;
2. Объясните разницу между этими двумя утверждениями. Будут ли они оба работать, когда в / data есть 200 .odf файлов? Как насчет того, когда есть 2 миллиона файлов .odf?
find /data -name "*.odf" > data_odf.txt
find /data/*.odf > data_odf.txt
Первый поиск выведет все имена файлов .odf в / data и все подкаталоги. Оболочка перенаправит это в файл. Второй поиск выведет все файлы с именем .odf в / data, а также выведет все файлы, которые существуют в каталогах с именем * .odf (в / data). С двумя миллионами файлов командная строка будет расширена сверх максимума, который может принять оболочка. Последняя часть командной строки будет потеряна.
3. Напишите команду find, которая находит все файлы, созданные после 30 января 2010 года.
Код:
>touch -t 201001302359 marker_date
find . -type f -newer marker_date
There is another solution :
find . -type f -newerat "20100130 23:59:59"
}
4. Напишите команду find, которая находит все файлы * .odf, созданные в сентябре 2009 года.
Код:
touch -t 200908312359 marker_start
touch -t 200910010000 marker_end
find . -type f -name "*.odf" -newer marker_start ! -newer marker_end
The exclamation mark ! -newer can be read as not newer.
5. Подсчитайте количество файлов * .conf в / etc и всех его подкаталогах.
Код:
find /etc -type f -name '*.conf' | wc -l
6. Две команды, которые делают одно и то же: скопируйте файлы * .odf в / backup /. Что было бы
причина заменить первую команду второй? Опять же, это важный вопрос.
cp -r /data/*.odf / backup /
find /data -name "*.odf" -exec cp {} /backup/ \;
cp -r /data/*.odf /backup/
find /data -name "*.odf" -exec cp {} /backup/ \;
Первый может дать сбой, если в одной командной строке слишком много файлов.
7. Создайте файл с именем loctest.txt. Можете ли вы найти этот файл с помощью locate? Почему бы и нет ? Как сделать так, чтобы найти этот файл?
Вы не можете найти это с помощью locate, потому что его еще нет в индексе. updatedb
8. Используйте find и -exec для переименования всех файлов .htm в .html.
datasoft @ datasoft-linux ~$ find . -name '*.htm'
./one.htm
./two.htm
datasoft @ datasoft-linux ~$ find . -name '*.htm' -exec mv {} {}l \;
datasoft @ datasoft-linux ~$ find . -name '*.htm*'
./one.html
./two.html
9. Введите команду date. Теперь отобразите дату в формате ГГГГ / ММ / ДД.
Код:
date +%Y/%m/%d
10. Введите команду cal. Покажите календарь 1582 и 1752. Заметили что-нибудь особенное?
Cal 1582
Календари разные в зависимости от страны. Проверьте http://linux-training.be/files/
studentfiles / dates.txt
Предыдущая: Linux - Фильтры
Далее: регулярные выражения Linux
Новый контент: Composer: менеджер зависимостей для PHP , R программирования