Оптимизиране на Firefox с tmpfs

1. Отворете браузъра и напишете about:config, съгласете се, че ще сте много внимателни.

2. Натиснете десен бутон и дайте New -> String.

3. Създайте променлива:

browser.cache.disk.parent_directory

4. На новата променлива задайте стойност:

/dev/shm/Firefox-Cache

5. Създайте директорията със съответните права:

install -dm700 /dev/shm/Firefox-Cache

След рестартиране на браузъра, той вече ще ползва /dev/shm/Firefox-Cache. Съдържанието на директорята няма да се запази след рестартиране на системата.

Possibly Related Posts:


Системни статистики с vmstat

vmstat е позната като програма за показване на статистики за виртуалната памет. Ние обаче може да я използваме и за други статистики.

Освен статистики за паметта, може да се изведат статистики за процесора, IO, Swap, Proc, системните прекъсвания. vmstat се използва много лесно. Без никакви допълнителни опции можем да я ползваме така:

vmstat [delay] [counts]

Нека да предположим, че искате да разпечатвате информация на екрана всяка секунда, 60 пъти (искате да вземете статистиките в продължение на една минута през интервал от 1 секунда):

vmstat 1 60

Изхода от командата ще изглежда така:

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 3  0  57768   5712   4696 174692    0    0     0   496  458 1636 19  2 77  2
 2  0  57768   5712   4696 174692    0    0     0     0  466 1687 25  1 74  0
 0  0  57768   5712   4696 174704    0    0     0     0  438  990  7  1 92  0
 2  0  57768   5712   4696 174704    0    0     0     0  459 1020  6  0 94  0
 2  0  57768   5712   4696 174704    0    0     0     0  429  965  7  0 93  0
 2  0  57768   5712   4704 174696    0    0     0    40  455 1039  3  0 97  0
...

Нека да погледнем към полетата:

Описание на полетата
 Procs
 r: Брой процеси, които чакат да се изпълнят.
 b: Брой процеси, които спят и не могат да се прекъсват.

   Memory
 swpd: Количеството виртуална памет, което се използва.
 free: Количество свободна памет.
 buff: Памет използвана за буфери.
 cache: Памет използвана за кеш.
 inact: Неактивна памет. (-a option)
 active: Активна памет. (-a option)

   Swap
 si: Показва колко виртуална памет е прочетена от диска (/s).
 so: Покзва колко виртуална памет е записана на диска. (/s).

   IO
 bi: Блокове прочетени от блоково устройство (блокове/s).
 bo: Блокове записани на блоково устройство (блокове/s).

   System
 in: Брой на прекъсванията в секунда, включително и прекъсванията за часовника.
 cs: Брой на смяната на контекста за секунда.

   CPU
Това са проценти от цялото време на процесора.
 us: Време, през което се изпълнява код, който не принадлежи на ядрото.
 sy: Време, през което се изпълнява код на ядрото. (системно време)
 id: Време, през което не се изпълнява нищо. Преди ядро 2.5.41, това включва и IO-wait времето.
 wa: Време, през което се чака за IO операции. Преди ядро 2.5.41, се включва в id.
 st: Време което е използвано от виртуалната машина.Преди ядро 2.6.11, не е установена стойност.

Обикновено се интересувам главно от две полета. Под Memory, полето free, което покзва колко неизползвана памет е останала. Под CPU, полето id, което показва колко е натоварен процесора. Ако стойностите в free или id стане много малка, това означава, че системата се е натоварила и трябва да се провери какво се случва.

vmstat е много удобна когато трябва да се прави отдалечено наблюдение. Може да се използва заедно със ssh по следния начин:

ssh username@domain.com "vmstat 60 99999"

vmstat не разпечатва датата или времето. Ако искате да си направите лог на статистиките заедно с времето, когато са взети, може да го постигнете по следния начин:

vmstat 1 1;for ((;;));do date; vmstat 10 2 | tail -n1;done

Командата ще разпечатва статистики на всеки 10 секунди.

Изхода ще изглежда по подобен начин.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  57644   6096   8080 160828    0    1    30    31  441  137 11  1 86  1
Sat Dec  8 12:51:40 MYT 2007
 0  0  57644   6152   8092 160828    0    0     0    38  449  989  8  0 92  0
Sat Dec  8 12:51:50 MYT 2007
 0  0  57644   5864   8108 160828    0    0     0     8  443  980  5  0 95  0
Sat Dec  8 12:52:00 MYT 2007
...

vmstat може да извежда и статистики за използването на диска и др. Консултирайте се с man страниците за повече информация.

Possibly Related Posts:


Slackware новини

Последните промени от changelog-a:

l/libpng-1.4.3-i486-1.txz:  Upgraded.
Upgraded to libpng-1.2.44 and libpng-1.4.3.
This fixes out-of-bounds memory write bugs that could lead to  crashes
or the execution of arbitrary code, and a memory leak bug which  could
lead to application crashes.
For more information, see:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-1205

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-2249

(* Security fix *)
l/libtiff-3.9.4-i486-1.txz:  Upgraded.
This fixes image structure handling bugs that could lead to  crashes or
execution of arbitrary code if a specially-crafted TIFF image is  loaded.
For more information, see:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-1411

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-2065

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-2067

(* Security fix *)

Possibly Related Posts:


Slackware 13.1

Дойде време за новата версия на Slackware. За повече подробности може да погледнете :

Официалната новина

Промени

Release notes

Possibly Related Posts:


drop_caches

Задаването на стойности на /proc/sys/vm/drop_caches кара ядрото да освободи кешовете, dirty страниците и inodes от паметта.

За да освободим кешовете:

echo 1 > /proc/sys/vm/drop_caches

За да освободим dirty страниците и inodes от паметта:

echo 2 > /proc/sys/vm/drop_caches

За да освободим кешовете, dirty страниците и inodes от паметта:

echo 3 > /proc/sys/vm/drop_caches

За да сме сигурни, че всичко ще бъде освободено трябва да изпълним командата „sync“ преди да задаваме стойности на /proc/sys/vm/drop_caches.  Тази опция е добавена от версия на ядрото 2.6.16.

Possibly Related Posts:


Конфигуриране на ядрото: Поддръжка на мрежови протоколи

Менюто с мрежовите настройки съдържа опции за настройване на мрежовите протоколи. Може да включвате или да изключвате поддръжка на цели протоколи, или да настроите финно ядрото за определена роле, като рутер или пакетен филтър.

Packet and Socket Options

На много ниско ниво ядрото работи като позволява на дадени приложения да приемат или изпращат порции с данни(пакети), използвайки специални структури данни, познати като сокети. В повечето случаи програмите отварят сокети по подобен начин, на файловете. След това мрежовия протокол се грижи за това информацията да достигне до местоназначението или да бъде интерпретирана от програма след като бъде приета от получателя.

В някой случаи е желателно, или понякога нужно, да опбработваме мрежовата информация по друг начин, като да модифицираме стандартния пакет, или да променим или разширим стандартните пакетни операции. Някои от тези опции са толкова важни, че си имат собствени секции. Някой опции включват следното:

Packet Socket— Тази опция позволява на програмите да пропускат нормалното обратване на информацията. Повечето програми не се нуждаят от това, но някои инструменти за мрежова диагностика имат нужда от достъп до тази информация. Например tcpdump, който показва информация от ниско ниво за TCP/IP протокола, използва тези опции в ядрото. Включването на тези опции без да има нужда ще уголеми ядрото малко и може да позволи на натрапник да използва инстументи за анализ на протоколи, като tcpdump, които бихте искали да не могат да се ползват от натрапници. Пропускането на тази опция, също ще ви попречи да използвате тези инструменти.

Packet Socket: Mmapped IO— Това е подопция на сокетите, която, ако е активирана, може да повиши производителността на инструментите, котио използват връзки със сокети.

Unix Domain Sockets— Няколко важни програми в Линукс ползват мрежови протоколи, за да комуникират помежду си когато работят на един и същи компютър. Примери са syslogd (който се грижи за логовете) и X (X програмите използват мрежови протоколи, за да комуникират с X сървъра, който показва техните прозорци). Тези сокети позволяват мрежовата комунуикация дори ма компютри, на които липсва мрежов хардуер. Би трябвало да включите тази опция на всички стандартми Линукс машини. Само някои тясно специализирани устройства може да нямат нужда от тази опция.

Тези всички опции имат настойки по подразбиране, които са достатъчно уместни за повечето случаи.

Possibly Related Posts:


Конфигуриране на ядрото

За да конфигурирате ядрото, трябва да притежавате сорс кода. В Slackware той може да се инсталира заедно с ядрото. Може би бихте искали да започнете със страндартно ядро и да си го пачнете и конфигурирате по ваше желание. Проверете  http://www.kernel.org/ за последна верися на сорс кода на ядрото.
Сорс кода на ядрото обикновено се намира в /usr/src/linux, или в поддиректория на /usr/src името, на която включва версията на ядрото – /usr/src/linux-2.6.17. В този случай е добре да се прави връзка от с името /usr/src/linux, която да сочи до истинското място на сорс кода на ядрото. Това помага на другите програми да намерят кода в /usr/src/linux и да работят правилно и ви дава възможност да имате няколко версии на ядрото и само да сменяте на къде сочи линка.

След като разархивирате сорс кода на ядрото в /usr/src/linux, трябва да влезете в тази директория. След това трябва да изпълните команда за конфигуриране на ядрото. Има няколко възможности:

  • make config — Това е базовия инструмент за конфигурация. Той пита за всяка опция на ядрото поред, което може да е досадно. Ако направите грешка, обикновено трябва да се върнете от начало и да повторите всичко. По тези причини се използва много рядко.
  • make menuconfig— Тази процедура за конфигурация използва текстови менюта, което ви позволява да преглеждате опциите и да променяте само това, което има нужда. Този е често използван метод за конфигурация в текстов режим.
  • make xconfig— Този метод е подобен на make menuconfig, в единствената разлика, че използва GUI конфигурационни менюта. Може да кликате на зададени опции и след това да определяте дали и как да бъдат компилирани. Това е сравнително популярно средство за конфигуриране на ядрото, когато има възможност да се използва X графичната среда.

Всички тези методи предоставят начин за конфигуриране на едни и същи опции, организирани в категории(като някой категории имат подкатегории).

Possibly Related Posts:


Ограничаване на достъпа до команда в Линукс

Как да огранича достъпа до /usr/local/bin/start само за определени потребители на системата ? Отговорът на върпроса е, че трбва да използвате стандартните Линукс групи.

Стъпка 1: Създайте група за всички оторизирани потребители

Създайте групата:

#groupadd restrictedapp

Добавете потребители в тази група:

#usermod -aG {име_на_група} {потребителско_име}
#usermod -aG restrictedapp ivan
#usermod -aG restrictedapp petar

Където:

-a Добавя потребителя към групата

-G Списък с групи, към които да се добави потребителя

Стъпка 2: Ограничете достъпа

Вече имаме група с потребители, които трябва да могат да изпълняват командата. Сега трябва да използваме chgrp, за да сменим групата на самата програма:

#chgrp {група} {път_до_приложението}
#chgrp restrictedapp /usr/local/bin/start

Трябва да използваме командата chmod, за да ограничим достъпа на всички, които не са от групата restrictedapp да имат достъп до приложението.

#chmod 750 {път_до_приложението}
#chmod 750 /usr/local/bin/start

Стъпка 3: Тествайте

Пробвайте първо да изпълните комадата с потребител ivan:

#su – ivan
#/usr/local/bin/start
#exit

#su – valeri
#/usr/local/bin/start
bash: /usr/local/bin/start: Permission denied

Забележка:

Възможностите, които ви се предлагат от командите chmod, chgrp и usermod, не ви предлагат пълен контрол върху изпълнението на дадени приложения. По-добрия вариант би било да се въведат SELinux и ACL-и на файловата система.

Possibly Related Posts:


Взимане на част от текст с bash

Можем да вземем само част от даден текст много лесно с Bash. Нека да кажем, че имаме 1234567890 или abcdefghij. Може да го направим така :

num="1234567890";
echo ${num:5:7}

5 указва началото, а 7 колко символа да вземе.

Possibly Related Posts:


Когато rm се оплаква, че не може да трие

Има ограничение на командата rm, когато се опитате да триете много файлове с *. Например:

rm -rf something*

Ако има много файлове, които започват с something, rm няма да може да ги изтрие и ще изведе:

/bin/rm: Argument list too long.

Решението на проблема е да ползвате find, xargs и rm.

find . -name 'something*' -print0 | xargs -0 rm -rf

Проблема може да се разреши по още един начин:

find . -name 'something*' -exec rm -rf {} \;

Possibly Related Posts:


umask: създаване на нови файлове с определени права

Замисляли ли сте се, че всеки път като създаваме файлове в Линукс те се създават с определени права ? Нека да пробвам:

Lets see this:

touch testing
ls -l testing
-rw-r--r-- 1 test test 0 2008-03-08 01:14 testing

Файла не би трбвало да се създаде с права за изпълнение, както виждаме изхода от ls. Нека да дадем права за изпълненеи на файла.

chmod +x testing
ls -l testing
-rwxr-xr-x 1 test test 0 2008-03-08 01:16 testing

Както виждате в момента режима е 755(повече информация за правата върху файловете тук).

За да конторлираме как се създават новите файлове, може да използваме umask. Може да се каже, че umask е обратното на атрибитите на файла. Нека да кажем, че искате файловете да се създават винаги с 774 (-rwxrwxr–) атрибути, вашата umask ще е  003. Как разбрахме? 777 – 774 = 003.

За да проверим сегашната umask, който е в сила, просто напишете:

umask
0022

Първата стойност отпред 0 указва, че това това е осмична(в осмична бройна система) стойност, затова нашите атрибути по подразбиране за създаване на файлове са 755, но понеже атрибута за изпълнение не се слага по подразбиране стават 644, когато създаваме нови файлове.
Нека да сменим на 0003, което означава, чес искаме атрибутите да са 774 (rwxrwxr–).

umask 0003
touch testing2
ls -l testing2
-rw-rw-r-- 1 test test 0 2008-03-08 01:27 testing2

Атрибутите са 664, и като добавим правата за изпълнение получаваме:

chmod +x testing2
ls -l testing2
-rwxrwxr-- 1 test test 0 2008-03-08 01:27 testing2

Сега имаме 774, въпреки чеchmod +x , не добава права за изпълнение на всички други потребители. Това се дължи на umask, който ползваме. Разбирасе винаги може да го направите изпълним така с chmod o+x.

За какво да го използваме ?
Нампример нека да предположим, че имате потребител, чиито файлове трябва да могат да се четат от групата, на която той принадлежи, но файловете му да не могат да се променят или да се изпълняват. Освен това не позволяваме на всички други да му четат файловете. Това може да го постигнем с umask като въведем umask 0037 в неговия ~/.bashrc

Possibly Related Posts:


Права за достъп до файлове

chmod (change mode) е доста често използвана команда за администрация. Обикновено я ползваме, за да направим даден скрипт, написан на bash, python, perl изпълним.

За да на правил файл изпълним:

chmod +x myscript.sh

По подразбиране това ще промени атрибута за всички. Файловите атрибути са 3 вида:

u ( user – собственик на файла)
g ( групата, в която е потребителя)
o ( всичко останали потребители)
a ( всички гореспоменати)

Това означава, че горната команда е подобна на тази:

chmod a+x myscript.sh

По този начин ще позволим само на собственика на файла да го изпълнява:

chmod u+x myscript.sh

Може да премахвате атрибути от файл. Да кажем, че имате права за изпълняване от всички, но искате да не е изпълним от всички други (които не са потребителя или не са от неговата група):

chmod o-x myscript.sh

Освен атрибута за изпълнение, имаме атрибути за писане и четене. За тях важи горенаписаното.

Например искам да махна атрибутите за четене и писане на всички други потребители:

chmod o-rw myscript.sh

chmod може да се изпълнява и по друг начин. Може да използваме цифри за да укажем атрибутите, вместо символи.
Цифрите, които оказват атрибутите са показани по-долу:

execute = 1 (изпълнение)
write = 2 (писане)
read = 4 (четене)

В този ред на мисли ако са включени атрибутите за четене и писане имаме 2+4 = 6, а ако са включени за изпълнение и четене имаме 1+4 = 5.

За да може собственика на файла да има rwx атрибути, но групите, на които принадлежи, и всички останали да имат само rx, може да направим това:

chmod 755 myscript.sh

Така, 7= 4+2+1 (rwx) и 5 = 4+1 (rx).

Possibly Related Posts:


Къде се намират програмите ми и техните конфигурационни файлове ?

Когато искаме да намерим пълния път до дадена програма, обиконовенно използваме which.

Например, ако искаме да видим къде се намира mplayer, може да направим това:

which mplayer

Има още една команда, която освен, че ви показва пътя до бинарките, ви показва и пътя до сорс файловете, конфигурационите файлове и man страниците.

whereis mplayer

Ще върне това:

mplayer: /usr/bin/mplayer /etc/mplayer /usr/lib/mplayer /usr/X11R6/bin/mplayer /usr/bin/X11/mplayer /usr/share/mplayer
 /usr/share/man/man1/mplayer.1.gz

Това е интересна команда, но не винаги може да ви покаже всичко от което имате нужда. Но въпреки това whereis е доста добра команда за трсене на файлове, свързани с дадена бинарка. Разбира се има опции, които могат да се подават на whereis и да се променя начина, по който работи. За повече информация man whereis.

Possibly Related Posts:


Как да покажем споделените библиотеки, от които се нуждае програма ?

Почти всяка програма в Линукс използва споделени библиотеки, дори тези които са компилирани на ръка със gcc. Може да се окаже, че дадена програма компилирана на дадена дистрибуция може да не работи под друга или по-стара версия на същата, на която е била компилирана. Всичко това може да се дължи на липсващи споделени библиотеки.

Можем да използваме ldd за да разберем, от кои библиотеки има нужда нашата програма. Нека да приемем, че имаме програма която се казва по някакъв начин, matrix например. Може да разберем какви споделени библиотеки са й нужни като напишем:

ldd matrix

        linux-gate.so.1 =>  (0x00110000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x00111000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0793a000)
        libm.so.6 => /lib/libm.so.6 (0x0056e000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0790d000)
        libc.so.6 => /lib/libc.so.6 (0x00413000)
        libdl.so.2 => /lib/libdl.so.2 (0x00599000)
        libtinfo.so.5 => /lib/libtinfo.so.5 (0x00ad0000)
        /lib/ld-linux.so.2 (0x003f4000)

Тук виждаме че използва libncurses.so.5. Този файл може да се намира в /usr/lib, /usr/share/lib, /lib или /usr/local/lib. Освен това, файла може да е връзка към истинския файл и да ви е нужна реалната .so библиотека.

Споделените библиотеки също биха могли да имат зависимости и да се нуждаят от други библиотеки. В този случай виждаме:

ldd -v matrix

...
        /lib/libncurses.so.5:
                libdl.so.2 (GLIBC_2.1) => /lib/libdl.so.2
                libdl.so.2 (GLIBC_2.0) => /lib/libdl.so.2
                libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.1) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
...

Вижда се, че libncurses има нужда от libc и libdl също.

Possibly Related Posts:


Slackware news: 4 Октомври 2009

Има две важни промени днес PHP и Samba. Промените са направени едновременно в -Stable и в -Current. В -Current, обаче има и доста други промени като MySQL, Amarok, QT, Perl, както и GCC 4.4.1.

Това е последното от -Current changelog-а:

Sun Oct 4 00:17:50 CDT 2009
ap/mysql-5.1.39-i486-1.txz: Upgraded. This bumps the version of the shared libraries to .so.16.0.0.
d/perl-5.10.1-i486-1.txz: Upgraded. Compiled against mysql-5.1.39, upgraded to perl-5.10.1, DBD-mysql-4.013, DBI-1.609, and URI-1.40.
kde/amarok-2.2.0-i486-1.txz: Upgraded.
l/qt-4.5_0bd8418-i486-1.txz: Upgraded. This is the KDE Qt 4.5.2-patched git branch, compiled against mysql-5.1.39.
l/redland-1.0.9-i486-1.txz: Upgraded. Compiled against mysql-5.1.39.
l/soprano-2.3.1-i486-1.txz: Upgraded.
l/taglib-1.6-i486-1.txz: Upgraded.
l/taglib-extras-1.0.1-i486-1.txz: Upgraded.
n/openssh-5.3p1-i486-1.txz: Upgraded.
n/php-5.2.11-i486-1.txz: Upgraded. This release fixes some possible security issues,
all of which have "unknown impact and attack vectors".For more information, see:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3291

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3292

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3293

(* Security fix *)
Also, thanks to Frank Gingras and Rich Bowen for helping to improve the syntax in mod_php.conf.
n/samba-3.4.2-i486-1.txz: Upgraded.
This update fixes the following security issues.
A misconfigured /etc/passwd with no defined home directory could allow security restrictions to be bypassed.
mount.cifs could allow a local user to read the first line of an arbitrary file if installed setuid.
 (On Slackware, it was not installed setuid)
Specially crafted SMB requests could cause a denial of service.
For more information, see:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2813

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2948

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2906

(* Security fix *)
testing/packages/gcc-4.4.1/gcc-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-g++-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-gfortran-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-gnat-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-java-4.4.1-i486-1.txz: Added.
testing/packages/gcc-4.4.1/gcc-objc-4.4.1-i486-1.txz: Added.

Possibly Related Posts: