Monday

Iniziare con BASH Un tutorial di Bash

Cos'è la Bash Shell?

File di configurazione di Bash

Modifica della Shell Bash con il comando Set


Comandi e caratteristiche utili








Cos'è la Bash Shell?


GNU Bourne-Again SHell (BASH) incorpora funzionalità dalla shell C (csh) e Korn Shell (ksh) e si conforma alle specifiche della shell POSTIX 2. Fornisce un'interfaccia a riga di comando (CLI) per lavorare su sistemi * nix ed è la shell più comune utilizzata su sistemi Linux. Le utili funzioni di bash saranno oggetto del resto di questo documento.


File di configurazione di Bash


Perché quello che voglio dire qui è già stato scritto Citerò la sezione "File usati da Bash" da "Personalizzazione del tuo ambiente Bash" di freeunix.dyndns.org


      Nella tua directory home, 3 file hanno un significato speciale per Bash, che ti consente di configurare automaticamente il tuo ambiente quando accedi e quando invochi un'altra shell Bash e ti consente di eseguire comandi quando esci.
      Questi file possono esistere nella tua home directory, ma questo dipende in gran parte dalla distro Linux che stai usando e da come il tuo sysadmin (se non tu) ha impostato il tuo account. Se mancano, Bash imposta automaticamente / etc / profile.
      Puoi facilmente creare questi file da solo usando il tuo texteditor preferito. Loro sono:
      • .bash_profile: read e i comandi in esso eseguiti da Bash ogni volta che si accede al sistema
      • .bashrc: letto ed eseguito da Bash ogni volta che si avvia una subshell
      • .bash_logout: letto ed eseguito da Bash ogni volta che esce una shell di login
      Bash consente 2 sinonimi per .bash_profile: .bash_login e .profile. Questi sono derivati ​​dal file della shell C denominato .login e dalla shell Bourne e dai file di shell Korn denominati .profile. Solo uno di questi file viene letto quando si accede. Se .bash_profile non è presente, Bash cercherà .bash_login. Se manca anche quello, cercherà .profile.
      .bash_profile viene letto ed eseguito solo quando si avvia una shell di login (ovvero, quando si accede al sistema). Se si avvia una subshell (una nuova shell) digitando bash al prompt dei comandi, leggerà i comandi da .bashrc. Ciò consente di separare i comandi necessari al login da quelli necessari quando si richiama una subshell.
      Tuttavia, la maggior parte delle persone desidera eseguire gli stessi comandi indipendentemente dal fatto che si tratti di una shell di login o di una subshell. Questo può essere fatto usando il comando source da dentro .bash_profile per eseguire .bashrc. Dovresti quindi semplicemente inserire tutti i comandi in .bashrc.



Questi file sono utili per l'esecuzione automatica di comandi come: set, alias, unalias e impostazione delle variabili PS (1-4), che possono essere utilizzati per modificare l'ambiente bash.



È possibile utilizzare il comando source per applicare le modifiche appena apportate in un file di configurazione. Ad esempio, se aggiungi un alias a / etc / profile per applicare le modifiche alla sessione corrente, esegui:



    $ fonte / etc / profilo
Gli alias attivi possono essere visualizzati eseguendo il comando alias. Alcuni file comuni che possono modificare alias sono: ~ / .bashrc, ~ / .bash_profile, ~ / .profile, / etc / bashrc, / etc / profile, file in /etc/profile.d.

Modifica della Shell Bash con il comando Set


Due opzioni che possono essere impostate utilizzando il comando set che sarà di interesse per l'utente comune sono "-o vi" e "-o emacs". Come con tutti i comandi di modifica dell'ambiente, questi possono essere digitati al prompt dei comandi o inseriti nel file appropriato menzionato sopra.


Imposta la modalità Emacs in Bash

    $ set -o emacs
Questa è solitamente la modalità di modifica predefinita quando si trova nell'ambiente bash e significa che è possibile utilizzare comandi come quelli in Emacs (definiti nella libreria Readline) per spostare il cursore, tagliare e incollare il testo o annullare la modifica.

Comandi per sfruttare la modalità Emacs di bash:

    ctrl-aSposta il cursore all'inizio della riga
    ctrl-eSposta il cursore alla fine della riga
    meta-bSposta il cursore indietro di una parola
    meta-fSposta il cursore in avanti di una parola
    ctrl-wTaglia l'ultima parola
    ctrl-uTaglia tutto prima del cursore 
    ctrl-kTaglia tutto dopo il cursore
    ctrl-yIncolla l'ultima cosa da tagliare
    ctrl-_Undo

      NOTA: ctrl- = hold control, meta- = hold meta (dove meta è solitamente l'alt o la chiave di escape).

      Una combinazione di ctrl-u per tagliare la linea combinata con ctrl-y può essere molto utile. Se sei nel mezzo di digitare un comando e devi tornare al prompt per recuperare ulteriori informazioni, puoi usare ctrl-u per salvare ciò che hai digitato e dopo aver recuperato le informazioni necessarie, ctrl-y recupererà ciò che è stato tagliato.

      Imposta la modalità Vi in Bash

        $ set -o vi

          La modalità Vi consente l'uso di comandi vi simili quando al prompt bash. Quando si imposta questa modalità inizialmente, ci si troverà in modalità di inserimento (essere in grado di digitare al prompt diversamente da quando si entra in vi). Premendo la chiave di escape si accede alla modalità di comando.

          Comandi per sfruttare la modalità Vi di bash:
    hSposta il cursore a sinistra
    lSposta il cursore a destra
    ASposta il cursore alla fine della riga e inserisci la modalità di inserimento
    0(zero) Sposta il cursore all'inizio della riga (non inserisce la modalità di inserimento) 
    iMetti in modalità inserimento nella posizione corrente
    aMetti in modalità inserimento dopo la posizione corrente
    ddElimina riga (salvata per incollare)
    DElimina il testo dopo la posizione corrente del cursore (salvata per incollare)
    pIncolla il testo che è stato cancellato
    jSpostati tra i comandi della cronologia
    kSpostati verso il basso attraverso i comandi della cronologia
    uDisfare

Comandi e caratteristiche utili

I comandi in questa sezione non sono specifici della modalità, diversamente da quelli elencati sopra.

Capovolgi gli ultimi due personaggi

Se digiti come me le tue dita sputano fuori i personaggi nell'ordine sbagliato in occasione. ctrl-t scambia l'ordine in cui appaiono gli ultimi due caratteri.

Ricerca nella cronologia di Bash

Quando si immettono i comandi sulla CLI, vengono salvati in un file ~ ./. Bash_history. Dal prompt di bash puoi sfogliare i comandi utilizzati più di recente attraverso i comandi utilizzati meno di recente premendo la freccia su. Premendo la freccia giù fa il contrario.

Se hai inserito un comando molto tempo fa e devi eseguirlo di nuovo, puoi cercarlo. Digita il comando 'ctrl-r' e inserisci il testo che vuoi cercare.

Trattare con spazi

Innanzitutto, menzionerò alcuni modi per gestire gli spazi nei nomi delle directory, i nomi dei file e ovunque.

Utilizzo della sequenza di escape Backslash

Un'opzione è usare il carattere di escape di bash \. Qualsiasi spazio che segue il backslash viene considerato parte della stessa stringa. Questi comandi creano una directory chiamata "foo bar" e quindi la rimuovono

    $ mkdir foo\ bar
    $ rm -r foo\ bar

La sequenza di escape backslash può anche essere utilizzata per decodificare comandi incorporati in stringhe che possono essere molto utili per lo scripting o la modifica del prompt dei comandi, come discusso in seguito.

Utilizzo di virgolette singole / doppie con spazi e variabili

Le virgolette singole e doppie possono essere utilizzate anche per gestire spazi.

    $ touch 'cacca di cane'
    $ rm "cane cacca"

La differenza tra virgolette singole e doppie è che nelle virgolette doppie i caratteri $, \, e 'conservano ancora i loro significati speciali. Le virgolette singole prenderanno $ e \ letteralmente e considereranno la fine della stringa. Ecco un esempio:

    $ MY_VAR = 'Questo è il mio testo'
    $ echo $MY_VAR
    Questo è il mio testo
    $ echo "$MY_VAR"
    Questo è il mio testo
    $ echo '$MY_VAR'
    $MY_VAR

La stringa che segue il carattere $ viene interpretata come una variabile tranne quando è racchiusa tra virgolette singole come mostrato sopra.

Elenchi che utilizzano {e}

I caratteri {e} consentono la creazione della lista. In altre parole, è possibile eseguire un comando su ciascun elemento nell'elenco. Questo è forse meglio spiegato con esempi:

    $ tocco {temp1,temp2,temp3,temp4}

Questo creerà / modificherà i file temp1, temp2, temp3 e temp4 e come nell'esempio sopra quando i file condividono parti comuni del nome che puoi fare:

    $ mv temp{1,2,3,4} ./foo\ bar/
    Questo sposta tutti e quattro i file in una directory 'foo bar'.

    Esecuzione di comandi multipli in sequenza

    Questo è un titolo pesante per un compito semplice. Se vuoi eseguire tre comandi, uno subito dopo l'altro, puoi scriverli su una singola riga:

      $ ./configure; rendere; fare installareO$ ./configure; rendere; fare installare
    Con il primo se ./configure fallisce, gli altri due comandi continueranno ad essere eseguiti. Con il secondo i comandi che seguono il && verranno eseguiti solo se il comando precedente termina senza errori. Quindi, il secondo sarebbe più utile per questo esempio perché non c'è motivo di eseguire "make" o "make install" se la configurazione fallisce.

    Piping Output da un comando all'altro

    Piping consente all'utente di fare diverse cose fantastiche, combinando le utilità. Tratterò solo gli usi molto basilari per le tubazioni. Di solito uso il comando pipe, |, per pipe testo che viene emesso da un comando attraverso il comando grep per cercare il testo.
      Esempi:
      Verifica se un programma, centericq, è in esecuzione:
        $ ps ax | grep centericq
        25824 pts / 2 S 0:18 centericq
      Conta il numero di file in una directory (nl conta le cose):
        $ ls | nl
        1 #.emacs#
        2 BitchX
        3 Outcast double cd.lst
        4 bm.shader
        5 bmtexturesbase.pk3
      Se la memoria utilizza l'RPM per verificare se è installato un pacchetto:
        $ rpm -qa | grep nome_pacchetto
      Un esempio più avanzato:
        $ cat /etc/passwd | awk -F: '{print $1 "\t" $6}' | sort > ./utenti
      Questa sequenza prende le informazioni se il file passwd, le canalizza in awk, che prende rispettivamente il primo e il sesto campo (rispettivamente il nome utente e la directory home), divide questi campi separati da una tabulazione ("\ t") per ordinare, che ordina l'elenco in ordine alfabetico e lo inserisce in un file chiamato utenti.
Comandi di aliasing

Ancora una volta mi piace come questo argomento è trattato su freeunix.dyndns.org:8088 in "Personalizzare il tuo ambiente Bash" citerò la sezione "Aliasses":


    Se hai usato UNIX per un po ', saprai che ci sono molti comandi disponibili e che alcuni di loro hanno nomi molto criptici e / o possono essere invocati con un carico di opzioni e argomenti. Quindi, sarebbe bello avere una funzionalità che ti consenta di rinominare questi comandi o di digitare qualcosa di semplice invece di un elenco di opzioni. Bash fornisce una funzionalità di questo tipo: l'alias.

    Aliasses può essere definito sulla riga di comando, in .bash_profile o in .bashrc, usando questo modulo:



     alias nome = comando



    Ciò significa che il nome è un alias per il comando. Ogni volta che il nome viene digitato come comando, Bash sostituirà il comando al suo posto. Nota che non ci sono spazi su entrambi i lati del segno di uguale. Le virgolette attorno al comando sono necessarie se la stringa alias è composta da più di una parola. Alcuni esempi:



    alias ls = 'ls -aF --color = sempre'

    alias ll = 'ls -l'

    alias search = grep

    alias mcd = 'mount / mnt / cdrom'

    alias ucd = 'umount / mnt / cdrom'

    alias mc = 'mc -c'

    alias .. = 'cd ..'
    alias ... = 'cd ../ ..' 

    Il primo esempio garantisce che ls usa sempre il colore se disponibile, che i dotfiles sono elencati, che le directory sono contrassegnate con un / e eseguibili con un *. Per fare in modo che io faccia lo stesso su FreeBSD, l'alias diventerebbe:

    alias ls='/bin/ls -aFG'

    Per vedere quali alias sono attualmente attivi, digita semplicemente alias al prompt dei comandi e verranno elencati tutti gli alias attivi. Per "disabilitare" unalias di tipo alias seguito dal nome dell'alias.



Modifica del prompt dei comandi Aspetto e informazioni

Bash ha la capacità di cambiare il modo in cui il prompt dei comandi viene visualizzato nelle informazioni e nel colore. Questo viene fatto impostando la variabile PS1. C'è anche una variabile PS2. Controlla ciò che viene visualizzato dopo aver aggiunto una seconda riga di prompt e di solito è '>'. La variabile PS1 è solitamente impostata per mostrare alcune informazioni utili dalla distribuzione Linux in esecuzione, ma potresti voler guadagnare punti stile apportando le tue modifiche.

Ecco i caratteri speciali di backslash-escape che hanno significato per bash:

     \ a un carattere campana ASCII (07)
     \ d la data nel formato "Data del giorno della settimana"
            (e.g., "Tue May 26")
     \ e un carattere di escape ASCII (033)
     \ h il nome host fino al primo `. '
     \ H il nome host
     \ j il numero di lavori attualmente gestiti dalla shell
     \ l il nome di base del nome del dispositivo terminale della shell
     \ n newline
     \ r ritorno a capo
     è il nome della shell, il nome di base di $ 0
            (la parte che segue la barra finale)
     \ t l'ora corrente nel formato HH: MM: SS di 24 ore
     \ T l'ora corrente nel formato HH: MM: SS di 12 ore
     \ @ l'ora corrente nel formato am / pm delle 12 ore
     il nome utente dell'utente corrente
     \ v la versione di bash (ad es., 2,00)
     \ V il rilascio di bash, versione + patchlevel
            (ad esempio, 2.00.0)
     \ w la directory di lavoro corrente
     \ W il nome di base della directory di lavoro corrente
     \! il numero di cronologia di questo comando
     \ # il numero di comando di questo comando
     \ $ se l'UID effettivo è 0, un #, altrimenti un $
     \ nnn il carattere corrispondente al numero ottale nnn
     \\ un backslash
     \ [inizia una sequenza di caratteri non stampabili,
            che potrebbe essere usato per incorporare un controllo terminale
            sequenza nel prompt
     \] termina una sequenza di caratteri non stampabili

Colori In Bash:

    Nero            0;30           Grigio scuro   1;30
    Blu             0;34           Azzurro        1;34
    Verde           0;32           Verde chiaro   1;32
    Ciano           0;36           Ciano chiaro   1;36
    Rosso           0;31           Rosso chiaro   1;31
    Viola           0;35           Viola chiaro   1;35
    Marrone         0;33           Giallo         1;33
    Grigio chiaro   0;37           Bianco         1;37

Ecco un esempio preso in prestito da Bash-Richiesta-COME:

    PS1="\[\033[1;34m\][\$(data +%H%M)][\u@\h:\w]$\[\033[0m\] "

Ciò trasforma il testo in blu, visualizza il tempo tra parentesi (molto utile per non perdere la cognizione del tempo durante il lavoro) e visualizza il nome utente, l'host e la directory corrente racchiusi tra parentesi. Il "\ [\ 033 [0m \]" che segue $ restituisce il colore al colore di primo piano precedente.

Che ne dici di una modifica del prompt dei comandi è un po 'più "carina":

    PS1="\[\033[1;30m\][\[\033[1;34m\]\u\[\033[1;30m\]@\[\033[0;35m\]\h\[\033[1;30m\]] \[\033[0;37m\]\W \[\033[1;30m\]\$\[\033[0m\] "

Questo imposta un prompt come questo: [user @ host] directory $

Abbattersi:

    \[\033[1;30m\] - Imposta il colore per i personaggi che lo seguono. Qui 1; 30 le imposterà su Dark Grey.
    \u \h \W \$ - Guarda la tabella sopra
    \[\033[0m\] - Imposta i colori su come erano originariamente.

Ogni utente di un sistema può avere il proprio prompt personalizzato impostando la variabile PS1 nei file .bashrc o .profile situati nelle proprie directory home.

COSE DIVERTENTI!

Una breve nota su bashish. Consente di aggiungere temi a un terminale in esecuzione sotto una GUI. Controlla il sito per alcune schermate di ciò che può fare.

Inoltre, la fortuna del programma è d'obbligo [Almeno l'ho considerata così fin dai tempi della mia Slackware (è l'impostazione predefinita)]. Non ha nulla a che fare con bash ed è un programma che emette un preventivo sullo schermo. Sono disponibili numerosi componenti aggiuntivi per fare in modo che vengano fornite informazioni sulla programmazione, su xfiles, futurama, starwars e altro. Basta aggiungere una riga nel tuo / etc / profile come questo per rendere più luminosa la tua giornata quando accedi al tuo computer:

    echo;fortuna;echo

CDargs - Segnalibri Shell

Impressionate i vostri amici e colleghi con il cambio di directory più veloce e leggero usando lo strumento di bookmarking di CDargs. CDargs non è esclusivo di BASH, ma è una grande aggiunta e funziona su sistemi basati su * nix, incluso OS X. Scarica CDargs qui in source o rpm.

CDargs consente di impostare i segni denominati nelle directory e di spostarsi rapidamente usando il comando cdb o una vista ncurses.

Installare

  • Compila / installa fonte
  • Sposta cdargs-bash.sh in / etc
  • Aggiungi questa riga al tuo file .bashrc degli utenti
      source /etc/cdargs-bash.sh
  • Relogin o avvia source ~ / .bashrc


uso



marchio



Segna una directory che vuoi raggiungere rapidamente in futuro. Passare alla directory desiderata e digitare mark <name> o semplicemente contrassegnare per farlo prendere il nome della directory corrente. Puoi anche contrassegnare una directory usando lo strumento ncurses. Esegui cdargs o cdb per avviare lo strumento ncurses. Aggiungi un nuovo segno premendo a.



CDB

Ora hai un sacco di directory marcate. Basta digitare cdb <nome di un segno> per spostarsi nella directory marcata. In alternativa, utilizzare cdb e navigare con le frecce o il numero fino al segno desiderato.

gestire

Avvia lo strumento ncurses cdb. Alcuni tasti utili per il thump:

    a                   aggiungi un nuovo segno
    d                   cancella il segno
    e                   modifica il segno
    right left arrows   spostati dentro e fuori dalle directory
    l                   elenca i file nella directory evidenziata
    c                   fare una copia di un marchio
    enter               vai alla directory / mark selezionata

Puoi anche modificare il file di testo ~ / .cdargs direttamente per gestire i segni

Completamento basico di base ed esteso

Basic Bash Completion funzionerà in qualsiasi shell bash. Permette il completamento di:

  1. Nomi di file
  2. Nomi delle directory
  3. Nomi eseguibili
  4. Nomi utente (quando sono preceduti da un ~)
  5. Nomi host (quando sono preceduti da un @)
  6. Nomi di variabili (quando hanno un prefisso con $)
Questo viene fatto semplicemente premendo il tasto tab dopo aver digitato una quantità sufficiente della parola che stai cercando di completare. Se quando premi la scheda non viene completata la parola ci sono probabilmente più possibilità per il completamento. Premere nuovamente il tasto Tab e questo elencherà le possibilità.

Si noti che quando si completa un nome utente usando '~' il completamento risultante sarà la directory home dell'utente. Per esempio. "ls ~ myus" completerebbe "ls ~ myuser /" e l'esecuzione mostrerebbe il contenuto della home directory di myuser.

Extended Bash Completion programmabile è un programma che puoi installare per completare molto più dei nomi delle cose elencate sopra. Con il completamento di bash esteso è possibile, ad esempio, completare il nome di un computer con cui si sta tentando di connettersi con ssh o scp. Ciò si ottiene esaminando il file known_hosts e utilizzando gli host elencati per il completamento. Questo è altamente personalizzabile e il pacchetto e ulteriori informazioni possono essere trovati qui.

La configurazione del completamento programmabile di Bash viene eseguita in / etc / bash_completion. Ecco una lista di completamenti che sono nel mio file bash_completion per impostazione predefinita.

    • completa sui nomi dei segnali
    • completa su interfacce di rete
    • espande le tilde nei nomi dei percorsi
    • completa su ID processo
    • completa su ID gruppo di processi
    • completa su ID utente
    • completa su ID di gruppo
    • ifconfig (8) e iwconfig (8) funzione di aiuto
    • completamento alias di bash
    • completamento dell'esportazione di bash
    • completamento della funzione shell bash
    • bash completamento completo
    • completamento del servizio
    • completamento chown (1)
    • completamento di chgrp (1)
    • completamento umount (8)
    • montaggio (8) completamento
    • Completamento di Linux rmmod (8)
    • Completamento di Linux insmod (8), modprobe (8) e modinfo (8)
    • man (1) completamento
    • completamento di renice (8)
    • uccidere (1) completamento
    • Completamento di Linux e FreeBSD killall (1)
    • GNU find (1) completamento
    • Completamento di Linux ifconfig (8)
    • Completamento di Linux iwconfig (8)
    • RedHat e Debian GNU / Linux se il completamento è {up, down}
    • Completamento di Linux ipsec (8) (per FreeS / WAN)
    • Completamento postfix
    • cvs (1) completamento
    • completamento del rpm
    • completamento apt-get (8)
    • chsh (1) completamento
    • completamento chkconfig (8)
    • completamento utente @ host
    • completamento dell'host basato su known_hosts di ssh
    • ssh (1) completamento
    • scp (1) completamento
    • rsync (1) completamento
    • Completamento di Linux route (8)
    • Completamento di GNU make (1)
    • Completamento di GNU tar (1)
    • completamento del vaso (1)
    • Completamento di Linux iptables (8)
    • completamento tcpdump (8)
    • completamento autorpm (8)
    • formica (1) completamento
    • mysqladmin (1) completamento
    • gzip (1) completamento
    • bzip2 (1) completamento
    • openssl (1) completamento
    • schermo (1) completamento
    • completamento del segnalibro lftp (1)
    • ncftp (1) completamento segnalibro
    • gdb (1) completamento
    • Completamento Postgresql
    • completamento di psql (1)
    • createdb (1) completamento
    • completamento dropdb (1)
    • gcc (1) completamento
    • Completamento di Linux cardctl (8)
    • Completamento di Debian dpkg (8)
    • Completamento di Debian GNU dpkg-reconfigure (8)
    • Completamento di Debian Linux dselect (8)
    • Completamento Java
    • Completamento del libro di indirizzo PINE
    • completamento mutt
    • Completamento Debian reportbug (1)
    • Completamento di Debian querybts (1)
    • completamento aggiornamento-alternative
    • Completamento di Python
    • Completamento Perl
    • rcs (1) completamento
    • lilo (8) completamento
    • collega il completamento
    • Completamento dello strumento di gestione dei pacchetti di FreeBSD
    • Comandi del modulo del kernel di FreeBSD
    • Completamento del portupgrade di FreeBSD
    • Completamento del portinstall di FreeBSD
    • Slackware Linux rimuove il completamento
    • aspetto (1) completamento
    • completamento ypcat (1) e ypmatch (1)
    • completamento mplayer (1)
    • Completamento dcop di KDE
    • wvdial (1) completamento
    • gpg (1) completamento
    • iconv (1) completamento
    • dict (1) completamento
    • completamento di cdrecord (1)
    • completamento di mkisofs (8)
    • mc (1) completamento
    • completamento yum (8)
    • completamento yum-arch (8)
    • Completamento di ImageMagick


contributi

Grazie a Michael Klement per le note sull'utilizzo del completamento di bash con i nomi utente.

Grazie Andrew Hart per avermi informato sull'errore non ricorsivo quando si elimina una directory.

Grazie Paul Carey per aver segnalato un errore di codice colore bash.

Grazie Matt Spaulding per lo scoop su CDargs.

Grazie Thomas per aver sottolineato la differenza tra; e && quando si eseguono più comandi su una riga.

Grazie a Bruce Langston per la correzione dell'URL BASHISH sotto Link.

Grazie a Scott Pedigo per ulteriori informazioni sull'alias. <P>

Grazie Steve Long per ulteriori collegamenti e riferimenti.

Grazie a Mukhtar Sharif per la correzione a BASH tramite link di esempio.


Originale in inglese: http://www.hypexr.org/bash_tutorial.php


No comments:

Post a Comment