Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Показать определённые файлы из каталога

Иcпользуя команду grep:

1) Получить список файлов из директории /etc, начинающиеся на t и заканчивающихся на d.
2) Получить список файлов из директории /etc, начинающиеся на t и содержащих в названии буквы h или e.
Ответ: EQUATRUM, где это так учат, что для выполнения стандартной файловой операции используют grep?
Bash
1
echo /etc/t*d
Вопрос: Вывести суммарный размер в байтах файлов каталога

Написать командный сценарий для интерпретатора bash, который
выводил бы суммарный размер в байтах файлов каталога,
указанного в качестве параметра к сценарию.
Написать командный сценарий для интерпретатора bash, который
на основании файла /etc/passwd выводил бы список, содержащий
имена пользователей и их домашние каталоги, а также число
пользователей, домашние каталоги которых находятся в каталоге
/home.
Ответ: Дкмаю поезд ушел а для интересующихся:
Bash
1
2
3
4
5
6
#!/usr/bin/env bash
if [ $1 ]; then
    find "$1" -maxdepth 1 -type f -printf "%s\n" | awk '{i+=$0} END {print i}'
else
    echo "usage: <prugramm> <directory>"
fi
и
Bash
1
2
3
#!/usr/bin/env bash
awk -F: '/home/{i+=1} $3>=1000 {print a+=1,$1,$6} END {print "число \
пользователей с домашней директорией в /home = ",i}' /etc/passwd
Добавлено через 12 минут
)) <prugramm> <programm> или позиционный параметр "$0"
Вопрос: Отобразить список, состоящий из первых букв имен файлов каталога

Делаю вот так:
Код Bash
1
2
zhenya@zhenya-Ideapad-Z570:/usr/include$ echo `find *.*`| cut -c 1
a
Не могу понять почему результат - первая буква первого файла.Помогите найти ошибку
Ответ: Достаточно
Код Bash
1
ls|cut -c1
На худой конец
Код Bash
1
ls *|cut -c1
Cra3y,
Но
Код Bash
1
ls *.*
даст вам только имена, имеющие точку внутри, тут вам не DOS/Windows :-)
Вопрос: Не передавать Rsync’ом уже переданные файлы

Здравствуйте,

Имеется скрипт(Rsync), который передает(синхронизирует) определенные файлы из клиента (Windows/Cygwin) на сервера (Unix). Скрипт каждые 2 минуты срабатывает(через Планировщик заданий). В папке на клиенте не всегда есть файлы т.е. иногда есть файлы, а иногда нет. Если файлы передаются они автоматом заносятся в exclude файл в скрипте и при появлении новых файлов старые уже не передаются.
Сейчас для удостоверения переданности файлов(чтобы заносить их в exclude) использую результат выполнения Rsync, но он мне возвращает всегда код 0 (успешно) даже, когда файлы не передаются и поэтому они ошибочно заносятся в exclude.
Как мне узнать были ли переданы файлы на клиент или нет, чтобы правильно заносить их в exclude?
Ниже выложу скрипт, который сейчас использую.

Кликните здесь для просмотра всего текста

Bash
1
2
3
4
rsync -avz -e ssh --exclude-from=/cygdrive/c/cygwin/home/ivanov/exclude.txt --log-file=/cygdrive/c/cygwin/home/ivanov/rsync.log /cygdrive/c/OUT/{txt*} 
user@192.168.X.X:/incoming
 
ls /cygdrive/c/OUT/ >> /cygdrive/c/cygwin/home/ivanov/exclude.txt


Добавлено через 7 минут
По скрипту:
/cygdrive/c/OUT/ -- папка на клиенте
192.168.X.X:/incoming -- папка на сервере
exclude.txt -- файл exclude, в который записываются переданные файлы.
Ответ: Вообщем нашел решение.

rsync -rtv <source> <dest> | wc -l
Если у команды результат больше 4, то значит файлы были переданы, иначе нет.
Исходя из этого переделал свой скрипт в такой вид:

Bash
1
2
3
4
5
6
newfiles="$(rsync -rtavz --exclude-from=/cygdrive/c/cygwin/home/ivanov/exclude.txt -e ssh user@192.168.X.X:/home/user/test/folder/file* /cygdrive/c/cygwin/home/ivanov/test | wc -l)"
if [[ $newfiles -gt 4 ]]; then
ls /cygdrive/c/cygwin/home/ivanov/test >> /cygdrive/c/cygwin/home/ivanov/exclude.txt
echo "success"
fi
exit
Вопрос: rsync - файлы для исключения

Всем привет

У меня настроен rsync потомками, которая работает замечательно. Синхронизирует сайты dev с test. Я выполняю такую команду

sudo rsync -av /var/www/dev-html/* /var/www/test-html/

И все файлы из папки /var/www/dev-html/ копируются в папку /var/www/test-html того же сервера. Кроме (!) .htaccess и настроечного файла.
У меня вопрос - где может находится файл или настройки, которые не синхронизируют определенный список файлов?
Я искал их в /etc/rsyslog.conf, искал во всех файлах каталога etc/rsyslog.d - их там нет. Где же они могут находиться? Гугл по этому поводу мне ничего не сказал.

Заранее благодарен.
Ответ: а чтобы синхронизировать и скрытые только find'ом?
Вопрос: Поиск и переименование файлов по заданным параметрам

1)Определить количество файлов или подкаталогов в корневом каталоге, к которым все имеют полные права доступа.
2)Написать скрипт, который добавляет к именам файлов каталога, заданного в первом параметре, расширения, заданные во втором параметре.
 Комментарий модератора Marinero
Один вопрос — одна тема
Ответ:
Bash
1
2
3
4
5
6
7
8
9
10
touch {a..f}
chmod 777 {a..f}
./script.name . test
ls -l {a..f}.test
-rwxrwxrwx 1 az az 0 Дек 12 18:16 a.test*
-rwxrwxrwx 1 az az 0 Дек 12 18:16 b.test*
-rwxrwxrwx 1 az az 0 Дек 12 18:16 c.test*
-rwxrwxrwx 1 az az 0 Дек 12 18:16 d.test*
-rwxrwxrwx 1 az az 0 Дек 12 18:16 e.test*
-rwxrwxrwx 1 az az 0 Дек 12 18:16 f.test*
Вопрос: Вывести список файлов, не имеющих расширения

здравствуйте,
надо вывести список файлов каталог /boot ,не имеющих расширения,с указанием номера узла и отсортировать в обратном порядке.
я ввел команда :
Код
ls -ir /boot [!*.*]
почему то на экране все равно выводит файлы которые имеют расширения .И странно в том ,что он еще и вывел список файла в домашнем каталоге.
Подскажите,пжлс, как исправить и в чем ошибку?
Ответ: Если Вы не используете расширенные паттерны то получить результат с использованием только ls не получится. Я бы решал вопрос при помощи find
Bash
1
find /boot ! -name '*.*' -print0 | xargs -0 ls -i | sort -r
Вопрос: Вывести список файлов начинающихся с символа 'q' с заходом в подкаталоги с сортировкой

здравствуйте
подскажите пожалуйста ка вывести список файлов каталога,начинающихся с символа 'q'.с заходом в подкаталоги.Список отсортировать по размеру файлов в порядке возрастания.
Подскажите,пжлс, как написать командой с помощью find.
И тут лучше команда find или ls использовать?
Ответ: Я этого не говорил
Сообщение от Marinero
find -name 'q*' -print0 | xargs -0 ls -1rS
Вопрос: Определить тип файлов передаваемых как аргументы с контролем их количества

Доброго времени суток!
Мне требуется помощь в написании скрипта,который может принимать несколько параметров (от 1 до 8) и для каждого из них определять тип файла (каталог,символическая ссылка, исполняемый, обычный, прочий, не существует) Если параметры при запуске отсутствуют, скрипт должен сообщить о необходимости наличия параметров и закончить работу. Если же параметров больше 8, сообщить о слишком большой количестве параметров и закончить работу. Для отладки использовать echo.

Буду очень счастлива если поможете!
Ответ: Количество параметров — системная переменная $#
Закончить работу — команда exit
Oпределить тип — команда file
Перебрать аргументы — цикл for arg ; do … ; done
Вопрос: Расширение системных каталогов в дополнительные разделы

В разных случаях возникает необходимость расширить некоторые системные разделы, такие как /usr, /usr/local, /var и прочие, лежащие в корневом разделе - в /. Например, вы купили новый HDD, перенесли ваши коллекции фильмов, музыки и прочего на новый, а освободившееся место решили добавить к / без форматирования, его переноса и прочих низкоуровневых действий.
Что мы сделаем? Так как данных на освободившемся месте нет, мы его отформатируем на несколько логических разделов. Например /dev/sda7, /dev/sda8, /dev/sda9 и тд. в зависимости от ваших нужд.
Но для начала небольшой экскурс в файловую структуру linux:
Файловая система Linux
/ <root>
-- /bin
-- /boot
-- /dev
-- /etc
-- /home
+ -- /home/username
-- /lost+found
-- /lib
-- /media
-- /mnt
-- /opt
-- /proc
-- /root
-- /sbin
-- /srv
-- /sys
+ -- /sys/block
+ -- /sys/bus
+ -- /sys/class
-- /tmp
-- /usr
+ -- /usr/bin
+ -- /usr/games
+ -- /usr/include
+ -- /usr/lib
+ -- /usr/local
+ -- /usr/sbin
+ -- /usr/share
+ + -- /usr/share/icons
+ + -- /usr/share/doc
+ -- /usr/src
-- /var
+ -- /var/cache
+ -- /var/games
+ -- /var/lib
+ -- /var/lock
+ -- /var/log
+ -- /var/spool
+ -- /var/www
-- Раздел <swap>


Подробное описание структуры файловой системы Linux
/
Корневой раздел.
/bin
В этом каталоге хранятся основные команды операционной системы, такие как команды оболочки и команды файловой системы (ls, cp и т.д.).
/boot
Здесь хранятся образы ядер Linux и менеджер загрузки: grub, lilo и т.д.
/dev
Директория содержит файлы устройств, подключенные к операционной системе.
В Linux вообще всё рассматривается, как файл, даже различные устройства, такие как принтеры, жёсткие диски, сканеры и т.д. Для получения доступа к определённому устройству, необходимо чтобы существовал специальный файл. Когда кто-либо или что-либо в системах Linux обращается к какому-то устройству, то он обращается к файлу этого устройства.
/etc
В этой директории находится основная часть конфигурационных файлов самой операционной системы (настройки сети, список пользователей, групп и т.д.) и различных программ (Apache, Samba и т. д.).
/home
В этом месте должна размещаться вся личная информация пользователей системы.
Почему должна? Потому что владелец компьютера может хранить свою личную информацию в любом понравившемся ему месте. В целях безопасности самой операционной системы и пользовательских данных хранить последние строго рекомендуется в директории /home. Для получения более высокой надежности операционной системы и сохранности пользовательской информации директорию /home рекомендуется выделить в отдельный раздел жесткого диска.
/home/username
Это Домашняя папка пользователя usermame. В ней хранится пользовательская часть конфигурационных файлов (настройки пользовательских программ) и вся личная информация пользователя.
Linux является многопользовательской системой и поэтому каждый пользователь имеет уникальный каталог для персональных файлов. Этот каталог называется Домашней папкой пользователя. Домашняя папка суперпользователя root располагается в корне файловой системы (о ней немного ниже).
Такое разделение пользовательских директорий от файлов операционной системы упрощает резервирование данных и повышает надежность самой операционной системы.
/lost+found
В lost+found скидываются файлы, на которых не было ссылок ни в одной директории, хотя их inod не были помечены как свободные. Допустим при удалении файла из директории произошёл сбой (выключилось питание), то в системе останется потерянный inod, который вроде как и указывает на корректный файл, но этот файл не содержится ни в одной директории. В ext2 и других нежурналируемых файловых системах задача восстановления таких файлов ложится на fsck. Он находит inod, на которые нет ссылок, и создаёт на них ссылки в lost+found. После этого пользователь сможет просмотреть файлы и при необходимости переместить их куда надо, вернув нужные имена или удалить.
В ext3 и в других журналируемых файловых системах fsck просматривает журнал и видя, что операция завершилась не полностью, откатывает ее. Поэтому потерянных inod в журналируемых файловых системах находиться меньше.
/lib
Эта директория предназначена для хранения системных библиотек, необходимых для работы программ из директорий /bin и /sbin и операционной системы вцелом.
/media
Директория, используемая для автоматического монтирования различных устройств USB-накопителей, CD-ROM и т.д. При вставке в привод CD-ROM диска он автоматически подключается во вложенный каталог этой директории.
/mnt
Обычно эта директория используется для ручного подключения устройств. В эту директорию командой mount «руками» монтируются различные USB-накопители, CD-ROM и т.д.
/opt
Директория, в которой обычно размещаются установленные программы, имеющие большой дисковый размер или вспомогательные пакеты (например /opt/openoffice.org).
/proc
/proc — это директория, к которой примонтирована виртуальная файловая система procfs. Различная информация, которую ядро может сообщить пользователям, находится в "файлах" каталога /proc. Например, в файле /proc/modules находится список загруженных модулей ядра. А в файле /proc/cpuinfo — информация о процессоре компьютера.
/root
Это домашний каталог или Домашняя папка суперпользователя. Эта директория фактически ничем не отличается от директории обычного пользователя. Данная директория по умолчанию всегда расположена в корневом каталоге файловой системы. Это было сделано для предотвращения проблем с доступом к директории /home. В случае когда к каталогу /home по какой-то причине невозможно получить доступ, в системе всегда есть возможность залогиниться под учетной записью суперпользователя, для решения возникших проблем с доступом.
/sbin
Основные системные программы для администрирования и настройки системы (iptables, ifconfig и т.д.).
/srv
Параметры, которые специфичные для окружения системы. Чаще всего данная директория пуста.
/sys
/sys — это директория, к которой примонтирована виртуальная файловая система sysfs, которая добавляет в пространство пользователя информацию ядра Linux о присутствующих в системе устройствах и драйверах. В версии ядра ниже 2.6 не использовалась.
/sys/block
/sys/block содержит директории всех блочных устройств, присутствующих в данный момент в системе.
/sys/bus
В этой директории находится список шин, определенных в ядре Linux (eisa, pci и т.д.).
/sys/class
Каталог содержит список группированных устройств по классам (printer, scsi-devices и т.д.).
/tmp
Временное хранилище данных. Аналог папки в ОС Windows — C:/Windows/Temp. Все пользователи имеют права чтения и записи в этом каталоге.
/usr
В этом каталоге хранятся все установленные пакеты программ, документация, исходный код ядра и система X Window. Все пользователи кроме суперпользователя root имеют доступ только для чтения. Может быть смонтирована по сети и может быть общей для нескольких машин.
/usr/bin
Директория дополнительных программ для всех учетных записей.
/usr/games
Каталог для размещения доступных компьютерных игр в системе.
/usr/include
Заголовочные файлы С++.
/usr/lib
Системные библиотеки для программ, расположенных в директории /usr.
/usr/local
По стандарту /usr должен быть общим для нескольких компьютеров и смонтирован по сети, а /usr/local должен содержать установленные пакеты программ только на локальной машине (к примеру, /usr - бюджет семьи, а /usr/local - личный кошелек каждого). Но чаще всего директория /usr/local используется для установки программ, которые не предназначены для конкретного дистрибутива (к примеру для пакетного дистрибутива Ubuntu в /usr находятся "родные" установленные пакеты, а /usr/local находятся собранные пакеты из исходников).
/usr/sbin
Дополнительные системные программы.
/usr/share
Общие данные установленных программ.
/usr/share/icons
В каталоге находятся все иконки системы.
/usr/share/doc
Директория, в которой обычно находится справочная документация по установленным программам.
/usr/src
Исходные коды (например, здесь располагаются исходные коды ядра).
/var
Это каталог для часто меняющихся данных. Здесь находятся журналы операционной системы, системные log-файлы, cache-файлы и т. д.
/var/cache
В этом месте хранятся все кэши различных программ.
/var/games
В этом месте расположены файлы с игровыми достижениями.
/var/lib
Постоянные данные, изменяемые программами в процессе работы (например, базы данных, метаданные пакетного менеджера и др.).
/var/lock
Здесь лежат lock-файлы, указывающие на занятость некоторого ресурса.
/var/log
В этом месте хранятся все log-файлы.
/var/spool
Задачи, ожидающие обработки (например, очереди печати, непрочитанные или не отправленные письма, задачи cron и т. д.).
/var/www
В этом месте размещаются Web-страницы для сервера Apache.
Раздел <swap>
Раздел виртуальной памяти для увеличения скорости обмена с оперативной памятью.

Сейчас мы определимся какой раздел и под какую директорию мы будем выделять.
Например, раздел sda7 у нас имеет размер 10 Гб и ФС ext3, sda8 - 15 Гб ext3, а sda9 - 20 Гб и ФС ext4.
Самый "тяжёлый" каталог в Linux (за исключением, конечно же, пользовательских директорий) это /usr. Под него и логичнее всего будет отвести sda9, ещё "массивным" бывает /var, его мы поселим на sda8, а sda7 пускай у нас будет занят каталогом /opt.
Итак, давайте всё запишем в какой-нибудь файлик, например, в /home/username/file
Bash
1
2
$ touch /home/username/file
$ nano /home/username/file
nano - /home/username/file

/dev/sda7 /opt ext3
/dev/sda8 /var ext3
/dev/sda9 /usr ext4
А теперь, когда всё готово, начинаем самое основное, для чего мы это всё затеяли - добавляем пространство к системным директориям. Самое разумное будет это делать в однопользовательском режиме. Для этого перезагрузимся и выберем вариант загрузки "rescue mode", введём пароль рута и... поехали!
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mkdir /tmp/opt # создадим временную папку
ls /opt # заглянем, что там лежит
mount /dev/sda7 /tmp/opt # смонтируем устройство в эту временную папку
ls /tmp/opt # заглянем, проверим, не лежит-ли там чего лишнего для нас. вполне вероятно, что мы 
# там обнаружим lost+found
lost+found
rm -rf /tmp/opt/lost+found # удалим его, тк. он нам не нужен
cp -ax /opt /tmp # копируем содержимое каталога /opt в наш новый раздел. выбираем директорию на 
# уровень выше тк. это обусловлено особенностью cp - она копирует в указанный каталог, где создаёт 
# папку назначения, одноимённую с оригиналом. мы её "обманываем" - каталог с таким именем уже есть, 
# значит его создавать не нужно, причём он находится в известном нам разделе диска. таким образом 
# мы копируем в корень нужного раздела
umount /dev/sda7 # отмонтируем устройство
rm -rf /tmp/opt # теперь можно удалять временную папку
rm -rf /opt # и оригинал
mkdir /opt # воссоздадим системную папку
mount /dev/sda7 /opt # подключаем раздел к этой точке монтирования
ls /opt # проверим нашу работу
Сейчас повторяем процедуру с sda8 и /var соответственно:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ls /var
backups cache games # ну и остальные...
mkdir /tmp/var
mount /dev/sda8 /tmp/var
ls /tmp/var
lost+found
rm -rf /tmp/var/lost+found
cp -ax /var /tmp
umount /dev/sda8
rm -rf /tmp/var
rm -rf /var
mkdir /var
mount /dev/sda8 /var
ls /var
Ну и напоследок - домашнее задание: Повторить всё то же самое с sda9 и /usr самостоятельно.
А теперь вспомним, что мы сохраняли некий файлик в /home/username/file Для чего? А вот для чего: Мы ведь не будем при каждой перезагрузке монтировать все эти разделы вручную! Значит, пропишем их в /etc/fstab
Bash
1
# nano /etc/fstab
nano - /etc/fstab

#................
# здесь всё было записано системой в момент установки, знак в начале этой строки означает комментарии
# и если у вас с каким-либо вами прописанном здесь разделе случилось что-либо Вам непонятное и его
# авто-монтирование нужно отключить, то достаточно поставить шарп в начале строки
#................

# добавим несколько своих строк записи в строках разделяются клавишей [tab]
/dev/sda7 /opt ext3 defaults 0 2
/dev/sda8 /var ext3 defaults 0 2
/dev/sda9 /usr ext4 defaults 0 2
Не забудем сохранить файл /etc/fstab , а также удалить /home/username/file - он нам более не нужен.
Теперь можно перезагрузить машину - ваши каталоги /opt /var и /usr вынесены с рутового раздела.
Ответ:
Сообщение от Dmitry
один раз разобраться что такое lvm и все .
Не спорю, можно для описанных в примере целей воспользоваться возможностями LVM. Но могут быть и другие необходимости перенести/расширить какой либо системный каталог или просто расширить раздел / , оставив ему строгие физические рамки.
Этот же способ может подойти и для решения некоторых других проблем.
В смысле: я надеюсь, что данный алгоритм действий кому-то может пригодиться. А уж для чего именно - вопрос другой.