Как снять флаг executable только для файлов в каталоге
Часто при совместном использовании windows возникает ситуация, когда на скопированных из fat-разделов файлах стоят executable флаги. Chmod -rx здесь не поможет, так как уберет разрешение на вход в каталоги. Но поможет вот эта команда:
find . -type f -exec chmod -x {} \;Эта команда снимет флажки x со всех файлов в текущем каталоге, но оставит в неприкосновенности каталоги, линки, пайпы и т.п. Вариация данной команды также может быть использована для следующей задачи.Поиск файлов по содержимому
Используя тот же принцип, мы можем искать файлы не только по имени и типу, но и по содержимому. Пример:
find ~ -exec egrep -i "password" /dev/null {} \;Данная команда найдет все файлы в домашнем каталоге, содержащие слово "password". Естественно, вместо этого слова можно вписать любое регулярное выражение.Echo и sudo
Довольно долго мучался по поводу следующей проблемы. Часто требуется выполнить команду такого рода:
sudo echo "hello world" >> /path/to/fileТ.е. от имени суперпользователя записать что-либо в файл иначе недоступный для записи. На это shell ругнется, сказав о нехватке прав. Это связанно с процессом выполнения данной команды: файл /path/to/file открывается от имени обычного пользователя, тогда как первая часть команды выполняется от рута. При перенаправлении stdout в открытый файл и возникает ошибка.
Ситуацию можно исправить следующим образом:
sudo sh -c 'echo "Hello world" >> /path/to/file'Однако, есть и более элегантный способ. Для этого понадобится команда tee, читающая stdin и пишушяя в stdout или файл:
echo "hello world" | sudo tee -a /path/to/fileЕсли необходимо перенаправление вида ">" вместо ">>", флажок "-a" не используем:
echo "hello world" | sudo tee /path/to/fileЛично мне эта конструкция экономит много полезных секунд :).
Создание и монтирование образа iso
Очень часто возникает необходимость смонтировать образ. Это делается довольно просто:
mount -o loop -t iso9660 filename.iso /mnt/isoКоманда монтирует образ filename.iso в директорию /mnt/iso. Однако, здесь есть оговорка: чтобы выполнить эту команду нужно быть рутом, а также должно быть настроено loopback устройство.
Создать образ с имеющегося диска также несложно:
dd if=/dev/cdrom of=file.isoПри необходимости создать образ из исходных файлов, можно воспользоваться утилитой mkisofs (пакет в gentoo - app-cdr/cdrtools):
mkisofs ~/file.iso /tmp/directoryгде file.iso - создаваемый образ, /tmp/directory - каталог с исходными файлами.
Копирование, локальное и не только
Кроме использования стандартной команды "cp" существует оригинальный способ копирования через пайпы (pipes):
cd /Команда скопирует каталог
tar -cf -| tar -C -xf -
tar -czf -Этот рецепт можно немного дополнить. При необходимости передачи файлов по сети из локальной машины на удаленную можно использовать следующую конструкцию:| tar -C -xzf -
cd /В результате получился некий аналог scp.
tar czf -| ssh tar xzf - -C
X Forwarding
Полезная и простая фича. Если нужно запустить на удаленной машине что-то, требующее X'ы, добавляем к стандартной команде ssh пару ключиков:
ssh -X -Yи спокойно запускаем графические приложения на удаленной машине remote_box.
Генерация паролей
И на десерт еще одна простая утилита. Если вы устали придумывать пароли, воспользуйтесь pwgen (app-admin/pwgen в портах gentoo).
Результатом будет нечто подобное:
Er5quaib huDoo3yo AhKie0oZ AeV2Retu Loh9Ahku AhRoh3ae Ooph6eeS pum2AochОсталась самая малость - запомнить выбранный пароль :).
Bohzei6u aeDe6ahk JieH4eiG aej8Iegh Ais5docu chahR4ku eigo2Gai xutaa3Vo
...
Удачи!