Dal kernel 2.6.16 è possibile scachare la RAM dalle pagine di memoria diventate inutili semplicemente dando un comando numerico nei file in /proc/sys.

echo 3 > /proc/sys/vm/drop_caches

man proc

/proc/sys/vm/drop_caches (since Linux 2.6.16)
    Writing to this file causes the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.

    To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
    to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
    to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.

    Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync(8) first.

Per avere i pacchetti della slackware 13.0.

# wget -r -b -nH –cut-dirs=4 -X isolinux,pasture,patches ftp://ftp.fu-berlin.de/unix/linux/mirrors/slackware/slackware-13.0/
-r
recursivo
-b
mette direttamente in background. Spamma un log su wget-log
-nH
non voglio una dir col nome dell’host
–cut-dirs=4
taglia i primi 4 livelli (unix, linux, mirrors, slackware)
-X isolinux
esclude una lista di argomenti separati da virgola

wget è una utility che consente di scaricare files (o gerarchie di file) da riga di comando: un download rapido e comodo sui protocolli HTTP(S) e FTP; puo’ funzionare in background e ha notevoli potenzialità spiegate nel man. :)

Sto pistolando su un kernel per l’e3pc (così, per provare il nuovo 2.6.30).
Fra me è Sua Maestà il K non c’è ancora quello che definirei un ottimo rapporto, ma suppongo che alla lunga impareremo a conoscerci (o meglio, IO, umile padawan, troverò un modo per farmi capire a S.M.).

Ci sono un sacco di guide sul web, e come sempre tirare le somme in maniera organica non è banale.
Una lista di comandi come segue SENZA spiegato che significa non ha senso (imho).

make clean
$ make dep
$ make bzImage
$ make modules
# make modules_install

Una scaletta un po’ più seria (ma sicuramente da perfezionare):
* prendete il kernel nuovo (kernel.org)

* mettete sotto /usr/src/ e scompattate

* il kernel viene “partorito” da una compilazione con # make. Make si appoggia ad un Makefile che si appoggia a sua volta ad un file testuale di configurazione (.config nella dir dove ci stanno i sorgenti).

* Si può cambiare qualche aspetto importante andando a modificare le variabili dentro il Makefile (quelle in stampatello all’inizio). Per esempio:

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 29
EXTRAVERSION = .1
NAME = Temporary Tasmanian Devil

Modificare EXTRAVERSION può risultare molto utile, poichè in /lib/modules/ vengono caricati i moduli necessari al kernel all’avvio, e la stringa che forma la dir concatena anche quel parametro (insomma, si possono tenere separati i vari moduli di versione in versione).

* L’operazione di configurazione del kernel è fondamentale, e io la realizzo con un comando: $ make menuconfig
NOTA: Io uso menu config perchè mi è comodo e usa le solite interfacce coloratine da terminale figlie di ncurses. Ovviamente esistono altre opzioni: dal più testuale config, ai grafici xconfig e gconfig (mai usati, ma sono certo siano esteticamente validi e ugualmente efficaci). Se si vuole caricare una configurazione vecchia (ie: esiste già un .config precedentemente redatto) si puo’ usare il comando $ make oldconfig.
NOTA2: Ci sono anche alcune opzioni per creare file .config con caratteristiche standard: $ make allnoconfig, $make allyesconfig, ecc. Per ulteriori info, leggere il README.

* Dopo aver create il .config, con $ make si compila il kernel vero e proprio (che comparirà magicamente sotto arch/x86/boot/bzImage .
ATTENZIONE: basta scrivere $ make per ottenere ciò che in molte guide e’ indicato come $ make dep, $ make bzImage, $ make modules. Insomma, il tutto si è evoluto, e non c’è più necessità di indicare che è necessario compilare le dipendenze (dep), l’immagine (bzImage, big compressed image) e i moduli; make già sa, e basta e avanza.
NOTA: Se si vuole avere più output con make, si può dare il comando $ make V=1 (o 2).

* Se si è configurato il kernel in maniera monolitica (cioè all-in-one), si deve spostare il tutto sotto /boot e via. Nel caso si siano indicati dei moduli, bisogna compilarli. il comando è # make modules_install e, come si evince facilmente, installa i moduli del kernel nel filesystem (sotto /lib/modules/linux-2.x.x.EXTRAVERSION-XXXX).

* Si potrebbe dare anche $ make install per installare il kernel compilato nel posto giusto, ma io non mi fido e lo copio a mano (ie: # cp /usr/src/linux-2.xx.xx/arch/x86/boot/bzImage /boot/kernel-2.xx.xx).
NOTA: $ make install si basa su /sbin/installkernel che viene lanciato da arch/x86/boot/install.sh coi parametri estrapolati dallo script.

system.map è una mappa di simboli utile al kernel che viene caricata all’avvio, ma non necessaria.

* Nel caso le cose vadano storte (e ci andranno, of course), è necessario ripulire i sorgenti appena compilati e tornare alla situazione iniziale. Soluzione stupida: cancellare tutto e scompattare l’archivio. Soluzione migliore: usare i comandi di make. :) Come si legge nel Makefile:

# Cleaning is done on three levels.
# make clean     Delete most generated files
#                Leave enough to build external modules
# make mrproper  Delete the current configuration, and all generated files
# make distclean Remove editor backup files, patch leftover files and the like

Di solito sono sufficienti i primi due: se si vuole tenere la configurazione, si lancia $ make clean; se si vuole cancellare tutto $ make mrproper.

In qualunque caso, ci vengono in aiuto il file README, il Makefile (si puo’ leggere, davvero!) e $ make help (le info di cosa puo’ fare il makefile, che forse è meglio che leggere il codice del Makefile. :-P ).
Esiste anche la dir Documentation/ che tiene tante di quelle info da uscirne scoppiati (cominciare dal file HOWTO).

Visto che ultimamente ho smandruppato con slackware m’è toccato guardare un po’ LILO (LInux LOader). Preferisco GRUB, ma vabbè.
Dunque, lilo è l’altro (il primo) bootloader. A differenza di grub che si legge il file di configurazione menu.lst e questo gli basta, lilo necessita di un file di configurazione /etc/lilo.conf (che è molto semplice ed intuitivo da capire) e di una compilazione per essere a posto.
La compilazione la si ottiene dando il comando # lilo. Se si vuole fare un test (imho fondamentale), meglio postporre al comando il flag -t. Il flag -v aumenta la verbosità, ovviamente.

Un link da esplorare: kernel niubbi.

Robba (vecchia) da leggere:
Configurare, compilare e installare un kernel 2.6 per (open)SUSE Linux di Thomas Hertweck (2006)
KernelAnalysis-HOWTO di Roberto Arcomano (2003)
The Linux Installation HOWTO di Eric Steven Raymond (2002)

Il comando top ci fornisce una serie di informazioni sul sistema (uptime, uso della cpu, uso della memoria, ecc.).

Le prime righe di solito sono abbastanza chiare (uptime, load average, processi in corso). La terza fornisce info riguardanti i processi della CPU al momento: us per i processi avviati nello userspace, sy per quelli del sistema-kernel, id indica il valore di “cazzeggio” della cpu – se è alto non è molto impiegata. Sui valori wa , hi, si e st attualmente preferisco non pronunciarmi, ma sono indici di interazione fra la cpu e (rispettivamente) il disco, l’hardware, il software, le virtualizzazioni; se sono bassi è meglio, se sono alti indicano problemi o iper-attività sui device.

La riga più significativa:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

PID, USER, %CPU e COMMAND non li spiego. :)

PR
Indica la priorità del processo – in termini di cicli di cpu. Un valore basso indica che il processo verrà buttato nella cpu più spesso.
NI
Valore di nice del processo. E’ un modificatore di priorità.
VIRT
Quantità di memoria richiesta dal processo. (Grazie a questo si puo’ verificare se è vero che firefox è pesante… si, lo è. :-P )
RES
Memoria residente, cioè la memoria che il processo sta effettivamente usando.
SHR
Memoria condivisa fra processi, magari poichè ci sono librerie in comune.
S
Come nella seconda riga di top, indica quali processi stanno andando, quali dormienti, ecc…
%MEM
Indica la percentuale di memoria che il processo ha occupato nell’ultimo ciclo.
TIME+
Indica la quantità di tempo totale di sfruttamento della CPU ha il processo.

top modifica l’output in tempo reale e permette anche di modificarlo attraverso alcune key.

i
permette di visualizzare (o no) i processi in attesa (idle).
P
ordina i processi in funzione dell’uso della CPU.
M
ordina i processi in funzione dell’uso della memoria.
u
permette di visualizzare solo i processi di un determinato utente.
k
ci permette di killare un processo da top.
r
ci permette di ridefinire la priorità del processo (renice). (Cercherò di scrivere un post per spiegare nice e renice.)
n
per visualizzare un arbitrario numero di processi.
m
visualizzare (o no) la parte relativa alle memorie (mem e swap).
B
Potrebbe essere anche utile evidenziare le voci importanti.
s/d
Se la frequenza di aggiornamento non piace, si puo’ definire il numero di secondi (non negativo, e 0 potrebbe non dare i risultati sperati).
W
Dopo aver impostato tutto, se volete salvare le vostre impostazioni. :) (In /home/$user/.toprc)

Con man top si potranno vedere moltri altri comandi.

Un po’ come nella quantistica, dove la misurazione altera il sistema misurato (principio di indeterminazione FTW), top è molto bello ma influenza il sistema (del resto si aggiorna in tempo reale, interrogando tutto e tutti di continuo); per questo esistono anche altri strumenti “statici” di controllo: ps per i processi, uptime per vedere dati sul sistema, free per la memoria.

fhsIl filesystem Unix è descritto in man hier.
Volendo ho trovato qualcosa anche qua.

In generale si parla di dati di 4 categorie (2 a coppie): condivisibili e non condivisibili, statici o variabili.
I dati nelle home o le configurazioni di solito sono non condivisibili (/home), gli eseguibili sono condivisibili. I comandi eseguibili sono intesi come statici (/bin), i log come variabili (/var/mail).

Queste sottodirectory di root normalmente sono presenti:

bin	Essential command binaries
boot	Static files of the boot loader
dev	Device files
etc	Host-specific system configuration
lib	Essential shared libraries and kernel modules
media	Mount point for removeable media
mnt	Mount point for mounting a filesystem temporarily
opt	Add-on application software packages
sbin	Essential system binaries
srv	Data for services provided by this system
tmp	Temporary files
usr	Secondary hierarchy
var	Variable data

/usr è indicato come un filesystem gerarchico secondario, perchè anche se è una subdir di /, ha una sua struttura che replica fedelmente quella del parent. Di norma i file in /usr sono condivisibili e read-only.

/proc fornisce informazioni sul sistema ed è la parte del fs che contiene le operazioni del kernel (quindi non c’entra niente con quel che c’è nell’hdd).

sim@idrogeno:~$ ls /proc
1      2      2426  2900  3100   7328       cmdline      mtrr
10     2016   257   2902  31014  7329       config.gz    net
11     2109   2574  2930  351    7330       cpuinfo      pagetypeinfo
1111   2110   258   2931  354    7331       devices      partitions
1399   2133   259   2933  366    7332       diskstats    scsi
15364  21816  260   2936  369    7336       dma          self
1578   21817  261   2938  390    7560       driver       slabinfo
1579   21818  2624  2939  4      7569       execdomains  stat
1587   21819  2638  2940  418    7573       filesystems  swaps
16320  21820  2669  2942  5      7698       fs           sys
16365  22295  2682  2943  514    7813       ide          sysvipc
18215  2277   2683  2944  6      7887       interrupts   timer_list
183    2279   2684  2945  6699   8          iomem        tty
184    2280   2685  2949  6909   8090       ioports      uptime
185    2281   2686  2958  6918   86         irq          version
186    2282   2687  2970  6979   87         kallsyms     vmallocinfo
1886   2302   2698  2974  6980   88         kmsg         vmstat
1895   2309   2709  2995  7      8889       kpagecount   zoneinfo
1904   23686  2715  2997  7049   89         kpageflags
191    2385   2716  3     7070   9          loadavg
1914   23956  2744  3019  7079   9005       locks
1925   2399   2857  3040  7324   acpi       meminfo
1926   2409   2860  3041  7325   asound     misc
194    24186  2861  3060  7326   buddyinfo  modules
1943   24191  2899  3098  7327   bus        mounts

Le directory coi numeri danno informazioni riguardo i processi (il numero rappresenta il pid), e contengono al loro interno informazioni come il comando dato per lanciare il processo, i settori di memoria riservati, le variabili di sistema a disposizione, ecc.

Altri come /proc/cpuinfo, /proc/devices (e version, uptime, ecc.) si spiegano da soli.

Oggi mi sono ritrovato dinnanzi ad una situazione molto curiosa: utenti che visualizzavano file (o meglio i loro nomi) attraverso l’interfaccia grafica avevano un elenco di caratteri alfanumerici praticamente a caso, mentre guardando i file attraverso terminale le cose parevano sensate…
Sensate fino ad un certo punto: i nomi dei file contenevano un bellissimo asterisco che via terminale veniva escapato (\*) ma visualizzato con un filesystem manager grafico pareva mandare le cose a ramengo (es: CMDJER~1.EPS).

yyyy@box:~/aaaa/yyyy$ ls
xxx.tar.gz            zzzz_fig5*.eps  yyyy.dvi  fig1*.eps
zzzz_fig11*.eps  zzzz_fig6*.eps  yyyy.log  fig2*.eps
zzzz_fig13*.eps  zzzz_fig7*.eps  yyyy.pdf  fig3*.eps
zzzz_fig15*.eps  zzzz_fig8*.EPS  yyyy.tex
zzzz_fig4*.eps   yyyy.aux         fig12*.eps

Whypecché?

Il punto chiave è che l’interfaccia grafica visualizzava i filename attraverso samba, che per essere sicuro di non danneggiare nessuno (ie: Win), cambiava i filename in qualcosa di non contenente wildcard o altre stranezze.

Se c’è una cosa grandiosa delle chiavette USB, è che possono tenere un sacco di cose importanti, ed essere estremamente portatili.
Credo che una delle cose più ganze, sia poter girare con il proprio OS a portata di mano.
Per gli utenti che non vogliono chiedere mai e che hanno una chiavetta USB a disposizione:

  • scaricate l’immagine della distro debian (5.0) con il DE che preferite da qui (io sono andato sulla i386, usb-hdd, xfce).
  • copiate su una chiavetta con $ dd if=immagine_debian_live.img of=/dev /chiavetta /usb
    Attenzione: copiate sul device della chiavetta, non su quella della partizione (ie: /dev/sdc, non /dev/sdc1)
  • Inserite la chiavetta in una porta usb e riavviate il pc, facendo il boot dalla chiavetta (ie: F8 per avere il menu di boot).

Facile e utile. :)

« Previous Articles    Next Articles »
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.