c++: ifdef: определить платформу
Про #ifdef:
1. Если используется полная запись в стиле #if defined (_WIN32), то скобки нужны, а если краткая #ifedf _WIN32, то не нужны.
2. Самая толковая табличка с определенными константами для разных систем.
3. Если нужно определить минорную версию FreeBSD: нужно написать вот такой кусочек кода
#if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif
и воспользоваться списком значений для версий FreeBSD. В __FreeBSD__ лежит целое число — мажорная версия.
vim: больше вкладок
В vim по умолчанию стоит ограничение на количество вкладок, которые одновременно открываются с ключом -p. То есть, когда вы набираете
vim -p file1 file2 file3 file4 file5 … file20
— откроются только первые 10.
Чтобы вылечить это дело, надо отредактировать файл ~/.vimrc и добавить туда строку set tabpagemax=50
bash: секретцы.
1. Значения для пустых переменных. То есть если переменная уже имеет непустое значение, то будет использовано оно, а если нет — то подставлено значение по умолчанию (перед этим значением — знак «-«: это может быть просто строка, переменная, вызов команды в обратных апострофах).
Например:
kakabba@kakabba:~$ echo "os is ${OSTYPE:-unknown}." os is linux-gnu. kakabba@kakabba:~$ echo "os is ${OSTYPE1:-unknown}." os is a unknown.
OSTYPE — существующая в контексте переменная, а OSTYPE1 — нет.
Еще пример:
#!/bin/bash gcc_version=${gcc_version:-`gcc -dumpversion`} other_gcc_version=${other_gcc_version:---version=$gcc_version} echo $other_gcc_version #--version=4.6
2. В bash можно сделать нечто, похожее на тернарный оператор в плюсах:
[[ $_var1 == $_var2 ]] && _var1="/usr/lib" || _var1="$_var2"
То есть если $_var1 == $_var2, то в _var1 поместить строку «/usr/lib», иначе записать значение _var2.
CentOS 6: перевод времени
Наверно это актуальная статья)
CentOS как-то скорее мертв, чем жив, но тем не менее в 2011 году релизы были. А время в этой стране решили больше не переводить тоже в 2011. Видимо, эти два события как-то не очень пересеклись и время для Москвы продолжает переводиться.
Чтобы это дело исправить можно взять актуальный пакет tzdata от других дистрибутивов. Я взяла от Ubuntu 12.10(чтоб уж наверняка). Надо найти в нем файл Moscow и скопировать в /usr/share/zoneinfo/Europe CentOS.
Только сначала выставить те же права и владельца, что и у старого.
Как только скопируете — сразу время встанет правильно.
Чтобы проверить, что больше не будет переводов времени:
[jimmi@srvrm ~]$ zdump -v /etc/localtime | grep 2013 [jimmi@srvrm ~]$ zdump -v /etc/localtime | grep 2011 /etc/localtime Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800 /etc/localtime Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0 gmtoff=14400
То есть в 2013 переводов не будет. А в 2011 был один — в марте.
DNS-323: e2fsck
Допустим, хранилище выключилось в момент записи файла на диск. В этом случае получится неудаляемый inode. При его удалении будет ошибка: Input/output error rm.
В этом случае стоит прокрутить на устройстве e2fsck. Но устройство должно быть umount.
Беда с этим хранилищем в том, что telnet (из-за funplug) находится как правило на самом же устройстве, которое надо проверить. Просто umount сделать не получится. lsof показывает, что сам lsof, telnet и прочее находятся на /dev/md0 и device is busy. Мой опыт показал, что можно сделать lazy umount: e2fsck запустится, а telnet не отвалится. На все вопросы стоит соглашаться.
/ # df Filesystem 1k-blocks Used Available Use% Mounted on rootfs 9911 7569 1830 81% / /dev/root 9911 7569 1830 81% / /dev/md0 958846504 143438640 815407864 15% /mnt/HD_a2 /dev/md1 3114924 28 3114896 0% /mnt/HD_b2 /dev/sda4 497861 184 497677 0% /mnt/HD_a4 /dev/sdb4 497861 11 497850 0% /mnt/HD_b4 / # umount -l /dev/md0 / # e2fsck /dev/md0
mc: автодополнение
ЕЕЕ! в mc все-таки есть автодополнение. Только не по tab, а по M-tab. M — [META], она эмулируется на привычных клавиатурах клавишей Windows | Alt | Esc. Но Alt+Tab или Windows+Tab уже назначены на переключение окон. А вот Esc+Tab работают как надо.
И еще вот тоже все время забываю:
Alt-Enter вставляет в командную строку имя файла, который в данный момент выбран в MC.
Ctrl-o возвращает в командную оболочку, не закрывая mc.
centos 6.2:EFI shell
Я немало помучилась, прежде чем нашлось какое-то крохотное сообщение на багтрекере Centos.
Для интриги сначала описываю ситуацию. Исходные данные: материнская плата Intel ServerBoard S5500BC. Я конфигурирую RAID I с помощью встроенной Raid Embedded Utility. Затем хочу установить на все это дело Centos 6.2 64bit. Сначала записываю образ на флэшку, возникает белая надпись boot.. и все отваливается. Вроде бы Centos вообще не очень дружит с флэшками. Поэтому я не ленюсь и записываю диск. Вставляю его..и получаю сообщение
EFI Shell version 2.00[4.640]
Current running mode 1.1.2
map: cannot find required map name.
И все. При перезагрузке в BIOS я уже не попадаю при всем желании. Порядок такой: первые сообщения POST, затем RAID Utility, данные о железе и дальше что бы я не давила (F6, F2, комаров, прыщи и т.п.) я попадаю в EFI.
А теперь сюрприз-сюрприз! Centos 6.2 НЕ работает на материнках с EFI!
Вытаскиваем винчи, грузимся, попадаем естественно в BIOS. Ставим EFI в Boot Options в самый низ или вообще выключаем. А затем скачиваем себе Centos 6.1…