Questions and Hints about Linux software: Работа с файлами

Дек 17th, 2009 | Posted by | Filed under FreeBSD, Linux, Linux, PC, Q&H, Software, Software, Ubuntu, Unix and BSD

Права

  • chmod -R 741 /var/www/files — Сменить права рекурсивно (-R) во всей папке files на rwx r— —x, где: 4 – чтение (r), 2 – запись (w), 1 – исполнение (x)
  • chattr +Sai — Добавление атрибутов к файлу, синхронное изменение всех данных на диск, без кэширования (S); только добавление данных, удаление и переименование запрещено (a); запрещено удаление, изменение или переименование (i) (immutable).

Поиск

  • locate foo — Быстрый поиск по заранее проиндексированным файлам с помощью updatedb.
  • pinfo bash — Удобная замена info.
  • find /usr/bin -type f -mtime -10 -iname ‘*.log’ — Найти все файлы в ‘/usr/bin’, созданные или изменённые в течении последних 10 дней, с именем заканчивающимся на «.log» без учета регистра.
  • find /usr/project \( -name *.htm -o -name ‘*.html’ \) -exec enconv -V —convert-to=UTF-8 {} \; — Конвертировать найденные файлы в правильную кодировку.
  • find -iname ‘*.mp3’ -print0 | xargs -0 mid3iconv -eCP1251 —remove-v1 — Конвертация тегов в UTF-8 (должен быть установлен python-mutagen)
  • find /bakdir -name bak-20??-??-??.tar.gz | sort | head -n -7 | egrep -v 20[01][0-9]-[01][0-9]-01 | while read I ; do rm -v «$I» ; done — Вымученная изящная конструкция, по очистке бэкап архивов, которая оставляет файлы за последнюю неделю и каждое первое число. find выводит список наших бэкап файлов, формат которых bak-год-месяц-число.tar.gz, sort правильно сортирует, head передает все файлы, кроме последних 7-ми, egrep исключает файлы за первое число, конструкция while удаляет остальное.
  • ls /bakdir/bak-20??-??-??.tar.gz | head -n -7 | egrep -v 20[01][0-9]-[01][0-9]-01 | while read I ; do rm -v «$I» ; done — Еще более изящная и ресурсоемкая конструкция.

Вывод

  • tar -cjvf /home/user/etc_`date ‘+%Y-%m-%d’`.tar.bz2 /etc — (с)Запаковать в (f)tar-архив и (j)сжать bzip2 папку /etc c текущей датой в имени файла, с (v)подробным выводом.
  • tar -xzvf /home/user/Downloads/centerim-4.22.6.tar.gz -С /opt/ — (x)Распаковать (z)gzip-архив в /opt
  • tar —use-compress-program=xz -xvf kernel.txz — Распаковать xz-архив.
  • cat /etc/mail.conf | grep -v «#» | sed -e ‘/^ *$/d’ — Показать файл без комментариев и пустых строк (неоптимально).
  • egrep -v ‘^#|^$’ /etc/mail.conf — Показать файл без комментариев и пустых строк (оптимально:).
  • ls -f1 /var/log/packages/ | wc -l — Вывести количество строк (wc -c — байт).
  • diff -y httpd.conf httpd.con.new — Сравнение в две колонки.
  • diff -u httpd.conf httpd.con.new — Унифицированное cравнение (в один столбец, но читаемо). (рек. colordiff).
  • tail -n +5 /file — Вывести строки, начиная с 5-ой
  • egrep -o ‘([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}’ — Вывести только IP.
  • … | awk ‘{print($1″STRING»)}’ — Вывести то что в пайпе, добавив STRING.
  • awk ‘$1==»string» {print $2}’ file1 >> file2 — Считать файл file1 , если данные в первом столбце равны ‘string’ добавить в файл file2 данные из второго столбца этой строки
  • … | tr ‘\n’ ‘ ‘ — Заменить все переносы строки на пробелы.

Модификация

  • sed -i ‘s/foo/too/’ — Заменить foo на too.
  • sed -i ’14d’ /file — Удалить 14ю строку.
  • sed -i ‘/[Nn]etwork/d’ /file — Удалить строку содержащую Network или network.
  • sed -i ‘$ a \\n[mounts]\nuser root’ /etc/munin/config — Добавить в конец файла «[mounts]» затем перенос на новую строка и «user root».
  • sed ’14a\ echo \»graph_category logger\»‘ /etc/munin/plugins/command — После 14ой строки добавить «echo «graph_category logger»».
  • sed ‘1i \# vim: ft=ruby\n’ — Вставить в начало файла ‘# vim: ft=ruby’ и перенос строки.

(c) не мой. Копипаст с http://ru.wikibooks.org/wiki/Linux-hand-book

No comments yet.