Comandi

Page last edited 542 giorni 3 ore fa
Da wiki.betaingegneria.it.

Indice

Applicativi[modifica]

Spotify[modifica]

Per installare Sporify su Ubuntu:

  # 1. Aggiungi questa riga al tuo elenco di repository
  #    modificando il file /etc/apt/sources.list
  deb http://repository.spotify.com stable non-free
  
  # 2. Se vuoi verificare i pacchetti scaricati,
  # devi aggiungere la nostra chiave pubblica
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 94558F59
  
  # 3. Esegui il comando apt-get update
  sudo apt-get update
  
  # 4. Installa spotify!
  sudo apt-get install spotify-client
  

Fonte

cat[modifica]

Mi sono trovato di fronte a questo problema: voglio aggiungere i log di git ad un file di changelog preesistente che gestivo a mano ma che contiene informazioni che non voglio perdere.

Faccio così:

   $ git log > changelog.txt

mmm no questo sovrascrive il file, faccio un append:

   $ git log >> changelog.txt

Il comando >> (append) mi consente di aggiungere un output di un comando alla coda di un file Ma se io volessi che aggiungerlo in testa? Ho girato qualche forum e poi mi sono costruito questo comando:

   $ echo -e "`git log``cat changelog.txt`" > changelog.txt

Ecco come l'ho costruito un po' alla volta: l'idea è quella di stampare prima il log di git e poi il vecchio file e concatenarli in quest'ordine

   $ echo `cat changelog.txt`

mi stampa su stdout il file senza gli a capo.

   $ echo "`cat changelog.txt`"

mi stampa il file correttamente (è un modo più complicato di fare un cat). A questo punto devo solo premettere il risultato del comando git log:

   $ echo "`git log``cat changelog.txt`"

Così però il non va a capo tra un file e l'altro; se inserisco un newline \n tra i due comandi mi viene scritta la stringa \n così com'è,

   $ echo "`git log`\n`cat changelog.txt`"

cioè il comando echo non interpreta l'"a capo"; ecco quindi l'opzione -e di echo che fa un modo che anche i caratteri preceduti da backslash vengano correttamente interpretati:

   $ echo -e "`git log`\n`cat changelog.txt`" > changelog.txt

Il doppio backtick `comando` è equivalente alla forma $(comando)

per cui si può anche scrivere così

   $ echo -e "$(git log)\n$(cat changelog.txt)" > changelog.txt

wget[modifica]

Potente programma per scaricare siti statici.

  wget -r -l8 --no-parent http://www.miosito.com/dir/

scarica tutta la directory dir e tutte le sottodirectory (-r recursive) fino a 8 gradi di ricorsione (-l levels) ma non le cartelle genitrici (--no-parent).

vi[modifica]

  1. con questo comando si tolgono i ^M da un file di testo con VI:
 :g/[CTRL-V][CTRL-m]/ s///g

find[modifica]

Per trovare file contenenti una determinata stringa:

  find . -name "*.h" -exec grep -H " socket (" {} \;
  find . -name "file_da_cercare*" -exec grep -H "stringa_da_cercare" {} \;
  find . -name "*" -exec grep -H "mysql" {} \;
  find . -name "*" -exec grep -H "navbar" {} \;

passwd[modifica]

Come cambiare la password al mio utente. Per prima cosa accedo al mio account, poi faccio così:

  marcob@jsbach:~$ passwd
  Enter current password:
  Enter new password:
  Retype new password:
  marcob@jsbach:~$

Nota bene: mentre batto sui tasti, Linux non mi ritorna nessun prompt (a terminale non vedo che sto scrivendo, per questioni di privacy)

Se tutto è andato liscio la password è stata modificata. Se invece è KO, le cose che possono essere andate storte sono:

1) se si sbaglia la password corrente occorre reimmetterla (saperla è prerequisito di tutto, se non la sai, come ci sei arrivato lì? il tipo ha lasciato la shell aperta, 'sto coglione...)

2) se la password è troppo banale Linux non esiterà a farcelo notare

3) se la password ripetuta nel retype non è uguale alla prima immissione dobbiamo reimmetterla giusta.

du[modifica]

Per vedere quanto pesa una directory DIR

  du -h -c DIR

grep[modifica]

gnu regular expression parser

  grep -v "^;" php_excalibur.ini | grep -v "^$" | sort > php_excalibur.ini.2

Escape per Mac Textwrangler[modifica]

  \r ---> \{x0A}
  \n ---> \{x0B}

Come redirigere STDOUT/STDERR a NULL[modifica]

Q: I know in linux you would use that with a command to make any output by that command to be silent but I was just wondeing if anybody could explain the last part of this

  someprog > /dev/null 2>&1

It makes sense to me to use the > /dev/null so that the output goes to null and disappears, but what exactly does the 2>&1 do ? Thanks if anybody knows the answer.


A:

  • The first part, "> /dev/null" means send standard output to the 'bit bucket" or in other words, throw it away.
  • The second part, "2>&1" means "redirect standard error (2) to the same place as standard output (1.)

Eseguire ssh o scp senza dover digitare la password![modifica]

keywords: RSA (Rivest, Shamir, Adleman - algoritmo di crittografia a chiave asimmetrica), DSA (Digital Signature Algorithm)

Abstract[modifica]

Utile per far girare degli script che contengono ssh e/o scp che starebbero lì inchiodati ad aspettare la password. Si usa una feature interessante di SSH che consente l'autenticazione basata su RSA o DSA.

Istruzioni[modifica]

  1. nel proprio pc local, loggarsi col proprio utente (supponiamo mrossi):
  mrossi@local:~> ssh-keygen -t rsa

che produce il seguente trace:


  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/mrossi/.ssh/id_rsa):<invio x default>
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:
  Your identification has been saved in /home/mrossi/.ssh/id_rsa.
  Your public key has been saved in /home/mrossi/.ssh/id_rsa.pub.
  The key fingerprint is:
  2a:fa:4e:a5:1e:68:96:b3:b6:44:0c:f0:0b:17:9f:62 mrossi@local

Altri tipi di crittografia sono rsa1 (versione vecchia di rsa = rsa2) e dsa.

La generazione richiede l'inserimento (con conferma) di una passphrase (password lunga e con caratteri di punteggiatura). Questo se l'host remoto è particolarmente esposto ad attacchi.

Nota[modifica]

Se mettiamo la passphrase perdiamo la comodità di non dover digitare la password perché dovremo, al collegamento, digitare la passphrase. Il `man ssh-keygen' dice:

   (host keys must have an empty passphrase)

Così possiamo fare la connessione senza digitare la password.

ssh-keygen genera una coppia di chiavi

  • una chiave privata che scrive nel file /home/mrossi/.ssh/id_rsa; questa chiave deve avere permessi 600 e deve rimanere rigorosamente nel proprio PC
  • una chiave pubblica che scrive nel file /home/mrossi/.ssh/id_rsa.pub

Nota[modifica]

  • Se si è scelto -t rsa1, la chiave si chiamerà identity;
  • se si è scelto -t dsa, la chiave si chiamerà id_dsa.
  1. cambiare i permessi a .ssh/id_rsa.pub a 600 (ssh lo consiglia quando lo si lancia).
  2. l'host remoto deve avere una entry nel nostro .ssh/known_hosts. Se non c'è l'utente mrossi in remote, occorre crearlo.
  3. aggiungere il contentuto della chiave pubblica nel file .ssh/authorized_keys nell'host remoto con un comando di SCP (in questa fase DOVREMO digitare la password come al solito). Per fare ciò si può prima copiare il file:
    1. mrossi@local:~> scp .ssh/id_rsa.pub mrossi@remote:.ssh/id_rsa.pub
    2. ssh mrossi@remote
    3. mrossi@remote:~> cat .ssh/id_rsa.pub | tee -a .ssh/authorized_keys.

A questo punto abbiamo aggiunto la nostra chiave pubblica all'host remoto. La chiave pubblica .ssh/id_rsa.pub in remoto si può anche cancellare.

  1. A questo punto se da local ci colleghiamo con ssh o copiamo con scp, non ci verrà più richiesta la password.

Nei vari tentativi ho visto che:

  • occorre copiare la chiave pubblica in remoto e la chiave privata deve rimanere nel local. Qualsiasi copia in ordine diverso porterà a non far funzionare ssh con questo metodo.
  • se qualche operazione non viene fatta bene, ssh o scp ci chiede cmq la password
  • se abbiamo digitato una passphrase non vuota essa ci viene chiesta al posto della password.
  • se si sbaglia qualcosa si possono cancellare le password
  mrossi@local:~> rm .ssh/id*

e rigenerarle con

  mrossi@local:~> ssh-kygen -t rsa

man ssh e man ssh-keygen sono molto chiari.

Quale versione della distro ho?[modifica]

  marcob@jsbach:~/www$ cat /etc/issue
  Ubuntu 10.10 \n \l

Altro comando, con più dettagli[modifica]

  $ lsb_release -a
  No LSB modules are available.
  Distributor ID:	Ubuntu
  Description:	Ubuntu 10.10
  Release:	10.10
  Codename:	maverick

Informazioni sul SO, sull'hardware, sul processore[modifica]

  user@host:/usr/local/lib> uname -a
  Linux bach 2.6.13-15.16-default #1 Fri Jun 8 15:35:39 UTC 2007 i686 i686 i386 GNU/Linux
  user@host:/usr/local/lib> uname --help
  Uso: uname [OPZIONE]...

Stampa alcune informazioni sul sistema. Senza una OPZIONE è come fosse -s.

 -a, --all                stampa tutte le informazioni, nel seguente ordine:
 -s, --kernel-name        stampa il nome del kernel
 -n, --nodename           stampa l'hostname del nodo di rete
 -r, --kernel-release     stampa la release del kernel
 -v, --kernel-version     stampa la versione del kernel
 -m, --machine            stampa il nome dell'hardware della macchina
 -p, --processor          stampa il tipo di processore
 -i, --hardware-platform  stampa la piattaforma hardware
 -o, --operating-system   stampa il sistema operativo
     --help     display this help and exit
     --version  stampa le informazioni sulla versione ed esce

Vedere quali dipositivi di memorizzazione sono attaccati al PC e mount points[modifica]

  user@host:~> su
  Password:
  bach:/home/marcob # mount
  /dev/hda3 on / type reiserfs (rw,acl,user_xattr)
  proc on /proc type proc (rw)
  sysfs on /sys type sysfs (rw)
  tmpfs on /dev/shm type tmpfs (rw)
  devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
  /dev/hda1 on /windows/C type ntfs (ro,noexec,nosuid,nodev,gid=100,umask=0002,nls=utf8)
  usbfs on /proc/bus/usb type usbfs (rw)
  none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
  /dev/sda1 on /media/usbdisk type subfs (rw,nosuid,nodev,sync,fs=floppyfss,procuid,iocharset=iso8859-15)
  bach:/home/marcob #

Disassembler per x86[modifica]

  $ objdump -d <nomefile>

verifica con md5 dei pacchetti scaricati da Internet[modifica]

Supponiamo di scaricare il file "gimp-2.4.1.tar.bz2" e la sua firma "gimp-2.4.1.tar.bz2.md5" Possiamo verificare che il file sia integro con due comandi:

  user@host:~> md5sum gimp-2.4.1.tar.bz2
  51edbadd77235837535a6882ad63d8fb  gimp-2.4.1.tar.bz2
  user@host:~> cat gimp-2.4.1.tar.bz2.md5
  51edbadd77235837535a6882ad63d8fb  gimp-2.4.1.tar.bz2
  user@host:~>

e controllare a occhio che le stringhe corrispondano.

C'è un modo più semplice che fa la verifica automaticamente con un solo comando dando in pasto la firma a md5sum:

  user@host:~> md5sum --check gimp-2.4.1.tar.bz2.md5
  gimp-2.4.1.tar.bz2: OK

spesso si trova l'impronta md5 in chiaro, ad esempio in un sito vedo

  76fe4bfc45b53f01dbd9d349024a27a3 *xcache-3.1.0.tar.gz

Un modo comodo per vedere se il file che ho scaricato ha la stessa impronta dichiarata dal sito, è quello di usare semplicemente grep:

  $ md5sum xcache-3.1.0.tar.gz | grep 76fe4bfc45b53f01dbd9d349024a27a3
  76fe4bfc45b53f01dbd9d349024a27a3  xcache-3.1.0.tar.gz
  $

Se l'impronta calcolata e quella dichiarata differissero avremmo:

  $ md5sum xcache-3.1.0.tar.gz | grep 76fe4bfc45b53f01dbd9d349024a27a2
  $

Looping a command trough items[modifica]

Avevo un problema: ho una lista di file .ps da trasformare in .pdf. COME EVITARE DI fare a mano

  $ ps2pdf nomefile.ps

per tutti i 1000 file?

RISPOSTA:

  $ LISTA=`ls *.ps`
  $ for item in $LISTA; do ps2pdf "$item"; done

FINE :-)

Associazione tra signals e tasti della tastiera[modifica]

Ad esempio la combinazione di tasti CTRL+C invia al processo in foreground un segnale SIGINT (interrupt) (credo sia: sul processo nella finistra attiva). Qual è il tasto per lanciare un SIGQUIT (utile p.es. per visualizzare una statistica dei PING senza interromperne il conteggio e l'esecuzione) ? Questo è il comando:

  marcob@bach:~$ stty -a
  speed 38400 baud; rows 44; columns 179; line = 0;
  intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
  min = 1; time = 0;
  -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
  -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
  opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
  isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
  marcob@bach:~$

Trasformare files eps in jpeg[modifica]

1 FILE:

  gs -sDEVICE=jpeg -dJPEGQ=100 -dNOPAUSE -dBATCH -dSAFER -r300 -sOutputFile=areeargomenti.jpg areeargomenti.eps

N FILES:

  for item in $LIST; do gs -sDEVICE=jpeg -dJPEGQ=100 -dNOPAUSE -dBATCH -dSAFER -r300 -sOutputFile=$item.jpg $item; done

nslookup[modifica]

 marcob@bach:~/Marco/Ricerca/informatica/protcols/exim$ nslookup betaingegneria.it
 Server:	83.224.70.61
 Address:	83.224.70.61#53
 Non-authoritative answer:
 Name:	betaingegneria.it
 Address: 217.64.198.227

sendmail[modifica]

Questo esempio insegna ad usare TELNET per invocare il protocollo di posta smtp e spedire una email

 $ telnet www.example.com 25
 $ telnet localhost 25

Questo comando apre una connessione a www.example.com sulla porta 25 di TCP.

S:  220 www.example.com ESMTP Postfix
C:  HELO mydomain.com
S:  250 Hello mydomain.com, pleased to meet you
C:  MAIL FROM: <sender@mydomain.com>
S:  250 sender@mydomain.com ... Sender ok
C:  RCPT TO: <friend@example.com>
S:  250 friend@example.com ... Recipient Ok
C:  DATA
S:  354 End data with "." on a line by itself
C:  Subject: messaggio di prova
C:  From: sender@mydomain.com
C:  To: friend@example.com
C:
C:  Ciao,
C:  questa è una prova.
C:  .
S:  250 Ok: queued as 12345
C:  QUIT
S:  221 Bye

openssl[modifica]

Cryptography and SSL/TLS toolkit

come leggere le informazioni contenute in un certificato[modifica]

  $  openssl x509 -text -in certservicetest.pem
  Certificate:
      Data:
          Version: 3 (0x2)
          Serial Number: 1486497247298199714 (0x14a1195ee0ce20a2)
      Signature Algorithm: sha1WithRSAEncryption
          Issuer: C=IT, CN=certservicetest.sanita.finanze.it
          Validity
              Not Before: Apr 30 14:47:45 2013 GMT
              Not After : Apr 28 14:47:45 2023 GMT
          Subject: C=IT, CN=certservicetest.sanita.finanze.it
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  Public-Key: (1024 bit)
                  Modulus:
                      00:ad:d9:53:db:e7:e6:b3:df:cb:b9:dd:06:fe:8c:
                      a6:0f:1f:31:89:70:f9:8f:aa:b1:60:f3:2b:c2:10:
                      84:8d:59:f0:ad:51:34:96:73:6f:e3:ec:3c:93:9d:
                      fb:6a:c3:9b:bf:5f:dc:c5:3b:ae:d1:4e:2a:17:08:
                      93:ea:94:7e:fe:c5:d8:d6:3c:2c:c9:cf:02:bd:e9:
                      c0:1b:f6:8f:6f:38:20:99:53:e8:8f:72:1a:8c:41:
                      a2:fa:17:19:b5:25:57:79:19:a8:c1:b1:13:6a:3c:
                      9a:5e:37:14:d1:4f:67:0d:14:71:81:ae:90:dd:bb:
                      15:ec:d3:96:3a:0d:fa:ae:23
                  Exponent: 65537 (0x10001)
          X509v3 extensions:
              X509v3 Basic Constraints: 
                  CA:TRUE
              X509v3 Subject Key Identifier: 
                  86:C2:0F:98:D1:60:65:DA:C9:F5:C3:75:80:86:B9:21:27:79:C6:ED
              X509v3 Authority Key Identifier: 
                  keyid:86:C2:0F:98:D1:60:65:DA:C9:F5:C3:75:80:86:B9:21:27:79:C6:ED
                  DirName:/C=IT/CN=certservicetest.sanita.finanze.it
                  serial:14:A1:19:5E:E0:CE:20:A2
  
              X509v3 Key Usage: 
                  Digital Signature, Key Encipherment, Data Encipherment, Key Agreement, Certificate Sign
      Signature Algorithm: sha1WithRSAEncryption
           2f:7b:a4:49:df:bc:65:a7:b0:a5:c2:23:c4:b7:8f:d1:15:88:
           9c:55:4d:34:5b:c2:20:88:db:1a:a2:18:a0:80:60:75:16:f7:
           2b:0d:f3:79:75:f7:b6:1d:db:f2:4b:c0:bc:e0:5a:a4:11:2d:
           10:04:34:34:61:75:e2:10:fd:ce:15:5b:8f:14:9a:95:81:a0:
           9c:54:60:5d:a2:76:09:10:eb:5f:52:4b:5c:06:49:1c:35:24:
           74:d1:55:7a:b1:22:0e:0f:13:07:e1:8b:f1:30:46:8d:ca:59:
           c7:bc:82:25:a9:eb:f0:78:85:a9:4b:df:1a:40:17:73:8e:48:
           e5:0e
  -----BEGIN CERTIFICATE-----
  MIIClzCCAgCgAwIBAgIIFKEZXuDOIKIwDQYJKoZIhvcNAQEFBQAwOTELMAkGA1UE
  BhMCSVQxKjAoBgNVBAMTIWNlcnRzZXJ2aWNldGVzdC5zYW5pdGEuZmluYW56ZS5p
  dDAeFw0xMzA0MzAxNDQ3NDVaFw0yMzA0MjgxNDQ3NDVaMDkxCzAJBgNVBAYTAklU
  MSowKAYDVQQDEyFjZXJ0c2VydmljZXRlc3Quc2FuaXRhLmZpbmFuemUuaXQwgZ8w
  DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK3ZU9vn5rPfy7ndBv6Mpg8fMYlw+Y+q
  sWDzK8IQhI1Z8K1RNJZzb+PsPJOd+2rDm79f3MU7rtFOKhcIk+qUfv7F2NY8LMnP
  Ar3pwBv2j284IJlT6I9yGoxBovoXGbUlV3kZqMGxE2o8ml43FNFPZw0UcYGukN27
  FezTljoN+q4jAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUhsIP
  mNFgZdrJ9cN1gIa5ISd5xu0waAYDVR0jBGEwX4AUhsIPmNFgZdrJ9cN1gIa5ISd5
  xu2hPaQ7MDkxCzAJBgNVBAYTAklUMSowKAYDVQQDEyFjZXJ0c2VydmljZXRlc3Qu
  c2FuaXRhLmZpbmFuemUuaXSCCBShGV7gziCiMAsGA1UdDwQEAwICvDANBgkqhkiG
  9w0BAQUFAAOBgQAve6RJ37xlp7ClwiPEt4/RFYicVU00W8IgiNsaohiggGB1Fvcr
  DfN5dfe2HdvyS8C84FqkES0QBDQ0YXXiEP3OFVuPFJqVgaCcVGBdonYJEOtfUktc
  BkkcNSR00VV6sSIODxMH4YvxMEaNylnHvIIlqevweIWpS98aQBdzjkjlDg==
  -----END CERTIFICATE-----

Come si verifica un certificato?[modifica]

  $ openssl verify certservicetest.pem 
  certservicetest.pem: C = IT, CN = certservicetest.sanita.finanze.it
  error 18 at 0 depth lookup:self signed certificate
  OK

Come si esegue la cifratura di un file?[modifica]

Qui la cosa si fa complicata. Occorre approfondire i seguenti argomenti:

Algoritmi[modifica]

Cifrari[modifica]

Hash[modifica]

Compressione[modifica]

netstat[modifica]

netstat è un potentissimo strumento per l'analisi della rete e consente di vedere tutti i "fili" che passano per la macchina nel quale viene eseguito.

Nella sua forma più semplice il comando è

 netstat -a | less

il pipe | less serve solo per limitare e controllare le righe stampate perché generalmente i socket aperti riempiono molte pagine. -a dice a netstat di stampare le connessioni di tutte le interfacce (nel mio pc sono lo - localhost - e eth0 - l'interfaccia ethernet). Se accendo anche il wireless ho anche

Un possibile output è il seguente

 Connessioni internet attive (senza server)
 Proto Recv-Q Send-Q Indirizzo locale        Indirizzo esterno       Stato      
 tcp        0      0 jsbach:60570            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:34463            servizi.smartux.n:https ESTABLISHED
 tcp        0      0 jsbach:58200            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:60547            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:60525            netzope.sanita.p:tproxy ESTABLISHED
 tcp       15      0 jsbach:58237            172.18.13.7:ftp         CLOSE_WAIT 
 tcp        0      0 jsbach:60229            netzope.sanita.p:tproxy ESTABLISHED
 tcp        1      1 jsbach:49913            sjc-not8.sjc.dropbo:www LAST_ACK   
 tcp        0    540 jsbach:60517            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:32944            netzope.sanita.p:tproxy ESTABLISHED
 tcp        1      0 jsbach:43191            199.59.241.247:www      CLOSE_WAIT 
 tcp       15      0 jsbach:51733            asoulss02.sanita.pa:ftp CLOSE_WAIT 
 tcp        0      0 jsbach:60526            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:60549            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 localhost.localdo:mysql localhost.localdo:36960 ESTABLISHED
 tcp        1      0 jsbach:42650            38.102.136.138:www      CLOSE_WAIT 
 tcp        0      0 jsbach:60563            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:56247            servizi.smartux.n:imap2 ESTABLISHED
 tcp        0      0 jsbach:38693            servizi.smartux.n:imap2 ESTABLISHED
 tcp        0      0 jsbach:56439            158.195.251.230:https   ESTABLISHED
 tcp        1      1 jsbach:43648            199.59.241.247:www      LAST_ACK   
 tcp        0      0 jsbach:60655            netzope.sanita.p:tproxy ESTABLISHED
 tcp        1      0 jsbach:49932            sjc-not8.sjc.dropbo:www CLOSE_WAIT 
 tcp        1      0 jsbach:42820            38.102.136.138:www      CLOSE_WAIT 
 tcp        0      0 localhost.localdo:36960 localhost.localdo:mysql ESTABLISHED
 tcp        1      1 jsbach:49925            sjc-not8.sjc.dropbo:www LAST_ACK   
 tcp        0      0 jsbach:45681            jsbach:www              FIN_WAIT2

Per imparare come leggere il tabellone vediamo una riga per volta.

Ogni riga è una connessione aperta, o socket. Per ogni riga:

  • la prima colonna definisce con quale protocollo è stato aperto il socket; nell'esempio visualizzato il protocollo è TCP/IP
  • salto la seconda e la terza
  • la quarta è l'indirizzo di origine della connessione, costituito da un nome, o da un'inidirzzo IP, seguito dalla porta
  • la quinta è la destinazione della connessione, con lo stesso formato
  • la sesta colonna riporta lo stato della connessione.

Nota che nel presente esempio, le porte standard vengono risolte con il nome del servizio tradizionalmente assegnato a queste porte; ad esempio:

  • 158.195.251.230:https è lo stesso di 158.195.251.230:443
  • 199.59.241.247:www è equivalente a 199.59.241.247:80
  • 172.18.13.7:ftp è equivalente a 172.18.13.7:21

eccetera.

Per le righe che descrivono socket udp ho soltanto la dicitura ESTABLISHED in quanto UDP è un protocollo senza stato (l'origine della connessione spedisce un messaggio senza sapere se arriverà a destinazione). Ad esempio:

 udp        0      0 jsbach:42718            10.196.82.254:5351      ESTABLISHED

Seguono poi i file socket, che sono le comunicazioni UNIX tra processi che comunicano tra di loro scrivendo su un file del local filesystem:

 Socket in dominio UNIX attivi (senza server)
 Proto RefCnt Flags       Type       State         I-Node   Percorso
 unix  16     [ ]         DGRAM                    7948     /dev/log
 unix  2      [ ]         DGRAM                    9615     /var/lib/samba/private/smbd.tmp/messaging/msg.0.0.0
 unix  2      [ ]         DGRAM                    9622     /var/lib/samba/private/smbd.tmp/messaging/msg.0.1619.0
 unix  2      [ ]         DGRAM                    9624     /var/lib/samba/private/smbd.tmp/messaging/msg.0.1622.0
 unix  2      [ ]         DGRAM                    9678     /var/lib/samba/private/smbd.tmp/messaging/msg.0.1620.0
 unix  2      [ ]         DGRAM                    6197     @/org/kernel/udev/udevd
 unix  2      [ ]         DGRAM                    9671     /var/lib/samba/private/smbd.tmp/messaging/msg.0.1628.0
 unix  2      [ ]         DGRAM                    9676     /var/lib/samba/private/smbd.tmp/messaging/msg.0.1630.0
 unix  3      [ ]         STREAM     CONNECTED     697680   @/tmp/dbus-upeEptpVyH
 unix  3      [ ]         STREAM     CONNECTED     697679   
 unix  3      [ ]         STREAM     CONNECTED     697665   @/tmp/dbus-upeEptpVyH
 unix  3      [ ]         STREAM     CONNECTED     697664   
 unix  3      [ ]         STREAM     CONNECTED     697663   /tmp/orbit-marcob/linc-1eca-0-6e607940d8062
 unix  3      [ ]         STREAM     CONNECTED     697662

Con il comando netstat -ta posso vedere tutte e sole le connessioni tcp:

 Connessioni internet attive (server e stabiliti)
 Proto Recv-Q Send-Q Indirizzo locale        Indirizzo esterno       Stato      
 tcp        0      0 *:loc-srv               *:*                     LISTEN     
 tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     
 tcp        0      0 *:netbios-ssn           *:*                     LISTEN     
 tcp        0      0 *:www                   *:*                     LISTEN     
 tcp        0      0 *:51413                 *:*                     LISTEN     
 tcp        0      0 *:ipp                   *:*                     LISTEN     
 tcp        0      0 localhost.localdom:smtp *:*                     LISTEN     
 tcp        0      0 *:https                 *:*                     LISTEN     
 tcp        0      0 *:17500                 *:*                     LISTEN     
 tcp        0      0 *:microsoft-ds          *:*                     LISTEN     
 tcp        0      0 *:7264                  *:*                     LISTEN     
 tcp        0      0 *:1024                  *:*                     LISTEN     
 tcp        0      0 *:ldap                  *:*                     LISTEN     
 tcp        0      0 jsbach:34743            servizi.smartux.n:https TIME_WAIT  
 tcp        0      0 jsbach:58200            netzope.sanita.p:tproxy ESTABLISHED
 tcp        0      0 jsbach:60547            netzope.sanita.p:tproxy ESTABLISHED
 tcp       15      0 jsbach:58237            172.18.13.7:ftp         CLOSE_WAIT 

le connessioni in stato LISTEN sono le connessioni in cui la mia interfaccia di rete eth0 è in ascolto, in sostanza sono tutte le mie porte aperte verso connessioni TCP/IP; il processo in TIME_WAIT è quello in cui il mio browser è in attesa sulla porta 443 (https) che è la mia webmail. Le due connessioni verso netzope sono quelle che a quel server si collegano tramite un mio proxy inverso locale (infatto sono marcate come tproxy) e sono connessioni attive; l'ultima riga invece è una connessione ad un server FTP che è andata in timeout (CLOSE_WAIT).

Tutti i possibili stati sono descritti in RFC-793. Questa RFC è stata scritta dal mitico Jon Postel (il papà di Internet), che con la consueta chiarezza spiega il funzionamento degli stati:

 A connection progresses through a series of states during its
 lifetime.  The states are:  LISTEN, SYN-SENT, SYN-RECEIVED,
 ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK,
 TIME-WAIT, and the fictional state CLOSED.  CLOSED is fictional
 because it represents the state when there is no TCB, and therefore,
 no connection.

Dunque ogni connessione ha una vita che si svolge attraverso gli stati che vanno in ordine da LISTEN a CLOSED.

Come vedere quale porta è utilizzata da un applicativo[modifica]

  netstat -anp | grep <nomeapplicazione>

Ad esempio

  netstat -anp | grep pidgin
  (Non tutti i processi potrebbero essere identificati, le informazioni sui processi non propri
   non saranno mostrate, per visualizzarle tutte bisogna avere privilegi di root.)
  tcp        0      0 10.196.82.233:28591     66.196.120.104:5050     ESTABLISHED 3533/pidgin     
  unix  3      [ ]         STREAM     CONNESSO      24000    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      23490    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      23492    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      24008    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      24246    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      21242    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      21096    3533/pidgin         
  unix  3      [ ]         STREAM     CONNESSO      23491    3533/pidgin

Come aggiungere e togliere regole di firewall[modifica]

Mi è capitato di vedere un traffico abnorme di richieste di file dalla mia directory DOCROOT di Apache. Provenivano da un determinato IP:

  ...
  [Tue May 30 15:42:27.491322 2017] [:error] [pid 24945] [client 10.207.0.24:55543] script '/var/www/html/demo/assets/bootstrap/category.php' not found or unable to stat
  [Tue May 30 15:42:27.498035 2017] [:error] [pid 24945] [client 10.207.0.24:55543] script '/var/www/html/login/vendor/symfony/category.php' not found or unable to stat
  [Tue May 30 15:42:27.507412 2017] [:error] [pid 24945] [client 10.207.0.24:55543] script '/var/www/html/login/vendor/phpspec/category.php' not found or unable to stat
  ...

Ho pensato inizialmente di bloccarlo per poi indagare:

  $ sudo iptables -A INPUT -s 10.207.0.24 -j DROP   <-- ADD

per vedere tutte le regole che sono applicate dal firewall:

  $ sudo iptables -S
  -P INPUT ACCEPT
  -P FORWARD ACCEPT
  -P OUTPUT ACCEPT
  -A INPUT -s 10.207.0.24/32 -j DROP <-- questa è quella appena aggiunta

Oppure

   $ sudo iptables -L
   Chain INPUT (policy ACCEPT)
   target     prot opt source               destination
   DROP       all  --  netvas01.it.sanita.padova.it  anywhere  <-- questa è quella appena aggiunta
   
   Chain FORWARD (policy ACCEPT)
   target     prot opt source               destination
   
   Chain OUTPUT (policy ACCEPT)
   target     prot opt source

Poi mi è stato detto che era un servizio antivirus:

  $ nslookup 10.207.0.24
  Server:		127.0.1.1
  Address:	127.0.1.1#53
  
  24.0.207.10.in-addr.arpa	name = netvas01.it.mydomain.com.

Ho rimosso la regola di firewall:

  $ sudo iptables -D INPUT -s 10.207.0.24/32 -j DROP   <-- DELETE

Ricontrollo:

  $ sudo iptables -S
  -P INPUT ACCEPT
  -P FORWARD ACCEPT
  -P OUTPUT ACCEPT

Che versione di Ubuntu ho a bordo?[modifica]

 marcob@jsbach:~$ lsb_release -a
 No LSB modules are available.
 Distributor ID:	Ubuntu
 Description:	Ubuntu 10.10
 Release:	10.10
 Codename:	maverick
 marcob@jsbach:~$

Come aggiungere un repository[modifica]

APT sincronizza il sw a bordo di Ubuntu con le release aggiornate che si trovano nei repository ufficiali. Io, ad esempio, volevo aggiornare all'ultima versione Firefox che nella mia versione di Ubuntu (10.10) era ferma alla 3.5.

Attenzione a non trovarsi dietro ad un firewall per fare queste operazioni!

 marcob@jsbach:~$ sudo add-apt-repository ppa:ubuntu-mozilla-daily/ppa
 [sudo] password for marcob: 
 Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg 
   --primary-keyring/etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv B34505EA326FEAEA07E3618DEF4186FE247510BE
 gpg: richiesta della chiave 247510BE dal server hkp keyserver.ubuntu.com
 gpg: chiave 247510BE: "Launchpad PPA for Ubuntu Mozilla Daily Build Team" non cambiata
 gpg: Numero totale esaminato: 1
 gpg:              non modificate: 1
 marcob@jsbach:~$

Nel mio caso l'avevo già aggiunta... ;-)

Ora si può effettuare la sincronizzazione:

 $ sudo apt-get update

Come aggiungere un lanciatore alla scrivania (launcher al desktop)[modifica]

 $ gnome-desktop-item-edit --create-new $HOME/Scrivania

Si apre il pannellino del lanciatore, si scrive il path dell'applicazione e si mette una descrizione.

Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

Alla fine premere OK e compare un nuovo lanciatore sul Desktop.

gnome-desktop-item-edit è disponibile solo se si è installato precedentemente gnome-panel

 $ sudo apt-get install gnome-panel

Upgrade di Thunderbird[modifica]

Questo non mi è riuscito di fare l'upgrade come con mozzila (attraverso i PPA). Ho trovato questo chiaro howto ed ha funzionato tutto. Ora però ho due versioni di Thunderbird vive non una sola...

Lanciare Nautilus come root[modifica]

Di solito lancio nautilus dalla docklet o dal menu proincipale, per in quel modo accedo alle cartelle come utente marcob. se devo fare delle operazioni conme superuser devo lavorare con la shell. Come si fa lanciare Nautilus da root?

  marcob@jsbach:~$ gksudo nautilus

Parte Nautilus su una finestra posizionata su /root

base64[modifica]

Il comando base64 codifica/decodifica una stringa in/da codifica base64.

Esempio: decodificare la stringa QWxhZGRpbjpvcGVuIHNlc2FtZQ==

 $ base64 -d -<INVIO>
 QWxhZGRpbjpvcGVuIHNlc2FtZQ==<INVIO><CTRL-D>
 Aladdin:open sesame$

Se si vuole utilizzare da Java, il package di riferimento è su Apache:

 org.apache.commons.codec.binary.Base64

Attenzione! non dare <INVIO>![modifica]

Apprendo oggi 25/10/2012 che se do invio, anche il carattere di invio verrà codificato con il resto della stringa!! Quindi fare così

 $ base64 -<INVIO>
 W5acsor<CTRL-D><CTRL-D>
 W5acsorVzVhY3Nvcg==
 $

Processi defunti[modifica]

Oggi ho il problema che la macchina rallenta. Guardo i processi e vedo un processo defunct:

 $ ps aux | grep defunct
   marcob    2103  0.8  0.0      0     0 ?        Zl   12:05   1:35 [nautilus] <defunct>

Google mi insegna che i processi defunct possono essere greedy.

"Lo ammazzo", penso. Mica così facile.

 $ kill -9 2103

ma il processo è ancora in piedi.

Google mi insegna che se c'è un genitore del processo può essere che non riesco ad eliminare il figlio. Ma chi è il padre di 2103?

Cerco il genitore, con l'opzione -def

 $ ps -def | grep 2103
   marcob    2103  1929  0 12:05 ?        00:01:35 [nautilus] <defunct>

ecco cos'era, il programmino della situazione meteo

 $ kill -9 1929

Così è sparito anche il defunct, e il computer tira un sospiro di sollievo.

Finale diverso: non è un programmino qualsiasi ma un processo da cui dipende in questo momento mezza macchina (tipo init). In questo caso riavvio.

Abilitare il compositing e riavviare Docky[modifica]

Ogni tanto Docky sballa il monitor e compare una colonna nera a sinistra. Compare anche un messaggio: di abilitare il compositing e riavviare Docky. Ho trovato questi due help che fanno al stessa cosa

1. (senza usare Gnome): da linea di comando:

  gconftool-2 -s --type bool /apps/metacity/general/compositing_manager false
  gconftool-2 -s --type bool /apps/metacity/general/compositing_manager true

questo risolve il problema. Oppure

2. (usando Gnome): Sistema -> Preferenze -> Aspetto Poi nella tab "Effetti Visivi" scegli "normale" o "extra". A questo punto il compositing è attivo.

Montare una partizione al boot[modifica]

 $ sudo vi /etc/fstab
   # Partizione root vecchio 10.04
   UUID=04f61a26-657b-446c-aa9c-225ee0e204df /disk1          ext4    errors=remount-ro 0       1

Ho aggiunto questa linea qui, guardo se funzia. http://ubuntuz.wordpress.com/2007/05/29/113/

Hardware[modifica]

Video: nVidia[modifica]

You do not appear to be using the NVIDIA X driver. Please edit your X configuration file (just run `nvidia-xconfig` as root), and restart the X server.

http://ubuntuforums.org/showthread.php?t=2063044&page=2

Messaggio del kernel[modifica]

 Jun  1 11:08:23 jsbach kernel: [   29.463006] NVRM: The NVIDIA probe routine was not called for 1 device(s).
 Jun  1 11:08:23 jsbach kernel: [   29.463009] NVRM: This can occur when a driver such as nouveau, rivafb,
 Jun  1 11:08:23 jsbach kernel: [   29.463010] NVRM: nvidiafb, or rivatv was loaded and obtained ownership of
 Jun  1 11:08:23 jsbach kernel: [   29.463011] NVRM: the NVIDIA device(s).
 Jun  1 11:08:23 jsbach kernel: [   29.463013] NVRM: Try unloading the conflicting kernel module (and/or
 Jun  1 11:08:23 jsbach kernel: [   29.463014] NVRM: reconfigure your kernel without the conflicting
 Jun  1 11:08:23 jsbach kernel: [   29.463014] NVRM: driver(s)), then try loading the NVIDIA kernel module
 Jun  1 11:08:23 jsbach kernel: [   29.463015] NVRM: again.
 Jun  1 11:08:23 jsbach kernel: [   29.463017] NVRM: No NVIDIA graphics adapter probed!

Restart server X[modifica]

 sudo mv .Xauthority.Xauthority.bak
 sudo restart lightdm

Impossibile ottenere informazioni sullo schermo[modifica]

Dal pannello di controllo, cliccando su monitor non appare nessun controlllo ma solo questa laconica scritta.

Sembra che questa versione di pannello di controllo sia buggy, qui suggeriscono una specie di downgrade:

If you do a

  $ ps x|grep control-center command 

in a terminal window, you may expect gnome-control-center as result. Close this control center window and instead type

  $ unity-control-center 

in a terminal window.

This control center will show your screen information. Pin it in the launcher for future use and possibly pin out the former one.

In questa versione i comandi di controllo del monitor (risoluzione, dimensione del launcher, etc) compaiono normalmente

Webcam[modifica]

Come accendere ed usare la webcam? Si può usare cheese. Se non lo si ha:

  $ sudo apt-get install cheese

e poi

  $ cheese &


Audio[modifica]

Attivo la scheda audio[modifica]

 $ sudo modprobe snd-hda-intel      
 [sudo] password di marcob: 

Regolo volumi e sensibilità per uscite / ingressi interfaccia testo[modifica]

 marcob@jsbach:~$ sudo alsamixer    
 [sudo] password di marcob:

Alsamixer.png

Schede audio installate[modifica]

 marcob@jsbach:~$ cat /proc/asound/cards
  0 [PCH            ]: HDA-Intel - HDA Intel PCH
                       HDA Intel PCH at 0xc1320000 irq 129

Dispositivi audio[modifica]

 marcob@jsbach:~$ lspci | grep Audio
 00:1f.3 Audio device: Intel Corporation Device 9d70 (rev 21)

Regolo volumi e sensibilità per uscite / ingressi interfaccia grafica[modifica]

 marcob@jsbach:~$ pavucontrol
Errore nella creazione della miniatura: Impossibile salvare la miniatura nella destinazione

WiFi[modifica]

Avviare il WiFi[modifica]

  $ sudo ifconfig eth1 up

Scansione dei trasmettitori WiFi[modifica]

  $ sudo iwlist eth1 scanning
  eth1      Scan completed :
         Cell 01 - Address: 00:0C:F6:ED:5C:60
                   ESSID:"SitecomED5C60"
                   Mode:Managed
                   Frequency:2.452 GHz (Channel 9)
                   Quality:4/5  Signal level:-61 dBm  Noise level:-98 dBm
                   IE: IEEE 802.11i/WPA2 Version 1
                       Group Cipher : CCMP
                       Pairwise Ciphers (1) : CCMP
                       Authentication Suites (1) : PSK
                   IE: Unknown:    DDA70050F204104A0001101044000102103B000103104700102880288028801880A880000CF6ED5C601021001852616C696E6B20546563686E6F6C6F67792C20436F72702E1023001C52616C696E6B20576972656C6573732041636365737320506F696E74102400065254323836301042000831323334353637381054000800060050F20400011011000952616C696E6B41505310080002210C103C0001011049000600372A000120
                   Encryption key:on
                   Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                             18 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 12 Mb/s
                             24 Mb/s; 48 Mb/s

Stato del wifi[modifica]

   $ cat /var/lib/NetworkManager/NetworkManager.state 
   [main]
   NetworkingEnabled=true
   WirelessEnabled=false
   WWANEnabled=true
   WimaxEnabled=true
   marcob@jsbach:~$ sudo lshw -C network
   *-network               
      description: Wireless interface
      product: BCM4313 802.11b/g/n Wireless LAN Controller
      vendor: Broadcom Corporation
      physical id: 0
      bus info: pci@0000:12:00.0
      logical name: eth1
      version: 01
      serial: c0:cb:38:7f:86:8c
      width: 64 bits
      clock: 33MHz
      capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
      configuration: broadcast=yes driver=wl0 driverversion=5.100.82.38 latency=0 multicast=yes wireless=IEEE 802.11
      resources: irq:17 memory:fb400000-fb403fff
   $ sudo rfkill list all
   0: dell-wifi: Wireless LAN
       Soft blocked: yes     <--- bloccata!
       Hard blocked: yes     <--- bloccata!
   1: brcmwl-0: Wireless LAN
       Soft blocked: no
       Hard blocked: no
   4: hci0: Bluetooth
       Soft blocked: no
       Hard blocked: no
   marcob@jsbach:~$ sudo rfkill unblock 0     <--- la sblocco
   marcob@jsbach:~$ sudo rfkill list all
   0: dell-wifi: Wireless LAN
       Soft blocked: no
       Hard blocked: no
   1: brcmwl-0: Wireless LAN
       Soft blocked: no
       Hard blocked: no
   4: hci0: Bluetooth
       Soft blocked: no
       Hard blocked: no

dopo aver sbloccato il wifi:

  marcob@jsbach:~$ sudo lshw -C network
  *-network               
      description: Wireless interface
      product: BCM4313 802.11b/g/n Wireless LAN Controller
      vendor: Broadcom Corporation
      physical id: 0
      bus info: pci@0000:12:00.0
      logical name: eth1
      version: 01
      serial: c0:cb:38:7f:86:8c
      width: 64 bits
      clock: 33MHz
      capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
      configuration: broadcast=yes driver=wl0 driverversion=5.100.82.38 latency=0 multicast=yes wireless=IEEE 802.11
      resources: irq:17 memory:fb400000-fb403fff


   $ sudo /etc/init.d/network-manager restart
   Rather than invoking init scripts through /etc/init.d, use the service(8)
   utility, e.g. service network-manager restart
   
   Since the script you are attempting to invoke has been converted to an
   Upstart job, you may also use the stop(8) and then start(8) utilities,
   e.g. stop network-manager ; start network-manager. The restart(8) utility is also available.
   network-manager stop/waiting
   network-manager start/running, process 3330
   $ sudo iwconfig eth1 essid SitecomED5C60 key s:xJBsu6Jr
   Error for wireless request "Set Encode" (8B2A) :
   SET failed on device eth1 ; Invalid argument.

Tasto destro sull'icona Network in alto, e qui si era sbloccata la voce "Abilita rete senza fili": abilitarla; poi cercare "Rete" con la Dash, aprire l'applicazione "Rete", cliccare su wireless, cliccare sau opzioni e salvare, solo in quel momento compare l'avviso che la rete è collegata...

Configurazione Modem Router[modifica]

http://192.168.0.1 admin/*******

Modifico le impostazione del router

  • LAN settings / DHCP Address = 192.168.1.1
  • DHCP Settings / Start IP = 192.168.1.100

Sensori a bordo[modifica]

È caldo (è il primo luglio) e ho deciso di controllare meglio la temperatura dei dispositivi a bordo del mio CPU. Esiste un programmino che si chiama psensor che grafica le temperature rilevate da vari sensori all'interno della macchina.

 sudo apt-get install psensor

Si presenta subito il problema di capire cosa questi sensori rilevino, cioè la temperatura di cosa?

Installo anche un altro programma che si chiama sensors, più basico.

 sudo apt-get install lm-sensors

Poi eseguo la rilevazione dei sensori:

 sudo sensors-detect

Riporto l'output in sintesi, una volta fatto girare:

  # sensors-detect revision 5984 (2011-07-10 21:22:53 +0200)
  # System: Dell Inc. Vostro 3700 (laptop)
  # Board: Dell Inc. 07VWR8
  
  This program will help you determine which kernel modules you need
  to load to use lm_sensors most effectively. It is generally safe
  and recommended to accept the default answers to all questions,
  unless you know what you're doing.
  
  Some south bridges, CPUs or memory controllers contain embedded sensors.
  Do you want to scan for them? This is totally safe. (YES/no): YES
  ...
  Intel digital thermal sensor...                             Success!
   (driver `coretemp')
  ...
  Some Super I/O chips contain embedded sensors. We have to write to
  standard I/O ports to probe them. This is usually safe.
  Do you want to scan for Super I/O sensors? (YES/no): YES
  ...
  Trying family `National Semiconductor/ITE'...               Yes
  Found unknown chip with ID 0xfc11
  
  Some hardware monitoring chips are accessible through the ISA I/O ports.
  We have to write to arbitrary I/O ports to probe them. This is usually
  safe though. Yes, you do have ISA I/O ports even if you do not have any
  ISA slots! Do you want to scan the ISA I/O ports? (YES/no): YES

Questo scan non da risultati

  Lastly, we can probe the I2C/SMBus adapters for connected hardware
  monitoring devices. This is the most risky part, and while it works
  reasonably well on most systems, it has been reported to cause trouble
  on some systems.
  Do you want to probe the I2C/SMBus adapters now? (YES/no): YES
  Using driver `i2c-i801' for device 0000:00:1f.3: Intel 3400/5 Series (PCH)
  Module i2c-i801 loaded successfully.
  Module i2c-dev loaded successfully.
  
  Next adapter: nouveau-0000:01:00.0-11 (i2c-0)
  Do you want to scan it? (YES/no/selectively):

questo non da' output fino a i2c-8 in cui vengono visualizzate migliaia di righe del tipo:

  ...
  Probing for `Texas Instruments TMP421'...                   No
  Probing for `Texas Instruments TMP422'...                   No
  Probing for `Maxim MAX6633/MAX6634/MAX6635'...              No
  Probing for `NXP/Philips SA56004'...                        No
  Client found at address 0x77
  Probing for `Asus Mozart-2'...                              No
  ...

tutte con risposta No

  Next adapter: nouveau-0000:01:00.0-11 (i2c-9)
  Do you want to scan it? (YES/no/selectively): 

qui si ripete lo schema precedente e passo avanti

  Next adapter: i915 gmbus panel (i2c-14)
  Probing for `EDID EEPROM'...                                Yes
     (confidence 8, not a hardware monitoring chip)
  Now follows a summary of the probes I have just done.
  Just press ENTER to continue: 
  
  Driver `coretemp':
    * Chip `Intel digital thermal sensor' (confidence: 9)
  
  To load everything that is needed, add this to /etc/modules:
  #----cut here----
  # Chip drivers
  coretemp
  #----cut here----
  If you have some drivers built into your kernel, the list above will
  contain too many modules. Skip the appropriate ones!
  
  Do you want to add these lines automatically to /etc/modules? (yes/NO)yes
  Successful!
  
  Monitoring programs won't work until the needed modules are
  loaded. You may want to run 'service module-init-tools start'
  to load them.

Aiuto!!! La CPU bolle![modifica]

Se vi siete trovati come me ad iniziare l'estate con il PC che scotta (ma solo se avete un computer della DELL), vi consiglio queste utilities:

  • i8kmon
  • i8kctl

che vi serve per monitorare e controllare i parametri per il raffrescamento. In particolare il comando

 $ i8kctl 
 1.0 A09 HK2GZM1 58 -1 0 -1 0 -1 -1

vi ritorna lo stato del sistema:

  • 1.0 : i8k format version
  • A09 : BIOS version
  • HK2GZM1 : machine id (Dell serial number)
  • 58 : cpu temperature (Core 0 nel mio caso)
  • -1 : left fan status (-1, 0 ,1 ,2)
  • 0  : right fan status (-1, 0 ,1 ,2)
  • -1 : left fan speed
  • 0  : right fan speed
  • -1 : ac power status
  • -1 : fn buttons status

Con i8kmon invece avete la possibilità di vedere ulteriori dettagli in tepo reale

   $ i8kmon 
   reading system config file
   i8kmon v1.30 11/16/2013 - Copyright (C) 2013 Vitor Augusto <vitorafsr@gmail.com>
   config(0)          = {-1 0} -1 40 -1 40
   config(1)          = {-1 1} 30 60 30 60
   config(2)          = {-1 2} 53 128 53 128
   config(3)          = {2 2} 70 128 75 128
   config(acpi)       = acpi
   config(auto)       = 1
   config(daemon)     = 0
   config(geometry)   = 
   config(i8kfan)     = /usr/bin/i8kfan
   config(min_speed)  = 2000
   config(sysconfig)  = /etc/i8kmon.conf
   config(t_high)     = 80
   config(timeout)    = 20
   config(unit)       = C
   config(use_conf)   = 1
   config(userconfig) = ~/.i8kmon
   config(verbose)    = 1
   status(ac)         = 0
   status(acpi_timer) = 0
   status(left)       = 
   status(leftspeed)  = 0 -1 -1 -1
   status(lspeed)     = 0
   status(lstate)     = 0
   status(lstuck)     = 0
   status(nfans)      = 2
   status(right)      = 
   status(rightspeed) = 0 91200 106800 109200
   status(rspeed)     = 0
   status(rstate)     = 2
   status(rstuck)     = 0
   status(state)      = 0
   status(t_high)     = 0
   status(t_low)      = 0
   status(temp)       = 0
   status(timer)      = 
   status(ui)         = 0
   1432042584 acpi: Battery 0: Unknown, 100%
   temp, left, right, ac state: 70 -1 2 0
   temp, left, right, ac state: 73 -1 2 0
   # (73>=40), state=1, low=30, high=60
   # (73>=60), state=2, low=53, high=128
   temp, left, right, ac state: 70 -1 0 0
   # exec /usr/bin/i8kfan {} 2
   ...

ed una piccola finestra con il pulsante di controllo delle ventole e il display temperatura.

Messaggi periodici su syslog[modifica]

Assisto inerme a questa sequenza misteriosa: è un problema? è normale? è eccezionale?

  Dec 30 11:24:34 jsbach wpa_supplicant[738]: wlan0: CTRL-EVENT-SCAN-STARTED 
  Dec 30 11:24:40 jsbach wpa_supplicant[738]: wlan0: WPA: Group rekeying completed with 00:0c:f6:ed:5c:60 [GTK=CCMP]
  Dec 30 11:26:29 jsbach wpa_supplicant[738]: message repeated 10 times: [ wlan0: WPA: Group rekeying completed with 00:0c:f6:ed:5c:60 [GTK=CCMP]]
  Dec 30 11:26:34 jsbach wpa_supplicant[738]: wlan0: CTRL-EVENT-SCAN-STARTED 
  Dec 30 11:26:40 jsbach wpa_supplicant[738]: wlan0: WPA: Group rekeying completed with 00:0c:f6:ed:5c:60 [GTK=CCMP]
  Dec 30 11:28:31 jsbach wpa_supplicant[738]: message repeated 10 times: [ wlan0: WPA: Group rekeying completed with 00:0c:f6:ed:5c:60 [GTK=CCMP]]
  Dec 30 11:28:34 jsbach wpa_supplicant[738]: wlan0: CTRL-EVENT-SCAN-STARTED 
  Dec 30 11:28:42 jsbach wpa_supplicant[738]: wlan0: WPA: Group rekeying completed with 00:0c:f6:ed:5c:60 [GTK=CCMP]
  Dec 30 11:30:31 jsbach wpa_supplicant[738]: message repeated 10 times: [ wlan0: WPA: Group rekeying completed with 00:0c:f6:ed:5c:60 [GTK=CCMP]]

Risposta: è normale.

Il messaggio Group rekeying è relativo alla crittografia WPA della rete wireless di casa. Secondo lo standard WPA il router chiede periodicamente a tutti i dispositivi connessi di concordare una nuova chiave interna di cifratura, da cui il messaggio che si vede. Se si vuole cambiare l'intrervallo (in questo caso ogni due minuti) bisogna dare un'occhiata alla configurazione del router, ci dovrebbe essere un parametro appostito (tipo: se la condivisione della nuova chiave avviene anche ogni 10 minuti, non muore nessuno).

Accesso remoto senza login[modifica]

1) nel server LOCALE generare una chiave RSA (non digito alcuna passphrase)

  marcob@jsbach:~$ ssh-keygen -t rsa
  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/marcob/.ssh/id_rsa): 
  Enter passphrase (empty for no passphrase): 
  Enter same passphrase again: 
  Your identification has been saved in /home/marcob/.ssh/id_rsa.
  Your public key has been saved in /home/marcob/.ssh/id_rsa.pub.
  The key fingerprint is:
  c0:1e:47:fa:bb:a4:04:f8:0f:40:01:85:8b:39:0f:d6 marcob@jsbach
  The key's randomart image is:
  +--[ RSA 2048]----+
  |.+o     .        |
  |.  . . o         |
  |.oo   = .        |
  |*o E . =         |
  |.+o . . S        |
  |  .o .   .       |
  |    o . o        |
  |     + o .       |
  |      o .        |
  +-----------------+

2) nel server REMOTO (con una sessione di login normale) creo la directory /home/webportal/.ssh (se c'è già, salta al passo 4)

  -bash-3.2$ mkdir -b /home/webportal/.ssh

3) del server REMOTO creo il /home/webportal/.ssh/authorized_keysfile (se c'è già, salta al passo 4)

  -bash-3.2$ touch /home/webportal/.ssh/authorized_keys

4) accodo a questo file la chiave appena generata:

  marcob@jsbach:~$ cat .ssh/id_rsa.pub | ssh webportal@netwebportal01.myorg.it 'cat >> /home/webportal/.ssh/authorized_keys'
  webportal@netwebportal01.myorg.it's password: 
  marcob@jsbach:~$

Dal prossimo ssh non si dovrà più ridigitare la password:

Nota bene[modifica]

Per collegarsi a più server dallo STESSO pc, non occorre eseguire il passo 1), bastano i punti dal 2) al 4)

Zeitgeist[modifica]

Zeitgeist è una utility di indicizzazione che aiuta a cercare file nel disco, sincronizzazioni varie. Non lo uso e mi ciuccia molta memoria. Seguendo questa guida, eseguo questi comandi per spegnerlo:

   marcob@jsbach:~$ ps -ef |grep zeit <-- c'è zeitgeis-fs up & running?
   marcob    2879  2526  0 14:56 ?        00:00:00 zeitgeist-datahub
   marcob    2895     1  0 14:56 ?        00:00:01 /usr/bin/zeitgeist-daemon
   marcob    2957     1  0 14:56 ?        00:00:01 /usr/lib/zeitgeist/zeitgeist-fts
   marcob    3758  3698  0 15:08 pts/2    00:00:00 grep --color=auto zeit
   marcob@jsbach:~$ cd .local/share/zeitgeist/
   marcob@jsbach:~/.local/share/zeitgeist$ ll
   totale 59280
   drwx------  3 marcob marcob     4096 mag 15  2012 ./
   drwxr-xr-x 23 marcob marcob     4096 apr 11 13:55 ../
   -rw-------  1 marcob marcob 33301504 apr 11 12:42 activity.sqlite
   -rw-------  1 marcob marcob    32768 apr 11 15:08 activity.sqlite-shm
   -rw-------  1 marcob marcob 27341304 apr 11 15:08 activity.sqlite-wal
   drwxr-xr-x  2 marcob marcob     4096 apr 11 15:08 fts.index/
   marcob@jsbach:~/.local/share/zeitgeist$  chmod -rw ~/.local/share/zeitgeist/activity.sqlite <-- cambia i diritti di scrittura sul db
   marcob@jsbach:~/.local/share/zeitgeist$  zeitgeist-daemon --replace <-- arresta zeitgeist, in pratica 
   [13:12:11.404192 WARNING] Could not access the database file.
   Please check the permissions of file /home/marcob/.local/share/zeitgeist/activity.sqlite.
   marcob@jsbach:~/.local/share/zeitgeist$ ps -ef |grep zeit
   marcob    3816  3698  0 15:12 pts/2    00:00:00 grep --color=auto zeit
   marcob@jsbach:~/.local/share/zeitgeist$

Mount dei volumi logici dell'hard disk[modifica]

Tutte le mattina mi tocca montare a mano una partizione logica del disco, altrimenti Apache non vede wwwroot. Quando lo faccio, il syslog riporta:

  Apr 15 08:53:59 jsbach kernel: [  219.569876] EXT4-fs (sda2): warning: maximal mount count reached, running e2fsck is recommended
  Apr 15 08:53:59 jsbach kernel: [  219.574916] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)

I mount point, dopo che ho montato entrambe le partizioni sono queste

  marcob@jsbach:~$ mount
  ...
  /dev/sda2 on /media/04f61a26-657b-446c-aa9c-225ee0e204df type ext4 (rw,nosuid,nodev,uhelper=udisks)
  /dev/sda5 on /media/84d31ac2-2f02-4502-b638-e9c5ac334f38 type ext4 (rw,nosuid,nodev,uhelper=udisks)

Fonte e altra fonte.

Seguo questo howto:, una volta montate a mano tutte le partizioni (cliccando sull'icona della partizione su Nautilus)

  marcob@jsbach:~$ sudo cp /etc/fstab /etc/fstab.old         #importante: backup della tabella del filesystem!
  marcob@jsbach:~$ sudo blkid
  /dev/sda1: LABEL="RECOVERY" UUID="B24AD2DB4AD29B83" TYPE="ntfs" 
  /dev/sda2: UUID="04f61a26-657b-446c-aa9c-225ee0e204df" TYPE="ext4" 
  /dev/sda5: UUID="84d31ac2-2f02-4502-b638-e9c5ac334f38" TYPE="ext4" 
  /dev/sda6: UUID="a5564f2c-9886-43e8-a7f0-881ed70308c1" TYPE="swap" 
  /dev/sda7: UUID="efad6f51-8315-4b9b-af66-5fa9c8934e79" TYPE="ext4"

Per le variabili occorre fare attenzione, partizioni da montare sono /dev/sda2 e /dev/sda5, quindi:

  # /dev/sda2
  <uuid>=04f61a26-657b-446c-aa9c-225ee0e204df
  <pathtomount>=/home/marcob/data1/
  <file system>=ext4
  <userid>=1000
  <groupid>=1000
  
  # /dev/sda5
  <uuid>=84d31ac2-2f02-4502-b638-e9c5ac334f38
  <pathtomount>=/home/marcob/data2/
  <file system>=ext4
  <userid>=1000
  <groupid>=1000

Quindi il nuovo /etc/fstab si presenta così:

  # /etc/fstab: static file system information.
  #
  # Use 'blkid' to print the universally unique identifier for a
  # device; this may be used with UUID= as a more robust way to name devices
  # that works even if disks are added and removed. See fstab(5).
  #
  # <file system> <mount point>   <type>  <options>       <dump>  <pass>
  proc            /proc           proc    nodev,noexec,nosuid 0       0
  # / was on /dev/sda7 during installation
  UUID=efad6f51-8315-4b9b-af66-5fa9c8934e79 /               ext4    errors=remount-ro 0       1
  # swap was on /dev/sda6 during installation
  UUID=a5564f2c-9886-43e8-a7f0-881ed70308c1 none            swap    sw              0       0
  # Partizione root vecchio 10.04
  #UUID=04f61a26-657b-446c-aa9c-225ee0e204df /disk1          ext4    errors=remount-ro 0       1
  # Partizione / vecchio 10.04
  UUID=04f61a26-657b-446c-aa9c-225ee0e204df /home/marcob/data1/ ext4 uid=1000,gid=1000,umask=0022,sync,auto,rw 0 0
  # Partizione /home/marcob/ vecchio 10.04
  UUID=84d31ac2-2f02-4502-b638-e9c5ac334f38 /home/marcob/data2/ ext4 uid=1000,gid=1000,umask=0022,sync,auto,rw 0 0

In realtà questo file così scritto mi provoca un errore allo startup: l'opzione uid=1000,gid=1000,umask=0022,sync,auto,rw non viene riconosciuta. Potrei approfondire la questione, ma sulla scorta delle linee precedenti del file, modifico così quelle linee:

  UUID=04f61a26-657b-446c-aa9c-225ee0e204df /home/marcob/data1/ ext4 errors=remount-ro 0 0
  UUID=84d31ac2-2f02-4502-b638-e9c5ac334f38 /home/marcob/data2/ ext4 errors=remount-ro 0 0

Come conoscer il mio uid e gid?[modifica]

Semplice:

  marcob@jsbach:~$ id
  uid=1000(marcob) gid=1000(marcob) gruppi=1000(marcob),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),1001(jupiter)

.

Forzare Avanzamento (Upgrade) versione Ubuntu[modifica]

 sudo apt-get update && sudo apt-get dist-upgrade
 sudo update-manager -d

.

.

Lavorare coi gruppi[modifica]

Aggiungere un utente esistente ad un gruppo esistente[modifica]

  $ usermod -a -G www-data marcob

A quali gruppi appartengo?[modifica]

  $ groups marcob
  marcob : marcob adm cdrom sudo dip www-data plugdev fuse lpadmin sambashare

Link simbolici[modifica]

  $ ln -s nome_file_fisico nome_link

Esempio

  $ ln -s pippo pippolink
  $ ll
  -rw-rw-r--  1 marcob marcob        0 lug 17 10:13 pippo
  lrwxrwxrwx  1 marcob marcob        5 lug 17 10:13 pippolink -> pippo

KDE Dolphin[modifica]

Di solito uso Nautilus per sfogliare i dischi, ma sembra avere qualche noia con accessi ftp, samba e altri protocolli che non siano il file system locale. Però Dolphin funziona bene. Ho dovuto googlare un attimo per capire come fare un segnalibro verso un'unità di rete che uso spesso. È facile:

  • nel frame sinistro fare tasto desto e scegliere "Aggiungi Voce".
  • in questa finestra scrivere l'url (ad esempio "smb://username@server/unita_condivisa/") un'etichetta descrittiva e un'icona e premere OK. Basta.

Nautilus non funziona come client FTP[modifica]

Per la seconda volta mi capita questa eventualità, che ad un certo punto era sparita, ma mi sono scordato di prendere nota di cos'era successo quando era comparsa.

Tentando di usare Nautilus come client FTP mi compare l'errore che mi avverte che non si riesce a stabilire una connessione FTP.

Ho capito perché e stavolta me lo scrivo: disabilitare i proxy!! (Apri: Impostazioni di sistema > Rete > nessun proxy)

env[modifica]

Il comando env ci mostra le variabili di ambiente, che sono delle variabili a disposizione del sistema operativo per la configurazione.

Un esempio è la variabile PATH che contiene un elenco di percorsi separati da duepunti all'interno dei quali Linux cerca i programmi invocati da linea di comando.

  $ echo $PATH
  /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

per modificare una variabile di ambiente si usa il comando export; ad esempio io lo voglio usare per dire a PHP dove sono i client per collegarsi al database:

  $ export ORACLE_HOME="/opt/oracle/instantclient_12_1/"

C'è però l'inconveniente che la variabile ORACLE_HOME vive finché non si chiude la shell in cui è stata definita. Anzi, se apriamo una nuova shell, qui non vedremo la variabile.

Per renderla persistente e accessibile a tutti i processi si può inserire il comando di prima nel file .bashrc oppure in .profile o, ancora, in /etc/environment; La differenza tra questi tre file è che il primo definisce una variabile che sarà accessibile ai processi ma non sarà vista dal server X, nel secondo caso facciamo sì che tutti i processi di un certo utente la vedano e il terzo infine fa in modo che tutto il sistema e tutti gli utenti la possano utilizzare. Quindi è un crescendo di scope.

Avviare un backup con deja-dup[modifica]

Se si fa solo così

  $  deja-dup

non si avvia la GUI. Per avviare la GUI:

  $ deja-dup-preferences

e poi da lì si fa tutto (pianificazione, scelta delle cartelle da backuppare, scelta del disco di backup, avvio istantaneo del backup)


Telnet[modifica]

Avviare una sessione di Telnet[modifica]

  $ telnet 127.0.0.1 62
  Trying 127.0.0.1...
  Connected to 127.0.0.1.
  Escape character is '^]'.
  prova
  ciao

Chiudere una sessione di Telnet[modifica]

  ^]
  telnet> 
  telnet> quit
  Connection closed.
  $

Il carattere di escape, come dice lo stesso comando all'inizio, è ^]; per generarlo premere contemporaneamente Alt + Alt Gr + ]