Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Письмо по поводу книги "Линукс для пользователя"

Непомнящих Антон

Я читаю вашу книгу "Линукс для пользователя" на www.linuxcenter.ru и, к сожалению, нахожу там множество ошибок (рекомендую читать книгу на сайте rus-linux.net, поскольку в эту версию я оперативно вношу исправления. В.Костромин).

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

Я давно искал такую книгу, чтобы люди, прочитав ее могли легко понять основные приемы работы в Linux. Я влюблен в эту систему и мне очень жаль тех, кто продолжает бороться с глюками и зависаниями Win и переустанавливать ОС каждый месяц (или чаще или реже - не имеет значения - переустанавливать ОС нонсенс, если вдуматься!) Хотелось бы им помочь. Пусть хотя бы будет хорошее руководство! Без ошибок...

Предлагаю размещать примечания прямо в тексте: Для пользователя, в первую очередь, будет _намного_ удобнее. А вот если человек, не прочитав примечание, получит расхождение с книгой и тем, что видит на экране, негатив появится большой.

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

Страница и абзац Напечатано Должно быть 
gl_04_02.html
(стр.77, 9-ая строка сверху)
[user]$ ls -l -i - r [user]$ ls -l -i -r (без пробела перед r)
gl_04_04.html
(стр.84, 6-9-ая строки снизу)
/dev/ttS
Файлы, обеспечивающие работу с последовательными портами. /dev/ttyS0 соответствует COM1 в MS-DOS, /dev/ttyS1 — COM2. Если ваша мышь подключается через последовательный порт, то /dev/mouse является символической ссылкой на соответствующий /dev/ttySN
/dev/ttyS
Файлы, обеспечивающие работу с последовательными портами. /dev/ttyS0 соответствует COM1 в MS-DOS, /dev/ttyS1 — COM2. Если ваша мышь подключается через последовательный порт, то /dev/mouse является символической ссылкой на соответствующий /dev/ttySN
gl_04_06.html
(стр.95, 14-ая строка сверху)
нажмите комбинацию клавиш <Ctrl>+<D> или <Ctrl>+<C>, и все, что вы ввели, будет записано в newfile. нажмите комбинацию клавиш <Ctrl>+<D>, и все, что вы ввели, будет записано в newfile.
Если завершить эту команду нажатием клавиш <Ctrl>+<C>, то будет создан пустой файл newfile.
gl_04_06.html
(стр.96, 20-ая строка снизу)
Более того, она сначала копирует файл (или каталог), а только потом удаляет исходный файл (каталог). Не совсем верно. Команда mv не "копирует, а потом удаляет", а именно перемещает. Т.е. если перемещается файл в пределах одной файловой системы (на одном локальном диске), то просто будет изменена запись о его положении в дереве каталогов, а копирование и удаление происходит только в том случае, когда происходит перемещение файла с одного диска на другой (и это естественно).
gl_04_06.html
(стр.100, 14-ая строка снизу)

[user]$ find /home/kos \( \( -name *.tmp \) -or \( -size +200 \) \)

[user]$ find /home/kos \( \( -name '*.tmp' \) -or \( -size +200 \) \)
то есть *.tmp должно быть взято в кавычки, иначе bash его раскроет

Кавычки не играют роли в том случае, если в текущей дирректории нет файлов с маской *.tmp, а вы попробуйте их создать! Дело в том, что bash действует так (выяснено путем опытов и не претендует на стопроцентную достоверность):
1) если с командной строки передается параметр с маскирующими символами (* ?), то выполняется поиск соответствующих файлов и, если они найдены, маска раскрывается в имена этих файлов, разделенные пробелами.
2) если файлы с именами, отвечающими маске _не_ найдены, то параметр командной строки - маска передается "как есть".

Док-во :) Создайте небольшой скрипт или програмку на С:

env.sh:
[code]
#!/bin/sh
echo $1
[/code]

env.c (To compile: gcc -o env env.c):
[code]
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc > 1)
puts(argv[1]);
return 0;
}
[/code]

1) Создайте каталог ~/1. В нём файл 2.tmp
2) Из каталога ~ запустите env.sh или env:
$ ./env.sh *.tmp
На экран выдаст
*.tmp
Т.е. маска не раскрылась!

Теперь создайте файл ~/1.tmp и сделайте (2) На экране окажется
1.tmp
! Маска была раскрыта в соответствии с содержимым текущего каталога. Теперь запустите (из каталога ~) команду :
find ~ -name *.tmp
Она найдет только файл ~/1.tmp! Это произошло т.к. команде find было передано не *.tmp, а 1.tmp, т.е. раскрытая маска в текущем каталоге. Следовательно, нужно использовать кавычки для однозначного результата! Иначе bash может раскрыть маску. Поэтому и команды типа cat или cp представляются элементарнейшими: cat просто открывает файлы по именам, перечисленным в командной строке, читает их и выдает результат в stdout. А ни какой магии в применении * или ? нет. Т.е. cat сама не раскрывает эти маски, она вообще ничего не раскрывает в именах файлов! Кстати, в DOS действует подобный подход. Все маски файлов, заданные с командной строки, раскрываются shell (or command.com).

Раскрытие путей (и, следовательно, имен файлов) выполняется так (дословный перевод пунка Pathname expansion):

После после разбиения командной строки на слова (см. man bash - пункт Word splitting), если не установлена опция -f, bash проверяет каждое слово на наличие символов *, ? и [. Если найден хотябы один из этих символов, то слово понимается как _шаблон_ (маска, другими словами), и заменяется на отсортированный в алфавитном порядке список имен файлов, отвечающих данному шаблону. Если таких файлов не найдено, и опция nullglob отключена (а, по-умолчанию, так и есть), слово остается неизменным (т.е. вместе со всеми звездочками, вопросиками и скобочками :). Если установлена опция nullglob и не найдено файлов, соответствующих данному шаблону, то слово удаляется.

Ну, и там еще всякие опции рассматриваются, которые не меняют смысла, описанного выше.

gl_04_06.html
(стр.102, 5-ая строка сверху)
размер выходных файлов принимается равным 1 МБайт. split разбивает файлы не по 1 МБ. Как сказано в info coreutils split, в каждый выходной файл записывается по 1000 строк из исходного файла (в последнем из выходных файлов, естественно, столько, сколько останется). Поскольку строки могут быть разной длины, то и размер файлов получается разным (а что получится в случае разбиения бинарных файлов, сказать вообще трудно).
gl_07_04.html
(стр.210, 14-16-ая строки снизу)
то берется общесистемный файл /etc/X11/xinit/xinitrc, т.е. "clientargs" = "/etc/X11/xinit/xinitrc". то берется общесистемный файл /etc/X11/xinit/xinitrc, т.е. clientargs="/etc/X11/xinit/xinitrc".
gl_08_03.html
(стр.230, 16-18-ая строки сверху)
Отметим, что для создания файла подкачки нельзя использовать команду cp, поскольку этот файл должен занимать непрерывную область на диске, что не обеспечивается командой копирования. Неверно. Этот файл не обязан занимать напрерывную область. cp использовать можно, но dd просто удобнее, т.к. позволяет задать точные размеры создаваемого файла. И dd не создает непрерывный файл на диске - она просто копирует, а тем, как расположен (разбросан) файл по диску, занимается драйвер файловой системы или ядро.
gl_08_03.html
(стр.231, 1-2-ая строки сверху)
Эта команда необходима для того, чтобы ядро могло снова считать в память данные из области подкачки. Надо бы пояснить, что вы имели в виду.
gl_08_05.html
(стр.245, 11-12-ая строки сверху)
Команда useradd заводит бюджет нового пользователя, создает для него домашний каталог, копирует в него файлы конфигурации из каталога /etc/skel. Неверно, useradd только создает новый аккаунт, домашний каталог создается только в том случае, если явно указана опция -m. Для переноса конфигурационных файлов из /etc/skel необходимо указать опцию -k, причем -k можно использовать только вместе с -m. По умолчанию домашний каталог и конфигурационные файлы в нем не создаются.
gl_08_05.html
(стр.245, 8-11-ая строки снизу)
Команда usermod имеет те же опции, что и useradd, только используется для изменения параметров существующего пользователя, причем на момент применения этой команды суперпользователем данный пользователь не должен быть логирован в системе. Не совсем верно, нельзя менять только UID и имя залогиненного пользователя.
gl_08_06.html
(стр.247, 19-20-ая строки снизу)
Если вы хотите получить сведения об объеме свободного пространства в более привычных мегабайтах, дайте команду с параметром -h: Если вы хотите получить сведения об объеме свободного пространства в более привычных единицах (МБ, КБ, ГБ), дайте команду с параметром -h:
gl_08_06.html
(стр.248, 13-ая строки сверху)
Если маленькую s заменить на большую S, то выводиться будет только информация об объеме подкаталогов (но не файлов), что иногда тоже полезно. Если маленькую s заменить на большую S, то выводиться будет только информация об объеме каталогов, не включая размеры их подкаталогов, что иногда тоже полезно.
gl_08_08.html
(стр.254, 7-ая строки сверху)
Только не стоит делать это в файле ~/bashrc, Только не стоит делать это в файле ~/.bashrc,
gl_08_08.html
(стр.254, 5-ая строки снизу)
alias ls = "ls -F --color" alias ls="ls -F --color"
(не нужны пробелы возле знака равенства, иначе
bash: alias: ls: not found
bash: alias: =: not found
bash: alias: ls -F: not found
gl_09_05.html
(стр.283, 16-ая строка снизу)
Опция -е служит для тестирования скорости непосредственно записи на диск (а не в кэш-память). Здесь опечатка, опция -t
gl_09_06.html
(стр.300, 8-ая строка сверху)
Далее следует имя файла шрифта либо синоним (aliace) имени шрифта. Далее следует имя файла шрифта либо синоним (alias) имени шрифта.

Потом, в главе 4 (gl_04_06.html) вы пишете: "Надо признать, что работа со сменными носителями в Linux менее удобна."
Это не правильно! Вы не учли основные факты: команды монтирования/размонтирования нужны только один раз за все время работы с носителем, в то время как команды копирования/правки/перемещения и т.д. нужны все время!!! Но т.к. все они кэшируются системой, то происходят моментально, и когда система не занята она сбрасывает кэш на носитель (или при размонтировании), так что работа с файлами на сменных носителях в Linux удобнее не бывает!!!!!!!!

И вообще, хватит оценивать НАСТОЯЩУЮ ОПЕРАЦИОННУЮ СИСТЕМУ по меркам такого динозавра как DOS. В UNIX-like системах все выверенно и проверено годами разработки и беспрерывного совершенствования тысячами свободных разработчиков и фирм. Любое решение здесь введено не просто так. Изначально, пользователь должен что-то монтировать, например, сменные носители, или сетевые ресурсы. Но дело в другом.

Если отказаться от монтирования, то ОС не будет знать - на месте ли ресурс. И тогда пропадет всё удобство кэширования! Ведь как может ОС позволить себе кэшировать данные (т.е. не сбрасывать их по мере поступления сразу же на диск, в отличие от DOS), если она даже не уверена - на месте ли диск?

Поясняю, что я имею ввиду: Вы смонтировали какой-либо ресурс. Всё теперь ОС уверена в том, что он никуда не денется, пока вы его не размонтируете. Скопируем на ресурс файл. ОС проверяет - хватает ли места и некоторые др. условия, и говорит - "ВСЁ ОК, можешь не беспокоиться, твой файл где надо!". И операция копирования происходит моментально, т.к. ОС копирует файл не на ресурс, а в ОЗУ, или просто мэпирует (отображает) его в адресное пространство ядра системы. Пользователь может продолжать спокойно работать, т.к. файл скопирован моментально, а система начинает его потихоньку (в ранних версиях UNIX - по cron) синхронизировать содержимое ОЗУ и ресурса (ex, дискеты). Но вдруг, через пару минут, пользователь понял, что он скопировал не тот файл, или, что его нужно изменить!

Он, вспоминая какой это мучительный процесс в DOS (если файл где-то 1МБ :), открывает файл на дискете, и, о чудо! Файл открыт моментально (т.к. его образ еще в ОЗУ), и пользователь, поправив пару строк из 10000 :), жмёт "Сохранить", и еще больше удивляется, когда флопповод и не пикнул, а система сообщает - "Всё ОК!". И ОС как партизан начинает опять потихоньку синхронизировать :), причем в те моменты, когда меньше всего занята.

Когда пользователь размонтирует ресурс, ОС докидывает остатки (т.к кое-что уже синхронизировано), и все в итоге счастливы!

Так вот, такой механизм был бы абсолютно невозможен без команд mount/umount, т.к. нет абсолютной уверенности, что юзер не выдернул дискету, унеся только пол-файла. И приходилось бы использовать только кэш чтения данных (то, что еще в ОЗУ после предыдущих операций с диском), а о кэшировании записи на диск и не мечтать, т.к. не известно состояние ресурса - на месте ли он.

Копирует в Win юзер файл на дискетку и всё подвисает :) (ну, в W2k/XP положение, конечно, улучшилось благодаря технологии, которую украли из OS/2, кинув IBM :( ), т.к. нужно скопировать именно сейчас, а то вдруг юзер дискетку выдернет, когда ему напишут - "Все ОК", и это логично.

Итак, почему я считаю, что в Linux удобнее.

Команды монтирования/демонтирования применяются единственный раз по ходу данной сессии работы с ресурсом. А команд работы уже со смонтированным ресурсов очень много: копирование, создание, удаление, изменение и т.д. Что по-вашему перевешивает? Что применяется чаще? Ну, уж точно не mount/umount! А умный Linux _все_ эти операции кэширует, и выполняет в те моменты, когда система не загружена, и эти операции не приведут к подвисанию, как в Win. А когда юзер сообщает - "всё больше я с дискетой ничего делать не буду, отдавай", ОС синхронизирует остатки (не факт, что еще что-то осталось) и с чистой совестью отдает ресурс. В процессе работы с дискетой же, тормозов не ощущается благодаря кэшу.

Т.о. все довольны, кроме тех, кто не понимает, как работает этот механизм, и что mount/umount не просто так.

Теперь по книге в целом:

Вы не думали о том, чтобы переместить информацию о "железной" части компьютера в приложение? (Например, главы о устройстве винчестера и монитора)

Человеку, который начинает осваивать и без того сложную ОС, будет тяжело взять сразу столько информации (сужу только по себе). А когда он начнет немного ориентироваться в новой среде, тогда можно почитать и более подробно "как это работает?" И такие перестановки позволят расширить данную информацию. Например, пояснить назначение ModeLine в xorg.conf и другие "мелочи", которые иногда делают подножку ;)

Тот, кто будет читать книгу не знает, что для начала это можно пропустить. Он думает: "ничего себе! Какой Линукс сложный. Не буду я дальше читать..."

(По крайней мере, люди, которым я давал книги про Линукс, делают именно так - им просто лень разбираться, а ЧТО пропускать они не знают.)

Если вы согласны с этим предлагаю сделать замечание вида: "Для более глубокого ознакомления см. приложение." Просто я видел такое во многих книгах... Пользователь сначала пробует предложенный метод, а если не помогает, обращается к подробному описанию, чтобы придумать свой способ.

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

Такие вот пожелания :)

Мнение о том, что прочел дальше: глава 9.2 уже точно может быть перемещена в приложение :) Информация о major и minor теперь теряет свою актуальность. Теперь появились devfs и udev. А в них используются другие алгоритмы. Там major and minor совсем не нужны - они выделяются динамически/автоматически. Единственное, что нужно - включить поддержку соответствующего устройства в ядре.

В главу 9.4 нужно добавить информацию о USB мышах, которых сейчас большинство. Их протокол - IMPS/2, а позиционируются они как HID - Human interface divice на USB.

Про прерывания точно не скажу (да и не сталкивался не разу с конфликтами). Но udev and devfs эту проблему, вроде бы тоже решает.

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

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

С hdparm не знаю ни одного случая сбоя. Очень хорошая команда. У меня все стоит так же, но включен udma5 (5-й уровень Direct memory access) - благо даже мой бывший Samsung, которому уже 4 года поддерживает UDMA вплоть до 5-го уровня. Да и все современные винчестеры, уж точно. Выигрыш в скорости 20 раз (c 3 до 53 МБ/с)! hdparm рулит :) Кстати, такой прирост скорости дает именно -d1, т.е. поддержка DMA/UDMA.

Про принтер хотелось бы больше информации... В интернете про это мало, в ядре поддержки тоже. Такой вакуум, что не понятно любой ли принтер заработает в Linux? И как? Я, например, встречал информацию, что здесь работают только PostScript принтеры. А по вашей книге получается, что любые? Лишь бы gs настроить? Но ведь вы выбирали в KDE марку принтера. А если моей нет? Еще ламерский вопрос (у меня нет принтера и не могу проверить): gs позволяет печатать с качеством Windows, т.е. всякую графику и т.д.?

Про звук тоже, 100% нужно больше информации, хотя бы про OSS (Open sound architecture) в кратце, и поподробнее про ALSA (Advanced Linux Sound Architecture), т.к. OSS комерческим становится (или уже стал), а ALSA подает большие надежды, но все еще имеет много багов.

Информацию про Iomega ZIP лучше заменить на CD-RW или даже DVD-RW, который сейчас пользуются ошеломляющим спросом. Почти у всех уже есть CD-RW, и скоро у всех будет DVD-RW, особенно, когда выйдет Blue-ray и цены на DVD-RW станут равны нулю :).

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

И про загрузчики все-таки мало. Например grub уже вышел в финальную стадию разработки (0.95), и очень удобен в эксплуатации и установке.

Итог:

В принципе, ничего сверхестесственного в новой книге не нужно, если вы собрались ее издавать. Необходимо только расширить и дополнить то, что есть, и сделать update :). Вашей книги, мне кажется, очень даже хватит пользователю, чтобы освоиться и продолжить обучение уже самостоятельно. Но это ведь и есть главная цель подобного руководства! Я очень хочу, чтобы у вас получилось. Если бы мне попалась эта книга раньше, когда я только начинал освоение Linux, не пришлось бы тратить многие и многие часы на чтение man (и освоение английского таким образом :)))) и выуживание из всей массы руководств, статей и т.д., именно _нужной_ информации.

Да, кстати, мне очень импонирует ваше заявление в начале книги. Про текстовый режим. Я тоже первым делом знакомым советую осваиваться сначала в чистой консоли, а затем уже _осознанно_ пользоваться терминалами X-Window. У меня по началу все проблемы и отрицательные эмоции были по поводу того, что установщики нормально графику настроить автоматически не могут, а хочется быстрее и получаем то, что получаем ;) (нажимая "Далее, Далее, ...") IMHO, начинать освоение Linux нужно чисто в текстовом режиме, забыв про все удобства. Хотя бы пару недель. Т.к. только тогда можно почувствовать всю мощь Linux. (у нас в Университете на Pentium 133 стоит NT 4.0 - это ужас во плоти! Когда я поставил Linux и работал в текстовом режиме, это было намного удобнее, чем в ужасно тормозащей графике "форточек", жаль что наш админ другого мнения, т.к. про Лин. ничего не знает :(((( )

Особенно на слабой машине.

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

Я был полон энтузиазма, когда ставил RH7.3, т.к. прочитал "Путь в Линукс". А надо мной смеялось пол общежития, когда этот RH "из коробки" (by default), который я тогда и настроить понятия не имел как, загружался минут 10 (в KDE), а ни одна программа (даже xine, который был тогда на начальной стадии разработки, но я-то этого не знал) не работала, а чего-то от меня требовала (потом узнал, что должной настройки :).

Короче, IMHO, X и, в частности, KDE и GNOME - зло для начинающего, если их не настраивал кто-то.

У меня и сечас стоит только fluxbox и то, только с десятком приложений в главном меню, но с горячими клавишами на разные терминалы :). И работаю я только в терминале, выполняя файловые операции. (нет ничего удобнее bash и bash-скриптинга) Х нужны только для mozilla, GIMP, emacs, xmms, gkrellm и чтобы можно было много xterm-ов вызывать ;)

==================================================

До меня кажется дошло, почему мало информации про администрирование системы - это ведь книга для пользователя. Я правильно понял? Но тогда надо дать хотя бы ссылки на Интернет и т.д. источники информации о администрировании - без этого IMHO не как. Хотя бы на местоположение Linux Administartor's Guide.

Но, вообще главы до 12 очень понравились ;) (сколько прочел) Сегодня занят был, а так может быть и до конца дочитать бы успел.

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

Непомнящих Антон.