суббота, 26 июля 2008 г.
вторник, 8 июля 2008 г.
Советы по Linux
Быстро получить информацию о системе можно используя команду procinfo. Если этого недостаточно - смотрите файловую систему /proc.
Например: /proc/interrupts, /proc/cpuinfo...
2. Еще один способ получить полезную информацию о системе
Еще один способ получить полезную информацию о системе - команда vmstat. Она выводит информацию использовании памяти, процессора, областях swap и т.п.
Команда free выдает информацию о памяти и swap.
3. Как получить информацию о ваших загруженных модулях ядра
lsmod - хороший способ получить информацию о ваших загруженных модулях ядра.
4. Нужно посмотреть параметры и возможные опции для модуля ядра Linux?
Воспользуйтесь командой modinfo. Например, Информация о авторе:
modinfo -a модуль
Список возможных параметров: modinfo -p модуль
5. Полезная информация о ядре
Левый или правый CTRL, ALT, или SHIFT + scrollock покажут вам полезную информацию о ядре.
6. Как долго ваша система была запущена?
Чтобы увидеть, как долго ваша система была запущена, наберите uptime.
7. Как посмотреть какие порты открыты?
netstat -a позволит вам увидеть все tcp и udp порты, которые открыты на вашей системе.
8. Нужно узнать какой сокет заняла программа?
lsof -i -U
fuser port_num/tcp
а также:
netstat -pvlA inet
9.Как посмотреть информацию о запущенных процессах?
Обычно используется "ps -aux", и потом "kill <номер процесса>". Так же есть специальные программы - такие, как top, gtop и ktop.
10. Как посмотреть свободное место на диске?
Чтобы посмотреть свободное место на диске, используйте команду df. Так же в KDE есть программа kdf (KDiskFree).
11. Как узнать размер всех директорий в данном каталоге?
Чтобы узнать размер всех директорий в данном каталоге, выполните команду:
find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn
12. Как разбить один большой файл на несколько маленьких?
Чтобы разбить один большой файл на несколько маленьких используйте команду:
split --bytes=SIZE filename
13. Как добавить конфигурации по умолчанию для программ?
Если вы хотите добавить конфигурации по умолчанию для своих программ (которые размещаются в каждой домашней директории), копируйте эти конфигурационные файлы в /etc/skel. Каждый раз, когда вы добавляете нового пользователя, эти файлы будут скопированы в домашние директории пользователей.
14. Как убрать возможность перезагрузки по нажатию клавиш CTRL-ALT-DEL?
Убрать возможность перезагрузки по нажатию клавиш CTRL-ALT-DEL можно закомментировав строку
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
в файле /etc/inittab.
15. Быстрый метод завершения перезапускаемого(respawning) процесса?
Очень быстрый метод завершения перезапускаемого(respawning) процесса в вашем /etc/inittab - это переключение уровней исполнения. Например, если вы имеете строку:
1:1235:respawn:/usr/sbin/mgetty /dev/ttyS1
переключение на уровень 4 остановит перезапускаемый процесс.
16. Как ограничить потребление ресурсов системы пользователями?
Если вы запустили большую систему с большим количеством пользователей, может быть очень важно ограничить потребление ресурсов системы пользователями. Вы можете контролировать эти ограничения с помощью модуля PAM и файла /etc/pam.d/limits.conf. Большинство современных дистрибутивов используют PAM для аутентификации. Пример ограничений для группы users sample of limits for the users group.
@users hard core 0
@users hard nproc 50
@users hard rss 5000
Это не позволяет создавать файлы core, ограничивает пользователя до 50 процессов и по использованию памяти до 5МБ
17. Как сделать дамп N-консоли?
Команда cat /dev/vcsN сбрасывает дамп N-консоли.
18. Как запретить вход всех пользователей в систему?
Чтобы запретить вход всех пользователей в систему (кроме root) без перезагрузки создайте файл /etc/nologin. Содержимое этого файла будет отображаться когда пользователь попытается войти в систему.
19. Ограничение на выполнение команды su
Чтобы разрешить определенным пользователям делать su, что лучше чем всем по умолчанию, редактируйте /etc/login.defs и установите строку SU_WHEEL_ONLY в yes. Затем вам нужно добавить пользователей, которым нужно делать su в группу 0, что делается редактированием файла /etc/groups.
20. Как примонтировать директорию из одной части файловой системы в другую?
В linux 2.4.x ядрах:
mount --bind какую_директорию_монтировать куда_монтировать
21. Как установить точное время?
Отличный способ установить на машине точное время - использовать каманду ntpdate:
ntpdate
Конечно, нужно иметь установленный пакет ntp и возможность соединения с сервером NTP. Вместо лучше использовать ip-адрес, чтобы избежать преобразования доменного имени в ip-адрес.
22. Как установить время CMOS?
Чтобы установить время CMOS системному используйте hwclock --systohc, а hwclock --hctosys - установит системное время, как время CMOS clock.
23. Как быстро скомпилировать ядро
Самый простой способ скомпилировать ядро это выполнить все команды make на одной строке набрав:
make dep clean bzImage modules modules_install
Если вы просто пропатчили свое ядро тогда просто сделайте:
make oldconfig dep clean bzImage modules modules_install.
24. System.map
Вешь, о которой иногда забывают упомянуть, когда вы обновляете свое ядро - это файл System.map (обычно располагающийся в каталоге /boot), который не соответствует новому ядру. После перезагрузки вы увидите сообщения о некорректной версии ядра. После построения нового ядра не забудьте скопировать новый файл System.map из каталога /usr/src/linux в загрузочный каталог вашей системы (/boot).
25. Как увидеть сообщения выдаваемы ядром?
Увидеть сообщения, выдаваемые ядром на экран при загрузке системы можно набрав команду dmesg.
26. Как посмотреть вывод команды и одновременно записать его в файл?
Посмотреть вывод команды и одновременно записать его в файл можно с помощью команды:
tee $ls | tee logfile.txt
27. Как запретить хранитель экрана в текстовом режиме?
Запретить хранитель экрана в текстовом режиме - напечатайте setterm -blank 0.
28.Средство для более быстрого поиска файлов, чем find
Средство для более быстрого поиска файлов, чем find - команда locate, которая использует базу данных для поиска. Для обновления этой базы часто используется cron. Или вручную - updatedb.
29. Список всех исполняемых файлов в системе, которые присутствуют в вашем $PATH?
Нажмите TAB + scroll-lock или еще проще - два нажатия на клавишу TAB. Результат один и тот же.
30. Как отключить сигнал "beep" в течение автоматического завершения командной строки?
Добавьте либо в ~/.inputrc или в /etc/inputrc для визуального звонка:
set bell-style visible
совершенно без сигнала:
set bell-style none
31. Как послать данные на желаемый терминал?
Вы можете использовать все доступные терминалы, даже если они в применении, чтобы послать данные на тот терминал, на который хотите. Например:
tail -f /var/log/messages > /dev/tty12
Для посылки любых сообщений на tty12.
32. Циклическое переключение через все доступные консоли.
Многие клавиатурные раскладки позволяют циклическое переключение через все доступные консоли используя Alt-RightArrow и Alt-LeftArrow.
33. Как выполнить родную команду системы, если используются алиасы?
Часто используете альясы shell (например, прописанные в ~/.bashrc), но иногда необходимо выполнить родную команду системы? Добавьте обратный слэш перед командой, это игнорирует псевдоним shell.
34. Как найти все файлы в каталоге, которые содержат строку?
Найти все файлы в каталоге, которые содержат строку:
find . -type f -print | xargs grep -li "search string"
35. Как сделать чтобы программа ожидала нажатия какой-либо клавиши пользователем?
При написании скриптов shell часто возникает необходимость того, чтобы в процессе выполнения программа ожидала нажатия какой-либо клавиши пользователем. Это можно сделать таким способом:
stty raw; dd if=$(tty) of=/dev/null bs=1 count=1; stty -raw
36.Как перенаправить стандартный вывод и поток ошибок в один и тот же файл?
Чтобы перенаправить стандартный вывод и поток ошибок в один и тот же файл, используйте `&>'.
37. Как сохрать man-страницы в текстовый файл?
Самый простой способ сохранения man-страницы в текстовый файл - " man name | col -b > name.txt".
38. Все символы в консоли стали нечитаемыми
Если все символы в консоли стали нечитаемыми, наберите:
"echo -ne "\017","stty sane" или просто "reset".
39. Как перевести имена файлов в директории в нижний регистр?
Самый простой способ перевода всех имен файлов из директории в нижний регистр:
"for x in *; do mv $x `echo $x | tr [A-Z] [a-z]`; done".
40. Как быстро переименовать файл?
Чтобы быстро переименовать файл, используйте команду:
"mv /usr/local/bin/{старое_имя,новое_имя}".
41. Как удалить всю директорию без лишних запросов?
Чтобы удалить сразу всю директорию без лишних запросов, используйте:
rm -rf имя_директории
42. Как создать сразу несколько директорий?
Создание сразу нескольких директорий - "mkdir -p dir1/dir2/dir3".
43. Как правильно выключить компьютер?
Правильное выключение компьютера - команда "shutdown -h now".
Перезагрузка - "shutdown -r now" или просто "init 5".
44. Как передать весь вывод одной команды на вход другой команде?
Чтобы передать весь вывод одной команды на вход другой команде, используется символ "|".
Таким образом можно делать сложные конструкции (например, "ls | sort -r | less").
45. Как следить за постоянно изменяющимися файлами?
Чтобы следить за постоянно изменяющимися файлами (например, за системными логами), используйте команду tail.
Пример: "tail -15 /var/log/syslog" - постоянно показывает последние 15 строк.
46. Как следить за списком файлов в реальном времени?
Слежение за списком файлов в реальном времени - "watch -n 0 ls -l".
Команда watch осуществляет периодический запуск других команд.
47. Как искать текст в файлах?
Для поиска текста в файлах используется команда - "grep "ваш текст" /where/to/search".
Если при поиске не нужно учитывать регистр - "grep -i "ваш текст" /where/to/search"
48. Как заменить одно слово на другое во многих файлах?
Для замены одного слова на другое сразу же во многих файлах можно использовать этот скрипт
perl -pi -e 's/oneword/anotherword/g' *.
Если нужно сделать это же с одним файлом, поставьте его имя вместо " * ".
49. Как перейти из графического режима в текстовую консоль?
Чтобы перейти из графического режима в текстовую консоль, нажмите Ctrl+Alt+F1. (Ctrl+Alt+F2 - на вторую консоль, Ctrl+Alt+F3 - на третью консоль, etc). Для того, чтобы вернуться обратно в Иксы, обычно используется комбинация клавиш Alt+F7.
50. Как увидеть под Linux другой подключенный жесткий диск?
Чтобы увидеть под Linux другой подключенный жесткий диск, надо примонтировать (командой mount) разделы, которые на новом винчестере есть. Для этого надо определить, каким винчестер стоит: hdb, hdc или hdd. Для этого нужно всего лишь сообразить, как он подключен: primary slave - это hdb, secondary master - это hdc, secondary slave - это hdd. Теперь надо просмотреть, какие диски на винте есть. Для этого запускаем cfdisk для того винта, который мы определили на предыдущем шаге, например, для hdb: cfdisk /dev/hdb. Глядим, какие разделы есть. Например есть FAT32 (или он еще обозначается как WIN95) диск /dev/hdb1. Мы хотим его подключить скажем к каталогу /mnt/disk. Тогда: mount -t vfat /dev/hdb1 /mnt/disk. Здесь: параметр "-t" указывает тип файловой системы, в нашем случае это vfat, что соответствует fat32.
51. Работа с CD/R и CD/RW.
Стираем так: cdrecord -v blank=fast(или all) dev=<Ваш девайс>.
Образ делаем так: mkisofs -r -J -o <имя_файла_образа.iso> <то_чего_в_образ_загоняем>
Пишем так: cdrecord -v -eject speed=8 dev=<Ваш девайс> file.iso.
Если надо мультисессионный диск, то добавляем -multi.
Так же существует много графических оболочек, которые в своей работе используют эти же простые команды.
52. Запись CD диска
Команды cdrecord, полезные при записи CDROM:
mkisofs -V "volume_ID" -D -l -L -N -J -R -v -o cdrom.iso директория
cdrecord -dev=0,1,0 -speed=4 -v cdrom.iso
Для подключения IDE накопителя добавить в linux lilo append="hdc=ide-scsi"
( hdc - ваш привод?) и включить в ядре поддержку эмуляции SCSI.
-toc -atip -prcap - выдать полную информацию о накопителе.
-scanbus - определить параметры для -dev (можно /proc/scsi/scsi)
-dummy - запись в режие тестирования (без реального прожигания диска).
-fix - исправить недописавшийся диск.
-eject - после записи вытащить CD
-blank=all очистить CR-RW перед записью.
mkisofs -print-size - расчитать сколько потребуется места для записи директории
53. Как смонтировать образ компак-диска?
Смонтировать образ компакт-диска можно таким образом:
#mkdir /mnt/iso
#mount -t iso9660 -o loop cd-image.iso /mnt/iso
(Разумеется, для операции монтирования нужно иметь права root). Теперь каталог /mnt/iso доступен для чтения содержимого образа компакт-диска.
54. Как узнать метку компакт-диска?
Узнать метку компакт-диска можно так:
alias cdlabel='LABEL=`dd if=/dev/cdrom bs=1 count=32 skip=32808 2>/dev/null` && echo $LABEL'
Удобно использовать альяс в инициализационных скриптах shell.
Советы по “железу”
1. Как получить список устройств на шине PCI?
Получить список устройств на шине PCI можно таким образом:
/sbin/lspci
2. Как включить при загрузке клавиши numlock?
Если вы хотите включить все клавиши numlock при загрузке, добавьте следущее в ваши загрузочные скрипты, например в rc.local:
echo -n "Turning on numlock LEDs: "
for tty in /dev/tty[1-6] /dev/tty1[2]; do
setleds -D +num < $tty &
done
echo "done."
3. Как посмотреть информацию полученную от мыши на стандартный вывод?
Если у вас трудности с мышью, mev -i сбросит информацию полученную от мыши на стандартный вывод.
4. Раздражают сигналы спикера вашего компьютера когда вы ошиблись?
Попробуйте выполнить следующую команду bash:
echo -ne '\033[11;0]'
которая устанавливает продолжительность сигнала для консоли равным 0 секунд. Чтобы сделать это автоматически добавьте эти строки в /etc/profile или ваш~/.profile. Подробную информацию о том, как установить частоту и длительность гудка, читайте в Visual bell mini-Howto.
четверг, 3 июля 2008 г.
Развертывание типового (эталонного) образа Ubuntu Linux
В конторе периодически закупаются новые компьютеры и сотрудникам IT-отдела приходится отрываться от более интересных дел и заниматься рутиной в виде установки и настройки операционной системы. Установка Ubuntu традиционным способом с помощью компакт-диска, установка драйверов, обновлений и дополнительных программ из интернета, настройка всего занимают слишком много времени. Одним из способов оптимизации процесса является создание типового образа операционной системы и затем быстрое его развертывание на новых компьютерах.
Создание эталонного образа.
Прежде всего необходимо создать эталонный образ Ubuntu. Для этого нам потребуется эмулятор виртуальных машин, например VirtualBox или VMWare. Далее:
- Устанавливаем Ubuntu в виртуальной машине.
Настраиваем установленную операционную систему. Например так:
- включить основные и дополнительные репозитарии и произвести обновление пакетов;
- установить полную локализацию системы;
- установить мультимедийные кодеки;
- установить пакеты с драйверами для видео карт nvidia и ati;
- установить flash плугин для браузера;
- установить плугин для открытия документов MSOffice 2007 (*.docx и др.) в OpenOffice;
- установить необходимые программы и утилиты: ssh сервер, vnc сервер, unrar, wine, virtualbox и много чего ещё...;
- указать сетевые настройки, например адреса dns и ntp серверов, маршруты;
- отключить загрузку не нужных демонов;
- отключить запуск не нужных заданий по расписанию cron;
- любые другие программы и/или настройки.
Настройка профиля пользователя по умолчанию. Для этого создаем пользователя, например testuser, логинимся под ним и производим настройку. Например:
- отключить эффекты рабочего стола;
- разрешить удаленный доступ к рабочему столу (vnc) и задать пароль для него;
- прописать настройки соединения в браузере: проски-сервер и прочее;
- в редакторе меню отключить запуск некоторых программ, например подменю "Игры";
- в настройках сеанса, отключить запуск не нужных программ;
- любые другие настройки.
После завершения настройки профиля, копируем содержимое /home/testuser в /etc/skel. Делаем владельцом пользователя root:
sudo chown -R root:root /etc/skel
Просматриваем директорию /etc/skel, удаляем все лишнее, заменяем в файлах абсолюный путь /home/testuser на относительный ~/.
Теперь при создании нового пользователя в его домашнюю директорию будет копироваться содержимое /etc/skel.
Для создания образа будем использовать livecd дистрибутив System Rescue CD.
После загрузки, поднимаем сеть:
sysresccd ~ # net-setup
Монтируем директорию по сети, куда мы будем копировать образ:
sysresccd ~ # mkdir /mnt/etalon
пример для sftp:
sysresccd ~ # mount -t fuse sshfs#login@192.168.0.1:/etalon /mnt/etalon
пример для smb:
sysresccd ~ # mount -t cifs -o user=login //192.168.0.2/etalon /mnt/etalon
Далее, монтируем жесткий диск виртуальной машины:
sysresccd ~ # mkdir /mnt/sda1
sysresccd ~ # mount /dev/sda1 /mnt/sda1Создаем образ обычной утилитой tar:
sysresccd ~ # cd /mnt/sda1
sysresccd sda1 # tar cvzf /mnt/etalon/etalon-ubuntu8.04-20080704.tar.gz *
Образ операционной системы создан. У меня файл образа занимает около 1,5 Гб. Остается только записать его на dvd болванку.
Развертывание эталонного образа на новом компьютере
Развертывание образа эта операция ради которой и затевалось создание самого образа. Здесь нас снова поможет незаменимый инструмент системного администратора System Rescue CD. Загружаем новый компьютер с его помощью, при загрузке вводим опции, чтобы после можно было освободить dvd привод:
rescuecd docache doeject
Вытаскиваем livecd, устанавливаем в привод болванку с образом. Далее:
Разметка диска. Например: все место под корневой раздел, файловая система reiserfs, под swap 2ГБ:
sysresccd ~ # сfdisk /dev/sda
sysresccd ~ # mkfs.reiserfs /dev/sda1
sysresccd ~ # mkswap /dev/sda2Монтируем диски и разворачиваем эталон:
sysresccd ~ # mkdir /mnt/sda1
sysresccd ~ # mount /dev/sda1 /mnt/sda1
...
sysresccd ~ # mkdir /mnt/etalon
sysresccd ~ # mount /dev/cdrom /mnt/etalon
...
sysresccd ~ # tar -С /mnt/sda1 xvzf /mnt/etalon/etalon-ubuntu8.04-20080704.tar.gzПравим файлы /mnt/sda1/etc/fstab и /mnt/sda1/boot/grub/menu.lst чтобы UUID метки дисков соответствовали новым томам. UUID метки можно узнать с помощью команды:
sysresccd ~ # blkid
Устанавливаем загрузчик grub в mbr область нового диска:
sysresccd ~ # grub-install --root-directory=/mnt/sda1 /dev/sda
Если все прошло успешно, то мы уже можем загрузить с операционную систему с жесткого диска. Дальше:
Сконфигурируем видео драйвер (в эталоне должен быть установлен универсальный драйвер vesa):
administrator@etalon:~# sudo dpkg-reconfigure -phigh xserver-xorg
После перезапуска иксов (Ctrl-Alt-Backspace) должен подняться нормальный видео драйвер.
Сменим имя хоста и сетевые настройки:
administrator@etalon:~# sudo gedit /etc/hostname
administrator@etalon:~# sudo gedit /etc/network/interfaces
Компьютер готов к работе. После установки на рабочее место пользователя ещё потребуется настроить принтера, но это уже отдельная история.
После приобретения некоторого опыта установка операционной системы на новый компьютер занимает около 20 минут. Конечно предварительно должно быть потрачено время на создание эталонного образа и периодическое его обновление, но при больших количествах новых компьютеров оно окупается. Данный способ успешно применяется уже 1,5 года.
Делаем образы дисков с помощью dd и gzip
Многие знают про утилиту dd - очень удобный инструмент.
В частности очень хорошо подходит для клонирования дисковых разделов (или целых дисков).
Недавно в ходе нескольких экспериментов выяснил, что такой образ диска можно сильно сжать с помощью GZip.
Например, заполненный на около 5Гб NTFS-раздел объемом 31Гб в сжатом состоянии занимает всего 1.7Гб. Единственное неудобство в том что на моем AMD Athlon 1700+ создание этого образа заняло 50 минут, а подсчет md5-суммы раздела-оригинала и упакованного образа по 12 минут. На системах с более производительным центральным процессором данный процес займет гораздо меньше времени.
Так как основной объем информации на системных жестких дисках (конечно за исключением медиа-данных) очень хорошо поддается сжатию, и часто многие выделяют несколько разделов под ОС, таким образом можно быть уверенным что образ раздела удастся сжать.
В ходе тестов на различных разделах степень компрессии несколько шокировала. Например, FAT-16 раздел размером 40Гб был сжат до 30МБ (контрольные суммы проверил - они совпали)!!!
Создаем образ:
#dd if=/dev/sda1 bs=8096 | gzip -9cf > sda1.dd-image.gzЭто занимает время. За процессом можно наблюдать на той же консоли с помощью периодической посылки USR1 сигнала процессу dd.
Для этого на другой консоли выполняем:
#ps | grep ddопределяем pid процесса dd и подставляем его в следующую команду
#watch -n 15 "kill -USR1 $pid_of_dd"Распаковка образа:
#gunzip -c sda1.dd-image.gz | dd of=/dev/sda1 bs=8096также можно подсчитать md5-сумму для раздела, чтобы после восстановления проверить правильность распаковки образа:
#dd if=/dev/sda1 bs=8096 | md5sum - > sda1.dd-image.md5Параноики (бывают ситуации когда лучше потратить время на еще одну перепроверку) могут еще и проверить правильность создания образа:
#gunzip -c sda1.dd-image.gz | md5sumПриятной всем работы ;)