Ricomp. Kernel - Copertina - Staroffice 4 |
Articoli
Tips & Tricks
Ecco i Tips & Tricks del mese di Giugno 1998 per il Pluto Journal. Come al solito questi trucchetti sono stati presi: dai news group dedicati a Linux e ad unix, da amici o di mia invenzione... in ogni caso li usate a vostro rischio e pericolo. Comunque se volete contattarmi potete sempre spedirmi una mail.
È ormai noto che X11 e GCC 2.8 non vanno d'amore e d'accordo al primo
impatto. Questo è causato dal cambiamento di alcune variabili nel file
ioport.c
(file appartenente al kernel di Linux). Per risolvere
questo problema basta prendere il file ioport.c
della versione
del tuo kernel e sostituirlo con quello di una versione sperimentale del
kernel. O ancora meglio basta passare ad un kernel sperimentale con tutti i
pro e i contro.
Per far funzionare questa scheda di rete sotto Linux è solamente necessario compilare il kernel con il supporto per la scheda di rete NE2000. Sembra strano ma funziona.
Questo script è particolarmente utile per chi amministra delle macchine
Linux. Molto spesso, quando gli utenti iniziano a diventare sempre più
numerosi, si creano nuovi gruppi per dividere, secondo una certa logica, i
vari utenti. Però il passaggio dal gruppo vecchio a quello nuovo non è così
semplice. Oltre a cambiare il file /etc/passwd
e
/etc/group
si deve cambiare anche il gruppo a tutti i file che
appartengo agli utenti che sono passati dal vecchio al nuovo gruppo. Per
farlo molto rapidamente basta eseguire
find / -group "old group name" -print | xargs chgrp "new group name"Meglio di così... ah, e senza le
"
Per chi deve portare un testo da Dos a Unix la cosa è molto semplice, si
utilizza il comando dos2unix
(è comunque uno script). Ma per
chi deve portare un file di testo Machintosh su Unix? dos2unix
logicamente non va bene, ma il comando tr
sì. Ecco uno script
niente male:
# #Title: mac2unix # #Lives: /usr/scripts/mac2unix # #Funct: Translate Mac line endings for unix ones # #Usage: prompt>mac2unix {filename} # # # #!/usr/bin/ksh # # #Clear up to start! # # /bin/touch "$1".m # /bin/rm "$1".m # # #Move the Mac file to new file with dot m extention # # /bin/mv "$1" "$1".m # # #Pick up the file and throw it through translate changing # #Mac returns (ascii 15) to unix newlines (ascii 12) # # /bin/cat "$1".m | /bin/tr '\015' '\012' > "$1" # #exited ecco la sua controparte:
#Title: unix2mac # #Lives: /usr/scripts/unix2mac # #Funct: Translate unix line endings for mac ones # #Usage: prompt>unix2mac {filename} # # # #!/usr/bin/ksh # # #Clear up to start! # # /bin/touch "$1".u # /bin/rm "$1".u # # #Move the Unix file to new file with dot u extention # # /bin/mv "$1" "$1".u # # #Pick up the file and throw it through translate changing # #Mac returns (ascii 15) to unix newlines (ascii 12) # # /bin/cat "$1".u | /bin/tr '\012' '\015' > "$1" # #exitEhm.. togliete i
#
all'inizio di ogni riga, grazie.
In questo caso non è uno script ma un programma C
#include#define CR 13 #define LF 10 int main(int nargs, char *arg[]){ int state = 0; int c; unsigned long n=1; int newline = 0, echo = 0; while((c=fgetc(stdin)) != EOF){ switch(state){ case 1: /* seen Carriage Return */ switch(c){ case LF: state = 0; case CR: newline = 1; break; default: newline = echo = 1; state = 0; } break; case 2: /* seen Line Feed */ switch(c){ case CR: state = 0; case LF: newline = 1; break; default: newline = echo = 1; state = 0; } break; default: /* any character besides LF or CR */ switch(c){ case CR: state = 1; break; case LF: state = 2; break; default: echo = 1; } } if(newline){ if(fputc('\n', stdout) == EOF){ fprintf(stderr,"Output Error at Character %d\n", n); return -1; } n++; newline = 0; } if(echo){ if(fputc(c, stdout) == EOF){ fprintf(stderr,"Output Error at Character %d\n", n); return -1; } n++; echo = 0; } } return 0; }
Volete fare un finger che inserisca in un file il risultato del comando finger effettuato su ogni utente della vostra macchina? No problema (ma più che altro: a cosa vi serve?)
#!/bin/csh setenv IGNORETHESE "ftp|lost+found|foo|bar" foreach i (`ls /home | egrep -v "$IGNORETHESE"`) finger $i >> /tmp/finger.log end
Ecco un programma in C che ritorna la data corrente. Utile per chi vuole fare un programma di contabilità o di appuntamenti.
#include#include int main() { struct tm *tmptr; time_t lt; char buff[256]; time(<); tmptr=localtime(<); strftime(buff,256,"%A %I:%M %p", tmptr); printf("%s\n",buff); }
Se state realizzando un clone del top ecco un metodo veloce per sapere
quanta memoria fisica ha la macchine su cui il vostro programma girerà, e
senza passare dalla directory /proc
amout = sysconf (_SC_PHYS_PAGES) * getpagesize ();Ah, la funzione C
sysconf()
a seconda del valore passato
ritorna cose molto interessanti. (man 3 sysconf
)
Stufi del GCC 2.7.x.? Ecco come compilare i sorgenti del nuovo compilatore EGCS.
Prendere il file .tgz
da
http://www.cygnus.com/egcs
.
Scompattate i sorgenti ed entrare nella directory dove essi risiedono. A
questo punto eseguire lo script/utility configure
(lo si trova
nella directory dei sorgenti. Nel caso il sistema non lo trovasse eseguire
./configure
. Create, ora, una directory chiamata
objdir
.
Eseguite:
cd objdir
./configure
make bootstrap
make install
A questo punto alcune persone dicono che sono state costrette a rimuovere
i seguenti programmi (i nomi fanno riferimento ai .rpm
della
RedHat):
gcc-2.7.2.1-2
gcc-c++-2.7.2.1-2
gcc-objc-2.7.2.1-2
libg++-devel-2.7.1.4-5
Ora eseguite:
rm -f /usr/bin/gcc /usr/bin/cc ln -s /opt/egcs-1.0.2/bin/gcc /usr/bin/gcc ln -s /usr/bin/gcc /usr/bin/cc ln -s /opt/egcs-1.0.2/bin/g++ /usr/bin/g++ rm -f /usr/bin/g++ /usr/bin/c++ ln -s /opt/egcs-1.0.2/bin/g++ /usr/bin/g++ ln -s /usr/bin/g++ /usr/bin/c++ rm -f /lib/cpp ln -s /opt/egcs-1.0.2/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/cpp /lib/cpp
Ah, logicamente /opt/egcs-1.0.2
è la directory dove è stato
installato il egcs
in questo esempio. Voi potreste averlo
installato in un altro posto tramite l'opzione
--prefix=/path/dove/installare
del comando
configure
.
Per maggiori info andate al sito
Ecco il codice d'escape per far entrare la stampante HP DJ 520 in ecomode:
Stanchi di dover settare a mano voi il display quando effettuate un telnet
su un'altra macchina? Allora ecco lo script-soluzione:
Volete sapere che versione del kernel sta' usando la macchina che state
utilizzando?
È inglese
Se dovete convertire i nomi di alcuni files da MAIUSCOLO a minuscolo (DOS?)
queste due alternative fanno al caso vostro.
Per chi proviene dal mondo dos come programmatore, non trovare conio.h è
un po' come la pasta scotta da magiare. Beh, ecco la pasta ben cotta: A pensarci su sembra una operazione abbastanza lunga e noiosa: si deve
cancellare, ricreare, settare i permessi ed il proprietario. Ma in verità è
molto semplice. Basta eseguire un Questo file contiene i dati di chi si è collegato (via console) sulla
propria macchina. La cosa brutta è che tende a diventare sempre più grande
riducendo quindi lo spazio disponibile. Se necessitate di spazio libero,
sapete chi cancellare.
In questa directory sono contenuti tutte le pagine di manuale consultate
sul sistema, quindi formattate e pronte per essere visualizzate o stampate.
Il fatto è che il sistema non cancella il contenuto e quindi lo spazio su
disco non viene mai liberato.
Anche per questo mese i Tips&Tricks sono finiti. Come al solito non mi
prendo la responsabilità di nulla nel caso qualche cosa non funzionasse, ma
vi sarei grato se mi spedite una mail se avete qualche cosa da farmi notare
su qualche T&T. Le mail pervenutemi saranno proposte integralmente il mese
prossimo.
di
ZioBudda
http://egcs-www.cygnus.com/install/index.html
HP DJ e salvare il toner
Ec(s!Q
oppure
027 040 115 049 081
oppure
1B 28 73 31 51
Telnet e DISPLAY
#!/bin/sh
xtty=`tty | cut -c6-15`
who | grep -w $xtty | tr -d '()' | awk '{ print $6 }'
Versione del kernel
cat /proc/version
oppure
cat /proc/sys/kernel/osrelease
PGP 5.0
> I compiled up PGP 5.0i for Unix on a Solaris 2.5.1 box. When I run pgpk
> -g to generate a new key pair I get to the end of the question asking
> but after a bit of time generating the pair the process ends with the
> message:
>
> Received signal 10.
>
> And a pair is not generated. Any ideas?
>
>
This is an aligment problem in pgpMem.c.
If you are using cc do not use the -fast option.
If you're using gcc use the __attribute__ ((aligned (8)))
for the struct MemHeader. Here it is:
struct MemHeader
{
#if DEBUG_FIND_LEAKS
LeakItem leakItem; /* Information for the leaks package */
#endif
size_t size; /* Size of the user area of the block *
/
#if DEBUG_MEM_HEAD_MAGIC
ulong magic; /* Trailing magic number */
#endif
} __attribute__ ((aligned (8)));
O anche il fix
My fix is at
http://discus.anu.edu.au/~geoffk/pgp50i-memalign.diff.
Convertire i nomi dei file da maiuscolo a minuscolo
- for i in `find . -type f -print` ; do mv $i `echo $i | tr '[A-Z]' '[a-z]'` ;
- perl -e 'foreach (<*>) { rename $_, lc $_ }'
conio.h
http://sunsite.unc.edu/pub/Linux/libs/ui/linux-conio-1.02.tgz
Portare a zero la dimensione di un file.
cat
di /dev/null
sul file desiderato. Ad esempio, prima della ``cura''
-rwxrwxr-x 1 michel michel 1720320 May 26 21:51 a.out
e dopo la ``cura'' (cat /dev/null > a.out
)
-rwxrwxr-x 1 michel michel 0 May 26 21:51 a.out
/var/log/wtmp
/var/catman
Ricomp. Kernel
- Copertina -
Staroffice 4