Права доступа к файлам и каталогам
Менять права доступа и владельца файлов и каталогов в
Unix подобных операционных системах, можно с помощью команд
chmod и
chown. Маску для установки прав на создаваемые файлы, можно изменить глобально, в
/etc/profile для Linux и в
/etc/login.conf для FreeBSD. Обычно, маска по-умолчанию
022. Значение
umask вычитается из
777, таким образом права доступа будут иметь значение
755.
exec - разрешено выполнение
read - право на чтение
write - право на запись
SUID bit - атрибут файла, в совокупности с атрибутом исполняемого файла, позволяет запускаемому файлу выполняться с эффективным UID владельца файла, а не того, кто запускает файл
1 --x execute # Права 764 = exec/read/write | read/write | read
2 -w- write # Для: |-- Owner --| |- Group-| |Oth|
4 r-- read
ugo=a u=user, g=group, o=others, a=everyone
# chmod [OPTION] MODE[,MODE] FILE # MODE имеет форму: [ugoa]*([-+=]([rwxXst]))
# chmod 640 /var/log/maillog # Установить права доступа равными -rw-r-----
# chmod u=rw,g=r,o= /var/log/maillog # Как и выше
# chmod -R o-r /home/* # Рекурсивно изменить права, запретить чтение для Other
# chmod u+s /path/to/prog # Установить SUID бит на исполняемый файл ( тут осторожней, вы должны понимать, что вы делаете )
# find / -perm -u+s -print # Найти все программы с установленным SUID битом
# chown user:group /path/to/file # Установить пользователя и группу как владеющих файлом
# chgrp group /path/to/file # Изменить группу владеющую файлом
# chmod 640 `find ./ -type f -print` # Изменить права доступа на 640 для всех файлов
# chmod 751 `find ./ -type d -print` # Изменить права доступа на 751 для всех директорий
Информация о дисках
# diskinfo -v /dev/ad2 # Посмотреть информацию о диске (sector/size) FreeBSD
# hdparm -I /dev/sda # Информация о IDE/ATA диске (Linux)
# fdisk /dev/ad2 # Показать изменить разделы диска
# smartctl -a /dev/ad2 # Показать SMARTинформацию диска
Загрузка
FreeBSD
Что-бы загрузить старое ядро, в аварийной ситуации, например после неудачной сборки и установки нового, остановите загрузку, нажав 6 во время обратного отсчета, что-бы попасть в приглашение командной строки.
# unload
# load kernel.old
# boot
Точки монтирования, использование дисков
# mount | column -t # Показать смонтированные файловые системы
# df # Показать кол-во свободного места и смонтированные устройства
# cat /proc/partitions # Показать все зарегистрированные разделы (Linux)
Информация о директориях
# du -sh * # Размеры директорий в виде списка
# du -csh # Суммарный объем текущей директории
# du -ks * | sort -n -r # Список директорий, отсортированный по объему в килобайтах
# ls -lSr # Список директорий, обратная сортировка
Кто какие файлы открыл
Иногда необходимо выяснить, какой файл заблокировал раздел, из-за чего команда
umount выдает соответствующую ошибку.
# umount /home/
umount: unmount of /home # Размонтировать раздел невозможно, пока /home заблокирован
failed: Device busy
FreeBSD и большинство Unix подобных систем
# fstat -f /home # для точки монтирования
# fstat -p PID # для приложения с PID
# fstat -u user # для имени пользователя
Найти открытый файл для
Xorg:
# ps ax | grep Xorg | awk '{print $1}'
1252
# fstat -p 1252
USER CMD PID FD MOUNT INUM MODE SZ|DV R/W
root Xorg 1252 root / 2 drwxr-xr-x 512 r
root Xorg 1252 text /usr 216016 -rws--x--x 1679848 r
root Xorg 1252 0 /var 212042 -rw-r--r-- 56987 w
Найти файл с
inum 212042 в директории
/var можно так:
# find -x /var -inum 212042
/var/log/Xorg.0.log
Linux
Найти открытый файл в директории с помощью
fuser или
lsof:
# fuser -m /home # Список процессов имеющих доступ к /home
# lsof /home
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
tcsh 29029 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home)
lsof 29140 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home)
Найти по
PID приложения:
ps ax | grep Xorg | awk '{print $1}'
3324
# lsof -p 3324
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log
По имени файла:
# lsof /var/log/Xorg.0.log
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log
Монтирование/перемонтирование файловых систем
Например
cdrom, прописанный в
/etc/fstab:
# mount /cdrom
Или можно найти устройство в
/dev или в выводе
dmesg
FreeBSD
# mount -v -t cd9660 /dev/cd0c /mnt # Монтирование диска Cdrom (способ первый)
# mount_cd9660 /dev/wcd0c /cdrom # Монтирование диска Cdrom (способ второй)
# mount -v -t msdos /dev/fd0c /mnt # Дискета
Запись в
/etc/fstab:
# Device Mountpoint FStype Options Dump Pass#
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
Разрешить пользователям монтирование дисков:
# sysctl vfs.usermount=1 # Или впишите строку "vfs.usermount=1" in /etc/sysctl.conf
Linux
# mount -t auto /dev/cdrom /mnt/cdrom # Типичная команда монтирования диска cdrom
# mount /dev/hdc -t iso9660 -r /cdrom # Монтирование диска IDE
# mount /dev/scd0 -t iso9660 -r /cdrom # Монтирование диска SCSI cdrom
# mount /dev/sdc0 -t ntfs-3g /windows # Монтирование диска SCSI
Запись в
/etc/fstab:
/dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0
Монтирование FreeBSD раздела с Linux
Посмотрите номер раздела в
fdisk, обычно это корнеыой раздел, но может быть и на другом
BSD слайсе. Если на разделе FreeBSD много слайсов, их не будет видно через
fdisk, но их можно найти в
dev/sda* или
/dev/hda*.
# fdisk /dev/sda # Найти FreeBSD раздел
/dev/sda3 * 5357 7905 20474842+ a5 FreeBSD
# mount -t ufs -o ufstype=ufs2,ro /dev/sda3 /mnt
/dev/sda10 = /tmp; /dev/sda11 /usr # Другой слайс
Перемонтирование
Перемонтировать устройство без предварительного размонтирования, например для
fsck
# mount -o remount,ro / # Linux
# mount -o ro / # FreeBSD
Копировать поток данных с
CDROM'а в файл
ISO образа.
# dd if=/dev/cd0c of=file.iso
Создание swap раздела на лету
Предположим вам нужно увеличить swap раздел, скажем до
2 гигабайт,
/swap2gb (для Linux)
# dd if=/dev/zero of=/swap2gb bs=1024k count=2000
# mkswap /swap2gb # Создать swap
# swapon /swap2gb # Включить swap, теперь его можно использовать
# swapoff /swap2gb # Отключить swap
# rm /swap2gb
Монтирование SMB раздела
CIFS - Common Internet File System
SMB - server message block
Предположим вам нужно получить доступ на расшаренному
SMB разделу
myshare на сервере
smbserver, адрес набираемый на Windows машине будет
\\smbserver\myshare\. Монтировать будем на
/mnt/smbshare. Не забывайте, для
cifs требуется IP адрес или доменное имя.
Linux
# smbclient -U user -I 192.168.16.229 -L //smbshare/ # List the shares
# mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare
# mount -t cifs -o username=winuser,password=winpwd //192.168.16.229/myshare /mnt/share
Кроме того пакет
mount.cifs позволяет хранить привилегии в файле, например
/home/user/.smb:
username=winuser
password=winpwd
И теперь монтируем:
# mount -t cifs -o credentials=/home/user/.smb //192.168.16.229/myshare /mnt/smbshare
FreeBSD
Используйте ключ
-I, что-бы задать IP адрес (или
DNS);
smbserver, это Windows имя.
# smbutil view -I 192.168.16.229 //winuser@smbserver # Список расшаренных ресурсов
# mount_smbfs -I 192.168.16.229 //winuser@smbserver/myshare /mnt/smbshare
Монтировать образ
Linux loop-back
# mount -t iso9660 -o loop file.iso /mnt # Монтировать образ CD
# mount -t ext3 -o loop file.img /mnt # Монтировать образ с файловой системой ext3
FreeBSD
Используя
md - устройство памяти (если нужно, сделайте
kldload md.ko):
# mdconfig -a -t vnode -f file.iso -u 0
# mount -t cd9660 /dev/md0 /mnt
# umount /mnt; mdconfig -d -u 0 # Очистить устройство памяти
Или используя псевдоустройство(
VN, Virtual node):
# vnconfig /dev/vn0c file.iso; mount -t cd9660 /dev/vn0c /mnt
# umount /mnt; vnconfig -u /dev/vn0c # Очистить псевдоустройство
Создание и запись образа ISO
Будем копировать cd или dvd сектор за сектором.
# dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc
Используйте
mkisofs что-бы создать образ из файла в директории. Для преодоления ограничений имен файлов используйте опцию
-r, включающую расширение
RockRidge, основное для UNIX систем,
-J включает
Joliet, используемое Microsoft,
-L разрешает
ISO9660 имена, начинающиеся точкой.
# mkisofs -J -L -r -V TITLE -o imagefile.iso /path/to/dir
Во FreeBSD,
mkisofs можно установить из портов /usr/ports/sysutils/cdrtools.
Запись CD/DVD ISO образов
FreeBSD
FreeBSD не устанавливает
DMA на
ATAPI устройства, это можно сделать через переменную
sysctl или в файле
/boot/loader.conf, следующими записями.
hw.ata.ata_dma="1"
hw.ata.atapi_dma="1"
Используйте
burncd для ATAPI устройств (
burncd, стандартная программа, часть базовой системы) и
cdrecord (из
/usr/ports/sysutils/cdrtools) для SCSI устройств.
# burncd -f /dev/acd0 data imagefile.iso fixate # Для ATAPI устройств
# cdrecord -scanbus # Найти рекордер
# cdrecord dev=1,0,0 imagefile.iso
Linux
Так-же используйе
cdrecord, как описано выше. Кроме того можно использовать родной ATAPI интерфейс:
# cdrecord dev=ATAPI -scanbus
Записывайте, как было описано выше.
dvd+rw-tools
Пакет
]]>dvd+rw-tools]]> (FreeBSD: ports/sysutils/dvd+rw-tools) имеет весь функционал необходимый для работы с DVD, плюс
growisofs, для записи CD или DVD. Документацию с примерами можно найти в
]]>FreeBSD handbook Глава 18.7]]>
# -dvd-compat закрывает диск
# growisofs -dvd-compat -Z /dev/dvd=imagefile.iso # Записать существующий iso образ
# growisofs -dvd-compat -Z /dev/dvd -J -R /p/to/data # Записать напрямую
Конвертировать образ из Nero .nrg файла в файл .iso
Nero добавляет к образу заголовок в 300кб, его можно обрезать с помощью
dd.
# dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300
Конвертировать образ bin/cue в .iso
Это можно сделать с помощью небольшой программы,
]]>bchunk]]>. Во FreeBSD ее можно найти в портах
/usr/ports/sysutils/bchunk.
# bchunk imagefile.bin imagefile.cue imagefile.iso
Создание образа на основе файла
Например, раздел размером 1Гб использует файл
/usr/vdisk.img. В данном случае мы используем ключ
-u 0, но номер может быть любым.
FreeBSD
# dd if=/dev/random of=/usr/vdisk.img bs=1K count=1M
# mdconfig -a -t vnode -f /usr/vdisk.img -u 0 # Создаем устройство /dev/md1
# bsdlabel -w /dev/md0
# newfs /dev/md0c
# mount /dev/md0c /mnt
# umount /mnt; mdconfig -d -u 0; rm /usr/vdisk.img # Очистить md
Образ созданный из файла может быть смонтирован в процессе загрузки системы, путем записи строки в
/etc/rc.conf и
/etc/fstab.
Проверить правильность ваших настроек можно с помощью команды
/etc/rc.d/mdconfig start (предварительно удалив устройство
md0 с помощью команды
# mdconfig -d -u 0).
Имейте в виду, что автоматическая монтирование образа будет работать, только если файл образа, лежит НЕ в корневом разделе, в силу того что скрипт
/etc/rc.d/mdconfig выполняется на ранней стадии загрузки, когда корневой раздел еще не доступен на запись. Образы расположенные вне корневого раздела будут смонтированы позже, скриптом
/etc/rc.d/mdconfig2.
/boot/loader.conf:
md_load="YES"
/etc/rc.conf:
mdconfig_md0="-t vnode -f /usr/vdisk.img" # /usr не в корневом разделе
/etc/fstab: (0 0 в конце, очень важны, это укажет fsck игнорировать проверку устройства, так как оно еще не существует)
/dev/md0 /usr/vdisk ufs rw 0 0
Кроме того, в последствии можно увеличить размер образа, скажем на 300 мб.
# umount /mnt; mdconfig -d -u 0
# dd if=/dev/zero bs=1m count=300 >> /usr/vdisk.img
# mdconfig -a -t vnode -f /usr/vdisk.img -u 0
# growfs /dev/md0
# mount /dev/md0c /mnt # Теперь файловый раздел на 300 мб больше
Linux
# dd if=/dev/zero of=/usr/vdisk.img bs=1024k count=1024
# mkfs.ext3 /usr/vdisk.img
# mount -o loop /usr/vdisk.img /mnt
# umount /mnt; rm /usr/vdisk.img # Очистить
Linux и losetup
/dev/zero намного быстрей, чем
urandom, но менее защищенн для шифрования.
# dd if=/dev/urandom of=/usr/vdisk.img bs=1024k count=1024
# losetup /dev/loop0 /usr/vdisk.img # Создать /dev/loop0
# mkfs.ext3 /dev/loop0
# mount /dev/loop0 /mnt
# losetup -a # Проверить
# umount /mnt
# losetup -d /dev/loop0 # Отсоединить
# rm /usr/vdisk.img
Создание файловой системы в памяти
Файловая система в памяти очень быстрая, имеет смысл использовать ее для приложений с высоким дисковым IO. Создадим раздел размером 64 мб и смонтируем его в
/memdisk:
FreeBSD
# mount_mfs -o rw -s 64M md /memdisk
# umount /memdisk; mdconfig -d -u 0 # Очистить md устройство
md /memdisk mfs rw,-s64M 0 0 # запись в /etc/fstab
Linux
# mount -t tmpfs -osize=64m tmpfs /memdisk
Производительность дисков
Чтение и запись
1гб файла в разделе
ad4s3c (
/home)
# time dd if=/dev/ad4s3c of=/dev/null bs=1024k count=1000
# time dd if=/dev/zero bs=1024k count=1000 of=/home/1Gb.file
# hdparm -tT /dev/hda # Только Linux