drop_caches
декември 25th, 2009
Задаването на стойности на /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:
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
- Когато rm се оплаква, че не може да трие
Filed under: Статии | No Comments »
Конфигуриране на ядрото: Поддръжка на мрежови протоколи
октомври 27th, 2009
Менюто с мрежовите настройки съдържа опции за настройване на мрежовите протоколи. Може да включвате или да изключвате поддръжка на цели протоколи, или да настроите финно ядрото за определена роле, като рутер или пакетен филтър.
На много ниско ниво ядрото работи като позволява на дадени приложения да приемат или изпращат порции с данни(пакети), използвайки специални структури данни, познати като сокети. В повечето случаи програмите отварят сокети по подобен начин, на файловете. След това мрежовия протокол се грижи за това информацията да достигне до местоназначението или да бъде интерпретирана от програма след като бъде приета от получателя.
В някой случаи е желателно, или понякога нужно, да опбработваме мрежовата информация по друг начин, като да модифицираме стандартния пакет, или да променим или разширим стандартните пакетни операции. Някои от тези опции са толкова важни, че си имат собствени секции. Някой опции включват следното:
• Packet Socket— Тази опция позволява на програмите да пропускат нормалното обратване на информацията. Повечето програми не се нуждаят от това, но някои инструменти за мрежова диагностика имат нужда от достъп до тази информация. Например tcpdump, който показва информация от ниско ниво за TCP/IP протокола, използва тези опции в ядрото. Включването на тези опции без да има нужда ще уголеми ядрото малко и може да позволи на натрапник да използва инстументи за анализ на протоколи, като tcpdump, които бихте искали да не могат да се ползват от натрапници. Пропускането на тази опция, също ще ви попречи да използвате тези инструменти.
• Packet Socket: Mmapped IO— Това е подопция на сокетите, която, ако е активирана, може да повиши производителността на инструментите, котио използват връзки със сокети.
• Unix Domain Sockets— Няколко важни програми в Линукс ползват мрежови протоколи, за да комуникират помежду си когато работят на един и същи компютър. Примери са syslogd (който се грижи за логовете) и X (X програмите използват мрежови протоколи, за да комуникират с X сървъра, който показва техните прозорци). Тези сокети позволяват мрежовата комунуикация дори ма компютри, на които липсва мрежов хардуер. Би трябвало да включите тази опция на всички стандартми Линукс машини. Само някои тясно специализирани устройства може да нямат нужда от тази опция.
Тези всички опции имат настойки по подразбиране, които са достатъчно уместни за повечето случаи.

Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
- Когато rm се оплаква, че не може да трие
Filed under: Статии, Ядро | No Comments »
Конфигуриране на ядрото
октомври 24th, 2009
За да конфигурирате ядрото, трябва да притежавате сорс кода. В 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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
- Когато rm се оплаква, че не може да трие
Filed under: Статии, Ядро | No Comments »
Ограничаване на достъпа до команда в Линукс
октомври 15th, 2009
Как да огранича достъпа до /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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Взимане на част от текст с bash
- Когато rm се оплаква, че не може да трие
Filed under: Статии | No Comments »
Взимане на част от текст с bash
октомври 6th, 2009
Можем да вземем само част от даден текст много лесно с Bash. Нека да кажем, че имаме 1234567890 или abcdefghij. Може да го направим така :
num="1234567890";
echo ${num:5:7}5 указва началото, а 7 колко символа да вземе.

Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Когато rm се оплаква, че не може да трие
Filed under: Статии | No Comments »
Когато rm се оплаква, че не може да трие
октомври 6th, 2009
Има ограничение на командата 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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
umask: създаване на нови файлове с определени права
октомври 6th, 2009
Замисляли ли сте се, че всеки път като създаваме файлове в Линукс те се създават с определени права ? Нека да пробвам:
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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Права за достъп до файлове
октомври 6th, 2009
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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Къде се намират програмите ми и техните конфигурационни файлове ?
октомври 6th, 2009
Когато искаме да намерим пълния път до дадена програма, обиконовенно използваме 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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Как да покажем споделените библиотеки, от които се нуждае програма ?
октомври 6th, 2009
Почти всяка програма в Линукс използва споделени библиотеки, дори тези които са компилирани на ръка със 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:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Slackware по лесния начин
септември 20th, 2009
Дайте на човек Ubuntu, и той ще научи Ubuntu. Дайте на човек SUSE, и той ще научи SUSE. Ако дадете на човек Slackware, той ще научи Linux. Това гласи старата максима, обикновено използвана с насмешка, но все още важеща.
Ако някога сте се чудили какво прави Slackware толкова популярен сред Линукс ветераните ви представям малко съвети как да започнете и малко история.
Slackware е странно животно, което си живее докато другите дистрибуции се борят за популярност сред Линукс потребителите. Slackware не се опитва да обземе огромен дял от настолните компютри, нито има мигащи светлини, инструменти, които те държат за ръчичка докато правиш нещо, или пакетни мениджъри, които се променят със всяка следваща версия. Slackware ви предоставя една истинска GNU/Linux операционна система – само най-важното, без дългото компилиране на Linux From Scratch.
Има няколко причини Slackware да има закоравял фенове, обикновено хора, които ползват Линукс отдавна, но и начинаещи също. Четирите най-чести причини:
- Изцяло се разработва от един човек.
- Пакетите не се пачват до последно.
- Съвсем е достатъчна за своята “дистросфера”.
- Много, много, много стабилна е.
Нека да погледнем по-отблизо. От първата си версия пусната през 1993, Slackware се разработва от един човек: родения в Калифорния, 42 годишен Патрик Волкердинг(Patrick Volkerding). В началото са му помагали разработчици, но сега е единствения, с изключение на феновете, които помагат за отстраняване на проблеми и пачване. Чрез продажбата на дискове със Slackware той си финансира работата върху проекта.
Имате въпрос? Обадете се на Пат. Имате предложение? Обадете се на Пат. Искате да съобщите за проблем? Обадете се на Пат. Той е “човека” в Slackware средите.
Неизвестния софтуер
Повечето дистрибуции взимат оригиналния код на програмите, след това започват да ги пачват и променят. Това може да промени програмата многократно – един, два, 10 пъти, колкото е нужно, за да може да работи с другия софтуер от дистрибуцията. Това не пречи на много потребители, но ако искате да сте сигурни, че ползвате това, което разработчика е написали имал в предвид, е по-добре да ползвате Slackware.
Това не означава, че няма пачове в Slackware, но една много голяма част от софтуера е непроменен и не ви оставя впечатлението, че получавате подменена версия на оригинала.
Има и още една страна на проблема. Независимо от какво са ви заблуждавали при избор на дистрибуция, Slackware има пакетна система. Тя е базирана на архиви (.tgz и .txz файлове), вместо оплетена система, базирана на зависимости, с допълнителни бази, съдържащи RPM и Deb файлове. Преимуществото е, че пакетите на Slackware много лесно се отварят, променя се нещо и пак се сглобяват.
Фокуса на дистрибуцията е простотата за изпълнение, което е довело до няколко жертви в историята на Slackware. Най-забележимата жертва е Gnome. През 2005, Пат решава, че работата за съставянето и интегрирането на голямото разнообразие от Gnome пакетите и техните зависимости е прекалено и казва:
“Please do not incorrectly interpret any of this as a slight against Gnome itself, which (although it does usually need to be fixed and polished beyond the way it ships from upstream more so than, say, KDE or Xfce) is a decent desktop choice.”
Това предизвиква появата на допълнителни проекти от независими разработчици, като Dropline Gnome, който стартира малко след съобщението. Това е една много добра реализация на Gnome, но съобщението към разработчиците е явно: Ако искате вашия софтуер в Slackware, уверете се, че е подреден и неговата поддръжка е лесна.
Знайте си целите
Стигаме до третата точка: Slackware е стабилна дистрибуция, която не е много подходяща за начинаещи. Всъщност не е никак трудна за използване, но няма например графичен инсталатор или помощници, които да ви водят и обясняват всеки аспект от инсталацията. Хората, кото ползват Slackware, би трябвало да са имали срещи с командния ред и да са редактирали конфигурационни файлове, което води до максимата в началото: ако решите да използвате Slackware, няма да бъдете предпазен от работа от команден ред

Slackware Installer
.
Така може да научите основата на Линукс и, понеже дистрибуцията няма огромен брой нестандартни промени и пачове към софтуера, не се оказвате в положението да търсите къде се намират безбройните специфични за дистрибуцията конфигурационни файлове. Ако например научите всичко за Fedora, вие ще сте Fedora гуру (което е яко). Ако обаче се научите да работите със Slackware, ще имате познания, които са обши за много дистрибуции.
Slackware не се опитва да бъде най-добрата дистрибуция за всички новаци ползващи Линукс; опитва се да бъде най-добрата дистрибуция за тези, които знаят точно какво искат и какво не искат да има в дистрибуцията. (Например: Yast от SUSE, много мощен и полезен инструмент, който в същото време може да създаде адски много проблеми на напреднал потребител с промяната на конфигурационните файлове.)
Надеждност
Нека да разгледаме колко е стабилна Slackware. Без огромната поддръжка като при Debian, бихте си помислили, че Slackware е по-податлива към проблеми, но се оказва, че това не е така. Пат е консервативен, когато става дума за интегриране на нов софтуер.
Факта, че само един човек се грижи за всичко помага доста за стабилността. Наличието на много разработчици може да доведе до различия в качеството на пачовете, докато Пат изгражда всичко преди да пусне нова версия. Това води до широк и контролиран поглед над дистрибуцията. Със сигурност големите дистрибуции като Debian имат нужда от големи екипи и в този смисъл подхода работи добре, но за Slackware подхода, при който един човек прави всичко, върши също толкова добра работа.
Това е Slackware. Не е много лесен за начинаещите, е една от най-харесваните дистрибуции след 15 години. Средностатистическия потребител би трябвало я пробва поне веднъж. Само се пазете от друга мъдрост известна в Slackware средите: “Once you go Slack, you’ll never go back.”

Slackware Desktop
Има KDE и Gnome пакети, но такава дистрибуция заслужава Xfce, според мен.
Slackware изисква най-малко 486 CPU и 48MB RAM, така че е полезен за възкресяване на стари компютри. Ако искате да се възползвате от допълнителните възможности е добре да имате 1GHz CPU и 256MB RAM. От сайта на Slackware може да свалите ISO-та на последната версия – имате нужда само от диск 1 и 2. Запишете ги на CD-R. На тях се съдържа основата на Slackware, Xfce и различни приложения. След това следвайте стъпките.
Инсталиране на Slackware

Slackware installation step 1

Slackware install step2

Slackware installation step3

Slackware installation step4

Slackware installation step5

Slackware installation step6
Графична среда
Slackware не ви казва какво да правите – не се опитва да познава какво искате да правите. Може да използвате дистрибуцията за сървър или за рутер. В тези случаи конзолната е перфектна като избор. Има възможност обаче да я използвате и за настолен компютър. Ето как да си пуснете графичната среда.
В конзолата се логнете като root с паролата, която сте въвели по време на инсталацията. За да подкарате X сървъра (графичния режим), въведете startx и ще се появи мениджъра на прозорци, който сте избрали по време на инсталацията. Отбележете, че работите като потребителя root в монета, така че всичко, което правите може сериозно да повреди вашата инсталация, затова бъдете много предпазливи.
Ако искате всеки път да се пуска графична среда отворете файла /etc/inittab с редактор по ваш избор (например Vi или Nano). Търсете за това:
id:3:initdefault:
Това указва runlevel-а по подразбиране, в който Slackware се пуска или с други думи какви услуги да се пускат. Над този ред трябва да има други коментирани редове, които обясняват другите runlevel-и. Забележете че runlevel 4 се използва за X11. Затова заменете 3 с 4 и като рестартирате ще имате графична среда.
Добавяне на нов потребител
Използването на която и да е дистрибуция като потребителя root е лоша идея особенно ако не знаете какво правите. Добре е да си направите нормален потребител, с ограничени права. Отворете терминал и напишете adduser. Ще ви бъде поискано име, домашна директория, shell, парола и други опции. На този момент има нужда само да въведете потребителско име и парола. Другите полета ще бъдат попълнени автоматично със стойности по подразбиране.
Управление на пакетите
Нека да разгледане пакетната система с повече детайли. Както споменахме по-рано, пакетите на Slackware са .tgz или .txz архиви с малко допълнителна информация в текстови файлове в архива. Може да ги разархивирате по обичайния начин (tar xfvz име_на_файл) и да видите какво има в тях. Разархивират се в / директорията, така че някой файлове ще отидат в /etc, /usr и т.н.
Освен това в пакета винаги има директория install, която указва на пакетната система на Slackware какво да прави при инсталация(doinst.sh) и какво прави пакета(slack-desc). Нормалните пакети на Slackware не съдържат информация за зависимости. Дистрибуцията приема, че вече знаете какво прави софтуера и какво му трябва, за да работи предварително. Това може да изглежда дразнещо в началото, но когато ви е писнало от дистрибуции, които свалят хиляди “препоръчителни” пакети със съмнителен произход за инсталиране на една програма, ще оцените контрола, който ви предоставя Slackware.
Ако имате пакет, който искате да инсталирате, най-лесния начин е:
installpkg filename.tgz
По-елегантно решение е да се използва pkgtool, който представлява интерфейс с менюта. С него може да преглеждате списък с пакети в директория или да изтривате пакети. Друг инструмент, който може да ползвате е slapt-get (http://software.jaos.org), който както загатва името приличан на apt-get на Debian/Ubuntu производните. Позволява ви да изтегляте пакети от различни източници в Интернет като официалните архиви на Slackware или www.linuxpackages.net, и включва базова поддръжка на зависимости, ако имате нужда от такива.

pkgtool
Допълнителна информация
Тук ще намерите книгата за Slackware. Това е PDF документ от 284 страници, който покрива инсталацията, конфигурацията и администрацията в дълбочина. Добре е да се прочете веднъж след като сте инсталирали дистрибуцията. Ето и цитат от книгата:
“We hope you’ll lend it to all of your friends when they come asking about that cool Slackware operating system you’re running. While this book may not be an edge-of-your seat novel, we certainly tried to make it as entertaining as possible. With any luck, we’ll get a movie deal.”

Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | 3 Comments »
Основи на Линукс автоматизацията
септември 19th, 2009
Тази статия описва начина, по който могат да се изпълняват команди в определено време без да се налага на потребителя да ги въвежда. Програмите отговорни за това в линукс са cron и at.
Изпълняване на команди в точно определено време:
Ако нямате нужда командата да се изпълнява редовно може да използвате. Например може да ползвате :
at midnight
След като изпълните това ще си се покаже at командния ред( at>; ). Напишете командата, която искате да се изпълни. Например:
at>; who > who.out
Можете да въвеждате по една команда на ред. Когато сте готови натиснете Ctrl и D. Сега би трябвало да видте :
X 2006-05-26 00:00 a yourname
Където X е номера на вашата команда. Тази поредица от команди казва на вашата машина да изпълни в полунощ командата, която сте въвели.
Ако решите, че вече на искате да се изпълнява тази команда, може да използвате :
atrm X
X е номера на командата, която искате да не се изпълнява. atrm е командата, с която се премахват задачи зададени с at.
atrm поддържа много разновидности на въведеното време. Например може да ползвате: morning, noon, teatime, or midnight. “teatime” също работи и изпълнява команди в 4 следобед!
Ако ви се налага да изпълнявате една команда всеки ден от месеца например, може тогава не е удобно всеки ден да назначавате да се изпълнява. Cron ви позволява да изпълнявате команди по този начин. Освен това има една много важна разлика между cron и at. at може да се изпълнява само от root, a cron от всички потребители.
Може да има различни настройки за всеки потребител на системата. Преди да започнете каквото и да било трябва да се уверите, че cron работи като демон.
За да можем да създаваме задачи, трябва да разберем как работи Cron. Най-добрия начин е чрез примери.
Първо, всяка задача за cron има следния синтаксис:
Minute (0-59) Hour (0-23) Day of Month (1-31) Month (1-12 or Jan-Dec) Day of Week (0-6 or Sun-Sat) Command
Не е нужно да се указва всяко поле. Ако искате да укажете всеки месец например може да използвате *. Това е пример как може да използване *.
* * * * 5 who
Това ще изпълнява командата who всяка минута, от всеки час, от всеки месец от за всеки петък. Използваме 5 на мястото на ден от седмицата.
5 * * * * who
Това ще изпълнява командата who на всяка пета минута, от всеки час, от всеки месец, за всеки ден от седмицата. Тук използваме 5 на мястото на минутите.
Ако искате някаква команда да се изпълнява всяка вечер в полунощ?
0 0 * * * whо
Това ще изпълнява командата who в полунощ, всеки месец, за всички дни от седмицата. Тук 0 има на мястото за часове и минути и представлява полунощ.
За повече гъвкавост може да използваме / (наклонена черта). Например:
*/15 * * * * who
Този ред ще изпълнява командата who всеки 15 минути, от всеки час, от всеки месец, за всички дни от седмицата. Използване /15 на мястото на минутите за да покажем колко често трябва да се изпълнява задачата.
Има и други опции, но за да не усложняваме ще ги пропуснем.
Създаване на автоматична задача
За да можете да задавате задачи на cron процеса трябва да използвате crontab. Тази команда се въвежда на командния ред. Като изпълните командата тя отваря редактора по подразбиране на вашата дистрибуция и ви дава възможност да редактирате всички задачи за вашия потребител. Може да въведете това, което искате да изпълнявате :
Първо изпълнявате командата с параметър -е (edit):
crontab -e
След това въвеждате задачата:
*/15 * * * * yourcommand
Заменете yourcommand, с това което искате да изпълнявате. След това запазете файла и излезте от редактора. Трябва да видите нещо от сорта на:
crontab: installing new crontab
Току що създадохте задача, която ще се изпълни от вашия потребител в уреченото време(на всеки 15 минути от всеки час, от всяка седмица, от всеки месец, за всеки ден от седмицата).
Изчакайте да се изпълни командата. Ако се пуснали crond с възможност да записва задачите, които изпълнява, може да проверите какво става така :
tail -f /var/log/cron
Може да редактирате задачата по същия начин, по който я създадохте, само че редактирате файла и запазвате. За да изтриете всички задачи може да използвате:
crontab -r
Ако искате да изтриете само някои:
crontab -е
След това изтривате редовете, които не са нужни вече и запазвате.
Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Как да конфигурираме Squid да ползва refresh patterns
септември 7th, 2009
Squid може да бъде конфигуриран така че да удовлетворява дори най-взискателните конфигурации. При последните версии могат да се конфигурират поне 250 отделни параметъра. Стандартния конфигурационен файл се намира в /etc/squid.conf и заедно с коментарите достига 4600 реда. Конфигурирането на приложението може да се окаже предизвикателство дори за напреднали администратори.
Препоръчително е да имате голяма кеш, която няма да се напълни за по-малко от седмица. Добре е да се запълни за около месец. Разбира се големината на кеша е в зависимост от трафика който минава през мрежата. Колкото е по-голям кешът толкова е по-вероятно файла който се търси.
Refresh patterns указват какво се запазва и какво се обслужва от кеша. По принцип бихте искали сървъра да казва на вашия squid какво и за колко време да кешира. Тези опции се изпращат като HTTP хедъри, които Squid разбира. За нещастие обаче повечето сървъри използват настройките по подразбиране и не може да се спести много трафик.
Refresh patterns са в следния формат:
refresh_pattern [-i] regex min percent max [options]
където min и max са минималното и максималното време в минути, а percent са проценти. Възможните опции са :
- override-expire — игнорира expire хедъра от уеб сървъра.
- override-lastmod — игнорира последния модифициран едър от уеб сървъра.
- reload-into-ims — reload заявката от клиента се трансформита в If-Modified-Since заявка.
- ignore-reload — игнорира client’s no-cache или “reload from origin server” директивите. Заявката може да бъде изпълнена от кеша ако е възможно.
- ignore-no-cache — a no-cache directive from the Web server which makes an object non-cacheable is ignored.
- ignore-no-store — a no-store directive from the Web server which makes an object non-cacheable is ignored.
- ignore-private — a private directive from the Web server which makes an object non-cacheable is ignored.
- ignore-auth — objects requiring authorisation are non-cacheable. This option overrides this limitation.
- refresh-ims — a refresh request from a client is converted into an If-Modified-Since request.
Проверете в конфигурационния файл кои от тези опции са допустими във вашата версия на Squid.
Refresh patterns са ефективни ако няма expire хедър от уеб сървъра или refresh pattern-а съдържа override-expire опцията. Например:
refresh_pattern -i \.gif$ 1440 20% 10080.
Това означава:
- Ако няма expire хедър за всичко обекти, чиито имена завършват на .gif or .GIF (това са картинки) тогава:
- ако не са по стари от 1,440 минути(колко време обекта е бил в кеша), тогава обслужи обекта и спри
- ако обекта е по стар от 10,080 минути, копирай го от уеб сървъра и спри
- ако възрастта е между минималната и максималната стойност , използвай lm-factor за да определиш дали обекта е валиден. lm-factor е отношението между възрастта на обекта в кеша и периода за който се променя на уеб сървъра като процент. Така че ако обекта е бил създаден преди 10,000 минути на уеб сървъра и е бил в кеша за 1,800 минути lm-factor-а е 1,800/10,000 = 18%.
- Ако lm-factor-а е по-малко от процента в нашия refresh pattern (20%) тогава обслужи обекта и спри
- в противен случай копирай нова версия от уеб сървъра.
За обекти, които много рядко се променят под едно и също име(видео, картинки, звуци, изпълними файлове, архиви) може да накарате Squid да ги пази за по-дълго време в кеша:
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.index.(html|htm)$ 0 40% 10080 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320 refresh_pattern . 0 40% 40320
Понякога, за нещастие от наша гледна точка, сървъри като youtube.com, правят всичко възможно за да предотвратят кеширане на тяхното съдържание. По-горните опции би трябвало да ви помогнат да преодолеете това тяхно поведение.
Refresh patterns се изпълняват за всички заявки от горе надолу докато се намери правило което съответства. Последното правило ще съответства на всички заявки, които не съответстват на нито едно правило.
По принцип Squid няма да кешира динамично съдържание. Динамичното съдържание отговаря на “cgi-bin” или “?”. Тази опция се активира в по-новите версии на Squid чрез refresh_pattern (/cgi-bin/|\?) 0 0% 0. Това ви дава възможност да определите кои сайтове имат динамично съдържание и кои могат да прескачат това правило. Ако направите следния refresh pattern:
refresh_pattern -i movies.com/.* 10080 90% 43200 refresh_pattern (/cgi-bin/|\?) 0 0% 0
Тогава дори в адреса на movies.com да има “?” съдържаните ще се кешира ако всички други условия са спазени.
Squid прави доста DNS заявки. По една dns заявка за всяка http заявка. Добра идея е да се инсталира кеширащ DNS сървър, за да се намали броя на DNS заявките.
Сайтове като Microsoft-ския windowsupdate.com, които се ползват от много компютри за да си обновяват операционните системи, са тези, които използват най-много трафик. За нещастие обаче тези сайтове не могат да се кешират понеже предлагат частични отговори (http код 206), които не могат да бъдат кеширани от Squid на този етап. В такъв случай бихте могли да ограничим трафика към тези сайтове в определен период.
Тук конфигурираме ограничение 64Kbps (8KBps), при който трафикът за windowsupdate.com по време на пиковите периоди от 10:00-16:00 ще е ограничен на 64Kbps.
acl winupdate dstdomain .windowsupdate.com acl peakperiod time 10:00-16:00 delay_pools 1 delay_class 1 1 # 64 Kbit/s delay_parameters 1 8000/8000 delay_access 1 allow winupdate peakperiod
След като направих гореспоменатите промени, Squid започна да кешира до 26-37%, за разлика от 8% преди това.
Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Преглед на ext3 и ext4 файловите системи
септември 7th, 2009
Има доста въпроси, които се повдигат при създаването на ext3 файлова система.
Административни съображения
Доста въпроси изникват, когато трябва да се реши как да бъде разделено мястото на хард диска и как трябва това място да се разпредели между различните партишъни и файлови системи. Някои от въпросите, които може би си задавате са:
Как бихте искали да планирате създаването на бекъпи ?
Може би искате да разделите информацията на такава, която може да се възстанови или регенерира бързо (и съотвтно може да няма нужда да се бекъпва) и на такава, която трябва да се бекъпва често и сигурно.
Добра идея е да си държите всички системни дневници на друга файлова система. Ако тя се напълни това няма да спре работата на цялата машина. Може би е добре да сложите /var/log на отделна файлова система от /var/spool.
От друга страна обаче многото файлови системи и партишъни губят много свободно място. Това е така понеже свободното място на една файлова система не може да се ползва от другите. Освен това дисковото пространство е доста по-евтино и по-добра инвестиция от времето на системния администратор.
Брой inodes
Броя на inodes във файловата система не може да се променя след като тя бъде създадена, поне без да променяме големината й. Ако използваме resize2fs (това налага уголемяване на големитана на партишъна или на логическия дял, на който се намира файловата система) за уголемяване на файловата система, броя inodes ще стане повече, но отношението между тях и блоковете на файловата система ще се запази.
Отношението на inodes към мястото на диска се определя от -i опцията на mke2fs.
Не е лошо да се направят повече от необходимите inodes, при положение че това ще увеличи леко времето, за което минава fsck , и мястото нужно за inode таблицата ще е малко повече.
Големина на inodes
Големината на inode на ext3 файлова система по подразбиране е 128 байта. Може да се използват inode-и за да се запазват разширени атрибути, което може да ускори работата на файловата система ако се използват много атрибути, например ако се използва SE Linux или Sambav4. Inodes с големина от 256 байта се използват за някой ext4 опции.
Възможности на файловата система
Подсигурете се с достатъчно нова версия на e2fsprogs, която поддържа преоразмеряване на файловата система в реално време, ако очаквате че може да ви се наложи да използвате тази възможност.
Колко памет е нужна за fsck?
Големината на дисковото пространство расте по-бързо отколкото големината на рам паметта, затова в последно време е възможно да се създаде толкова голяма файлова система, при която на практика e2fsck няма достатъчно ресурси за да работи правилно. Някои от проблемите на e2fsck са с различни inode и bitmaps блокове, както и с кеша на директориите. e2fsck използва от 3 до 6 inode bitmaps (обикновено се използват 4, но понякога има нужда от повече). В този ред на мисли за 64GB файлова система, която има 16 милиона блока по 4 килобайта и 8 милиона inodes, всеки inode bitmap ще заема близо мегабайта, а всеки блоков bitmap ще заема приблизително 2 мегабайта. Нужната памет само за bitmaps ще е 12 мегабайта. Освен това, e2fsck пази информация за директориите, за което са нужни още 12 байта за директория. На файлова система с 88 милиона inodes, от които 77 милиона директории, паметта нужна за кеш за директориите е малко над 880 мегабайта. За нещастие на 32-битова операционна система, на която са заредени стандартните библиотеки e2fsck би изразходвало адресното пространство, тъй като адресното пространство за процес на 32-битова x86 операционна система е 3 гигабайта.
Ако имате намерение да правите много голяма файлова система, която ще съдържа много файлове и директории, може би е добра идея да помислите за 64-битова архитектура.
Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | No Comments »
Как да търсим файлове в Линукс
септември 6th, 2009
Най-лесния начин да търсим файлове в Линукс е с програмата locate. Когато пуснете за пръв път програмата може да ви изпише съобщение за грешка. Проблема е че е нужна база с всички файлове на на компютъра за да може locate да ви покаже резултат. Съобщението за грешка ще би подкани да се логнете като root и да изпълните определена команда. След това програмата би трябвало да работи.
Има няколко начина по които може да ползваме приложението.
$ locate index.html
Това ще разпечата списък с всички файлове, в името на които има index.html. Примерни резултати биха били :
/home/pamela/index.html
/usr/local/games/pam/index.html
Може да използвате -q опцията за да подтиснете съобщенията за грешки. Съобщения за грешки, които може да срещнете, са например, че нямате достъп до файловете понеже не сте логнати с потребител root. Освен това -q опцията ще подтисне всякакви други съобщения за грешки.
$ locate “*.dat” -q
Може да използвате -n опцията за да укажете колко резултата да показва програмата.
$ locate “*.c” -n 10
Това ще покаже само първите 10 файла, на които имената завършват на .c.
Има още няколко параметъра, но те се ползват рядко и са описани в man страниците на програмата.
Как да търсим с ‘find’
Един от най-добрите начини за търсене на файлове в Линукс е с find. Тази програма има много параметри които може да се използват за да намерите точно това, което търсите.
Ако просто искате да знаете къде в файловата система се намира даден файл то тогава е по-добре да използвате locate.
Ето няколко начина, по които можете да ползвате find.
$ find / -name ‘program.c’
където :
/ – директорията, в която търсим
-name – с тази опция показваме, че търсим файлове
program.c – указваме файла, който търсим
$ find / -name ‘index*’
$ find / -iname ‘index*’
Първата команда ще намери файлове, които започват с index. Програмата ще започне да търси от директорията / и ще продължи във поддиректориите.
Втората кманда ще търси за същите файлове, но няма да бъде чувствителна към това дали са написани с малки или големи букви.
$ find -name met*
Тази команда ще търси за файлове, които започват с met в настоящата директория и всички нейни поддиректории. Понеже не е указана директория, се взима настоящата по подразбиране.
$ find /mp3collection -name ‘*.mp3′ -size -5000k
$ find / -size +10000k
Първата команда ще търси за всички файлове в директорията /mp3collection, които завършват на mp3 и са по малки от 5000 KB ( < 5MB)
Втората команда ще търси в / директорията и ще търси файлове, които са по-големи от 10000KB (> 10MB)
$ find /home/david -amin -10 -name ‘*.c’
$ find /home/david -atime -2 -name ‘*.c’
$ find /home/david -mmin -10 -name ‘*.c’
$ find /home/david -mtime -2 -name ‘*.c’
Първата команда търси за файлове в директорията /home/david и всички нейни поддиректории за файлове, които завършват на .c и върху които са били извършвани операции върху тях в последните 10 минути.
Втората команда търси за същите работи, но за файлове, върху които са извършван операции в последните 10 часа.
Третата и четвъртата команда отново търсят за същите файлове, но само ако тяхното съдържание е било променяно.
$ find / -mount -name ‘win*’
Тази команда връща файловете, които започват с ‘win’. Разликата е че ще се търсят само файлови системи,които не са маунтнати.
$ find /mp3-collection -name ‘Metallica*’ -and -size +10000k
$ find /mp3-collection -size +10000k ! -name “Metallica*”
$ find /mp3-collection -name ‘Metallica*’ -or -size +10000k
Булевите оператори като AND, OR или NOT правят find доста полезен инструмент.
Първата команда търси в директория /mp3-collection за файлове, започващи с ‘Metallica’ и са по-големи от 10000 килобайта (> 10 MB).
Втората команда търси в същата директория като по-горе, но за файлове, които са по-големи от 10MB и не започват с ‘Metallica’.
Третата команда търси за файлове в същата директория като по-горе за файлове, които започват с ‘Metallica’ или файлове, които са по-големи от 10 MB.
Може би най-важната опция е exec. exec ви позволява да изпълняваате опредлена комнда върху резултатите от търсенето. Тук е показан прост пример, в който искаме да изведем детайлите за всеки намерен файл.
$ find / – name ‘Metallica*’ -exec ls -l {\}\ \;
Командата ще изведе всички файлове, които започват с ‘Metallica’ и после ще изпълни ‘ls -l’ върху всеки от тях.
{\}\ показва файла върнат от търсенето, който ще бъде заместен в командата, която изпълняваме.
\; се използва, за да се укаже края на командата и е задължителен.
Possibly Related Posts:
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото
- Ограничаване на достъпа до команда в Линукс
- Взимане на част от текст с bash
Filed under: Статии | 1 Comment »