вторник, 3 марта 2009 г.

Создание разделов с помощью fdisk

Создание разделов с помощью fdisk | SuseNotes

Posted by Hrafn

Временами ко мне заходят люди с поисковиком с запросами по поводу fdisk. Где-то в статьях упоминается эта команда. Но толком ничего у меня про нее не было. А я помню, как в свое время мучался с ней :smile: Поскольку писать свое собственное что-то мне очень часто посто лень, то я потихоньку перевожу интересные и полезные для меня статьи. Вот и сейчас сделал то же самое. Может, пригодится кому-то. Хотя, как всегда, статья далеко не целиком раскрывает тему, а потому чтение манов никто не отменяет :mrgreen:

Итак, очередной перевод. Оригинал, как всегда, на Novell Cool Solutions. Читайте.

Создать разделы через интерфейс командной строки — просто и быстро, также учитывая знание ядра о модифицированной таблице разделов и наличия схемы разделов, позволяет получить нужный эффект без необходимости перезагрузки рабочей станции/сервера и без необходимости использовать утилиты для разделения.

Первым делом необходимо посмотреть, какие жесткие диски доступны, и какой жесткий диск необходимо разделить. Если на вашей машине установлено несколько жестких дисков, fdisk сообщит вам об этом. Два жестких диска показано в следующем листинге как sda и sdb.

Команда fdisk с оператором -l (fdisk -l) покажет вам текущие таблицы разделов наряду с жесткими дисками, подключенными к вашей рабочей станции или серверу:

linux-1reo:~ # fdisk -l

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1402 11261533+ 7 HPFS/NTFS
/dev/sda2 1403 1415 104422+ 83 Linux
/dev/sda3 1416 1546 1052257+ 82 Linux swap / Solaris
/dev/sda4 1547 9729 65729947+ 5 Extended
/dev/sda5 1547 7920 51199123+ 8e Linux LVM

Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 9729 78148161 8e Linux LVM

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Как только вы определили, какой жесткий диск вы хотите разделить, вы можете запустить команду fdisk, завершив ее нужным жестким диском (fdisk /dev/sda). В этой статье мы будем использовать первый жесткий диск — sda.

linux-1reo:~ # fdisk /dev/sda
The number of cylinders for this disk is set to 9729.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)Command (m for help):

Как только fdisk будет запущен, ваше приглашение командной строки изменится на «Command (m for help):», и вы будете готовы к проверке и разделению жесткого диска. Команды, которые поддерживает fdisk, можно просмотреть нажав клавишу m, а затем Enter. Команды, которые мы будем использовать:

  • p — для печати таблицы раздела
  • n — для создания нового раздела
  • w — для сохранения изменений и выхода

Отображение текущей таблицы раздела

Перед тем, как мы начнем делить жесткий диск, необходимо узнать какой объем дискового пространства нам доступен и как вообще выгдялит текущая таблица раздела. «p», команда, которую мы будеи использовать, выведет текущую таблицу раздела:

Command (m for help): p

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1402 11261533+ 7 HPFS/NTFS
/dev/sda2 1403 1415 104422+ 83 Linux
/dev/sda3 1416 1546 1052257+ 82 Linux swap / Solaris
/dev/sda4 1547 9729 65729947+ 5 Extended
/dev/sda5 1547 7920 51199123+ 8e Linux LVM

Вывод, приведенный выше, показывает, что у нас доступно 1809 цилиндров (9729 — 7920 = 1809), и мы можем выполнить вычисление (1809 * 16065 * 512) = 14879531520байтов, что примерно равно 14 гигабайтов.

Создание нового раздела

Следующий шаг — создание нашего нового раздела. Для примера, мы создадим раздел с типом «Linux» и размером 1 гигабайт. Мы используем команду «n» для создания нового раздела. Нас спросят, с какого цилиндра будет начинаться раздел (я советую оставить по умолчанию) и необходимый размер раздела:

Command (m for help): n
First cylinder (7921—9729, default 7921):
Using default value 7921
Last cylinder or +size or +sizeM or +sizeK (7921—9729, default 9729): +1024M

После того, как раздел будет создан, мы, используя команду «p», можем отобразить на экране нашу новую таблицу раздела:

Command (m for help): p

Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1402 11261533+ 7 HPFS/NTFS
/dev/sda2 1403 1415 104422+ 83 Linux
/dev/sda3 1416 1546 1052257+ 82 Linux swap / Solaris
/dev/sda4 1547 9729 65729947+ 5 Extended
/dev/sda5 1547 7920 51199123+ 8e Linux LVM
/dev/sda6 7921 8045 1004031 83 Linux

Запись нового раздела на диск

Теперь, когда раздел был успешно создан, вы можете записать изменения на диск, нажав клавишу «w», а затем Enter:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

Активирование вновь созданного раздела

Как только новая таблица раздела записана на жесткий диск, ядро имеет возможность читать новую таблицу раздела без необходимости перезагрузки. Первый шаг — создание точки монтирования для нового раздела, в нашем примере мы будем использовать /media/newpart, а также использование команды «partprobe» для того, чтобы ядро имело возможность перечитать таблицу раздела:

linux-1reo:~ # mkdir /media/newpart
linux-1reo:~ # partprobe

Теперь, когда новая точка монтирования создана и ядро перечитало таблицу раздела, вы можете отформатировать раздел и разместить на нем файловую систему на ваш выбор (ext2, ext3, reiserfs и т.д.). В нашем примере, мы выбрали reiserfs:

linux-1reo:~ # mkfs.reiserfs /dev/sda6
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
The Defense Advanced Research Projects Agency (DARPA, www.darpa.mil) is the
primary sponsor of Reiser4. DARPA does not endorse this project; it merely
sponsors it.

Alexander Lyamin keeps our hardware running, and was very generous to our
project in many little ways.

Guessing about desired format... Kernel 2.6.16.21−0.8-default is running.
Format 3.6 with standard journal
Count of blocks on the device: 126496
Number of blocks consumed by mkreiserfs formatting process: 8215
Blocksize: 4096
Hash function used to sort names: "r5″
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: e20e2dc1−7277−4ab1−930c-038e54548540
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON ‘/dev/sda3′!
Continue (y/n):y
Initializing journal — 0%….20%….40%….60%….80%….100%
Syncing...ok
ReiserFS is successfully created on /dev/sda3.
linux-1reo:~ #

Как только размер будет отформатирован, вы можете примонтировать и использовать ваш вновь созданный раздел:

linux-1reo:~ # mount /dev/sda6 /media/partnew

Заключение

После монтирования созданного и отформатированного раздела вы можете хранить ваши файлы на этом разделе безо всяких пробле, вы можете также добавить ваш новый раздел в файл /etc/fstab для того, чтобы ваш раздел монтировался после каждой перезагрузки.

Протестировано на:

  • SUSE Linux Enterprise Desktop 10
  • SUSE Linux Enterprise Server 10

Основы BASH. Часть 2.

Основы BASH. Часть 2. / Linux для всех / Хабрахабр

Извиняюсь за такую большую задержку между статьями, но сессия дает о себе знать в самый неподходящий момент :)
Всем спасибо за замечания, критику и дополнения, которые были озвучены в комментариях к прошлой статье.
Эта часть, как и обещал, будет посвящена циклам, математическим операциям и использованию внешних команд.
Начнем.

Циклы. Цикл for-in.


Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение поочередно в списке присваивается переменной.
Синтаксис следующий:
for переменная in список_значений
do
команды
done

Рассмотрим небольшой пример:
#!/bin/bash
for i in 0 1 2 3 4 #переменной $i будем поочередно присваивать значения от 0 до 4 включительно
do
echo "Console number is $i" >> /dev/pts/$i #Пишем в файл /dev/pts/$i(файл виртуального терминала) строку "Console number is $i"
done #цикл окончен
exit 0

После выполнения примера в первых 5 виртуальных консолях(терминалах) появится строка с её номером. В переменную $i поочередно подставляются значения из списка и в цикле идет работа со значением этой переменной

Циклы. Цикл while.


Цикл while сложнее цикла for-in и используется для повторения команд, пока какое-то выражение истинно( код возврата = 0).
Синтаксис оператора следующий:
while выражение или команда возвращающая код возврата
do
команды
done

Пример работы цикла рассмотрим на следующем примере:
#!/bin/bash
again=yes #присваиваем значение "yes" переменной again
while [ "$again" = "yes" ] #Будем выполнять цикл, пока $again будет равно "yes"
do
echo "Please enter a name:"
read name
echo "The name you entered is $name"

echo "Do you wish to continue?"
read again
done
echo "Bye-Bye"

А теперь результат работы скрипта:
ite@ite-desktop:~$ ./bash2_primer1.sh
Please enter a name:
ite
The name you entered is ite
Do you wish to continue?
yes
Please enter a name:
mihail
The name you entered is mihail
Do you wish to continue?
no
Bye-Bye


Как видим цикл выполняется до тех пор, пока мы не введем что-то отличное от «yes». Между do и done можно описывать любые структуры, операторы и т.п., все они будут выполнятся в цикле.Но следует быть осторожным с этим циклом, если вы запустите на выполнение в нём какую-либо команду, без изменения переменной выражения, вы можете попасть в бесконечный цикл.
Теперь об условии истинности. После while, как и в условном операторе if-then-else можно вставлять любое выражение или команду, которая возвращает код возврата, и цикл будет исполнятся до тех пор, пока код возврата = 0! Оператор "[" аналог команды test, которая проверяет истинность условия, которое ей передали.

Рассмотрим еще один пример, я взял его из книги Advanced Bash scripting. Уж очень он мне понравился :), но я его немного упростил. В этом примере мы познакомимся с еще одним типом циклов UNTIL-DO. Эта практически полный аналог цикла WHILE-DO, только выполняется пока какое-то выражение ложно.
Вот пример:
#!/bin/bash
echo "Введите числитель: "
read dividend
echo "Введите знаменатель: "
read divisor

dnd=$dividend #мы будем изменять переменные dividend и divisor,
#сохраним их знания в других переменных, т.к. они нам
#понадобятся
dvs=$divisor
remainder=1

until [ "$remainder" -eq 0 ]
do
let "remainder = dividend % divisor"
dividend=$divisor
divisor=$remainder
done

echo "НОД чисел $dnd и $dvs = $dividend"

Результат выполнения скрипта:
ite@ite-desktop:~$ ./bash2_primer3.sh
Введите числитель:
100
Введите знаменатель:
90
НОД чисел 100 и 90 = 10


Математические операции


Команда let.
Команда let производит арифметические операции над числами и переменными.
Рассмотрим небольшой пример, в котором мы производим некоторые вычисления над введенными числами:
#!/bin/bash
echo "Введите a: "
read a
echo "Введите b: "
read b

let "c = a + b" #сложение
echo "a+b= $c"
let "c = a / b" #деление
echo "a/b= $c"
let "c <<= 2" #сдвигает c на 2 разряда влево
echo "c после сдвига на 2 разряда: $c"
let "c = a % b" # находит остаток от деления a на b
echo "$a / $b. остаток: $c "

Результат выполнения:
ite@ite-desktop:~$ ./bash2_primer2.sh
Введите a:
123
Введите b:
12
a+b= 135
a/b= 10
c после сдвига на 2 разряда: 40
123 / 12. остаток: 3

Ну вот, как видите ничего сложного, список математических операций стандартный:
+ — сложение
— — вычитание
* — умножение
/ — деление
** — возведение в степень
% — модуль(деление по модулю), остаток от деления
let позволяет использовать сокращения арифметических команд, тем самым сокращая кол-во используемых переменных. Например: a = a+b эквивалентно a +=b и т.д

Работа с внешними программами при написании shell-скриптов


Для начала немного полезной теории.
Перенаправление потоков.

В bash(как и многих других оболочках) есть встроенные файловые дескрипторы: 0 (stdin), 1 (stdout), 2 (stderr).
stdout — Стандартный вывод. Сюда попадает все что выводят программы
stdin — Стандартный ввод. Это все что набирает юзер в консоли
stderr — Стандартный вывод ошибок.
Для операций с этими дескрипторами, существуют специальные символы: > (перенаправление вывода), < (перенаправление ввода). Оперировать ими не сложно. Например:
cat /dev/random > /dev/null
перенаправить вывод команды cat /dev/random в /dev/null (абсолютно бесполезная операция :)) ) или
ls -la > listing
записать в файл listing содержание текущего каталога (уже полезней)
Если есть необходимость дописывать в файл(при использовании ">" он заменятеся), необходимо вместо ">" использовать ">>"
sudo < my_password
после просьбы sudo ввести пароль, он возьмется из файла my_password, как будто вы его ввели с клавиатуры.
Если необходимо записать в файл только ошибки, которые могли возникнуть при работе программы, то можно использовать:
./program_with_error 2> error_file
цифра 2 перед ">" означает что нужно перенаправлять все что попадет в дескриптор 2(stderr).
Если необходимо заставить stderr писать в stdout, то это можно можно след. образом:
./program_with_error 2>&1
символ "&" означает указатель на дескриптор 1(stdout)
(Поумолчанию stderr пишет на ту консоль, в котрой работает пользователь(вренее пишет на дисплей)).

2.Конвееры.

Конвеер — очень мощный инструмент для работы с консолью Bash. Синтаксис простой:
команда1 | команда 2 — означает, что вывод команды 1 передастся на ввод команде 2
Конвееры можно группировать в цепочки и выводить с помощью перенаправления в файл, например:
ls -la | grep «hash» |sort > sortilg_list
вывод команды ls -la передается команде grep, которая отбирает все строки, в которых встретится слово hash, и передает команде сортировке sort, которая пишет результат в файл sorting_list. Все довольно понятно и просто.

Чаще всего скрипты на Bash используются в качестве автоматизации каких-то рутинных операций в консоли, отсюда иногда возникает необходимость в обработке stdout одной команды и передача на stdin другой команде, при этом результат выполнения одной команды должен быть неким образом обработан. В этом разделе я постораюсь объяснить основные принципы работы с внешними командами внутри скрипта. Думаю что примеров я привел достаточно и можно теперь писать только основные моменты.

1. Передача вывода в переменную.

Для того чтобы записать в переменную вывод какой-либо команды, достаточно заключить команду в `` ковычки, например
a = `echo "qwerty"`
echo $a

Результат работы: qwerty

Однако если вы захотите записать в переменную список директорий, то необходимо, должным образом обработать результат для помещения данных в переменную. Рассмотрим небольшой, пример:
LIST=`find /svn/ -type d 2>/dev/null| awk '{FS="/"} {print $4}'| sort|uniq | tr '\n' ' '`
for ONE_OF_LIST in $LIST
do
svnadmin hotcopy /svn/$ONE_OF_LIST /svn/temp4backup/$ONE_OF_LIST
done

Здесь мы используем цикл for-do-done для архивирование всех директорий в папке /svn/ с помощью команды svnadmin hotcopy(что в нашем случае не имеет никого значения, просто как пример). Наибольшй интерес вызывает строка: LIST=`find /svn/ -type d 2>/dev/null| awk '{FS="/"} {print $4}'| sort|uniq | tr '\n' ' '` В ней переменной LIST присваивается выполнение команды find, обработанной командами awk, sort, uniq,tr(все эти команды мы рассматривать не будем, ибо это отдельная статья). В переменной LIST будут имена всех каталогов в папке /svn/ пгомещенных в одну строку(для того чтобы её стравить циклу.

Как видно, все не сложно, достаточно понять принцип и написать пару своих скриптов. В заключении статьи хочу пожелать удачи в изучении BASH и Linux в целом. Критика, как водится приветствуется. Следующая статья возможно будет посвещена использованию таких программ как sed, awk.

Основы BASH. Часть 1.

Основы BASH. Часть 1. / Linux для всех / Хабрахабр

Безусловно, все те кто общается с ОС Linux хоть раз да имели дело(во всяком случае слышали точно) с командной оболочкой BASH. Но BASH не только командная оболочка, это еще и превосходный скриптовый язык программирования.
Цель этой статьи — познакомить поближе юзеров с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной(-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.

Введение


BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

Что необходимо знать с самого начала


1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта


Приведу как пример небольшой пример, который мы разберем:

#!/bin/bash
#указываем где у нас хранится bash-интерпретатор
parametr1=$1 #присваиваем переменной parametr1 значение первого параметра скрипта
script_name=$0 #присваиваем переменной script_name значение имени скрипта
echo "Вы запустили скрипт с именем $script_name и параметром $parametr1" # команда echo выводит определенную строку, обращение к переменным осуществляется через $имя_переменной.
echo 'Вы запустили скрипт с именем $script_name и параметром $parametr1' # здесь мы видим другие кавычки, разница в том, что в одинарных кавычках не происходит подстановки переменных.
exit 0 #Выход с кодом 0 (удачное завершение работы скрипта)


Результат выполнения скрипта:

ite@ite-desktop:~$ ./test.sh qwerty
Вы запустили скрипт с именем ./test.sh и параметром qwerty
Вы запустили скрипт с именем $script_name и параметром $parametr1


После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:

$DIRSTACK - содержимое вершины стека каталогов
$EDITOR - текстовый редактор по умолчанию
$EUID - Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как...
$UID - ...содержит реальный идентификатор, который устанавливается только при логине.
$FUNCNAME - имя текущей функции в скрипте.
$GROUPS - массив групп к которым принадлежит текущий пользователь
$HOME - домашний каталог пользователя
$HOSTNAME - ваш hostname
$HOSTTYPE - архитектура машины.
$LC_CTYPE - внутренняя переменная, котороя определяет кодировку символов
$OLDPWD - прежний рабочий каталог
$OSTYPE - тип ОС
$PATH - путь поиска программ
$PPID - идентификатор родительского процесса
$SECONDS - время работы скрипта(в сек.)
$# - общее количество параметров переданных скрипту
$* - все аргументы переданыне скрипту(выводятся в строку)
$@ - тоже самое, что и предыдущий, но параметры выводятся в столбик
$! - PID последнего запущенного в фоне процесса
$$ - PID самого скрипта

Условия


Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
#!/bin/bash
source=$1 #в переменную source засовываем первый параметр скрипта
dest=$2 #в переменную dest засовываем второй параметр скрипта

if [[ "$source" -eq "$dest" ]] # в ковычках указываем имена переменных для сравнения. -eq - логическое сравнение обозначающие "равны"
then # если они действительно равны, то
echo "Применик $dest и источник $source один и тот же файл!" #выводим сообщение об ошибке, т.к. $source и $dest у нас равны
exit 1 # выходим с ошибкой (1 - код ошибки)
else # если же они не равны
cp $source $dest # то выполняем команду cp: копируем источник в приемник
echo "Удачное копирование!"
fi #обозначаем окончание условия.

Результат выполнения скрипта:
ite@ite-desktop:~$ ./primer2.sh 1 1
Применик 1 и источник 1 один и тот же файл!
ite@ite-desktop:~$ ./primer2.sh 1 2
Удачное копирование!

Структура if-then-else используется следующим образом:
if <команда или набор команд возвращающих код возврата(0 или 1)>
then
<если выражение после if истино, то выполняется этот блок>
else
<если выражение после if ложно, тот этот>
В качестве команд возвращающих код возврата могут выступать структуры [[ , [ , test, (( )) или любая другая(или несколько) linux-команда.
test - используется для логического сравнения. после выражения, неоьбходима закрывающая скобка "]"
[ - синоним команды test
[[ - расширенная версия "[" (начиная с версии 2.02)(как в примере), внутри которой могут быть использованы || (или), & (и). Долна иметь закрывающуб скобку "]]"
(( )) - математическое сравнение.
для построения многоярусных условий вида:
if ...
then ....
else
if ....
then....
else ....

для краткости и читаемости кода, можно использовать структуру:
if ..
then ...
elif ...
then ...
elif ...

Условия. Множественный выбор


Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.
#!/bin/bash
echo "Выберите редатор для запуска:"
echo "1 Запуск программы nano"
echo "2 Запуск программы vi"
echo "3 Запуск программы emacs"
echo "4 Выход"
read doing #здесь мы читаем в переменную $doing со стандартного ввода

case $doing in
1)
/usr/bin/nano # если $doing содержит 1, то запустить nano
;;
2)
/usr/bin/vi # если $doing содержит 2, то запустить vi
;;
3)
/usr/bin/emacs # если $doing содержит 3, то запустить emacs
;;
4)
exit 0
;;
*) #если введено с клавиатуры то, что в case не описывается, выполнять следующее:
echo "Введено неправильное действие"

esac #окончание оператора case.

Результат работы:
ite@ite-desktop:~$ ./menu2.sh
Выберите редатор для запуска:
1 Запуск программы nano
2 Запуск программы vi
3 Запуск программы emacs
4 Выход

После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы :) )
Прведу список логических операторв, которые используются для конструкции if-then-else-fi:
-z # строка пуста
-n # строка не пуста
=, (==) # строки равны
!= # строки неравны
-eq # равно
-ne # неравно
-lt,(< ) # меньше
-le,(<=) # меньше или равно
-gt,(>) #больше
-ge,(>=) #больше или равно
! #отрицание логического выражения
-a,(&&) #логическое «И»
-o,(||) # логическое «ИЛИ»

С основами языка и условиями мы разобрались, чтобы не перегружать статью, разобью её на несколько частей(допустим на 3). Во второй части разберем операторы цикла и выполнение математических операций.

UPD: Исправил некоторые ошибки
UPD: Обновил часть про условия if-then-else
+124
17 декабря 2008, 16:36
ite

понедельник, 2 марта 2009 г.

Tuxologia: Другие UbuntЫ - moonOS

Tuxologia: Другие UbuntЫ - moonOS


А этот линух, на платформе Ubuntu прямо создан для скриншотов. Релиз moonOS LXDE Edition 2 под кодовым названием, напоминающим вилок капусты, “Kachana” является замоденным вариантом от 8.10.

Вот такие "симпатишные" завитушки встречают пользователя при первом знакомстве с moonOS.


Впереди нас ожидает раскрытие творческой фантазии и дизайнерской работы Chanrithy Thim из Камбоджи. Что-то напоминает? Конечно OpenGeu, оба мастера по разному придали своим дистрибутивам "лунный" оттенок.
Система в live-режиме грузится очень быстро.
Окно входа в систему (слева пока ещё пустой список юзеров; после установки, чтобы авторизоваться, нужно выделить юзера и вбить "вслепую" в окне пароля, где никаких признаков набора с клавы не будет, свой пасс на учётку):


А рабочий стол просто великолепен.


Как можно догадаться по приведённому сравнению с OpenGeu, эта ось тоже графически построена на Enlightenment 'е и LXDE, поэтому кушать метры и гигагерцы она будет умеренно. А эффекты совершенно независимы от 3D-свойств и драйвера видеокарточки.
Меню изобилует всякими красивостями: пункты переливаются, плавно двигаются и приятно чувствительны к курсору.
Конечно, на скрине этого не передать.


Иконки на рабочем столе при наведении курсора увеличиваюся, а надписи к ним при этом центрируются на значке. Так же поддерживаются анимированные воллпапперы, некоторые из которых можно сцапать on-line через меню обоев в Settings-Wallpapper.


Традиционный для "облегчённых" систем менеджер - Thunar. В такой цветовой гамме смотрится очень даже ничего.


Все кнопочки закруглённые и объёмные. Чувствуется качественная проработка мелких деталей интерфейса, лагами которых часто грешат многие линукс-системы. На скрине ползунок регулятора производительности интерфейса. Так же через меню можно выбрать дефолтовый движок между софтварным и xrender.


Терминал в системе, как ни странно, гномовский, приветствует такой вот" зверюгой":


Что касается программной начинки, то в moonOS повторяется классическая для убунт подборка + собственные (???) разработки “moonDomain”, “moonGrub”, “moonMetacity” “moonUpgrader”. Что-то напоминает Mint или мне кажется...
На скриншоте moonControl, твикер для чайников.


С помощью визарда moonAssistant можно пошагово отконфигурировать систему под себя: активировать root, убрать сатирические цитаты из терминала. moonGrub служит для создания и импорта графических тем загрузчика. moonUpdate - ну, с этим понятно...
Всё это находится в меню-System Tools.

Инсталлятор системы поддерживает русский язык, хотя для Enlightenment предпочтительнее английский (обычно я выбираю язык системы "инглиш" и русскую раскладку, пора уже линуксоидам выучить лэнгвич...), либо придётся после установки поправлять некоторые шрифты. Инсталляция moonOS проходит стандартным убунтовым методом.


На этом всё, не буду перехваливать этот красочный дистрибутив, а глюки...вылавливайте сами :) .


Другие UbuntЫ:
Другие UbuntЫ - Ubuntu Privacy Remix Другие UbuntЫ - CrunchBang
Другие UbuntЫ - OzOS
Другие UbuntЫ в скринах
Apt-get Солярка!

воскресенье, 1 марта 2009 г.

HuMan: diff

Виртуальная энциклопедия "Linux по-русски": новости, статьи, ссылки на материалы по операционной системе GNU/Linux.

Алексей Дмитриев, 24 февраля 2009

Команда diff служит для выявления различий между двумя файлами или всеми соответствующими файлами в двух директориях. Понятно, что применять команду имеет смысл только в случаях, когда исследуемые файлы или директории весьма схожи по содержанию.

Маны команды diff ограничивапются перечислением опций команды, поэтому для ее освоения пришлось провести увлекательное расследование.

Команда diff без опций

Команда diff имеет мудреный вывод, чтобы разобраться с ним, составим два файла: cot.txt и cot2.txt:

$ cat cot.txt                 $ cat cot2.txt  кот                           кот собака                        крыса ящерица                       собака                               ящерица 

И запустим команду:

$ diff cot.txt cot2.txt 1a2 > крыса 

Попробуем разобраться с выводом команды. Выражение " > крыса" явно означает, что в правом (т.е. втором) файле есть лишнее слово: "крыса". Сложнее расшифровать выражение 1a2. Поскольку "крыса" вторая строка второго файла, то логично предположить, что цифра 2 означает номер строки, различной в сравниваемых файлах. Проверим предположение, поместив "крысу" на 4 строку:

$ diff cot.txt cot2.txt 3a4 > крыса 

Так и есть, отличается 4 строка второго файла. Появились и мысли насчет первой цифры, а также буквы "a".

Я понял это так:

1. Если считать эталонным первый файл, то 3 означает строку первого файла, после которой добавлена строка "крыса", являющаяся 4 строкой второго файла. Буква "a", по-видимому, означает первую букву в английском слове "added" (добавлено).

Или по-другому:

2. Если считать эталонным второй файл, то команда diff подсказывает, что надо сделать, дабы превратить первый файл во второй. Надо после третьей строки первого файла добавить (add) четвертую строку второго файла. Тогда файлы станут одинаковыми по содержанию.

Посмотрим, что произойдет, если мы поменяем сравниваемые файлы местами - первым поставим больший файл cot2.txt, а вторым меньший cot.txt:

$ diff cot2.txt cot.txt 4d3 > крыса 

Номера строк поменялись зеркально, что не удивительно, так как аналогично поменялось и расположение сравниваемых файлов. А вот буква "a" сменилась буквой "d". Рискнем предположить, что это первая буква слова "delete" - удалить. Итак, если удалить четвертую строку первого файла, то файлы станут одинаковыми. Цифра три в правой части выражения 4d3, вероятно, показывает, после какой строки второго файла следует различие в тексте файлов.

Осталось рассмотреть случай, когда в сравниваемых файлах одинаковое число строк. Давайте слегка изменим файл cot2.txt, заменив слово "собака" на выражение "собака серая", а "крысу" уберем совсем. Теперь в обоих файлах по три строки.

$ diff cot.txt cot2.txt 2c2 < собака --- > собака серая 

Программа указывает на разницу во вторых строках файлов. А букву "с" осмелюсь интерпретировать как первую букву слова "change" (заменить). То есть команда подсказывает, что если заменить вторую строку первого файла (cot.txt) на вторую строку второго файла (cot2.txt), то файлы станут одинаковыми.

Поменяем файлы местами:

$ diff cot2.txt cot.txt 2c2 < собака серая --- > собака 

Как видите, ничего не изменилось, только теперь следует заменить вторую строку файла cot2.txt на вторую строку файла cot.txt.

Появляются некоторые общие соображения:

1. Команда diff не считает какой-либо из файлов эталонным.

2. Команда diff дает подсказку, как сделать файлы одинаковыми.

3. Если вы хотите унифицировать файлы в сторону увеличения, то первым ставьте мЕньший файл.

4. Если вы хотите унифицировать файлы в сторону уменьшения, то первым ставьте бОльший файл.

5.Величина файла измеряется в количестве строк, а не в количестве байт. Если количество строк совпадает, то критерием служит количество слов; если оно совпадает, в дело идут символы.

(Узнать параметры файла можно при помощи команды wc).

Опция -с: Контекстный формат

-C число_строк --context=число_строк

При сравнении файлов зачастую нужно видеть не только различающиеся строки, но и соседние с ними, как "сверху", так и "снизу". Эти дополнительные строки называются контекстом. Опция -с позволяет видеть желательное число строк контекста. Если число_строк не указано, то, по умолчанию, показывается по три строки контекста до и после отличающейся строки. Поэтому нам придется увеличить число строк в наших образцовых файлах:

$ diff -c cot.txt cot2.txt                   *** cot.txt     2009-02-16 20:20:58.000000000 +0300  --- cot2.txt    2009-02-16 20:20:56.000000000 +0300 *************** *** 2,8 ****   собака   ящерица   белка ! зубр   попугай   рыба   змея --- 2,8 ----   собака   ящерица   белка ! бизон   попугай   рыба   змея 

Как видите, этот формат тоже требует разъяснения. Очевидно, что в заголовке указаны сравниваемые файлы, показано, какими условными знаками (звездочками или черточками) будут помечаться относящиеся к ним строки вывода; затем указано время модификации файла (похоже, что с точностью до наносекунды!). А вот что такое +0300, не берусь сказать, может быть выяснится по ходу дальнейших исследований.

Далее следует, так сказать, "тело" вывода. Среди соответствующих условных обозначений (звездочек и черточек) указаны интервалы приведенных строк через запятую (***2,8***), а знаком восклицания помечена строка, не совпадающая в сравниваемых файлах.

Добавим строку "крыса" в конец файла cot2.txt:

$ diff -C 1 cot.txt cot2.txt *** cot.txt     2009-02-16 20:20:58.000000000 +0300 --- cot2.txt    2009-02-16 22:37:11.000000000 +0300 *************** *** 4,6 ****   белка ! зубр   попугай --- 4,6 ----   белка ! бизон   попугай *************** *** 8 **** --- 8,9 ----   змея + крыса 

Из вывода можно понять, что во втором файле добавилась строка "крыса", но не хотел бы я разбираться с различиями многостраничных файлов, где строки состоят не из одного слова, а из настоящих предложений!

Давайте уберем первую строку первого файла "кот", и, заодно, уменьшим число строк контекста до 0:

$ diff -C 0 cot.txt cot2.txt *** cot.txt     2009-02-16 22:46:29.000000000 +0300 --- cot2.txt    2009-02-16 22:37:11.000000000 +0300 *************** *** 0 **** --- 1 ---- + кот *************** *** 4 **** ! зубр --- 5 ---- ! бизон *************** *** 7 **** --- 9 ---- + крыса 

Здорово! Получилось, что мы не убрали кота из первого файла, а добавили во второй! Явно здесь первый файл служит эталоном. Чтобы убедиться в этом, восстановим кота в первом файле и уберем во втором:

$ diff -C 0 cot.txt cot2.txt *** cot.txt     2009-02-16 22:50:36.000000000 +0300 --- cot2.txt    2009-02-16 22:50:44.000000000 +0300 *************** *** 1 **** - кот --- 0 ---- *************** *** 5 **** ! зубр --- 4 ---- ! бизон *************** *** 8 **** --- 8 ---- + крыса 

Ну и ну! Нет, эталоном здесь и пахнет. Чтобы понять этот вывод, нужно сильно напрячься. В первом файле, где "кот" есть, почему-то значится "- кот". Вероятно, нужно убрать кота, чтобы строки стали одинаковы. Но почему же тогда на восьмой строке второго файла, где живет "крыса", значится "+ крыса"? В конце концов, я нашел такое объяснение:

'!'   Строка, не совпадающая в двух файлах.  '+'  Строка, которой нет соответствия в первом файле.  '-'    Строка, которой нет соответствия во втором файле. 

Да-а, к этому формату нужно привыкнуть. Впрочем, есть еще унифицированный формат.

Опция --u: Унифицированный формат

-U число_строк --unified=число_строк

Унифицированный формат по умолчанию не выводит строк контекста:

$ diff -u cot.txt cot2.txt --- cot.txt     2009-02-16 22:50:36.000000000 +0300 +++ cot2.txt    2009-02-16 22:50:44.000000000 +0300 @@ -1,8 +1,8 @@ -кот  собака  ящерица  белка -зубр +бизон  попугай  рыба  змея +крыса 

Присмотревшись и вдумавшись, можно понять следующее:

1. В заголовке сказано, что минусами помечены строки из первого файла, а плюсами - из второго.

2. Формат даты такой же, как у контекстного формата.

3. Диапазоны строк указаны для обоих файлов и отмечены знаками двойной "собаки".

4. Слова, общие для двух файлов ничем не отмечены (или, если хотите, отмечены пробелом).

5. Знаком минус помечены строки, которые есть только в первом файле, как бы изъятые из первого файла, если считать его эталонным.

6. Знаком плюс помечены строки, которых нет в первом файле, как бы добавленные к нему.

Не знаю как вам, но мне этот формат кажется наиболее понятным.

Используя опцию -U число_строк (--unified=число_строк), можно просматривать нужное число строк контекста. Я этого делать не стану, так как мои примерные файлы слишком короткие для этого. Проделайте этот опыт самостоятельно с файлами подлиннее.

Опция -y или --side-by-side (бок-о-бок) Сравнительный формат

Этот формат команды diff выдает две колонки текста, что наиболее наглядно. По умолчанию длина строки 130 символов, что хорошо для длинных строк, для статьи же неудобно. Поэтому я сразу применю опцию -W 25, которая задаст ширину колонки в 25 символов.

$ diff -y -W 25 cot.txt cot2.txt  кот         < собака          собака ящерица         ящерица белка           белка зубр        |   бизон попугай         попугай рыба            рыба змея            змея             >   крыса 

Между двумя колонками текста находится узкая колонка условных обозначений. Эти обозначения могут быть следующими:

Пробел Соответствующие строки эквивалентны. Это означает, что либо они одинаковые, либо различие игнорировано из-за одной из опций '--ignore' .

'|' Соответствующие строки разные, и либо обе приведены полностью, либо обе не полностью.

'\' Соответствующие строки разные, первая строка приведена не полностью.

'/ ' Соответствующие строки разные, вторая строка приведена не полностью.

'<' Строка содержится только в первом файле.

'>' Строка содержится только во втором файле.

'(' Строка содержится только в первом файле, но различие игнорируется.

')' Строка содержится только вo втором файле, но различие игнорируется.

У опции -y есть, в свою очередь, несколько опций (или под-опций)

--left-column (левая колонка)

Выдает только левую колонку для первого файла, а все различия показываются при помощи вышеперечисленных условных обозначений.

$ diff -y -W25 --left-column cot.txt cot2.txt кот           <        собака        (  ящерица       (        белка         (              зубр          |   бизон                       попугай       (                   рыба          (                       змея          (               >   крыса 

По-моему, все кристально ясно, может быть, я начинаю привыкать к этой команде?

Заметим в скобках, что опции --right-column (правая колонка) не существует.

--suppress-common-lines

Подавляет вывод строк, совпадающих в сравниваемых файлах:

$ diff -y -W25 --suppress-common-lines cot.txt cot2.txt  кот         < зубр        |   бизон             >   крыса 

Яснее ясного.

Жаль, что эта опция не может быть применена вместе с опцией --left-column, добавление которой никак не влияет на вывод команды.

Опция -e или --ed

Команда diff позволяет выводить результаты своей работы в формате командного файла для редактора ed:

$ diff -e cot.txt cot2.txt 8a крыса . 5c бизон . 1d 

Мы теперь достаточно знаем о синтаксисе команды diff, чтобы и без редактора понять, что означает этот вывод.

1. Инструкции показывают, как превратить первый файл во второй.

2. "8a крыса " означает добавить после восьмой строки строку "крыса ".

3. "5c бизон" означает заменить пятую строку строкой "бизон".

4. 1d значит удалить первую строку.

Однако, при желании, мы можем воспользоваться редактором ed для превращения файла cot.txt в файл cot2.txt.

Для этого сначала перенаправим вывод команды diff -e cot.txt cot2.txt в файл ed.script, который будет автоматически создан в рабочей директории:

$ diff -e cot.txt cot2.txt > ed.script

Затем запустим следующую конструкцию:

$ (cat ed.script && echo w) | ed - cot.txt

и проверим результат:

$ cat cot.txt  собака ящерица белка бизон попугай рыба змея крыса 

Полагаю, что "заклинание" в командной строке требует некоторого пояснения:

1. Применен программный канал, символом которого служит вертикальная черта (|). Вывод левой части канала служит вводом для правой части (команды ed - cot.txt).

2. Выражение в скобках в левой части программного канала, означает последовательное выполнение двух команд: cat ed.script и echo w, а знак && между ними означает логическое "и". Благодаря этому знаку вывод обеих команд объединяется:

$ (cat ed.script && echo w) 8a крыса . 5c бизон . 1d w 

Мы видим уже знакомый нам скрипт и приписанную командой echo в последней строке букву "w", которая служит командой редактора ed.

3. В правой части программного канала команда ed - cot.txt. Благодаря дефису редактор ed принимает стандартный ввод в качестве командного скрипта. Команды, сгенерированные программой diff -e, изменяют содержимое файла cot.txt, а команда w заставляет переписать этот файл с учетом изменений.

Не спрашивайте меня, почему все это так, и как можно иначе, сейчас не время рассматривать работу редактора ed - это тема отдельного исследования.

Важен факт, что файл cot.txt превратился (по своему содержанию, а не по названию) в файл cot2.txt.

Опция -f или --forward-ed (прямой ed)

Эта опция делает то же самое, что и опция -e, но выдает результат не с последней строки, а с первой, то есть в обратном порядке. Есть еще ряд отличий, в результате которых редактор ed не может использовать вывод этой опции в своей работе. Эта опция вообще бесполезна, и существует для совместимости со старыми версиями diff.

Опция -n или --rcs

Выводит результат в формате RCS - Системы управления изменениями (Revision Control System - RCS). Кто знает, что это такое, пусть читает руководство на русском языке.

Опция -D NAME

--ifdef=NAME

Как уже понятно читателю, команда diff создана программистами и для программистов, отсюда и изобилие различных форматов вывода. Ведь при написании программ чрезвычайно важно сличить разные варианты одной и той же программы, чтобы найти ошибки и разночтения.

Описываемая опция позволяет производить слияние двух файлов - текстов на языке программирования Си. Результат работы 'diff' в этом формате будет содержать все строки обоих файлов. Строки общие для файлов отображаются только один раз; разные части разделяются с помощью директив препроцессора Cи '#ifdef NAME' или '#ifndef NAME', '#else', и '

пятница, 27 февраля 2009 г.

Lancelot: Одинокий рыцарь KDE

Виртуальная энциклопедия "Linux по-русски": новости, статьи, ссылки на материалы по операционной системе GNU/Linux.

Алексей Дмитриев, 23 февраля 2009

Lancelot - это меню запуска приложений для KDE4, задуманное как место, откуда начинаются все действия в этой рабочей среде. Lancelot обеспечивает быстрый доступ к приложениям, устройствам, контактам, системной информации.

История создания

Единственным разработчиком этого проекта, как и его автором и изобретателем является Иван Чукич. (Я буду писать это имя кириллическими буквами, так как оно содержит символы то ли хорватского, то ли какого-то другого южнославянского алфавита на основе латиницы, которые есть только в Юникоде. А поскольку Юникод еще не стал единственной кодировкой, то и применение этих символов в их оригинальном написании затруднительно).

Так вот, Ивану очень не понравилось, что в KDE4 в качестве меню запуска приложений по умолчания выбран Kickoff. В отличие от прочих граждан, которые просто переключаются в меню классического стиля, Иван решил создать свое собственное меню запуска. Ему давно хотелось поэкспериментировать с альтернативными пользовательскими интерфейсами, да и опыт кое-какой был - он не раз делал апплеты для SuperKaramba, просто для собственного употребления.

Главной задумкой Чукича было создание "безщелчкового" интерфейса, позволяющего производить запуск приложений простым наведением указателя мыши.

Поначалу он задумал создать кнопки, срабатывающие, когда указатель мыши задержится на них в течение некоторого периода времени. Но это на практике приводило к множеству нечаянных (нежеланных) запусков.

Тогда Иван придумал другое решение: при наведении указателя мыши на кнопку появляется дополнительная цель - маленькая кнопочка, при наведении указателя на которую уже срабатывает основная кнопка. Это решение оказалось плодотворным и достаточно интуитивным, и почти не давало "холостых" запусков.

Для тех же, кто любит "кликать", Иван оставил возможность просто нажать на кнопку.

Расположение элементов меню тоже подчинено основной идее: дать возможность найти и запустить приложение одним "росчерком" мыши, при этом сводя к минимуму вероятность нечаянных запусков.

Lancelot начал разрабатываться только в прошлом, 2008, году, а документацию для него Иван не закончил и по сей день. Поэтому я отказался от мысли просто перевести документацию на русский язык, а решил рассказать о Ланселоте своими словами.

Общий вид

Меню Lancelot имеет четыре поля:

Слева находятся кнопки рабочих объектов: Приложения, Компьютер, Контакты, Документы.

Снизу помещены системные кнопки и меню настройки самого Ланселота.

Сверху расположена строка поиска.

Посередине большое Главное окно с содержимым выбранного объекта работы.

Уже на этой стадии знакомства с Ланселотом начинаются чудеса.

Я, обычно, во всех графических средах, которые позволяют это, располагаю панель вверху экрана - мне кажется неестественным, когда "заголовок" находится внизу "страницы". Так располагается у меня панель и в KDE. Разместив на панели значок Lancelot, я открыл это меню, и удивился, что строка поиска находится снизу, а системные кнопки наверху, тогда как в руководстве написано обратное. Я подумал сначала, что у меня какие-нибудь другие настройки по умолчанию, не может же автор так ошибаться. Затем решил попробовать перенести панель вниз экрана, как работает большинство пользователей. Открыл окно Lancelot и что же? - строка поиска и системные кнопки поменялись местами. То есть системные кнопки всегда находятся рядом с панелью - вот это забота о пользователе!

И второе чудо: окно Lancelot всегда открывается над (или под) соответствующим значком на панели. То есть, если вы хотите видеть меню запуска на привычном месте слева экрана, то и помещайте значок Ланселота самым левым на панели. Этим автор как бы намекает, что его меню должно заменить штатное меню KDE (которое, кстати, ведет себя точно так же).

Еще одна особенность: хотя окно Lancelot имеет подвижные границы, как и всякое другое, оно не может быть перетащено мышью на другое место обычным способом. Чтобы перетащить окно Lancelot мышью, нужно удерживать клавишу Alt.

Но вернемся к меню Lancelot.

Кнопки рабочих объектов понятны и без объяснения - просто наводите на них указатель мыши, и откроются соответствующие объекты.

Системные кнопки позволяют быстро заблокировать экран, открывают меню выключения компьютера и переключают пользователя. Последняя кнопка в этом ряду, на которой изображена Чаша св. Грааля, это кнопка настройки Lancelot, она открывает меню настройки. В этом меню четыре строчки: "Редактор меню KDE", "Настройка "горячих" клавиш", "Настройка меню Lancelot" и "О Ланселоте" (немного информации о программе).

Строка поиска представляет собой программу KRunner, которая открывается обычно из Главного меню KDE кнопкой "Выполнить команду" или сочетанием клавиш Alt+F2. Поэтому строка поиска умеет все, что умеет эта программа: находить не только приложения, но и контакты, закладки и прочее, а также работает как калькулятор. (Нужно ввести сначала знак равенства, затем необходимое арифметическое действие (скажем, =23+4), глядь, а в главном окне уже результат написан рядом со значком калькулятора).

В Главном окне отображается выбранный объект, либо результаты поиска или вычислений. Все это понятно без объяснений, не считая объекта "Приложения" (Applications).

При открытии объекта Applications в левой части окна будут помещаться Избранные приложения (Favourites), а правой - категории приложений и те приложения, что вы поместили на "корневой" уровень дерева приложений в Главном меню KDE.

Чтобы добавить или удалить приложение из Favourites, щелкните на нем правой кнопкой мыши и выберите нужное действие из появившегося списка.

Если нужно запустить приложение, не входящее в список Избранных, то нужно действовать обычным способом: выбрать категорию, в которой находится нужное приложение. Откроется следующий уровень, список Favourites скроется, а предыдущие уровни сожмутся, чтобы оставить больше места для вновь открытого уровня. Если вы хотите всегда иметь только две колонки, то это можно настроить через меню настройки Lancelot (кнопка Чаша).

Апплет запуска - Lancelot Launcher

По умолчанию это значок, изображающий Чашу св. Грааля, который располагается у вас на панели, либо на Рабочем столе, либо в Главном меню. Последнее совершенно бессмысленно, так как Lancelot как раз призван заменить Главное меню.

Однако апплет запускает Lancelot независимо от того, где вы его поместите.

При правом клике мышью на значке Чаши откроется меню, где будет пункт Lancelot Launcher settings (Настройки Lancelot Launcher). В этих настройках можно выбрать значок для апплета запуска вместо Чаши. Еще можно заменить один значок на четыре, соответствующие кнопкам Рабочих объектов: Приложения, Компьютер, Контакты, Документы. И еще можно установить порядок запуска Lancelot: простым наведением мыши, или щелчком.

Что такое Lancelot Part (часть Lancelot)

В диалоге "Добавить мини-приложение" (Add Widgets) есть такой виджет: Lancelot Part. Однако при его добавлении появляется значок с Чашей, который при открывании оказывается пустым. Дело в том, что "части Ланселота" должны, по замыслу автора, добавляться методом перетаскивания.

Перетаскивать части можно на панель, на рабочий стол, или на этот пустой значок Lancelot Part. Вот он и пригодится. Смысл этих "частей Ланселота" в том, чтобы иметь кусочек Lancelot, содержащий одно или несколько приложений или категорий приложений для скорейшего их запуска.

Однако перетаскивать можно не все пункты обширного меню Lancelot, а только некоторые. Автор в руководстве сам толком не смог объяснить, какие части можно, а какие нельзя перетаскивать. Поэтому он составил следующую диаграмму:

Голубым помечены пункты, из которых можно создавать части.

Зеленым помечены пункты, из которых можно создавать части, либо FolderViews (Виды Папок - что это такое, осталось неизвестным, видимо автор не успел про них написать в руководстве).

Сиреневым помечены пункты, из которых нельзя создавать части, но можно создавать значки на панели.

Серым помечены пункты, которые вообще нельзя перетаскивать.

Также можно перетаскивать пункты из уже готовых "частей Ланселота".

При щелчке правой кнопкой мыши на значке Lancelot Part появляется меню настройки, позволяющее настроить этот значок. Можно выбрать: открывать ли Part наведением или щелчком, а также где располагать кнопочки-цели - справа или слева.

Как добавлять приложения в меню Lancelot

Нужно открыть Редактор приложений KDE из того же Ланселота, добавить новое приложение в Главное меню, а в Lancelot оно появится автоматически. При этом вовсе не обязательно открывать само Главное меню.

Подведение итогов

Меню запуска приложений Lancelot, несмотря на некоторую сыроватость, представляется мне достойной заменой Главному меню KDE. Его намного проще настраивать, а запуск приложений в режиме наведения просто доставляет удовольствие. Запускать приложения при помощи Ланселота несравненно удобнее, чем из классического Главного меню, не говоря уже про стиль Kickoff.

Как у всякой молодой программы, у Ланселота много недоработок, но отказов и откровенных багов я не встретил.

Думаю, что если к нему привыкнешь, то многочисленные кнопки на панели уже не понадобятся.

среда, 25 февраля 2009 г.

OpenProj как замена Microsoft Projec

Нашел вот новость, типа "проект OpenProj загрузило миллион пользователей. OpenProj (http://openproj.org/) представляет собой открытую альтернативу Microsoft Project. Исходные тексты распространяются в рамках лицензии Common Public Attribution License (CPAL), основанной на Mozilla Public License".

Скачал себе .rpm с сайта разработчика. Запустил установку. OpenSUSE залила кучу зависимостей со своих репозиториев, но программа стала нормально. Честно говоря, первое впечатление очень приличное. Не скажу, что я специалист по подобным менеджерам проектов, но для офисных OpenProj должен подойти полностью. В общем советую обратить внимание.

5 советов по работе в Google Chrome

Официальный блог - Google Россия: 5 советов по работе в Google Chrome

Алексей Шелестенко, маркетинг Google Россия

Новые продукты или сервисы выходят в Google с завидной частотой: каждую неделю можно услышать "Google выпускает новый сервис" или "Google улучшил функциональность такого-то продукта". И это естественно - у нас есть множество идей и задумок, начиная с поиска в Интернете (наша главная задача) и заканчивая полётами в космос (Google Lunar X Prize) и альтернативными источниками энергии (Re-C). Каждый такой запуск - это, по сути, сообщение о том, что мы обнаружили (придумали, улучшили) способ выполнять привычные задачи ещё эффективнее, ещё проще, и приглашение попробовать новшество. Если оно поможет кому-то найти нужную страницу, отправить письмо или получить важную новость быстрее и проще - мы только рады.

Новый браузер Google Chrome - не исключение. Выпуская его, мы хотели предложить пользователям новый инструмент для работы в Интернете, позволяющий сэкономить ещё больше времени при выполнении привычных задач. Я не стану рассказывать обо всех особенностях Google Chrome - его скорость работы, эффективность использования пространства экрана и лёгкость доступа к наиболее часто посещаемым страницам нужно просто попробовать. Сегодня я хотел бы поделиться своими любимыми особенностями Google Chrome, позволяющими мне ещё больше оптимизировать работу в Интернете. Назовём это пятью советами для тех, кто любит как можно больше кататься и как можно меньше возить сани.

1. Поиск по любимым сайтам прямо из адресной строки
Надеюсь, все знают, что из адресной строки Google Chrome можно совершать поиск по Интернету. Введите поисковой запрос, и Google Chrome будет искать его в поисковой системе, выставленной у вас по умолчанию.




Но Google Chrome умеет больше. Когда вы находитесь на каком-нибудь сайте и выполняете на нём поиск, Google Chrome запоминает, что на этом сайте можно искать. В следующий раз, когда вы начнёте вводить в адресную строку адрес этого сайта, можно просто нажать клавишу Tab и вводить поисковой запрос. Google Chrome автоматически выведет вас прямо на страницу с результатами поиска на этом сайте.


Но и это ещё не всё. Зайдите в меню Параметры - Основные и нажмите на кнопку "Управление" Поиска по умолчанию. Здесь перечислены все сайты, на которых вы искали. Выбрав любой из них, вы можете нажать "Изменить" и задать ключевое слово.

Например, я часто ищу интересующие меня факты в Википедии. Я задал поиску по Wikipedia ключевое слово wiki, и теперь если мне нужно найти, что такое Hagnesta Hill, я просто пишу в поисковой строке "wiki hagnesta hill" (или без ключевого слова - en.wikipedia.org hagnesta hill) и попадаю прямиком на нужную мне страницу.

Я задал каждому такому сайту своё короткое ключевое слово, и теперь ищу видеоролики на YouTube, перевод шведских слов на Lexin и многое другое прямиком из адресной строки.

Теперь, когда не нужно сначала вводить адрес самого сайта, ждать пока он загрузится, искать поисковое окно (или переходить на внутреннюю страницу поиска), я экономлю на каждом таком поиске от нескольких секунд до минуты. Мелочь, а приятно!


2. Работать одновременно в двух аккаунтах на одном сайте.
Те из вас, кому приходится работать в двух аккаунтах одновременно - например, два почтовых адреса, два профиля в социальной сети, - знают, что приходится выходить из одного, логиниться под другим, потом снова выходить из одного и заходить в другой, каждый раз при этом вводя имя пользователя/Email и пароль. Это дико неудобно.

Google Chrome позволяет решить эту проблему. Открываете новое окно в режиме "Инкогнито" (Ctrl-Shift-N) и в нём открываете второй аккаунт своей почты. Так у вас могут быть открыты одновременно два разных почтовых ящика на Gmail, и они не будут "видеть" друг друга. Представьте, сколько времени вы экономите на переключении между аккаунтами!

Теперь, если вам станет скучно, вы можете даже обмениваться сами с собой мгновенными сообщениями с двух аккаунтов Google Talk! =)


3. Запуск Google Chrome с параметрами
Дополнительные параметры работы Google Chrome можно задавать через командную строку свойств ярлыка. Например, столь актуальная для некоторых пользователей возможность просмотра страниц без отображения картинок (полезно, когда у вас низкая скорость подключения или высокая стоимость трафика), предусмотрена как отдельный режим. Создаёте дополнительный ярлык для "облегчённого" запуска Google Chrome, и в командной строке ярлыка дописываете параметр -disable-images . Теперь, запустив такой вариант браузера, вы не будете видеть картинки. Существуют и многие другие параметры для запуска Google Chrome - при желании вы можете найти их сами.


4. Ярлыки веб-приложений
...или ярлыки сайтов. Если вы часто пользуетесь каким-то сайтом и он у вас всегда открыт, вы можете создать для него ярлык отдельного запуска на рабочем столе или в панели быстрого запуска. Сайт будет открываться в отдельном окне без каких-либо панелей браузера, и будет "жить" независимо от основного окна браузера. Например, чтобы создать такое окно для Gmail или для любимой социальной сети, просто зайдите на этот сайт, и выберите в меню "Создать ярлыки приложения..."


5. Перетаскиваемые вкладки
Вкладки в Google Chrome можно перетаскивать мышкой не только в одном окне, но и "вытаскивать" их из одного окна в другое, или делать их отдельным окном. Это удобно, если вам нужно часто переключаться между двумя вкладками - просто вытаскиваете одну в отдельное окно, и затем переключаетесь между двумя окнами стандартной комбинацией клавиш Windows - Alt+Tab.


Google Chrome постоянно улучшается, и существует ещё масса возможностей, которые вы можете найти сами. Если вы хотите поделиться своими любимыми особенностями Google Chrome, оставляйте свои комментарии ниже.

Удачной работы с Google Chrome!

вторник, 24 февраля 2009 г.

Создание базы данных контактов в OpenOffice

Виртуальная энциклопедия "Linux по-русски": новости, статьи, ссылки на материалы по операционной системе GNU/Linux.

Оригинал: Creating a Contacts Database in OpenOffice
Автор: Carla Schroder
Дата: 20 марта 2008
Перевод: Г.Лазов
Дата перевода: 18 февраля 2009

Управление контактами

В предыдущей статье мы научились создавать страницы с этикетками, визитками и стандартными письмами, используя OpenOffice Writer и Base. Этапы создания в OpenOffice любого документа для почтовой рассылки довольно просты, но одним из подводных камней может оказаться создание БД ваших контактов. Ваш список контактов должен находиться в Base, и с этим могут быть проблемы. Хорошая новость в том, что Base может импортировать данные из других БД, электронных таблиц, текстовых файлов с разделителями и адресных книг e-mail. На рисунке 1 показано окно импорта. В вашем случае содержимое окна может быть немного другим, в зависимости от того, какой дистрибутив Linux вы используете.

Рисунок 1: Окно импорта
Рисунок 1: Окно импорта

Base может подключаться напрямую к большинству реляционных БД, таких как MySQL, PostgreSQL, Oracle, Adabas D и любых других БД, которые поддерживают драйвера ODBC (Open Database Connectivity, открытая связь с базами данных) и JDBC (Java database connectivity, связь с базами данных Java). Таким образом, Base также функционирует как графический интерфейс к другим БД, т.е. вы можете использовать этот компонент для их редактирования. Адресные книги, электронные таблицы и текстовые файлы при этом доступны только для чтения. Вы можете импортировать данные из них в Base, но если вы измените исходный документ, то вам придется вручную импортировать новые данные; вы не можете изменить их или получить прямой доступ из Base.

Мои контакты находятся в адресной книге KDE. Импортировать их в Base настолько легко, что даже ваша кошка с этим справится!

  • Файл -> Создать -> Базу данных
  • Подключиться к существующей базе данных
  • Да, зарегистрировать базу данных и Открыть базу для редактирования
  • Жмем Готово, вводим имя и сохраняем новый файл.
  • Вы увидите что-то вроде Рисунка 2. Дважды щелкните на Адресная книга, чтобы увидеть импортированные данные.
Рисунок 2: База данных адресной книги
Рисунок 2: База данных адресной книги

Если Base не может напрямую импортировать данные из вашей адресной книги, попробуйте экспортировать адреса в .csv файл (файл данных с разделителями в виде запятых). Затем в выпадающем списке "Подключиться к существующей базе данных", выберите "Текст". Следующее окно запросит путь к файлу. Не забудьте отметить "Файл, "значений разделенных запятой" (*.csv)" и затем выберите корректные разделители. Если .csv файл сформирован корректно, проблем с ним у Base не будет. Ниже представлен пример-отрывок из моей экспортированной адресной книги:

"Family Name","Given Name","Honorific Prefixes","Home Phone", "Home Fax","Home Address Street","Home Address City", "Home Address State","Home Address Zip Code" "Schroder","Carla","Ms.","","","5678 EndOfTheLineLane", "Red Cowtown","Oregon","54321" 

Хотя в примере присутствуют разрывы строк для удобства чтения, реальные разрывы есть только на тех концах строк, где нет запятых. Количество полей в строке определения полей (это первая строка файла) и в строках данных должно точно совпадать. В примере их (полей) девять. Все пустые поля обязательно должны содержать "" в виде заполнителя, а каждое поле отделяется запятой. Вы можете использовать в качестве разделителя запятую, пробел, табуляцию, двоеточие или точку с запятой.

Подключение к MySQL или PostgreSQL

Для подключения к MySQL или PostgreSQL (или другим внешним базам данных) вам потребуются специальные драйвера. Если вы используете Debian (или *buntu, или Mepis, или любые другие системы этого семейства), то вам потребуется пакет unixODBC для поддержки ODBC, а также драйвер для вашей конкретной БД:

  • odbc-postgresql для PostgreSQL
  • libmyodbc для MySQL
  • libsqliteodbc для sqlite
  • mdbtools для MS Access
  • tdsodbc для Sybase SQL и MS SQL

Для PostgreSQL альтернативным вариантом является пакет openoffice.org-sdbc-postgresql, который заменяет как ODBC, так и JDBC драйвера.

Также вы можете использовать следующие JDBC драйвера:

  • openoffice.org-sdbc-postgresql
  • libpg-java для PostgreSQL
  • libmysql-java для MySQL

Fedora использует другие пакеты, и их не так много, как для Debian:

  • unixODBC.i386
  • postgresql-odbc.i386
  • mysql-connector-odbc.i386
  • postgresql-jdbc.i386
  • mysql-connector-java.i386

Любые драйвера, которые отсутствуют в вашем дистрибутиве, вы можете скачать с OpenOffice.org (см. источники) или у разработчика вашей БД. В чем же разница между ODBC и JDBC драйверами? Они немного отличаются по скорости и функциональности. К тому же, JDBC драйвера являются кроссплатформенными, хотя я не думаю, что это важно для кого-то кроме разработчиков. Если у вас есть проблемы с подключением к внешним БД через Base, экспортируйте нужные вам данные в .csv файл, и уже его импортируйте в Base. Base обожает правильно сформированные файлы с разделителями, а их создание - не проблема даже для новичков в работе с БД.

Создание базы данных с нуля

Создание новой БД контактов с нуля - не такая уж плохая идея! Как обычно, самое скучное и нудное - ввод самих данных. Открываем Файл -> Создать -> Базу данных -> Создать новую базу данных -> Да, зарегистрировать базу данных и Открыть базу для редактирования. В Base встроен очень неплохой мастер: щелкните по иконке Таблицы и выберите Использовать мастер для создания таблицы. Он содержит набор шаблонов для множества различных типов баз данных, включая Контакты (смотрите Рисунок 3). Обратите внимание на кнопки со стрелочками вверх/вниз - они используются для упорядочивания полей по вашему усмотрению.

Рисунок 3: Создание базы данных
Рисунок 3: Создание базы данных

Если вам захочется навести порядок и почистить место, идем сюда - Сервис -> Параметры -> База данных OpenOffice.org -> Базы данных - и удаляем любые базы данных, от которых хочется избавиться. Заметьте, что их нельзя удалить обычными методами, вроде использования файлового менеджера или команды rm, потому что Base регистрирует каждую свою БД. И чтобы удалить базу, нужно сначала отменить эту регистрацию.

Источники


Carla Schroder - автор книг "Linux Cookbook" и недавно вышедшей "Linux Networking Cookbook". Она регулярно публикует свои статьи на сайте LinuxPlanet.