Нет никаких перераспределенных секторов, потому что им не удалось перераспределить. Ваш диск показывает 5 секторов Offline_Uncorrectable, который происходит, когда автоматическое восстановление перестало работать. Существуют очевидные отказы чтения, показанные в выводе dmesg, УМНЫХ ошибках, и читают отказы из УМНЫХ тестов. Существуют способы восстановить эти секторы, как Вы упомянули в вопросе, но на основе моего опыта это - очень краткосрочная фиксация.
Замените диск.
Позвольте нам просто спросить исходный код. Если Вы не интересуетесь деталями, просто пропустите в конец для наблюдения результата:
Существует KCM для установки приложений по умолчанию. Давайте искать его имя:
$ kcmshell4 --list | ack -i default
componentchooser - Choose the default components for various services
Примечание: Выполняющий 5 шагов является конкретным хинду, но мог быть применен к любому другому распределению или мог быть заменен путем просматривания исходных репозиториев KDE вручную!
Давайте искать файловую систему файлы, принадлежащие componentchooser
:
$ find /usr -name "*componentchooser*"
/usr/lib64/kde4/kcm_componentchooser.so
/usr/share/doc/HTML/en/kcontrol/componentchooser
/usr/share/doc/HTML/de/kcontrol/componentchooser
/usr/share/kde4/services/componentchooser.desktop
/usr/share/apps/kcm_componentchooser
/usr/share/locale/de/LC_MESSAGES/kcmcomponentchooser.mo
Теперь мы запросим диспетчер пакетов (в нашей Перевозке хинду случая) и попросим пакет, который содержит любой из этих файлов:
$ find /usr -name "*componentchooser*" | xargs qfile
kde-base/kdelibs (/usr/share/apps/kcm_componentchooser)
kde-base/kcontrol (/usr/share/apps/kcm_componentchooser)
kde-base/kcontrol (/usr/share/kde4/services/componentchooser.desktop)
kde-base/kcontrol (/usr/share/doc/HTML/en/kcontrol/componentchooser)
kde-base/kcontrol (/usr/lib64/kde4/kcm_componentchooser.so)
kde-base/kde-l10n (/usr/share/locale/de/LC_MESSAGES/kcmcomponentchooser.mo)
kde-base/kde-l10n (/usr/share/doc/HTML/de/kcontrol/componentchooser)
Поскольку мы ищем исходный код, который на самом деле пишет значение для браузера по умолчанию, мы должны изучить .so
файл, который содержит фактический код, в то время как другие файлы просто предоставляют документацию (/usr/share/doc/[…]
), метаинформация ([…].desktop
) и строки перевода (/usr/share/locale/[…]
).
Это означает, мы должны будем смотреть на пакет, обеспечивающий общий объект (.so
) файл, который является kde-base/kcontrol
на хинду.
Во-первых, мы удостоверяемся, источник tarball присутствует в нашей файловой системе путем просьбы, чтобы Перевозка загрузила его для этого пакета (--nodeps
удостоверяется, только источники для этого пакета загружаются, но не для любых зависимостей):
$ emerge --fetchonly --nodeps kde-base/kcontrol
>>> Fetching (1 of 1) kde-base/kcontrol-4.11.4
* kde-runtime-4.11.4.tar.xz SHA256 SHA512 WHIRLPOOL size ;-) ... [ ok ]
В этом случае файл уже присутствовал и был просто своими контрольными суммами, были проверены.
Теперь мы собираемся распаковать этот файл во временное местоположение для исследования его далее:
$ cd /tmp
$ tar xf /usr/portage/distfiles/kde-runtime-4.11.4.tar.xz
Результатом является каталог kde-runtime-4.11.4
в который мы собираемся измениться теперь:
$ cd kde-runtime-4.11.4
Этот каталог содержит теперь много компонентов, принадлежащих kde-runtime
пакет SC KDE. Мы интересуемся kcontrol
компонент:
$ cd kcontrol
Теперь мы должны определить файл, который содержит исходный код для записи браузера по умолчанию в kdeglobalsrc
. Существуют различные способы сделать это:
componentchooser
и исследуйте его исходный кодBrowserApplication
.Кратчайший путь к нашей цели является опцией '3', таким образом, это - то, что мы собираемся сделать:
$ ack BrowserApplication
componentchooser/componentchooserbrowser.cpp
50: QString exec = config.readPathEntry( QLatin1String("BrowserApplication"), QString("") );
92: config.writePathEntry( QLatin1String("BrowserApplication"), exec); // KConfig::Normal|KConfig::Global
Так, очевидно, в строке '92' из файла componentchooser/componentchooserbrowser.cpp
, это, было это значение, пишется, поэтому давайте более внимательно рассмотрим в нем:
80 void CfgBrowser::save(KConfig *)
81 {
82 KConfigGroup config(KSharedConfig::openConfig("kdeglobals"), QLatin1String("General") );
83 QString exec;
84 if (radioExec->isChecked())
85 {
86 exec = lineExec->text();
87 if (m_browserService && (exec == m_browserExec))
88 exec = m_browserService->storageId(); // Use service
89 else if (!exec.isEmpty())
90 exec = '!' + exec; // Literal command
91 }
92 config.writePathEntry( QLatin1String("BrowserApplication"), exec); // KConfig::Normal|KConfig::Global
93 config.sync();
94
95 KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged);
96
97 emit changed(false);
98 }
В строке '92', ключ BrowserApplication
записан и это - значение, находится в переменной exec
. Восклицательный знак добавляется к командной строке в строке '90', но нет никакого тщательно продуманного комментария в коде в этой строке, которая объяснила бы, почему это сделано, поэтому давайте взглянем вместо этого на логику кода, которая приводит к добавлению !
перед BrowserApplication
значение:
exec
к строке, которая обеспечивается полем вводаm_browserService
верно и ли содержание переменной exec
совпадает с членской переменной m_browserExec
. m_browserService
установлен (0
или 1
) методом CfgBrowser:: selectBrowser, когда браузер по умолчанию выбран путем просмотра дерева приложения вместо того, чтобы ввести исполняемое имя непосредственно как строку. В случае, если браузер выбран путем просмотра дерева приложения, содержание поля ввода является названием приложений *.desktop
файл.m_browserExec
название *.desktop
файл при выборе браузера через дерево приложения.TRUE
, exec
установлен на результат storageId
(название *.desktop
запись).!
.Сделать это коротким:
Восклицательный знак для BrowserApplication
запись в kdeglobalsrc
используется для различения фактическое двоичное имя, которое будет выполняться для запуска браузера или названия браузера *.desktop
файл.
Это наиболее вероятно отзыв для длительности команды, выполняемой с тем же именем. Немного поиска привело меня к этому сценарию, который повысился подозрение, что восклицательный знак является чем-то вроде колдовства удара.
Эта дискуссия о восклицательном знаке звучит релевантной.
Это, скорее всего, означает, что удар ожидает полное название команды, которое запускается с sensible-browser
.
sed
. Также поиск "РАСШИРЕНИЯ ИСТОРИИ" в man bash
.
– Vince
13.12.2013, 08:40