Che cosa dovrebbero sapere gli sviluppatori sui sistemi basati su UNIX?

8

Sono un po 'sorpreso che questo non sia stato ancora chiesto a nessuno, ma ad alto livello, cosa dovrebbe sapere ogni sviluppatore di lavorare con i sistemi basati su UNIX?

La mia esperienza di * nix è molto limitata, perché non ho assolutamente alcun motivo per usarla su Windows per i miei scopi, ma ho due interviste in cui le aziende preferiscono idealmente qualcuno con esperienza * nix. Non ho problemi a familiarizzarlo se fanno un'offerta che voglio prendere, ma non vale la pena investire quando la maggior parte delle mie offerte si occupa di sistemi Windows; si spera che sia comprensibile.

Quali strumenti dovrei sapere? Qualche stranezza di cui dovrei essere a conoscenza? Esistono risorse valide e concise che possono essere lette rapidamente per ottenere una comprensione generale?

    
posta rwar 01.08.2011 - 01:56
fonte

4 risposte

8

Oltre alle basi come usare la riga di comando e così via, penso che il fondamentale sia capire come è strutturato il sistema.

Penso che la più grande differenza quando si proviene da Windows a Unix è capire come si integri il sistema. Windows si combina per mezzo della sua API e componenti del sistema operativo come COM. Sebbene questo sia spesso astratto dal programmatore, uno per la codifica per molto tempo saprà del modello di threading COM, GDI e così via. Unix si adatta in un modo completamente diverso. Unix si basa sull'idea di costruire piccoli componenti e di costruire sistemi più grandi da loro usando IPC (spesso attraverso semplici pipe).

Chiedete una risorsa concisa e, almeno per me, l'unico punto di partenza per capire come funziona Unix come ambiente di programmazione è il libro di Kernighan e Pike Ambiente di programmazione Unix . Sebbene il libro stesso sia un po 'datato, è l'esempio perfetto di quale sia la filosofia Unix e di come si possa sfruttare il "modo Unix" durante la codifica.

Se riesci a sfogliare almeno le sue pagine, capirai come usare Unix per aiutarti a creare programmi migliori. Anche se ti identifichi come un ragazzo di Windows, le conoscenze che otterrai da esso sono più o meno universali come i modelli di progettazione o le pratiche di ingegneria del software.

Se vuoi saperne di più - forse per il tuo lavoro o forse solo perché ti è piaciuto - dopo aver letto l'ambiente di programmazione di Unix, dai il Una programmazione avanzata nell'ambiente UNIX (R) di Stevens. Completa bene il libro di Kernighan e Pike e, dopo entrambi, avrai coperto la maggior parte di ciò che mi aspetto che un programmatore Unix sappia. C'è anche un libro di Stevens sulla programmazione di rete, è anche raccomandato.

Oltre a Linux, ci sono due OS che vale la pena provare: uno è Plan9 , che in qualche modo è un Unix migliore di Unix e l'altro è OpenBSD . OpenBSD è costruito da un piccolo team, quindi è molto coerente ed è molto ben documentato, quindi è divertente girarci intorno.

    
risposta data 01.08.2011 - 03:26
fonte
5

Se un'organizzazione utilizza sistemi operativi di tipo Unix, tutti gli sviluppatori dovrebbero conoscere i comandi di base del terminale per navigare nella struttura dei file, creare nuovi file e directory, eliminare file, strumenti di compilazione della riga di comando, usando il controllo della versione sul comando linea, e forse script di shell di base per aiutare ad automatizzare le attività ripetitive. Secondo me, la potenza del terminale e la disponibilità di strumenti da riga di comando su sistemi Unix è un enorme vantaggio, insieme alla facilità con cui scrivere script per automatizzare una serie di compiti complessi che potresti eseguire su un normale base.

Ci sono un certo numero di applicazioni a linea di comando che potresti voler familiarizzare con. Strumenti come cat , grep , head , tail , more e less sono utili per un numero di attività, che vanno dalla ricerca di file per trovare corrispondenze di testo, alla lettura del registro file per aiutare nelle applicazioni di debug. La possibilità di utilizzare pipe e feed output tramite queste applicazioni è utile anche per aiutarti a analizzare le informazioni disponibili.

Anche la conoscenza di uno dei principali editor di testo (vi o emacs) sarebbe utile. Quello che usi è un'opinione personale, ma ti consiglierei di usare quello che usa la tua squadra (in questo modo, se hai domande, ci sarà qualcuno nel tuo team per rispondere). Nelle mie esperienze, molti sviluppatori "hardcore" di Unix preferiscono questi strumenti agli IDE. Io preferisco un IDE (anche in un ambiente simile a Unix), ma gli editor di testo hanno i loro vantaggi nella lettura dei file. La loro natura da riga di comando semplifica la ricerca nei file con gli strumenti che ho menzionato nell'ultimo paragrafo e quindi apre tutti i file corrispondenti all'interno di uno di questi editor.

Oltre all'utilizzo degli strumenti forniti con il sistema operativo, dovrai anche essere consapevole delle differenze nelle librerie. Le librerie che effettuano chiamate di sistema (le cose che coinvolgono il threading vengono in mente, come esempio specifico) saranno probabilmente diverse nei sistemi operativi. Anche i makefile con flag da compilare su un'architettura specifica o per un sistema operativo specifico potrebbero introdurre dei problemi. Sapere quale / i sistema / i utilizzato / i viene usato / renderà più semplice - puoi trovare riferimenti che spiegano come implementare certe funzioni all'interno di quel sistema operativo. Tuttavia, questo è qualcosa che mi aspetto che tu sia in grado di riprendere sul posto di lavoro (specialmente per i sistemi operativi che sono tipicamente utilizzati in ambienti aziendali e che gli individui non hanno spesso accesso, come ad esempio Solaris). / p>     

risposta data 01.08.2011 - 02:17
fonte
3

Il libro che ho usato nella mia classe UNIX è stato "UNIX per programmatori e utenti" di Glass and Ables. Buona introduzione ai comandi di sistema, strumenti di archiviazione e programmazione, panoramica di sistema e di rete e varie shell. Abbastanza breve, anche se un po 'costoso nuovo. Disponibile in un gusto Linux .

Per maggiore profondità: "Interfaccia di programmazione Linux" . Non è un'introduzione leggera, ma se mai avessi bisogno di un manuale di riferimento per terminare tutti i manuali di riferimento sulla programmazione a livello di sistema sui sistemi familiari * nix, sceglierei questo.

    
risposta data 01.08.2011 - 02:16
fonte
-1

Prima di tutto, ti consiglio di installare ubuntu , che è un buon punto di partenza, in una partizione del tuo computer. Prova a giocarci un po '. Ad esempio, guardando un video con strani codec ... Allora probabilmente dovrai usare il terminale per eseguire alcuni comandi di apt-get install , e bang! stai imparando come usare un sistema simile a Unix. Questo è tutto. Inizia la codifica e sentirai la necessità di imparare mentre codifichi.

Un elenco rapido che viene in mente:

  1. apt-get - come installare i pacchetti
  2. top - processi in esecuzione
  3. ps - elenca i processi, scorciatoia: ps -fea | grep "nome_procedura"
  4. kill -9 PID - kill a process
  5. sudo cmd - esegue il comando con i permessi di root
  6. file vi - apre l'editor rapido, google per vi e impara come usarlo
  7. gedit - impara come usarlo e espanderlo con i plugin (potrebbe funzionare molto bene come un IDE completo)
  8. tail -fn500 file - calcola un file e stampa le ultime 500 righe, molto utile per controllare i log
  9. man cmd - uomo !!! dovrebbe essere stato il primo della lista ... Fondamentalmente avrai tutto l'aiuto di cui hai bisogno riguardo un comando chiamato cmd
  10. impara gli script di .sh bash. Google e aggiungilo al tuo kit di strumenti per programmatori. Un giorno lo userai.
  11. cartella cd - navigazione
  12. ls - elenca i file in una directory
  13. ll - shorcut a ls -l, elenca i file con i dettagli

Se sei disposto a sapere veramente come funziona un sistema operativo e come funzionano i sistemi di tipo Unix, dai un'occhiata a minix e leggendo il libro OS di Tanenbaum .

    
risposta data 01.08.2011 - 02:18
fonte

Leggi altre domande sui tag