Zoeken…


Invoering

De shell voert een programma uit als reactie op de prompt. Wanneer u een opdracht geeft, zoekt de shell naar het programma en voert het vervolgens uit. Wanneer u bijvoorbeeld de opdracht ls geeft, zoekt de shell naar het hulpprogramma / programma met de naam ls en voert deze vervolgens uit in de shell. De argumenten en de opties die u bij de hulpprogramma's verstrekt, kunnen van invloed zijn op het resultaat dat u krijgt. De shell is ook bekend als een CLI of opdrachtregelinterface.

Standaardshell wijzigen

De meeste moderne distributies worden geleverd met BASH ( B ourne A gain SH ell) vooraf geïnstalleerd en geconfigureerd als standaardshell.

Het commando (eigenlijk een uitvoerbaar binair bestand, een ELF) dat verantwoordelijk is voor het wijzigen van shells in Linux is chsh ( ch ange sh ell).

We kunnen eerst controleren welke shells al op onze machine zijn geïnstalleerd en geconfigureerd met behulp van de opdracht chsh -l , die een vergelijkbaar resultaat zal geven:

[user@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish

In sommige Linux-distributies is chsh -l ongeldig. In dit geval is de lijst met alle beschikbare shells te vinden in het bestand / etc / shells. U kunt de inhoud van het bestand weergeven met cat :

[user@localhost ~]$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish

Nu kunnen we onze nieuwe standaardshell, bijvoorbeeld fish , kiezen en deze configureren met behulp van chsh -s ,

[user@localhost ~]$ chsh -s /usr/bin/fish
Changing shell for user.
Password: 
Shell changed.

Nu hoeft u alleen nog maar een uitlog-aanmeldcyclus uit te voeren en te genieten van onze nieuwe standaardshell.

Als je de standaardshell voor een andere gebruiker wilt wijzigen en je hebt beheerdersrechten op de machine, kun je dit bereiken door chsh als root . Aangenomen dat we de standaardshell van user_2 willen wijzigen in fish, gebruiken we dezelfde opdracht als hiervoor, maar met de toevoeging van de gebruikersnaam van de andere gebruiker, chsh -s /usr/bin/fish user_2 .

Om te controleren wat de huidige standaardshell is, kunnen we de omgevingsvariabele $SHELL , die verwijst naar het pad naar onze standaardshell, dus na onze wijziging verwachten we een vergelijkbaar resultaat,

 ~  echo $SHELL                                 
/usr/bin/fish

chsh opties:

-s shell

Stelt shell in als de login-shell.

-l , --list-shells

Druk de lijst met shells in / etc / shells af en sluit af.

-h , --help

Druk een gebruikersbericht af en sluit af.

-v , --version

Informatie over de versie afdrukken en afsluiten.

Basic Shell-hulpprogramma's


De Shell-prompt aanpassen

Standaardopdrachtprompt kan worden gewijzigd om er anders en kort uit te zien. In het geval dat de huidige map lang is, wordt de opdrachtprompt te groot. Het gebruik van PS1 wordt in deze gevallen nuttig. Een kort en op maat gemaakt commando mooi en elegant. In de onderstaande tabel is PS1 gebruikt met een aantal argumenten om verschillende vormen van shell-prompts weer te geven. Standaard opdrachtprompt ziet er ongeveer zo uit: user@host ~ $ in mijn geval ziet het er zo uit: bruce@gotham ~ $ . Het kan worden gewijzigd volgens de onderstaande tabel:

Commando Nut
PS1 = '\ w $' ~ $ shell-prompt als mapnaam. In dit geval is de rootmap Root.
PS1 = '\ h $' gotham $ shell-prompt als hostnaam
PS1 = '\ u $' bruce $ shell prompt als gebruikersnaam
PS1 = '\ t $' 22:37:31 $ shell-prompt in 24-uursnotatie
PS1 = '@ $' 10:37 PM shell-prompt in 12-uurs tijdnotatie
PS1 = '! $ ' 732 toont het geschiedenisnummer van de opdracht in plaats van de shell-prompt
PS1 = 'kerel $' dude $ zal de shell-prompt tonen zoals jij dat wilt

Enkele basis shell-opdrachten

Commando Nut
Ctrl-k cut / kill
Ctrl-y yank / plakken
Ctrl-a brengt de cursor naar het begin van de regel
Ctrl-e verplaatst de cursor naar het einde van de regel
Ctrl-d verwijdert het teken achter / bij de cursor
Ctrl-l zal het scherm / de terminal wissen
Ctrl-u zal alles wissen tussen de prompt en de cursor
Ctrl-_ zal het laatste wat op de opdrachtregel wordt getypt ongedaan maken
Ctrl-c zal de taak / het proces op de voorgrond onderbreken / stoppen
Ctrl-r omgekeerd zoeken in de geschiedenis
~/.bash_history slaat de laatste 500 opdrachten / gebeurtenissen op die in de shell worden gebruikt
history toont de opdrachtgeschiedenis
history | grep <key-word> toont alle opdrachten in de geschiedenis met trefwoord <key-word> (handig in gevallen waarin u zich een deel van de in het verleden gebruikte opdracht herinnert)

Maak uw eigen opdrachtalias

Als je het beu bent om lange opdrachten in bash te gebruiken, kun je je eigen opdrachtalias maken.

De beste manier om dit te doen is om een bestand met de naam .bash_aliases in uw thuismap te wijzigen (of te maken als dit niet bestaat). De algemene syntaxis is:

alias command_alias='actual_command'

waarbij actual_command het commando is dat je hernoemt en command_alias de nieuwe naam is die je het hebt gegeven. Bijvoorbeeld

alias install='sudo apt-get -y install'

wijst de nieuwe opdracht alias install aan de daadwerkelijke opdracht sudo apt-get -y install . Dit betekent dat wanneer u install in een terminal gebruikt, dit door bash wordt geïnterpreteerd als sudo apt-get -y install .

Zoek een bestand op uw systeem

Met bash kun je eenvoudig een bestand locate met de opdracht locate . Stel bijvoorbeeld dat u op zoek bent naar het bestand mykey.pem:

locate mykey.pem

Soms hebben bestanden vreemde namen, bijvoorbeeld een bestand zoals random7897_mykey_0fidw.pem . Stel dat u dit bestand zoekt, maar u herinnert zich alleen de onderdelen mykey en pem. Je zou de locate kunnen combineren met grep met behulp van een pijp als deze:

locate pem | grep mykey

Dat zou alle resultaten opleveren die beide delen bevatten.

Merk op dat niet alle systemen het locate geïnstalleerd, en veel die dit niet hebben ingeschakeld. locate is snel en efficiënt omdat het uw systeem periodiek scant en de namen en locaties voor elk bestand in het cachegeheugen opslaat, maar als die gegevensverzameling niet is ingeschakeld, kan het u niets vertellen. U kunt updatedb gebruiken om de scan van het bestandssysteem handmatig te starten om de informatie in de cache over bestanden op uw bestandssysteem bij te werken.

Beschikt u niet over een werkende locate , kun je terugvallen op de find nut:

find / -name mykey.pem -print

is ongeveer gelijk aan locate mykey.pem maar moet uw bestandssysteem (en) elke keer scannen wanneer u het voor het betreffende bestand uitvoert, in plaats van gegevens in de cache te gebruiken. Dit is duidelijk langzamer en minder efficiënt, maar realtime. De find programma kan veel meer doen dan vinden bestanden, maar een volledige beschrijving van de mogelijkheden is buiten het bestek van dit voorbeeld.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow